Odoo覆写需求计算方法问题

本文介绍了一种在覆写物料需求计算方法的同时处理快递单创建的实现方案。通过调整数据库连接游标确保能正确查询待处理记录,并完成后续业务逻辑。

因公司业务需求,想在产生仓库物料调拨的时候,同时产生一笔快递单(因为公司不同的仓库不在同一个地方),调拨单是在计算物料需求时产生的,所以我就想覆写计算物料需求的方法,在执行完原来的业务逻辑以后,再根据内部需求处理后面的逻辑。

开始写的方法如下:

class rhwl_order(osv.osv):
    _inherit = "procurement.order"

    def run_scheduler(self, cr, uid, use_new_cursor=False, company_id=False, context=None):
        super(rhwl_order,self).run_scheduler(cr,uid,use_new_cursor,company_id,context)
        move_obj = self.pool.get("stock.move")
        move_ids = move_obj.search(cr,uid,[('state','not in',['done','cancel']),('express_no','=',False)],context=context)

调用完父对象方法以后,马上执行search查询待处理的资料,但奇怪的是每次搜索到的内容都是为空。

后来跟踪调用发现此方法是系统另外进程来处理的,与当前操作的进程不一样,代码可参考addons\procurement\wizard\schedulers_all.py中的procure_calculation方法。

threaded_calculation = threading.Thread(target=self._procure_calculation_all, args=(cr, uid, ids, context))
threaded_calculation.start()

在另外的进程处理中,cr变量代表的数据库连接游标已经发生了变化,所以我在后面的search中,使用原来的cr变量,可能就找不到数据了。

参考其它方法的说明以后,重新修改代码如下:

class rhwl_order(osv.osv):
    _inherit = "procurement.order"

    def run_scheduler(self, cr, uid, use_new_cursor=False, company_id=False, context=None):
        super(rhwl_order,self).run_scheduler(cr,uid,use_new_cursor,company_id,context)
        try:
            if use_new_cursor:
                cr = openerp.registry(cr.dbname).cursor()
            move_obj = self.pool.get("stock.move")#('warehouse_id','=',1),('rule_id','>',0),
            move_ids = move_obj.search(cr,uid,[('state','not in',['done','cancel']),('express_no','=',False)],context=context)

            #内部业务逻辑处理

            if use_new_cursor:
                cr.commit()
        finally:
            if use_new_cursor:
                try:
                    cr.close()
                except Exception:
                    pass
        return {}

经测试后,可以达到预期的处理效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值