custom/plugins/CioBudget/src/Subscriber/BudgetMovementSubscriber.php line 32

Open in your IDE?
  1. <?php
  2. namespace CioBudget\Subscriber;
  3. use CioBudget\PaymentHandler\BudgetPayment;
  4. use Shopware\Core\Checkout\Order\Event\OrderStateMachineStateChangeEvent;
  5. use Shopware\Core\Checkout\Payment\Cart\PaymentHandler\PaymentHandlerRegistry;
  6. use Shopware\Core\Checkout\Payment\Cart\SyncPaymentTransactionStruct;
  7. use Shopware\Core\Framework\Validation\DataBag\RequestDataBag;
  8. use Shopware\Core\System\SalesChannel\Context\AbstractSalesChannelContextFactory;
  9. use Shopware\Core\System\SalesChannel\Context\SalesChannelContextService;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. class BudgetMovementSubscriber implements EventSubscriberInterface
  12. {
  13.     private PaymentHandlerRegistry $paymentHandlerRegistry;
  14.     private AbstractSalesChannelContextFactory $salesChannelContextFactory;
  15.     public function __construct(PaymentHandlerRegistry $paymentHandlerRegistryAbstractSalesChannelContextFactory $salesChannelContextFactory)
  16.     {
  17.         $this->paymentHandlerRegistry $paymentHandlerRegistry;
  18.         $this->salesChannelContextFactory $salesChannelContextFactory;
  19.     }
  20.     public static function getSubscribedEvents(): array
  21.     {
  22.         return [
  23.             'state_enter.order_transaction.state.refunded' => 'onOrderRefund',
  24.         ];
  25.     }
  26.     public function onOrderRefund(OrderStateMachineStateChangeEvent $event): void
  27.     {
  28.         $order $event->getOrder();
  29.         $transaction $order->getTransactions()->last();
  30.         $paymentMethod $transaction->getPaymentMethod();
  31.         $paymentHandler $this->paymentHandlerRegistry->getHandlerForPaymentMethod($paymentMethod);
  32.         if ($paymentHandler instanceof BudgetPayment) {
  33.             /** @var $paymentHandler BudgetPayment */
  34.             $paymentTransaction = new SyncPaymentTransactionStruct($transaction$order);
  35.             $dataBag = new RequestDataBag();
  36.             $salesChannelContext $this->salesChannelContextFactory->create(''$order->getSalesChannelId(), [SalesChannelContextService::LANGUAGE_ID => $order->getLanguageId()]);
  37.             $paymentHandler->refund($paymentTransaction$dataBag$salesChannelContext);
  38.         }
  39.     }
  40. }