Checkout Event Observer – How to Add Data in Sales Order Table After Place Order

checkoutevent-observer

In sales_flat_order i m adding custom column. Now when i place order that time i want to save data in custom column

I m trying this code:

config.xml

<global>
    <events>
         <checkout_onepage_controller_success_action>
            <observers>
                <price_observer>
                    <type>singleton</type>
                    <class>Company_Example_Model_Observer</class>
                    <method>setIdInOrder</method>
                </price_observer>
            </observers>
        </checkout_onepage_controller_success_action>
    </events>
<global>

observer.php

public function setIdInOrder($observer) {
    $event = $observer->getEvent();
    $orderId = $observer->getEvent()->getOrderId();
    $id = Mage::getSingleton('core/session')->getStudentId(); 
    $order = Mage::getModel('sales/order')->load($orderId);
    $order->setData('student_id',$id);
    $order->save();
    Mage::getSingleton('core/session')->unsStudentId();
}

set session like this

$id = 1;
Mage::getSingleton('core/session')->setStudentId($id);

Now i m getting this error

Fatal error: Call to a member function getMethodInstance() on a non-object in F:\wamp\www\tution\app\code\core\Mage\Payment\Model\Observer.php on line 46

I can't get it where i m wrong. After Add this event this error occured. How to fixed this error

Best Answer

In config.xml add the event sales_order_place_after

Change in observer.php,it worked for me

public function placeAfter($observer)
{
    $id = Mage::getSingleton('core/session')->getStudentId(); 
    $event = $observer->getEvent();
    $order = $event->getOrder();
    $order->setStudentId($id);
    $order->save();
}
Related Topic