diff --git a/vendor/magento/module-inventory-configurable-product/Plugin/InventoryApi/UpdateConfigurableProductParentStockStatus.php b/vendor/magento/module-inventory-configurable-product/Plugin/InventoryApi/UpdateConfigurableProductParentStockStatus.php new file mode 100644 index 00000000000..f00507d738d --- /dev/null +++ b/vendor/magento/module-inventory-configurable-product/Plugin/InventoryApi/UpdateConfigurableProductParentStockStatus.php @@ -0,0 +1,89 @@ +getProductIdsBySkus = $getProductIdsBySkus; + $this->changeParentStockStatus = $changeParentStockStatus; + $this->isSingleSourceMode = $isSingleSourceMode; + $this->storeManager = $storeManager; + } + + /** + * Make configurable product out of stock if all its children out of stock + * + * @param SourceItemsSaveInterface $subject + * @param void $result + * @param SourceItemInterface[] $sourceItems + * @return void + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function afterExecute(SourceItemsSaveInterface $subject, $result, array $sourceItems): void + { + $productIds = []; + if ($this->isSingleSourceMode->execute() && $this->storeManager->hasSingleStore()) { + foreach ($sourceItems as $sourceItem) { + $sku = $sourceItem->getSku(); + try { + $productIds[] = (int)$this->getProductIdsBySkus->execute([$sku])[$sku]; + } catch (NoSuchEntityException $e) { + $productIds = []; + } + } + if ($productIds) { + $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 9e1ad098529..229ed236053 100644 --- a/vendor/magento/module-inventory-configurable-product/etc/di.xml +++ b/vendor/magento/module-inventory-configurable-product/etc/di.xml @@ -36,4 +36,8 @@ + + +