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 %}