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

如何调整Odoo stock.picking服务器动作代码实现合并开票并调用自定义动作

调整Odoo服务器动作实现同客户销售订单合并开票

原代码会为每个出库单对应的销售订单单独生成发票,要实现像销售订单列表视图那样合并同一客户的订单开票,需按以下思路调整代码:

  1. 先收集所有符合条件的销售订单并去重,避免重复处理同一订单
  2. 将销售订单按客户分组,确保同一客户的订单批量处理
  3. 对每组客户的订单批量生成发票,Odoo会自动合并符合条件的订单为一张发票
  4. 生成发票后打开发票,调用指定ID的自定义服务器动作,并更新对应出库单的状态字段

调整后的完整代码

# 收集所有符合条件的销售订单并去重
sale_orders = set()
for record in records:
    if record.picking_type_code == 'outgoing' and record.sale_id:
        sale_orders.add(record.sale_id)

# 按客户分组销售订单
partner_sales = {}
for so in sale_orders:
    partner_id = so.partner_id.id
    if partner_id not in partner_sales:
        partner_sales[partner_id] = env['sale.order'].browse()
    partner_sales[partner_id] += so

# 遍历每个客户组处理开票逻辑
for partner_id, sales in partner_sales.items():
    # 批量创建发票,同一客户的订单会自动合并
    invoice_ids = sales.action_invoice_create()
    invoices = env['account.invoice'].browse(invoice_ids)
    
    if invoices:
        for invoice in invoices:
            # 打开发票
            invoice.action_invoice_open()
            # 调用ID为1183的自定义服务器动作
            env['ir.actions.server'].browse(1183).run(invoice)
            
            # 更新对应出库单的错误信息字段
            for picking in records:
                if picking.sale_id in sales:
                    picking.write({'x_error': f'FACTUUR OKE: ({invoice.number})'})
    else:
        # 该客户组未生成发票,更新对应出库单信息
        for picking in records:
            if picking.sale_id in sales:
                picking.write({'x_error': 'No invoices found for the sale orders'})

# 处理无销售订单关联的出库单
for record in records:
    if record.picking_type_code == 'outgoing' and not record.sale_id:
        record.write({'x_error': 'No sale order associated with the record'})

关键调整说明

  • 去重处理:用集合存储销售订单,避免多个出库单关联同一订单时重复操作
  • 按客户分组:将同一客户的订单归为一组,匹配销售订单列表视图合并开票的逻辑,确保同客户订单批量生成一张发票
  • 批量开票:调用sales.action_invoice_create()时传入同一客户的订单集合,Odoo会自动根据客户、币种等合并规则生成单张发票
  • 调用自定义动作:通过env['ir.actions.server'].browse(1183).run(invoice)触发指定ID的服务器动作,把生成的发票作为操作对象传入
  • 状态更新:根据开票结果批量更新对应出库单的x_error字段,每个出库单都能得到明确的操作反馈

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:42:49