Odoo 10-用于替换邮件模板的自定义模块
我想编写一个自定义模块来替换邮件模板 这些模板包含在基本Odoo插件中,例如销售:Odoo 10-用于替换邮件模板的自定义模块,odoo,odoo-10,Odoo,Odoo 10,我想编写一个自定义模块来替换邮件模板 这些模板包含在基本Odoo插件中,例如销售: sale.ordertemplateì由文件/sale/data/mail_template_data.xml 该模板如下所示: 销售订单-通过电子邮件发送 ... 由于自定义模块希望替换此标准基本模板: 自定义模块能否提供具有相同id的记录来替换此邮件模板 在中应该写什么 如果模块销售更新,会发生什么情况 Odoo 10社区版。要替换电子邮件模板,只需在模板名称前添加加载项名称,后跟点(.),并确保从前
sale.order
templateì由文件/sale/data/mail_template_data.xml
该模板如下所示:
销售订单-通过电子邮件发送
...
由于自定义模块希望替换此标准基本模板:
- 自定义模块能否提供具有相同id的记录来替换此邮件模板
- 在
中应该写什么 - 如果模块
更新,会发生什么情况销售
Odoo 10社区版。要替换电子邮件模板,只需在模板名称前添加加载项名称,后跟点(.),并确保从前端删除默认电子邮件模板。然后更新您的自定义插件。这将替换旧模板 例如:
销售报价单
${(object.user_id.email和“%s%s%”(object.user_id.name,object.user_id.email)或“”)| safe}
${object.company_id.name}${object.state in('draft','sent')和'quote'或'Order'}(Ref${object.name或'n/a'})
${object.partner\u invoice\u id.id}
....
....
销售订单-通过电子邮件发送
...
请将您的代码添加到
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<delete model="mail.template" search="
[('id','=',ref('sale.email_template_edi_sale'))]"/>
<!--Email template -->
<record id="sale.email_template_edi_sale" model="mail.template">
<field name="name">Sales Order - Send by Email</field>
...
</odoo>
销售订单-通过电子邮件发送
...
这将删除原始邮件模板,并添加一个具有相同ID的新模板,以便不会干扰odoo功能。如果不删除原始模板,您将丢失原始模块字段,某些内容将停止工作。而是更改模板的ir.model.data中的
noupdate
值
要在模块更新时自动执行此操作,请执行以下操作:
- 修改模型“ir.model.data”并添加
方法,在models文件夹中创建ir\u model\u data.py(修改uuu init\uuuuu.py以包含新文件):allow\u update
- 在记录更新之前,将函数调用元素添加到
,并传递原始模块名称、外部\u id和“mail.template”:allow_update
<?xml version="1.0" encoding="utf-8"?> <odoo> <data noupdate="0"> <function model='ir.model.data' name='allow_update'> <value>sale</value> <value>email_template_edi_sale</value> <value>mail.template</value> </function> <record id="sale.email_template_edi_sale" model="mail.template" > <field name="body_html" type="html"> <div style="margin: 0px; padding: 0px;"> <p style="margin: 0px; padding: 0px; font-size: 13px;"> % set doc_name = 'quotation' if object.state in ('draft', 'sent') else 'order' Dear ${object.partner_id.name}
销售 电子邮件\模板\电子数据交换\销售 邮件模板
%如果object.state在('draft','sent')中,则设置doc_name='quote',否则为'order' 亲爱的${object.partner\u id.name}
标记的示例。这不起作用。首先,您不能将代码放在
之前,这将不会添加具有完全相同ID的新模板-而不是sale。email\u template\u edi\u sale将有自定义模块。email\u template\u edi\u sale
from odoo import models, fields, api
class IrModelData(models.Model):
_inherit = 'ir.model.data'
@api.model
def allow_update(self, module, name, model):
self.search([('module', '=', module), ('name', '=', name), ('model', '=', model)])[0].noupdate = False
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="0">
<function model='ir.model.data' name='allow_update'>
<value>sale</value>
<value>email_template_edi_sale</value>
<value>mail.template</value>
</function>
<record id="sale.email_template_edi_sale" model="mail.template" >
<field name="body_html" type="html">
<div style="margin: 0px; padding: 0px;">
<p style="margin: 0px; padding: 0px; font-size: 13px;">
% set doc_name = 'quotation' if object.state in ('draft', 'sent') else 'order'
Dear ${object.partner_id.name}