fix : wip
This commit is contained in:
50
src/Service/WorkHours/AbsenceSegmentsResolver.php
Normal file
50
src/Service/WorkHours/AbsenceSegmentsResolver.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Service\WorkHours;
|
||||
|
||||
use App\Entity\Absence;
|
||||
use App\Enum\HalfDay;
|
||||
|
||||
final class AbsenceSegmentsResolver
|
||||
{
|
||||
/**
|
||||
* @return array{bool, bool}
|
||||
*/
|
||||
public function resolveForDate(Absence $absence, string $dateYmd): array
|
||||
{
|
||||
$startDate = $absence->getStartDate()->format('Y-m-d');
|
||||
$endDate = $absence->getEndDate()->format('Y-m-d');
|
||||
$startHalf = $absence->getStartHalf();
|
||||
$endHalf = $absence->getEndHalf();
|
||||
|
||||
// Cas d'une absence sur une seule date: on déduit matin/après-midi depuis les bornes.
|
||||
if ($startDate === $endDate) {
|
||||
if (HalfDay::AM === $startHalf && HalfDay::AM === $endHalf) {
|
||||
// Uniquement le matin absent.
|
||||
return [true, false];
|
||||
}
|
||||
if (HalfDay::PM === $startHalf && HalfDay::PM === $endHalf) {
|
||||
// Uniquement l'après-midi absent.
|
||||
return [false, true];
|
||||
}
|
||||
|
||||
// Sinon, on considère la journée complète absente.
|
||||
return [true, true];
|
||||
}
|
||||
|
||||
// Premier jour d'une absence multi-jours qui commence l'après-midi.
|
||||
if ($dateYmd === $startDate && HalfDay::PM === $startHalf) {
|
||||
return [false, true];
|
||||
}
|
||||
|
||||
// Dernier jour d'une absence multi-jours qui se termine le matin.
|
||||
if ($dateYmd === $endDate && HalfDay::AM === $endHalf) {
|
||||
return [true, false];
|
||||
}
|
||||
|
||||
// Les jours intermédiaires sont entièrement absents.
|
||||
return [true, true];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user