Magento手动将订单状态更改为“完成”

时间:2013-01-31 16:37:59

标签: php magento

我正在尝试手动更改订单状态,以便在我的代码中的某个位置完成。这就是我到目前为止所做的:

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

2 个答案:

答案 0 :(得分:9)

首先获得您已经完成的订单ID:

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

然后,

尝试

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

OR

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

您无法使用setState()方法AFAIK手动将订单状态设置为COMPLETE或CLOSED。

答案 1 :(得分:5)

我用

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

根据Mage_Sales_Model_Order代码,不推荐使用addStatusToHistory方法。