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), ] )); } }