75 lines
1.9 KiB
PHP
75 lines
1.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace External\ZNZBundle\EventSubscriber\Ordering;
|
|
|
|
use External\ZNZBundle\Util\Order\ZNZOrderUtil;
|
|
use External\ZNZBundle\Util\ZNZLogger;
|
|
use KupShop\KupShopBundle\Config;
|
|
use KupShop\OrderingBundle\Event\OrderEvent;
|
|
use KupShop\OrderingBundle\Util\Order\OrderUtil;
|
|
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
|
|
|
class OrderSubscriber implements EventSubscriberInterface
|
|
{
|
|
public function __construct(
|
|
private ZNZOrderUtil $znzOrderUtil,
|
|
private ZNZLogger $logger,
|
|
private readonly OrderUtil $orderUtil,
|
|
) {
|
|
}
|
|
|
|
public static function getSubscribedEvents(): array
|
|
{
|
|
return [
|
|
OrderEvent::ORDER_CREATED => [
|
|
['orderCreated', 200],
|
|
],
|
|
OrderEvent::ORDER_STATUS_CHANGED => [
|
|
['subtractItemsFromStore', 255],
|
|
],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Obecna podpora pridani flagu k objednavce pro ZNZ.
|
|
*
|
|
* V kosiku staci mit checkbox s nazvem cart_data[order_flags][xx] a objednavce se tak pri zaskrtnuti
|
|
* nastavi flag.
|
|
*/
|
|
public function orderCreated(OrderEvent $event): void
|
|
{
|
|
$cfg = Config::get();
|
|
|
|
$flags = $event->getCart()?->getData('order_flags') ?: [];
|
|
|
|
foreach ($flags as $flag => $_) {
|
|
if (!isset($cfg['Order']['Flags'][$flag])) {
|
|
continue;
|
|
}
|
|
|
|
$this->orderUtil->addFlag(
|
|
$event->getOrder(),
|
|
$flag,
|
|
);
|
|
}
|
|
}
|
|
|
|
public function subtractItemsFromStore(OrderEvent $event): void
|
|
{
|
|
$order = $event->getOrder();
|
|
|
|
// pouze u nove objednavky
|
|
if (!($order->status_previous == -1 && $order->status == 0)) {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
$this->znzOrderUtil->subtractOrderItemsFromStore($order);
|
|
} catch (\Throwable $e) {
|
|
$this->logger->log($e);
|
|
}
|
|
}
|
|
}
|