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

如何在Odoo中实现sale quotation确认自动转delivery/picking、sale order确认自动创建验证Invoice

Odoo两类销售业务自动化功能实现方案

一、销售报价单确认时自动完成交货/拣配单转移操作

支持两种实现路径,可根据业务复杂度选择:

1. 无代码配置方式(基于Odoo自带自动化行动)

  • 开启开发者调试模式,进入「设置」-「技术」-「自动化」-「自动行动」菜单
  • 新建自动行动,基础配置如下:
    • 模型:选择销售订单(sale.order)
    • 触发条件:记录更新时
    • 触发域:[('state', 'in', ('sale', 'done'))]
    • 触发时机:仅在更新时满足条件
  • 动作类型选择「执行Python代码」,填入以下逻辑:
for picking in record.picking_ids.filtered(lambda p: p.state not in ('done', 'cancel')):
    # 确认拣配单
    picking.action_confirm()
    # 自动分配库存
    if picking.state == 'assigned':
        picking.action_assign()
    # 完成转移
    for move in picking.move_ids:
        move.quantity_done = move.product_uom_qty
    picking.button_validate()
  • 保存自动行动并激活即可生效

2. 自定义代码实现(适合复杂业务场景)

继承sale.order模型,重写action_confirm方法,在原有确认逻辑执行后插入拣配自动处理逻辑:

from odoo import models, api
class SaleOrderInherit(models.Model):
    _inherit = 'sale.order'
    def action_confirm(self):
        res = super(SaleOrderInherit, self).action_confirm()
        for order in self:
            for picking in order.picking_ids.filtered(lambda p: p.state not in ('done', 'cancel')):
                picking.action_confirm()
                picking.action_assign()
                for move in picking.move_ids:
                    move.quantity_done = move.product_uom_qty
                picking.button_validate()
        return res

二、销售订单确认后自动创建并验证发票

同样支持无代码配置和自定义代码两种实现方式:

1. 无代码配置方式(基于Odoo自带自动化行动)

  • 进入开发者模式下的「自动行动」菜单,新建自动行动:
    • 模型:选择销售订单(sale.order)
    • 触发条件:记录更新时
    • 触发域:[('state', '=', 'sale'), ('invoice_status', '=', 'to invoice')]
  • 动作类型选择「执行Python代码」,填入以下逻辑:
# 自动创建发票
invoice = record._create_invoices()
# 自动验证发票
invoice.action_post()
  • 保存并激活即可,该配置仅对需开票的正常订单生效,不会触发退款等异常场景的自动操作

2. 自定义代码实现

可以在上述sale.order的action_confirm方法中追加发票处理逻辑,代码示例:

def action_confirm(self):
    res = super(SaleOrderInherit, self).action_confirm()
    # 原有拣配自动处理逻辑省略
    for order in self.filtered(lambda o: o.invoice_status == 'to invoice'):
        invoice = order._create_invoices()
        invoice.action_post()
    return res

注意事项

  • 自动处理逻辑建议增加异常捕获,避免库存不足、财务配置缺失等异常场景导致订单确认失败
  • 多步拣配(如入库→质检→发货)的场景需要适配对应节点的状态判断逻辑
  • 如果业务规则要求交货后才开票,需要调整触发逻辑,改为拣配单完成后再触发发票自动创建流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:51:02