diff --git a/CHANGELOG.md b/CHANGELOG.md index 0efb6a3be..761fcca4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,13 +12,14 @@ and this project adheres to * unnecessary whitespace removed from person banner after person-id + double parentheses removed (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/290) - +* [person]: delete accompanying period work, including related objects (cascade) (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/36) ## Test releases ### Test release 2021-11-08 * [person]: Display the name of a user when searching after a User (TMS) +>>>>>>> CHANGELOG.md * [person]: Add civility to the person * [person]: Various improvements on the edit person form * [person]: Set available_languages and available_countries as parameters for use in the edit person form diff --git a/src/Bundle/ChillActivityBundle/Resources/views/Activity/confirm_deleteAccompanyingCourse.html.twig b/src/Bundle/ChillActivityBundle/Resources/views/Activity/confirm_deleteAccompanyingCourse.html.twig index fbdf45c23..5c37a889c 100644 --- a/src/Bundle/ChillActivityBundle/Resources/views/Activity/confirm_deleteAccompanyingCourse.html.twig +++ b/src/Bundle/ChillActivityBundle/Resources/views/Activity/confirm_deleteAccompanyingCourse.html.twig @@ -10,7 +10,7 @@ 'title' : 'Remove activity'|trans, 'confirm_question' : 'Are you sure you want to remove the activity about "%name%" ?'|trans({ '%name%' : accompanyingCourse.id } ), 'cancel_route' : 'chill_activity_activity_list', - 'cancel_parameters' : { 'accompanying_course_id' : accompanyingCourse.id, 'id' : activity.id }, + 'cancel_parameters' : { 'accompanying_period_id' : accompanyingCourse.id, 'id' : activity.id }, 'form' : delete_form } ) }} {% endblock %} diff --git a/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseWorkController.php b/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseWorkController.php index 739b14e2b..3625c7cca 100644 --- a/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseWorkController.php +++ b/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseWorkController.php @@ -11,7 +11,10 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Serializer\SerializerInterface; use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Component\Form\Form; use Chill\PersonBundle\Repository\AccompanyingPeriod\AccompanyingPeriodWorkRepository; +use Psr\Log\LoggerInterface; +use Symfony\Component\Form\Extension\Core\Type\SubmitType; class AccompanyingCourseWorkController extends AbstractController { @@ -19,17 +22,20 @@ class AccompanyingCourseWorkController extends AbstractController private SerializerInterface $serializer; private AccompanyingPeriodWorkRepository $workRepository; private PaginatorFactory $paginator; + protected LoggerInterface $logger; public function __construct( TranslatorInterface $trans, SerializerInterface $serializer, AccompanyingPeriodWorkRepository $workRepository, - PaginatorFactory $paginator + PaginatorFactory $paginator, + LoggerInterface $chillLogger ) { $this->trans = $trans; $this->serializer = $serializer; $this->workRepository = $workRepository; $this->paginator = $paginator; + $this->logger = $logger; } /** @@ -106,4 +112,65 @@ class AccompanyingCourseWorkController extends AbstractController 'paginator' => $paginator ]); } + + + /** + * @Route( + * "{_locale}/person/accompanying-period/work/{id}/delete", + * name="chill_person_accompanying_period_work_delete", + * methods={"GET", "POST", "DELETE"} + * ) + */ + public function deleteWork(AccompanyingPeriodWork $work, Request $request): Response + { + // TODO ACL + $em = $this->getDoctrine()->getManager(); + + $form = $this->createDeleteForm($work->getId()); + + if ($request->getMethod() === Request::METHOD_DELETE) { + $form->handleRequest($request); + + if ($form->isValid()) { + + $this->logger->notice("An accompanying period work has been removed", [ + 'by_user' => $this->getUser()->getUsername(), + 'work_id' => $work->getId(), + 'accompanying_period_id' => $work->getAccompanyingPeriod()->getId() + ]); + + $em->remove($work); + $em->flush(); + + $this->addFlash( + 'success', + $this->trans->trans("The accompanying period work has been successfully removed.") + ); + + return $this->redirectToRoute('chill_person_accompanying_period_work_list', [ + 'id' => $work->getAccompanyingPeriod()->getId() + ]); + } + } + + return $this->render('@ChillPerson/AccompanyingCourseWork/delete.html.twig', [ + 'accompanyingCourse' => $work->getAccompanyingPeriod(), + 'work' => $work, + 'delete_form' => $form->createView() + ]); + } + + private function createDeleteForm(int $id): Form + { + $params['id'] = $id; + + return $this->createFormBuilder() + ->setAction($this->generateUrl('chill_person_accompanying_period_work_delete', $params)) + ->setMethod('DELETE') + ->add('submit', SubmitType::class, ['label' => 'Delete']) + ->getForm() + ; + } + + } diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php index 39aaf309b..58b27d95d 100644 --- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php +++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php @@ -167,7 +167,7 @@ use Symfony\Component\Validator\Constraints as Assert; * @ORM\OneToMany( * targetEntity=AccompanyingPeriodWorkEvaluation::class, * mappedBy="accompanyingPeriodWork", - * cascade={"persist"}, + * cascade={"remove", "persist"}, * orphanRemoval=true * ) * @Serializer\Groups({"read"}) diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkEvaluationDocument.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkEvaluationDocument.php index eb07cd4d8..1dfaef99c 100644 --- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkEvaluationDocument.php +++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkEvaluationDocument.php @@ -70,7 +70,8 @@ class AccompanyingPeriodWorkEvaluationDocument implements \Chill\MainBundle\Doct /** * @ORM\ManyToOne( - * targetEntity=StoredObject::class + * targetEntity=StoredObject::class, + * cascade={"remove"}, * ) * @Serializer\Groups({"read"}) */ diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/App.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/App.vue index fe7838c4d..7931a2a0d 100644 --- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/App.vue +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkCreate/App.vue @@ -26,7 +26,7 @@
spinner
+