通过继承MaintenanceRequest模型来通知维护团队成员有关新请求的信息

时间:2019-08-16 07:41:12

标签: python odoo odoo-12

当该特定团队内部创建新请求时,我想通知所有维护团队成员。

此刻,我已通过如下自动操作来处理此功能:

enter image description here

Python代码:

body_html = """
    ...
""" + record.name + """
    ...
"""

num_of_members = len(record.maintenance_team_id.member_ids)

if num_of_members:
  members_emails = []

  for i in range(num_of_members):
    members_emails.append(record.maintenance_team_id.member_ids[i].email)

  email_to = ",".join(members_emails)

  mail_pool = env['mail.mail']
  values={}
  values.update({'subject': 'New maintenance request - ' + record.company_id.name})
  values.update({'email_to': email_to})
  values.update({'body_html': body_html})
  msg_id = mail_pool.create(values)

  if msg_id:
    mail_pool.send([msg_id])

但是现在我想将此解决方案转换为自定义模块。正确的方法是什么?

我应该继承maintenance.request,重写create方法并以某种方式(准确度如何)以硬编码的电子邮件正文发送我的电子邮件吗?

class MaintenanceRequest(models.Model):
    _inherit = 'maintenance.request'

    @api.model
    def create(self, vals):
        req = super(MaintenanceRequest, self).create(vals)

        body_html = """
            ...
        """ + req.name + """
            ...
        """
        # ...
        if msg_id:
            mail_pool.send([msg_id])

        return req

或者有一种方法可以让我自己迷惑到预先创建的功能来发送通知,并告诉它也可以为团队成员运行?我不想将所有这些人都添加为关注者(因为他们会收到关于该请求的不必要更新的垃圾邮件)-只是通知他们有关新请求的信息,然后他们可以在需要时关注它。

1 个答案:

答案 0 :(得分:1)

我将在自定义模块中创建一个mail.template并在其中动态设置成员电子邮件列表。 Odoo中已经有一些简单的邮件模板示例可供研究。

在代码中,您只需要使用此模板发送邮件即可。

<record id="my_mail_template" model="mail.template">
    <field name="name">My Mail Template</field>
    <field name="partner_to">${",".join(map(str, object.maintenance_team_id.member_ids.mapped('partner_id').ids))}</field>
    <!-- add all other required fields -->
</record>
@api.model
def create(self, values):
    record = super().create(values)
    template_id = self.env.ref('my_module.my_mail_template').id
    if template_id:
        record.message_post_with_template(template_id)
    return record