我想对某些产品实施全球订单限制。关键在于我想在某些产品上启用延期交货,并定义几个日期,这些日期对可订购的这些单个产品的数量有限制。
目前,我的自定义模型已加载所选日期的相关信息,并在这些事件加载为$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开发人员的帮助!
注意:我无法弄清楚如何混合编号列表和代码块,但我希望它足够可读
答案 0 :(得分:8)
您无需借助重写Mage_CatalogInventory_Model_Stock_Item:.checkQty()
方法来实现目标。
如果向事件sales_quote_item_qty_set_after
添加事件观察者,除了cataloginventory检查之外,还会触发您的观察者。
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'
);
}
cataloginventory模块还使用sales_quote_item_qty_set_after
事件来调用checkQty()
,因此您还可以检查Mage_CatalogInventory_Model_Observer::checkQuoteItemQty()
是否有可用功能的其他可能性。