通过继承 MaintenanceRequest 模型将新请求通知维护团队成员
Notify Maintenance Team members about new request by inheriting the MaintenanceRequest model
我想在特定团队内部创建新请求时通知所有维护团队成员。
目前我通过这样的自动操作处理此功能:
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
,重写创建方法并以某种方式(具体如何?)使用硬编码的电子邮件正文发送我的电子邮件?
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
或者有一种方法可以让我自己连接到一个用于发送通知的预制函数,然后只告诉 运行 给团队成员吗?我不想将他们全部添加为关注者(因为他们会收到有关请求的不必要更新的垃圾邮件)- 只是通知他们有关新请求的信息,然后他们可以在需要时关注它。
我会在自定义模块中创建一个 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
我想在特定团队内部创建新请求时通知所有维护团队成员。
目前我通过这样的自动操作处理此功能:
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
,重写创建方法并以某种方式(具体如何?)使用硬编码的电子邮件正文发送我的电子邮件?
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
或者有一种方法可以让我自己连接到一个用于发送通知的预制函数,然后只告诉 运行 给团队成员吗?我不想将他们全部添加为关注者(因为他们会收到有关请求的不必要更新的垃圾邮件)- 只是通知他们有关新请求的信息,然后他们可以在需要时关注它。
我会在自定义模块中创建一个 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