src/Listener/PaymentEventListener.php line 51

Open in your IDE?
  1. <?php
  2. namespace App\Listener;
  3. use App\Entity\DeviceSale;
  4. use App\Entity\Order;
  5. use App\Entity\User;
  6. use App\Mailer\AppMailer;
  7. use App\Service\CreditService;
  8. use App\Service\CreditSmsService;
  9. use App\Service\InvoiceService;
  10. use App\Service\StoreIndexationService;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Psr\Log\LoggerInterface;
  13. use Wits\PaymentBundle\Event\PaymentEvent;
  14. class PaymentEventListener
  15. {
  16.     private LoggerInterface $logger;
  17.     private CreditService $creditService;
  18.     private CreditSmsService $creditSmsService;
  19.     private InvoiceService $invoiceService;
  20.     private EntityManagerInterface $em;
  21.     private AppMailer $appMailer;
  22.     private StoreindexationService $storeindexationService;
  23.     public function __construct(CreditService          $creditService,
  24.                                 CreditSmsService       $creditSmsService,
  25.                                 InvoiceService         $invoiceService,
  26.                                 LoggerInterface        $logger,
  27.                                 EntityManagerInterface $em,
  28.                                 AppMailer              $appMailer,
  29.                                 StoreindexationService $storeindexationService
  30.     )
  31.     {
  32.         $this->logger $logger;
  33.         $this->creditService $creditService;
  34.         $this->invoiceService $invoiceService;
  35.         $this->creditSmsService $creditSmsService;
  36.         $this->em $em;
  37.         $this->appMailer $appMailer;
  38.         $this->storeindexationService $storeindexationService;
  39.     }
  40.     /**
  41.      * Method triggered when a payment confirmation is received
  42.      * @param PaymentEvent $event
  43.      */
  44.     public function onPaymentConfirmed(PaymentEvent $event)
  45.     {
  46.         $this->logger->debug('PaymentEventListener onPaymentConfirmed');
  47.         $payment $event->getPayment();
  48.         if ($payment) {
  49.             $this->logger->info('Payment ' $payment->getId() . ' has been confirmed');
  50.             //search associated order
  51.             $orderRepository $this->em->getRepository(Order::class);
  52.             $order $orderRepository->findOrderAssociatedAtPayment($payment);
  53.             //search associated deviceSale
  54.             $deviceSaleRepository $this->em->getRepository(DeviceSale::class);
  55.             $sale $deviceSaleRepository->findSaleAssociatedwithPayment($payment);
  56.             if ($order) {
  57.                 if ($order->hasPack()) {
  58.                     if ($order->getPack()->isCreditPack()) {
  59.                         $this->creditService->increaseCreditForOrder($order);
  60.                     } else if ($order->getPack()->isSmsCreditPack()) {
  61.                         $this->creditSmsService->increaseCreditForOrder($order);
  62.                     } else {
  63.                         $this->logger->error('Unknown pack type for order ' $order->getId());
  64.                     }
  65.                 } elseif ($order->hasCreditCost()) {
  66.                     $this->logger->info('CreditCost of order ' $order->getId() . ' have been paid');
  67.                 } elseif ($order->hasStoreIndexation()) {
  68.                     $this->logger->info('StoreIndexation of order ' $order->getId() . ' have been paid');
  69.                 } else {
  70.                     $this->logger->error('Unknown order type (orderId: ' $order->getId() . ')');
  71.                 }
  72.                 //generate invoice & notify
  73.                 $this->invoiceService->createInvoiceForOrder($order);
  74.             } elseif ($sale) {
  75.                 $this->invoiceService->createInvoiceForDeviceSale($sale);
  76.             } else {
  77.                 $this->logger->error('No Order nor sale found (associated with payment ' $payment->getId() . ' )');
  78.             }
  79.         } else {
  80.             $this->logger->warning('No payment associated with event onPaymentConfirmed');
  81.         }
  82.     }
  83.     /**
  84.      * Method triggered when a user is created (in stripe)
  85.      * @param PaymentEvent $event
  86.      */
  87.     public function onCustomerCreated(PaymentEvent $event)
  88.     {
  89.         $this->logger->debug('PaymentEventListener onCustomerCreated');
  90.         $customerStripe $event->getStripeEvent()->data->object;
  91.         $this->logger->info('User is  ' $customerStripe->id ' - ' $customerStripe->email);
  92.         $user $this->em->getRepository(User::class)->findOneBy(['email' => $customerStripe->email]);
  93.         $user->setStripeId($customerStripe->id);
  94.         $this->em->flush();
  95.     }
  96.     /**
  97.      * Method triggered when a payment is refused (in stripe)
  98.      * @param PaymentEvent $event
  99.      */
  100.     public function onPaymentRefused(PaymentEvent $event)
  101.     {
  102.         $this->logger->debug('PaymentEventListener onPaymentRefused');
  103.         $payment $event->getPayment();
  104.         if ($payment) {
  105.             $this->logger->info('Payment ' $payment->getId() . ' has been refused');
  106.             $this->appMailer->sendAdminEmailPaymentRefused($payment);
  107.             $this->em->flush();
  108.             //search associated order
  109.             $orderRepository $this->em->getRepository(Order::class);
  110.             $order $orderRepository->findOrderAssociatedAtPayment($payment);
  111.             if ($order) {
  112.                 if ($order->hasStoreIndexation()) {
  113.                     $this->logger->info('Payment is link to an order of Indexation');
  114.                     foreach ($order->getStoreIndexations() as $storeIndexation) {
  115.                         $this->storeindexationService->stopIndexation($storeIndexation);
  116.                     }
  117.                 }
  118.             }
  119.         }
  120.     }
  121. }