From b1842a33ae711ff36d82383901a5d063d8d73e51 Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Mon, 17 Feb 2025 09:21:29 +0100 Subject: [PATCH] WIP fusion accompanyingperiodwork: controller, form, templates --- ...ompanyingPeriodWorkDuplicateController.php | 107 ++++-------------- .../Form/FindAccompanyingPeriodWorkType.php | 22 +--- .../PickAccompanyingPeriodWorkDynamicType.php | 49 ++++++++ .../assign_acpw_duplicate.html.twig | 12 +- 4 files changed, 78 insertions(+), 112 deletions(-) create mode 100644 src/Bundle/ChillPersonBundle/Form/Type/PickAccompanyingPeriodWorkDynamicType.php diff --git a/src/Bundle/ChillPersonBundle/Controller/AccompanyingPeriodWorkDuplicateController.php b/src/Bundle/ChillPersonBundle/Controller/AccompanyingPeriodWorkDuplicateController.php index efacd6268..321b1812a 100644 --- a/src/Bundle/ChillPersonBundle/Controller/AccompanyingPeriodWorkDuplicateController.php +++ b/src/Bundle/ChillPersonBundle/Controller/AccompanyingPeriodWorkDuplicateController.php @@ -11,128 +11,67 @@ declare(strict_types=1); namespace Chill\PersonBundle\Controller; -use Chill\MainBundle\Templating\TranslatableStringHelperInterface; -use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork; use Chill\PersonBundle\Form\FindAccompanyingPeriodWorkType; -use Chill\PersonBundle\Form\PersonConfimDuplicateType; use Chill\PersonBundle\Repository\AccompanyingPeriod\AccompanyingPeriodWorkRepository; -use Chill\PersonBundle\Service\AccompanyingPeriodWork\AccompanyingPeriodWorkMergeService; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; + class AccompanyingPeriodWorkDuplicateController extends AbstractController { - public function __construct(private readonly AccompanyingPeriodWorkRepository $accompanyingPeriodWorkRepository, private readonly TranslatorInterface $translator, private readonly TranslatableStringHelperInterface $stringHelper, private readonly AccompanyingPeriodWorkMergeService $accompanyingPeriodWorkMergeService) {} + public function __construct(private readonly AccompanyingPeriodWorkRepository $accompanyingPeriodWorkRepository, private readonly TranslatorInterface $translator) {} - /** - * @ParamConverter("accompanyingPeriodWork", options={"id": "acpw_id"}) - */ - #[Route(path: '{_locale}/person/accompanying-period/work/{id}/assign-duplicate', name: 'chill_person_accompanying_period_work_assign_duplicate')] - public function assignDuplicate(AccompanyingPeriodWork $acpw, Request $request) + #[Route(path: '{_locale}/person/accompanying-period/work/{id}/assign-duplicate', name: 'chill_person_accompanying_period_work_assign_duplicate', methods: ['GET'])] + public function assignDuplicate(mixed $id, Request $request) { - $accompanyingPeriod = $acpw->getAccompanyingPeriod(); + $acpw1= $this->accompanyingPeriodWorkRepository->find($id); - $acpwList = $this->accompanyingPeriodWorkRepository->findByAccompanyingPeriod($accompanyingPeriod); - - $acpwArray = array_map(function ($acpw) { - return [ - 'id' => $acpw->getId(), - 'socialAction' => $this->stringHelper->localize($acpw->getSocialAction()->getTitle()), - 'startDate' => $acpw->getStartDate(), - 'endDate' => $acpw->getEndDate(), - ]; - }, $acpwList); + if (null === $acpw1) { + throw $this->createNotFoundException("Accompanying period work with id {$id} not".' found on this server'); + } $this->denyAccessUnlessGranted( 'CHILL_MAIN_ACCOMPANYING_PERIOD_WORK_UPDATE', - $acpw, + $acpw1, 'You are not allowed to merge this accompanying period work' ); - $form = $this->createForm(FindAccompanyingPeriodWorkType::class, null, ['accompanyingPeriod' => $accompanyingPeriod]); + $form = $this->createForm(FindAccompanyingPeriodWorkType::class); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { - $acpw2 = $this->accompanyingPeriodWorkRepository->find($form->get('acpw')->getData()); - dump($acpw2); + $acpw2 = $form->get('person')->getData(); + + // Validation: Ensure person1 is not the same as person2 + if ($acpw1->getId() === $acpw2->getId()) { + $this->addFlash('error', $this->translator->trans('The entities you are trying to merge cannot be the same')); + + return $this->redirectToRoute('chill_person_accompanying_period_work_show', ['id' => $acpw1->getId()]); + } $direction = $form->get('direction')->getData(); if ('starting' === $direction) { $params = [ - 'acpw1_id' => $acpw->getId(), + 'acpw1_id' => $acpw1->getId(), 'acpw2_id' => $acpw2->getId(), ]; } else { $params = [ 'acpw1_id' => $acpw2->getId(), - 'acpw2_id' => $acpw->getId(), + 'acpw2_id' => $acpw1->getId(), ]; } - return $this->redirectToRoute('chill_person_acpw_duplicate_confirm', $params); +// return $this->redirectToRoute('chill_person_acpw_duplicate_confirm', $params); } return $this->render('@ChillPerson/AccompanyingPeriodWorkDuplicate/assign_acpw_duplicate.html.twig', [ - 'accompanyingCourse' => $acpw->getAccompanyingPeriod(), - 'acpwList' => $acpwArray, - 'acpw' => $acpw, + 'accompanyingCourse' => $acpw1->getAccompanyingPeriod(), + 'acpw' => $acpw1, '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); - - 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); - } - } - } - - } diff --git a/src/Bundle/ChillPersonBundle/Form/FindAccompanyingPeriodWorkType.php b/src/Bundle/ChillPersonBundle/Form/FindAccompanyingPeriodWorkType.php index 8837aaeb6..69ade244b 100644 --- a/src/Bundle/ChillPersonBundle/Form/FindAccompanyingPeriodWorkType.php +++ b/src/Bundle/ChillPersonBundle/Form/FindAccompanyingPeriodWorkType.php @@ -11,10 +11,7 @@ declare(strict_types=1); namespace Chill\PersonBundle\Form; -use Chill\PersonBundle\Entity\AccompanyingPeriod; use Chill\PersonBundle\Form\Type\PickAccompanyingPeriodWorkDynamicType; -use Chill\PersonBundle\Form\Type\PickLinkedAccompanyingPeriodWorkType; -use Chill\PersonBundle\Repository\AccompanyingPeriod\AccompanyingPeriodWorkRepository; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\HiddenType; use Symfony\Component\Form\FormBuilderInterface; @@ -22,28 +19,11 @@ use Symfony\Component\OptionsResolver\OptionsResolver; class FindAccompanyingPeriodWorkType extends AbstractType { - public function __construct(private readonly AccompanyingPeriodWorkRepository $repository) - { - } public function buildForm(FormBuilderInterface $builder, array $options) { - $accompanyingPeriod = $options['accompanyingPeriod']; - $suggestedAcpw = $this->repository->findByAccompanyingPeriod($accompanyingPeriod); - - $builder - ->add('acpw', HiddenType::class, [ - 'data' => null, - 'label' => 'Accompanying period work', - ]) + $builder->add('acpw', PickAccompanyingPeriodWorkDynamicType::class) ->add('direction', HiddenType::class, [ 'data' => 'starting', ]); } - - public function configureOptions(OptionsResolver $resolver) - { - $resolver - ->setRequired('accompanyingPeriod') - ->setAllowedTypes('accompanyingPeriod', AccompanyingPeriod::class); - } } diff --git a/src/Bundle/ChillPersonBundle/Form/Type/PickAccompanyingPeriodWorkDynamicType.php b/src/Bundle/ChillPersonBundle/Form/Type/PickAccompanyingPeriodWorkDynamicType.php new file mode 100644 index 000000000..8936b41c6 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Form/Type/PickAccompanyingPeriodWorkDynamicType.php @@ -0,0 +1,49 @@ +addViewTransformer(new EntityToJsonTransformer($this->denormalizer, $this->serializer, $options['multiple'], 'accompanyingPeriodWork')); + } + + public function buildView(FormView $view, FormInterface $form, array $options) + { + $view->vars['types'] = ['accompanyingPeriodWork']; + $view->vars['uniqid'] = uniqid('pick_acpw_dyn'); + $view->vars['as_id'] = true === $options['as_id'] ? '1' : '0'; + $view->vars['submit_on_adding_new_entity'] = true === $options['submit_on_adding_new_entity'] ? '1' : '0'; + } + + public function configureOptions(OptionsResolver $resolver) + { + $resolver + ->setDefault('multiple', false) + ->setAllowedTypes('multiple', ['bool']) + ->setDefault('compound', false) + ->setDefault('suggested', []) + ->setDefault('as_id', false) + ->setAllowedTypes('as_id', ['bool']) + ->setDefault('submit_on_adding_new_entity', false) + ->setAllowedTypes('submit_on_adding_new_entity', ['bool']); + } + + public function getBlockPrefix() + { + return 'pick_entity_dynamic'; + } + +} diff --git a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriodWorkDuplicate/assign_acpw_duplicate.html.twig b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriodWorkDuplicate/assign_acpw_duplicate.html.twig index fdf7087ef..7a3467f34 100644 --- a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriodWorkDuplicate/assign_acpw_duplicate.html.twig +++ b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriodWorkDuplicate/assign_acpw_duplicate.html.twig @@ -4,15 +4,13 @@ {% block title %}{{ 'Assign an accompanying period work duplicate' }}{% endblock %} + {% block content %}
-

{{ 'acpw_duplicate.Assign duplicate'|trans }}

+

{{ 'Assign an accompanying period work duplicate'|trans }}

+ {{ form_start(form) }} - {%- if form.acpw is defined -%} - {{ form_row(form.acpw) }} -
- {% endif %} {{ form_rest(form) }}