在以magento下订单时以编程方式停止减少库存数量

时间:2012-09-17 13:44:09

标签: magento

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

5 个答案:

答案 0 :(得分: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不要处理报价的库存,因此即使配置了这样也不会减少数量。

答案 1 :(得分:5)

系统&gt;配置&gt;目录&gt;库存&gt;股票期权

订购时减少库存&gt;否

答案 2 :(得分:1)

对于想要在下订单中找到有关减法的更多信息的人,只需要在Magento EE / CE中学习此事件

sales_model_service_quote_submit_before

答案 3 :(得分:0)

您可以在管理员中禁用库存管理,除非您有这样的特殊原因需要这样做吗?

您可以设置观察者在成功付款后添加到数量: 您可以在此处查看可以挂钩的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和支付类型事件,因为不同的支付模块可以稍微不同地处理这些事件。

答案 4 :(得分:0)

在某些情况下,您可以使用以下内容:

config.xml

<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>

Observer.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);
}