Spamworldpro Mini Shell
Spamworldpro


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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/Ecombricks/InventoryInventorySales/Model/ReturnProcessor/GetInvoicedItemsPerSource.php
<?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);
    }    

}

Spamworldpro Mini