From 2931c095ea705a105a07dfca49e9499171dbfbf0 Mon Sep 17 00:00:00 2001
From: Simon Vieille
Date: Tue, 10 May 2022 11:20:10 +0200
Subject: [PATCH] add message in expense report notitfications
---
.../ExpenseReportAdminController.php | 57 +++++++++++++++++--
src/Event/EntityManagerEvent.php | 28 +++++++++
.../ExpenseReportEventSubscriber.php | 4 ++
templates/admin/expense_report/edit.html.twig | 55 +++++++++++++-----
templates/mail/expense_report/paid.html.twig | 4 ++
.../requested_payment.html.twig | 4 ++
6 files changed, 132 insertions(+), 20 deletions(-)
create mode 100644 src/Event/EntityManagerEvent.php
diff --git a/src/Controller/ExpenseReportAdminController.php b/src/Controller/ExpenseReportAdminController.php
index 77359d3..4b5b252 100644
--- a/src/Controller/ExpenseReportAdminController.php
+++ b/src/Controller/ExpenseReportAdminController.php
@@ -6,15 +6,16 @@ use App\Core\Controller\Admin\Crud\CrudController;
use App\Core\Crud\CrudConfiguration;
use App\Core\Crud\Field;
use App\Core\Entity\EntityInterface;
-use App\Core\Event\EntityManager\EntityManagerEvent;
use App\Core\Form\FileUploadHandler;
use App\Core\Manager\EntityManager;
use App\Entity\ExpenseReport as Entity;
+use App\Event\EntityManagerEvent;
use App\Factory\ExpenseReportFactory as Factory;
use App\Form\ExpenseReportType as Type;
use App\Repository\ExpenseReportRepositoryQuery as RepositoryQuery;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\Filesystem\Filesystem;
+use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
@@ -84,18 +85,54 @@ class ExpenseReportAdminController extends CrudController
throw $this->createAccessDeniedException();
}
- if (true === $entity->getIsRequestedPayment()) {
+ if ($entity->getIsRequestedPayment()) {
return $this->redirectToRoute('admin_expense_report_show', [
'entity' => $entity->getId(),
]);
}
}
+ if (!$entity->getIsRequestedPayment()) {
+ $form = $this->createFormBuilder()
+ ->add('message', TextareaType::class, [
+ 'required' => false,
+ 'label' => 'Message',
+ 'help' => 'Message à ajouter dans le mail de notification (optionnel)',
+ ])
+ ->getForm()
+ ->createView()
+ ;
+
+ $route = 'admin_expense_report_request_payment';
+ $tokenName = 'request_payment';
+ } elseif ($entity->getIsRequestedPayment() && !$entity->getIsPaid()) {
+ $form = $this->createFormBuilder()
+ ->add('message', TextareaType::class, [
+ 'required' => false,
+ 'label' => 'Message',
+ 'help' => 'Message à ajouter dans le mail de notification (optionnel)',
+ ])
+ ->getForm()
+ ->createView()
+ ;
+
+ $route = 'admin_expense_report_paid';
+ $tokenName = 'paid';
+ }
+
+ if (isset($form)) {
+ $this->getConfiguration()
+ ->addViewData('edit', 'mailFormRoute', $route)
+ ->addViewData('edit', 'mailFormTokenName', $tokenName)
+ ->addViewData('edit', 'mailForm', $form)
+ ;
+ }
+
return $this->doEdit($entity, $entityManager, $request, [$this, 'beforeUpdate']);
}
/**
- * @Route("/admin/expense_report/request_payment/{entity}/{token}", name="admin_expense_report_request_payment", methods={"GET"})
+ * @Route("/admin/expense_report/request_payment/{entity}/{token}", name="admin_expense_report_request_payment", methods={"POST"})
*/
public function requestPayment(
Entity $entity,
@@ -114,10 +151,14 @@ class ExpenseReportAdminController extends CrudController
throw $this->createAccessDeniedException();
}
+ $message = $request->request->get('form')['message'] ?? null;
$entity->setIsRequestedPayment(true);
$entityManager->update($entity);
- $eventDispatcher->dispatch(new EntityManagerEvent($entity), 'expense_report.requested_payment');
+ $eventDispatcher->dispatch(new EntityManagerEvent($entity, [
+ 'message' => $message,
+ 'user' => $this->getUser(),
+ ]), 'expense_report.requested_payment');
$this->addFlash('success', 'La demande a été envoyée.');
@@ -127,7 +168,7 @@ class ExpenseReportAdminController extends CrudController
}
/**
- * @Route("/admin/expense_report/paud/{entity}/{token}", name="admin_expense_report_paid", methods={"GET"})
+ * @Route("/admin/expense_report/paid/{entity}/{token}", name="admin_expense_report_paid", methods={"POST"})
*/
public function paid(
Entity $entity,
@@ -144,6 +185,7 @@ class ExpenseReportAdminController extends CrudController
throw $this->createAccessDeniedException();
}
+ $message = $request->request->get('form')['message'] ?? null;
$entity->setIsPaid(true);
if (!$entity->getPaidAt()) {
@@ -152,7 +194,10 @@ class ExpenseReportAdminController extends CrudController
$entityManager->update($entity);
- $eventDispatcher->dispatch(new EntityManagerEvent($entity), 'expense_report.paid');
+ $eventDispatcher->dispatch(new EntityManagerEvent($entity, [
+ 'message' => $message,
+ 'user' => $this->getUser(),
+ ]), 'expense_report.paid');
$this->addFlash('success', 'The data has been saved.');
diff --git a/src/Event/EntityManagerEvent.php b/src/Event/EntityManagerEvent.php
new file mode 100644
index 0000000..9a7b159
--- /dev/null
+++ b/src/Event/EntityManagerEvent.php
@@ -0,0 +1,28 @@
+
+ */
+class EntityManagerEvent extends Event
+{
+ protected $params;
+
+ public function __construct(EntityInterface $entity, array $params = [])
+ {
+ $this->params = $params;
+
+ parent::__construct($entity);
+ }
+
+ public function getParams(): array
+ {
+ return $this->params;
+ }
+}
diff --git a/src/EventSubscriber/ExpenseReportEventSubscriber.php b/src/EventSubscriber/ExpenseReportEventSubscriber.php
index 7b7d507..c9c6235 100644
--- a/src/EventSubscriber/ExpenseReportEventSubscriber.php
+++ b/src/EventSubscriber/ExpenseReportEventSubscriber.php
@@ -55,6 +55,8 @@ class ExpenseReportEventSubscriber extends EntityManagerEventSubscriber
->addRecipientsByUsers($this->userQuery->where('.isTreasurer = true')->find(), true)
->notify('mail/expense_report/paid.html.twig', [
'entity' => $event->getEntity(),
+ 'message' => $event->getParams()['message'],
+ 'user' => $event->getParams()['user'],
'show_url' => $this->urlGenerator->generate(
'admin_expense_report_show',
[
@@ -77,6 +79,8 @@ class ExpenseReportEventSubscriber extends EntityManagerEventSubscriber
->addRecipientsByUsers($this->userQuery->where('.isTreasurer = true')->find(), true)
->notify('mail/expense_report/requested_payment.html.twig', [
'entity' => $event->getEntity(),
+ 'message' => $event->getParams()['message'],
+ 'user' => $event->getParams()['user'],
'show_url' => $this->urlGenerator->generate(
'admin_expense_report_show',
[
diff --git a/templates/admin/expense_report/edit.html.twig b/templates/admin/expense_report/edit.html.twig
index c8839d5..c19d449 100644
--- a/templates/admin/expense_report/edit.html.twig
+++ b/templates/admin/expense_report/edit.html.twig
@@ -3,25 +3,52 @@
{% block header_actions_after %}
{% if not entity.isPaid %}
{% if not entity.isRequestedPayment and (entity.user.id == app.user.id or is_granted('ROLE_TREASURER')) %}
- {% set url = safe_path(configuration.pageRoute('requestPayment'), {
- entity: entity.id,
- token: csrf_token('request_payment')
- }) %}
-
-
+
Demander le paiement
-
+
{% endif %}
{% if entity.isRequestedPayment and is_granted('ROLE_TREASURER') %}
- {% set url = safe_path(configuration.pageRoute('paid'), {
- entity: entity.id,
- token: csrf_token('paid')
- }) %}
-
-
+
Définir comme payée
-
+
{% endif %}
{% endif %}
{% endblock %}
+
+{% block body %}
+ {{ parent() }}
+
+ {% set mailFormRoute = configuration.viewData(context, 'mailFormRoute') %}
+ {% set mailFormTokenName = configuration.viewData(context, 'mailFormTokenName') %}
+ {% set mailForm = configuration.viewData(context, 'mailForm') %}
+
+ {% if mailFormRoute %}
+
+ {% endif %}
+{% endblock %}
diff --git a/templates/mail/expense_report/paid.html.twig b/templates/mail/expense_report/paid.html.twig
index 3fbea03..b9e3d86 100644
--- a/templates/mail/expense_report/paid.html.twig
+++ b/templates/mail/expense_report/paid.html.twig
@@ -12,4 +12,8 @@
Le paiement pour la note de frais #{{ entity.id }} a été réalisé ☺️
+
+ {% if message %}
+ Message de {{ user.displayName }} : « {{ message|nl2br }} »
+ {% endif %}
{% endblock %}
diff --git a/templates/mail/expense_report/requested_payment.html.twig b/templates/mail/expense_report/requested_payment.html.twig
index 12c0ef8..4d6eb2c 100644
--- a/templates/mail/expense_report/requested_payment.html.twig
+++ b/templates/mail/expense_report/requested_payment.html.twig
@@ -12,4 +12,8 @@
Une demande de paiement a été réalisée pour la note de frais #{{ entity.id }} 🔔
+
+ {% if message %}
+ Message de {{ user.displayName }} : « {{ message|nl2br }} »
+ {% endif %}
{% endblock %}