getAccompanyingPeriod(); $this->denyAccessUnlessGranted( 'CHILL_MAIN_ACCOMPANYING_PERIOD_WORK_UPDATE', $acpw, 'You are not allowed to merge this accompanying period work' ); $form = $this->createForm(FindAccompanyingPeriodWorkType::class, null, ['accompanyingPeriod' => $accompanyingPeriod]); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $acpw2 = $this->accompanyingPeriodWorkRepository->find($form->get('acpw')->getData()); $direction = $form->get('direction')->getData(); if ('starting' === $direction) { $params = [ 'acpw1_id' => $acpw->getId(), 'acpw2_id' => $acpw2->getId(), ]; } else { $params = [ 'acpw1_id' => $acpw2->getId(), 'acpw2_id' => $acpw->getId(), ]; } return $this->redirectToRoute('chill_person_acpw_duplicate_confirm', $params); } return $this->render('@ChillPerson/AccompanyingPeriodWorkDuplicate/assign_acpw_duplicate.html.twig', [ 'accompanyingCourse' => $accompanyingPeriod, // 'acpwArray' => $acpwArray, 'acpw' => $acpw, 'form' => $form->createView(), ]); } /** * @ParamConverter("acpw1", options={"id": "acpw1_id"}) * @ParamConverter("acpw2", options={"id": "acpw2_id"}) */ #[Route(path: '/{_locale}/person/{acpw1_id}/duplicate/{acpw2_id}/confirm', name: 'chill_person_acpw_duplicate_confirm')] public function confirmAction(AccompanyingPeriodWork $acpw1, AccompanyingPeriodWork $acpw2, Request $request) { $accompanyingPeriod = $acpw1->getAccompanyingPeriod(); try { $this->validateMerge($acpw1, $acpw2); $form = $this->createForm(PersonConfimDuplicateType::class); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $this->accompanyingPeriodWorkMergeService->merge($acpw1, $acpw2); $session = $request->getSession(); if ($session instanceof Session) { $session->getFlashBag()->add('success', new TranslatableMessage('acpw_duplicate.Successfully merged')); } return $this->redirectToRoute('chill_person_accompanying_period_work_show', ['id' => $acpw1->getId()]); } return $this->render('@ChillPerson/AccompanyingPeriodWorkDuplicate/confirm.html.twig', [ 'acpw' => $acpw1, 'acpw2' => $acpw2, 'accompanyingCourse' => $accompanyingPeriod, 'form' => $form->createView(), ]); } catch (\InvalidArgumentException $e) { $this->addFlash('error', $this->translator->trans($e->getMessage())); return $this->redirectToRoute('chill_person_accompanying_period_work_assign_duplicate', [ 'id' => $acpw1->getId(), ]); } } private function validateMerge(AccompanyingPeriodWork $acpw1, AccompanyingPeriodWork $acpw2): void { $constraints = [ [$acpw1 === $acpw2, 'acpw_duplicate.You cannot merge a accompanying period work with itself. Please choose a different one'], ]; foreach ($constraints as [$condition, $message]) { if ($condition) { throw new \InvalidArgumentException($message); } } } }