<?php declare(strict_types=1);
namespace Tds\Merware\Storefront\Page\Checkout\Finish;
use Shopware\Core\System\SystemConfig\SystemConfigService;
use Shopware\Storefront\Page\Checkout\Finish\CheckoutFinishPageLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Tds\Merware\Service\Core\LoggerService;
use Tds\Merware\Service\Core\Order\PendingOrderService;
/**
* Class CheckoutFinishPageLoadedSubscriber
*
* @package Tds\Merware\Core\Checkout\Order\Subscriber
*/
class CheckoutFinishPageLoadedSubscriber implements EventSubscriberInterface
{
/**
* @var LoggerService
*/
private $loggerService;
/**
* @var SystemConfigService
*/
private $systemConfigService;
/**
* @var PendingOrderService
*/
private $pendingOrderService;
/**
* {@inheritDoc}
*/
public static function getSubscribedEvents(): array
{
return [
CheckoutFinishPageLoadedEvent::class => 'onCheckoutFinishPageLoaded'
];
}
/**
* Order constructor.
*
* @param LoggerService $loggerService
* @param SystemConfigService $systemConfigService
* @param PendingOrderService $pendingOrderService
*/
public function __construct(LoggerService $loggerService, SystemConfigService $systemConfigService, PendingOrderService $pendingOrderService)
{
$this->loggerService = $loggerService;
$this->systemConfigService = $systemConfigService;
$this->pendingOrderService = $pendingOrderService;
}
/**
* Event to catch orders with a changed payment method
*
* @param CheckoutFinishPageLoadedEvent $event
*/
public function onCheckoutFinishPageLoaded(CheckoutFinishPageLoadedEvent $event)
{
if ((bool) $this->systemConfigService->get('TdsMerware.config.processChangedOrderPayment')) {
$page = $event->getPage();
if (!$page->isPaymentFailed() && $page->isChangedPayment()) {
$order = $page->getOrder();
if (!empty($order)) {
$this->pendingOrderService->processChangedOrderPaymentMethod($event->getContext(), $order);
}
}
}
}
}