From 86ec020f804a79510dac8247856a8d6a9812cc0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Thu, 14 Apr 2022 00:02:52 +0200 Subject: [PATCH] fixes on address valid from edit for household --- .../Form/Type/AddressDateType.php | 29 ++++++++++++ .../Controller/HouseholdController.php | 47 +++++++++---------- .../Entity/Household/Household.php | 3 ++ .../address_valid_from_edit.html.twig | 21 +-------- .../views/Household/addresses.html.twig | 21 +++++---- .../translations/messages.fr.yml | 4 +- 6 files changed, 67 insertions(+), 58 deletions(-) create mode 100644 src/Bundle/ChillMainBundle/Form/Type/AddressDateType.php diff --git a/src/Bundle/ChillMainBundle/Form/Type/AddressDateType.php b/src/Bundle/ChillMainBundle/Form/Type/AddressDateType.php new file mode 100644 index 000000000..15cb2c778 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Form/Type/AddressDateType.php @@ -0,0 +1,29 @@ +add( + 'validFrom', + ChillDateType::class, + [ + 'required' => true, + ] + ); + } + + public function configureOptions(OptionsResolver $resolver) + { + $resolver->setDefault('data_class', Address::class); + } + +} diff --git a/src/Bundle/ChillPersonBundle/Controller/HouseholdController.php b/src/Bundle/ChillPersonBundle/Controller/HouseholdController.php index 1f5f21c40..8cee2982f 100644 --- a/src/Bundle/ChillPersonBundle/Controller/HouseholdController.php +++ b/src/Bundle/ChillPersonBundle/Controller/HouseholdController.php @@ -12,14 +12,17 @@ declare(strict_types=1); namespace Chill\PersonBundle\Controller; use Chill\MainBundle\Entity\Address; +use Chill\MainBundle\Form\Type\AddressDateType; use Chill\MainBundle\Form\Type\AddressType; use Chill\PersonBundle\Entity\Household\Household; use Chill\PersonBundle\Form\HouseholdType; use Chill\PersonBundle\Repository\Household\PositionRepository; use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter; +use Chill\PersonBundle\Security\Authorization\HouseholdVoter; use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Form\FormInterface; +use Symfony\Component\HttpFoundation\Exception\BadRequestException; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Security\Core\Security; @@ -197,41 +200,35 @@ class HouseholdController extends AbstractController */ public function addressValidFromEdit(Request $request, Household $household) { - // TODO ACL + $this->denyAccessUnlessGranted(HouseholdVoter::EDIT, $household); - $address_id = $request->query->get('address_id'); - $address = $this->getDoctrine()->getManager() - ->getRepository(Address::class) - ->find($address_id); + if (!$request->query->has('address_id')) { + throw new BadRequestException('parameter address_id is missing'); + } - $form = $this->createForm(AddressType::class, $address, []); + $address_id = $request->query->getInt('address_id'); - $form->handleRequest($request); - $addresses = $household->getAddressesOrdered(); - - foreach ($addresses as $a) { - if ($a->getId() === $address->getId()) { - $currentValueIndex = array_search($a, $addresses, true); + // loop over adresses of the household, to be sure that the household is associated + // to the edited address + $address = null; + foreach ($household->getAddresses() as $householdAddress) { + if ($address_id === $householdAddress->getId()) { + $address = $householdAddress; } } - if (count($addresses) > 1 && 0 < $currentValueIndex) { - $previousAddress = $addresses[$currentValueIndex - 1]; - $minValidFrom = $previousAddress->getValidTo(); - } else { - $minValidFrom = null; + if (null === $address) { + throw new BadRequestException('The edited address does not belongs to the household'); } - if (count($addresses) > 1 && count($addresses) > $currentValueIndex + 1) { - $nextAddress = $addresses[$currentValueIndex + 1]; - $maxValidFrom = $nextAddress->getValidFrom(); - } else { - $maxValidFrom = null; - } + $form = $this->createForm(AddressDateType::class, $address, []); + + $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { - $this->getDoctrine()->getManager()->persist($address); + $household->makeAddressConsistent(); + $this->getDoctrine()->getManager()->flush(); return $this->redirectToRoute('chill_person_household_addresses', [ @@ -245,8 +242,6 @@ class HouseholdController extends AbstractController 'household' => $household, 'address' => $address, 'form' => $form->createView(), - 'minValidFrom' => $minValidFrom, - 'maxValidFrom' => $maxValidFrom, ] ); } diff --git a/src/Bundle/ChillPersonBundle/Entity/Household/Household.php b/src/Bundle/ChillPersonBundle/Entity/Household/Household.php index fed9f0af0..19bda3785 100644 --- a/src/Bundle/ChillPersonBundle/Entity/Household/Household.php +++ b/src/Bundle/ChillPersonBundle/Entity/Household/Household.php @@ -151,6 +151,9 @@ class Household return $this->addresses; } + /** + * @return array|Address[] + */ public function getAddressesOrdered(): array { $addresses = $this->getAddresses()->toArray(); diff --git a/src/Bundle/ChillPersonBundle/Resources/views/Household/address_valid_from_edit.html.twig b/src/Bundle/ChillPersonBundle/Resources/views/Household/address_valid_from_edit.html.twig index a2b8753f5..b03538fa9 100644 --- a/src/Bundle/ChillPersonBundle/Resources/views/Household/address_valid_from_edit.html.twig +++ b/src/Bundle/ChillPersonBundle/Resources/views/Household/address_valid_from_edit.html.twig @@ -13,26 +13,7 @@
- {% if minValidFrom is not null and maxValidFrom is not null %} - {{ form_row(form.validFrom, {'attr': {'min': minValidFrom|date('Y-m-d'), 'max': maxValidFrom|date('Y-m-d') }}) }} - {% else %} - {% if minValidFrom is not null %} - {{ form_row(form.validFrom, {'attr': {'min': minValidFrom|date('Y-m-d')}}) }} - {% elseif maxValidFrom is not null %} - {{ form_row(form.validFrom, {'attr': {'max': maxValidFrom|date('Y-m-d')}}) }} - {% else %} - {{ form_row(form.validFrom) }} - {% endif %} - {% endif %} -
-