vendor/bitbag/sylius-b2b-plugin/src/AdminOrderManagement/EventListener/PaymentLinkCreationListener.php line 42

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file has been created by developers from BitBag.
  4.  * Feel free to contact us once you face any issues or want to start
  5.  * You can find more information about us on https://bitbag.io and write us
  6.  * an email on hello@bitbag.io.
  7.  */
  8. declare(strict_types=1);
  9. namespace BitBag\SyliusB2BPlugin\EventListener;
  10. use BitBag\SyliusB2BPlugin\Provider\PaymentTokenProviderInterface;
  11. use BitBag\SyliusB2BPlugin\Sender\OrderPaymentLinkSenderInterface;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Payum\Core\Model\GatewayConfigInterface;
  14. use Sylius\Component\Core\Model\OrderInterface;
  15. use Sylius\Component\Core\Model\PaymentMethodInterface;
  16. use Sylius\Component\Payment\Model\PaymentInterface as PaymentInterfaceAlias;
  17. use Symfony\Component\EventDispatcher\GenericEvent;
  18. use Webmozart\Assert\Assert;
  19. final class PaymentLinkCreationListener
  20. {
  21.     private PaymentTokenProviderInterface $paymentTokenProvider;
  22.     private EntityManagerInterface $orderManager;
  23.     private OrderPaymentLinkSenderInterface $orderPaymentLinkSender;
  24.     public function __construct(
  25.         PaymentTokenProviderInterface $paymentTokenProvider,
  26.         EntityManagerInterface $orderManager,
  27.         OrderPaymentLinkSenderInterface $orderPaymentLinkSender,
  28.     ) {
  29.         $this->paymentTokenProvider $paymentTokenProvider;
  30.         $this->orderManager $orderManager;
  31.         $this->orderPaymentLinkSender $orderPaymentLinkSender;
  32.     }
  33.     public function setPaymentLink(GenericEvent $event): void
  34.     {
  35.         /** @var ?OrderInterface $order */
  36.         $order $event->getSubject();
  37.         Assert::isInstanceOf($orderOrderInterface::class);
  38.         $payment $order->getLastPayment(PaymentInterfaceAlias::STATE_NEW);
  39.         if (null === $payment) {
  40.             return;
  41.         }
  42.         /** @var PaymentMethodInterface $paymentMethod */
  43.         $paymentMethod $payment->getMethod();
  44.         /** @var GatewayConfigInterface $gatewayConfig */
  45.         $gatewayConfig $paymentMethod->getGatewayConfig();
  46.         if ('offline' === $gatewayConfig->getGatewayName()) {
  47.             return;
  48.         }
  49.         $token $this->paymentTokenProvider->getPaymentToken($payment);
  50.         $payment->setDetails(['payment-link' => $token->getAfterUrl()]);
  51.         $this->orderPaymentLinkSender->sendPaymentLink($order);
  52.         $this->orderManager->flush();
  53.     }
  54. }