feat : ajout des congés bonus pour les forfaits si ils travaillent un weekend ou férié
This commit is contained in:
@@ -191,6 +191,57 @@ final class WorkHourRepository extends ServiceEntityRepository implements WorkHo
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Count weekend and public holiday worked days for forfait bonus leave (PRESENCE mode only).
|
||||
* Morning + afternoon = 1.0 day, one only = 0.5 day.
|
||||
*
|
||||
* @param list<string> $publicHolidayDates Y-m-d formatted weekday public holiday dates
|
||||
*/
|
||||
public function countWeekendAndHolidayWorkedDays(Employee $employee, DateTimeImmutable $from, DateTimeImmutable $to, array $publicHolidayDates = []): float
|
||||
{
|
||||
$targetDates = [];
|
||||
|
||||
// Collect weekend dates in range
|
||||
for ($cursor = $from; $cursor <= $to; $cursor = $cursor->modify('+1 day')) {
|
||||
if ((int) $cursor->format('N') >= 6) {
|
||||
$targetDates[] = $cursor;
|
||||
}
|
||||
}
|
||||
|
||||
// Add weekday public holidays
|
||||
foreach ($publicHolidayDates as $date) {
|
||||
$targetDates[] = new DateTimeImmutable($date);
|
||||
}
|
||||
|
||||
if ([] === $targetDates) {
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
$dateStrings = array_map(static fn (DateTimeImmutable $d): string => $d->format('Y-m-d'), $targetDates);
|
||||
|
||||
/** @var list<WorkHour> $rows */
|
||||
$rows = $this->createQueryBuilder('w')
|
||||
->andWhere('w.employee = :employee')
|
||||
->andWhere('w.workDate IN (:dates)')
|
||||
->andWhere('w.isPresentMorning = true OR w.isPresentAfternoon = true')
|
||||
->setParameter('employee', $employee)
|
||||
->setParameter('dates', $dateStrings)
|
||||
->getQuery()
|
||||
->getResult()
|
||||
;
|
||||
|
||||
$total = 0.0;
|
||||
foreach ($rows as $row) {
|
||||
if ($row->isPresentMorning() && $row->isPresentAfternoon()) {
|
||||
$total += 1.0;
|
||||
} else {
|
||||
$total += 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
return $total;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the set of Y-m-d dates where the employee has worked hours on the given dates.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user