【问题标题】:Notify Maintenance Team members about new request by inheriting the MaintenanceRequest model通过继承 MaintenanceRequest 模型通知维护团队成员有关新请求
【发布时间】:2019-08-16 07:41:12
【问题描述】:

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

目前,我通过这样的自动操作处理此功能:

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

或者有一种方法可以将自己连接到用于发送通知的预制函数,并告诉它也为团队成员运行?我不想将他们全部添加为关注者(因为他们会收到关于请求的不必要更新的垃圾邮件)——只是为了通知他们新请求,然后他们可以在需要时关注它。

【问题讨论】:

    标签: python odoo odoo-12


    【解决方案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
    

    【讨论】:

    • 感谢您的回复!但我无法让这段代码正常工作。没有电子邮件与它一起发送。为什么你把 super() 留空了?这是我的models.py:pastebin.com/G5AYAPXu。这是 mail_template.xml:pastebin.com/wCXy6zNq。这是清单:pastebin.com/6xC1XyTH
    • super() 从 Python 3 开始是可能的。调用你的类 MaintenanceRequest 并完全删除 _name。其余的在我看来还可以。
    • 所以我这样做了,但遗憾的是仍然没有生成电子邮件。这是我的models.py 现在:pastebin.com/a3T8VgDW。新的电子邮件模板在开发者 UI 中可见。
    • 查看日志以获取完整错误。但至少 Odoo 尝试渲染一个,所以你走对了。
    • 你是对的。内部日志/var/log/odoo/odoo-server.log 我看到了这个:jinja2.exceptions.UndefinedError: 'odoo.api.maintenance.request object' has no attribute 'partner_id'。原来是邮件模板中的这行代码有问题:&lt;field name="lang"&gt;${object.partner_id.lang}&lt;/field&gt;。我删除了它,现在它工作正常(我必须删除以前创建的模板,然后再次加载模块)。
    猜你喜欢
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 2022-09-29
    • 2021-06-12
    • 1970-01-01
    相关资源
    最近更新 更多