5

我需要在下订单时停止减少库存,我需要在成功付款后进行此活动。

4

5 回答 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 回答