There are small issue ,in closing backet of class Npm_Commission_Model_Observer and method name is wrong, should calculate_commission from saveorder
as xml define
<?php
class Npm_Commission_Model_Observer extends Varien_Event_Observer
{
public function saveorder($observer)
{
die('sales_order_place_after');
$params = Mage::app()->getFrontController()->getRequest()->getParams();
echo "<pre>";print_r($params);die();
}
} /* it was missing */
Also
total code config.xml code is (path app/code/local/Npm/Commission/etc)
<?xml version="1.0"?>
<config>
<modules>
<Npm_Commission>
<version>0.1.0</version>
</Npm_Commission>
</modules>
<global>
<models>
<commission>
<class>Npm_Commission_Model</class>
<resourceModel>commission_mysql4</resourceModel>
</commission>
<commission_mysql4>
<class>Npm_Commission_Model_Mysql4</class>
<entities>
<commission>
<table>commission</table>
</commission>
</entities>
</commission_mysql4>
</models>
<events>
<sales_order_place_after>
<observers>
<npm_commission>
<type>singleton</type>
<class>commission/observer</class>
<method>calculate_commission</method>
</npm_commission>
</observers>
</sales_order_place_after>
</events>
<resources>
<commission_setup>
<setup>
<module>Npm_Commission</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</commission_setup>
<commission_write>
<connection>
<use>core_write</use>
</connection>
</commission_write>
<commission_read>
<connection>
<use>core_read</use>
</connection>
</commission_read>
</resources>
</global>
</config>
Observer.php path app/code/local/Npm/Commission/Model
<?php
class Npm_Commission_Model_Observer extends Varien_Event_Observer
{
public function calculate_commission($observer)
{
$order = $observer->getEvent()->getOrder();
if (!$order) {
return $this;
}
//die('sales_order_place_after');
Mage::log('sales_order_place_after');
//$params = $observer->getEvent()->getOrder;
Mage::log(print_r($order->getData('increament_id'),true));
//echo "<pre>";print_r($params);die();
}
}
etc/modules files Npm_Commission.xml
<?xml version="1.0" ?>
<config>
<modules>
<Npm_Commission>
<codePool>local</codePool>
<active>true</active>
</Npm_Commission>
</modules>
</config>
I suggest the event checkout_submit_all_after
in this case. As far as a I know sales_order_place_after
is triggered when you have placed an order using Multishipping but checkout_submit_all_after
will always get triggered.
<global>
<events>
<checkout_submit_all_after>
<observers>
<myaction_save_order>
<class>mymodule/observer</class>
<method>saveOrderIdToAttendees</method>
</myaction_save_order>
</observers>
</checkout_submit_all_after>
</events>
</global>
and use
$order = $observer->getEvent()->getData('order');
Best Answer
A custom Magento module will be required for this task
Step 1:- First, create a module initializer in
/app/etc/modules/Karthik_Orderhook.xml
with the following content:Step 2:- Create a module configuration file config.xml in
app/code/local/NAMESPACE/MODULENAME/etc/
(replace NAMESPACE and MODULENAME with your own values). In our case the path will be/app/code/local/Karthik/Orderhook/etc/config.xml
with content:I assume you know the working of config.xml and above mentioned tags
Step 3:- Create observer file app/code/community/Karthik/Orderhook/Model/Observer.php with the following content:
As we have described below – order status will be changed only if “Credit Card Save” payment method has been used with the order. If you don’t need these conditions – just remove the below function _getPaymentMethod.
If You want to change status different from above mentioned on then you can replace the code with any of below mentioned