我需要在下订单时停止减少库存,我需要在成功付款后进行此活动。
问问题
7460 次
5 回答
7
是的,我们可以务实地禁用此数量减少
如何 ?
扩展Mage_Checkout_Model_Type_Onepage并重写方法saveOrder
变化
在上述方法中的以下行之前,将在 #740 到 #742 左右
$service = Mage::getModel('sales/service_quote', $this->getQuote());
$service->submitAll();
添加
$quote = $this->getQuote();
# Ref: Mage_CatalogInventory_Model_Observer::subtractQuoteInventory
$quote->setInventoryProcessed(true);
这将通知 Magento 不为报价处理库存,因此即使配置为这样做也不会减少数量。
于 2012-09-20T06:41:11.483 回答
5
系统 > 配置 > 目录 > 库存 > 库存选项
下单时减少库存 > 否
于 2012-09-17T14:11:03.367 回答
1
对于任何想了解有关下订单减法的更多信息的人,只需在 Magento EE/CE 中研究此事件
sales_model_service_quote_submit_before
于 2015-03-24T15:32:30.360 回答
0
您可以在管理员中禁用库存管理,除非有特殊原因需要这样做?
您可以设置一个观察者在成功付款后添加到 Qty:您可以在此处查看您可以挂钩的 Magento 事件列表:http: //www.nicksays.co.uk/magento_events_cheat_sheet/
<events>
<sales_order_payment_pay>
<observers>
<my_observer>
<type>singleton</type>
<class>my/observer</class>
<method>addQty</method>
</my_observer>
</observers>
</sales_order_payment_pay>
</events>
然后你的观察者会重新添加数量..
<?php
class Company_My_Model_Observer
{
public function addQty($event)
{
$order = $event->getInvoice()->getOrder(); // Mage_Sales_Model_Order
$items = $order->getAllVisibleItems();
foreach($items as $item) {
$qty = $item->getQtyOrdered(); // Amount to add back on
$product = Mage::getModel('catalog/product')->load($item->getProductId());
/**
* Here you would load the product and add this amount back on
*/
}
return $this;
}
}
这可能不会按原样工作,但你明白了。您需要注意 magento 和支付类型事件,因为不同的支付模块处理这些事件的方式略有不同。
于 2012-09-17T14:21:08.520 回答
0
在某些情况下,您可以使用以下内容:
配置文件
<frontend>
<routers>
<sales_model_service_quote_submit_after>
<observers>
<inventory>
<type>singleton</type>
<class>Vendor_Name_Model_Observer</class>
<method>revertQuoteInventory</method>
</inventory>
</observers>
</sales_model_service_quote_submit_after>
</events>
</frontend>
观察者.php
public function revertQuoteInventory(Varien_Event_Observer $observer)
{
$quote = $observer->getEvent()->getQuote();
$inventory = Mage::getModel('cataloginventory/observer');
$inventory->revertQuoteInventory($observer);
$inventory->reindexQuoteInventory($observer);
$quote->setInventoryProcessed(true);
}
于 2018-06-22T12:32:38.980 回答