fix(contracts) : hide contract phases entirely before RTT_START_DATE

EmployeeContractPhaseResolver now accepts the data-start date and filters
out phases whose endDate is strictly before it. No work-hour or absence
data exists before the application launch date, so legacy contract
periods that ended before that date would surface meaningless RTT/CP
figures in the phase picker.

For employees who joined long before the software (typical legacy 35h
contracts, in production since 2014), only the current phase remains
visible — which also collapses the picker (threshold ≥ 2 phases).

The Employee entity reads RTT_START_DATE from $_SERVER/$_ENV directly
since it has no DI. The resolver service is wired via services.yaml.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-19 14:17:54 +02:00
parent 3da1cab2c8
commit f48f1d2f3a
6 changed files with 100 additions and 1 deletions

View File

@@ -446,7 +446,10 @@ class Employee
#[Groups(['employee:read'])]
public function getContractPhases(): array
{
$resolver = new EmployeeContractPhaseResolver();
// Read RTT_START_DATE directly here: the entity has no DI but must filter
// out contract phases that ended before the application's data start.
$rawDate = $_SERVER['RTT_START_DATE'] ?? $_ENV['RTT_START_DATE'] ?? '';
$resolver = new EmployeeContractPhaseResolver(is_string($rawDate) ? $rawDate : '');
return array_map(
static fn (ContractPhase $phase): array => [