From 4112e59af4f09d02b4f6a0ef3545aa22e90e823d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Thu, 9 Nov 2023 17:11:46 +0100 Subject: [PATCH] Export: add an ActivityPresenceAggregator --- .../unreleased/Feature-20231109-170655.yaml | 5 ++ .../Aggregator/ActivityPresenceAggregator.php | 72 +++++++++++++++++++ .../ActivityPresenceAggregatorTest.php | 62 ++++++++++++++++ .../config/services/export.yaml | 4 ++ .../translations/messages.fr.yml | 3 + 5 files changed, 146 insertions(+) create mode 100644 .changes/unreleased/Feature-20231109-170655.yaml create mode 100644 src/Bundle/ChillActivityBundle/Export/Aggregator/ActivityPresenceAggregator.php create mode 100644 src/Bundle/ChillActivityBundle/Tests/Export/Aggregator/ActivityPresenceAggregatorTest.php diff --git a/.changes/unreleased/Feature-20231109-170655.yaml b/.changes/unreleased/Feature-20231109-170655.yaml new file mode 100644 index 000000000..d4f793607 --- /dev/null +++ b/.changes/unreleased/Feature-20231109-170655.yaml @@ -0,0 +1,5 @@ +kind: Feature +body: 'Export: add an aggregator "group activities by presence"' +time: 2023-11-09T17:06:55.876380883+01:00 +custom: + Issue: "199" diff --git a/src/Bundle/ChillActivityBundle/Export/Aggregator/ActivityPresenceAggregator.php b/src/Bundle/ChillActivityBundle/Export/Aggregator/ActivityPresenceAggregator.php new file mode 100644 index 000000000..17e16357a --- /dev/null +++ b/src/Bundle/ChillActivityBundle/Export/Aggregator/ActivityPresenceAggregator.php @@ -0,0 +1,72 @@ +activityPresenceRepository->find($value)) { + return ''; + } + + return $this->translatableStringHelper->localize($presence->getName()); + }; + } + + public function getQueryKeys($data) + { + return ['activity_presence_aggregator_attendee']; + } + + public function getTitle(): string + { + return 'export.aggregator.activity.by_activity_presence.Group activity by presence'; + } + + public function addRole(): ?string + { + return null; + } + + public function alterQuery(QueryBuilder $qb, $data): void + { + $qb->addSelect('IDENTITY(activity.attendee) AS activity_presence_aggregator_attendee'); + $qb->addGroupBy('activity_presence_aggregator_attendee'); + } + + public function applyOn() + { + return Declarations::ACTIVITY; + } +} diff --git a/src/Bundle/ChillActivityBundle/Tests/Export/Aggregator/ActivityPresenceAggregatorTest.php b/src/Bundle/ChillActivityBundle/Tests/Export/Aggregator/ActivityPresenceAggregatorTest.php new file mode 100644 index 000000000..ea2bafb0d --- /dev/null +++ b/src/Bundle/ChillActivityBundle/Tests/Export/Aggregator/ActivityPresenceAggregatorTest.php @@ -0,0 +1,62 @@ +translatableStringHelper = self::$container->get(TranslatableStringHelperInterface::class); + $this->activityPresenceRepository = self::$container->get(ActivityPresenceRepositoryInterface::class); + } + + public function getAggregator() + { + return new ActivityPresenceAggregator($this->activityPresenceRepository, $this->translatableStringHelper); + } + + public function getFormData() + { + return [ + [], + ]; + } + + public function getQueryBuilders() + { + self::bootKernel(); + + $em = self::$container->get(EntityManagerInterface::class); + + return [ + $em->createQueryBuilder() + ->select('count(activity.id)') + ->from(Activity::class, 'activity'), + ]; + } +} diff --git a/src/Bundle/ChillActivityBundle/config/services/export.yaml b/src/Bundle/ChillActivityBundle/config/services/export.yaml index 29f7c2625..5b213cbee 100644 --- a/src/Bundle/ChillActivityBundle/config/services/export.yaml +++ b/src/Bundle/ChillActivityBundle/config/services/export.yaml @@ -218,3 +218,7 @@ services: Chill\ActivityBundle\Export\Aggregator\ACPAggregators\ByActivityTypeAggregator: tags: - { name: chill.export_aggregator, alias: acp_by_activity_type_aggregator } + + Chill\ActivityBundle\Export\Aggregator\ActivityPresenceAggregator: + tags: + - { name: chill.export_aggregator, alias: activity_presence_agg } diff --git a/src/Bundle/ChillActivityBundle/translations/messages.fr.yml b/src/Bundle/ChillActivityBundle/translations/messages.fr.yml index 759d222c1..f1ce1c681 100644 --- a/src/Bundle/ChillActivityBundle/translations/messages.fr.yml +++ b/src/Bundle/ChillActivityBundle/translations/messages.fr.yml @@ -421,6 +421,9 @@ export: by_persons: Group activity by persons: Grouper les échanges par usager participant Persons: Usagers participants + by_activity_presence: + Group activity by presence: Grouper les échanges par présence de l'usager + header: Présence de(s) usager(s) generic_doc: filter: