<?php
namespace App\EventSubscriber\Order;
use App\Ecommerce\Model\Order;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Pimcore\Event\Model\DataObjectEvent;
use Pimcore\Event\DataObjectEvents;
class UpdateOrderDivisionSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [
DataObjectEvents::PRE_ADD => 'assignOrderToDivision',
DataObjectEvents::PRE_UPDATE => 'assignOrderToDivision'
];
}
public function assignOrderToDivision(DataObjectEvent $event)
{
if (!$this->isOrderEvent($event)) {
return;
}
if ($this->alreadyHasDivision($event->getObject())) {
return;
}
if (!$this->hasOrderItems($event->getObject())) {
return;
}
$division = $this->detectDivision($event->getObject());
if (!$division) {
return;
}
$event->getObject()->setDivision($division);
}
protected function isOrderEvent(DataObjectEvent $event)
{
return $event->getObject() instanceof Order;
}
protected function alreadyHasDivision(Order $order)
{
return !empty($order->getDivision());
}
protected function hasOrderItems(Order $order)
{
return !empty($order->getItems());
}
protected function detectDivision(Order $order)
{
foreach ($order->getItems() as $item) {
if (!$item->getProduct()) {
continue;
}
$division = $item->getProduct()->getDivision();
if (empty($division)) {
continue;
}
return $division;
}
return null;
}
}