<?php
namespace ProxaOrderManagement\Subscribers;
use ProxaOrderManagement\Exception\Order\Warehouse\StockException;
use ProxaOrderManagement\Services\Order\OrderService;
use ProxaOrderManagement\Services\Warehouse\WarehouseMailService;
use ProxaOrderManagement\Struct\Order\Warehouse\OrderWarehouseFilterCollection;
use Shopware\Core\Checkout\Cart\Event\CheckoutOrderPlacedEvent;
use Shopware\Core\Content\MailTemplate\Subscriber\MailSendSubscriber;
use Shopware\Core\Content\MailTemplate\Subscriber\MailSendSubscriberConfig;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class OrderSubscriber implements EventSubscriberInterface
{
/**
* @var WarehouseMailService
*/
private WarehouseMailService $warehouseMailService;
private OrderService $orderService;
/**
* @param WarehouseMailService $warehouseMailService
* @param OrderService $orderService
*/
public function __construct(
WarehouseMailService $warehouseMailService,
OrderService $orderService
)
{
$this->warehouseMailService = $warehouseMailService;
$this->orderService = $orderService;
}
/**
* @return string[]
*/
public static function getSubscribedEvents(): array
{
return [
CheckoutOrderPlacedEvent::class => ['onCheckoutOrderPlacedEvent', -999],
OrderWarehouseFilterCollection::class => 'onOrderWarehouseFilterCollection'
];
}
/**
* @param CheckoutOrderPlacedEvent $event
* @return void
* @throws StockException
*/
public function onCheckoutOrderPlacedEvent(CheckoutOrderPlacedEvent $event)
{
$this->warehouseMailService->orderPlacedMailAction($event);
//this must set after mailAction
if ($this->orderService->saveOrderClickAndCollectWarehouse($event->getOrder())) {
//it`s stop send mails sender via context
$event->getContext()->addExtension(MailSendSubscriber::MAIL_CONFIG_EXTENSION, new MailSendSubscriberConfig(true, [], [])); //not sent order mail to customer
}
}
public function onOrderWarehouseFilterCollection(OrderWarehouseFilterCollection $collection)
{
$this->orderService->saveOrderWarehouse($collection);
}
}