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 @@
- 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 }} :