odoo销售流程代码简单剖析

odoo开发技术交流群【73934270

1、新建销售报价单


2、点击确认订单,将报价单转为销售订单,同时生成对应出库单,相关代码:

确定按钮执行的方法为 sale.order 的 action_button_confirm 方法,具体代码:

def action_button_confirm(self, cr, uid, ids, context=None):
    if not context:
        context = {}
    assert len(ids) == 1, 'This option should only be used for a single id at a time.'
    self.signal_workflow(cr, uid, ids, 'order_confirm')
    if context.get('send_email'):
        self.force_quotation_send(cr, uid, ids, context=context)
    return True
可以看到代码有触发工作流,来确认销售订单;借住工作流视图


我们是从 draft 执行 order_confirm 进入router,此处我们打开看到,执行了 sale.order 类的 action_wait 方法,具体代码:

def action_wait(self, cr, uid, ids, context=None):#只处理自身的销售订单和产品清单的信息更新
    context = context or {}
    for o in self.browse(cr, uid, ids):
        if not any(line.state != 'cancel' for line in o.order_line):
            raise osv.except_osv(_('Error!'),_('You cannot confirm a sales order which has no line.'))
        noprod = self.test_no_product(cr, uid, o, context)
        if (o.order_policy == 'manual') or noprod:
            self.write(cr, uid, [o.id], {
 'state': 'manual', 'date_confirm': fields.date.context_today(self, cr, uid, context=context)})
        else:
            self.write(cr, uid, [o.id], {
 'state': 'progress', 'date_confirm': fields.date.context_today(self, cr, uid, context=context)})
        self.pool.get('sale.order.line').button_confirm(cr, uid, [x.id for x in o.order_line if x.state != 'cancel'])
    return True
代码逻辑很清晰,不做进一步分析,进入 router 之后,发票部分我们暂时忽略;我们来看 wait_ship 部分,通过 sale.order 类的 procurement_needed 方法的返回值来确认程序的继续走向,具体代码:

def procurement
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值