From b36e37d9c5fd0792ae2aabd03a89a751e265d03b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Tue, 12 Sep 2023 15:42:13 +0200 Subject: [PATCH] Fix CompositionFilter --- .../HouseholdFilters/CompositionFilter.php | 38 +++++++++---------- .../CompositionFilterTest.php | 7 ++-- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/Bundle/ChillPersonBundle/Export/Filter/HouseholdFilters/CompositionFilter.php b/src/Bundle/ChillPersonBundle/Export/Filter/HouseholdFilters/CompositionFilter.php index 498003938..3fb635828 100644 --- a/src/Bundle/ChillPersonBundle/Export/Filter/HouseholdFilters/CompositionFilter.php +++ b/src/Bundle/ChillPersonBundle/Export/Filter/HouseholdFilters/CompositionFilter.php @@ -22,12 +22,13 @@ use Doctrine\ORM\Query\Expr; use Doctrine\ORM\QueryBuilder; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\Form\FormBuilderInterface; -use function in_array; -class CompositionFilter implements FilterInterface +readonly class CompositionFilter implements FilterInterface { - public function __construct(private readonly TranslatableStringHelper $translatableStringHelper, private readonly RollingDateConverterInterface $rollingDateConverter) - { + public function __construct( + private TranslatableStringHelper $translatableStringHelper, + private RollingDateConverterInterface $rollingDateConverter + ) { } public function addRole(): ?string @@ -35,25 +36,24 @@ class CompositionFilter implements FilterInterface return null; } - public function alterQuery(QueryBuilder $qb, $data) + public function alterQuery(QueryBuilder $qb, $data): void { - if (!in_array('composition_type_filter', $qb->getAllAliases(), true)) { - $clause = - $qb->expr()->andX( - $qb->expr()->lte('composition_type_filter.startDate', ':ondate_composition_type_filter'), - $qb->expr()->orX( - $qb->expr()->gt('composition_type_filter.endDate', ':ondate_composition_type_filter'), - $qb->expr()->isNull('composition_type_filter.endDate') - ) - ); + // there is no test on the aliases here: the name should be unique + $clause = + $qb->expr()->andX( + $qb->expr()->lte('composition_type_filter_composition.startDate', ':ondate_composition_type_filter'), + $qb->expr()->orX( + $qb->expr()->gt('composition_type_filter_composition.endDate', ':ondate_composition_type_filter'), + $qb->expr()->isNull('composition_type_filter_composition.endDate') + ) + ); - $qb->join('household.compositions', 'composition', Expr\Join::WITH, $clause); - } + $qb->join('household.compositions', 'composition_type_filter_composition', Expr\Join::WITH, $clause); - $whereClause = $qb->expr()->in('composition_type_filter.householdCompositionType', ':compositions'); + $whereClause = $qb->expr()->in('composition_type_filter_composition.householdCompositionType', ':compositions_composition_type_filter'); $qb->andWhere($whereClause); - $qb->setParameter('compositions', $data['accepted_composition']); + $qb->setParameter('compositions_composition_type_filter', $data['accepted_composition']); $qb->setParameter( 'ondate_composition_type_filter', $this->rollingDateConverter->convert($data['on_date']) @@ -65,7 +65,7 @@ class CompositionFilter implements FilterInterface return Declarations::HOUSEHOLD_TYPE; } - public function buildForm(FormBuilderInterface $builder) + public function buildForm(FormBuilderInterface $builder): void { $builder ->add('accepted_composition', EntityType::class, [ diff --git a/src/Bundle/ChillPersonBundle/Tests/Export/Filter/HouseholdFilters/CompositionFilterTest.php b/src/Bundle/ChillPersonBundle/Tests/Export/Filter/HouseholdFilters/CompositionFilterTest.php index 74f8a787f..033e3fdbe 100644 --- a/src/Bundle/ChillPersonBundle/Tests/Export/Filter/HouseholdFilters/CompositionFilterTest.php +++ b/src/Bundle/ChillPersonBundle/Tests/Export/Filter/HouseholdFilters/CompositionFilterTest.php @@ -15,9 +15,8 @@ use Chill\MainBundle\Service\RollingDate\RollingDate; use Chill\MainBundle\Test\Export\AbstractFilterTest; use Chill\PersonBundle\Entity\Household\Household; use Chill\PersonBundle\Entity\Household\HouseholdCompositionType; -use Chill\PersonBundle\Entity\Person\PersonCenterHistory; use Chill\PersonBundle\Export\Filter\HouseholdFilters\CompositionFilter; -use DateTime; +use DateTimeImmutable; use Doctrine\ORM\EntityManagerInterface; /** @@ -35,7 +34,7 @@ final class CompositionFilterTest extends AbstractFilterTest $this->filter = self::$container->get('chill.person.export.filter_household_composition'); } - public function getFilter() + public function getFilter(): CompositionFilter { return $this->filter; } @@ -78,7 +77,7 @@ final class CompositionFilterTest extends AbstractFilterTest ->join('acppart.accompanyingPeriod', 'acp') ->andWhere('acppart.startDate != acppart.endDate OR acppart.endDate IS NULL') ->andWhere('hmember.startDate <= :count_household_at_date AND (hmember.endDate IS NULL OR hmember.endDate > :count_household_at_date)') - ->setParameter('count_household_at_date', new \DateTimeImmutable('today')); + ->setParameter('count_household_at_date', new DateTimeImmutable('today')); $qb ->select('COUNT(DISTINCT household.id) AS household_export_result')