src/Listener/PaymentEventListener.php line 46

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