OrderItemSubscriber.php in Commerce Shipping 8.2
File
src/EventSubscriber/OrderItemSubscriber.php
View source
<?php
namespace Drupal\commerce_shipping\EventSubscriber;
use Drupal\commerce_order\Entity\OrderInterface;
use Drupal\commerce_order\Event\OrderItemEvent;
use Drupal\commerce_shipping\ShippingOrderManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class OrderItemSubscriber implements EventSubscriberInterface {
protected $shippingOrderManager;
public function __construct(ShippingOrderManagerInterface $shipping_order_manager) {
$this->shippingOrderManager = $shipping_order_manager;
}
public static function getSubscribedEvents() {
return [
'commerce_order.commerce_order_item.update' => [
'onOrderItemUpdate',
],
'commerce_order.commerce_order_item.delete' => [
'onOrderItemDelete',
],
];
}
public function onOrderItemUpdate(OrderItemEvent $order_item_event) {
$order_item = $order_item_event
->getOrderItem();
$order = $order_item
->getOrder();
if (!$order || !$this
->shouldRefresh($order)) {
return;
}
if ($order_item
->getQuantity() !== $order_item->original
->getQuantity()) {
$order
->setData(ShippingOrderManagerInterface::FORCE_REFRESH, TRUE);
}
}
public function onOrderItemDelete(OrderItemEvent $order_item_event) {
$order_item = $order_item_event
->getOrderItem();
$order = $order_item
->getOrder();
if (!$order || !$this
->shouldRefresh($order)) {
return;
}
$order
->setData(ShippingOrderManagerInterface::FORCE_REFRESH, TRUE);
}
protected function shouldRefresh(OrderInterface $order) {
return $order
->getState()
->getId() == 'draft' && $this->shippingOrderManager
->hasShipments($order);
}
}