45
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user