diff --git a/vendor/magento/module-inventory-indexer/Plugin/InventoryApi/ReindexAfterSourceItemsSavePlugin.php b/vendor/magento/module-inventory-indexer/Plugin/InventoryApi/ReindexAfterSourceItemsSavePlugin.php index 50be65d661e..b1796f6a1cb 100644 --- a/vendor/magento/module-inventory-indexer/Plugin/InventoryApi/ReindexAfterSourceItemsSavePlugin.php +++ b/vendor/magento/module-inventory-indexer/Plugin/InventoryApi/ReindexAfterSourceItemsSavePlugin.php @@ -7,14 +7,13 @@ declare(strict_types=1); namespace Magento\InventoryIndexer\Plugin\InventoryApi; +use Magento\Framework\Exception\LocalizedException; use Magento\InventoryApi\Api\Data\SourceItemInterface; use Magento\InventoryApi\Api\SourceItemsSaveInterface; +use Magento\InventoryCatalogApi\Api\DefaultSourceProviderInterface; use Magento\InventoryIndexer\Indexer\SourceItem\GetSourceItemIds; use Magento\InventoryIndexer\Indexer\SourceItem\SourceItemIndexer; -/** - * Reindex after source items save plugin - */ class ReindexAfterSourceItemsSavePlugin { /** @@ -27,21 +26,34 @@ class ReindexAfterSourceItemsSavePlugin */ private $sourceItemIndexer; + /** + * @var DefaultSourceProviderInterface + */ + private $defaultSourceProvider; + /** * @param GetSourceItemIds $getSourceItemIds * @param SourceItemIndexer $sourceItemIndexer + * @param DefaultSourceProviderInterface $defaultSourceProvider */ - public function __construct(GetSourceItemIds $getSourceItemIds, SourceItemIndexer $sourceItemIndexer) - { + public function __construct( + GetSourceItemIds $getSourceItemIds, + SourceItemIndexer $sourceItemIndexer, + DefaultSourceProviderInterface $defaultSourceProvider + ) { $this->getSourceItemIds = $getSourceItemIds; $this->sourceItemIndexer = $sourceItemIndexer; + $this->defaultSourceProvider = $defaultSourceProvider; } /** + * Run reindex process for saved source items + * * @param SourceItemsSaveInterface $subject * @param void $result * @param SourceItemInterface[] $sourceItems * @return void + * @throws LocalizedException * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function afterExecute( @@ -49,9 +61,28 @@ class ReindexAfterSourceItemsSavePlugin $result, array $sourceItems ) { + $sourceItems = $this->sanitizeSources($sourceItems); $sourceItemIds = $this->getSourceItemIds->execute($sourceItems); if (count($sourceItemIds)) { $this->sourceItemIndexer->executeList($sourceItemIds); } } + + /** + * Remove items with default source + * + * @param array $sourceItems + * @return array + */ + private function sanitizeSources(array $sourceItems) : array + { + $result = []; + $defaultCode = $this->defaultSourceProvider->getCode(); + foreach ($sourceItems as $item) { + if ($item->getSourceCode() !== $defaultCode) { + $result[] = $item; + } + } + return $result; + } }