From bc41910a3971fea6112bf95645a8c2fb1b18ac51 Mon Sep 17 00:00:00 2001 From: Mathieu Jaumotte Date: Mon, 31 Oct 2022 15:32:34 +0100 Subject: [PATCH] HasNoReferrer filter --- .../HasNoReferrerFilter.php | 29 +++++++++++++++---- .../translations/messages.fr.yml | 2 ++ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/HasNoReferrerFilter.php b/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/HasNoReferrerFilter.php index f6ec58104..c37d423f8 100644 --- a/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/HasNoReferrerFilter.php +++ b/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/HasNoReferrerFilter.php @@ -12,9 +12,13 @@ declare(strict_types=1); namespace Chill\PersonBundle\Export\Filter\AccompanyingCourseFilters; use Chill\MainBundle\Export\FilterInterface; +use Chill\MainBundle\Form\Type\ChillDateType; +use Chill\PersonBundle\Entity\AccompanyingPeriod\UserHistory; use Chill\PersonBundle\Export\Declarations; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\QueryBuilder; use Symfony\Component\Form\FormBuilderInterface; +use DateTime; class HasNoReferrerFilter implements FilterInterface { @@ -26,10 +30,18 @@ class HasNoReferrerFilter implements FilterInterface public function alterQuery(QueryBuilder $qb, $data) { $qb - ->andWhere( - $qb->expr()->in('', ':') - ) - ->setParameter('', $data[]); + ->andWhere(' + NOT EXISTS ( + SELECT 1 FROM '. UserHistory::class .' uh + WHERE uh.startDate < :date + AND ( + uh.endDate IS NULL + or uh.endDate > :date + ) + AND uh.accompanyingPeriod = acp + ) + ') + ->setParameter('date', $data['calc_date'], Types::DATE_IMMUTABLE); } public function applyOn(): string @@ -39,12 +51,17 @@ class HasNoReferrerFilter implements FilterInterface public function buildForm(FormBuilderInterface $builder) { - $builder->add(); + $builder + ->add('calc_date', ChillDateType::class, [ + 'label' => 'Has no referrer on this date', + 'data' => new DateTime(), + ]); } public function describeAction($data, $format = 'string'): array { - return ['', [ + return ['Filtered acp which has no referrer on date: %date%', [ + '%date%' => $data['calc_date']->format('d-m-Y'), ]]; } diff --git a/src/Bundle/ChillPersonBundle/translations/messages.fr.yml b/src/Bundle/ChillPersonBundle/translations/messages.fr.yml index bab2845ed..d2f8410ed 100644 --- a/src/Bundle/ChillPersonBundle/translations/messages.fr.yml +++ b/src/Bundle/ChillPersonBundle/translations/messages.fr.yml @@ -554,6 +554,8 @@ Date to: Date de fin Filter by temporary location: Filtrer les parcours avec une localisation temporaire Filter by which has no referrer: Filtrer les parcours sans référent +"Filtered acp which has no referrer on date: %date%": "Filtré les parcours sans référent à cette date: %date%" +Has no referrer on this date: N'a pas de référent à cette date Filter by which has no action: Filtrer les parcours qui n’ont pas d’actions Filtered acp which has no actions: Filtré les parcours qui n'ont pas d'actions Group by number of actions: Grouper les parcours par nombre d’actions