diff --git a/src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php b/src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php index eafdd2ae9..d8e45471a 100644 --- a/src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php +++ b/src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php @@ -2,17 +2,32 @@ namespace Chill\PersonBundle\Controller; +use Chill\PersonBundle\Form\HouseholdMemberType; +use Chill\PersonBundle\Entity\Household\HouseholdMember; use Symfony\Component\HttpFoundation\Exception\BadRequestException; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Component\Serializer\Exception; use Symfony\Component\Routing\Annotation\Route; use Chill\MainBundle\CRUD\Controller\ApiController; +use Symfony\Component\Translation\TranslatorInterface; use Chill\PersonBundle\Household\MembersEditor; use Symfony\Component\Serializer\Normalizer\AbstractNormalizer; class HouseholdMemberController extends ApiController { + private UrlGeneratorInterface $generator; + + private TranslatorInterface $translator; + + + public function __construct(UrlGeneratorInterface $generator, TranslatorInterface $translator) + { + $this->generator = $generator; + $this->translator = $translator; + } + /** * @Route( * "/api/1.0/person/household/members/move.{_format}", @@ -44,4 +59,39 @@ class HouseholdMemberController extends ApiController "groups" => ["read"], ]); } + + /** + * @Route( + * "/api/1.0/person/household/member/{id}/edit", + * name="chill_person_household_member_edit" + * ) + */ + public function editMembership(Request $request, HouseholdMember $member): Response + { + // TODO ACL + + $form = $this->createForm(HouseholdMemberType::class, $member); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $this->getDoctrine()->getManager()->flush(); + + $this->addFlash('success', $this->translator + ->trans('household.successfully saved member')) + ; + + return $this->redirect( + $request->get('returnPath', null) ?? + $this->generator->generate('chill_person_household_members', [ 'household_id' => + $member->getHousehold()->getId() ]) + ); + } + + return $this->render('@ChillPerson/Household/Member/edit.html.twig', [ + 'household' => $member->getHousehold(), + 'member' => $member, + 'form' => $form->createView() + ]); + + } } diff --git a/src/Bundle/ChillPersonBundle/Entity/Household/HouseholdMember.php b/src/Bundle/ChillPersonBundle/Entity/Household/HouseholdMember.php index cd58af565..58a731697 100644 --- a/src/Bundle/ChillPersonBundle/Entity/Household/HouseholdMember.php +++ b/src/Bundle/ChillPersonBundle/Entity/Household/HouseholdMember.php @@ -120,7 +120,7 @@ class HouseholdMember return $this->endDate; } - public function setEndDate(\DateTimeImmutable $endDate): self + public function setEndDate(?\DateTimeImmutable $endDate = null): self { $this->endDate = $endDate; diff --git a/src/Bundle/ChillPersonBundle/Entity/Household/Position.php b/src/Bundle/ChillPersonBundle/Entity/Household/Position.php index 156631b63..3ce95189d 100644 --- a/src/Bundle/ChillPersonBundle/Entity/Household/Position.php +++ b/src/Bundle/ChillPersonBundle/Entity/Household/Position.php @@ -77,6 +77,11 @@ class Position return $this->allowHolder; } + public function isAllowHolder(): ?bool + { + return $this->getAllowHolder(); + } + public function setAllowHolder(bool $allowHolder): self { $this->allowHolder = $allowHolder; diff --git a/src/Bundle/ChillPersonBundle/Form/HouseholdMemberType.php b/src/Bundle/ChillPersonBundle/Form/HouseholdMemberType.php new file mode 100644 index 000000000..44b364c56 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Form/HouseholdMemberType.php @@ -0,0 +1,42 @@ +add('startDate', ChillDateType::class, [ + 'label' => 'household.Start date', + 'input' => 'datetime_immutable', + ]) + ->add('endDate', ChillDateType::class, [ + 'label' => 'household.End date', + 'input' => 'datetime_immutable', + 'required' => false + ]) + ; + if ($options['data']->getPosition()->isAllowHolder()) { + $builder + ->add('holder', ChoiceType::class, [ + 'label' => 'household.holder', + 'choices' => [ + 'household.is holder' => true, + 'household.is not holder' => false + ] + ]); + } + $builder + ->add('comment', ChillTextareaType::class, [ + 'label' => 'household.Comment' + ]) + ; + } +} diff --git a/src/Bundle/ChillPersonBundle/Resources/views/Household/Member/edit.html.twig b/src/Bundle/ChillPersonBundle/Resources/views/Household/Member/edit.html.twig new file mode 100644 index 000000000..09813c2bb --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Resources/views/Household/Member/edit.html.twig @@ -0,0 +1,28 @@ +{% extends '@ChillPerson/Household/layout.html.twig' %} + +{% block title 'household.Edit member household'|trans %} + +{% block content %} + +
Household with id {{ household.id }}
- {% for p in positions %}{{ 'Any persons into this position'|trans }}
+{{ 'household.Any persons into this position'|trans }}
{% endif %} {% set members = household.nonCurrentMembersByPosition(p) %} @@ -66,38 +77,49 @@- {{ m.comment }} -+
+ {{ m.comment|chill_markdown_to_html }} ++