уведомление внутри odoo при создании записи

Я использую Odoo 11 и хочу уведомить пользователя, когда создается определенная запись, не по электронной почте, а внутри Odoo, так что есть такая вещь:  введите описание изображения здесь Я думаю, это должно быть довольно просто со стандартными функциями Odoo, но я не знаю, как это сделать.

То, что я пробовал, - это автоматическое действие, которое добавляет пользователей, которые должны быть уведомлены в качестве подписчиков (действие: добавить подписчиков, условие триггера: при создании).

Далее я наследую в своей модели от mail.thread, отслеживаю несколько полей и определяю для них подтип. И это действительно работает, чтобы получать уведомления об изменениях полей, но при создании записи нет сообщения. Почему это? Может быть, создание не считается изменением? Или, может быть, автоматическое действие выполняется слишком поздно, потому что он должен следовать ДО того, как будет создана запись?

Альтернативой, которую я вижу, было бы перезаписать метод create (...) и отправить оттуда какое-то сообщение. Но как это сделать? Такое ощущение, что есть что-то очевидное, чего я не вижу. То есть есть примечание, что запись в чате все равно была создана. Все, что я хочу сделать, - это оставить это сообщение в почтовом ящике пользователя.

Пример кода:

class MyModel(models.Model):
    _name = 'my_module.my_model'
    _inherit = ['mail.thread', 'mail.activity.mixin']
    name = fields.Char(string='Name', track_visibility=True)

    def _track_subtype(self, init_values):
        if 'name' in init_values:
            return 'mail.mt_comment'
        return super(Alert, self)._track_subtype(init_values)

person mihca    schedule 23.07.2018    source источник


Ответы (1)


Я нашел решение. Первый шаг - добавить автоматическое действие, которое добавляет подписчиков к вновь созданным записям. К сожалению, это действие выполняется после создания записи, поэтому сообщения о создании не будут отправляться подписчикам.

Мое решение - отправить еще одно сообщение о создании в методе записи, но, конечно, только для вновь созданных записей, которые я обнаруживаю с помощью логического флага.

Вот код:

class MyModel(models.Model):
    _name = 'my_module.my_model'
    _inherit = ['mail.thread', 'mail.activity.mixin']
    name = fields.Char(string='Name', track_visibility=True)
    newly_created = fields.Boolean('Newly Created')

    @api.model
    def create(self, values):
        values['newly_created'] = True # Set the flag to true for new records
        return super(Alert, self).create(values)

    @api.multi
    def write(self, values):
        res = super(MyModel, self).write(values)
        if(self.newly_created):
            self.message_post(body=_('Created New Record'), subtype='mail.mt_comment', author_id=self.create_uid.partner_id.id)
            # Set the flag to false so we post the message only once
            self.newly_created = False

Важной деталью является то, что super(MyModel, self).write(values) должен быть перед отправкой сообщения и перед обновлением флага.

Обратите внимание, что это сообщение записи будет вызываться Odoo сразу после создания модели, потому что автоматическое действие добавляет последователей к вновь созданной записи. Так что сейчас у меня это работает рука об руку, но только при наличии такого автоматизированного действия.

person mihca    schedule 23.07.2018