Example #1
0
 /**
  * Add only is in stock products filter to product collection
  *
  * @param \Magento\Catalog\Model\Resource\Product\Collection $collection
  * @return $this
  */
 public function addIsInStockFilterToCollection($collection)
 {
     $websiteId = $this->_storeManager->getStore($collection->getStoreId())->getWebsiteId();
     $joinCondition = $this->_getReadAdapter()->quoteInto('e.entity_id = stock_status_index.product_id' . ' AND stock_status_index.website_id = ?', $websiteId);
     $joinCondition .= $this->_getReadAdapter()->quoteInto(' AND stock_status_index.stock_id = ?', Stock::DEFAULT_STOCK_ID);
     $collection->getSelect()->join(array('stock_status_index' => $this->getMainTable()), $joinCondition, array())->where('stock_status_index.stock_status=?', Stock\Status::STATUS_IN_STOCK);
     return $this;
 }
Example #2
0
 /**
  * Add information about stock status to product collection
  *
  * @param   \Magento\Catalog\Model\Resource\Product\Collection $productCollection
  * @param   int|null $websiteId
  * @param   int|null $stockId
  * @return  $this
  */
 public function addStockStatusToProducts($productCollection, $websiteId = null, $stockId = null)
 {
     if ($stockId === null) {
         $stockId = Stock::DEFAULT_STOCK_ID;
     }
     if ($websiteId === null) {
         $websiteId = $this->_storeManager->getStore()->getWebsiteId();
         if ((int) $websiteId == 0 && $productCollection->getStoreId()) {
             $websiteId = $this->_storeManager->getStore($productCollection->getStoreId())->getWebsiteId();
         }
     }
     $productIds = array();
     foreach ($productCollection as $product) {
         $productIds[] = $product->getId();
     }
     if (!empty($productIds)) {
         $stockStatuses = $this->getProductStockStatus($productIds, $websiteId, $stockId);
         foreach ($stockStatuses as $productId => $status) {
             if ($product = $productCollection->getItemById($productId)) {
                 $product->setIsSalable($status);
             }
         }
     }
     return $this;
 }