![]() 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/Plugin/Model/Product/ |
<?php /** * Copyright © eComBricks. All rights reserved. * See COPYING.txt for license details. */ namespace Ecombricks\InventoryInventoryCatalog\Plugin\Model\Product; /** * Product source item option model plugin */ class SourceItemOption { /** * Store manager * * @var \Magento\Store\Model\StoreManagerInterface */ protected $storeManager; /** * Is source item management allowed for product type * * @var \Magento\InventoryConfigurationApi\Model\IsSourceItemManagementAllowedForProductTypeInterface */ protected $isSourceItemManagementAllowedForProductType; /** * Source management * * @var \Ecombricks\Inventory\Model\SourceManagement */ protected $sourceManagement; /** * Get source item options * * @var \Ecombricks\InventoryInventoryCatalog\Model\SourceItemOption\Get */ protected $getSourceItemOptions; /** * Surce item option value data key * * @var \Ecombricks\InventoryInventoryCatalog\Model\SourceItemOption\ValueDataKey */ protected $sourceItemOptionValueDataKey; /** * Source item option config * * @var \Ecombricks\InventoryInventoryCatalog\Model\SourceItemOption\Config */ protected $sourceItemOptionConfig; /** * Constructor * * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\InventoryConfigurationApi\Model\IsSourceItemManagementAllowedForProductTypeInterface $isSourceItemManagementAllowedForProductType * @param \Ecombricks\Inventory\Model\SourceManagement $sourceManagement * @param \Ecombricks\InventoryInventoryCatalog\Model\SourceItemOption\Get $getSourceItemOptions * @param \Ecombricks\InventoryInventoryCatalog\Model\SourceItemOption\ValueDataKey $sourceItemOptionValueDataKey * @param \Ecombricks\InventoryInventoryCatalog\Model\SourceItemOption\Config $sourceItemOptionConfig * @return void */ public function __construct( \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\InventoryConfigurationApi\Model\IsSourceItemManagementAllowedForProductTypeInterface $isSourceItemManagementAllowedForProductType, \Ecombricks\Inventory\Model\SourceManagement $sourceManagement, \Ecombricks\InventoryInventoryCatalog\Model\SourceItemOption\Get $getSourceItemOptions, \Ecombricks\InventoryInventoryCatalog\Model\SourceItemOption\ValueDataKey $sourceItemOptionValueDataKey, \Ecombricks\InventoryInventoryCatalog\Model\SourceItemOption\Config $sourceItemOptionConfig ) { $this->storeManager = $storeManager; $this->isSourceItemManagementAllowedForProductType = $isSourceItemManagementAllowedForProductType; $this->sourceManagement = $sourceManagement; $this->getSourceItemOptions = $getSourceItemOptions; $this->sourceItemOptionValueDataKey = $sourceItemOptionValueDataKey; $this->sourceItemOptionConfig = $sourceItemOptionConfig; } /** * Check if is source item management allowed * * @param \Magento\Catalog\Model\Product $product * @return bool */ protected function isSourceItemManagementAllowed(\Magento\Catalog\Model\Product $product) { if ( $product->getId() === null || !$this->sourceItemOptionConfig->isEnabled() || $this->isSourceItemManagementAllowedForProductType->execute($product->getTypeId()) === false ) { return false; } else { return true; } } /** * Get source item options * * @param \Magento\Catalog\Api\Data\ProductInterface $product * @return array */ protected function getSourceItemOptions(\Magento\Catalog\Api\Data\ProductInterface $product): array { $sourceItemOptionsKey = 'source_'.$this->sourceItemOptionValueDataKey->getKey().'_object'; $sourceItemOptions = $product->getData($sourceItemOptionsKey); if ($sourceItemOptions !== null) { return $sourceItemOptions; } $sku = $product->getData(\Magento\Catalog\Api\Data\ProductInterface::SKU); $sourceCodes = $this->sourceManagement->getCurrentSourceCodes($this->storeManager->getStore($product->getStoreId())); $product->setData($sourceItemOptionsKey, $this->getSourceItemOptions->execute([$sku], $sourceCodes)[$sku] ?? []); return $product->getData($sourceItemOptionsKey); } /** * Get source item option * * @param \Magento\Catalog\Api\Data\ProductInterface $product * @return \Ecombricks\InventoryInventoryCatalog\Api\Data\SourceItemOptionInterface|null */ protected function getSourceItemOption(\Magento\Catalog\Api\Data\ProductInterface $product): ?\Ecombricks\InventoryInventoryCatalog\Api\Data\SourceItemOptionInterface { $sourceCode = $product->getExtensionAttributes()->getSourceCode(); if (empty($sourceCode)) { return null; } $sourceItemOptions = $this->getSourceItemOptions($product); return $sourceItemOptions[$sourceCode] ?? null; } /** * Get source item option value * * @param \Magento\Catalog\Api\Data\ProductInterface $product * @param float $defaultValue * @return float */ protected function getSourceItemOptionValue(\Magento\Catalog\Api\Data\ProductInterface $product, $defaultValue) { if (!$this->isSourceItemManagementAllowed($product)) { return $defaultValue; } $sourceItemOption = $this->getSourceItemOption($product); if ($sourceItemOption !== null && $sourceItemOption->getValue() !== null) { return $sourceItemOption->getValue(); } return $defaultValue; } /** * Around get data * * @param \Magento\Catalog\Model\Product $subject * @param callable $proceed * @param string $key * @param string|int $index * @return mixed */ public function aroundGetData( \Magento\Catalog\Model\Product $subject, \Closure $proceed, $key = '', $index = null ) { $value = $proceed($key, $index); if ($key !== $this->sourceItemOptionValueDataKey->getKey()) { return $value; } return $this->getSourceItemOptionValue($subject, $value); } }