feat(borrow,outbound): 库管(WAREHOUSE_MGR)代建申请强制审批
- submit/create 新增 force_approval:库管建单无视物料是否需审批,一律走审批 - 路由按当前角色为 WAREHOUSE_MGR 传 true;未选审批人返回明确业务错误
This commit is contained in:
@ -427,7 +427,8 @@ def create_outbound_request():
|
||||
allowed_approvers=allowed_approvers,
|
||||
remark=data.get('remark'),
|
||||
approver_id=approver_id,
|
||||
outbound_type=data.get('outbound_type') # 出库类型(申请时确定)
|
||||
outbound_type=data.get('outbound_type'), # 出库类型(申请时确定)
|
||||
force_approval=((user_role or '').upper() == 'WAREHOUSE_MGR') # 库管代建 → 强制审批
|
||||
)
|
||||
|
||||
return jsonify({
|
||||
|
||||
@ -248,7 +248,8 @@ def submit_borrow_request():
|
||||
allowed_approvers=allowed_approvers,
|
||||
remark=data.get('remark'),
|
||||
approver_id=approver_id,
|
||||
borrower_name=current_username
|
||||
borrower_name=current_username,
|
||||
force_approval=((user_role or '').upper() == 'WAREHOUSE_MGR') # 库管代建 → 强制审批
|
||||
)
|
||||
|
||||
return jsonify({'code': 200, 'msg': '借库申请已提交', 'data': approval.to_dict()}), 200
|
||||
|
||||
@ -62,7 +62,7 @@ class BorrowApprovalService:
|
||||
|
||||
@staticmethod
|
||||
def submit_approval(applicant_id, items, allowed_approvers, remark=None, approver_id=None,
|
||||
borrower_name=None):
|
||||
borrower_name=None, force_approval=False):
|
||||
"""
|
||||
提交借库申请(仅存储意向,不扣库存)
|
||||
|
||||
@ -111,10 +111,14 @@ class BorrowApprovalService:
|
||||
except (TypeError, ValueError) as e:
|
||||
raise ValueError(f"第 {idx + 1} 条物品的 quantity 格式无效: {str(e)}")
|
||||
|
||||
# ★ 需审批判定:明细含“出库/借库需审批”物料 → 走原审批流程;否则默认自动通过
|
||||
# ★ 需审批判定:库管代建(force_approval)或明细含需审批物料 → 走审批;否则默认自动通过
|
||||
from app.services.approval_control import resolve_approval_control
|
||||
need_approval, flagged_materials = resolve_approval_control(items)
|
||||
if force_approval:
|
||||
need_approval = True
|
||||
if need_approval and not approver_id:
|
||||
if force_approval:
|
||||
raise ValueError("库管代建借库申请必须选择审批人后再提交")
|
||||
_names = ";".join(f"{m['name']}({m['spec_model'] or '-'})" for m in flagged_materials)
|
||||
raise ValueError(f"以下物料需审批出库/借库:{_names}。请选择审批人后再提交")
|
||||
|
||||
|
||||
@ -743,7 +743,7 @@ class OutboundApprovalService:
|
||||
return False
|
||||
|
||||
@staticmethod
|
||||
def create_request(applicant_id, items, allowed_approvers, remark=None, approver_id=None, outbound_type=None):
|
||||
def create_request(applicant_id, items, allowed_approvers, remark=None, approver_id=None, outbound_type=None, force_approval=False):
|
||||
"""
|
||||
创建出库审批单(申请阶段,直接存储前端传来的物料信息快照,不关联具体库存记录)
|
||||
|
||||
@ -787,10 +787,14 @@ class OutboundApprovalService:
|
||||
except (TypeError, ValueError) as e:
|
||||
raise ValueError(f"第 {idx + 1} 条物品的 quantity 格式无效: {str(e)}")
|
||||
|
||||
# ★ 需审批判定:明细含“出库/借库需审批”物料 → 走原审批流程;否则默认自动通过
|
||||
# ★ 需审批判定:库管代建(force_approval)或明细含需审批物料 → 走审批;否则默认自动通过
|
||||
from app.services.approval_control import resolve_approval_control
|
||||
need_approval, flagged_materials = resolve_approval_control(items)
|
||||
if force_approval:
|
||||
need_approval = True
|
||||
if need_approval and not approver_id:
|
||||
if force_approval:
|
||||
raise ValueError("库管代建出库申请必须选择审批人后再提交")
|
||||
_names = ";".join(f"{m['name']}({m['spec_model'] or '-'})" for m in flagged_materials)
|
||||
raise ValueError(f"以下物料需审批出库/借库:{_names}。请选择审批人后再提交")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user