![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/Ecombricks/InventoryInventorySales/Model/ReturnProcessor/ |
<?php /** * Copyright © eComBricks. All rights reserved. * See LICENSE.txt for license details. */ declare(strict_types=1); namespace Ecombricks\InventoryInventorySales\Model\ReturnProcessor; /** * Get invoiced items per source */ class GetInvoicedItemsPerSource implements \Magento\InventorySalesApi\Model\ReturnProcessor\GetSourceDeductedOrderItemsInterface { /** * Get SKU from order item * * @var \Magento\InventorySalesApi\Model\GetSkuFromOrderItemInterface */ protected $getSkuFromOrderItem; /** * Source deducted order item factory * * @var \Magento\InventorySalesApi\Model\ReturnProcessor\Result\SourceDeductedOrderItemFactory */ protected $sourceDeductedOrderItemFactory; /** * Source deducted order items result factory * * @var \Magento\InventorySalesApi\Model\ReturnProcessor\Result\SourceDeductedOrderItemsResultFactory */ protected $sourceDeductedOrderItemsResultFactory; /** * Constructor * * @param \Magento\InventorySalesApi\Model\GetSkuFromOrderItemInterface $getSkuFromOrderItem * @param \Magento\InventorySalesApi\Model\ReturnProcessor\Result\SourceDeductedOrderItemFactory $sourceDeductedOrderItemFactory * @param \Magento\InventorySalesApi\Model\ReturnProcessor\Result\SourceDeductedOrderItemsResultFactory $sourceDeductedOrderItemsResultFactory * @return void */ public function __construct( \Magento\InventorySalesApi\Model\GetSkuFromOrderItemInterface $getSkuFromOrderItem, \Magento\InventorySalesApi\Model\ReturnProcessor\Result\SourceDeductedOrderItemFactory $sourceDeductedOrderItemFactory, \Magento\InventorySalesApi\Model\ReturnProcessor\Result\SourceDeductedOrderItemsResultFactory $sourceDeductedOrderItemsResultFactory ) { $this->getSkuFromOrderItem = $getSkuFromOrderItem; $this->sourceDeductedOrderItemFactory = $sourceDeductedOrderItemFactory; $this->sourceDeductedOrderItemsResultFactory = $sourceDeductedOrderItemsResultFactory; } /** * Check if is valid item * * @param \Magento\Sales\Model\Order\Item $orderItem * @param array $returnToStockItems * @return bool */ protected function isValidItem(\Magento\Sales\Model\Order\Item $orderItem, array $returnToStockItems): bool { return ( in_array($orderItem->getId(), $returnToStockItems) || in_array($orderItem->getParentItemId(), $returnToStockItems) ) && $orderItem->getIsVirtual() && !$orderItem->isDummy(); } /** * Get source deducted order items results * * @param array $qtys * @return \Magento\InventorySalesApi\Model\ReturnProcessor\Result\SourceDeductedOrderItemsResult[] */ protected function getSourceDeductedOrderItemsResults(array $qtys): array { $results = []; foreach ($qtys as $sourceCode => $sourceQtys) { $items = []; foreach ($sourceQtys as $sku => $qty) { $items[] = $this->sourceDeductedOrderItemFactory->create([ 'sku' => $sku, 'quantity' => $qty, ]); } $results[] = $this->sourceDeductedOrderItemsResultFactory->create([ 'sourceCode' => $sourceCode, 'items' => $items, ]); } return $results; } /** * Execute * * @param \Magento\Sales\Api\Data\OrderInterface $order * @param array $returnToStockItems * @return \Magento\InventorySalesApi\Model\ReturnProcessor\Result\SourceDeductedOrderItemsResult[] */ public function execute(\Magento\Sales\Api\Data\OrderInterface $order, array $returnToStockItems): array { $qtys = []; foreach ($order->getInvoiceCollection() as $invoice) { foreach ($invoice->getItems() as $item) { $orderItem = $item->getOrderItem(); if ($this->isValidItem($orderItem, $returnToStockItems)) { $sourceCode = $orderItem->getSourceCode(); $sku = $this->getSkuFromOrderItem->execute($orderItem); $qtys[$sourceCode][$sku] = ($qtys[$sourceCode][$sku] ?? 0) + $item->getQty(); } } } return $this->getSourceDeductedOrderItemsResults($qtys); } }