You need to enable JavaScript to run this app. Odoo11 实现取消供应商账单时填内部日志备注(带向导)开发问题
优惠活动
大模型
产品
解决方案
定价
更多

Odoo11 实现取消供应商账单时填内部日志备注(带向导)开发问题

Odoo11 供应商账单取消弹窗功能调整方案

原代码存在的问题

  • 两次重复查询待操作的账单记录,存在冗余数据库调用
  • 缺失内部日志写入逻辑:仅修改了自定义reason字段,未调用ORM接口生成留存于账单的内部备注
  • 写操作返回值不满足弹窗交互要求,提交后可能出现视图异常

调整后的可运行代码

def cancel_reason_bill(self):
    # 一次性获取所有待操作的账单记录,避免重复查询
    active_bills = self.env['account.invoice'].browse(self._context.get("active_ids"))
    for bill in active_bills:
        # 写入账单自定义的取消原因字段
        bill.write({'reason': self.reason})
        # 将取消原因以内部日志形式写入账单
        bill.message_post(
            body=f"账单取消操作原因:{self.reason}",
            message_type='notification',
            is_internal=True,
            subject="取消操作内部备注"
        )
        # 将账单状态重置为草稿
        bill.write({'state': 'draft'})
    # 返回标准关闭弹窗动作,自动刷新当前视图
    return {'type': 'ir.actions.act_window_close'}

核心逻辑说明

  • Odoo 11中所有继承mail.thread的模型(包含account.invoice),其内部Log Note本质是标记为内部属性的消息记录。通过message_post方法写入记录时,设置is_internal=True,生成的内容就会直接展示在账单的内部日志页签中,且不会触发对外的邮件通知。
  • 移除了原代码中非ORM标准的.update()调用,统一使用write方法更新字段,避免运行时出现属性不存在的报错。
  • 调整为单条账单遍历处理逻辑,避免单条记录操作异常时导致整批操作失败。

内容的提问来源于stack exchange,提问作者Elhagag Abdalla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 16:15:11