/** * Check qty increments * * @param int|float $qty * @param Mage_CatalogInventory_Model_Stock_Item $stockItem * * @return Varien_Object */ public function checkQtyIncrements($stockItem, $qty) { $result = new Varien_Object(); $qtyIncrements = $stockItem->getQtyIncrements(); if ($qtyIncrements && Mage::helper('core')->getExactDivision($qty, $qtyIncrements) != 0) { $result->setHasError(true)->setQuoteMessage(Mage::helper('cataloginventory')->__('Some of the products cannot be ordered in the requested quantity.'))->setErrorCode('qty_increments')->setQuoteMessageIndex('qty'); $result->setMessage(Mage::helper('cataloginventory')->__('This product is available for purchase in increments of %s only.', $qtyIncrements * 1)); } return $result; }
/** * @param Mage_CatalogInventory_Model_Stock_Item $stockItem * * @return float|int */ protected function _getStackPriceMultiplicator($stockItem) { $priceMultiplier = 1; if ($stockItem->getEnableQtyIncrements()) { $stackQuantity = ceil($stockItem->getQtyIncrements()); if ($stackQuantity > 1) { $priceMultiplier = $stackQuantity; } } return $priceMultiplier; }
/** * Checks whether requested quantity is allowed taking into account that some amount already added to quote. * Returns TRUE if everything is okay * Returns array in below format on error: * [ * 'status' => string (see Enterprise_Checkout_Helper_Data::ADD_ITEM_STATUS_FAILED_* constants), * 'qty_max_allowed' => int (optional, if 'status'==ADD_ITEM_STATUS_FAILED_QTY_ALLOWED) * ] * * @param Mage_CatalogInventory_Model_Stock_Item $stockItem * @param Mage_Catalog_Model_Product $product * @param float $requestedQty * @return array|true */ public function getQtyStatus(Mage_CatalogInventory_Model_Stock_Item $stockItem, Mage_Catalog_Model_Product $product, $requestedQty) { $result = $stockItem->checkQuoteItemQty($requestedQty, $requestedQty); if ($result->getHasError()) { $return = array(); switch ($result->getErrorCode()) { case 'qty_increments': $status = Enterprise_Checkout_Helper_Data::ADD_ITEM_STATUS_FAILED_QTY_INCREMENTS; $return['qty_increments'] = $stockItem->getQtyIncrements(); break; case 'qty_min': $status = Enterprise_Checkout_Helper_Data::ADD_ITEM_STATUS_FAILED_QTY_ALLOWED_IN_CART; $return['qty_min_allowed'] = $stockItem->getMinSaleQty(); break; case 'qty_max': $status = Enterprise_Checkout_Helper_Data::ADD_ITEM_STATUS_FAILED_QTY_ALLOWED_IN_CART; $return['qty_max_allowed'] = $stockItem->getMaxSaleQty(); break; default: $status = Enterprise_Checkout_Helper_Data::ADD_ITEM_STATUS_FAILED_QTY_ALLOWED; $return['qty_max_allowed'] = $stockItem->getStockQty(); } $return['status'] = $status; $return['error'] = $result->getMessage(); return $return; } return true; }