Odoo 14.00 Enterprise在线签署销售订单方法重写咨询
Odoo 14.0 企业版在线签署销售订单:模块与触发方法解析
功能所属模块
- 销售订单在线签署的核心逻辑归属
sale模块,电子签名能力依赖企业版专属的sign模块,客户门户端的交互流程由portal模块配合实现。
客户点击签署按钮触发的关键流程与方法
- 门户端入口:客户在门户页面点击签署按钮时,首先触发
sign模块控制器(sign/controllers/portal.py)中对应路由/my/sign/request/<int:sign_request_id>/validate的处理方法。 - 核心签名验证方法:上述控制器方法最终调用
sign.request模型的validate方法,完成签名有效性校验。 - 默认订单更新逻辑:签名验证通过后,默认流程会调用
sale.order模型的action_confirm方法完成销售订单确认——这正是你需要拦截的环节。
重写方案(实现自定义状态需求)
要避免触发订单确认、仅更新自定义状态并通知销售人员,推荐重写sign.request的validate方法,替换默认的订单确认逻辑:
from odoo import models, api class SignRequest(models.Model): _inherit = 'sign.request' @api.multi def validate(self): # 先执行父类方法完成签名基础逻辑 res = super(SignRequest, self).validate() # 过滤出当前签名请求关联的销售订单 related_orders = self.mapped('sign_item_ids.res_id').filtered(lambda rec: rec._name == 'sale.order') for order in related_orders: # 设置自定义状态字段(替换为你的实际字段名) order.write({'custom_order_state': 'customer_signed'}) # 给订单负责人发送内部通知 order.message_post( body=f"客户已签署订单【{order.name}】,请及时跟进", subtype='mail.mt_comment', partner_ids=order.user_id.partner_id.ids ) return res
如果父类validate方法已直接触发action_confirm,你需要先通过重写拦截该逻辑,再执行自定义操作。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

