diff --git a/src/Bundle/ChillPersonBundle/Export/Aggregator/ReferrerScopeAggregator.php b/src/Bundle/ChillPersonBundle/Export/Aggregator/ReferrerScopeAggregator.php new file mode 100644 index 000000000..b6dc3a71d --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Export/Aggregator/ReferrerScopeAggregator.php @@ -0,0 +1,86 @@ +scopeRepository = $scopeRepository; + $this->translatableStringHelper = $translatableStringHelper; + } + + public function addRole() + { + return null; + } + + public function alterQuery(QueryBuilder $qb, $data) + { + $qb->join('acpw.referrers', 'r'); + $qb->addSelect('IDENTITY(r.mainScope) as referrer_scope_aggregator'); + + $groupBy = $qb->getDQLPart('groupBy'); + + if (!empty($groupBy)) { + $qb->addGroupBy('referrer_scope_aggregator'); + } else { + $qb->groupBy('referrer_scope_aggregator'); + } + + } + + public function applyOn() + { + 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 'User scope'; + } + + $s = $this->scopeRepository->find($value); + + return $this->translatableStringHelper->localize( + $s->getName()); + }; + } + + public function getQueryKeys($data) + { + return ['referrer_scope_aggregator']; + } + + public function getTitle() + { + return 'Group social work actions by referrer scope'; + } +} diff --git a/src/Bundle/ChillPersonBundle/config/services/exports_social_actions.yaml b/src/Bundle/ChillPersonBundle/config/services/exports_social_actions.yaml index 5ac5a0afa..66dddc583 100644 --- a/src/Bundle/ChillPersonBundle/config/services/exports_social_actions.yaml +++ b/src/Bundle/ChillPersonBundle/config/services/exports_social_actions.yaml @@ -50,3 +50,10 @@ services: autoconfigure: true tags: - { name: chill.export_aggregator, alias: social_work_actions_referrer_job_aggregator } + + chill.person.export.aggregator_referrer_scope: + class: Chill\PersonBundle\Export\Aggregator\ReferrerScopeAggregator + autowire: true + autoconfigure: true + tags: + - { name: chill.export_aggregator, alias: social_work_actions_referrer_scope_aggregator }