From 626a77b040bd09b781b1cc49075b08601342f512 Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Mon, 16 Dec 2024 19:08:42 +0100 Subject: [PATCH] Add cancel reason form --- .../Controller/CalendarController.php | 22 +++++++++-- .../ChillCalendarBundle/Form/CancelType.php | 37 +++++++++++++++++++ ...ncelCalendarByAccompanyingCourse.html.twig | 17 +++++++++ .../Calendar/cancelCalendarByPerson.html.twig | 17 +++++++++ 4 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 src/Bundle/ChillCalendarBundle/Form/CancelType.php diff --git a/src/Bundle/ChillCalendarBundle/Controller/CalendarController.php b/src/Bundle/ChillCalendarBundle/Controller/CalendarController.php index 4793dbe1b..d036b6b1e 100644 --- a/src/Bundle/ChillCalendarBundle/Controller/CalendarController.php +++ b/src/Bundle/ChillCalendarBundle/Controller/CalendarController.php @@ -13,6 +13,7 @@ namespace Chill\CalendarBundle\Controller; use Chill\CalendarBundle\Entity\Calendar; use Chill\CalendarBundle\Form\CalendarType; +use Chill\CalendarBundle\Form\CancelType; use Chill\CalendarBundle\RemoteCalendar\Connector\RemoteCalendarConnectorInterface; use Chill\CalendarBundle\Repository\CalendarACLAwareRepositoryInterface; use Chill\CalendarBundle\Security\Voter\CalendarVoter; @@ -30,11 +31,13 @@ use Chill\PersonBundle\Repository\PersonRepository; use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter; use Chill\PersonBundle\Security\Authorization\PersonVoter; use Chill\ThirdPartyBundle\Entity\ThirdParty; +use Doctrine\ORM\EntityManagerInterface; use http\Exception\UnexpectedValueException; use Psr\Log\LoggerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\Form; +use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; @@ -60,6 +63,7 @@ class CalendarController extends AbstractController private readonly UserRepositoryInterface $userRepository, private readonly TranslatorInterface $translator, private readonly \Doctrine\Persistence\ManagerRegistry $managerRegistry, + private readonly EntityManagerInterface $em, ) {} /** @@ -119,22 +123,32 @@ class CalendarController extends AbstractController [$person, $accompanyingPeriod] = [$calendar->getPerson(), $calendar->getAccompanyingPeriod()]; + $form = $this->createForm(CancelType::class, $calendar); + if ($accompanyingPeriod instanceof AccompanyingPeriod) { $view = '@ChillCalendar/Calendar/cancelCalendarByAccompanyingCourse.html.twig'; -// $redirectRoute = $this->generateUrl('chill_calendar_calendar_list_by_period', ['id' => $accompanyingPeriod->getId()]); + $redirectRoute = $this->generateUrl('chill_calendar_calendar_list_by_period', ['id' => $accompanyingPeriod->getId()]); } elseif ($person instanceof Person) { $view = '@ChillCalendar/Calendar/cancelCalendarByPerson.html.twig'; -// $redirectRoute = $this->generateUrl('chill_calendar_calendar_list_by_person', ['id' => $person->getId()]); + $redirectRoute = $this->generateUrl('chill_calendar_calendar_list_by_person', ['id' => $person->getId()]); } else { throw new \RuntimeException('nor person or accompanying period'); } - // Cancellation form + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + $this->em->persist($calendar); + $this->em->flush(); + + $this->addFlash('success', $this->translator->trans('calender.calendar item has been canceled!')); + + return new RedirectResponse($redirectRoute); + } return $this->render($view, [ 'calendar' => $calendar, -// 'delete_form' => $form->createView(), + 'form' => $form->createView(), 'accompanyingCourse' => $accompanyingPeriod, 'person' => $person, ]); diff --git a/src/Bundle/ChillCalendarBundle/Form/CancelType.php b/src/Bundle/ChillCalendarBundle/Form/CancelType.php new file mode 100644 index 000000000..c4f790c7d --- /dev/null +++ b/src/Bundle/ChillCalendarBundle/Form/CancelType.php @@ -0,0 +1,37 @@ +add('cancelReason', EntityType::class, array( + 'class' => CancelReason::class, + 'required' => false, + 'choice_label' => function (CancelReason $cancelReason) { + return $this->translatableStringHelper->localize($cancelReason->getName()); + }, + )); + } + + public function configureOptions(OptionsResolver $resolver) + { + $resolver->setDefaults([ + 'data_class' => Calendar::class, + + ]); + } +} diff --git a/src/Bundle/ChillCalendarBundle/Resources/views/Calendar/cancelCalendarByAccompanyingCourse.html.twig b/src/Bundle/ChillCalendarBundle/Resources/views/Calendar/cancelCalendarByAccompanyingCourse.html.twig index 19659c627..10841bf9f 100644 --- a/src/Bundle/ChillCalendarBundle/Resources/views/Calendar/cancelCalendarByAccompanyingCourse.html.twig +++ b/src/Bundle/ChillCalendarBundle/Resources/views/Calendar/cancelCalendarByAccompanyingCourse.html.twig @@ -3,3 +3,20 @@ {% set activeRouteKey = 'chill_calendar_calendar_list' %} {% block title 'chill_calendar.cancel_calendar_item'|trans %} + +{% block content %} + + {{ form(form) }} + + + +{% endblock %} diff --git a/src/Bundle/ChillCalendarBundle/Resources/views/Calendar/cancelCalendarByPerson.html.twig b/src/Bundle/ChillCalendarBundle/Resources/views/Calendar/cancelCalendarByPerson.html.twig index b3db97e0f..867a5b548 100644 --- a/src/Bundle/ChillCalendarBundle/Resources/views/Calendar/cancelCalendarByPerson.html.twig +++ b/src/Bundle/ChillCalendarBundle/Resources/views/Calendar/cancelCalendarByPerson.html.twig @@ -3,3 +3,20 @@ {% set activeRouteKey = 'chill_calendar_calendar_list' %} {% block title 'chill_calendar.cancel_calendar_item'|trans %} + +{% block content %} + + {{ form_row(form.cancelReason) }} + + + +{% endblock %}