From b511517a0f51326d9ea1c81c25f0ef709536794c Mon Sep 17 00:00:00 2001 From: Mathieu Jaumotte Date: Mon, 1 Aug 2022 12:45:04 +0200 Subject: [PATCH] export new SocialActionFilter --- .../Export/Filter/SocialActionFilter.php | 101 ++++++++++++++++++ .../services/exports_accompanying_period.yaml | 7 ++ .../translations/messages.fr.yml | 19 ++-- 3 files changed, 120 insertions(+), 7 deletions(-) create mode 100644 src/Bundle/ChillPersonBundle/Export/Filter/SocialActionFilter.php diff --git a/src/Bundle/ChillPersonBundle/Export/Filter/SocialActionFilter.php b/src/Bundle/ChillPersonBundle/Export/Filter/SocialActionFilter.php new file mode 100644 index 000000000..d421044a2 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Export/Filter/SocialActionFilter.php @@ -0,0 +1,101 @@ +translator = $translator; + $this->translatableStringHelper = $translatableStringHelper; + $this->actionRender = $actionRender; + } + + public function buildForm(FormBuilderInterface $builder) + { + $builder->add('accepted_socialactions', EntityType::class, [ + 'class' => SocialAction::class, + 'choice_label' => function (SocialAction $sa) { + return $this->actionRender->renderString($sa, []); + }, + 'multiple' => true, + 'expanded' => true, + ]); + } + + public function getTitle(): string + { + return 'Filter by socialaction'; + } + + public function describeAction($data, $format = 'string'): array + { + $socialactions = []; + + foreach ($data['accepted_socialactions'] as $sa) { + $socialactions[] = $this->actionRender->renderString($sa, []); + } + + return ['Filtered by socialactions: only %socialactions%', [ + '%socialactions%' => implode(", ou ", $socialactions) + ]]; + } + + public function addRole() + { + return null; + } + + public function alterQuery(QueryBuilder $qb, $data) + { + $qb->join('acp.works', 'acpw') + ->join('acpw.socialAction', 'sa') + ; + + $where = $qb->getDQLPart('where'); + $clause = $qb->expr()->in('sa.id', ':socialactions'); + + if ($where instanceof Andx) { + $where->add($clause); + } else { + $where = $qb->expr()->andX($clause); + } + + $qb->add('where', $where); + $qb->setParameter('socialactions', $data['accepted_socialactions']); + } + + public function applyOn(): string + { + return Declarations::ACP_TYPE; + } +} \ No newline at end of file diff --git a/src/Bundle/ChillPersonBundle/config/services/exports_accompanying_period.yaml b/src/Bundle/ChillPersonBundle/config/services/exports_accompanying_period.yaml index fb10e775f..0556f051c 100644 --- a/src/Bundle/ChillPersonBundle/config/services/exports_accompanying_period.yaml +++ b/src/Bundle/ChillPersonBundle/config/services/exports_accompanying_period.yaml @@ -60,6 +60,13 @@ services: tags: - { name: chill.export_filter, alias: accompanyingcourse_step_filter } + chill.person.export.filter_socialaction: + class: Chill\PersonBundle\Export\Filter\SocialActionFilter + autowire: true + autoconfigure: true + tags: + - { name: chill.export_filter, alias: accompanyingcourse_socialaction_filter } + chill.person.export.filter_origin: class: Chill\PersonBundle\Export\Filter\OriginFilter autowire: true diff --git a/src/Bundle/ChillPersonBundle/translations/messages.fr.yml b/src/Bundle/ChillPersonBundle/translations/messages.fr.yml index 0f65dcf6c..7f56b90fa 100644 --- a/src/Bundle/ChillPersonBundle/translations/messages.fr.yml +++ b/src/Bundle/ChillPersonBundle/translations/messages.fr.yml @@ -390,6 +390,10 @@ Filter by step: Filtrer par statut du parcours Accepted steps: Statuts "Filtered by steps: only %step%": "Filtré par statut du parcours: uniquement %step%" +Filter by socialaction: Filtrer par action d'accompagnement +Accepted socialactions: Actions d'accompagnement +"Filtered by socialactions: only %socialactions%": "Filtré par action d'accompagnement: uniquement %socialactions%" + Filter by origin: Filtrer par origine du parcours Accepted origins: Origines "Filtered by origins: only %origins%": "Filtré par origine du parcours: uniquement %origins%" @@ -416,6 +420,14 @@ is occasional: le parcours est ponctuel is regular: le parcours est régulier "Filtered by intensity: only %intensity%": "Filtré par intensité: uniquement si %intensity%" +Filtered by active on date: Filtrer les parcours actifs à une date +On date: Actifs à cette date +"Filtered by actives courses: active on %ondate%": "Filtrer les parcours actifs: actifs le %ondate%" + +Filtered by active at least one day between dates: Filtrer les parcours actifs au moins un jour dans la période +"Filtered by actives courses: at least one day between %datefrom% and %dateto%": "Filtrer les parcours actifs: au moins un jour entre le %datefrom% et le %dateto%" + + Filtered by referrers: Filtrer par référent Accepted referrers: Référents "Filtered by referrer: only %referrers%": "Filtré par référent: uniquement %referrers%" @@ -425,13 +437,6 @@ Date from: Date de début Date to: Date de fin "Filtered by opening dates: between %datefrom% and %dateto%": "Filtrer les parcours ouverts entre deux dates: entre le %datefrom% et le %dateto%" -Filtered by active at least one day between dates: Filtrer les parcours actifs au moins un jour dans la période -"Filtered by actives courses: at least one day between %datefrom% and %dateto%": "Filtrer les parcours actifs: au moins un jour entre le %datefrom% et le %dateto%" - -Filtered by active on date: Filtrer les parcours actifs à une date -On date: Actifs à cette date -"Filtered by actives courses: active on %ondate%": "Filtrer les parcours actifs: actifs le %ondate%" - ## aggregators Group people by nationality: Aggréger les personnes par nationalités Group by level: Grouper par niveau