From 8208df1ade7f50e9bf6040808bf5159e08774d49 Mon Sep 17 00:00:00 2001 From: Matthieu Date: Tue, 24 Mar 2026 16:00:22 +0100 Subject: [PATCH] feat : add findForExport repository method for time entries Co-Authored-By: Claude Sonnet 4.6 --- src/Repository/TimeEntryRepository.php | 44 ++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/Repository/TimeEntryRepository.php b/src/Repository/TimeEntryRepository.php index 5e7bcf9..afa7ff5 100644 --- a/src/Repository/TimeEntryRepository.php +++ b/src/Repository/TimeEntryRepository.php @@ -4,8 +4,10 @@ declare(strict_types=1); namespace App\Repository; +use App\Entity\Project; use App\Entity\TimeEntry; use App\Entity\User; +use DateTimeImmutable; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; @@ -26,4 +28,46 @@ class TimeEntryRepository extends ServiceEntityRepository 'stoppedAt' => null, ]); } + + /** + * @param null|int[] $tagIds + * + * @return TimeEntry[] + */ + public function findForExport( + DateTimeImmutable $after, + DateTimeImmutable $before, + ?User $user = null, + ?Project $project = null, + ?array $tagIds = null, + ): array { + $qb = $this->createQueryBuilder('te') + ->andWhere('te.startedAt >= :after') + ->andWhere('te.startedAt < :before') + ->setParameter('after', $after) + ->setParameter('before', $before) + ->orderBy('te.startedAt', 'ASC') + ; + + if (null !== $user) { + $qb->andWhere('te.user = :user') + ->setParameter('user', $user) + ; + } + + if (null !== $project) { + $qb->andWhere('te.project = :project') + ->setParameter('project', $project) + ; + } + + if (null !== $tagIds && [] !== $tagIds) { + $qb->join('te.tags', 'tag') + ->andWhere('tag.id IN (:tagIds)') + ->setParameter('tagIds', $tagIds) + ; + } + + return $qb->getQuery()->getResult(); + } }