You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo 17 API发票邮件附件生成及自动配置技术咨询

解决方案

一、通过Odoo API直接获取发票PDF的Base64编码

Odoo内置了报表渲染API,能直接生成发票PDF并返回Base64格式数据,无需手动处理文件编码。你可以调用report模型的render_qweb_pdf方法:

API调用示例

{
    "jsonrpc": "2.0",
    "method": "call",
    "params": {
        "service": "object",
        "method": "execute_kw",
        "args": [
            "{{db}}",
            "{{uid}}",
            "{{password}}",
            "report",
            "render_qweb_pdf",
            ["account.report_invoice", [17]]  // 第一个参数是发票报表的XML ID,第二个是目标发票ID列表
        ]
    }
}

返回结果说明

调用后返回的result[0]就是PDF文件的Base64编码字符串,可直接填入ir.attachment.create的datas字段,无需额外编码处理。

二、配置Odoo自动添加发票附件(无需手动API处理)

如果不想通过API手动创建附件,可通过以下两种方式让Odoo自动处理:

1. 修改邮件模板,自动包含PDF附件

打开Odoo后台设置 > 技术 > 邮件 > 邮件模板,找到发票对应的邮件模板(通常是account.email_template_edi_invoice):

  • 编辑模板,切换到附件标签页
  • 在动态附件区域点击添加,选择报表,再选中发票报表account.report_invoice
  • 保存模板后,后续发送发票邮件时,系统会自动生成PDF并作为附件添加

2. 用自动化动作触发自动添加附件

如果需要按特定条件(比如发票状态变为已验证时)自动添加附件:

  • 打开设置 > 自动化 > 自动化动作,新建动作
  • 模型选择account.move(发票模型)
  • 触发条件设为“创建后”或“字段值更新”(比如监控state字段变为posted)
  • 在动作标签页选择“执行Python代码”,添加以下代码:
import base64
from odoo import models

# 生成PDF并创建附件
pdf_content, _ = self.env.ref('account.report_invoice').render_qweb_pdf([self.id])
self.env['ir.attachment'].create({
    'name': f"Invoice_{self.name}.pdf",
    'type': 'binary',
    'datas': base64.b64encode(pdf_content).decode(),
    'res_model': 'account.move',
    'res_id': self.id,
    'mimetype': 'application/pdf'
})
  • 保存动作后,符合条件的发票会自动生成并添加PDF附件,发送邮件时会自动包含该附件

内容的提问来源于stack exchange,提问作者Kamil Wolski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 15:53:23