Magento-实现基于自定义标准的订单限制


Magento - Implementing order limits based on custom criterias

我想对某些产品实施全局订单限制。重点是,我想对某些产品启用延期订单,并定义几个日期段,在这些日期段中,可以订购的单个产品数量是有限制的。

目前,我的自定义模型加载了所选日期段的相关信息,并在产品模型作为以下事件的$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(),了解可用功能的其他可能性。