5

コードの特定の時点で注文ステータスを手動で変更して完了させようとしています。これは私がこれまでに持っているものです:

$order = Mage::getModel('sales/order')->load($_GET['orderid']);
$order->setState(Mage_Sales_Model_Order::STATE_COMPLETE, true, 'Pedido completado exitosamente.', true, false)->save();

私がそれをすると、エラーが発生します:

The Order state 'complete' must not be set manually.

わかりましたので、これを試しました:

$order = Mage::getModel('sales/order')->load($_GET['orderid']);
$order->setStatus("complete");
$order->save();

私がそれをすると、エラーが発生します:

Call to a member function getMethodInstance() on a non-object

注文ステータスを手動で完了に設定するにはどうすればよいですか。

の次の行をコメントアウトして、最初のものを試しましたSales/Order.php

if ($shouldProtectState) {
            if ($this->isStateProtected($state)) {
                Mage::throwException(
                    Mage::helper('sales')->__('The Order State "%s" must not be set manually.', $state)
                );
            }
        }

しかし、うまくいきません。上記のエラーを完了しない設定がまだあります。

Magento 1.7.0.2 を使用しています。

4

2 に答える 2

9

まず、すでに行ったように注文IDを取得します。

$order = Mage::getModel('sales/order')->load($_GET['orderid']);

その後、

試す

$order->addStatusToHistory(Mage_Sales_Model_Order::STATE_COMPLETE);

また

$order->setData('state', Mage_Sales_Model_Order::STATE_COMPLETE);
$order->save();

setState()メソッドAFAIKを使用して、注文状態を手動でCOMPLETEまたはCLOSEDに設定することはできません。

于 2013-01-31T16:44:17.723 に答える