feat : modification de la gestion des jours fériés
All checks were successful
Auto Tag Develop / tag (push) Successful in 6s
All checks were successful
Auto Tag Develop / tag (push) Successful in 6s
This commit is contained in:
@@ -23,6 +23,20 @@ readonly class EmployeeContractResolver
|
||||
return $period?->getContract();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return null|array<int, int> workDaysHours (iso day → minutes) for the contract period active on $date
|
||||
*/
|
||||
public function resolveWorkDaysMinutesForEmployeeAndDate(Employee $employee, DateTimeImmutable $date): ?array
|
||||
{
|
||||
$period = $this->periodRepository->findOneCoveringDate($employee, $date);
|
||||
$raw = $period?->getWorkDaysHours();
|
||||
if (null === $raw) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $this->normalizeWorkDaysMinutes($raw);
|
||||
}
|
||||
|
||||
public function resolveIsDriverForEmployeeAndDate(Employee $employee, DateTimeImmutable $date): bool
|
||||
{
|
||||
$period = $this->periodRepository->findOneCoveringDate($employee, $date);
|
||||
@@ -84,6 +98,57 @@ readonly class EmployeeContractResolver
|
||||
return $period?->getContractNatureEnum() ?? ContractNature::CDI;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param list<Employee> $employees
|
||||
* @param list<string> $days
|
||||
*
|
||||
* @return array<int, array<string, null|array<int, int>>>
|
||||
*/
|
||||
public function resolveWorkDaysMinutesForEmployeesAndDays(array $employees, array $days): array
|
||||
{
|
||||
$resolved = [];
|
||||
if ([] === $employees || [] === $days) {
|
||||
return $resolved;
|
||||
}
|
||||
|
||||
foreach ($employees as $employee) {
|
||||
$employeeId = $employee->getId();
|
||||
if (!$employeeId) {
|
||||
continue;
|
||||
}
|
||||
foreach ($days as $day) {
|
||||
$resolved[$employeeId][$day] = null;
|
||||
}
|
||||
}
|
||||
|
||||
$from = new DateTimeImmutable(min($days));
|
||||
$to = new DateTimeImmutable(max($days));
|
||||
$periods = $this->periodRepository->findByEmployeesAndDateRange($employees, $from, $to);
|
||||
foreach ($periods as $period) {
|
||||
$employeeId = $period->getEmployee()?->getId();
|
||||
if (!$employeeId) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$raw = $period->getWorkDaysHours();
|
||||
if (null === $raw) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$normalized = $this->normalizeWorkDaysMinutes($raw);
|
||||
$start = $period->getStartDate()->format('Y-m-d');
|
||||
$end = $period->getEndDate()?->format('Y-m-d') ?? '9999-12-31';
|
||||
foreach ($days as $day) {
|
||||
if ($day < $start || $day > $end) {
|
||||
continue;
|
||||
}
|
||||
$resolved[$employeeId][$day] = $normalized;
|
||||
}
|
||||
}
|
||||
|
||||
return $resolved;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param list<Employee> $employees
|
||||
* @param list<string> $days
|
||||
@@ -177,4 +242,23 @@ readonly class EmployeeContractResolver
|
||||
|
||||
return $resolved;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<int|string, mixed> $raw
|
||||
*
|
||||
* @return array<int, int>
|
||||
*/
|
||||
private function normalizeWorkDaysMinutes(array $raw): array
|
||||
{
|
||||
$result = [];
|
||||
foreach ($raw as $key => $value) {
|
||||
$iso = (int) $key;
|
||||
if ($iso < 1 || $iso > 5) {
|
||||
continue;
|
||||
}
|
||||
$result[$iso] = (int) $value;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user