feat(scrap): 报废一律需审批,不再按物料标记区分

业务规则变更:所有报废申请都必须由指定审批人审批通过后才能执行。

原逻辑走 resolve_approval_control 判定是否需审批,而 material_base 表中
仅 1/3012 个物料标记了 is_approval_required,意味着 99.97% 的报废申请会
走免审批分支——status 直接置 1、actual_approver_id 被赋为申请人自己、
审批人参数被静默丢弃。前端即便做了必填也只是摆设。

改动(规则收敛到单一来源):
  · 新增 SCRAP_ALWAYS_REQUIRES_APPROVAL = True,作为唯一开关;
  · submit_approval() 无审批人一律拒绝;恒置 status=0(待审批);
    删除免审批自动通过分支;
  · resolve_approval_control 仍调用,但仅用于生成提示文案,
    不再参与是否审批的判定;
  · /request/check-approval 返回 need_approval=SCRAP_ALWAYS_REQUIRES_APPROVAL,
    否则该接口会继续返回 false,导致前端预检结果失真。

实测:不传审批人 → 拒绝;传审批人 → status=0 且 actual_approver_id 为空。
⚠ 注意:此前自动通过的单据今后一律进入审批队列。
This commit is contained in:
yueli
2026-09-10 11:32:51 +08:00
parent f589962e5c
commit e152f16ebc
2 changed files with 32 additions and 24 deletions

View File

@ -503,14 +503,19 @@ def _current_user_role():
@jwt_required()
@permission_required('scrap_apply')
def scrap_check_approval():
"""提交前预检:判断所选库存(物料)是否命中“需审批”"""
"""
提交前预检:报废一律需审批,本接口返回 need_approval=true
并附带命中「需审批物料」标记的明细,供前端展示审批提示文案。
"""
try:
from app.services.approval_control import resolve_approval_control
from app.services.scrap_approval_service import SCRAP_ALWAYS_REQUIRES_APPROVAL
data = request.get_json() or {}
items = data.get('items', []) or []
need, flagged = resolve_approval_control(items)
_, flagged = resolve_approval_control(items)
return jsonify({'code': 200, 'msg': 'success',
'data': {'need_approval': need, 'materials': flagged}}), 200
'data': {'need_approval': SCRAP_ALWAYS_REQUIRES_APPROVAL,
'materials': flagged}}), 200
except Exception as e:
traceback.print_exc()
return jsonify({'code': 500, 'msg': f'预检失败: {str(e)}'}), 500