Mahmood Rehman
Mahmood Rehman

Reputation: 4331

capture Order completion status in observer in magento

Hi I want to catpture the order information when the oder is completed or close.I try different events like (sales_order_place_after) but didn't complete my requirements.I am completing orders form admin side and i create observer for capturing the information like Xml :

<events>
        <sales_order_place_after>
        <observers>
            <extra_options>             
                <class>My_Module_Model_Observer</class>
                <method>salesConvertQuoteItemToOrderItem</method>
            </extra_options>
        </observers>
            </sales_order_place_after>
    </events>

Observer :

public function salesConvertQuoteItemToOrderItem($observer)
    {

        $order = $observer->getOrder();
        $orders = $observer->getEvent()->getOrder();

        if($order->getState() == Mage_Sales_Model_Order::STATE_COMPLETE){
         echo "<pre>";
        print_r($orders);exit;
        }
    }

Can anyone help ? Thanks in advance

Upvotes: 1

Views: 1225

Answers (2)

jissereitsma
jissereitsma

Reputation: 122

Using sales_order_save_after is still good, but it just requires you also to check for the state (as Mischa suggests):

public function salesOrderSaveAfter($observer)
{       
    $order = $observer->getEvent()->getOrder();
    if($order->getState() != Mage_Sales_Model_Order::STATE_COMPLETE) {
        return $this;
    }       

    if($order->getData('state') == $order->getOrigData('state')) {
        return $this;
    }

    // do your stuff

    return $this;
}

This works fine for me.

Upvotes: 2

Tim Bezhashvyly
Tim Bezhashvyly

Reputation: 9100

You are doing everything right except you are listening to wrong event. You have to use sales_order_save_after instead.

Upvotes: 2

Related Questions