Files
2026-09-30 16:27:32 +02:00

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;
}
}