| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 | 
							- <?php
 
- /**
 
-  * Copyright © Magento, Inc. All rights reserved.
 
-  * See COPYING.txt for license details.
 
-  */
 
- declare(strict_types=1);
 
- namespace Magento\InventoryGroupedProductIndexer\Indexer;
 
- use Exception;
 
- use Magento\Catalog\Api\Data\ProductInterface;
 
- use Magento\Framework\App\ResourceConnection;
 
- use Magento\Framework\DB\Select;
 
- use Magento\Framework\EntityManager\MetadataPool;
 
- use Magento\GroupedProduct\Model\ResourceModel\Product\Link;
 
- use Magento\InventoryIndexer\Indexer\IndexStructure;
 
- use Magento\InventoryIndexer\Indexer\InventoryIndexer;
 
- use Magento\InventoryMultiDimensionalIndexerApi\Model\Alias;
 
- use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexNameBuilder;
 
- use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexNameResolverInterface;
 
- class SelectBuilder
 
- {
 
-     /**
 
-      * @var ResourceConnection
 
-      */
 
-     private $resourceConnection;
 
-     /**
 
-      * @var IndexNameBuilder
 
-      */
 
-     private $indexNameBuilder;
 
-     /**
 
-      * @var IndexNameResolverInterface
 
-      */
 
-     private $indexNameResolver;
 
-     /**
 
-      * @var MetadataPool
 
-      */
 
-     private $metadataPool;
 
-     /**
 
-      * @param ResourceConnection $resourceConnection
 
-      * @param IndexNameBuilder $indexNameBuilder
 
-      * @param IndexNameResolverInterface $indexNameResolver
 
-      * @param MetadataPool $metadataPool
 
-      */
 
-     public function __construct(
 
-         ResourceConnection $resourceConnection,
 
-         IndexNameBuilder $indexNameBuilder,
 
-         IndexNameResolverInterface $indexNameResolver,
 
-         MetadataPool $metadataPool
 
-     ) {
 
-         $this->resourceConnection = $resourceConnection;
 
-         $this->indexNameBuilder = $indexNameBuilder;
 
-         $this->indexNameResolver = $indexNameResolver;
 
-         $this->metadataPool = $metadataPool;
 
-     }
 
-     /**
 
-      * Prepare select.
 
-      *
 
-      * @param int $stockId
 
-      * @return Select
 
-      * @throws Exception
 
-      */
 
-     public function execute(int $stockId): Select
 
-     {
 
-         $connection = $this->resourceConnection->getConnection();
 
-         $indexName = $this->indexNameBuilder
 
-             ->setIndexId(InventoryIndexer::INDEXER_ID)
 
-             ->addDimension('stock_', (string)$stockId)
 
-             ->setAlias(Alias::ALIAS_MAIN)
 
-             ->build();
 
-         $indexTableName = $this->indexNameResolver->resolveName($indexName);
 
-         $metadata = $this->metadataPool->getMetadata(ProductInterface::class);
 
-         $linkField = $metadata->getLinkField();
 
-         $select = $connection->select()
 
-             ->from(
 
-                 ['stock' => $indexTableName],
 
-                 [
 
-                     IndexStructure::SKU => 'parent_product_entity.sku',
 
-                     IndexStructure::QUANTITY => 'SUM(stock.quantity)',
 
-                     IndexStructure::IS_SALABLE => 'MAX(stock.is_salable)',
 
-                 ]
 
-             )->joinInner(
 
-                 ['product_entity' => $this->resourceConnection->getTableName('catalog_product_entity')],
 
-                 'product_entity.sku = stock.sku',
 
-                 []
 
-             )->joinInner(
 
-                 ['parent_link' => $this->resourceConnection->getTableName('catalog_product_link')],
 
-                 'parent_link.linked_product_id = product_entity.entity_id 
 
-                 AND parent_link.link_type_id = ' . Link::LINK_TYPE_GROUPED,
 
-                 []
 
-             )->joinInner(
 
-                 ['parent_product_entity' => $this->resourceConnection->getTableName('catalog_product_entity')],
 
-                 'parent_product_entity.' . $linkField . ' = parent_link.product_id',
 
-                 []
 
-             )
 
-             ->group(['parent_product_entity.sku']);
 
-         return $select;
 
-     }
 
- }
 
 
  |