Magento – SMS for different order events in Magento

magento-1.9orders

I want to send SMS to customers when ever an order status changes from pending > processing > complete (for all sort of changes).

For pending process(when place order is clicked), i should able to get a SMS. Below is the code: Onserver.php

public function sendSMS ($observer)
    {
        $orderIds = $observer->getEvent()->getOrderIds();
        foreach($orderIds as $orderId)
        {
            $order = Mage::getModel('sales/order')->load($orderId);
            $orderId = $order->getId();
            $order_status = $order->getStatus();
            $smsMessageTemp =Mage::getModel('core/variable')->loadByCode('template_sms_order_placement_confirmation')->getValue('plain');
                . . . . .
         }
 }

When admin changes the state from pending to processing , how to send sms for different events.

In my .xml file:

     <events> 
        <sales_order_save_after>
            <observers>
                <Metro_SellerPurchaseOrder>
                    <type>singleton</type>
                    <class>sellerpurchaseorder/observer</class>
                   <method>sendSMS</method>
                </Metro_SellerPurchaseOrder>
           </observers>
        </sales_order_save_after>
    </events>

Please suggest.

Best Answer

First you need to track order status changes,

Magento is provide to track old data and new changed data using getOrigData() and getData() on save event fire.So easily using the feature,you can get changes Status and on basic of this,you can fire the Sms

Error:

When sales_order_save_after event is fire then you can get only one order data that means code at observer is wrong.

Solution:

As i said that when Model is saving then you can get old and new Data using

Current Data: $Object->getOrigData();

and

Changing new Data : $object->getData()

Using those function when you can easy track order status changes.

And suggesting to you that use event sales_order_save_commit_after instead of sales_order_save_after because if any issue has occurred during the save magento is roll back to old data and show the errors.

you can Old status by $OldStatus=$order->getOrigData('status')

and new Status

$NewStatus=$order->getData('status');

Code:

  public  function sendSMS($observer)
    {
        $order = $observer->getEvent()->getOrder();

        if (!$order->getId()) {
            //order not saved in the database
            return $this;
        }

        /* @var $order Mage_Sales_Model_Order */

        $OldData=$order->getOrigData();
        $NewData=$order->getData();
        $OldState==$order->getOrigData('state');
        $NewState=$order->getState();
        $OldStatus=$order->getOrigData('status');
        $NewStatus=$order->getStatus();


        /* Fire sms when New Status  and  old Statu are not same */
        if($OldStatus!=$NewStatus){
            //fire sms;
            $smsMessageTemp =Mage::getModel('core/variable')->loadByCode('template_sms_order_placement_confirmation')->getValue('plain');
        }



        return $this;
    } 
Related Topic