/** * @param \Magento\Quote\Model\Quote $quote * @param \Magento\Catalog\Model\Product $product * @param \Magento\Framework\DataObject $config * @return \Magento\Quote\Model\Quote\Item|string */ public function init(\Magento\Quote\Model\Quote $quote, \Magento\Catalog\Model\Product $product, \Magento\Framework\DataObject $config) { $stockItem = $this->stockRegistry->getStockItem($product->getId(), $quote->getStore()->getWebsiteId()); if ($stockItem->getIsQtyDecimal()) { $product->setIsQtyDecimal(1); } else { $config->setQty((int) $config->getQty()); } $product->setCartQty($config->getQty()); $item = $quote->addProduct($product, $config, \Magento\Catalog\Model\Product\Type\AbstractType::PROCESS_MODE_FULL); return $item; }
/** * Get request for product add to cart procedure * * @param \Magento\Framework\DataObject|int|array $requestInfo * @return \Magento\Framework\DataObject */ protected function _getProductRequest($requestInfo) { if ($requestInfo instanceof \Magento\Framework\DataObject) { $request = $requestInfo; } elseif (is_numeric($requestInfo)) { $request = new \Magento\Framework\DataObject(['qty' => $requestInfo]); } else { $request = new \Magento\Framework\DataObject($requestInfo); } if (!$request->hasQty()) { $request->setQty(1); } !$request->hasFormKey() ?: $request->unsFormKey(); return $request; }
/** * Convert order item to quote item * * @param \Magento\Sales\Model\Order\Item $orderItem * @param true|null $qtyFlag if is null set product qty like in order * @return $this */ public function addOrderItem($orderItem, $qtyFlag = null) { /* @var $orderItem \Magento\Sales\Model\Order\Item */ if ($orderItem->getParentItem() === null) { $storeId = $this->_storeManager->getStore()->getId(); try { /** * We need to reload product in this place, because products * with the same id may have different sets of order attributes. */ $product = $this->productRepository->getById($orderItem->getProductId(), false, $storeId, true); } catch (NoSuchEntityException $e) { return $this; } $info = $orderItem->getProductOptionByCode('info_buyRequest'); $info = new \Magento\Framework\DataObject($info); if ($qtyFlag === null) { $info->setQty($orderItem->getQtyOrdered()); } else { $info->setQty(1); } $this->addProduct($product, $info); } return $this; }