From 6bc45bbca38683f830c53afe1fb34aaadeab478f Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Wed, 12 Jul 2023 20:21:14 +0200 Subject: [PATCH] FEATURE [filter][actions] integrate user and dates filter into sql --- .../AccompanyingPeriodWorkRepository.php | 26 +++++++------------ 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/AccompanyingPeriodWorkRepository.php b/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/AccompanyingPeriodWorkRepository.php index 6fc8ff86e..018cb3209 100644 --- a/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/AccompanyingPeriodWorkRepository.php +++ b/src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/AccompanyingPeriodWorkRepository.php @@ -103,7 +103,8 @@ final class AccompanyingPeriodWorkRepository implements ObjectRepository $rsm->addRootEntityFromClassMetadata(AccompanyingPeriodWork::class, 'w'); $sql = "SELECT {$rsm} FROM chill_person_accompanying_period_work w - WHERE accompanyingPeriod_id = :periodId"; + LEFT JOIN chill_person_accompanying_period_work_referrer AS rw ON accompanyingperiodwork_id = w.id + WHERE accompanyingPeriod_id = :periodId"; // implement filters @@ -112,20 +113,12 @@ final class AccompanyingPeriodWorkRepository implements ObjectRepository $sql .= " AND w.socialaction_id IN (:types)"; } - if([] !== ($filters['users'] ?? [])) + if([] !== ($filters['user'] ?? [])) { - $sql .= " AND w.createdBy = (:userCreated)"; - - $sql .= " OR :userReferrer IN (w.referrers)"; + $sql .= " AND rw.user_id = :user"; } - if (null !== ($after = $filters['after'] ?? null) && null === $filters['before']) { - $sql .= " AND w.startdate::date >= :after"; - } elseif (null !== ($before = $filters['before'] ?? null) && null === $filters['after']) { - $sql .= " AND COALESCE(w.enddate::date, 'infinity'::date) <= :before"; - } elseif (null !== ($after = $filters['after'] ?? null) && null !== ($before = $filters['before'] ?? null)) { - $sql .= " AND w.startdate::date >= :after AND COALESCE(w.enddate::date, 'now'::date) <= :before"; - } + $sql .= " AND daterange(:after::date, :before::date) && daterange(w.startDate, w.endDate)"; // set limit and offset @@ -137,6 +130,8 @@ final class AccompanyingPeriodWorkRepository implements ObjectRepository $sql .= " LIMIT :limit OFFSET :offset"; + dump($sql); + $typeIds = []; foreach ($filters['types'] as $type) { $typeIds[] = $type->getId(); @@ -145,10 +140,9 @@ final class AccompanyingPeriodWorkRepository implements ObjectRepository $nq = $this->em->createNativeQuery($sql, $rsm) ->setParameter('periodId', $period->getId(), Types::INTEGER) ->setParameter('types', $typeIds) - ->setParameter('userCreated', $filters['user']) - ->setParameter('userReferrer', $filters['user']) - ->setParameter('after', $filters['after']) - ->setParameter('before', $filters['before']) + ->setParameter('user', $filters['user'] ? $filters['user']->getId() : null) + ->setParameter('after', ($filters['after'] ?? null)) + ->setParameter('before', ($filters['before'] ?? null)) ->setParameter('limit', $limit, Types::INTEGER) ->setParameter('offset', $offset, Types::INTEGER);