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/old/app/code/Ecombricks/InventoryCommon/Plugin/Api/SourceItem/Option/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/app/code/Ecombricks/InventoryCommon/Plugin/Api/SourceItem/Option/SaveInterface.php
<?php
/**
 * Copyright © eComBricks. All rights reserved.
 * See LICENSE.txt for license details.
 */
declare(strict_types=1);

namespace Ecombricks\InventoryCommon\Plugin\Api\SourceItem\Option;

/**
 * Save source item options interface plugin
 */
class SaveInterface
{
    /**
     * Connection provider
     * 
     * @var \Ecombricks\Common\Model\ResourceModel\ConnectionProvider
     */
    private $connectionProvider;
    
    /**
     * Source item option configuration
     * 
     * @var \Ecombricks\InventoryCommon\Model\SourceItem\Option\Config
     */
    private $optionConfig;
    
    /**
     * Source item option meta
     * 
     * @var \Ecombricks\InventoryCommon\Model\SourceItem\Option\Meta
     */
    private $optionMeta;
    
    /**
     * Default source provider
     * 
     * @var \Magento\InventoryCatalogApi\Api\DefaultSourceProviderInterface
     */
    private $defaultSourceProvider;
    
    /**
     * Default stock provider
     * 
     * @var \Magento\InventoryCatalogApi\Api\DefaultStockProviderInterface
     */
    private $defaultStockProvider;
    
    /**
     * Is single source mode
     * 
     * @var \Magento\InventoryCatalogApi\Model\IsSingleSourceModeInterface 
     */
    private $isSingleSourceMode;
    
    /**
     * Get product IDs by SKUs
     * 
     * @var \Magento\InventoryCatalogApi\Model\GetProductIdsBySkusInterface
     */
    private $getProductIdsBySkus;

    /**
     * Constructor
     * 
     * @param \Ecombricks\Common\Model\ResourceModel\ConnectionProvider $connectionProvider
     * @param \Ecombricks\InventoryCommon\Model\SourceItem\Option\Config $optionConfig
     * @param \Ecombricks\InventoryCommon\Model\SourceItem\Option\Meta $optionMeta
     * @param \Magento\InventoryCatalogApi\Api\DefaultSourceProviderInterface $defaultSourceProvider
     * @param \Magento\InventoryCatalogApi\Api\DefaultStockProviderInterface $defaultStockProvider
     * @param \Magento\InventoryCatalogApi\Model\IsSingleSourceModeInterface $isSingleSourceMode
     * @param \Magento\InventoryCatalogApi\Model\GetProductIdsBySkusInterface $getProductIdsBySkus
     * @return void
     */
    public function __construct(
        \Ecombricks\Common\Model\ResourceModel\ConnectionProvider $connectionProvider,
        \Ecombricks\InventoryCommon\Model\SourceItem\Option\Config $optionConfig,
        \Ecombricks\InventoryCommon\Model\SourceItem\Option\Meta $optionMeta,
        \Magento\InventoryCatalogApi\Api\DefaultSourceProviderInterface $defaultSourceProvider,
        \Magento\InventoryCatalogApi\Api\DefaultStockProviderInterface $defaultStockProvider,
        \Magento\InventoryCatalogApi\Model\IsSingleSourceModeInterface $isSingleSourceMode,
        \Magento\InventoryCatalogApi\Model\GetProductIdsBySkusInterface $getProductIdsBySkus
    )
    {
        $this->connectionProvider = $connectionProvider;
        $this->optionConfig = $optionConfig;
        $this->optionMeta = $optionMeta;
        $this->defaultSourceProvider = $defaultSourceProvider;
        $this->defaultStockProvider = $defaultStockProvider;
        $this->isSingleSourceMode = $isSingleSourceMode;
        $this->getProductIdsBySkus = $getProductIdsBySkus;
    }
    
    /**
     * After execute
     * 
     * @param \Ecombricks\InventoryCommon\Api\SourceItem\Option\SaveInterface $subject
     * @param $result
     * @param \Ecombricks\InventoryCommon\Api\Data\SourceItemOptionInterface[] $options
     * @return \Ecombricks\InventoryCommon\Api\SourceItem\Option\SaveInterface
     */
    public function afterExecute(
        \Ecombricks\InventoryCommon\Api\SourceItem\Option\SaveInterface $subject,
        $result,
        array $options
    ): \Ecombricks\InventoryCommon\Api\SourceItem\Option\SaveInterface
    {
        if (!$this->optionConfig->isEnabled() || $this->isSingleSourceMode->execute()) {
            return $result;
        }
        $stockItemsData = [];
        $optionName = $this->optionMeta->getName();
        foreach ($options as $option) {
            if ($option->getSourceCode() !== $this->defaultSourceProvider->getCode()) {
                continue;
            }
            $optionValue = $option->getValue();
            $stockItemsData[$option->getSku()] = [
                \Magento\CatalogInventory\Api\Data\StockItemInterface::STOCK_ID => $this->defaultStockProvider->getId(),
                'use_config_'.$optionName => $optionValue !== null ? 0 : 1,
                $optionName => $optionValue ?? 0,
            ];
        }
        if (empty($stockItemsData)) {
            return $result;
        }
        $productIds = $this->getProductIdsBySkus->execute(array_keys($stockItemsData));
        foreach ($stockItemsData as $sku => &$stockItemData) {
            if (!empty($productIds[$sku])) {
                $stockItemData[\Magento\CatalogInventory\Api\Data\StockItemInterface::PRODUCT_ID] = $productIds[$sku];
            } else {
                unset($stockItemsData[$sku]);
            }
        }
        $this->connectionProvider->getConnection()->insertOnDuplicate(
            $this->connectionProvider->getTable('cataloginventory_stock_item'),
            $stockItemsData
        );
        return $result;
    }
}

Spamworldpro Mini