Search code examples
magentomagento-1.4

Add Username to Order Comment History


Is there a simple way to add the username of the person who is making the comment in the admin history to the comment thread on the order?

-- edit --

Another way of asking this would be how do I add an additional field to the comment history model so that I can override the appropriate models and templates inserting that data into the data structure.


Solution

  • If you want to add the username who is currently logged in and making change in order or commenting on order. you need to add an attribute to magento.

    Create a Module say Audit app / etc / modules / Namespace_Audit.xml

    <?xml version="1.0"?> 
    <config> 
        <modules>
            <Namespace_Audit>
                <active>true</active>
                <codePool>local</codePool>
                <depends>
                    <Mage_Sales/>
                </depends>
            </Namespace_Audit>
        </modules>
    </config>
    

    then Create a folder Audit in you namespace and create the config file. purpose of this is to rewrite the core class and extending for modified method

    app / code / local / Namespace / Audit / etc / config.xml

    `<?xml version="1.0"?>
    <config>
        <modules>
            <Namespace_Audit>
                <version>0.1.0</version>
            </Namespace_Audit>
        </modules>
         <global>
            <blocks>
                <adminhtml>
                    <rewrite>
                        <sales_order_view_tab_history before="Mage_Adminhtml_Block">Namespace_Audit_Block_Sales_Order_View_Tab_History<sales_order_view_tab_history>
                    </rewrite>
                </adminhtml>
            </blocks>                    
            <global>
                    <models>
                            <audit>
                                    <class>Bigadda_Audit_Model</class>
                            </audit>
                    </models>
            <resources>       
                <audit_setup>
                    <setup>
                        <module>Bigadda_Audit</module>
                    </setup>
                    <connection>
                        <use>core_setup</use>
                    </connection>
                </audit_setup>
                <audit_write>
                    <connection>
                        <use>core_write</use>
                    </connection>
                </audit_write>
                <audit_read>
                    <connection>
                        <use>core_read</use>
                    </connection>
                </audit_read>
            </resources>
            </global>
        </global>  
    </config>`
    

    create a setup to make a new attribute in database local / Namespace / Audit / sql / audit_setup / mysql4-install-0.1.0.php

    `
    <?php
    $installer = $this;
    $installer->startSetup();
    $setup = new Mage_Eav_Model_Entity_Setup('core_setup');
    $setup->addAttribute('order_status_history', 'track_user', array('type' => 'varchar'));
    $installer->endSetup();
    `
    

    Now extending the existing class . create a class file History.php

    Namespace/Audit/Block/Sales/Order/View/Tab/History

    and copy the functions in that

    ` public function getFullHistory() { $order = $this->getOrder();

        $history = array();
        foreach ($order->getAllStatusHistory() as $orderComment){
            $history[$orderComment->getEntityId()] = $this->_prepareHistoryItem(
                $orderComment->getStatusLabel(),
                $orderComment->getIsCustomerNotified(),
                $orderComment->getCreatedAtDate(),
                $orderComment->getComment(),
                $orderComment->getTrackUser(),
                $orderComment->getTrackUserName()
            );
        }
    
        foreach ($order->getCreditmemosCollection() as $_memo){
            $history[$_memo->getEntityId()] =
                $this->_prepareHistoryItem($this->__('Credit Memo #%s created', $_memo->getIncrementId()),
                    $_memo->getEmailSent(), $_memo->getCreatedAtDate());
    
            foreach ($_memo->getCommentsCollection() as $_comment){
                $history[$_comment->getEntityId()] =
                    $this->_prepareHistoryItem($this->__('Credit Memo #%s comment added', $_memo->getIncrementId()),
                        $_comment->getIsCustomerNotified(), $_comment->getCreatedAtDate(), $_comment->getComment(),$_comment->getTrackUser(),$_comment->getTrackUserName());
            }
        }
    
        foreach ($order->getShipmentsCollection() as $_shipment){
            $history[$_shipment->getEntityId()] =
                $this->_prepareHistoryItem($this->__('Shipment #%s created', $_shipment->getIncrementId()),
                    $_shipment->getEmailSent(), $_shipment->getCreatedAtDate());
    
            foreach ($_shipment->getCommentsCollection() as $_comment){
                $history[$_comment->getEntityId()] =
                    $this->_prepareHistoryItem($this->__('Shipment #%s comment added', $_shipment->getIncrementId()),
                        $_comment->getIsCustomerNotified(), $_comment->getCreatedAtDate(), $_comment->getComment(),$_comment->getTrackUser(),$_comment->getTrackUserName());
            }
        }
    
        foreach ($order->getInvoiceCollection() as $_invoice){
            $history[$_invoice->getEntityId()] =
                $this->_prepareHistoryItem($this->__('Invoice #%s created', $_invoice->getIncrementId()),
                    $_invoice->getEmailSent(), $_invoice->getCreatedAtDate());
    
            foreach ($_invoice->getCommentsCollection() as $_comment){
                $history[$_comment->getEntityId()] =
                    $this->_prepareHistoryItem($this->__('Invoice #%s comment added', $_invoice->getIncrementId()),
                        $_comment->getIsCustomerNotified(), $_comment->getCreatedAtDate(), $_comment->getComment(),$_comment->getTrackUser(),$_comment->getTrackUserName());
            }
        }
    
        foreach ($order->getTracksCollection() as $_track){
            $history[$_track->getEntityId()] =
                $this->_prepareHistoryItem($this->__('Tracking number %s for %s assigned', $_track->getNumber(), $_track->getTitle()),
                    false, $_track->getCreatedAtDate());
        }
    
        krsort($history);
        return $history;
    }`
    
    protected function _prepareHistoryItem($label, $notified, $created, $comment = '' , $trackUser = '' , $trackUserName ='')
        {
            return array(
                'title'      => $label,
                'notified'   => $notified,
                'track_user' => $trackUser,
                'track_user_name' => $trackUserName,
                'comment'    => $comment,
                'created_at' => $created            
            );
        }
    

    extend the class order.php and add this method to set the comment to update the database. app / code / local / Mynamespace / Sales / Model / Order.php

    public function addStatusHistoryComment($comment, $status = false)
            {
                    if (false === $status) {
                            $status = $this->getStatus();
                    } elseif (true === $status) {
                            $status = $this->getConfig()->getStateDefaultStatus($this->getState());
                    } else {
                            $this->setStatus($status);
                    }
                    $UserInfo = Mage::getSingleton('admin/session')->getUser();
                    $UserName='';
                    $UserName=$UserInfo->getUsername();
                    $history = Mage::getModel('sales/order_status_history')
                    ->setStatus($status)
                    ->setComment($comment)
                    ->setTrackUser($UserName); //added by vipul dadhich to add audits in the 
                    $this->addStatusHistory($history);
                    return $history;
    
            }
    

    finally updating the phtml files. app / design / adminhtml / default / default / template / sales / order / view / history.phtml place this code wherever u want to show the username

    <?php if ($_item->getTrackUser()): ?>
                    <br/><?php  echo "<b>Updated By ( User ) :-  </b>".$this->htmlEscape($_item->getTrackUser(), array('b','br','strong','i','u')) ?>
                <?php endif; ?>
    

    app / design / adminhtml / default / default / template / sales / order / view / tab / history.phtml

     <?php if ($_comment = $this->getItemTrackUser($_item)): ?>
                        <br/><?php echo "<b>Updated By (User) :- </b>".$_comment ?>
                    <?php endif; ?>
    

    Thats All folks..

    Vipul Dadhich