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/InventoryInventoryShipping/Plugin/Observer/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/Ecombricks/InventoryInventoryShipping/Plugin/Observer/SourceDeductionProcessor.php
<?php
/**
 * Copyright © eComBricks. All rights reserved.
 * See COPYING.txt for license details.
 */
declare(strict_types=1);

namespace Ecombricks\InventoryInventoryShipping\Plugin\Observer;

/**
 * Source deduction processor observer plugin
 */
class SourceDeductionProcessor
{
    
    /**
     * Is single source mode
     * 
     * @var \Magento\InventoryCatalogApi\Model\IsSingleSourceModeInterface
     */
    protected $isSingleSourceMode;

    /**
     * Default source provider
     * 
     * @var \Magento\InventoryCatalogApi\Api\DefaultSourceProviderInterface
     */
    protected $defaultSourceProvider;

    /**
     * Get items to deduct from shipment
     * 
     * @var \Magento\InventoryShipping\Model\GetItemsToDeductFromShipment
     */
    protected $getItemsToDeductFromShipment;

    /**
     * Source deduction request from shipment factory
     * 
     * @var \Magento\InventoryShipping\Model\SourceDeductionRequestFromShipmentFactory
     */
    protected $sourceDeductionRequestFromShipmentFactory;

    /**
     * Source deduction service
     * 
     * @var \Magento\InventorySourceDeductionApi\Model\SourceDeductionServiceInterface
     */
    protected $sourceDeductionService;

    /**
     * Items to sell factory
     * 
     * @var \Magento\InventorySalesApi\Api\Data\ItemToSellInterfaceFactory
     */
    protected $itemsToSellFactory;
    
    /**
     * Place reservations for sales event
     * 
     * @var \Magento\InventorySalesApi\Api\PlaceReservationsForSalesEventInterface
     */
    protected $placeReservationsForSalesEvent;
    
    /**
     * Constructor
     * 
     * @param \Magento\InventoryCatalogApi\Model\IsSingleSourceModeInterface $isSingleSourceMode
     * @param \Magento\InventoryCatalogApi\Api\DefaultSourceProviderInterface $defaultSourceProvider
     * @param \Magento\InventoryShipping\Model\GetItemsToDeductFromShipment $getItemsToDeductFromShipment
     * @param \Magento\InventoryShipping\Model\SourceDeductionRequestFromShipmentFactory $sourceDeductionRequestFromShipmentFactory
     * @param \Magento\InventorySourceDeductionApi\Model\SourceDeductionServiceInterface $sourceDeductionService
     * @param \Magento\InventorySalesApi\Api\Data\ItemToSellInterfaceFactory $itemsToSellFactory
     * @param \Magento\InventorySalesApi\Api\PlaceReservationsForSalesEventInterface $placeReservationsForSalesEvent
     * @return void
     */
    public function __construct(
        \Magento\InventoryCatalogApi\Model\IsSingleSourceModeInterface $isSingleSourceMode,
        \Magento\InventoryCatalogApi\Api\DefaultSourceProviderInterface $defaultSourceProvider,
        \Magento\InventoryShipping\Model\GetItemsToDeductFromShipment $getItemsToDeductFromShipment,
        \Magento\InventoryShipping\Model\SourceDeductionRequestFromShipmentFactory $sourceDeductionRequestFromShipmentFactory,
        \Magento\InventorySourceDeductionApi\Model\SourceDeductionServiceInterface $sourceDeductionService,
        \Magento\InventorySalesApi\Api\Data\ItemToSellInterfaceFactory $itemsToSellFactory,
        \Magento\InventorySalesApi\Api\PlaceReservationsForSalesEventInterface $placeReservationsForSalesEvent
    )
    {
        $this->isSingleSourceMode = $isSingleSourceMode;
        $this->defaultSourceProvider = $defaultSourceProvider;
        $this->getItemsToDeductFromShipment = $getItemsToDeductFromShipment;
        $this->sourceDeductionRequestFromShipmentFactory = $sourceDeductionRequestFromShipmentFactory;
        $this->sourceDeductionService = $sourceDeductionService;
        $this->itemsToSellFactory = $itemsToSellFactory;
        $this->placeReservationsForSalesEvent = $placeReservationsForSalesEvent;
    }
    
    /**
     * Place compensating reservation
     * 
     * @param \Magento\InventorySourceDeductionApi\Model\SourceDeductionRequestInterface $sourceDeductionRequest
     * @return void
     */
    protected function placeCompensatingReservation(\Magento\InventorySourceDeductionApi\Model\SourceDeductionRequestInterface $sourceDeductionRequest): void
    {
        $itemsToSell = [];
        $sourceCode = $sourceDeductionRequest->getSourceCode();
        foreach ($sourceDeductionRequest->getItems() as $item) {
            $itemToSell = $this->itemsToSellFactory->create(['sku' => $item->getSku(), 'qty' => $item->getQty()]);
            $itemToSell->getExtensionAttributes()->setSourceCode($sourceCode);
            $itemsToSell[] = $itemToSell;
        }
        $this->placeReservationsForSalesEvent->execute(
            $itemsToSell,
            $sourceDeductionRequest->getSalesChannel(),
            $sourceDeductionRequest->getSalesEvent()
        );
    }
    
    /**
     * Execute
     * 
     * @param \Magento\Framework\Event\Observer $observer
     * @return void
     */
    protected function execute(\Magento\Framework\Event\Observer $observer)
    {
        $shipment = $observer->getEvent()->getShipment();
        if ($shipment->getOrigData('entity_id')) {
            return;
        }
        if (!empty($shipment->getExtensionAttributes()) && !empty($shipment->getExtensionAttributes()->getSourceCode())) {
            $sourceCode = $shipment->getExtensionAttributes()->getSourceCode();
        } elseif ($this->isSingleSourceMode->execute()) {
            $sourceCode = $this->defaultSourceProvider->getCode();
        }
        $shipmentItems = $this->getItemsToDeductFromShipment->execute($shipment);
        if (!empty($shipmentItems)) {
            $sourceDeductionRequest = $this->sourceDeductionRequestFromShipmentFactory->execute($shipment, $sourceCode, $shipmentItems);
            $this->sourceDeductionService->execute($sourceDeductionRequest);
            $this->placeCompensatingReservation($sourceDeductionRequest);
        }
    }
    
    /**
     * Around execute
     * 
     * @param \Magento\InventoryShipping\Observer\SourceDeductionProcessor $subject
     * @param \Closure $proceed
     * @param \Magento\Framework\Event\Observer $observer
     * @return void
     */
    public function aroundExecute(
        \Magento\InventoryShipping\Observer\SourceDeductionProcessor $subject,
        \Closure $proceed,
        \Magento\Framework\Event\Observer $observer
    )
    {
        return $this->execute($observer);
    }
    
}

Spamworldpro Mini