Odoo13采购订单确认时按条件替换默认入库路线需求
Odoo 13采购订单确认时替换入库路线的实现方案
核心实现思路
重写采购订单的action_confirm确认方法,在原生确认逻辑执行完成后,根据预设条件遍历采购订单行,将默认入库路线替换为自定义路线。
具体代码实现
创建自定义模块,继承purchase.order模型并重写确认方法:
from odoo import models, api class PurchaseOrder(models.Model): _inherit = 'purchase.order' @api.multi def action_confirm(self): # 执行原生确认逻辑 res = super(PurchaseOrder, self).action_confirm() # 遍历订单行做条件判断与路线替换 for line in self.order_line: # 示例条件:产品所属类别ID为123且供应商ID为456 if line.product_id.categ_id.id == 123 and self.partner_id.id == 456: # 获取自定义入库路线(优先用ID,避免名称变更导致逻辑失效) custom_route = self.env['stock.location.route'].browse(789) if custom_route: line.route_id = custom_route return res
关键注意事项
- 提前在系统中创建并配置好自定义入库路线,确保路线包含正确的入库规则、目标库存位置等参数
- 条件判断优先使用记录ID而非名称,避免因名称修改导致逻辑失效
- 必须先调用
super()执行原生确认逻辑,否则会破坏采购订单的原有工作流 - 测试时覆盖满足/不满足条件的场景,验证采购订单行的
route_id是否正确更新
内部参考资料
- Odoo官方开发文档中关于模型继承与方法重写的章节
purchase.order模型action_confirm方法的原生逻辑说明stock.location.route模型的字段定义与使用规范
内容的提问来源于stack exchange,提问作者Raihan
相关产品推荐
相关产品推荐

