From 4c2a559ddc12bb97d737892384d9258b74482ead Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Tue, 7 Jun 2022 11:08:09 +0200 Subject: [PATCH] add missing proofs notification --- .../ExpenseReportAdminController.php | 56 +++++++++++++++++++ .../ExpenseReportEventSubscriber.php | 26 +++++++++ templates/admin/expense_report/edit.html.twig | 37 ++++++++++++ ...aid.html.twig => missing_proofs.html.twig} | 2 +- 4 files changed, 120 insertions(+), 1 deletion(-) rename templates/mail/expense_report/{paid.html.twig => missing_proofs.html.twig} (69%) diff --git a/src/Controller/ExpenseReportAdminController.php b/src/Controller/ExpenseReportAdminController.php index 8175e75..4f5b2c5 100644 --- a/src/Controller/ExpenseReportAdminController.php +++ b/src/Controller/ExpenseReportAdminController.php @@ -118,6 +118,19 @@ class ExpenseReportAdminController extends CrudController $route = 'admin_expense_report_paid'; $tokenName = 'paid'; + + $form2 = $this->createFormBuilder() + ->add('message', TextareaType::class, [ + 'required' => false, + 'label' => 'Message', + 'help' => 'Message à ajouter dans le mail de notification (optionnel)', + ]) + ->getForm() + ->createView() + ; + + $route2 = 'admin_expense_report_missing_proofs'; + $tokenName2 = 'missingProofs'; } if (isset($form)) { @@ -128,6 +141,14 @@ class ExpenseReportAdminController extends CrudController ; } + if (isset($form2)) { + $this->getConfiguration() + ->addViewData('edit', 'mail2FormRoute', $route2) + ->addViewData('edit', 'mail2FormTokenName', $tokenName2) + ->addViewData('edit', 'mail2Form', $form2) + ; + } + return $this->doEdit($entity, $entityManager, $request, [$this, 'beforeUpdate']); } @@ -222,6 +243,41 @@ class ExpenseReportAdminController extends CrudController ]); } + /** + * @Route("/admin/expense_report/missing_proofs/{entity}/{token}", name="admin_expense_report_missing_proofs", methods={"POST"}) + */ + public function missingProofs( + Entity $entity, + string $token, + EntityManager $entityManager, + Request $request, + EventDispatcherInterface $eventDispatcher + ): Response { + if (!$this->isGranted('ROLE_TREASURER')) { + throw $this->createAccessDeniedException(); + } + + if (!$this->isCsrfTokenValid('missingProofs', $token)) { + throw $this->createAccessDeniedException(); + } + + $message = $request->request->get('form')['message'] ?? null; + $entity->setIsRequestedPayment(false); + + $entityManager->update($entity); + + $eventDispatcher->dispatch(new EntityManagerEvent($entity, [ + 'message' => $message, + 'user' => $this->getUser(), + ]), 'expense_report.missing_proofs'); + + $this->addFlash('success', 'The data has been saved.'); + + return $this->redirectToRoute('admin_expense_report_edit', [ + 'entity' => $entity->getId(), + ]); + } + protected function beforeUpdate(EntityInterface $entity, FormInterface $form, Request $request) { $deleteBills = $request->request->get($form->getName())['deleteBills']['bills'] ?? []; diff --git a/src/EventSubscriber/ExpenseReportEventSubscriber.php b/src/EventSubscriber/ExpenseReportEventSubscriber.php index c9c6235..fd6a550 100644 --- a/src/EventSubscriber/ExpenseReportEventSubscriber.php +++ b/src/EventSubscriber/ExpenseReportEventSubscriber.php @@ -35,6 +35,7 @@ class ExpenseReportEventSubscriber extends EntityManagerEventSubscriber return array_merge(parent::getSubscribedEvents(), [ 'expense_report.requested_payment' => ['onRequestedPayment', self::$priority], 'expense_report.paid' => ['onPaid', self::$priority], + 'expense_report.missing_proofs' => ['onMissingProofs', self::$priority], ]); } @@ -92,6 +93,31 @@ class ExpenseReportEventSubscriber extends EntityManagerEventSubscriber ; } + public function onMissingProofs(EntityManagerEvent $event) + { + if (!$this->supports($event->getEntity())) { + return; + } + + $this->notifier + ->setSubject('[Tinternet][NDF] Justificatif(s) manquant(s)') + ->addRecipient($event->getEntity()->getUser()->getEmail()) + ->addRecipientsByUsers($this->userQuery->where('.isTreasurer = true')->find(), true) + ->notify('mail/expense_report/missing_proofs.html.twig', [ + 'entity' => $event->getEntity(), + 'message' => $event->getParams()['message'], + 'user' => $event->getParams()['user'], + 'show_url' => $this->urlGenerator->generate( + 'admin_expense_report_edit', + [ + 'entity' => $event->getEntity()->getId(), + ], + UrlGeneratorInterface::ABSOLUTE_URL + ), + ]) + ; + } + public function onPreCreate(EntityManagerEvent $event) { if (!$this->supports($event->getEntity())) { diff --git a/templates/admin/expense_report/edit.html.twig b/templates/admin/expense_report/edit.html.twig index c5e86fd..f02895b 100644 --- a/templates/admin/expense_report/edit.html.twig +++ b/templates/admin/expense_report/edit.html.twig @@ -13,6 +13,10 @@ Définir comme payée + + + Justificatif(s) manquant(s) + {% endif %} {% endif %} {% endif %} @@ -53,4 +57,37 @@ {% endif %} + + {% set mail2FormRoute = configuration.viewData(context, 'mail2FormRoute') %} + {% set mail2FormTokenName = configuration.viewData(context, 'mail2FormTokenName') %} + {% set mail2Form = configuration.viewData(context, 'mail2Form') %} + + {% if mail2FormRoute %} +
+ +
+ {% endif %} {% endblock %} diff --git a/templates/mail/expense_report/paid.html.twig b/templates/mail/expense_report/missing_proofs.html.twig similarity index 69% rename from templates/mail/expense_report/paid.html.twig rename to templates/mail/expense_report/missing_proofs.html.twig index d94d9f0..59629b5 100644 --- a/templates/mail/expense_report/paid.html.twig +++ b/templates/mail/expense_report/missing_proofs.html.twig @@ -11,7 +11,7 @@ Tinternet & Cie

-

Le paiement pour la note de frais #{{ entity.id }} a été réalisé ☺️

+

{{ user.displayName }} indique qu'un ou plusieurs justificatifs sont manquants pour payer la note de frais #{{ entity.id }} 🔔.

{% if message %}

Message de {{ user.displayName }} :