2013-01-31 52 views
5

我正嘗試手動更改訂單狀態以完成我的代碼中的某個點。這是我到目前爲止有: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。

回答

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(); 

您不能設置訂單狀態改爲完成或關閉手動y用setState()方法AFAIK。

+0

對不起,這會拋出以下錯誤'調用成員函數getMethodInstance()在非對象的' – jfreak53

+0

,這可能是因爲一些其他錯誤..'getMethodInstance()'通常發生的付款方法。您的錯誤表示您正嘗試在非對象上獲取付款方式 – Kalpesh

+0

我試圖在完整付款後在成功頁面上設置訂單狀態。由於某些原因,Magento不再在設置付款狀態時返回。所以在我的付款模塊中,我試圖在最終成功頁面上設置付款。它在我嘗試設置的'onestepcheckout'成功頁面上。錯誤只發生在我將這些東西添加到頁面時,如果我不添加那些東西沒有錯誤。 – jfreak53

5

我使用

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

的方法addStatusToHistory根據Mage_Sales_Model_Order代碼棄用。