2013-01-31 11 views
5

Próbuję ręcznie zmienić status zamówienia, aby ukończyć w określonym punkcie mojego kodu. To, co mam tak daleko:Magento ręcznie zmienia status zamówienia na "kompletny"

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

Kiedy robię, że pojawia się błąd:

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

Ok więc próbowałem to:

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

Kiedy robię, że mam błąd:

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

Jak mogę ręcznie ustaw status zamówienia, aby zakończyć.

Próbowałem z pierwszym zakomentowanie następujące wiersze w Sales/Order.php:

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

Ale nie idź, ja nadal nie uzyskać ustawienie, aby zakończyć błąd powyżej.

Używam Magento 1.7.0.2.

Odpowiedz

9

Pierwszy uzyskać identyfikator zlecenia jak już to zrobiłeś:

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

i wtedy

Spróbuj

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

LUB

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

Nie można ustawić Order stan na KOMPLETNY lub ZAMKNIĘTY manuall yz setState() metodą AFAIK.

+0

Przepraszamy, ten rzut okaże się następujący: "Wywołanie funkcji member getMethodInstance() na obiekcie innym niż obiekt" – jfreak53

+0

może być spowodowane innym błędem. 'GetMethodInstance()' zwykle występuje w przypadku metody płatności. Twój błąd mówi, że próbujesz uzyskać metodę płatności na obiekcie innym niż obiekt – Kalpesh

+0

Próbuję ustawić status zamówienia na stronie powodzenia po dokonaniu pełnej płatności. Z jakiegoś powodu Magento nie ustala już statusu płatności po jej powrocie. Tak więc w moim module płatności próbuję ustawić płatność na stronie końcowego sukcesu. Jest na stronie powodzenia 'onestepcheckout', którą próbuję ustawić. Błąd pojawia się tylko wtedy, gdy dodaję te rzeczy do strony, jeśli nie dodaję żadnych błędów. – jfreak53

5

użyć

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

Metoda addStatusToHistory jest przestarzała zgodnie z kodem Mage_Sales_Model_Order.

Powiązane problemy