<?php declare(strict_types=1);
namespace TigerMedia\TigerConnect\Core\Content\Flow\Dispatching\Action;
use Shopware\Core\Checkout\Cart\Event\CheckoutOrderPlacedEvent;
use Shopware\Core\Content\Flow\Dispatching\Action\FlowAction;
use Shopware\Core\Content\Flow\Dispatching\Aware\OrderTransactionAware;
use Shopware\Core\Framework\Event\FlowEvent;
use Shopware\Core\Framework\Event\OrderAware;
use Symfony\Component\Messenger\MessageBusInterface;
use TigerMedia\TigerConnect\Core\Content\Logger\LoggerDefinition;
use TigerMedia\TigerConnect\Exception\OrderException;
use TigerMedia\TigerConnect\Helper\OrderHelper;
use TigerMedia\TigerConnect\MessageQueue\OrderDataMessage;
class OrderExportAction extends FlowAction
{
const ACTION_NAME = 'action.tiger_connect.order.export';
public function __construct(
private readonly MessageBusInterface $messageBus,
private readonly OrderHelper $orderHelper
)
{
}
public function requirements(): array
{
return [OrderAware::class, OrderTransactionAware::class];
}
public static function getName(): string
{
return self::ACTION_NAME;
}
/**
* @inheritDoc
*/
public static function getSubscribedEvents(): iterable
{
return [
self::getName() => 'handle',
];
}
/**
* @throws OrderException
*/
public function handle(FlowEvent $event): void
{
/** @var CheckoutOrderPlacedEvent $orderEvent */
$orderEvent = $event->getEvent();
$order = $orderEvent->getOrder();
$this->orderHelper->addToLogger($order->getOrderNumber(), "Starting flow action for Order [{$order->getOrderNumber()}].", LoggerDefinition::LOG_INFO, $event->getContext());
$this->orderHelper->addToLogger($order->getOrderNumber(), "Starting dispatch for Order [{$order->getOrderNumber()}].", LoggerDefinition::LOG_INFO, $event->getContext());
$this->messageBus->dispatch(new OrderDataMessage($order->getOrderNumber(), $event->getContext()));
$this->orderHelper->addToLogger($order->getOrderNumber(), "Dispatched queue for Order [{$order->getOrderNumber()}].", LoggerDefinition::LOG_INFO, $event->getContext());
}
}