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
deleted file mode 100644
index 22d4e5077d7..00000000000
--- a/vendor/magento/module-inventory-bundle-import-export/Plugin/Import/Product/UpdateBundleProductsStockItemStatusPlugin.php
+++ /dev/null
@@ -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 2e96e75240c..b35e3e61025 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 00000000000..ea4b5154622
--- /dev/null
+++ b/vendor/magento/module-inventory-bundle-product/Model/StockStatusProcessor.php
@@ -0,0 +1,39 @@
+changeParentStockStatus = $changeParentStockStatus;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function execute(array $productIds): void
+ {
+ $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 622c345aecd..e8bdbaaa618 100644
--- a/vendor/magento/module-inventory-bundle-product/etc/di.xml
+++ b/vendor/magento/module-inventory-bundle-product/etc/di.xml
@@ -6,6 +6,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 00000000000..673984bb109
--- /dev/null
+++ b/vendor/magento/module-inventory-catalog/Plugin/Inventory/UpdateCompositeProductStockStatusOnDecrementSourceItemQty.php
@@ -0,0 +1,79 @@
+getProductIdsBySkus = $getProductIdsBySkus;
+ $this->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()) {
+ $productIds = [];
+ $sourceItems = array_column($sourceItemDecrementData, 'source_item');
+ foreach ($sourceItems as $sourceItem) {
+ $sku = $sourceItem->getSku();
+ try {
+ $productIds[] = (int)$this->getProductIdsBySkus->execute([$sku])[$sku];
+ } catch (NoSuchEntityException $e) {
+ continue;
+ }
+ }
+ if ($productIds) {
+ $this->compositeProductStockStatusProcessor->execute($productIds);
+ }
+ }
+ }
+}
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 00000000000..c79f501795e
--- /dev/null
+++ b/vendor/magento/module-inventory-catalog/Plugin/InventoryApi/UpdateCompositeProductStockStatusOnSourceItemsSave.php
@@ -0,0 +1,78 @@
+getProductIdsBySkus = $getProductIdsBySkus;
+ $this->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()) {
+ $productIds = [];
+ foreach ($sourceItems as $sourceItem) {
+ $sku = $sourceItem->getSku();
+ try {
+ $productIds[] = (int)$this->getProductIdsBySkus->execute([$sku])[$sku];
+ } catch (NoSuchEntityException $e) {
+ continue;
+ }
+ }
+ if ($productIds) {
+ $this->compositeProductStockStatusProcessor->execute($productIds);
+ }
+ }
+ }
+}
diff --git a/vendor/magento/module-inventory-catalog/etc/di.xml b/vendor/magento/module-inventory-catalog/etc/di.xml
index 29bb39faa6f..541ac9f6e11 100644
--- a/vendor/magento/module-inventory-catalog/etc/di.xml
+++ b/vendor/magento/module-inventory-catalog/etc/di.xml
@@ -21,10 +21,14 @@
+
+
@@ -94,6 +98,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 00000000000..44bc9feaf09
--- /dev/null
+++ b/vendor/magento/module-inventory-catalog-api/Model/CompositeProductStockStatusProcessorInterface.php
@@ -0,0 +1,22 @@
+compositeProductStockStatusProcessors = $compositeProductStockStatusProcessors;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function execute(array $productIds): void
+ {
+ foreach ($this->compositeProductStockStatusProcessors as $compositeProductStockStatusProcessor) {
+ $compositeProductStockStatusProcessor->execute($productIds);
+ }
+ }
+}
diff --git a/vendor/magento/module-inventory-catalog-api/etc/di.xml b/vendor/magento/module-inventory-catalog-api/etc/di.xml
index 60beb25a0d9..f3666356bb7 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 00000000000..f9b14c80929
--- /dev/null
+++ b/vendor/magento/module-inventory-configurable-product/Model/StockStatusProcessor.php
@@ -0,0 +1,39 @@
+changeParentStockStatus = $changeParentStockStatus;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function execute(array $productIds): void
+ {
+ $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 cfe1b00afbc..38d3cfca04c 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
+
+
changeParentStockStatus = $changeParentStockStatus;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function execute(array $productIds): void
+ {
+ foreach ($productIds as $productId) {
+ $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
deleted file mode 100644
index a8381d474a2..00000000000
--- a/vendor/magento/module-inventory-grouped-product/Plugin/InventoryCatalog/Model/UpdateParentStockStatusPlugin.php
+++ /dev/null
@@ -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 7375b46ff18..cecb0ac36e5 100644
--- a/vendor/magento/module-inventory-grouped-product/etc/di.xml
+++ b/vendor/magento/module-inventory-grouped-product/etc/di.xml
@@ -10,7 +10,11 @@
-
-
+
+
+
+ - Magento\InventoryGroupedProduct\Model\StockStatusProcessor
+
+
diff --git a/vendor/magento/module-inventory-import-export/Plugin/Import/UpdateConfigurableProductsPlugin.php b/vendor/magento/module-inventory-import-export/Plugin/Import/UpdateConfigurableProductsPlugin.php
deleted file mode 100644
index ca1f54066ab..00000000000
--- a/vendor/magento/module-inventory-import-export/Plugin/Import/UpdateConfigurableProductsPlugin.php
+++ /dev/null
@@ -1,56 +0,0 @@
-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 5d0db315768..c7b505e1dad 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 @@
-
+