Сохранить имя администратора на order_status Изменение с помощью наблюдателя

magento.stackexchange https://magento.stackexchange.com/questions/6291

  •  16-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь выяснить, какое событие следует наблюдать, чтобы сохранить имя зарегистрированного администратора, которое меняет состояние заказа, что делает его видимым в комментариях заказа.

Я попробовал sales_order_save_before и sales_order_save_after, но это не будет именем администратора в истории комментариев.

Кто -нибудь может мне помочь?

Вот мой код модуля на основе наблюдателя:

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>

И stemver.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;
}

}

Головы вверх будут оценены!

Это было полезно?

Решение 3

Я действительно сделал это пару лет назад:

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

Наблюдатель.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;
    }
    }

Вы можете получить полный модуль здесь Администратор комментарий

Другие советы

РЕДАКТИРОВАТЬ:

Вы также можете сделать следующее, которое я бы порекомендовал в предыдущем решении, которое я опубликовал. Главным образом потому, что он не использует SetPost, что я бы считал страшным.

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>

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

Это сделало бы то же самое, за исключением того, что вы перехватываете модель, прежде чем она будет сохранена, что позволит вам изменить комментарий без необходимости использовать SetPost ().

Оригинальный пост: Вы можете сделать следующее:

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>

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

Это должно работать для вас.

Я думаю, что событие, которое вы наблюдаете, не существует.
Попробуйте это вместо этого controller_action_predispatch_adminhtml_sales_order_addcomment.
Комментарий отправлен на этот URL:MAGENTO_ROOT/index.php/admin/sales_order/addComment/order_id/ORDER_ID_HERE/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top