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 {}

经测试后,可以达到预期的处理效果。
在使用 Odoo 进行需求分析时,通常需要结合企业的业务流程和信息化目标,系统性地梳理功能需求与非功能需求。以下是基于 Odoo需求分析方法、配置和流程概述: ### 3.1 需求收集与识别 在项目初期,应组织与企业关键用户和管理层的访谈,明确业务目标、痛点和期望。需求可包括: - 各部门的业务流程现状与改进需求 - 现有系统的痛点和待优化环节 - 新功能模块的启用需求(如 CRM、MRP、HR 等) - 用户权限与角色定义需求 - 报表、仪表盘及数据分析需求 需求收集应形成文档,便于后续分析与确认。 ### 3.2 需求分析与映射 将收集到的需求Odoo 标准功能进行比对,判断哪些需求可以通过 Odoo 现有模块满足,哪些需要定制开发或第三方插件支持。例如: - 销售管理需求是否可以通过 Odoo CRM 和 Sales 模块实现 - 采购流程是否符合 Odoo Purchase 模块的标准流程 - 是否需要自定义审批流程或字段扩展 在这一阶段,可以使用流程图或用例图来辅助分析,帮助理解业务流程与 Odoo 功能之间的契合度[^1]。 ### 3.3 系统配置与流程设计 根据需求分析结果,进行 Odoo 系统的模块启用与配置。包括: - **模块启用**:根据企业需求选择并启用相应模块,如销售、采购、库存、财务等 - **用户界面配置**:调整菜单结构、字段可见性、视图布局等 - **工作流程设计**:配置审批流程、状态转换、自动化规则等 - **数据字典定义**:定义产品分类、客户分组、会计科目等基础数据结构 例如,在 Odoo 中配置销售流程时,可以定义销售订单的审批规则: ```python # 示例:在 Odoo 中定义销售订单状态自动转换规则 class SaleOrder(models.Model): _inherit = 'sale.order' def action_confirm(self): # 自定义确认逻辑,如库存检查、信用额度验证 res = super(SaleOrder, self).action_confirm() # 添加自定义动作,如发送邮件通知 self.message_post(body="订单已确认") return res ``` ### 3.4 数据迁移与测试 在系统配置完成后,需要制定数据迁移计划,包括: - 确定迁移数据的范围(如客户、供应商、产品、历史订单等) - 数据清洗与格式转换 - 使用 Odoo 数据导入工具或 API 接口进行数据迁移 - 进行数据完整性与准确性验证 同时,应构建测试环境,模拟真实业务场景进行功能测试和用户验收测试(UAT),确保系统配置符合预期需求。 ### 3.5 用户培训与上线准备 最后,组织用户培训,确保关键用户和普通用户都能熟练使用 Odoo 系统。上线前应完成以下工作: - 编操作手册和常见问题文档 - 安排培训课程和实操演练 - 建立上线后的支持机制和问题反馈渠道
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值