我正在尝试手动更改订单状态,以便在我的代码中的某个位置完成。这就是我到目前为止所做的:
$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。
答案 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方法。