From 7bff5ce39e7a8ddb124d649807738338ec9d8bb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Tue, 24 Oct 2023 14:17:08 +0200 Subject: [PATCH 1/4] DX: rename UserScopeFilter to CreatorScopeFilter --- .../{UserScopeFilter.php => CreatorScopeFilter.php} | 6 +++--- ...UserScopeFilterTest.php => CreatorScopeFilterTest.php} | 8 ++++---- .../ChillActivityBundle/config/services/export.yaml | 4 +++- 3 files changed, 10 insertions(+), 8 deletions(-) rename src/Bundle/ChillActivityBundle/Export/Filter/{UserScopeFilter.php => CreatorScopeFilter.php} (93%) rename src/Bundle/ChillActivityBundle/Tests/Export/Filter/{UserScopeFilterTest.php => CreatorScopeFilterTest.php} (86%) diff --git a/src/Bundle/ChillActivityBundle/Export/Filter/UserScopeFilter.php b/src/Bundle/ChillActivityBundle/Export/Filter/CreatorScopeFilter.php similarity index 93% rename from src/Bundle/ChillActivityBundle/Export/Filter/UserScopeFilter.php rename to src/Bundle/ChillActivityBundle/Export/Filter/CreatorScopeFilter.php index d205e2d30..e5da96554 100644 --- a/src/Bundle/ChillActivityBundle/Export/Filter/UserScopeFilter.php +++ b/src/Bundle/ChillActivityBundle/Export/Filter/CreatorScopeFilter.php @@ -21,9 +21,9 @@ use Doctrine\ORM\QueryBuilder; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\Form\FormBuilderInterface; -class UserScopeFilter implements FilterInterface +class CreatorScopeFilter implements FilterInterface { - private const PREFIX = 'acp_act_filter_user_scope'; // creator ? cfr translation + private const PREFIX = 'acp_act_filter_creator_scope'; public function __construct( private readonly TranslatableStringHelper $translatableStringHelper @@ -39,7 +39,7 @@ class UserScopeFilter implements FilterInterface $p = self::PREFIX; $qb - ->leftJoin('activity.user', "{$p}_user") // createdBy ? cfr translation + ->leftJoin('activity.createdBy', "{$p}_user") ->leftJoin( UserScopeHistory::class, "{$p}_history", diff --git a/src/Bundle/ChillActivityBundle/Tests/Export/Filter/UserScopeFilterTest.php b/src/Bundle/ChillActivityBundle/Tests/Export/Filter/CreatorScopeFilterTest.php similarity index 86% rename from src/Bundle/ChillActivityBundle/Tests/Export/Filter/UserScopeFilterTest.php rename to src/Bundle/ChillActivityBundle/Tests/Export/Filter/CreatorScopeFilterTest.php index 858931327..bf11b0320 100644 --- a/src/Bundle/ChillActivityBundle/Tests/Export/Filter/UserScopeFilterTest.php +++ b/src/Bundle/ChillActivityBundle/Tests/Export/Filter/CreatorScopeFilterTest.php @@ -12,7 +12,7 @@ declare(strict_types=1); namespace Chill\ActivityBundle\Tests\Export\Filter; use Chill\ActivityBundle\Entity\Activity; -use Chill\ActivityBundle\Export\Filter\UserScopeFilter; +use Chill\ActivityBundle\Export\Filter\CreatorScopeFilter; use Chill\MainBundle\Entity\Scope; use Chill\MainBundle\Test\Export\AbstractFilterTest; use Doctrine\ORM\EntityManagerInterface; @@ -22,15 +22,15 @@ use Doctrine\ORM\EntityManagerInterface; * * @coversNothing */ -final class UserScopeFilterTest extends AbstractFilterTest +final class CreatorScopeFilterTest extends AbstractFilterTest { - private UserScopeFilter $filter; + private CreatorScopeFilter $filter; protected function setUp(): void { self::bootKernel(); - $this->filter = self::$container->get(UserScopeFilter::class); + $this->filter = self::$container->get(CreatorScopeFilter::class); } public function getFilter() diff --git a/src/Bundle/ChillActivityBundle/config/services/export.yaml b/src/Bundle/ChillActivityBundle/config/services/export.yaml index 24f10d399..6ce5b1d72 100644 --- a/src/Bundle/ChillActivityBundle/config/services/export.yaml +++ b/src/Bundle/ChillActivityBundle/config/services/export.yaml @@ -109,8 +109,10 @@ services: tags: - { name: chill.export_filter, alias: 'activity_user_filter' } - Chill\ActivityBundle\Export\Filter\UserScopeFilter: + Chill\ActivityBundle\Export\Filter\CreatorScopeFilter: tags: + # WARNING: for backward compatibility reason, the alias is named with userscope. Changing this will + # affect all saved exports (unless we write a migration for that) - { name: chill.export_filter, alias: 'activity_userscope_filter' } Chill\ActivityBundle\Export\Filter\UsersJobFilter: From 36b0844e796f87815a25be16b4749c4734f7fd29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Tue, 24 Oct 2023 14:17:28 +0200 Subject: [PATCH 2/4] Fix issue with duration aggregator as month --- .../AccompanyingCourseAggregators/DurationAggregator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/DurationAggregator.php b/src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/DurationAggregator.php index 5d0b0e87f..f5dc99115 100644 --- a/src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/DurationAggregator.php +++ b/src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/DurationAggregator.php @@ -38,7 +38,7 @@ final readonly class DurationAggregator implements AggregatorInterface match ($data['precision']) { 'day' => $qb->addSelect('(COALESCE(acp.closingDate, :now) - acp.openingDate) AS duration_aggregator'), 'week' => $qb->addSelect('(COALESCE(acp.closingDate, :now) - acp.openingDate) / 7 AS duration_aggregator'), - 'month' => $qb->addSelect('(EXTRACT (MONTH FROM AGE(COALESCE(acp.closingDate, :now), acp.openingDate)) * 12 + + 'month' => $qb->addSelect('(EXTRACT (YEAR FROM AGE(COALESCE(acp.closingDate, :now), acp.openingDate)) * 12 + EXTRACT (MONTH FROM AGE(COALESCE(acp.closingDate, :now), acp.openingDate))) AS duration_aggregator'), default => throw new \LogicException('precision not supported: '.$data['precision']), }; From 54ae17a8d25705697f3308b39ca15d0af0ebe3c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Tue, 24 Oct 2023 14:17:51 +0200 Subject: [PATCH 3/4] Fix label on some filters --- .../Export/Filter/SentReceivedFilter.php | 5 +++-- .../ChillActivityBundle/translations/messages.fr.yml | 8 ++++++-- src/Bundle/ChillPersonBundle/translations/messages.fr.yml | 8 ++++---- .../ChillThirdPartyBundle/translations/messages.fr.yml | 2 +- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/Bundle/ChillActivityBundle/Export/Filter/SentReceivedFilter.php b/src/Bundle/ChillActivityBundle/Export/Filter/SentReceivedFilter.php index 640f33592..3011627e8 100644 --- a/src/Bundle/ChillActivityBundle/Export/Filter/SentReceivedFilter.php +++ b/src/Bundle/ChillActivityBundle/Export/Filter/SentReceivedFilter.php @@ -23,8 +23,8 @@ use Symfony\Contracts\Translation\TranslatorInterface; class SentReceivedFilter implements FilterInterface { private const CHOICES = [ - 'is sent' => Activity::SENTRECEIVED_SENT, - 'is received' => Activity::SENTRECEIVED_RECEIVED, + 'export.filter.activity.by_sent_received.is sent' => Activity::SENTRECEIVED_SENT, + 'export.filter.activity.by_sent_received.is received' => Activity::SENTRECEIVED_RECEIVED, ]; private const DEFAULT_CHOICE = Activity::SENTRECEIVED_SENT; @@ -64,6 +64,7 @@ class SentReceivedFilter implements FilterInterface 'multiple' => false, 'expanded' => true, 'empty_data' => self::DEFAULT_CHOICE, + 'label' => 'export.filter.activity.by_sent_received.Sent or received', ]); } diff --git a/src/Bundle/ChillActivityBundle/translations/messages.fr.yml b/src/Bundle/ChillActivityBundle/translations/messages.fr.yml index a7112b534..7bb62435f 100644 --- a/src/Bundle/ChillActivityBundle/translations/messages.fr.yml +++ b/src/Bundle/ChillActivityBundle/translations/messages.fr.yml @@ -275,7 +275,7 @@ Filter activity by linked socialaction: Filtrer les échanges par action liée 'Filtered activity by linked socialaction: only %actions%': "Filtré par action liée: uniquement %actions%" Filter activity by linked socialissue: Filtrer les échanges par problématique liée 'Filtered activity by linked socialissue: only %issues%': "Filtré par problématique liée: uniquement %issues%" -Filter activity by user: Filtrer les échanges par créateur +Filter activity by user: Filtrer les échanges par utilisateur principal Filter activity by users: Filtrer les échanges par utilisateur participant Filter activity by creator: Filtrer les échanges par créateur de l'échange 'Filtered activity by user: only %users%': "Filtré par référent: uniquement %users%" @@ -359,7 +359,7 @@ export: Filter by users job: Filtrer les échanges par métier d'au moins un utilisateur participant 'Filtered activity by users job: only %jobs%': 'Filtré par métier d''au moins un utilisateur participant: seulement %jobs%' by_users_scope: - Filter by users scope: Filtrer les échanges par services d'au moins un utilisateur participant + Filter by users scope: Filtrer les échanges par service d'au moins un utilisateur participant 'Filtered activity by users scope: only %scopes%': 'Filtré par service d''au moins un utilisateur participant: seulement %scopes%' course_having_activity_between_date: Title: Filtrer les parcours ayant reçu un échange entre deux dates @@ -381,6 +381,10 @@ export: Filter activity by persons: Filtrer les échanges par usager participant 'Filtered activity by persons: only %persons%': 'Échanges filtrés par usagers participants: seulement %persons%' persons taking part on the activity: Usagers participants à l'échange + by_sent_received: + Sent or received: Envoyé ou reçu + is sent: envoyé + is received: reçu aggregator: acp: diff --git a/src/Bundle/ChillPersonBundle/translations/messages.fr.yml b/src/Bundle/ChillPersonBundle/translations/messages.fr.yml index 66aecff1f..f2a90c31f 100644 --- a/src/Bundle/ChillPersonBundle/translations/messages.fr.yml +++ b/src/Bundle/ChillPersonBundle/translations/messages.fr.yml @@ -505,10 +505,10 @@ Accepted origins: Origines "Filtered by origins: only %origins%": "Filtré par origine du parcours: uniquement %origins%" Group by origin: Grouper les parcours par origine du parcours -Filter by closing motive: Filtrer les parcours par motif de fermeture +Filter by closing motive: Filtrer les parcours par motif de clôture Accepted closingmotives: Motifs de clôture "Filtered by closingmotive: only %closingmotives%": "Filtré par motif de clôture: uniquement %closingmotives%" -Group by closing motive: Grouper les parcours par motif de fermeture +Group by closing motive: Grouper les parcours par motif de clôture Filter by administrative location: Filtrer les parcours par localisation administrative Accepted locations: Localisations administratives @@ -516,7 +516,7 @@ Administrative location: Localisation administrative "Filtered by administratives locations: only %locations%": "Filtré par localisation administrative: uniquement %locations%" Group by administrative location: Grouper les parcours par localisation administrative -Filter by requestor: Filtrer les parcours selon la présence du demandeur au sein des usagers concernés +Filter by requestor: Filtrer les parcours selon la nature du demandeur Accepted choices: '' is person concerned: Le demandeur est un usager concerné is other person: Le demandeur est un usager, mais n'est pas concerné @@ -1226,7 +1226,7 @@ export: referrer: Référent referrerSince: Référent depuis le locationIsPerson: Parcours localisé auprès d'un usager concerné - locationIsTemp: Parcours avec une localisation temporaire + locationIsTemp: Parcours avec une localisation temporaire ou auprès d'un usager locationPersonName: Usager auprès duquel le parcours est localisé locationPersonId: Identifiant de l'usager auprès duquel le parcours est localisé acpaddress_fieldscountry: Pays de l'adresse diff --git a/src/Bundle/ChillThirdPartyBundle/translations/messages.fr.yml b/src/Bundle/ChillThirdPartyBundle/translations/messages.fr.yml index 2bb17cca4..b6a568249 100644 --- a/src/Bundle/ChillThirdPartyBundle/translations/messages.fr.yml +++ b/src/Bundle/ChillThirdPartyBundle/translations/messages.fr.yml @@ -131,5 +131,5 @@ export: Filtered by person\'s who have a residential address located at a thirdparty of type %thirparty_type%: Uniquement les usagers qui ont une addresse de résidence chez un tiers de catégorie %thirdparty_type% is thirdparty: Le demandeur est un tiers -Filter by person's who have a residential address located at a thirdparty of type: Filtrer les usagers qui ont une addresse de résidence chez un tiers de catégorie "xxx" +Filter by person's who have a residential address located at a thirdparty of type: Filtrer les usagers qui ont une addresse de résidence chez un tiers "Filtered by person's who have a residential address located at a thirdparty of type %thirdparty_type% and valid on %date_calc%": "Uniquement les usagers qui ont une addresse de résidence chez un tiers de catégorie %thirdparty_type% et valide sur la date %date_calc%" From e635b73256fb2f9738f7ad17521905908918291a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Tue, 24 Oct 2023 14:18:00 +0200 Subject: [PATCH 4/4] DX: mark a class as final --- .../AccompanyingCourseFilters/UserWorkingOnCourseFilter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/UserWorkingOnCourseFilter.php b/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/UserWorkingOnCourseFilter.php index e73ef234a..42bb7dea3 100644 --- a/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/UserWorkingOnCourseFilter.php +++ b/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/UserWorkingOnCourseFilter.php @@ -28,7 +28,7 @@ use Symfony\Component\Form\FormBuilderInterface; * * Makes use of AccompanyingPeriodInfo */ -readonly class UserWorkingOnCourseFilter implements FilterInterface +final readonly class UserWorkingOnCourseFilter implements FilterInterface { public function __construct( private UserRender $userRender,