Exemplo n.º 1
0
 /**
  * Initialize item option
  *
  * @param \Magento\Sales\Model\Quote\Item\Option $option
  * @param \Magento\Sales\Model\Quote\Item $quoteItem
  * @param int $qty
  *
  * @return \Magento\Framework\Object
  * @throws \Magento\Framework\Model\Exception
  */
 public function initialize(\Magento\Sales\Model\Quote\Item\Option $option, \Magento\Sales\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 = $stockItem->checkQuoteItemQty($optionQty, $qtyForCheck, $optionValue);
     if (!is_null($result->getItemIsQtyDecimal())) {
         $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 (!is_null($result->getMessage())) {
         $option->setMessage($result->getMessage());
         $quoteItem->setMessage($result->getMessage());
     }
     if (!is_null($result->getItemBackorders())) {
         $option->setBackorders($result->getItemBackorders());
     }
     $stockItem->unsIsChildItem();
     return $result;
 }
Exemplo n.º 2
0
 /**
  * Implementation of product specify logic of which product needs to be assigned to option.
  * For example if product which was added to option already removed from catalog.
  *
  * @param \Magento\Catalog\Model\Product $optionProduct
  * @param \Magento\Sales\Model\Quote\Item\Option $option
  * @param \Magento\Catalog\Model\Product $product
  * @return $this
  */
 public function assignProductToOption($optionProduct, $option, $product)
 {
     if ($optionProduct) {
         $option->setProduct($optionProduct);
     } else {
         $option->setProduct($product);
     }
     return $this;
 }
Exemplo n.º 3
0
 /**
  * Register option code
  *
  * @param \Magento\Sales\Model\Quote\Item\Option $option
  * @return $this
  * @throws \Magento\Framework\Model\Exception
  */
 protected function _addOptionCode($option)
 {
     if (!isset($this->_optionsByCode[$option->getCode()])) {
         $this->_optionsByCode[$option->getCode()] = $option;
     } else {
         throw new \Magento\Framework\Model\Exception(__('An item option with code %1 already exists.', $option->getCode()));
     }
     return $this;
 }
Exemplo n.º 4
0
 /**
  * Implementation of product specify logic of which product needs to be assigned to option.
  * For example if product which was added to option already removed from catalog.
  *
  * @param  \Magento\Catalog\Model\Product|null $optionProduct
  * @param  \Magento\Sales\Model\Quote\Item\Option $option
  * @param  \Magento\Catalog\Model\Product|null $product
  * @return $this
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  */
 public function assignProductToOption($optionProduct, $option, $product)
 {
     if ($optionProduct) {
         $option->setProduct($optionProduct);
     } else {
         $option->getItem()->setHasConfigurationUnavailableError(true);
     }
     return $this;
 }