Pregunta

Estoy tratando de averiguar qué evento observar para guardar el nombre de un administrador registrado que cambia un estado de pedido que lo hace visible en los comentarios del pedido.

He podido observar otros eventos para agregar el nombre del administrador a las notas de pedido, la nota de crédito y la creación de facturas, pero parece que no puedo encontrar el evento correcto para usar.

He probado el sales_order_save_before y sales_order_save_after, pero no será el mismo nombre del administrador al historial de comentarios.

¿Puede alguien ayudarme por favor?

Aquí está mi código de módulo basado en el observador:

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>

Y observador.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;
}

}

¡Un aviso sería apreciado!

¿Fue útil?

Solución 3

De hecho, hice esto hace un par de años:

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>`

Observador.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;
    }
    }

Puedes obtener el módulo completo aquí Comentario de orden de administración

Otros consejos

EDITAR:

También puede hacer lo siguiente, lo que recomendaría sobre la solución anterior que publiqué. Principalmente porque no usa SetPost, lo que consideraría aterrador.

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>

Observador.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;
}

Esto lograría lo mismo, excepto que está interceptando el modelo antes de guardarlo, lo que le permite alterar el comentario sin tener que usar SetPost ().

Publicación original: Podrías hacer lo siguiente:

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>

Observador.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;
}

Esto debería funcionar para ti.

Creo que el evento que estás observando no existe.
Prueba este en su lugar controller_action_predispatch_adminhtml_sales_order_addcomment.
El comentario se envía a esta URL:MAGENTO_ROOT/index.php/admin/sales_order/addComment/order_id/ORDER_ID_HERE/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top