90 lines
2.7 KiB
PHP
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;
|
|
}
|
|
}
|