36 lines
1.2 KiB
PHP
36 lines
1.2 KiB
PHP
<?php
|
|
|
|
namespace App\Signature;
|
|
|
|
/**
|
|
* Choix du template d'un agent à partir de ses groupes (sans dépendance au framework).
|
|
* Règle : parmi les affectations dont le groupe contient l'agent, la priorité la plus haute l'emporte ;
|
|
* à priorité égale, l'affectation la plus ancienne (id le plus petit) gagne, pour un résultat stable.
|
|
* Aucun groupe correspondant : template par défaut du tenant (ou null).
|
|
*/
|
|
final class TemplateSelector
|
|
{
|
|
/**
|
|
* @param array<int, array{id:int, template_id:int, group_id:int, priority:int}> $assignments
|
|
* @param array<int, int> $userGroupIds
|
|
*/
|
|
public function select(array $assignments, array $userGroupIds, ?int $defaultTemplateId): ?int
|
|
{
|
|
$groups = array_flip($userGroupIds);
|
|
$best = null;
|
|
|
|
foreach ($assignments as $a) {
|
|
if (! isset($groups[$a['group_id']])) {
|
|
continue;
|
|
}
|
|
if ($best === null
|
|
|| $a['priority'] > $best['priority']
|
|
|| ($a['priority'] === $best['priority'] && $a['id'] < $best['id'])) {
|
|
$best = $a;
|
|
}
|
|
}
|
|
|
|
return $best['template_id'] ?? $defaultTemplateId;
|
|
}
|
|
}
|