Guarde el nombre de administrador en orden_status cambie usando un observador
-
16-10-2019 - |
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!
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/