From 4bc8da965587b6862cfa2d7b63446ca4849a84cd Mon Sep 17 00:00:00 2001 From: nobohan Date: Tue, 19 Apr 2022 14:56:41 +0200 Subject: [PATCH] person: create a person with address (php form) --- .../Controller/PersonController.php | 21 +++++++++++++++++++ .../Form/CreationPersonType.php | 12 +++++++++++ .../public/page/person/create-person.js | 18 ++++++++++++++++ .../Resources/views/Person/create.html.twig | 13 ++++++++++++ .../ChillPersonBundle/chill.webpack.config.js | 1 + .../translations/messages.fr.yml | 1 + 6 files changed, 66 insertions(+) create mode 100644 src/Bundle/ChillPersonBundle/Resources/public/page/person/create-person.js diff --git a/src/Bundle/ChillPersonBundle/Controller/PersonController.php b/src/Bundle/ChillPersonBundle/Controller/PersonController.php index 22d3d9388..8cf0c3118 100644 --- a/src/Bundle/ChillPersonBundle/Controller/PersonController.php +++ b/src/Bundle/ChillPersonBundle/Controller/PersonController.php @@ -12,6 +12,8 @@ declare(strict_types=1); namespace Chill\PersonBundle\Controller; use Chill\PersonBundle\Config\ConfigPersonAltNamesHelper; +use Chill\PersonBundle\Entity\Household\Household; +use Chill\PersonBundle\Entity\Household\HouseholdMember; use Chill\PersonBundle\Entity\Person; use Chill\PersonBundle\Form\CreationPersonType; use Chill\PersonBundle\Form\PersonType; @@ -260,6 +262,25 @@ final class PersonController extends AbstractController ]); } + $address = $form->get('address')->getData(); + $addressForm = $form->get('addressForm')->getData(); + + if(null !== $address and $addressForm){ + + $household = new Household(); + + $member = new HouseholdMember(); + $member->setPerson($person); + $member->setStartDate(new \DateTimeImmutable()); + + $household->addMember($member); + $household->setForceAddress($address); + + $this->em->persist($member); + $this->em->persist($household); + $this->em->flush(); + } + return $this->redirectToRoute( 'chill_person_general_edit', ['person_id' => $person->getId()] diff --git a/src/Bundle/ChillPersonBundle/Form/CreationPersonType.php b/src/Bundle/ChillPersonBundle/Form/CreationPersonType.php index 22fd0a12d..ef255628e 100644 --- a/src/Bundle/ChillPersonBundle/Form/CreationPersonType.php +++ b/src/Bundle/ChillPersonBundle/Form/CreationPersonType.php @@ -14,6 +14,7 @@ namespace Chill\PersonBundle\Form; use Chill\MainBundle\Form\Event\CustomizeFormEvent; use Chill\MainBundle\Form\Type\ChillDateType; use Chill\MainBundle\Form\Type\ChillPhoneNumberType; +use Chill\MainBundle\Form\Type\PickAddressType; use Chill\MainBundle\Form\Type\PickCenterType; use Chill\MainBundle\Form\Type\PickCivilityType; use Chill\PersonBundle\Config\ConfigPersonAltNamesHelper; @@ -25,7 +26,9 @@ use libphonenumber\PhoneNumberType; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\Extension\Core\Type\EmailType; +use Symfony\Component\Form\Extension\Core\Type\HiddenType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; @@ -77,6 +80,15 @@ final class CreationPersonType extends AbstractType ]) ->add('email', EmailType::class, [ 'required' => false, + ]) + ->add('addressForm', CheckboxType::class, [ + 'label' => 'Create a household and add an address', + 'required' => false, + 'mapped' => false + ]) + ->add('address', PickAddressType::class, [ + 'required' => false, + 'mapped' => false ]); if ($this->askCenters) { diff --git a/src/Bundle/ChillPersonBundle/Resources/public/page/person/create-person.js b/src/Bundle/ChillPersonBundle/Resources/public/page/person/create-person.js new file mode 100644 index 000000000..7e29c4530 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Resources/public/page/person/create-person.js @@ -0,0 +1,18 @@ +import { ShowHide } from 'ShowHide'; + +const addressForm = document.getElementById("addressForm"); +const address = document.getElementById("address"); + +new ShowHide({ + froms: [addressForm], + container: [address], + test: function(froms) { + for (let f of froms.values()) { + for (let input of f.querySelectorAll('input').values()) { + return input.checked; + } + } + return false; + }, + event_name: 'change' +}); diff --git a/src/Bundle/ChillPersonBundle/Resources/views/Person/create.html.twig b/src/Bundle/ChillPersonBundle/Resources/views/Person/create.html.twig index a5c99379f..a43001ab3 100644 --- a/src/Bundle/ChillPersonBundle/Resources/views/Person/create.html.twig +++ b/src/Bundle/ChillPersonBundle/Resources/views/Person/create.html.twig @@ -107,6 +107,13 @@ {{ form_row(form.center) }} {% endif %} +
+ {{ form_row(form.addressForm) }} +
+
+ {{ form_row(form.address) }} +
+