From d5cf7c705878cf573865d04403bc6a6d07d34d1e Mon Sep 17 00:00:00 2001 From: tristan Date: Wed, 24 Jun 2026 15:28:53 +0200 Subject: [PATCH] feat : add repository queries for contract end notifications --- .../EmployeeContractPeriodRepository.php | 18 ++++++++++++++ src/Repository/NotificationRepository.php | 24 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/Repository/EmployeeContractPeriodRepository.php b/src/Repository/EmployeeContractPeriodRepository.php index ba9cc9d..a6ef760 100644 --- a/src/Repository/EmployeeContractPeriodRepository.php +++ b/src/Repository/EmployeeContractPeriodRepository.php @@ -72,6 +72,24 @@ final class EmployeeContractPeriodRepository extends ServiceEntityRepository imp ; } + /** + * Latest contract period (max startDate) for every employee that has at least one. + * + * @return EmployeeContractPeriod[] + */ + public function findLatestPeriodsForAllEmployees(): array + { + return $this->createQueryBuilder('p') + ->andWhere('p.startDate = ( + SELECT MAX(p2.startDate) + FROM App\Entity\EmployeeContractPeriod p2 + WHERE p2.employee = p.employee + )') + ->getQuery() + ->getResult() + ; + } + public function closeOpenPeriods(Employee $employee, DateTimeImmutable $endDate): int { return $this->createQueryBuilder('p') diff --git a/src/Repository/NotificationRepository.php b/src/Repository/NotificationRepository.php index 9136aac..ca681e6 100644 --- a/src/Repository/NotificationRepository.php +++ b/src/Repository/NotificationRepository.php @@ -84,4 +84,28 @@ final class NotificationRepository extends ServiceEntityRepository ->execute() ; } + + public function existsForRecipientCategoryTargetMessage( + User $recipient, + string $category, + string $target, + string $message, + ): bool { + $id = $this->createQueryBuilder('n') + ->select('n.id') + ->andWhere('n.recipient = :recipient') + ->andWhere('n.category = :category') + ->andWhere('n.target = :target') + ->andWhere('n.message = :message') + ->setParameter('recipient', $recipient) + ->setParameter('category', $category) + ->setParameter('target', $target) + ->setParameter('message', $message) + ->setMaxResults(1) + ->getQuery() + ->getOneOrNullResult() + ; + + return null !== $id; + } }