employeeRepository->find($employeeId); if (!$employee instanceof Employee) { throw new NotFoundHttpException('Employee not found.'); } if ($data->month < 1 || $data->month > 12) { throw new UnprocessableEntityHttpException('month must be between 1 and 12.'); } $year = $data->year ?? $this->resolveCurrentExerciseYear(); $payment = $this->rttPaymentRepository->findOneByEmployeeYearMonth($employee, $year, $data->month); if (null === $payment) { $payment = new EmployeeRttPayment(); $payment->setEmployee($employee); $payment->setYear($year); $payment->setMonth($data->month); $this->entityManager->persist($payment); } $payment->setBase25Minutes($data->base25Minutes); $payment->setBonus25Minutes($data->bonus25Minutes); $payment->setBase50Minutes($data->base50Minutes); $payment->setBonus50Minutes($data->bonus50Minutes); $payment->touch(); $this->entityManager->flush(); $data->year = $year; return $data; } private function resolveCurrentExerciseYear(): int { $today = new DateTimeImmutable('today'); $year = (int) $today->format('Y'); $month = (int) $today->format('n'); return $month >= 6 ? $year + 1 : $year; } }