src/EventSubscriber/UpdateOrderNumber.php line 26

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Ecommerce\Model\Order;
  4. use net\authorize\api\contract\v1\OrderType;
  5. use Pimcore\Event\DataObjectEvents;
  6. use Pimcore\Event\Model\DataObjectEvent;
  7. use Pimcore\Model\DataObject;
  8. use Pimcore\Model\DataObject\OnlineShopOrder\Listing as OnlineShopOrderListing;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. class UpdateOrderNumber implements EventSubscriberInterface
  11. {
  12.     public static function getSubscribedEvents()
  13.     {
  14.         return [
  15.             DataObjectEvents::PRE_ADD => [
  16.                 ['updateOrderNumber'10]
  17.             ],
  18.             DataObjectEvents::PRE_UPDATE => [
  19.                 ['updateOrderNumber'10]
  20.             ]
  21.         ];
  22.     }
  23.     public function updateOrderNumber(DataObjectEvent $event)
  24.     {
  25.         $object $event->getObject();
  26.         if (!$object || $object->getType() !== DataObject::OBJECT_TYPE_OBJECT) {
  27.             return;
  28.         }
  29.         if (!$object instanceof Order || !$object->getPublished() || $object->getOrderState() != Order::ORDER_STATE_COMMITTED) {
  30.             return;
  31.         }
  32.         if (!in_array($object->getOrderType(), $this->getAllowedTypes())) {
  33.             return;
  34.         }
  35.         if (!$this->isRecentlyCompleted($object)) {
  36.             return;
  37.         }
  38.         $sql "SELECT ordernumber FROM object_EF_OSO WHERE ordernumber REGEXP '^[0-9]*$' ORDER BY cast(ordernumber as unsigned) DESC";
  39.         $stmt \Pimcore\Db::get()->prepare($sql);
  40.         $stmt->execute();
  41.         $result $stmt->fetch(1);
  42.         $orderNumber intval($result->ordernumber) + 1;
  43.         $object->setOrderNumber($orderNumber);
  44.     }
  45.     protected function isRecentlyCompleted(Order $order)
  46.     {
  47.         $origin Order::getById($order->getId(), true);
  48.         if (!$origin) {
  49.             return true;
  50.         }
  51.         if ($origin->getOrderState() == $order->getOrderState() && $origin->getPublished() == $order->getPublished()) {
  52.             return false;
  53.         }
  54.         if (!intVal($order->getOrderNumber())) {
  55.             return true;
  56.         }
  57.         return false;
  58.     }
  59.     protected function getAllowedTypes()
  60.     {
  61.         return [
  62.             Order::ORDER_TYPE_ORDER,
  63.             Order::ORDER_TYPE_QUOUTE_REQUEST,
  64.             Order::ORDER_TYPE_QUOUTE_SAVED
  65.         ];
  66.     }
  67. }