1

When order change status from "x" to "complete" I need save when order was completed. I am trying to achieve this with sales_order_save_commit_after event. Problem is that I can't save order when the change is made. Order is completed when Invoice and Shipment were submitted in admin for particular order. I made custom attribute on order completed_at when date and time need to be store.

config.xml

<adminhtml>
    <events>
        <sales_order_save_commit_after>
            <observers>
                <mycompany_mymodul>
                    <class>MyCompany_MyModul_Model_Observer</class>
                    <method>orderUpdate</method>
                </mycompany_mymodul>
            </observers>
        </sales_order_save_commit_after>
    </events>
</adminhtml>

Observer.php

public function orderUpdate($observer)
{
    $order = $observer->getEvent()->getOrder();
    if ($order->getOrigData("status") !== "complete" && $order->getData("status") === "complete") {
        $order->setCompletedAt(date('Y-m-d H:i:s', time()));
        Mage::log(print_r($order->getData(), true));
        //$order->save();
    }
    return $this;
}
  • Try to move your code to sales_order_save_before and change your condition to if ($order->getData("status") === "complete" && $order->getCompletedAt() == null) or whatever the completed_at default value is. That way you avoid the problems with saving in the after event and should have the correct date saved only once. – HelgeB Apr 12 at 12:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.