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

この方法で行う必要がある特別な理由がない限り、管理者の在庫管理を無効にすることができますか?

支払いが成功した後、数量に追加するオブザーバーを設定できます。フックできる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

場合によっては、次を使用できます。

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);
}
于 2018-06-22T12:32:38.980 に答える