我想对某些产品实施全局订单限制。重点是,我想对某些产品启用延期订单,并定义几个日期段,在这些日期段中,可以订购的单个产品数量是有限制的。
目前,我的自定义模型加载了所选日期段的相关信息,并在产品模型作为以下事件的$product->setMyModel(...)
加载时附加到产品模型:
catalog_product_load_after
catalog_product_collection_load_after
sales_quote_item_collection_products_after_load
使用特定产品的数据访问我的模型就像调用$product->getMyModel()
一样简单,因此我将其简称为我的模型。
这就是我想要做的:
1.每当产品被添加到购物车/报价单或下订单时,我都想做这样的事情(伪代码):
// Somehow get $product and $requestedQty (most likely from an event)
$myModel = $product->getMyModel();
if($myModel->applyOrderLimit()) {
// ($orderedQty + $requestedQty) <= $orderLimit
if($myModel->isRequestedQtyAvailable($requestedQty)) {
// Issue an error and prevent the item from being ordered
return;
}
// $orderedQty += $requestedQty
$myModel->addToQtyOrdered($requestedQty);
}
// Continue Magentos default behaviour
1.1.我怀疑Mage_CatalogInventory_Item::checkQuoteItemQty()
应该被覆盖以在此处捕获$requestedQty
。
2。每当订单被取消、退款或诸如此类时,更新$myModel::ordered_qty
。
我想真正的问题是我在哪里运行这个代码,还有什么比我所意识到的更能实现这样的订单限制和跟踪数量的吗?
对我来说,这似乎是一项相当复杂的任务。这就是为什么我需要更有经验的Magento开发人员的帮助!
注意:我不知道如何混合编号列表和代码块,但我希望它足够可读
您不必为了实现目标而重写Mage_CatalogInventory_Model_Stock_Item:.checkQty()
方法。
如果将事件观察器添加到事件sales_quote_item_qty_set_after
,则除了目录事件检查之外,还会触发观察器。
public function salesQuoteItemQtySetAfter(Varien_Event_Observer $observer)
{
$quoteItem = $observer->getItem();
$qty = $quoteItem->getQty();
$myModel = $quoteItem->getProduct()->getMyModel()
// Your Logic
// If not salable set error for the quote item
$quoteItem->addErrorInfo(
'mymodule', // origin code
'currently_not_salable', // error code
'The Error Message'
);
}
目录事件模块还使用sales_quote_item_qty_set_after
事件来调用checkQty()
,因此您还可以检查Mage_CatalogInventory_Model_Observer::checkQuoteItemQty()
,了解可用功能的其他可能性。