Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
InventoryRequestFromOrderFactory.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
12 use Magento\Sales\Model\Order\Item as OrderItem;
14 use Magento\InventorySourceSelectionApi\Api\Data\ItemRequestInterfaceFactory;
15 use Magento\InventorySourceSelectionApi\Api\Data\InventoryRequestInterfaceFactory;
18 
20 {
24  private $itemRequestFactory;
25 
29  private $inventoryRequestFactory;
30 
34  private $stockByWebsiteIdResolver;
35 
39  private $getSkuFromOrderItem;
40 
47  public function __construct(
48  ItemRequestInterfaceFactory $itemRequestFactory,
49  InventoryRequestInterfaceFactory $inventoryRequestFactory,
50  StockByWebsiteIdResolverInterface $stockByWebsiteIdResolver,
51  GetSkuFromOrderItemInterface $getSkuFromOrderItem
52  ) {
53  $this->itemRequestFactory = $itemRequestFactory;
54  $this->inventoryRequestFactory = $inventoryRequestFactory;
55  $this->stockByWebsiteIdResolver = $stockByWebsiteIdResolver;
56  $this->getSkuFromOrderItem = $getSkuFromOrderItem;
57  }
58 
63  public function create(OrderInterface $order) : InventoryRequestInterface
64  {
65  $requestItems = [];
66  $websiteId = $order->getStore()->getWebsiteId();
67  $stockId = (int)$this->stockByWebsiteIdResolver->execute((int)$websiteId)->getStockId();
68 
70  foreach ($order->getItems() as $orderItem) {
71  $itemSku = $this->getSkuFromOrderItem->execute($orderItem);
72  $qtyToDeliver = $orderItem->getQtyToShip();
73 
74  //check if order item is not delivered yet
75  if ($orderItem->isDeleted()
76  || $orderItem->getParentItemId()
77  || $this->isZero((float)$qtyToDeliver)
78  || $orderItem->getIsVirtual()
79  ) {
80  continue;
81  }
82 
83  $requestItems[] = $this->itemRequestFactory->create([
84  'sku' => $itemSku,
85  'qty' => $qtyToDeliver
86  ]);
87  }
88 
89  return $this->inventoryRequestFactory->create([
90  'stockId' => $stockId,
91  'items' => $requestItems
92  ]);
93  }
94 
102  private function isZero(float $floatNumber): bool
103  {
104  return $floatNumber < 0.0000001;
105  }
106 }
$orderItem
Definition: order.php:30
$order
Definition: order.php:55
__construct(ItemRequestInterfaceFactory $itemRequestFactory, InventoryRequestInterfaceFactory $inventoryRequestFactory, StockByWebsiteIdResolverInterface $stockByWebsiteIdResolver, GetSkuFromOrderItemInterface $getSkuFromOrderItem)