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

我用

$order->addStatusHistoryComment("My comment why the status was changed", 
Mage_Sales_Model_Order::STATE_COMPLETE);

根据 Mage_Sales_Model_Order 代码,方法 addStatusToHistory 已被弃用。

于 2014-01-15T14:48:01.880 回答