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
相关产品推荐
相关产品推荐

