jfreak53
jfreak53

Reputation: 2349

Magento manually change order status to 'complete'

I am trying to manually change order status to complete at a certain point in my code. This is what I have so far:

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

When I do that I get the error:

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

Ok so I tried this:

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

When I do that I get the error:

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

So how can I manually set the order status to complete.

I tried with the first one commenting out the following lines in Sales/Order.php:

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

But no go, I still get the not setting to complete error above.

I am using Magento 1.7.0.2.

Upvotes: 5

Views: 16886

Answers (2)

cmonsqpr
cmonsqpr

Reputation: 603

I use

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

The method addStatusToHistory is deprecated according to the Mage_Sales_Model_Order code.

Upvotes: 5

Kalpesh
Kalpesh

Reputation: 5685

First get the order ID like you already did:

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

and then,

Try

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

OR

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

You can't set Order state to COMPLETE or CLOSED manually with setState() method AFAIK.

Upvotes: 9

Related Questions