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/InventoryInventoryCatalog/Model/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/Ecombricks/InventoryInventoryCatalog/Model/ProductManagement.php
<?php
/**
 * Copyright © eComBricks. All rights reserved.
 * See LICENSE.txt for license details.
 */
declare(strict_types=1);

namespace Ecombricks\InventoryInventoryCatalog\Model;

/**
 * Product management
 */
class ProductManagement
{
    
    /**
     * Get SKUs by product IDs
     * 
     * @var \Magento\InventoryCatalogApi\Model\GetSkusByProductIdsInterface
     */
    protected $getSkusByProductIds;
    
    /**
     * Get product types by SKUs
     * 
     * @var \Magento\InventoryCatalogApi\Model\GetProductTypesBySkusInterface
     */
    protected $getProductTypesBySkus;
    
    /**
     * Is source item management allowed for product type
     * 
     * @var \Magento\InventoryConfigurationApi\Model\IsSourceItemManagementAllowedForProductTypeInterface
     */
    protected $isSourceItemManagementAllowedForProductType;
    
    /**
     * SKUs
     * 
     * @var array
     */
    protected $skus = [];
    
    /**
     * Product types
     * 
     * @var array
     */
    protected $productTypes = [];
    
    /**
     * Constructor
     * 
     * @param \Magento\InventoryCatalogApi\Model\GetSkusByProductIdsInterface $getSkusByProductIds
     * @param \Magento\InventoryCatalogApi\Model\GetProductTypesBySkusInterface $getProductTypesBySkus
     * @param \Magento\InventoryConfigurationApi\Model\IsSourceItemManagementAllowedForProductTypeInterface $isSourceItemManagementAllowedForProductType
     * @return void
     */
    public function __construct(
        \Magento\InventoryCatalogApi\Model\GetSkusByProductIdsInterface $getSkusByProductIds,
        \Magento\InventoryCatalogApi\Model\GetProductTypesBySkusInterface $getProductTypesBySkus,
        \Magento\InventoryConfigurationApi\Model\IsSourceItemManagementAllowedForProductTypeInterface $isSourceItemManagementAllowedForProductType
    )
    {
        $this->getSkusByProductIds = $getSkusByProductIds;
        $this->getProductTypesBySkus = $getProductTypesBySkus;
        $this->isSourceItemManagementAllowedForProductType = $isSourceItemManagementAllowedForProductType;
    }
    
    /**
     * Get SKU
     * 
     * @param int $productId
     * @return string
     * @throws \Magento\Framework\Exception\NoSuchEntityException
     */
    public function getSku(int $productId): string
    {
        if (array_key_exists($productId, $this->skus)) {
            return $this->skus[$productId];
        }
        $this->skus[$productId] = $this->getSkusByProductIds->execute([$productId])[$productId];
        return $this->skus[$productId];
    }
    
    /**
     * Set SKU
     * 
     * @param int $productId
     * @param string $sku
     * @return $this
     */
    public function setSku(int $productId, string $sku): self
    {
        $this->skus[$productId] = $sku;
        return $this;
    }
    
    /**
     * Get SKUs
     * 
     * @param array $productIds
     * @return array
     */
    public function getSkus(array $productIds): array
    {
        $skus = [];
        $productIdsToResolve = [];
        foreach ($productIds as $productId) {
            if (array_key_exists($productId, $this->skus)) {
                $skus[$productId] = $this->skus[$productId];
            } else {
                $productIdsToResolve[] = $productId;
            }
        }
        foreach ($this->getSkusByProductIds->execute($productIdsToResolve) as $productId => $sku) {
            $this->skus[$productId] = $sku;
            $skus[$productId] = $this->skus[$productId];
        }
        return $skus;
    }
    
    /**
     * Get product type
     * 
     * @param int $productId
     * @return string
     */
    public function getProductType(int $productId): string
    {
        if (array_key_exists($productId, $this->productTypes)) {
            return $this->productTypes[$productId];
        }
        $sku = $this->getSku($productId);
        $this->productTypes[$productId] = $this->getProductTypesBySkus->execute([$sku])[$sku];
        return $this->productTypes[$productId];
    }
    
    /**
     * Get product types
     * 
     * @param array $productIds
     * @return array
     */
    public function getProductTypes(array $productIds): array
    {
        $productTypes = [];
        $productIdsToResolve = [];
        foreach ($productIds as $productId) {
            if (array_key_exists($productId, $this->productTypes)) {
                $productTypes[$productId] = $this->productTypes[$productId];
            } else {
                $productIdsToResolve[$this->getSku($productId)] = $productId;
            }
        }
        foreach ($this->getProductTypesBySkus->execute(array_keys($productIdsToResolve)) as $sku => $productType) {
            $productId = $productIdsToResolve[$sku];
            $this->productTypes[$productId] = $productType;
            $productTypes[$productId] = $this->productTypes[$productId];
        }
        return $productTypes;
    }
    
    /**
     * Is source item management allowed by product type
     * 
     * @param string $productType
     * @return bool
     */
    public function isSourceItemManagementAllowedByProductType(string $productType): bool
    {
        return $this->isSourceItemManagementAllowedForProductType->execute($productType);
    }
    
    /**
     * Is source item management allowed
     * 
     * @param int $productId
     * @return bool
     */
    public function isSourceItemManagementAllowed(int $productId): bool
    {
        return $this->isSourceItemManagementAllowedByProductType($this->getProductType($productId));
    }
    
}

Spamworldpro Mini