From 312a23e91f2000371f2501e966e39da075841e67 Mon Sep 17 00:00:00 2001 From: Mathieu Jaumotte Date: Thu, 11 Aug 2022 16:56:18 +0200 Subject: [PATCH] split ReferrerAggregator --- .../ReferrerAggregator.php | 20 +---- .../ReferrerAggregator.php | 89 +++++++++++++++++++ .../services/exports_accompanying_course.yaml | 2 +- .../services/exports_social_actions.yaml | 9 +- 4 files changed, 102 insertions(+), 18 deletions(-) rename src/Bundle/ChillPersonBundle/Export/Aggregator/{ => AccompanyingCourseAggregators}/ReferrerAggregator.php (77%) create mode 100644 src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/ReferrerAggregator.php diff --git a/src/Bundle/ChillPersonBundle/Export/Aggregator/ReferrerAggregator.php b/src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/ReferrerAggregator.php similarity index 77% rename from src/Bundle/ChillPersonBundle/Export/Aggregator/ReferrerAggregator.php rename to src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/ReferrerAggregator.php index bcf1e2f6c..56522f2ed 100644 --- a/src/Bundle/ChillPersonBundle/Export/Aggregator/ReferrerAggregator.php +++ b/src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/ReferrerAggregator.php @@ -9,7 +9,7 @@ declare(strict_types=1); -namespace Chill\PersonBundle\Export\Aggregator; +namespace Chill\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators; use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Repository\UserRepository; @@ -40,21 +40,9 @@ final class ReferrerAggregator implements AggregatorInterface public function alterQuery(QueryBuilder $qb, $data) { - switch ($qb->getRootAlias()) { + $qb->join('acp.user', 'u'); - case 'acp': - $qb->join('acp.user', 'u'); - $qb->addSelect('u.id AS referrer_aggregator'); - break; - - case 'acpw': - $qb->join('acpw.referrers', 'r'); - $qb->addSelect('r.id AS referrer_aggregator'); - break; - - default: - throw new \Exception("Does not apply on that base entity"); - } + $qb->addSelect('u.id AS referrer_aggregator'); $groupBy = $qb->getDQLPart('groupBy'); @@ -68,7 +56,7 @@ final class ReferrerAggregator implements AggregatorInterface public function applyOn(): string { - return Declarations::ACP_SHARED; + return Declarations::ACP_TYPE; } public function buildForm(FormBuilderInterface $builder) diff --git a/src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/ReferrerAggregator.php b/src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/ReferrerAggregator.php new file mode 100644 index 000000000..1815ecc19 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/ReferrerAggregator.php @@ -0,0 +1,89 @@ +userRepository = $userRepository; + $this->userRender = $userRender; + } + + public function addRole() + { + return null; + } + + public function alterQuery(QueryBuilder $qb, $data) + { + $qb->join('acpw.referrers', 'u'); + + $qb->addSelect('u.id AS referrer_aggregator'); + + $groupBy = $qb->getDQLPart('groupBy'); + + if (!empty($groupBy)) { + $qb->addGroupBy('referrer_aggregator'); + } else { + $qb->groupBy('referrer_aggregator'); + } + + } + + public function applyOn(): string + { + return Declarations::SOCIAL_WORK_ACTION_TYPE; + } + + public function buildForm(FormBuilderInterface $builder) + { + // no form + } + + public function getLabels($key, array $values, $data) + { + return function ($value): string { + if ('_header' === $value) { + return 'Referrer'; + } + + $r = $this->userRepository->find($value); + + return $this->userRender->renderString($r, []); + }; + } + + public function getQueryKeys($data): array + { + return ['referrer_aggregator']; + } + + public function getTitle(): string + { + return 'Group by treating agent'; + } +} diff --git a/src/Bundle/ChillPersonBundle/config/services/exports_accompanying_course.yaml b/src/Bundle/ChillPersonBundle/config/services/exports_accompanying_course.yaml index a48081d21..25b19caf8 100644 --- a/src/Bundle/ChillPersonBundle/config/services/exports_accompanying_course.yaml +++ b/src/Bundle/ChillPersonBundle/config/services/exports_accompanying_course.yaml @@ -235,7 +235,7 @@ services: - { name: chill.export_aggregator, alias: accompanyingcourse_intensity_aggregator } chill.person.export.aggregator_referrer: - class: Chill\PersonBundle\Export\Aggregator\ReferrerAggregator + class: Chill\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators\ReferrerAggregator autowire: true autoconfigure: true tags: diff --git a/src/Bundle/ChillPersonBundle/config/services/exports_social_actions.yaml b/src/Bundle/ChillPersonBundle/config/services/exports_social_actions.yaml index 08b3893da..9879736db 100644 --- a/src/Bundle/ChillPersonBundle/config/services/exports_social_actions.yaml +++ b/src/Bundle/ChillPersonBundle/config/services/exports_social_actions.yaml @@ -35,7 +35,7 @@ services: autowire: true autoconfigure: true tags: - - { name: chill.export_filter, alias: social_work_actions_referrer_filter } + - { name: chill.export_filter, alias: social_work_actions_treating_agent_filter } ## AGGREGATORS chill.person.export.aggregator_action_type: @@ -44,6 +44,13 @@ services: autoconfigure: true tags: - { name: chill.export_aggregator, alias: social_work_actions_action_type_aggregator } + + chill.person.export.aggregator_treating_agent: + class: Chill\PersonBundle\Export\Aggregator\SocialWorkAggregators\ReferrerAggregator + autowire: true + autoconfigure: true + tags: + - { name: chill.export_aggregator, alias: social_work_actions_treating_agent_aggregator } chill.person.export.aggregator_goal: class: Chill\PersonBundle\Export\Aggregator\SocialWorkAggregators\GoalAggregator