Fix geographical unit stat aggregator: date range on association with left join

This commit is contained in:
Julien Fastré 2023-11-06 22:03:37 +01:00
parent dd75cb695c
commit 4d20a46717
Signed by: julienfastre
GPG Key ID: BDE2190974723FCB
2 changed files with 23 additions and 12 deletions

View File

@ -0,0 +1,5 @@
kind: Fixed
body: 'Export: fix aggregator by geographical unit on person: avoid inconsistencies'
time: 2023-11-06T22:02:50.364184265+01:00
custom:
Issue: "185"

View File

@ -19,6 +19,7 @@ use Chill\MainBundle\Service\RollingDate\RollingDate;
use Chill\MainBundle\Service\RollingDate\RollingDateConverterInterface;
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
use Chill\PersonBundle\Export\Declarations;
use Doctrine\ORM\Query\Expr\Join;
use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface;
@ -35,21 +36,26 @@ class GeographicalUnitAggregator implements AggregatorInterface
public function alterQuery(QueryBuilder $qb, $data): void
{
$qb
->leftJoin('person.householdAddresses', 'person_geog_agg_current_household_address')
->leftJoin('person_geog_agg_current_household_address.address', 'person_geog_agg_address')
->leftJoin('person_geog_agg_address.geographicalUnits', 'person_geog_agg_geog_unit')
->andWhere(
$qb->expr()->orX(
$qb->expr()->isNull('person_geog_agg_current_household_address'),
$qb->expr()->andX(
$qb->expr()->lte('person_geog_agg_current_household_address.validFrom', ':person_geog_agg_date'),
$qb->expr()->orX(
$qb->expr()->isNull('person_geog_agg_current_household_address.validTo'),
$qb->expr()->gt('person_geog_agg_current_household_address.validTo', ':person_geog_agg_date')
)
->leftJoin(
'person.householdAddresses',
'person_geog_agg_current_household_address',
Join::WITH,
$qb->expr()->andX(
$qb->expr()->lte('person_geog_agg_current_household_address.validFrom', ':person_geog_agg_date'),
$qb->expr()->orX(
$qb->expr()->isNull('person_geog_agg_current_household_address.validTo'),
$qb->expr()->gt('person_geog_agg_current_household_address.validTo', ':person_geog_agg_date')
)
)
)
->leftJoin(
'person_geog_agg_current_household_address.address',
'person_geog_agg_address'
)
->leftJoin(
'person_geog_agg_address.geographicalUnits',
'person_geog_agg_geog_unit'
)
->andWhere(
$qb->expr()->orX(
$qb->expr()->isNull('person_geog_agg_geog_unit'),