fix(absences) : garde-fou solde négatif à l'approbation + cohérence fixture
- AbsenceBalanceService::availableForRequest() : jours disponibles (acquis N-1 + en cours N − pris) pour la période de la demande, null si type non suivi. - Blocage de l'approbation si countedDays > disponible, dans les deux chemins (REST AbsenceReviewProcessor + MCP ReviewAbsenceRequestTool), comme le motif décès. Les CP en cours d'acquisition restent posables, mais pas au-delà du droit total (plus de solde négatif silencieux à l'approbation). - Fixture : demande pending CP d'alice replacée dans sa période de référence 2025-2026 (26→29/05/2026, 4 j ouvrés) et solde pending aligné (5 → 4) ; plus de "en attente" orphelin non lié à une demande. - Test fonctionnel testApproveBeyondAvailableBalanceIsBlocked + employé de test doté d'un droit pour que les approbations existantes passent le garde-fou. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -686,8 +686,9 @@ class AppFixtures extends Fixture
|
||||
$cpPeriod = '2025-2026';
|
||||
$balanceData = [
|
||||
// [user, acquired (N-1), acquiring (N, en cours), taken, pending]
|
||||
// Alice's `pending` matches her pending CP request below (same 2025-2026 period).
|
||||
[$admin, 10.0, 22.5, 5.0, 0.0],
|
||||
[$userAlice, 8.0, 18.0, 2.0, 5.0],
|
||||
[$userAlice, 8.0, 18.0, 2.0, 4.0],
|
||||
[$userBob, 0.0, 14.0, 0.0, 0.0],
|
||||
];
|
||||
|
||||
@@ -717,12 +718,15 @@ class AppFixtures extends Fixture
|
||||
$approvedCp->setReviewedBy($admin);
|
||||
$manager->persist($approvedCp);
|
||||
|
||||
// Pending CP within Alice's current reference period (2025-2026), so the
|
||||
// reserved days line up with her balance's `pending` bucket above.
|
||||
// Tue 26 → Fri 29 May 2026 = 4 working days (Pentecost Mon 25/05 excluded).
|
||||
$pendingCp = new AbsenceRequest();
|
||||
$pendingCp->setUser($userAlice);
|
||||
$pendingCp->setType(AbsenceType::PaidLeave);
|
||||
$pendingCp->setStartDate(new DateTimeImmutable('2026-06-15'));
|
||||
$pendingCp->setEndDate(new DateTimeImmutable('2026-06-19'));
|
||||
$pendingCp->setCountedDays(5.0);
|
||||
$pendingCp->setStartDate(new DateTimeImmutable('2026-05-26'));
|
||||
$pendingCp->setEndDate(new DateTimeImmutable('2026-05-29'));
|
||||
$pendingCp->setCountedDays(4.0);
|
||||
$pendingCp->setStatus(AbsenceStatus::Pending);
|
||||
$pendingCp->setCreatedAt(new DateTimeImmutable('-2 days'));
|
||||
$manager->persist($pendingCp);
|
||||
|
||||
Reference in New Issue
Block a user