diff --git a/app/code/Magento/InventoryCatalog/Model/CanManageSourceItemsBySku.php b/app/code/Magento/InventoryCatalog/Model/CanManageSourceItemsBySku.php new file mode 100644 index 0000000000000..4ae1e1b64fcc8 --- /dev/null +++ b/app/code/Magento/InventoryCatalog/Model/CanManageSourceItemsBySku.php @@ -0,0 +1,74 @@ +config = $config; + $this->defaultStockProvider = $defaultStockProvider; + $this->getStockItemConfiguration = $getStockItemConfiguration; + } + + /** + * @param string $sku Sku can be null if product is new + * @return bool + */ + public function execute(string $sku = null): bool + { + if (null !== $sku) { + $stockId = $this->defaultStockProvider->getId(); + $itemConfiguration = $this->getStockItemConfiguration->execute($sku, $stockId); + + if (null !== $itemConfiguration) { + return $itemConfiguration->isUseConfigManageStock() + ? (bool)$this->config->getValue(Configuration::XML_PATH_MANAGE_STOCK) + : $itemConfiguration->isManageStock(); + } + } + return (bool)$this->config->getValue(Configuration::XML_PATH_MANAGE_STOCK); + } +} diff --git a/app/code/Magento/InventoryCatalog/Ui/DataProvider/Product/Form/Modifier/SourceItems.php b/app/code/Magento/InventoryCatalog/Ui/DataProvider/Product/Form/Modifier/SourceItems.php index bb8ab6c08eb89..cbb46dbebe326 100644 --- a/app/code/Magento/InventoryCatalog/Ui/DataProvider/Product/Form/Modifier/SourceItems.php +++ b/app/code/Magento/InventoryCatalog/Ui/DataProvider/Product/Form/Modifier/SourceItems.php @@ -7,14 +7,15 @@ namespace Magento\InventoryCatalog\Ui\DataProvider\Product\Form\Modifier; -use Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\AbstractModifier; use Magento\Catalog\Model\Locator\LocatorInterface; +use Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\AbstractModifier; use Magento\Framework\App\ResourceConnection; use Magento\Inventory\Model\ResourceModel\Source as SourceResourceModel; use Magento\Inventory\Model\ResourceModel\SourceItem\Collection; use Magento\Inventory\Model\ResourceModel\SourceItem\CollectionFactory; use Magento\InventoryApi\Api\Data\SourceInterface; use Magento\InventoryApi\Api\Data\SourceItemInterface; +use Magento\InventoryCatalog\Model\CanManageSourceItemsBySku; use Magento\InventoryCatalog\Model\IsSingleSourceModeInterface; use Magento\InventoryConfiguration\Model\IsSourceItemsAllowedForProductTypeInterface; @@ -48,25 +49,33 @@ class SourceItems extends AbstractModifier */ private $resourceConnection; + /** + * @var CanManageSourceItemsBySku + */ + private $canManageSourceItemsBySku; + /** * @param IsSourceItemsAllowedForProductTypeInterface $isSourceItemsAllowedForProductType * @param IsSingleSourceModeInterface $isSingleSourceMode * @param LocatorInterface $locator * @param CollectionFactory $sourceItemCollectionFactory * @param ResourceConnection $resourceConnection + * @param CanManageSourceItemsBySku $canManageSourceItemsBySku */ public function __construct( IsSourceItemsAllowedForProductTypeInterface $isSourceItemsAllowedForProductType, IsSingleSourceModeInterface $isSingleSourceMode, LocatorInterface $locator, CollectionFactory $sourceItemCollectionFactory, - ResourceConnection $resourceConnection + ResourceConnection $resourceConnection, + CanManageSourceItemsBySku $canManageSourceItemsBySku ) { $this->isSourceItemsAllowedForProductType = $isSourceItemsAllowedForProductType; $this->isSingleSourceMode = $isSingleSourceMode; $this->locator = $locator; $this->sourceItemCollectionFactory = $sourceItemCollectionFactory; $this->resourceConnection = $resourceConnection; + $this->canManageSourceItemsBySku = $canManageSourceItemsBySku; } /** @@ -128,6 +137,7 @@ public function modifyMeta(array $meta) return $meta; } + $canMangeSourceItems = $this->canManageSourceItemsBySku->execute($product->getSku()); $meta['sources'] = [ 'arguments' => [ 'data' => [ @@ -136,7 +146,32 @@ public function modifyMeta(array $meta) ], ], ], + 'children' => [ + 'assign_sources_container' => [ + 'children' => [ + 'assign_sources_button' => [ + 'arguments' => [ + 'data' => [ + 'config' => [ + 'visible' => $canMangeSourceItems, + ], + ], + ], + ], + ], + ], + 'assigned_sources' => [ + 'arguments' => [ + 'data' => [ + 'config' => [ + 'visible' => $canMangeSourceItems, + ], + ], + ], + ], + ], ]; + return $meta; } } diff --git a/app/code/Magento/InventoryCatalog/composer.json b/app/code/Magento/InventoryCatalog/composer.json index a499ecaec4dbc..77e0e96dd5fc3 100644 --- a/app/code/Magento/InventoryCatalog/composer.json +++ b/app/code/Magento/InventoryCatalog/composer.json @@ -8,6 +8,7 @@ "magento/module-catalog-inventory": "100.3.*", "magento/module-inventory": "100.0.*", "magento/module-inventory-api": "100.0.*", + "magento/module-inventory-configuration-api": "100.0.*", "magento/module-ui": "100.0.*", "magento/module-store": "100.3.*", "magento/module-inventory-configuration": "100.0.*", diff --git a/app/code/Magento/InventoryCatalog/view/adminhtml/ui_component/product_form.xml b/app/code/Magento/InventoryCatalog/view/adminhtml/ui_component/product_form.xml index caa85dab1a553..9742dcf76f8fb 100644 --- a/app/code/Magento/InventoryCatalog/view/adminhtml/ui_component/product_form.xml +++ b/app/code/Magento/InventoryCatalog/view/adminhtml/ui_component/product_form.xml @@ -6,7 +6,7 @@ */ -->