如何在Odoo中通过Python创建Backorder并跳过向导用户输入
Odoo 跳过向导自动生成交货单Backorder实现方法
原生Odoo中交货单验证时如果存在未交付的库存,会弹出stock.backorder.confirmation向导让用户选择是否生成欠单(Backorder),要跳过手动交互直接生成欠单,直接调用该向导的逻辑即可,效果和手动点击「Create Backorder」完全一致。
代码实现
你可以继承stock.picking模型新增自定义方法,参考代码如下:
from odoo import models, api class StockPickingInherit(models.Model): _inherit = 'stock.picking' def generate_backorder_without_wizard(self): """ 跳过向导自动为当前交货单生成Backorder 效果等价于手动点击验证 -> 选择创建Backorder """ # 过滤出可操作的有效交货单 valid_pickings = self.filtered(lambda p: p.state in ('assigned', 'partially_available')) if not valid_pickings: return # 执行原生验证逻辑,触发欠单判断 validate_res = valid_pickings.button_validate() # 如果返回欠单向导,说明需要生成Backorder if validate_res and validate_res.get('res_model') == 'stock.backorder.confirmation': backorder_wiz = self.env['stock.backorder.confirmation'].browse(validate_res['res_id']) # 调用向导的process方法,自动生成欠单 backorder_wiz.process() return
补充说明
- 上述代码适配Odoo 13+版本,Odoo 12及更低版本的向导方法名可能为
process_cancel_backorder/process_create_backorder,可根据你的版本调整对应方法 - 如果你不需要走前置验证逻辑,也可以直接调用
stock.picking模型自带的_create_backorder方法生成欠单:# 直接为指定交货单创建Backorder new_backorder = picking_id._create_backorder() - 生成的欠单会完全继承原交货单的合作伙伴、库存规则、单据关联等所有配置,和原生生成逻辑无差异
内容的提问来源于stack exchange,提问作者xixo222
相关产品推荐
相关产品推荐

