commerce-8.x-2.8/modules/order/src/AvailabilityOrderProcessor.php
modules/order/src/AvailabilityOrderProcessor.php
<?php
namespace Drupal\commerce_order;
use Drupal\commerce\AvailabilityManagerInterface;
use Drupal\commerce\Context;
use Drupal\commerce_order\Entity\OrderInterface;
/**
* Provides an order processor that removes entities that are no longer available.
*/
class AvailabilityOrderProcessor implements OrderProcessorInterface {
/**
* The availability manager.
*
* @var \Drupal\commerce\AvailabilityManagerInterface
*/
protected $availabilityManager;
/**
* Constructs a new AvailabilityOrderProcessor object.
*
* @param \Drupal\commerce\AvailabilityManagerInterface $availability_manager
* The availability manager.
*/
public function __construct(AvailabilityManagerInterface $availability_manager) {
$this->availabilityManager = $availability_manager;
}
/**
* {@inheritdoc}
*/
public function process(OrderInterface $order) {
// @todo Get $context as an argument to process().
$context = new Context($order->getCustomer(), $order->getStore());
foreach ($order->getItems() as $order_item) {
$purchased_entity = $order_item->getPurchasedEntity();
if ($purchased_entity) {
$available = $this->availabilityManager->check($purchased_entity, $order_item->getQuantity(), $context);
if (!$available) {
$order->removeItem($order_item);
$order_item->delete();
}
}
}
}
}
