Engine23
blogBannerImage
By Engine23

Magento – changing the status of an order

Here, I will show you, how you can change your order status programmatically (with PHP coding). First, you need to load your order. If you have order id, you can load order in the following way:-

$orderId = YOUR_ORDER_ID;
$order = Mage::getModel('sales/order')
				->load($orderId);

If you have order increment id, you can load order in the following way:-

$orderIncrementId = YOUR_ORDER_INCREMENT_ID;
$order = Mage::getModel('sales/order')
				->loadByIncrementId($orderIncrementId);

Now, here is the code to change order status:-

/**
 * change order status to 'Completed'
 */
$order->setState(Mage_Sales_Model_Order::STATE_COMPLETE, true)->save();

Similarly, you can change the order status to pending, processing, canceled, closed, holded, etc.

/**
 * change order status to 'Pending'
 */
$order->setState(Mage_Sales_Model_Order::STATE_NEW, true)->save();

/**
 * change order status to 'Pending Paypal'
 */
$order->setState(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, true)->save();

/**
 * change order status to 'Processing'
 */
$order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true)->save();

/**
 * change order status to 'Completed'
 */
$order->setState(Mage_Sales_Model_Order::STATE_COMPLETE, true)->save();

/**
 * change order status to 'Closed'
 */
$order->setState(Mage_Sales_Model_Order::STATE_CLOSED, true)->save();

/**
 * change order status to 'Canceled'
 */
$order->setState(Mage_Sales_Model_Order::STATE_CANCELED, true)->save();

/**
 * change order status to 'Holded'
 */
$order->setState(Mage_Sales_Model_Order::STATE_HOLDED, true)->save();
**** NOTE ON HOLDED  *****
I struggled for a few hours with changing the status, and found that all i needed
to do was take advantage of some built in functionality in Magento:
// this is the magic that took me 4 hours to figure out
 // Got inspiration from app/code/core/Mage/Sales/Model/Order.php
 $order->hold()->save();

You can also cancel an order in the following way:-

if($order->canCancel()) {
	$order->cancel()->save();
}

Hold an order:-

if($order->canHold()) {
	$order->hold()->save();
}

Unhold an order:-

if($order->canUnhold()) {
	$order->unhold()->save();
}

We offer additional Magento support if something isn't working for you.