123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- declare(strict_types=1);
- namespace Magento\InventoryConfigurableProductIndexer\Indexer\SourceItem;
- use Magento\Framework\App\ResourceConnection;
- use Magento\InventoryMultiDimensionalIndexerApi\Model\Alias;
- use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexHandlerInterface;
- use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexNameBuilder;
- use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexStructureInterface;
- use Magento\InventoryCatalogApi\Api\DefaultStockProviderInterface;
- use Magento\InventoryIndexer\Indexer\InventoryIndexer;
- class SourceItemIndexer
- {
- /**
- * @var ResourceConnection
- */
- private $resourceConnection;
- /**
- * @var IndexNameBuilder
- */
- private $indexNameBuilder;
- /**
- * @var IndexHandlerInterface
- */
- private $indexHandler;
- /**
- * @var IndexDataBySkuListProvider
- */
- private $indexDataBySkuListProvider;
- /**
- * @var IndexStructureInterface
- */
- private $indexStructure;
- /**
- * @var SiblingSkuListInStockProvider
- */
- private $siblingSkuListInStockProvider;
- /**
- * @var DefaultStockProviderInterface
- */
- private $defaultStockProvider;
- /**
- * @param ResourceConnection $resourceConnection
- * @param IndexNameBuilder $indexNameBuilder
- * @param IndexHandlerInterface $indexHandler
- * @param IndexStructureInterface $indexStructure
- * @param IndexDataBySkuListProvider $indexDataBySkuListProvider
- * @param SiblingSkuListInStockProvider $siblingSkuListInStockProvider
- * @param DefaultStockProviderInterface $defaultStockProvider
- */
- public function __construct(
- ResourceConnection $resourceConnection,
- IndexNameBuilder $indexNameBuilder,
- IndexHandlerInterface $indexHandler,
- IndexStructureInterface $indexStructure,
- IndexDataBySkuListProvider $indexDataBySkuListProvider,
- SiblingSkuListInStockProvider $siblingSkuListInStockProvider,
- DefaultStockProviderInterface $defaultStockProvider
- ) {
- $this->resourceConnection = $resourceConnection;
- $this->indexNameBuilder = $indexNameBuilder;
- $this->indexHandler = $indexHandler;
- $this->indexDataBySkuListProvider = $indexDataBySkuListProvider;
- $this->indexStructure = $indexStructure;
- $this->siblingSkuListInStockProvider = $siblingSkuListInStockProvider;
- $this->defaultStockProvider = $defaultStockProvider;
- }
- /**
- * @param array $sourceItemIds
- */
- public function executeList(array $sourceItemIds)
- {
- $skuListInStockList = $this->siblingSkuListInStockProvider->execute($sourceItemIds);
- foreach ($skuListInStockList as $skuListInStock) {
- $stockId = $skuListInStock->getStockId();
- if ($this->defaultStockProvider->getId() === $stockId) {
- continue;
- }
- $skuList = $skuListInStock->getSkuList();
- $mainIndexName = $this->indexNameBuilder
- ->setIndexId(InventoryIndexer::INDEXER_ID)
- ->addDimension('stock_', (string)$stockId)
- ->setAlias(Alias::ALIAS_MAIN)
- ->build();
- if (!$this->indexStructure->isExist($mainIndexName, ResourceConnection::DEFAULT_CONNECTION)) {
- $this->indexStructure->create($mainIndexName, ResourceConnection::DEFAULT_CONNECTION);
- }
- $indexData = $this->indexDataBySkuListProvider->execute($stockId, $skuList);
- $this->indexHandler->cleanIndex(
- $mainIndexName,
- $indexData,
- ResourceConnection::DEFAULT_CONNECTION
- );
- $this->indexHandler->saveIndex(
- $mainIndexName,
- $indexData,
- ResourceConnection::DEFAULT_CONNECTION
- );
- }
- }
- }
|