Files
2025-08-02 16:30:27 +02:00

90 lines
2.7 KiB
PHP

<?php
declare(strict_types=1);
namespace KupShop\SellerBundle\EventSubscriber;
use KupShop\OrderingBundle\Event\OrderEvent;
use KupShop\POSBundle\Event\PosOrderEvent;
use KupShop\POSBundle\Util\PosEntity;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class OrderSubscriber implements EventSubscriberInterface
{
/** @var PosEntity */
private $posEntity;
public static function getSubscribedEvents(): array
{
return [
OrderEvent::ORDER_COMPLETE => [
['saveOrderSellerId', 255],
],
OrderEvent::ORDER_DELIVERY_CHANGED => [
['saveOrderSellerId', 255],
],
PosOrderEvent::PURCHASE_STATE_CHECK => [
['setCustomSellersIdData', 255],
],
];
}
public function saveOrderSellerId(OrderEvent $event): void
{
$order = $event->getOrder();
// Pokud objednavka nema seller_id v delivery datech, tak nic nedelam
$sellerId = ($order->getData('delivery_data')['seller_id'] ?? null);
if (!$sellerId && ($cart = $event->getCart())) {
// je mozne, ze v tuhle dobu jeste nejsou ulozeny deliveryData na objednavce, ale v cart data jsou
$sellerId = ($cart->deliveryData['seller_id'] ?? null);
}
if (!$sellerId) {
return;
}
sqlQueryBuilder()->insert('order_sellers')
->directValues([
'id_order' => $order->id,
'id_seller' => $sellerId,
])
->onDuplicateKeyUpdate(['id_order', 'id_seller'])
->execute();
}
public function setCustomSellersIdData(PosOrderEvent $event)
{
$this->posEntity->createFromDB($event->getIdPos());
if ($this->posEntity->getStores()[0] ?? false) {
$purchaseState = $event->getPurchaseState();
$customData = $purchaseState->getCustomData();
$idSeller = sqlQueryBuilder()
->select('s.id')
->from('sellers', 's')
->andWhere('s.id_store = :store_id')
->setParameter('store_id', $this->posEntity->getStores()[0])
->execute()
->fetchOne();
$customData['order']['note_admin'] = json_encode(
array_merge($customData['order']['note_admin'] ?? [], [
'delivery_data' => [
'seller_id' => $idSeller,
],
])
);
$purchaseState->setCustomData($customData);
}
}
/**
* @required
*/
public function setPosEntity(?PosEntity $posEntity): void
{
$this->posEntity = $posEntity;
}
}