feat : ajout du système d'historique de contrat + correction affichage des absences sur la vue Jour

This commit is contained in:
2026-02-20 16:59:58 +01:00
parent d3583e0a38
commit 3637109ab0
15 changed files with 654 additions and 59 deletions

View File

@@ -15,6 +15,7 @@ use App\Enum\HalfDay;
use App\Repository\Contract\AbsenceReadRepositoryInterface;
use App\Repository\Contract\EmployeeScopedRepositoryInterface;
use App\Repository\Contract\WorkHourReadRepositoryInterface;
use App\Service\Contracts\EmployeeContractResolver;
use App\Service\WorkHours\AbsenceSegmentsResolver;
use App\Service\WorkHours\WorkedHoursCreditPolicy;
use App\State\WorkHourWeeklySummaryProvider;
@@ -58,7 +59,8 @@ final class WorkHourWeeklySummaryProviderTest extends TestCase
$this->workHourRepository,
$this->absenceRepository,
new AbsenceSegmentsResolver(),
new WorkedHoursCreditPolicy()
new WorkedHoursCreditPolicy($this->buildResolverStub()),
$this->buildResolverStub()
);
$this->expectException(AccessDeniedHttpException::class);
@@ -117,7 +119,8 @@ final class WorkHourWeeklySummaryProviderTest extends TestCase
$this->workHourRepository,
$this->absenceRepository,
new AbsenceSegmentsResolver(),
new WorkedHoursCreditPolicy()
new WorkedHoursCreditPolicy($this->buildResolverStub()),
$this->buildWeeklyResolverStub($employees)
);
$result = $provider->provide(new Get());
@@ -167,4 +170,50 @@ final class WorkHourWeeklySummaryProviderTest extends TestCase
$property->setAccessible(true);
$property->setValue($entity, $id);
}
private function buildResolverStub(): EmployeeContractResolver
{
$resolver = $this->createStub(EmployeeContractResolver::class);
$resolver
->method('resolveForEmployeeAndDate')
->willReturnCallback(static fn (Employee $employee): ?Contract => $employee->getContract())
;
$resolver
->method('resolveForEmployeesAndDays')
->willReturn([])
;
return $resolver;
}
/**
* @param list<Employee> $employees
*/
private function buildWeeklyResolverStub(array $employees): EmployeeContractResolver
{
$resolver = $this->createStub(EmployeeContractResolver::class);
$resolver
->method('resolveForEmployeeAndDate')
->willReturnCallback(static fn (Employee $employee): ?Contract => $employee->getContract())
;
$resolver
->method('resolveForEmployeesAndDays')
->willReturnCallback(static function (array $scopedEmployees, array $days): array {
$map = [];
foreach ($scopedEmployees as $employee) {
$employeeId = $employee->getId();
if (!$employeeId) {
continue;
}
foreach ($days as $day) {
$map[$employeeId][$day] = $employee->getContract();
}
}
return $map;
})
;
return $resolver;
}
}