src/EventSubscriber/PsRequest/PsRequestUpdatedEventSubscriber.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\PsRequest;
  3. use App\Entity\PsRequest;
  4. use App\Entity\Transaction;
  5. use App\Factory\TransactionFactory;
  6. use App\Service\MailerService;
  7. use DateTimeImmutable;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityUpdatedEvent;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Twig\Environment;
  12. class PsRequestUpdatedEventSubscriber implements EventSubscriberInterface
  13. {
  14.     public function __construct(
  15.         private MailerService $mailerService, private Environment $twig, private EntityManagerInterface $entityManager,
  16.         private TransactionFactory $transactionFactory
  17.     ) {
  18.     }
  19.     public static function getSubscribedEvents(): array
  20.     {
  21.         return [
  22.             AfterEntityUpdatedEvent::class => ['onPsRequestUpdate'],
  23.         ];
  24.     }
  25.     public function onPsRequestUpdate(AfterEntityUpdatedEvent $event): void
  26.     {
  27.         $entity $event->getEntityInstance();
  28.         if (!($entity instanceof PsRequest)) {
  29.             return;
  30.         }
  31.         $psRequestStatus $entity->getStatus();
  32.         $psAmount $entity->getAmount();
  33.         $player $entity->getPlayer();
  34.         $user $player->getUser();
  35.         $player->setUpdatedAt(new DateTimeImmutable('now'));
  36.         if ($psRequestStatus === PsRequest::COMPLETED_STATUS) {
  37.             $emailTemplate $this->twig->render('emails/ps-request/accepted-ps-request.mjml.twig', ['username' => $user->getUserIdentifier(), 'psAmount' => $psAmount]);
  38.             $this->mailerService->send($user->getEmail(), "Votre demande d'échange de ps à bien été traitée !"$emailTemplate);
  39.         }
  40.         if ($psRequestStatus === PsRequest::REFUSED_STATUS) {
  41.             // refunds the player
  42.             $this->transactionFactory
  43.                 ->forPlayer($player)
  44.                 ->givePs($psAmount)
  45.                 ->because(Transaction::REFUND_PS_TO_EURO_TYPE)
  46.                 ->save()
  47.             ;
  48.             $emailTemplate $this->twig->render('emails/ps-request/refused-ps-request.mjml.twig', ['username' => $user->getUserIdentifier(), 'psAmount' => $psAmount'message' => $entity->getMessage()]);
  49.             $this->mailerService->send($user->getEmail(), "Votre demande d'échange de ps à été refusée."$emailTemplate);
  50.         }
  51.         $this->entityManager->flush();
  52.     }
  53. }