2013-01-31 46 views
5

Tôi đang cố thay đổi trạng thái đơn hàng theo cách thủ công tại một điểm nhất định trong mã của tôi. Đây là những gì tôi có cho đến nay:Magento thay đổi trạng thái đơn hàng theo cách thủ công thành 'hoàn thành'

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

Khi tôi làm điều đó tôi nhận được lỗi:

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

Ok vì vậy tôi cố gắng này:

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

Khi tôi làm điều đó tôi nhận được lỗi:

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

Vậy làm cách nào tôi có thể tự đặt trạng thái đơn hàng thành công.

Tôi đã thử với người đầu tiên bình luận ra các dòng sau trong Sales/Order.php:

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

Nhưng không đi, tôi vẫn nhận được không thiết để hoàn thành báo lỗi trên.

Tôi đang sử dụng Magento 1.7.0.2.

Trả lời

9

Đầu tiên có được ID trật tự như bạn đã làm:

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

và sau đó,

Hãy thử

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

HOẶC

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

Bạn không thể đặt theo thứ tự nhà nước để COMPLETE hoặc CLOSED manuall y với phương thức setState() AFAIK.

+0

Xin lỗi, điều này sẽ ném lỗi sau đây 'Gọi hàm thành viên getMethodInstance() trên đối tượng không – jfreak53

+0

có thể do một số lỗi khác .. 'getMethodInstance()' thường xảy ra cho Phương thức thanh toán. Lỗi của bạn nói rằng bạn đang cố gắng để có được Phương thức thanh toán trên một đối tượng không – Kalpesh

+0

Tôi đang cố gắng đặt trạng thái đơn đặt hàng trên trang thành công sau khi thanh toán đầy đủ. Đối với một số lý do Magento không còn được thiết lập tình trạng thanh toán khi nó trở lại. Vì vậy, trong mô-đun thanh toán của tôi, tôi đang cố gắng thiết lập thanh toán trên trang thành công cuối cùng. Đó là trên trang thành công 'onestepcheckout' mà tôi đang cố gắng thiết lập. Lỗi này chỉ xảy ra khi tôi thêm nội dung đó vào trang, nếu tôi không thêm nội dung đó không có lỗi. – jfreak53

5

tôi sử dụng

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

Phương pháp addStatusToHistory bị phản đối theo mã Mage_Sales_Model_Order.

Các vấn đề liên quan