Merge branch '172-missing-exports' into 'master'

Fix some issues with exports

Closes #172

See merge request Chill-Projet/chill-bundles!601
This commit is contained in:
Julien Fastré 2023-10-24 13:47:30 +00:00
commit 461995b56b
9 changed files with 26 additions and 19 deletions

View File

@ -21,9 +21,9 @@ use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface; 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( public function __construct(
private readonly TranslatableStringHelper $translatableStringHelper private readonly TranslatableStringHelper $translatableStringHelper
@ -39,7 +39,7 @@ class UserScopeFilter implements FilterInterface
$p = self::PREFIX; $p = self::PREFIX;
$qb $qb
->leftJoin('activity.user', "{$p}_user") // createdBy ? cfr translation ->leftJoin('activity.createdBy', "{$p}_user")
->leftJoin( ->leftJoin(
UserScopeHistory::class, UserScopeHistory::class,
"{$p}_history", "{$p}_history",

View File

@ -23,8 +23,8 @@ use Symfony\Contracts\Translation\TranslatorInterface;
class SentReceivedFilter implements FilterInterface class SentReceivedFilter implements FilterInterface
{ {
private const CHOICES = [ private const CHOICES = [
'is sent' => Activity::SENTRECEIVED_SENT, 'export.filter.activity.by_sent_received.is sent' => Activity::SENTRECEIVED_SENT,
'is received' => Activity::SENTRECEIVED_RECEIVED, 'export.filter.activity.by_sent_received.is received' => Activity::SENTRECEIVED_RECEIVED,
]; ];
private const DEFAULT_CHOICE = Activity::SENTRECEIVED_SENT; private const DEFAULT_CHOICE = Activity::SENTRECEIVED_SENT;
@ -64,6 +64,7 @@ class SentReceivedFilter implements FilterInterface
'multiple' => false, 'multiple' => false,
'expanded' => true, 'expanded' => true,
'empty_data' => self::DEFAULT_CHOICE, 'empty_data' => self::DEFAULT_CHOICE,
'label' => 'export.filter.activity.by_sent_received.Sent or received',
]); ]);
} }

View File

@ -12,7 +12,7 @@ declare(strict_types=1);
namespace Chill\ActivityBundle\Tests\Export\Filter; namespace Chill\ActivityBundle\Tests\Export\Filter;
use Chill\ActivityBundle\Entity\Activity; 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\Entity\Scope;
use Chill\MainBundle\Test\Export\AbstractFilterTest; use Chill\MainBundle\Test\Export\AbstractFilterTest;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
@ -22,15 +22,15 @@ use Doctrine\ORM\EntityManagerInterface;
* *
* @coversNothing * @coversNothing
*/ */
final class UserScopeFilterTest extends AbstractFilterTest final class CreatorScopeFilterTest extends AbstractFilterTest
{ {
private UserScopeFilter $filter; private CreatorScopeFilter $filter;
protected function setUp(): void protected function setUp(): void
{ {
self::bootKernel(); self::bootKernel();
$this->filter = self::$container->get(UserScopeFilter::class); $this->filter = self::$container->get(CreatorScopeFilter::class);
} }
public function getFilter() public function getFilter()

View File

@ -109,8 +109,10 @@ services:
tags: tags:
- { name: chill.export_filter, alias: 'activity_user_filter' } - { name: chill.export_filter, alias: 'activity_user_filter' }
Chill\ActivityBundle\Export\Filter\UserScopeFilter: Chill\ActivityBundle\Export\Filter\CreatorScopeFilter:
tags: 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' } - { name: chill.export_filter, alias: 'activity_userscope_filter' }
Chill\ActivityBundle\Export\Filter\UsersJobFilter: Chill\ActivityBundle\Export\Filter\UsersJobFilter:

View File

@ -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%" '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 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%" '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 users: Filtrer les échanges par utilisateur participant
Filter activity by creator: Filtrer les échanges par créateur de l'échange 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%" '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 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%' 'Filtered activity by users job: only %jobs%': 'Filtré par métier d''au moins un utilisateur participant: seulement %jobs%'
by_users_scope: 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%' 'Filtered activity by users scope: only %scopes%': 'Filtré par service d''au moins un utilisateur participant: seulement %scopes%'
course_having_activity_between_date: course_having_activity_between_date:
Title: Filtrer les parcours ayant reçu un échange entre deux dates 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 Filter activity by persons: Filtrer les échanges par usager participant
'Filtered activity by persons: only %persons%': 'Échanges filtrés par usagers participants: seulement %persons%' 'Filtered activity by persons: only %persons%': 'Échanges filtrés par usagers participants: seulement %persons%'
persons taking part on the activity: Usagers participants à l'échange 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: aggregator:
acp: acp:

View File

@ -38,7 +38,7 @@ final readonly class DurationAggregator implements AggregatorInterface
match ($data['precision']) { match ($data['precision']) {
'day' => $qb->addSelect('(COALESCE(acp.closingDate, :now) - acp.openingDate) AS duration_aggregator'), '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'), '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'), EXTRACT (MONTH FROM AGE(COALESCE(acp.closingDate, :now), acp.openingDate))) AS duration_aggregator'),
default => throw new \LogicException('precision not supported: '.$data['precision']), default => throw new \LogicException('precision not supported: '.$data['precision']),
}; };

View File

@ -28,7 +28,7 @@ use Symfony\Component\Form\FormBuilderInterface;
* *
* Makes use of AccompanyingPeriodInfo * Makes use of AccompanyingPeriodInfo
*/ */
readonly class UserWorkingOnCourseFilter implements FilterInterface final readonly class UserWorkingOnCourseFilter implements FilterInterface
{ {
public function __construct( public function __construct(
private UserRender $userRender, private UserRender $userRender,

View File

@ -505,10 +505,10 @@ Accepted origins: Origines
"Filtered by origins: only %origins%": "Filtré par origine du parcours: uniquement %origins%" "Filtered by origins: only %origins%": "Filtré par origine du parcours: uniquement %origins%"
Group by origin: Grouper les parcours par origine du parcours 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 Accepted closingmotives: Motifs de clôture
"Filtered by closingmotive: only %closingmotives%": "Filtré par motif de clôture: uniquement %closingmotives%" "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 Filter by administrative location: Filtrer les parcours par localisation administrative
Accepted locations: Localisations administratives Accepted locations: Localisations administratives
@ -516,7 +516,7 @@ Administrative location: Localisation administrative
"Filtered by administratives locations: only %locations%": "Filtré par localisation administrative: uniquement %locations%" "Filtered by administratives locations: only %locations%": "Filtré par localisation administrative: uniquement %locations%"
Group by administrative location: Grouper les parcours par localisation administrative 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: '' Accepted choices: ''
is person concerned: Le demandeur est un usager concerné is person concerned: Le demandeur est un usager concerné
is other person: Le demandeur est un usager, mais n'est pas concerné is other person: Le demandeur est un usager, mais n'est pas concerné
@ -1226,7 +1226,7 @@ export:
referrer: Référent referrer: Référent
referrerSince: Référent depuis le referrerSince: Référent depuis le
locationIsPerson: Parcours localisé auprès d'un usager concerné 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é locationPersonName: Usager auprès duquel le parcours est localisé
locationPersonId: Identifiant de l'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 acpaddress_fieldscountry: Pays de l'adresse

View File

@ -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% 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 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%" "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%"