protected function _addQuoteItemError(Mage_Sales_Model_Quote_Item $item, $itemError, $quoteError, $errorIndex = 'error') { $item->setHasError(true); $item->setMessage($itemError); $item->setQuoteMessage($quoteError); $item->setQuoteMessageIndex($errorIndex); return $this; }
/** * Check Quote item qty. If qty is not enougth for order, error flag and message added to $quote item * * @param Mage_Sales_Model_Quote_Item $quoteItem */ protected function checkQuoteItemQty($quoteItem) { $qty = $quoteItem->getQty(); if (($options = $quoteItem->getQtyOptions()) && $qty > 0) { $qty = $quoteItem->getProduct()->getTypeInstance(true)->prepareQuoteItemQty($qty, $quoteItem->getProduct()); $quoteItem->setData('qty', $qty); foreach ($options as $option) { $optionQty = $qty * $option->getValue(); $increaseOptionQty = ($quoteItem->getQtyToAdd() ? $quoteItem->getQtyToAdd() : $qty) * $option->getValue(); $stockItem = $option->getProduct()->getStockItem(); /* @var $stockItem Mage_CatalogInventory_Model_Stock_Item */ if (!$stockItem instanceof Mage_CatalogInventory_Model_Stock_Item) { $quoteItem->setHasError(true)->setMessage('Stock item for Product in option is not valid'); return; } $result = $stockItem->checkQuoteItemQty($optionQty, $optionQty, $option->getValue()); if ($result->getHasError()) { $quoteItem->setHasError(true)->setMessage($result->getQuoteMessage()); } } } else { $stockItem = $quoteItem->getProduct()->getStockItem(); /* @var $stockItem Mage_CatalogInventory_Model_Stock_Item */ if (!$stockItem instanceof Mage_CatalogInventory_Model_Stock_Item) { Mage::throwException(Mage::helper('cataloginventory')->__('Stock item for Product is not valid')); } /** * When we work with subitem (as subproduct of bundle or configurable product) */ if ($quoteItem->getParentItem()) { $rowQty = $quoteItem->getParentItem()->getQty() * $qty; /** * we are using 0 because original qty was processed */ $qtyForCheck = 0; } else { $increaseQty = $quoteItem->getQtyToAdd() ? $quoteItem->getQtyToAdd() : $qty; $rowQty = $qty; $qtyForCheck = $qty; } $result = $stockItem->checkQuoteItemQty($rowQty, $qtyForCheck, $qty); if ($result->getHasError()) { $quoteItem->setHasError(true)->setMessage($result->getQuoteMessage()); } } }