/** * @param int $qty * @return int */ public function getQtyForCheck($qty) { if (!$this->item->getParentItem()) { $increaseQty = $this->item->getQtyToAdd() ? $this->item->getQtyToAdd() : $qty; return $this->quoteItemQtyList->getQty($this->item->getProduct()->getId(), $this->item->getId(), $this->item->getQuoteId(), $increaseQty); } return $this->quoteItemQtyList->getQty($this->item->getProduct()->getId(), $this->item->getId(), $this->item->getQuoteId(), 0); }
/** * Initialize stock item * * @param \Magento\CatalogInventory\Api\Data\StockItemInterface $stockItem * @param \Magento\Quote\Model\Quote\Item $quoteItem * @param int $qty * * @return \Magento\Framework\DataObject * @throws \Magento\Framework\Exception\LocalizedException * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ public function initialize(\Magento\CatalogInventory\Api\Data\StockItemInterface $stockItem, \Magento\Quote\Model\Quote\Item $quoteItem, $qty) { /** * When we work with subitem */ if ($quoteItem->getParentItem()) { $rowQty = $quoteItem->getParentItem()->getQty() * $qty; /** * we are using 0 because original qty was processed */ $qtyForCheck = $this->quoteItemQtyList->getQty($quoteItem->getProduct()->getId(), $quoteItem->getId(), $quoteItem->getQuoteId(), 0); } else { $increaseQty = $quoteItem->getQtyToAdd() ? $quoteItem->getQtyToAdd() : $qty; $rowQty = $qty; $qtyForCheck = $this->quoteItemQtyList->getQty($quoteItem->getProduct()->getId(), $quoteItem->getId(), $quoteItem->getQuoteId(), $increaseQty); } $productTypeCustomOption = $quoteItem->getProduct()->getCustomOption('product_type'); if ($productTypeCustomOption !== null) { // Check if product related to current item is a part of product that represents product set if ($this->typeConfig->isProductSet($productTypeCustomOption->getValue())) { $stockItem->setIsChildItem(true); } } $stockItem->setProductName($quoteItem->getProduct()->getName()); $result = $this->stockState->checkQuoteItemQty($quoteItem->getProduct()->getId(), $rowQty, $qtyForCheck, $qty, $quoteItem->getProduct()->getStore()->getWebsiteId()); if ($stockItem->hasIsChildItem()) { $stockItem->unsIsChildItem(); } if ($result->getItemIsQtyDecimal() !== null) { $quoteItem->setIsQtyDecimal($result->getItemIsQtyDecimal()); if ($quoteItem->getParentItem()) { $quoteItem->getParentItem()->setIsQtyDecimal($result->getItemIsQtyDecimal()); } } /** * Just base (parent) item qty can be changed * qty of child products are declared just during add process * exception for updating also managed by product type */ if ($result->getHasQtyOptionUpdate() && (!$quoteItem->getParentItem() || $quoteItem->getParentItem()->getProduct()->getTypeInstance()->getForceChildItemQtyChanges($quoteItem->getParentItem()->getProduct()))) { $quoteItem->setData('qty', $result->getOrigQty()); } if ($result->getItemUseOldQty() !== null) { $quoteItem->setUseOldQty($result->getItemUseOldQty()); } if ($result->getMessage() !== null) { $quoteItem->setMessage($result->getMessage()); } if ($result->getItemBackorders() !== null) { $quoteItem->setBackorders($result->getItemBackorders()); } return $result; }
/** * Adds item ID to giftOptionsCartItem configuration and name * * @param array $jsLayout * @param Item $item * @return array */ public function process($jsLayout, Item $item) { if (isset($jsLayout['components']['giftOptionsCartItem'])) { if (!isset($jsLayout['components']['giftOptionsCartItem']['config'])) { $jsLayout['components']['giftOptionsCartItem']['config'] = []; } $jsLayout['components']['giftOptionsCartItem']['config']['itemId'] = $item->getId(); $jsLayout['components']['giftOptionsCartItem-' . $item->getId()] = $jsLayout['components']['giftOptionsCartItem']; unset($jsLayout['components']['giftOptionsCartItem']); } return $jsLayout; }
/** * Initialize item option * * @param \Magento\Quote\Model\Quote\Item\Option $option * @param \Magento\Quote\Model\Quote\Item $quoteItem * @param int $qty * * @return \Magento\Framework\Object * @throws \Magento\Framework\Exception\LocalizedException */ public function initialize(\Magento\Quote\Model\Quote\Item\Option $option, \Magento\Quote\Model\Quote\Item $quoteItem, $qty) { $optionValue = $option->getValue(); $optionQty = $qty * $optionValue; $increaseOptionQty = ($quoteItem->getQtyToAdd() ? $quoteItem->getQtyToAdd() : $qty) * $optionValue; $qtyForCheck = $this->quoteItemQtyList->getQty($option->getProduct()->getId(), $quoteItem->getId(), $quoteItem->getQuoteId(), $increaseOptionQty); $stockItem = $this->getStockItem($option, $quoteItem); $result = $this->stockState->checkQuoteItemQty($option->getProduct()->getId(), $optionQty, $qtyForCheck, $optionValue, $option->getProduct()->getStore()->getWebsiteId()); if ($result->getItemIsQtyDecimal() !== null) { $option->setIsQtyDecimal($result->getItemIsQtyDecimal()); } if ($result->getHasQtyOptionUpdate()) { $option->setHasQtyOptionUpdate(true); $quoteItem->updateQtyOption($option, $result->getOrigQty()); $option->setValue($result->getOrigQty()); /** * if option's qty was updates we also need to update quote item qty */ $quoteItem->setData('qty', intval($qty)); } if ($result->getMessage() !== null) { $option->setMessage($result->getMessage()); $quoteItem->setMessage($result->getMessage()); } if ($result->getItemBackorders() !== null) { $option->setBackorders($result->getItemBackorders()); } $stockItem->unsIsChildItem(); return $result; }
/** * Set qty and custom price for quote item * * @param Item $item * @param \Magento\Framework\Object $request * @param Product $candidate * @return void */ public function prepare(Item $item, Object $request, Product $candidate) { /** * We specify qty after we know about parent (for stock) */ if ($request->getResetCount() && !$candidate->getStickWithinParent() && $item->getId() == $request->getId()) { $item->setData(CartItemInterface::KEY_QTY, 0); } $item->addQty($candidate->getCartQty()); $customPrice = $request->getCustomPrice(); if (!empty($customPrice)) { $item->setCustomPrice($customPrice); $item->setOriginalCustomPrice($customPrice); } }
/** * Return html button which calls configure window * * @param Item $item * @return string */ public function getConfigureButtonHtml($item) { $product = $item->getProduct(); $options = ['label' => __('Configure')]; if ($product->canConfigure()) { $options['onclick'] = sprintf('order.showQuoteItemConfiguration(%s)', $item->getId()); } else { $options['class'] = ' disabled'; $options['title'] = __('This product does not have any configurable options'); } return $this->getLayout()->createBlock('Magento\\Backend\\Block\\Widget\\Button')->setData($options)->toHtml(); }
/** * Adding new item to quote * * @param \Magento\Quote\Model\Quote\Item $item * @return $this * @throws \Magento\Framework\Exception\LocalizedException */ public function addItem(\Magento\Quote\Model\Quote\Item $item) { $item->setQuote($this); if (!$item->getId()) { $this->getItemsCollection()->addItem($item); $this->_eventManager->dispatch('sales_quote_add_item', ['quote_item' => $item]); } return $this; }
/** * Remove item * * @param Address $address * @param AddressItem|Item $item * @return $this */ protected function _removeItem($address, $item) { if ($item instanceof Item) { $address->removeItem($item->getId()); if ($address->getQuote()) { $address->getQuote()->removeItem($item->getId()); } } elseif ($item instanceof AddressItem) { $address->removeItem($item->getId()); if ($address->getQuote()) { $address->getQuote()->removeItem($item->getQuoteItemId()); } } return $this; }
/** * Set quote item * * @param \Magento\Quote\Model\Quote\Item $item * @return $this */ public function setItem($item) { $this->setItemId($item->getId()); $this->_item = $item; return $this; }
/** * Get post parameters for delete from cart * * @param \Magento\Quote\Model\Quote\Item $item * @return string */ public function getDeletePostJson($item) { $url = $this->_getUrl(self::DELETE_URL); $data = ['id' => $item->getId()]; if (!$this->_request->isAjax()) { $data[\Magento\Framework\App\Action\Action::PARAM_NAME_URL_ENCODED] = $this->getCurrentBase64Url(); } return json_encode(['action' => $url, 'data' => $data]); }