fix(absence) : déduire les jours pris du report CP au changement de période
Au passage d'une période de référence, le report de l'"en cours d'acquisition" (N) vers l'"acquis" (N-1) ne déduisait pas les jours déjà pris : un salarié récupérait les CP qu'il avait consommés. Le report ne porte désormais que les jours non pris. Les congés sont imputés au plus ancien bucket d'abord (l'acquis N-2, qui expire de toute façon au changement de période), donc seuls les jours pris au-delà réduisent le report. Ajoute AccrueLeaveCommandTest couvrant le report avec jour pris, l'imputation oldest-first et le report intégral sans jour pris.
This commit is contained in:
@@ -111,9 +111,18 @@ class AccrueLeaveCommand extends Command
|
||||
$previousBalance = null !== $previousPeriod
|
||||
? $this->balanceRepository->findOneForPeriod($user, AbsenceType::PaidLeave, $previousPeriod)
|
||||
: null;
|
||||
$balance->setAcquired(
|
||||
null !== $previousBalance ? $previousBalance->getAcquiring() : $profile->getInitialLeaveBalance(),
|
||||
);
|
||||
|
||||
if (null !== $previousBalance) {
|
||||
// Only the days *not yet taken* carry over. Leave is charged
|
||||
// oldest-first: it first consumes the previous "acquired"
|
||||
// (N-2) bucket — which expires at roll-over anyway — so only
|
||||
// days taken beyond that bucket eat into the carry-over.
|
||||
$carryOver = $previousBalance->getAcquiring()
|
||||
- max(0.0, $previousBalance->getTaken() - $previousBalance->getAcquired());
|
||||
$balance->setAcquired(max(0.0, $carryOver));
|
||||
} else {
|
||||
$balance->setAcquired($profile->getInitialLeaveBalance());
|
||||
}
|
||||
}
|
||||
|
||||
if ($monthKey === $balance->getLastAccruedMonth()) {
|
||||
|
||||
Reference in New Issue
Block a user