Example #1
0
 /**
  * Add product to shopping cart (quote)
  *
  * @param int|Product $productInfo
  * @param \Magento\Framework\Object|int|array $requestInfo
  * @return $this
  * @throws \Magento\Framework\Exception\LocalizedException
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  */
 public function addProduct($productInfo, $requestInfo = null)
 {
     $product = $this->_getProduct($productInfo);
     $request = $this->_getProductRequest($requestInfo);
     $productId = $product->getId();
     if ($productId) {
         $stockItem = $this->stockRegistry->getStockItem($productId, $product->getStore()->getWebsiteId());
         $minimumQty = $stockItem->getMinSaleQty();
         //If product was not found in cart and there is set minimal qty for it
         if ($minimumQty && $minimumQty > 0 && $request->getQty() < $minimumQty && !$this->getQuote()->hasProductId($productId)) {
             $request->setQty($minimumQty);
         }
     }
     if ($productId) {
         try {
             $result = $this->getQuote()->addProduct($product, $request);
         } catch (\Magento\Framework\Exception\LocalizedException $e) {
             $this->_checkoutSession->setUseNotice(false);
             $result = $e->getMessage();
         }
         /**
          * String we can get if prepare process has error
          */
         if (is_string($result)) {
             if ($product->hasOptionsValidationFail()) {
                 $redirectUrl = $product->getUrlModel()->getUrl($product, ['_query' => ['startcustomization' => 1]]);
             } else {
                 $redirectUrl = $product->getProductUrl();
             }
             $this->_checkoutSession->setRedirectUrl($redirectUrl);
             if ($this->_checkoutSession->getUseNotice() === null) {
                 $this->_checkoutSession->setUseNotice(true);
             }
             throw new \Magento\Framework\Exception\LocalizedException(__($result));
         }
     } else {
         throw new \Magento\Framework\Exception\LocalizedException(__('The product does not exist.'));
     }
     $this->_eventManager->dispatch('checkout_cart_product_add_after', ['quote_item' => $result, 'product' => $product]);
     $this->_checkoutSession->setLastAddedProductId($productId);
     return $this;
 }