Question

I am trying to figure out which event to observe in order to save the name of a logged in admin that changes an order state making it visible in the order comments.

I have been able to observe other events in order to append the admin name to order notes, credit memo and invoice creation but I can't seem to find the correct event to use.

I've tried the sales_order_save_before and sales_order_save_after but it won't same the admin name to the comments history.

Can anyone help me out please?

Here's my observer based module code:

config.xml

            <controller_action_predispatch_adminhtml_sales_order_save_before>
                <observers>
                    <module_ordercomment>
                        <class>Thaneuk_OrderComment_Model_Observer</class>
                        <method>controllerActionPredispatchAdminhtmlSalesOrderSaveBefore</method>
                    </module_ordercomment>
                </observers>
            </controller_action_predispatch_adminhtml_sales_order_save_before>                         
        </events>

And Observer.php

<?php

class Company_OrderComment_Model_Observer {

function controllerActionPredispatchAdminhtmlSalesOrderSaveBefore($observer)
{
    $post = Mage::app()->getRequest()->getPost('comment');
    if ($post && isset($post['comment'])) {
        $post['comment'] .= $this->_getAppend();
        Mage::app()->getRequest()->setPost('comment', $post);
    }
}

protected function _getAppend()
{
    $user     = Mage::getSingleton('admin/session');
    $username = $user->getUser()->getUsername();
    return " : " . $username;
}

}

A heads up would be appreciated!

Was it helpful?

Solution 3

I actually did do this a couple of years ago:

config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Company_OrderComment>
            <version>0.0.1</version>
        </Company_OrderComment>
    </modules>
    <adminhtml>
        <events>
            <controller_action_predispatch_adminhtml_sales_order_addComment>
                <observers>
                    <Company_OrderComment>
                        <class>Company_OrderComment_Model_Observer</class>
                        <method>controllerActionPredispatchAdminhtmlSalesOrderAddComment</method>
                    </Company_OrderComment>
                </observers>
            </controller_action_predispatch_adminhtml_sales_order_addComment>

            <controller_action_predispatch_adminhtml_sales_order_create_addComment>
                <observers>
                    <Company_OrderComment>
                        <class>Company_OrderComment_Model_Observer</class>
                        <method>controllerActionPredispatchAdminhtmlSalesOrderCreateAddComment</method>
                    </Company_OrderComment>
                </observers>
            </controller_action_predispatch_adminhtml_sales_order_create_addComment>   

            <controller_action_predispatch_adminhtml_sales_order_creditmemo_save>
                <observers>
                    <Company_OrderComment>
                        <class>Tamedo_OrderComment_Model_Observer</class>
                        <method>controllerActionPredispatchAdminhtmlSalesOrderCreditmemoSave</method>
                    </Company_OrderComment>
                </observers>
            </controller_action_predispatch_adminhtml_sales_order_creditmemo_save>

            <controller_action_predispatch_adminhtml_sales_order_creditmemo_addComment>
                <observers>
                    <Company_OrderComment>
                        <class>Tamedo_OrderComment_Model_Observer</class>
                        <method>controllerActionPredispatchAdminhtmlSalesOrderCreditmemoAddComment</method>
                    </Company_OrderComment>
                </observers>
            </controller_action_predispatch_adminhtml_sales_order_creditmemo_addComment>
            <controller_action_predispatch_adminhtml_sales_order_creditmemo_addComment>
                <observers>
                    <Company_OrderComment>
                        <class>Company_OrderComment_Model_Observer</class>
                        <method>controllerActionPredispatchAdminhtmlProductReturnEdit</method>
                    </Company_OrderComment>
                </observers>
            </controller_action_predispatch_adminhtml_sales_order_creditmemo_addComment>
        </events>
    </adminhtml>   
</config>`

Observer.php

<?php
    class Company_OrderComment_Model_Observer {
    function controllerActionPredispatchAdminhtmlSalesOrderAddComment($observer)
    {
        $history = Mage::app()->getRequest()->getPost('history');
        if ($history && isset($history['comment'])) {
            $history['comment'] .= $this->_getAppend();
            Mage::app()->getRequest()->setPost('history', $history);
        }
    }
    function controllerActionPredispatchAdminhtmlSalesOrderCreateAddComment($observer)
    {
        $history = Mage::app()->getRequest()->getPost('history');
        if ($history && isset($history['comment'])) {
            $history['comment'] .= $this->_getAppend();
            Mage::app()->getRequest()->setPost('history', $history);
        }
    }
    function controllerActionPredispatchAdminhtmlSalesOrderCreditmemoSave($observer)
    {
        $post = Mage::app()->getRequest()->getPost('creditmemo');
        if ($post && isset($post['comment_text'])) {
            $post['comment_text'] .= $this->_getAppend();
            Mage::app()->getRequest()->setPost('creditmemo', $post);
        }
    }
    function controllerActionPredispatchAdminhtmlSalesOrderCreditmemoAddComment($observer)
    {
        $post = Mage::app()->getRequest()->getPost('comment');
        if ($post && isset($post['comment'])) {
            $post['comment'] .= $this->_getAppend();
            Mage::app()->getRequest()->setPost('comment', $post);
        }
    }
    protected function _getAppend()
    {
        $user     = Mage::getSingleton('admin/session');
        $username = $user->getUser()->getUsername();
        return "<br/><br/> From: " . $username;
    }
    }

You can get the full module here Admin order comment

OTHER TIPS

EDIT:

You can also do the following, which I would recommend over the previous solution I posted. Mostly because it doesn't use setPost, which I would consider scary.

config.xml:

<adminhtml>
  <events>
    <sales_order_status_history_save_before>
      <observers>
        <module_status_history_save_before>
          <class>module/observer</class>
          <method>commentSaveBefore</method>
        </module_status_history_save_before>
      </observers>
    </sales_order_status_history_save_before>
  </events>
</adminhtml>

Observer.php:

public function commentSaveBefore($obs) {
    $event = $obs->getEvent();
    $status = $event->getDataObject();
    $status->setComment($status->getComment().$this->_getAppend());
}

protected function _getAppend()
{
    $admin = Mage::getSingleton('admin/session')->getUser();
    $username = $admin->getUsername();
    return " : " . $username;
}

This would accomplish the same thing, except you're intercepting the model before it gets saved, allowing you to alter the comment without having to use setPost().

Original Post: You could do the following:

config.xml:

<adminhtml>
    <events>
        <controller_action_predispatch_adminhtml_sales_order_addComment>
            <observers>
                <module_order_save_comment>
                    <class>module/observer</class>
                    <method>adminhtmlSavingOrderComment</method>
                </module_order_save_comment>
            </observers>
        </controller_action_predispatch_adminhtml_sales_order_addComment>
    </events>
</adminhtml>

Observer.php:

public function adminhtmlSavingOrderComment($obs) {
    $event = $obs->getEvent();
    $order = $event->getOrder();
    $data = Mage::app()->getRequest()->getPost('history');
    if ($data && isset($data['comment'])) {
        $data['comment'] .= $this->_getAppend();
        Mage::app()->getRequest()->setPost('history', $data);
    }
}

protected function _getAppend()
{
    $admin = Mage::getSingleton('admin/session')->getUser();
    $username = $admin->getUsername();
    return " : " . $username;
}

This should work for you.

I think the event you are observing does not exist.
Try this one instead controller_action_predispatch_adminhtml_sales_order_addcomment.
The comment is submitted to this url: MAGENTO_ROOT/index.php/admin/sales_order/addComment/order_id/ORDER_ID_HERE/

Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top