Magento – Order status change on sales_order_place_after event not working

event-observermagento-1.9order-statusordersplace-order

I'm trying to change status of order as hold by calling an observer on sales_order_place_after event. When I log the order object, it shows that order status has been set to 'hold' but when I check order status after thank you message. It is again set to 'new'.

Which event should I use to change order status on placing an order.

Best Answer

try to change the order status to hold after thank you message displays. for this use checkout_onepage_controller_success_action event to change the order status.

<events>
    <checkout_onepage_controller_success_action>
        <observers>
            <change_order_status>
                <class>YourPackageName_YourModuleName_Model_Observer</class>
                <method>changeOrderStatus</method>
            </change_order_status>
        </observers>
    </checkout_onepage_controller_success_action>
</events>

and function is as follows

class YourPackageName_YourModuleName_Model_Observer{
    public function changeOrderStatus($observer){
        $orderIds = $observer->getEvent()->getOrderIds();
        foreach ($orderIds as $orderId) {
            $order = Mage::getModel('sales/order')->load($orderId);
            $quoteId = $order->getQuoteId();

            // this is how we get quote id from order.
            // now add your logic here for shortlisting orders to be made on hold
        }
    }
}