Odoo10销售确认后将导航菜单从报价单切换为销售订单的实现问题
Odoo 10:销售订单确认后自动切换导航菜单到销售订单
我来帮你搞定这个问题!在Odoo 10里,直接在action_confirm里调用菜单动作没效果,主要是因为这个方法是后台逻辑,前端的导航切换需要通过返回特定的动作来触发。下面给你一个可行的实现方案:
实现思路
Odoo的导航菜单是和当前页面绑定的视图动作关联的,所以我们需要让action_confirm执行完成后,返回销售订单对应的视图动作,这样系统会自动切换到对应的导航菜单。
具体代码实现
在你的销售订单模型(sale.order)中重写action_confirm方法,保留原有业务逻辑的同时,最后返回销售订单的视图动作:
from odoo import api, models class SaleOrder(models.Model): _inherit = 'sale.order' @api.multi def action_confirm(self): # 先执行你原有的业务逻辑 if self.partner_id.pet_names: for record in self.partner_id.pet_names: if record == self.pet_names_info: if self.order_line: for s in self.order_line: if s.product_id: if self.ser1 or self.ind_ser1: # 这里继续你的原有业务代码即可 pass # 必须调用父类的确认方法,保证Odoo原生的订单确认流程正常执行 super(SaleOrder, self).action_confirm() # 获取销售订单列表视图的系统动作,返回后会自动切换导航菜单并跳转到列表页 sale_order_action = self.env.ref('sale.action_orders') # 如果想确认后停留在当前订单的表单页面,替换成下面的代码: # sale_order_action = self.env.ref('sale.view_order_form').read()[0] # sale_order_action['res_id'] = self.id return sale_order_action
关键说明
- 不要跳过
super()调用:这一步能保证Odoo原生的订单状态变更、库存预留等逻辑正常运行。 - 动作引用的选择:
sale.action_orders是销售订单列表视图的动作,返回后会跳转到列表页,导航菜单自动切换到“销售订单”。- 如果想停留在当前订单的表单页,就用
sale.view_order_form,并设置res_id为当前订单ID,这样页面会刷新为已确认的订单表单,同时导航菜单也会切换过去。
- 之前尝试失败的原因:直接在后台调用菜单动作只是执行了动作定义,但没有把动作返回给前端,前端不会触发页面和导航的切换。只有让
action_confirm返回动作,前端才会响应并完成菜单切换。
内容的提问来源于stack exchange,提问作者Pawan Kumar Sharma
相关产品推荐
相关产品推荐

