person: add current residential address in normalizer

This commit is contained in:
nobohan 2022-02-17 15:42:37 +01:00
parent 2926965400
commit 24fc7a216b
2 changed files with 25 additions and 1 deletions

View File

@ -11,10 +11,14 @@ declare(strict_types=1);
namespace Chill\PersonBundle\Repository;
use Chill\PersonBundle\Entity\Person;
use Chill\PersonBundle\Entity\Person\ResidentialAddress;
use DateTimeImmutable;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use function Symfony\Component\DependencyInjection\Loader\Configurator\ref;
/**
* @method ResidentialAddress|null find($id, $lockMode = null, $lockVersion = null)
* @method ResidentialAddress|null findOneBy(array $criteria, array $orderBy = null)
@ -28,6 +32,19 @@ class ResidentialAddressRepository extends ServiceEntityRepository
parent::__construct($registry, ResidentialAddress::class);
}
public function findCurrentResidentialAddressByPerson(Person $person, ?DateTimeImmutable $at = null): ?ResidentialAddress
{
$addresses = $this->findBy(['person' => $person], ['startDate' => 'DESC']);
$date = null === $at ? new DateTimeImmutable('today') : $at;
foreach ($addresses as $a) {
if($a->getStartDate() < $date && $a->getEndDate() > $date) {
return $a;
}
}
return null;
}
// /**
// * @return ResidentialAddress[] Returns an array of ResidentialAddress objects
// */

View File

@ -17,6 +17,7 @@ use Chill\MainBundle\Templating\Entity\ChillEntityRenderExtension;
use Chill\PersonBundle\Entity\Person;
use Chill\PersonBundle\Entity\PersonAltName;
use Chill\PersonBundle\Repository\PersonRepository;
use Chill\PersonBundle\Repository\ResidentialAddressRepository;
use DateTime;
use DateTimeImmutable;
use Doctrine\Common\Collections\Collection;
@ -51,14 +52,18 @@ class PersonJsonNormalizer implements
private PersonRepository $repository;
private ResidentialAddressRepository $residentialAddressRepository;
public function __construct(
ChillEntityRenderExtension $render,
PersonRepository $repository,
CenterResolverManagerInterface $centerResolverManager
CenterResolverManagerInterface $centerResolverManager,
ResidentialAddressRepository $residentialAddressRepository
) {
$this->render = $render;
$this->repository = $repository;
$this->centerResolverManager = $centerResolverManager;
$this->residentialAddressRepository = $residentialAddressRepository;
}
public function denormalize($data, $type, $format = null, array $context = [])
@ -181,6 +186,7 @@ class PersonJsonNormalizer implements
public function normalize($person, $format = null, array $context = [])
{
$household = $person->getCurrentHousehold();
$currentResidentialAddress = $this->residentialAddressRepository->findCurrentResidentialAddressByPerson($person);
return [
'type' => 'person',
@ -200,6 +206,7 @@ class PersonJsonNormalizer implements
'gender' => $person->getGender(),
'current_household_address' => $this->normalizer->normalize($person->getCurrentHouseholdAddress(), $format, $context),
'current_household_id' => $household ? $this->normalizer->normalize($household->getId(), $format, $context) : null,
'current_residential_address' => $currentResidentialAddress ? $this->normalizer->normalize($currentResidentialAddress->getAddress()): null
];
}