src/EventSubscriber/Order/UpdateOrderDivisionSubscriber.php line 20

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\Order;
  3. use App\Ecommerce\Model\Order;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Pimcore\Event\Model\DataObjectEvent;
  6. use Pimcore\Event\DataObjectEvents;
  7. class UpdateOrderDivisionSubscriber implements EventSubscriberInterface
  8. {
  9.     public static function getSubscribedEvents()
  10.     {
  11.         return [
  12.             DataObjectEvents::PRE_ADD => 'assignOrderToDivision',
  13.             DataObjectEvents::PRE_UPDATE => 'assignOrderToDivision'
  14.         ];
  15.     }
  16.     public function assignOrderToDivision(DataObjectEvent $event)
  17.     {
  18.         if (!$this->isOrderEvent($event)) {
  19.             return;
  20.         }
  21.         if ($this->alreadyHasDivision($event->getObject())) {
  22.             return;
  23.         }
  24.         if (!$this->hasOrderItems($event->getObject())) {
  25.             return;
  26.         }
  27.         $division $this->detectDivision($event->getObject());
  28.         if (!$division) {
  29.             return;
  30.         }
  31.         $event->getObject()->setDivision($division);
  32.     }
  33.     protected function isOrderEvent(DataObjectEvent $event)
  34.     {
  35.         return $event->getObject() instanceof Order;
  36.     }
  37.     protected function alreadyHasDivision(Order $order)
  38.     {
  39.         return !empty($order->getDivision());
  40.     }
  41.     protected function hasOrderItems(Order $order)
  42.     {
  43.         return !empty($order->getItems());
  44.     }
  45.     protected function detectDivision(Order $order)
  46.     {
  47.         foreach ($order->getItems() as $item) {
  48.             if (!$item->getProduct()) {
  49.                 continue;
  50.             }
  51.             $division $item->getProduct()->getDivision();
  52.             if (empty($division)) {
  53.                 continue;
  54.             }
  55.             return $division;
  56.         }
  57.         return null;
  58.     }
  59. }