2011-06-02 15 views
13

¿Existe alguna manera sencilla de agregar el nombre de usuario de la persona que realiza el comentario en el historial de administración a la cadena de comentarios en la orden?Agregar nombre de usuario a orden Historial de comentarios

- editar -

Otra forma de hacer esto sería ¿cómo puedo añadir un campo adicional para el modelo de historia comentario para que pueda invalidar los modelos y plantillas adecuadas insertar esos datos en la estructura de datos.

+0

La respuesta a la primera pregunta es NO :) –

Respuesta

8

Si desea agregar el nombre de usuario que está actualmente conectado y hacer cambios en orden o comentar el pedido. necesitas agregar un atributo a magento.

crear un módulo de auditoría dicen 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> 

continuación, crear una carpeta en Auditoría espacio de nombres y se crea el fichero de configuración. propósito de esto es para reescribir la clase principal y que se extiende por el método modificado

app/código/local/Espacio de nombres/Auditoría/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>` 

crear una configuración para hacer un nuevo atributo en la base de datos /Espacio de nombres/Auditoría/SQL locales/audit_setup/MySQL4-instalación-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(); 
` 

Ahora extendiendo la clase existente. crear un archivo de clase history.php

Espacio de nombres/Auditoría/Bloque/Ventas/Pedido/Vista/Tab/Historia

y copiar las funciones en que

` getFullHistory función pública() { $ 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    
     ); 
    } 

amplíe la clase order.php y agregue este método para establecer el comentario para actualizar la base de datos. app/código/local/MyNamespace/Ventas/modelo/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; 

     } 

fin de actualizar los archivos PHTML. app/design/adminhtml/default/default/template/ventas/pedido/view/history.phtml lugar este código donde quieres para mostrar el nombre de usuario

<?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/plantilla/ventas/orden/vista/tab/history.phtml

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

Eso es todo ..

Vipul Dadhich

+1

gracias por la ayuda en este caso. Tuve que hacer algunos ajustes, pero tu código estaba prácticamente muerto. – Chris

+1

un gran problema que estoy encontrando es que Mage :: getSingleton ('admin/session') -> getUser(); no está disponible en el frente y hace que mis registros normales fallen. ¿Te has encontrado con esto? ¿Cómo lo superaste? – Chris

+1

Encontré el trabajo alrededor, necesita hacer esto en el Modelo $ UserInfo = Mage :: getSingleton ('admin/session') -> getUser(); \t \t \t if ($ UserInfo) \t \t \t \t $ usuario = $ UserInfo-> getUsername(); – Chris

6

Un punto de vista diferente al observar el evento * sales_order_status_history_save_before *

Definir la configuración y el observador en su fichero de configuración:

<config> 
    <modules> 
     <Name_Module> 
      <version>0.0.1</version> 
     </Name_Module> 
    </modules> 
    <global> 
     <resources> 
      <module_setup> 
       <setup> 
        <module>Name_Module</module>      
       </setup> 
       <connection> 
        <use>core_setup</use> 
       </connection> 
      </module_setup> 
     </resources>  
     <events> 
      <sales_order_status_history_save_before> 
       <observers> 
        <sales_order_status_history_save_before_observer> 
         <type>singleton</type> 
         <class>Name_Module_Model_Observer</class> 
         <method>orderStatusHistorySaveBefore</method> 
        </sales_order_status_history_save_before_observer> 
       </observers> 
      </sales_order_status_history_save_before>  
     </events> 
    <!-- and so on -> 

En su module_setup archivo app \ code \ Local \ Nombre \ Módulo \ sql \ module_setup \ install-0.0.1.php

$installer = $this; 
$installer->startSetup(); 
$table = $installer->getTable('sales/order_status_history'); 
$installer->getConnection() 
    ->addColumn($table, 'username', array(
     'type'  => Varien_Db_Ddl_Table::TYPE_TEXT, 
     'length' => 40, 
     'nullable' => true, 
     'comment' => 'Admin user name' 
    )); 
$installer->getConnection() 
    ->addColumn($table, 'userrole', array(
     'type'  => Varien_Db_Ddl_Table::TYPE_TEXT, 
     'length' => 50, 
     'nullable' => true, 
     'comment' => 'Admin user role' 
    ));  
$installer->endSetup(); 

Luego, en Name_Module_Model_Observer:

public function orderStatusHistorySaveBefore($observer) 
{ 
    $session = Mage::getSingleton('admin/session'); 
    if ($session->isLoggedIn()) { //only for login admin user 
     $user = $session->getUser(); 
     $history = $observer->getEvent()->getStatusHistory(); 
     if (!$history->getId()) { //only for new entry 
      $history->setData('username', $user->getUsername()); 
      $role = $user->getRole(); //if you have the column userrole 
      $history->setData('userrole', $role->getRoleName()); //you can save it too 
     }    
    } 
} 
+0

Manera agradable, fácil y limpia. Gracias amigo. –

Cuestiones relacionadas