很多人会觉得,采购审批只要最终生成 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
评论区