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

+
@@ -72,7 +72,7 @@ {{ $t('action.save') }} diff --git a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingCourseWork/delete.html.twig b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingCourseWork/delete.html.twig new file mode 100644 index 000000000..c66e5aa3d --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingCourseWork/delete.html.twig @@ -0,0 +1,34 @@ +{% extends "@ChillPerson/AccompanyingCourse/layout.html.twig" %} + +{% set activeRouteKey = 'chill_person_accompanying_period_work_list' %} + +{% block title 'accompanying_course_work.remove'|trans %} + +{% block content %} + +
+

+ {{ 'accompanying_course_work.action'|trans }} + {{ work.socialAction|chill_entity_render_string }} +

+ +
+

{{ "Associated peoples"|trans }}

+
    + {% for p in work.persons %} + {{ p|chill_entity_render_box }} + {% endfor %} +
+
+
+ + + {{ include('@ChillMain/Util/confirmation_template.html.twig', + { + 'title' : 'accompanying_course_work.remove'|trans, + 'confirm_question' : 'Are you sure you want to remove this work of the accompanying period %name% ?'|trans({ '%name%' : accompanyingCourse.id } ), + 'cancel_route' : 'chill_person_accompanying_period_work_list', + 'cancel_parameters' : {'id' : accompanyingCourse.id}, + 'form' : delete_form + } ) }} +{% endblock %} diff --git a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingCourseWork/list_by_accompanying_period.html.twig b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingCourseWork/list_by_accompanying_period.html.twig index dd8beded5..797f1bcc8 100644 --- a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingCourseWork/list_by_accompanying_period.html.twig +++ b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingCourseWork/list_by_accompanying_period.html.twig @@ -103,6 +103,11 @@ href="{{ chill_path_add_return_path('chill_person_accompanying_period_work_edit', { 'id': w.id }) }}" >{% if buttonText is not defined or buttonText == true %}{{ 'Edit'|trans }}{% endif %} +
  • + {% if buttonText is not defined or buttonText == true %}{{ 'Delete'|trans }}{% endif %} +
  • diff --git a/src/Bundle/ChillPersonBundle/translations/messages.fr.yml b/src/Bundle/ChillPersonBundle/translations/messages.fr.yml index af3ca6f05..ef8e58bb1 100644 --- a/src/Bundle/ChillPersonBundle/translations/messages.fr.yml +++ b/src/Bundle/ChillPersonBundle/translations/messages.fr.yml @@ -405,6 +405,8 @@ Back to household: Revenir au ménage # accompanying course work Accompanying Course Actions: Actions d'accompagnements Accompanying Course Action: Action d'accompagnement +Are you sure you want to remove this work of the accompanying period %name% ?: Êtes-vous sûr de vouloir supprimer cette action de la période d'accompagnement %name% ? +The accompanying period work has been successfully removed.: L'action d'accompagnement a été supprimée. accompanying_course_work: create: Créer une action Create accompanying course work: Créer une action d'accompagnement @@ -419,6 +421,7 @@ accompanying_course_work: results: Résultats - orientations goal: Objectif - motif - dispositif Any work: Aucune action d'accompagnement + remove: Supprimer une action d'accompagnement # Person addresses: Adresses de résidence