diff --git a/src/Bundle/ChillMainBundle/Doctrine/Model/TrackCreationTrait.php b/src/Bundle/ChillMainBundle/Doctrine/Model/TrackCreationTrait.php new file mode 100644 index 000000000..a991399c8 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Doctrine/Model/TrackCreationTrait.php @@ -0,0 +1,56 @@ +createdAt; + } + + public function getCreatedBy(): ?User + { + return $this->createdBy; + } + + public function setCreatedAt(DateTimeInterface $datetime): self + { + $this->createdAt = $datetime instanceof DateTime ? DateTimeImmutable::createFromMutable($datetime) : $datetime; + + return $this; + } + + public function setCreatedBy(User $user): self + { + $this->createdBy = $user; + + return $this; + } +} diff --git a/src/Bundle/ChillMainBundle/Doctrine/Model/TrackUpdateTrait.php b/src/Bundle/ChillMainBundle/Doctrine/Model/TrackUpdateTrait.php new file mode 100644 index 000000000..3c706459c --- /dev/null +++ b/src/Bundle/ChillMainBundle/Doctrine/Model/TrackUpdateTrait.php @@ -0,0 +1,56 @@ +updatedAt; + } + + public function getUpdatedBy(): ?User + { + return $this->updatedBy; + } + + public function setUpdatedAt(DateTimeInterface $datetime): self + { + $this->updatedAt = $datetime instanceof DateTime ? DateTimeImmutable::createFromMutable($datetime) : $datetime; + + return $this; + } + + public function setUpdatedBy(User $user): self + { + $this->updatedBy = $user; + + return $this; + } +} diff --git a/src/Bundle/ChillPersonBundle/Controller/HouseholdCompositionController.php b/src/Bundle/ChillPersonBundle/Controller/HouseholdCompositionController.php new file mode 100644 index 000000000..c74113a05 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Controller/HouseholdCompositionController.php @@ -0,0 +1,149 @@ +security = $security; + $this->householdCompositionRepository = $householdCompositionRepository; + $this->paginatorFactory = $paginatorFactory; + $this->formFactory = $formFactory; + $this->entityManager = $entityManager; + $this->translator = $translator; + $this->engine = $engine; + $this->urlGenerator = $urlGenerator; + } + + /** + * @Route("/{_locale}/person/household/{id}/composition/index", name="chill_person_household_composition_index") + */ + public function index(Household $household, Request $request): Response + { + if (!$this->security->isGranted(HouseholdVoter::SEE, $household)) { + throw new AccessDeniedException('not allowed to edit an household'); + } + + $count = $this->householdCompositionRepository->countByHousehold($household); + $paginator = $this->paginatorFactory->create($count); + $compositions = $this->householdCompositionRepository->findByHousehold( + $household, + ['startDate' => 'DESC', 'id' => 'DESC'], + $paginator->getItemsPerPage(), + $paginator->getCurrentPageFirstItemNumber() + ); + + if ($this->security->isGranted(HouseholdVoter::EDIT, $household)) { + $isEdit = $request->query->has('edit'); + + if ($isEdit) { + $householdCompositions = $household->getCompositions()->filter(static function (HouseholdComposition $composition) use ($request) { + return $composition->getId() === $request->query->getInt('edit'); + }); + + if ($householdCompositions->count() !== 1) { + throw new BadRequestHttpException('could not find the composition with this id associated to the household'); + } + $householdComposition = $householdCompositions->first(); + } else { + $householdComposition = (new HouseholdComposition()) + ->setStartDate(new DateTimeImmutable()); + } + $form = $this->formFactory->create(HouseholdCompositionType::class, $householdComposition); + + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + if (!$isEdit) { + $this->entityManager->persist($householdComposition); + $household->addComposition($householdComposition); + } + + $this->entityManager->flush(); + + $request->getSession()->getFlashBag()->add( + 'success', + $this->translator->trans('household_composition.Composition added') + ); + + return new RedirectResponse( + $this->urlGenerator->generate('chill_person_household_composition_index', [ + 'id' => $household->getId(), + ]) + ); + } + + if ($form->isSubmitted() && !$form->isValid()) { + $request->getSession()->getFlashBag()->add( + 'warning', + $this->translator->trans('This form contains errors') + ); + } + } + + return new Response($this->engine->render( + '@ChillPerson/HouseholdComposition/index.html.twig', + [ + 'household' => $household, + 'compositions' => $compositions, + 'form' => isset($form) ? $form->createView() : null, + 'isPosted' => isset($form) ? $form->isSubmitted() : false, + 'editId' => $request->query->getInt('edit', -1), + ] + )); + } +} diff --git a/src/Bundle/ChillPersonBundle/Controller/HouseholdCompositionTypeApiController.php b/src/Bundle/ChillPersonBundle/Controller/HouseholdCompositionTypeApiController.php new file mode 100644 index 000000000..418d04531 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Controller/HouseholdCompositionTypeApiController.php @@ -0,0 +1,36 @@ +andWhere($query->expr()->eq('e.active', "'TRUE'")); + + break; + + default: + throw new UnexpectedValueException('unexepcted action: ' . $action); + } + } +} diff --git a/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadHouseholdCompositionType.php b/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadHouseholdCompositionType.php new file mode 100644 index 000000000..b1d306ef8 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/DataFixtures/ORM/LoadHouseholdCompositionType.php @@ -0,0 +1,48 @@ + 'Couple avec enfant(s)'], + ['fr' => 'Couple sans enfant'], + ['fr' => 'Mère seule'], + ['fr' => 'Père seul'], + ['fr' => 'Mère isolée'], + ['fr' => 'Père isolé'], + ['fr' => 'Homme seul'], + ['fr' => 'Femme seule'], + ]; + + public static function getGroups(): array + { + return ['composition-type']; + } + + public function load(ObjectManager $manager) + { + foreach (self::TYPES as $type) { + $manager->persist( + (new HouseholdCompositionType()) + ->setLabel($type) + ); + } + + $manager->flush(); + } +} diff --git a/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php b/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php index 5982fcebe..01df460e3 100644 --- a/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php +++ b/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php @@ -13,6 +13,7 @@ namespace Chill\PersonBundle\DependencyInjection; use Chill\MainBundle\DependencyInjection\MissingBundleException; use Chill\MainBundle\Security\Authorization\ChillExportVoter; +use Chill\PersonBundle\Controller\HouseholdCompositionTypeApiController; use Chill\PersonBundle\Doctrine\DQL\AddressPart; use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodResourceVoter; use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter; @@ -760,6 +761,21 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac ], ], ], + [ + 'class' => \Chill\PersonBundle\Entity\Household\HouseholdCompositionType::class, + 'name' => 'household_composition', + 'base_path' => '/api/1.0/person/houehold/composition/type', + 'base_role' => 'ROLE_USER', + 'controller' => HouseholdCompositionTypeApiController::class, + 'actions' => [ + '_index' => [ + 'methods' => [ + Request::METHOD_GET => true, + Request::METHOD_HEAD => true, + ], + ], + ], + ], ], ]); } diff --git a/src/Bundle/ChillPersonBundle/Entity/Household/Household.php b/src/Bundle/ChillPersonBundle/Entity/Household/Household.php index 865526250..ef718bc2e 100644 --- a/src/Bundle/ChillPersonBundle/Entity/Household/Household.php +++ b/src/Bundle/ChillPersonBundle/Entity/Household/Household.php @@ -11,6 +11,7 @@ declare(strict_types=1); namespace Chill\PersonBundle\Entity\Household; +use ArrayIterator; use Chill\MainBundle\Entity\Address; use Chill\MainBundle\Entity\Embeddable\CommentEmbeddable; use Chill\PersonBundle\Validator\Constraints\Household\MaxHolder; @@ -23,8 +24,8 @@ use Doctrine\Common\Collections\Criteria; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Serializer\Annotation as Serializer; use Symfony\Component\Validator\Constraints as Assert; -use Symfony\Component\Validator\Context\ExecutionContextInterface; +use Symfony\Component\Validator\Context\ExecutionContextInterface; use function count; /** @@ -56,6 +57,18 @@ class Household */ private CommentEmbeddable $commentMembers; + /** + * @ORM\OneToMany( + * targetEntity=HouseholdComposition::class, + * mappedBy="household", + * orphanRemoval=true, + * cascade={"persist"} + * ) + * @ORM\OrderBy({"startDate": "DESC"}) + * @Assert\Valid(traverse=true, groups={"household_composition"}) + */ + private Collection $compositions; + /** * @ORM\Id * @ORM\GeneratedValue @@ -90,6 +103,7 @@ class Household $this->addresses = new ArrayCollection(); $this->members = new ArrayCollection(); $this->commentMembers = new CommentEmbeddable(); + $this->compositions = new ArrayCollection(); } /** @@ -108,6 +122,18 @@ class Household return $this; } + public function addComposition(HouseholdComposition $composition): self + { + if (!$this->compositions->contains($composition)) { + $composition->setHousehold($this); + $this->compositions[] = $composition; + } + + $this->householdCompositionConsistency(); + + return $this; + } + public function addMember(HouseholdMember $member): self { if (!$this->members->contains($member)) { @@ -136,6 +162,14 @@ class Household return $this->commentMembers; } + /** + * @return ArrayCollection|Collection|HouseholdComposition[] + */ + public function getCompositions(): Collection + { + return $this->compositions; + } + /** * @Serializer\Groups({"read", "docgen:read"}) * @Serializer\SerializedName("current_address") @@ -157,6 +191,31 @@ class Household return null; } + public function getCurrentComposition(?DateTimeImmutable $at = null): ?HouseholdComposition + { + $at ??= new DateTimeImmutable('today'); + $criteria = new Criteria(); + $expr = Criteria::expr(); + + $criteria->where( + $expr->andX( + $expr->orX( + $expr->isNull('endDate'), + $expr->gt('endDate', $at) + ), + $expr->lte('startDate', $at) + ) + ); + + $compositions = $this->compositions->matching($criteria); + + if ($compositions->count() > 0) { + return $compositions->first(); + } + + return null; + } + /** * @Serializer\Groups({"docgen:read"}) */ @@ -369,11 +428,54 @@ class Household return $this->waitingForBirthDate; } + /** + * @internal + */ + public function householdCompositionConsistency(): void + { + $compositionOrdered = $this->compositions->toArray(); + + usort( + $compositionOrdered, + static function (HouseholdComposition $a, HouseholdComposition $b) { + return $a->getStartDate() <=> $b->getStartDate(); + } + ); + + $iterator = new ArrayIterator($compositionOrdered); + $iterator->rewind(); + + /** @var ?HouseholdComposition $previous */ + $previous = null; + + do { + /** @var ?HouseholdComposition $current */ + $current = $iterator->current(); + + if (null !== $previous) { + if (null === $previous->getEndDate() || $previous->getEndDate() > $current->getStartDate()) { + $previous->setEndDate($current->getStartDate()); + } + } + $previous = $current; + $iterator->next(); + } while ($iterator->valid()); + } + public function removeAddress(Address $address) { $this->addresses->removeElement($address); } + public function removeComposition(HouseholdComposition $composition): self + { + if ($this->compositions->removeElement($composition)) { + $composition->setHousehold(null); + } + + return $this; + } + public function removeMember(HouseholdMember $member): self { if ($this->members->removeElement($member)) { diff --git a/src/Bundle/ChillPersonBundle/Entity/Household/HouseholdComposition.php b/src/Bundle/ChillPersonBundle/Entity/Household/HouseholdComposition.php new file mode 100644 index 000000000..a381fafd8 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Entity/Household/HouseholdComposition.php @@ -0,0 +1,171 @@ +comment = new CommentEmbeddable(); + } + + public function getComment(): CommentEmbeddable + { + return $this->comment; + } + + public function getEndDate(): ?DateTimeImmutable + { + return $this->endDate; + } + + public function getHousehold(): ?Household + { + return $this->household; + } + + public function getHouseholdCompositionType(): ?HouseholdCompositionType + { + return $this->householdCompositionType; + } + + public function getId(): ?int + { + return $this->id; + } + + public function getNumberOfChildren(): ?int + { + return $this->numberOfChildren; + } + + public function getStartDate(): ?DateTimeImmutable + { + return $this->startDate; + } + + public function setComment(CommentEmbeddable $comment): HouseholdComposition + { + $this->comment = $comment; + + return $this; + } + + public function setEndDate(?DateTimeImmutable $endDate): HouseholdComposition + { + $this->endDate = $endDate; + + if (null !== $this->household) { + $this->household->householdCompositionConsistency(); + } + + return $this; + } + + public function setHousehold(?Household $household): HouseholdComposition + { + $this->household = $household; + + return $this; + } + + public function setHouseholdCompositionType(?HouseholdCompositionType $householdCompositionType): HouseholdComposition + { + $this->householdCompositionType = $householdCompositionType; + + return $this; + } + + public function setNumberOfChildren(?int $numberOfChildren): HouseholdComposition + { + $this->numberOfChildren = $numberOfChildren; + + return $this; + } + + public function setStartDate(?DateTimeImmutable $startDate): HouseholdComposition + { + $this->startDate = $startDate; + + if (null !== $this->household) { + $this->household->householdCompositionConsistency(); + } + + return $this; + } +} diff --git a/src/Bundle/ChillPersonBundle/Entity/Household/HouseholdCompositionType.php b/src/Bundle/ChillPersonBundle/Entity/Household/HouseholdCompositionType.php new file mode 100644 index 000000000..03d1a401a --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Entity/Household/HouseholdCompositionType.php @@ -0,0 +1,76 @@ +id; + } + + public function getLabel(): array + { + return $this->label; + } + + public function isActive(): bool + { + return $this->active; + } + + public function setActive(bool $active): HouseholdCompositionType + { + $this->active = $active; + + return $this; + } + + public function setLabel(array $label): HouseholdCompositionType + { + $this->label = $label; + + return $this; + } +} diff --git a/src/Bundle/ChillPersonBundle/Entity/Person.php b/src/Bundle/ChillPersonBundle/Entity/Person.php index 91e430a2f..e2847c73c 100644 --- a/src/Bundle/ChillPersonBundle/Entity/Person.php +++ b/src/Bundle/ChillPersonBundle/Entity/Person.php @@ -1142,7 +1142,7 @@ class Person implements HasCenterInterface, TrackCreationInterface, TrackUpdateI ->where( $expr->eq('shareHousehold', true) ) - ->orderBy(['startDate' => Criteria::DESC]); + ->orderBy(['startDate' => Criteria::DESC, 'id' => Criteria::DESC]); return $this->getHouseholdParticipations() ->matching($criteria); diff --git a/src/Bundle/ChillPersonBundle/Form/HouseholdCompositionType.php b/src/Bundle/ChillPersonBundle/Form/HouseholdCompositionType.php new file mode 100644 index 000000000..0348b0c39 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Form/HouseholdCompositionType.php @@ -0,0 +1,60 @@ +householdCompositionTypeRepository = $householdCompositionTypeRepository; + $this->translatableStringHelper = $translatableStringHelper; + } + + public function buildForm(FormBuilderInterface $builder, array $options) + { + $types = $this->householdCompositionTypeRepository->findAllActive(); + + $builder + ->add('householdCompositionType', EntityType::class, [ + 'class' => \Chill\PersonBundle\Entity\Household\HouseholdCompositionType::class, + 'choices' => $types, + 'choice_label' => function (\Chill\PersonBundle\Entity\Household\HouseholdCompositionType $type) { + return $this->translatableStringHelper->localize($type->getLabel()); + }, + 'label' => 'household_composition.Household composition', + ]) + ->add('startDate', ChillDateType::class, [ + 'required' => true, + 'input' => 'datetime_immutable', + ]) + ->add('numberOfChildren', IntegerType::class, [ + 'required' => true, + 'label' => 'household_composition.numberOfChildren', + ]) + ->add('comment', CommentType::class, [ + 'required' => false, + ]); + } +} diff --git a/src/Bundle/ChillPersonBundle/Household/MembersEditor.php b/src/Bundle/ChillPersonBundle/Household/MembersEditor.php index 4d855a980..adc97a4ac 100644 --- a/src/Bundle/ChillPersonBundle/Household/MembersEditor.php +++ b/src/Bundle/ChillPersonBundle/Household/MembersEditor.php @@ -29,6 +29,8 @@ class MembersEditor { public const VALIDATION_GROUP_AFFECTED = 'household_memberships'; + public const VALIDATION_GROUP_COMPOSITION = 'household_composition'; + public const VALIDATION_GROUP_CREATED = 'household_memberships_created'; private ?Household $household = null; @@ -77,6 +79,15 @@ class MembersEditor $this->oldMembershipsHashes[] = spl_object_hash($participation); } } + + foreach ($person->getHouseholdParticipationsNotShareHousehold() as $participation) { + if ($participation->getHousehold() === $this->household + && $participation->getEndDate() === null || $participation->getEndDate() > $membership->getStartDate() + && $participation->getStartDate() <= $membership->getStartDate() + ) { + $participation->setEndDate($membership->getStartDate()); + } + } } $this->membershipsAffected[] = $membership; @@ -129,7 +140,7 @@ class MembersEditor { if ($this->hasHousehold()) { $list = $this->validator - ->validate($this->getHousehold(), null, [self::VALIDATION_GROUP_AFFECTED]); + ->validate($this->getHousehold(), null, [self::VALIDATION_GROUP_AFFECTED, self::VALIDATION_GROUP_COMPOSITION]); } else { $list = new ConstraintViolationList(); } diff --git a/src/Bundle/ChillPersonBundle/Menu/HouseholdMenuBuilder.php b/src/Bundle/ChillPersonBundle/Menu/HouseholdMenuBuilder.php index a144bf65b..a4d3f8d03 100644 --- a/src/Bundle/ChillPersonBundle/Menu/HouseholdMenuBuilder.php +++ b/src/Bundle/ChillPersonBundle/Menu/HouseholdMenuBuilder.php @@ -29,6 +29,7 @@ class HouseholdMenuBuilder implements LocalMenuBuilderInterface public function buildMenu($menuId, MenuItem $menu, array $parameters): void { + /** @var \Chill\PersonBundle\Entity\Household\Household $household */ $household = $parameters['household']; $menu->addChild($this->translator->trans('household.Household summary'), [ @@ -38,6 +39,20 @@ class HouseholdMenuBuilder implements LocalMenuBuilderInterface ], ]) ->setExtras(['order' => 10]); + $menu->addChild($this->translator->trans('household.Relationship'), [ + 'route' => 'chill_person_household_relationship', + 'routeParameters' => [ + 'household_id' => $household->getId(), + ], ]) + ->setExtras(['order' => 15]); + + $menu->addChild($this->translator->trans('household_composition.Compositions'), [ + 'route' => 'chill_person_household_composition_index', + 'routeParameters' => [ + 'id' => $household->getId(), + ], ]) + ->setExtras(['order' => 17]); + $menu->addChild($this->translator->trans('household.Accompanying period'), [ 'route' => 'chill_person_household_accompanying_period', 'routeParameters' => [ @@ -51,13 +66,6 @@ class HouseholdMenuBuilder implements LocalMenuBuilderInterface 'household_id' => $household->getId(), ], ]) ->setExtras(['order' => 30]); - - $menu->addChild($this->translator->trans('household.Relationship'), [ - 'route' => 'chill_person_household_relationship', - 'routeParameters' => [ - 'household_id' => $household->getId(), - ], ]) - ->setExtras(['order' => 15]); } public static function getMenuIds(): array diff --git a/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdACLAwareRepository.php b/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdACLAwareRepository.php index 0649dae1c..dc5e8f5d3 100644 --- a/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdACLAwareRepository.php +++ b/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdACLAwareRepository.php @@ -39,7 +39,7 @@ final class HouseholdACLAwareRepository implements HouseholdACLAwareRepositoryIn { $centers = $this->authorizationHelper->getReachableCenters( $this->security->getUser(), - HouseholdVoter::SHOW + HouseholdVoter::SEE ); if ([] === $centers) { diff --git a/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdCompositionRepository.php b/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdCompositionRepository.php new file mode 100644 index 000000000..23f79c7f5 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdCompositionRepository.php @@ -0,0 +1,75 @@ +repository = $entityManager->getRepository(HouseholdComposition::class); + } + + public function countByHousehold(Household $household): int + { + return $this->repository->count(['household' => $household]); + } + + public function find($id): ?HouseholdComposition + { + return $this->repository->find($id); + } + + /** + * @return array|HouseholdComposition[] + */ + public function findAll(): array + { + return $this->repository->findAll(); + } + + /** + * @param int $limit + * @param int $offset + * + * @return array|object[]|HouseholdComposition[] + */ + public function findBy(array $criteria, ?array $orderBy = null, $limit = null, $offset = null): array + { + return $this->repository->findBy($criteria, $orderBy, $limit, $offset); + } + + /** + * @return array|HouseholdComposition[]|object[] + */ + public function findByHousehold(Household $household, ?array $orderBy = null, ?int $limit = null, ?int $offset = null): array + { + return $this->findBy(['household' => $household], $orderBy, $limit, $offset); + } + + public function findOneBy(array $criteria): ?HouseholdComposition + { + return $this->repository->findOneBy($criteria); + } + + public function getClassName(): string + { + return HouseholdComposition::class; + } +} diff --git a/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdCompositionTypeRepository.php b/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdCompositionTypeRepository.php new file mode 100644 index 000000000..45931b4da --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdCompositionTypeRepository.php @@ -0,0 +1,69 @@ +repository = $entityManager->getRepository(HouseholdCompositionType::class); + } + + public function find($id): ?HouseholdCompositionType + { + return $this->repository->find($id); + } + + /** + * @return array|HouseholdCompositionType[]|object[] + */ + public function findAll(): array + { + return $this->repository->findAll(); + } + + /** + * @return array|HouseholdCompositionType[] + */ + public function findAllActive(): array + { + return $this->findBy(['active' => true]); + } + + /** + * @param $limit + * @param $offset + * + * @return array|HouseholdCompositionType[]|object[] + */ + public function findBy(array $criteria, ?array $orderBy = null, $limit = null, $offset = null): array + { + return $this->repository->findBy($criteria, $orderBy, $limit, $offset); + } + + public function findOneBy(array $criteria): ?HouseholdCompositionType + { + return $this->repository->findOneBy($criteria); + } + + public function getClassName(): string + { + return HouseholdCompositionType::class; + } +} diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/App.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/App.vue index 22b4f54a6..52047c630 100644 --- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/App.vue +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/App.vue @@ -32,7 +32,7 @@
  • -
  • @@ -104,6 +104,13 @@ export default { return false; }, + lastStepIsSaveAllowed() { + let r = !this.$store.getters.isHouseholdNew || + (this.$store.state.numberOfChildren !== null && this.$store.state.householdCompositionType !== null); + console.log('is saved allowed ?', r); + + return r; + }, }, methods: { goToNext() { diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/components/Concerned.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/components/Concerned.vue index 3be8822be..74271954f 100644 --- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/components/Concerned.vue +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/components/Concerned.vue @@ -7,18 +7,14 @@
    -

    - {{ $t('household_members_editor.concerned.persons_will_be_moved') }} : - - - - -

    +

    {{ $t('household_members_editor.concerned.persons_will_be_moved') }} :

    + + +

    {{ $t('household_members_editor.concerned.persons_with_household') }}