OpenERP 7 - Создать автоматическое сообщение журнала в поле "Записать заметку" как запись журнала истории

Сейчас я создаю модуль настройки для целей лабораторных испытаний в OpenERP 7. Пользователям потребуется ввести свои компоненты лабораторных испытаний и результаты здесь.

Теперь у меня есть поле, которое называется "Причина перемен". Я хотел бы знать метод, как я могу зарегистрировать ввод этого содержимого в виде сообщения "Записать заметку" для отображения внизу через mail.thread?

Шаг будет:

  1. Причина изменений (ROC) как обязательное поле

  2. Любые изменения в других моих полях будут вызывать мой метод onchange для очистки содержимого поля ROC.

  3. Если пользователь что-то изменил без ввода текста в поле ROC, а затем нажмите кнопку "Сохранить", появится сообщение об ошибке "Пожалуйста, введите причину изменения". Это отключит пользователя от сохранения этого.

  4. Если пользователь что-то изменил и введет текст в поле ROC, а затем сохранит, содержимое поля ROC будет создано в виде сообщения внизу (например, "Записать заметку") в качестве справочной и истории записи журнала.

Мой вопрос будет, как я могу выполнить шаги 3 и 4? Глубоко признателен за вашу помощь

2 ответа

Решение

Есть две возможности, но используемая модель должна наследовать email.thread! Но я думаю, что это наследство, потому что вы написали что-то о сообщениях болтовни.

  1. Используйте систему автоматического отслеживания Odoo (ранее OpenERP). Вам просто нужно добавить параметр track_visibility в определение поля, например (новый, а затем старый API)
roc = fields.Char(string="Reason For Changes", track_visibility="on_change")

_columns = {
    roc: fields.char(string="Reason For Changes", track_visibility="on_change"),
}
  1. Оставить сообщение на запись самостоятельно. email.thread идет с некоторыми простыми, но полезными методами. Одним из них является message_post(). Переопределите write() модели, как показано ниже (новый / старый API):
@api.multi
def write(self, vals):
    res = super(YourModel, self).write(vals)
    if 'roc' in vals:
        for your_model_record in self:
            your_model_record.message_post(vals.get('roc'))
    return res


def write(self, cr, uid, ids, vals, context=None):
    res = super(YourModel, self).write(vals)
    if 'roc' in vals:
        for your_model_record_id in ids:
        self.message_post(cr, uid, your_model_record_id, vals.get('roc')), context=context)
    return res

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

  def write(self, cr, uid, ids, vals, context=None):
      res = super(test_lab, self).write(cr, uid, ids, vals, context=context)        
      if 'ROC' in vals: 
          for lab in self.browse(cr, uid, ids, context=context):               
              self.message_post(cr,uid,[lab.id],vals.get('ROC'),context=context)                
      return res   

Надеюсь, это полезно. Спасибо!

Другие вопросы по тегам