![]() 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/ |
<?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)); } }