| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | 
							- <?php
 
- /**
 
-  * Copyright © Magento, Inc. All rights reserved.
 
-  * See COPYING.txt for license details.
 
-  */
 
- declare(strict_types=1);
 
- namespace Magento\InventoryCatalog\Model\ResourceModel;
 
- use Magento\Catalog\Model\ResourceModel\Product\Collection;
 
- use Magento\Framework\App\ObjectManager;
 
- use Magento\InventoryCatalogApi\Api\DefaultStockProviderInterface;
 
- use Magento\InventoryIndexer\Indexer\IndexStructure;
 
- use Magento\InventoryIndexer\Model\StockIndexTableNameResolverInterface;
 
- /**
 
-  * Add Stock data to collection
 
-  */
 
- class AddStockDataToCollection
 
- {
 
-     /**
 
-      * @var StockIndexTableNameResolverInterface
 
-      */
 
-     private $stockIndexTableNameResolver;
 
-     /**
 
-      * @var DefaultStockProviderInterface
 
-      */
 
-     private $defaultStockProvider;
 
-     /**
 
-      * @param StockIndexTableNameResolverInterface $stockIndexTableNameResolver
 
-      * @param DefaultStockProviderInterface $defaultStockProvider
 
-      */
 
-     public function __construct(
 
-         StockIndexTableNameResolverInterface $stockIndexTableNameResolver,
 
-         DefaultStockProviderInterface $defaultStockProvider = null
 
-     ) {
 
-         $this->stockIndexTableNameResolver = $stockIndexTableNameResolver;
 
-         $this->defaultStockProvider = $defaultStockProvider ?: ObjectManager::getInstance()
 
-             ->get(DefaultStockProviderInterface::class);
 
-     }
 
-     /**
 
-      * @param Collection $collection
 
-      * @param bool $isFilterInStock
 
-      * @param int $stockId
 
-      * @return void
 
-      */
 
-     public function execute(Collection $collection, bool $isFilterInStock, int $stockId)
 
-     {
 
-         if ($stockId === $this->defaultStockProvider->getId()) {
 
-             $isSalableColumnName = 'stock_status';
 
-             $resource = $collection->getResource();
 
-             $collection->getSelect()
 
-                 ->join(
 
-                     ['stock_status_index' => $resource->getTable('cataloginventory_stock_status')],
 
-                     sprintf('%s.entity_id = stock_status_index.product_id', Collection::MAIN_TABLE_ALIAS),
 
-                     [IndexStructure::IS_SALABLE => $isSalableColumnName]
 
-                 );
 
-         } else {
 
-             $stockIndexTableName = $this->stockIndexTableNameResolver->execute($stockId);
 
-             $resource = $collection->getResource();
 
-             $collection->getSelect()->join(
 
-                 ['product' => $resource->getTable('catalog_product_entity')],
 
-                 sprintf('product.entity_id = %s.entity_id', Collection::MAIN_TABLE_ALIAS),
 
-                 []
 
-             );
 
-             $isSalableColumnName = IndexStructure::IS_SALABLE;
 
-             $collection->getSelect()
 
-                 ->join(
 
-                     ['stock_status_index' => $stockIndexTableName],
 
-                     'product.sku = stock_status_index.' . IndexStructure::SKU,
 
-                     [$isSalableColumnName]
 
-                 );
 
-         }
 
-         if ($isFilterInStock) {
 
-             $collection->getSelect()
 
-                 ->where('stock_status_index.' . $isSalableColumnName . ' = ?', 1);
 
-         }
 
-     }
 
- }
 
 
  |