From f827e50431918f9216f057a0e9f5dd7b5fdc10bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Mon, 14 Jun 2021 22:30:52 +0200 Subject: [PATCH] =?UTF-8?q?ajout=20m=C3=A9tadonn=C3=A9es=20membres?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controller/HouseholdController.php | 46 +++++++++++++++++ .../Entity/Household/Household.php | 51 +++++++++++++++++++ .../ChillPersonBundle/Form/HouseholdType.php | 40 +++++++++++++++ .../modules/household_edit_metadata/index.js | 25 +++++++++ .../Household/edit_member_metadata.html.twig | 42 +++++++++++++++ .../views/Household/members.html.twig | 22 ++++++++ .../ChillPersonBundle/chill.webpack.config.js | 1 + .../migrations/Version20210614191600.php | 34 +++++++++++++ .../translations/messages+intl-icu.fr.yaml | 9 ++++ 9 files changed, 270 insertions(+) create mode 100644 src/Bundle/ChillPersonBundle/Form/HouseholdType.php create mode 100644 src/Bundle/ChillPersonBundle/Resources/public/modules/household_edit_metadata/index.js create mode 100644 src/Bundle/ChillPersonBundle/Resources/views/Household/edit_member_metadata.html.twig create mode 100644 src/Bundle/ChillPersonBundle/migrations/Version20210614191600.php diff --git a/src/Bundle/ChillPersonBundle/Controller/HouseholdController.php b/src/Bundle/ChillPersonBundle/Controller/HouseholdController.php index 951030b8e..1ca26ba59 100644 --- a/src/Bundle/ChillPersonBundle/Controller/HouseholdController.php +++ b/src/Bundle/ChillPersonBundle/Controller/HouseholdController.php @@ -2,10 +2,12 @@ namespace Chill\PersonBundle\Controller; +use Chill\PersonBundle\Form\HouseholdType; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Translation\TranslatorInterface; use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Chill\PersonBundle\Entity\Household\Household; use Chill\PersonBundle\Entity\Household\Position; @@ -15,6 +17,16 @@ use Chill\PersonBundle\Entity\Household\Position; */ class HouseholdController extends AbstractController { + private TranslatorInterface $translator; + + /** + * @param TranslatorInterface $translator + */ + public function __construct(TranslatorInterface $translator) + { + $this->translator = $translator; + } + /** * @Route( * "/{household_id}/summary", @@ -108,4 +120,38 @@ class HouseholdController extends AbstractController ] ); } + + /** + * @Route( + * "/{household_id}/members/metadata/edit", + * name="chill_person_household_members_metadata_edit", + * methods={"GET", "POST"} + * ) + * @ParamConverter("household", options={"id" = "household_id"}) + */ + public function editHouseholdMetadata(Request $request, Household $household) + { + // TODO ACL + $form = $this->createForm( + HouseholdType::class, + $household + ); + + $form->handleRequest($request); + + if ($form->isSubmitted() and $form->isValid()) { + $this->getDoctrine()->getManager()->flush(); + + $this->addFlash('success', $this->translator->trans('household.data_saved')); + + return $this->redirectToRoute('chill_person_household_members', [ + 'household_id' => $household->getId() + ]); + } + + return $this->render('@ChillPerson/Household/edit_member_metadata.html.twig', [ + 'household' => $household, + 'form' => $form->createView() + ]); + } } diff --git a/src/Bundle/ChillPersonBundle/Entity/Household/Household.php b/src/Bundle/ChillPersonBundle/Entity/Household/Household.php index 1036481b7..99dc0cb01 100644 --- a/src/Bundle/ChillPersonBundle/Entity/Household/Household.php +++ b/src/Bundle/ChillPersonBundle/Entity/Household/Household.php @@ -51,6 +51,21 @@ class Household */ private Collection $members; + /** + * @ORM\Column(type="text", name="comment_members", options={"default": ""}) + */ + private string $commentMembers = ""; + + /** + * @ORM\Column(type="boolean", name="waiting_for_birth", options={"default": false}) + */ + private bool $waitingForBirth = false; + + /** + * @ORM\Column(type="date_immutable", name="waiting_for_birth_date", nullable=true, options={"default": null}) + */ + private ?\DateTimeImmutable $waitingForBirthDate = null; + public function __construct() { $this->addresses = new ArrayCollection(); @@ -206,4 +221,40 @@ class Household return $this; } + public function getCommentMembers(): ?string + { + return $this->commentMembers; + } + + public function setCommentMembers(string $commentMembers): self + { + $this->commentMembers = $commentMembers; + + return $this; + } + + public function getWaitingForBirth(): bool + { + return $this->waitingForBirth; + } + + public function setWaitingForBirth(bool $waitingForBirth): self + { + $this->waitingForBirth = $waitingForBirth; + + return $this; + } + + public function getWaitingForBirthDate(): ?\DateTimeImmutable + { + return $this->waitingForBirthDate; + } + + public function setWaitingForBirthDate(?\DateTimeImmutable $waitingForBirthDate): self + { + $this->waitingForBirthDate = $waitingForBirthDate; + + return $this; + } + } diff --git a/src/Bundle/ChillPersonBundle/Form/HouseholdType.php b/src/Bundle/ChillPersonBundle/Form/HouseholdType.php new file mode 100644 index 000000000..b49ed8e8e --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Form/HouseholdType.php @@ -0,0 +1,40 @@ +add('commentMembers', ChillTextareaType::class, [ + 'label' => 'household.comment_membership', + 'required' => false + ]) + ->add('waitingForBirth', CheckboxType::class, [ + 'required' => false, + 'label' => 'household.expecting_birth' + ]) + ->add('waitingForBirthDate', ChillDateType::class, [ + 'required' => false, + 'label' => 'household.date_expecting_birth', + 'input' => 'datetime_immutable' + ]) + ; + } + + public function configureOptions(OptionsResolver $resolver) + { + $resolver->setDefaults([ + 'data_class' => Household::class, + ]); + } +} diff --git a/src/Bundle/ChillPersonBundle/Resources/public/modules/household_edit_metadata/index.js b/src/Bundle/ChillPersonBundle/Resources/public/modules/household_edit_metadata/index.js new file mode 100644 index 000000000..511ccf90f --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Resources/public/modules/household_edit_metadata/index.js @@ -0,0 +1,25 @@ +import { ShowHide } from 'ShowHide/show_hide.js'; + + let + k = document.getElementById('waitingForBirthContainer'), + waitingForBirthDate = document.getElementById('waitingForBirthDateContainer') + ; + + console.log(k ); + + new ShowHide({ + 'container': [waitingForBirthDate], + 'froms': [k ], + 'event_name': 'input', + 'debug': true, + 'test': function(froms, event) { + for (let f of froms.values()) { + console.log(f); + for (let input of f.querySelectorAll('input').values()) { + return input.checked; + } + } + + return false; + } + }); diff --git a/src/Bundle/ChillPersonBundle/Resources/views/Household/edit_member_metadata.html.twig b/src/Bundle/ChillPersonBundle/Resources/views/Household/edit_member_metadata.html.twig new file mode 100644 index 000000000..74ccf87bd --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Resources/views/Household/edit_member_metadata.html.twig @@ -0,0 +1,42 @@ +{% extends '@ChillPerson/Household/layout.html.twig' %} + +{% block title 'household.Edit member metadata'|trans %} + +{% block content %} +

{{ block('title') }}

+ +{{ form_start(form) }} + +{{ form_row(form.commentMembers) }} + +
+{{ form_row(form.waitingForBirth) }} +
+ +
+{{ form_row(form.waitingForBirthDate) }} +
+ + + +{{ form_end(form) }} + +{% endblock %} + +{% block js %} +{{ encore_entry_script_tags('household_edit_metadata') }} +{% endblock %} diff --git a/src/Bundle/ChillPersonBundle/Resources/views/Household/members.html.twig b/src/Bundle/ChillPersonBundle/Resources/views/Household/members.html.twig index 72ac0d4a1..6c001f5fb 100644 --- a/src/Bundle/ChillPersonBundle/Resources/views/Household/members.html.twig +++ b/src/Bundle/ChillPersonBundle/Resources/views/Household/members.html.twig @@ -5,6 +5,20 @@ {% block content %}

{{ block('title') }}

+{% if household.commentMembers is not empty %} +
+ {{ household.commentMembers|chill_markdown_to_html }} +
+{% endif %} + +{% if household.waitingForBirth %} + {% if household.waitingForBirthDate is not null %} + {{ 'household.Expecting for birth on date'|trans({ 'date': household.waitingForBirthDate|format_date('long') }) }} + {% else %} + {{ 'household.Expecting for birth'|trans }} + {% endif %} +{% endif %} + {% for p in positions %}

{{ p.label|localize_translatable_string }}

@@ -139,6 +153,14 @@ {% endfor %}