2013-01-31 2 views
5

J'essaie de changer manuellement l'état de la commande pour terminer à un certain point dans mon code. Voilà ce que j'ai jusqu'à présent:Magento changer manuellement le statut de la commande pour «terminer»

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

Quand je fais ce que je reçois l'erreur:

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

Ok alors j'ai essayé ceci:

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

Quand je fais ce que je reçois l'erreur:

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

Alors, comment puis-je définir manuellement le statut de la commande à compléter.

J'ai essayé avec le premier commentant les lignes suivantes dans Sales/Order.php:

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

Mais pas aller, je reçois toujours le réglage de ne pas terminer erreur ci-dessus. Je utilise Magento 1.7.0.2.

Répondre

9

D'abord obtenir le numéro de commande comme vous l'avez déjà fait:

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

puis,

Essayez

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

OU

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

Vous ne pouvez pas définir l'ordre état à MANUELLE COMPLÈTE ou FERMÉE y avec setState() méthode AFAIK.

+0

Désolé, ceci lance l'erreur suivante 'Appel à une fonction membre getMethodInstance() sur un non-objet' – jfreak53

+0

qui peut être à cause d'une autre erreur ..' getMethodInstance() 'se produit généralement pour la méthode de paiement. Votre erreur indique que vous essayez d'obtenir la méthode de paiement sur un non-objet – Kalpesh

+0

J'essaie de définir le statut de l'ordre sur la page de succès après le paiement intégral. Pour une raison quelconque, Magento ne définit plus le statut du paiement quand il revient. Donc, dans mon module de paiement, j'essaie de régler le paiement sur la dernière page de succès. C'est sur la page de succès 'onestepcheckout' que j'essaie de le définir. L'erreur se produit seulement quand j'ajoute ce truc à la page, si je n'ajoute pas ce genre d'erreur. – jfreak53

5

J'utilise

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

Le procédé addStatusToHistory est obsolète en fonction du code de Mage_Sales_Model_Order.

Questions connexes