odoo-12: как решить проблему с методом write () - PullRequest
0 голосов
/ 31 октября 2019

В моем случае я унаследовал форму crm и добавил одно поле mamy2many с этим именем [Назначить оценку], когда я выбираю пользователей из этого поля и сохраняю запись о том, что выбранные пользователи добавляются в «Добавить подписчиков», а также отправляют почту. Теперь проблема в том, что, когда я меняю карточку канбан с одного этапа на другой, то в это время, если в поле оценки формы назначено несколько пользователей, им также отправляется письмо.

но я хочу отправлять почту только тогда, когда я открываю запись и выбираю пользователей из поля оценки, а затем нажимаю кнопку «Сохранить» только для того, чтобы я хотел отправить почту. не когда я меняю карту канбан с одного этапа на другой.

если вы знаете это, пожалуйста, дайте мне знать.

@api.model
def create(self, vals):
    lead_res = super(CrmLead, self).create(vals)
    for rec in lead_res:
        if rec.estimation_id:
            partner_ids = []
            for est_rec in rec.estimation_id:
                if est_rec.partner_id and est_rec.partner_id.email:
                    user_name = self.env.user.name_get()[0][1]
                    partner_ids.append(est_rec.partner_id.id)
                    template_obj = self.env['mail.mail']
                    template_data = {
                                    'subject': 'New Estimation Asign : ',
                                    'body_html': "Hello,</br><h5>" + user_name + " invited you to follow Lead/Opportunity document : " + rec.name + "</h5>",
                                    'email_from': self.env['mail.message']._get_default_from(),
                                    'email_to': est_rec.partner_id.email
                                    }
                    template_id = template_obj.create(template_data)
                    template_obj.send(template_id)
            if partner_ids:
                rec.message_subscribe(partner_ids, None)
    return lead_res

@api.multi
def write(self, vals):
    res = super(CrmLead, self).write(vals)
    for rec in self:
        if rec.estimation_id:
            partner_ids = []
            for est_rec in rec.estimation_id:
                if est_rec.partner_id and est_rec.partner_id.email:
                    user_name = self.env.user.name_get()[0][1]
                    partner_ids.append(est_rec.partner_id.id)
                    template_obj = self.env['mail.mail']
                    template_data = {
                                    'subject': 'New Estimation Asign : ',
                                    'body_html': "Hello,</br><h5>" + user_name + " invited you to follow Lead/Opportunity document : " + rec.name + "</h5>",
                                    'email_from': self.env['mail.message']._get_default_from(),
                                    'email_to': est_rec.partner_id.email
                                }
                    template_id = template_obj.create(template_data)
                    print('===================To sent ==================', est_rec.partner_id.email)
                    template_obj.send(template_id)
                    rec.message_subscribe(partner_ids, None)
                    #message_unsubscribe
                    message_partner_ids = rec.message_partner_ids.ids
                    est_ids = [est_rec.partner_id.id for est_rec in rec.estimation_id] + [self.env.ref('base.partner_root').id]
                    unsub_partners = set(message_partner_ids) - set(est_ids)

                    if list(unsub_partners):
                        rec.message_unsubscribe(list(unsub_partners))
        else:
            print("+++++============= Else Part =============+++++")
    return res

1 Ответ

1 голос
/ 31 октября 2019

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

if u'estimation_id' in vals and rec.estimation_id:

РЕДАКТИРОВАТЬ
Следующий код будет вычислять новых добавленных пользователей:

user_ids = {rec.id: [user_id.id for user_id in rec.estimation_id] for rec in self}
res = super(CrmLead, self).write(vals)
for rec in self:
    new_user_ids = [user.id for user in rec.estimation_id if user.id not in user_ids[rec.id]]
...