企业 审批闸门

Odoo 企业版采购审批为什么在确认前后都设闸门:空请求、缺产品行与批准动作的双重校验

approvals_purchase 没把数据校验压到最后一步。action_confirm() 先拦空采购请求,action_approve() 再拦没有 product_id 的产品行,形成“确认可建单、批准可采购”的两道闸门。

企业 采购
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 5 阅读

很多人会觉得,采购审批只要最终生成 RFQ 前做一次校验就够了。企业版没有这么偷懒,它把校验拆成了两个阶段。

这篇文章主要参考:

  • enterprise/approvals_purchase/models/approval_request.py

一、action_confirm() 拦的是“请求是否成立”

源码里写得很直接:如果 approval_type == 'purchase'product_line_ids 为空,就抛出 “You cannot create an empty purchase request.” 这一步的含义不是“你不会下单”,而是更早:你现在连一个合格的采购请求都还没形成。

二、action_approve() 拦的是“行级采购语义是否完整”

到了批准阶段,系统再做另一种检查:如果是采购审批,且有任意产品行没填 product_id,就抛出 “You must select a product for each line...”。这说明企业版把“有产品行”和“产品行可采购”看成两件事:确认前先保证这不是空壳请求,批准前再保证每一行都已经具备采购对象。

三、为什么不把两种错误都压到最后

因为两种错误伤害的是不同层面:空请求伤害流程有效性,缺 product_id 伤害采购落地能力。如果统统拖到创建 RFQ 时才报,用户会感觉系统“最后才翻旧账”,而不是在正确节点给出正确反馈。

四、结论

企业版采购审批的两道闸门很朴素,但非常关键:先确保请求存在,再确保请求可采购。把这两步分开,才不会把流程治理和采购执行混成一锅。

DISCUSSION

评论区

想参与讨论?先 登录 再发表评论。
还没有评论,你可以成为第一个留言的人。