diff --git a/vendor/magento/module-inventory-bundle-import-export/Plugin/Import/Product/UpdateBundleProductsStockItemStatusPlugin.php b/vendor/magento/module-inventory-bundle-import-export/Plugin/Import/Product/UpdateBundleProductsStockItemStatusPlugin.php index 22d4e5077d74..e69de29bb2d1 100644 --- a/vendor/magento/module-inventory-bundle-import-export/Plugin/Import/Product/UpdateBundleProductsStockItemStatusPlugin.php +++ b/vendor/magento/module-inventory-bundle-import-export/Plugin/Import/Product/UpdateBundleProductsStockItemStatusPlugin.php @@ -1,58 +0,0 @@ -changeParentStockStatus = $changeParentStockStatus; - $this->isSingleSourceMode = $isSingleSourceMode; - } - - /** - * Allow automatic parent stock update in single source mode only - * - * @param StockItemImporterInterface $subject - * @param mixed $result - * @param array $stockData - * @SuppressWarnings(PHPMD.UnusedFormalParameter) - */ - public function afterImport( - StockItemImporterInterface $subject, - $result, - array $stockData - ): void { - if ($stockData && $this->isSingleSourceMode->execute()) { - $this->changeParentStockStatus->execute(array_column($stockData, 'product_id')); - } - } -} diff --git a/vendor/magento/module-inventory-bundle-import-export/etc/di.xml b/vendor/magento/module-inventory-bundle-import-export/etc/di.xml index 2e96e75240cf..b35e3e61025c 100644 --- a/vendor/magento/module-inventory-bundle-import-export/etc/di.xml +++ b/vendor/magento/module-inventory-bundle-import-export/etc/di.xml @@ -11,8 +11,5 @@ - diff --git a/vendor/magento/module-inventory-bundle-product/Model/StockStatusProcessor.php b/vendor/magento/module-inventory-bundle-product/Model/StockStatusProcessor.php new file mode 100644 index 000000000000..802772eece91 --- /dev/null +++ b/vendor/magento/module-inventory-bundle-product/Model/StockStatusProcessor.php @@ -0,0 +1,57 @@ +changeParentStockStatus = $changeParentStockStatus; + $this->getProductIdsBySkus = $getProductIdsBySkus; + } + + /** + * @inheritDoc + */ + public function execute(array $skus): void + { + $productIds = []; + foreach ($skus as $sku) { + try { + $productIds[] = (int)$this->getProductIdsBySkus->execute([$sku])[$sku]; + } catch (NoSuchEntityException $e) { + continue; + } + } + $this->changeParentStockStatus->execute($productIds); + } +} diff --git a/vendor/magento/module-inventory-bundle-product/etc/di.xml b/vendor/magento/module-inventory-bundle-product/etc/di.xml index 126e580a5981..75f75e761a5f 100644 --- a/vendor/magento/module-inventory-bundle-product/etc/di.xml +++ b/vendor/magento/module-inventory-bundle-product/etc/di.xml @@ -29,6 +29,13 @@ + + + + Magento\InventoryBundleProduct\Model\StockStatusProcessor + + + diff --git a/vendor/magento/module-inventory-catalog/Plugin/Inventory/UpdateCompositeProductStockStatusOnDecrementSourceItemQty.php b/vendor/magento/module-inventory-catalog/Plugin/Inventory/UpdateCompositeProductStockStatusOnDecrementSourceItemQty.php new file mode 100644 index 000000000000..991ac15ce87c --- /dev/null +++ b/vendor/magento/module-inventory-catalog/Plugin/Inventory/UpdateCompositeProductStockStatusOnDecrementSourceItemQty.php @@ -0,0 +1,64 @@ +isSingleSourceMode = $isSingleSourceMode; + $this->compositeProductStockStatusProcessor = $compositeProductStockStatusProcessor; + } + + /** + * Update parent products stock status after decrementing quantity of children stock + * + * @param DecrementSourceItemQty $subject + * @param void $result + * @param SourceItemInterface[] $sourceItemDecrementData + * @return void + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function afterExecute(DecrementSourceItemQty $subject, $result, array $sourceItemDecrementData): void + { + if ($this->isSingleSourceMode->execute()) { + $sourceItems = array_column($sourceItemDecrementData, 'source_item'); + $skus = []; + foreach ($sourceItems as $sourceItem) { + $skus[] = $sourceItem->getSku(); + } + if ($skus) { + $this->compositeProductStockStatusProcessor->execute($skus); + } + } + } +} diff --git a/vendor/magento/module-inventory-catalog/Plugin/InventoryApi/UpdateCompositeProductStockStatusOnSourceItemsSave.php b/vendor/magento/module-inventory-catalog/Plugin/InventoryApi/UpdateCompositeProductStockStatusOnSourceItemsSave.php new file mode 100644 index 000000000000..b6c4bd90cdf5 --- /dev/null +++ b/vendor/magento/module-inventory-catalog/Plugin/InventoryApi/UpdateCompositeProductStockStatusOnSourceItemsSave.php @@ -0,0 +1,63 @@ +isSingleSourceMode = $isSingleSourceMode; + $this->compositeProductStockStatusProcessor = $compositeProductStockStatusProcessor; + } + + /** + * Update parent products stock status on children products source items update + * + * @param SourceItemsSaveInterface $subject + * @param void $result + * @param SourceItemInterface[] $sourceItems + * @return void + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function afterExecute(SourceItemsSaveInterface $subject, $result, array $sourceItems): void + { + if ($this->isSingleSourceMode->execute()) { + $skus = []; + foreach ($sourceItems as $sourceItem) { + $skus[] = $sourceItem->getSku(); + } + if ($skus) { + $this->compositeProductStockStatusProcessor->execute($skus); + } + } + } +} diff --git a/vendor/magento/module-inventory-catalog/etc/di.xml b/vendor/magento/module-inventory-catalog/etc/di.xml index dca453877852..63da3ffa1e61 100644 --- a/vendor/magento/module-inventory-catalog/etc/di.xml +++ b/vendor/magento/module-inventory-catalog/etc/di.xml @@ -22,10 +22,14 @@ + + @@ -95,6 +99,7 @@ + diff --git a/vendor/magento/module-inventory-catalog-api/Model/CompositeProductStockStatusProcessorInterface.php b/vendor/magento/module-inventory-catalog-api/Model/CompositeProductStockStatusProcessorInterface.php new file mode 100644 index 000000000000..56a2345f67bf --- /dev/null +++ b/vendor/magento/module-inventory-catalog-api/Model/CompositeProductStockStatusProcessorInterface.php @@ -0,0 +1,22 @@ +compositeProductStockStatusProcessors = $compositeProductStockStatusProcessors; + } + + /** + * @inheritdoc + */ + public function execute(array $skus): void + { + foreach ($this->compositeProductStockStatusProcessors as $compositeProductStockStatusProcessor) { + $compositeProductStockStatusProcessor->execute($skus); + } + } +} diff --git a/vendor/magento/module-inventory-catalog-api/etc/di.xml b/vendor/magento/module-inventory-catalog-api/etc/di.xml index 60beb25a0d9d..f3666356bb7b 100644 --- a/vendor/magento/module-inventory-catalog-api/etc/di.xml +++ b/vendor/magento/module-inventory-catalog-api/etc/di.xml @@ -15,4 +15,6 @@ type="Magento\InventoryCatalogApi\Model\BulkInventoryTransferValidatorChain" /> - \ No newline at end of file + + diff --git a/vendor/magento/module-inventory-configurable-product/Model/StockStatusProcessor.php b/vendor/magento/module-inventory-configurable-product/Model/StockStatusProcessor.php new file mode 100644 index 000000000000..913b5babcc25 --- /dev/null +++ b/vendor/magento/module-inventory-configurable-product/Model/StockStatusProcessor.php @@ -0,0 +1,57 @@ +getProductIdsBySkus = $getProductIdsBySkus; + $this->changeParentStockStatus = $changeParentStockStatus; + } + + /** + * @inheritDoc + */ + public function execute(array $skus): void + { + $productIds = []; + foreach ($skus as $sku) { + try { + $productIds[] = (int)$this->getProductIdsBySkus->execute([$sku])[$sku]; + } catch (NoSuchEntityException $e) { + continue; + } + } + $this->changeParentStockStatus->execute($productIds); + } +} diff --git a/vendor/magento/module-inventory-configurable-product/etc/di.xml b/vendor/magento/module-inventory-configurable-product/etc/di.xml index a0fddf9b7178..cdaf8d5f849e 100644 --- a/vendor/magento/module-inventory-configurable-product/etc/di.xml +++ b/vendor/magento/module-inventory-configurable-product/etc/di.xml @@ -36,9 +36,12 @@ - - + + + + Magento\InventoryConfigurableProduct\Model\StockStatusProcessor + + getProductIdsBySkus = $getProductIdsBySkus; + $this->changeParentStockStatus = $changeParentStockStatus; + } + + /** + * @inheritDoc + */ + public function execute(array $skus): void + { + foreach ($skus as $sku) { + try { + $productId = (int)$this->getProductIdsBySkus->execute([$sku])[$sku]; + } catch (NoSuchEntityException $e) { + continue; + } + $this->changeParentStockStatus->execute($productId); + } + } +} diff --git a/vendor/magento/module-inventory-grouped-product/Plugin/InventoryCatalog/Model/UpdateParentStockStatusPlugin.php b/vendor/magento/module-inventory-grouped-product/Plugin/InventoryCatalog/Model/UpdateParentStockStatusPlugin.php index a8381d474a2f..e69de29bb2d1 100644 --- a/vendor/magento/module-inventory-grouped-product/Plugin/InventoryCatalog/Model/UpdateParentStockStatusPlugin.php +++ b/vendor/magento/module-inventory-grouped-product/Plugin/InventoryCatalog/Model/UpdateParentStockStatusPlugin.php @@ -1,79 +0,0 @@ -messageManager = $messageManager; - $this->changeParentStockStatus = $changeParentStockStatus; - $this->getProductIdsBySkus = $getProductIdsBySkus; - } - - /** - * After execute plugin - * - * @param UpdateInventory $subject - * @param mixed $result - * @param InventoryData $data - * @SuppressWarnings(PHPMD.UnusedFormalParameter) - */ - public function afterExecute(UpdateInventory $subject, $result, InventoryData $data) - { - $skus = $data->getSkus(); - try { - $productIds = $this->getProductIdsBySkus->execute($skus); - } catch (NoSuchEntityException $e) { - $productIds = []; - } - try { - foreach ($productIds as $productId) { - $this->changeParentStockStatus->execute((int)$productId); - } - } catch (\Exception $e) { - $this->messageManager->addExceptionMessage( - $e, - __('Something went wrong while updating the product(s) stock status.') - ); - } - } -} diff --git a/vendor/magento/module-inventory-grouped-product/etc/di.xml b/vendor/magento/module-inventory-grouped-product/etc/di.xml index 222095ef3758..5f01c3b8d9dc 100644 --- a/vendor/magento/module-inventory-grouped-product/etc/di.xml +++ b/vendor/magento/module-inventory-grouped-product/etc/di.xml @@ -10,8 +10,12 @@ - - + + + + Magento\InventoryGroupedProduct\Model\StockStatusProcessor + + changeParentStockStatus = $changeParentStockStatus; - $this->isSingleSourceMode = $isSingleSourceMode; - } - - /** - * Update configurable products stock item status based on children products stock status after import - * - * @param StockItemImporterInterface $subject - * @param void $result - * @param array $stockData - * @return void - * @SuppressWarnings(PHPMD.UnusedFormalParameter) - */ - public function afterImport( - StockItemImporterInterface $subject, - $result, - array $stockData - ): void { - if ($stockData && $this->isSingleSourceMode->execute()) { - $this->changeParentStockStatus->execute(array_column($stockData, 'product_id')); - } - } -} diff --git a/vendor/magento/module-inventory-import-export/etc/di.xml b/vendor/magento/module-inventory-import-export/etc/di.xml index 5d0db3157688..c7b505e1dade 100644 --- a/vendor/magento/module-inventory-import-export/etc/di.xml +++ b/vendor/magento/module-inventory-import-export/etc/di.xml @@ -27,9 +27,9 @@ - +