Odoo 10 - 用于替换邮件模板的自定义模块

时间:2018-02-18 19:17:54

标签: odoo odoo-10

我想编写一个自定义模块来替换邮件模板。

这些模板包含在基本的Odoo插件中,例如sale:

文件sale.order

提供的/sale/data/mail_template_data.xml模板

此模板如下:

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data noupdate="1">
    <!--Email template -->
    <record id="email_template_edi_sale" model="mail.template">
        <field name="name">Sales Order - Send by Email</field>¬

    ...
</odoo>

由于自定义模块要替换此标准基本模板:

  • 自定义模块是否可以提供具有相同ID的记录来替换此邮件模板?
  • <data noupdate>中应该写什么?
  • 如果更新模块sale会发生什么?

Odoo 10社区版。

3 个答案:

答案 0 :(得分:3)

要替换电子邮件模板,只需在模板名称前面添加插件名称后跟点(。),并确保从前端删除默认电子邮件模板。然后更新您的自定义插件。这将取代旧模板。

示例:

<record id="sale.email_template_edi_sale" model="mail.template">
    <field name="name">Sales Quotation</field>
    <field name="email_from">${(object.user_id.email and '%s &lt;%s&gt;' % (object.user_id.name, object.user_id.email) or '')|safe}</field>
    <field name="subject">${object.company_id.name} ${object.state in ('draft', 'sent') and 'Quotation' or 'Order'} (Ref ${object.name or 'n/a' })</field>
    <field name="partner_to">${object.partner_invoice_id.id}</field>
    ....
    ....
</record>

答案 1 :(得分:2)

location / {
    try_files $uri $uri/ /index.php?$query_string;
    fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

请将您的代码添加到

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data noupdate="1">
    <!--Email template -->
    <record id="email_template_edi_sale" model="mail.template">
        <field name="name">Sales Order - Send by Email</field>

    ...
</odoo>

这将删除原始邮件模板,并添加一个具有相同ID的新模板,以便不扰动odoo功能。

答案 2 :(得分:0)

不要删除原始模板,您将丢失原始模块字段,并且某些事情将停止工作。而是为模板更改ir.model.data中的noupdate值。

要在模块更新时自动执行此操作:

  • 修改模型'ir.model.data'并添加一个allow_update方法,在models文件夹中创建一个 ir_model_data.py (修改__init__.py以包括新文件) :

    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
    
  • 在记录更新之前将函数调用元素添加到allow_update并传递原始模块名称,external_id和'mail.template':

    <?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}