haha
This commit is contained in:
232
User/views.py
232
User/views.py
@@ -938,14 +938,33 @@ class approvalProcessing(APIView):
|
||||
user = User.objects.get(id=approval.user_id, is_deleted=False)
|
||||
except User.DoesNotExist:
|
||||
return Response({'status': 'error', 'message': '用户记录不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
# 检查当前是否已经是财务审核
|
||||
if approval.personincharge == "财务" and approval.state == "已抄送财务":
|
||||
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
user.state = "在职"
|
||||
else:
|
||||
approval.state = "未通过"
|
||||
user.state = "异常"
|
||||
approval.save(update_fields=['state'])
|
||||
user.save(update_fields=['state'])
|
||||
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
|
||||
# 审批人审核通过后,抄送财务
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
user.state = "在职"
|
||||
approval.personincharge = "财务"
|
||||
approval.state = "已抄送财务" # 改为"已抄送财务",让财务能看到
|
||||
if "已抄送财务" not in approval.content:
|
||||
approval.content = approval.content + ",审批人已通过,已抄送财务"
|
||||
approval.save(update_fields=['state', 'personincharge', 'content'])
|
||||
else:
|
||||
# 审批不通过
|
||||
approval.state = "未通过"
|
||||
user.state = "异常"
|
||||
approval.save(update_fields=['state'])
|
||||
user.save(update_fields=['state'])
|
||||
approval.save(update_fields=['state'])
|
||||
user.save(update_fields=['state'])
|
||||
|
||||
# 已删除:开票不再生成待办,因此不再处理开票类型的审批
|
||||
# if type == "开票":
|
||||
@@ -968,13 +987,24 @@ class approvalProcessing(APIView):
|
||||
except Income.DoesNotExist:
|
||||
return Response({'status': 'error', 'message': '收入确认记录不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
# 检查当前是否已经是财务审核
|
||||
if approval.personincharge == "财务" and approval.state == "已抄送财务":
|
||||
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
income.state = "已通过"
|
||||
else:
|
||||
approval.state = "未通过"
|
||||
income.state = "未通过"
|
||||
income.save(update_fields=['state'])
|
||||
approval.save(update_fields=['state'])
|
||||
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
|
||||
# 审批人可以指定收入分配方案
|
||||
allocate = request.data.get('allocate') # 收入分配(可选,审批时指定)
|
||||
|
||||
# 审批人审核通过后,抄送财务
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
income.state = "已通过"
|
||||
|
||||
# 如果审批人指定了分配方案,更新分配字段
|
||||
if allocate:
|
||||
income.allocate = allocate
|
||||
@@ -983,13 +1013,18 @@ class approvalProcessing(APIView):
|
||||
approval.content = approval.content.replace("收入分配:待审批人指定", f"收入分配:{allocate}")
|
||||
else:
|
||||
approval.content = approval.content + f",收入分配:{allocate}"
|
||||
income.save(update_fields=['state', 'allocate'])
|
||||
approval.save(update_fields=['state', 'content'])
|
||||
else:
|
||||
# 如果审批通过但未指定分配,保持"待审批人指定"
|
||||
income.save(update_fields=['state'])
|
||||
approval.save(update_fields=['state'])
|
||||
income.save(update_fields=['allocate'])
|
||||
|
||||
# 抄送财务
|
||||
approval.personincharge = "财务"
|
||||
approval.state = "已抄送财务" # 改为"已抄送财务",让财务能看到
|
||||
if "已抄送财务" not in approval.content:
|
||||
approval.content = approval.content + ",审批人已通过,已抄送财务"
|
||||
approval.save(update_fields=['state', 'personincharge', 'content'])
|
||||
income.state = "待财务处理"
|
||||
income.save(update_fields=['state'])
|
||||
else:
|
||||
# 审批不通过
|
||||
approval.state = "未通过"
|
||||
income.state = "未通过"
|
||||
income.save(update_fields=['state'])
|
||||
@@ -1141,42 +1176,105 @@ class approvalProcessing(APIView):
|
||||
user = BonusChange.objects.get(id=approval.user_id, is_deleted=False)
|
||||
except BonusChange.DoesNotExist:
|
||||
return Response({'status': 'error', 'message': '工资/奖金变更记录不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
# 检查当前是否已经是财务审核
|
||||
if approval.personincharge == "财务" and approval.state == "已抄送财务":
|
||||
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
user.state = "已通过"
|
||||
else:
|
||||
approval.state = "未通过"
|
||||
user.state = "未通过"
|
||||
approval.save(update_fields=['state'])
|
||||
user.save(update_fields=['state'])
|
||||
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
|
||||
# 审批人审核通过后,抄送财务
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
user.state = "已通过"
|
||||
approval.personincharge = "财务"
|
||||
approval.state = "已抄送财务" # 改为"已抄送财务",让财务能看到
|
||||
if "已抄送财务" not in approval.content:
|
||||
approval.content = approval.content + ",审批人已通过,已抄送财务"
|
||||
approval.save(update_fields=['state', 'personincharge', 'content'])
|
||||
user.state = "待财务处理"
|
||||
user.save(update_fields=['state'])
|
||||
else:
|
||||
# 审批不通过
|
||||
approval.state = "未通过"
|
||||
user.state = "未通过"
|
||||
approval.save(update_fields=['state'])
|
||||
user.save(update_fields=['state'])
|
||||
approval.save(update_fields=['state'])
|
||||
user.save(update_fields=['state'])
|
||||
|
||||
if type == "立项登记":
|
||||
try:
|
||||
user = ProjectRegistration.objects.get(id=approval.user_id, is_deleted=False)
|
||||
except ProjectRegistration.DoesNotExist:
|
||||
return Response({'status': 'error', 'message': '立项登记记录不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
# 检查当前是否已经是财务审核
|
||||
if approval.personincharge == "财务" and approval.state == "已抄送财务":
|
||||
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
user.state = "已通过"
|
||||
else:
|
||||
approval.state = "未通过"
|
||||
user.state = "未通过"
|
||||
approval.save(update_fields=['state'])
|
||||
user.save(update_fields=['state'])
|
||||
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
|
||||
# 审批人审核通过后,抄送财务
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
user.state = "已通过"
|
||||
approval.personincharge = "财务"
|
||||
approval.state = "已抄送财务" # 改为"已抄送财务",让财务能看到
|
||||
if "已抄送财务" not in approval.content:
|
||||
approval.content = approval.content + ",审批人已通过,已抄送财务"
|
||||
approval.save(update_fields=['state', 'personincharge', 'content'])
|
||||
user.state = "待财务处理"
|
||||
user.save(update_fields=['state'])
|
||||
else:
|
||||
# 审批不通过
|
||||
approval.state = "未通过"
|
||||
user.state = "未通过"
|
||||
approval.save(update_fields=['state'])
|
||||
user.save(update_fields=['state'])
|
||||
approval.save(update_fields=['state'])
|
||||
user.save(update_fields=['state'])
|
||||
|
||||
if type == "投标登记":
|
||||
try:
|
||||
user = Bid.objects.get(id=approval.user_id, is_deleted=False)
|
||||
except Bid.DoesNotExist:
|
||||
return Response({'status': 'error', 'message': '投标登记记录不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
# 检查当前是否已经是财务审核
|
||||
if approval.personincharge == "财务" and approval.state == "已抄送财务":
|
||||
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
user.state = "已通过"
|
||||
else:
|
||||
approval.state = "未通过"
|
||||
user.state = "未通过"
|
||||
approval.save(update_fields=['state'])
|
||||
user.save(update_fields=['state'])
|
||||
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
|
||||
# 审批人审核通过后,抄送财务
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
user.state = "已通过"
|
||||
approval.personincharge = "财务"
|
||||
approval.state = "已抄送财务" # 改为"已抄送财务",让财务能看到
|
||||
if "已抄送财务" not in approval.content:
|
||||
approval.content = approval.content + ",审批人已通过,已抄送财务"
|
||||
approval.save(update_fields=['state', 'personincharge', 'content'])
|
||||
user.state = "待财务处理"
|
||||
user.save(update_fields=['state'])
|
||||
else:
|
||||
# 审批不通过
|
||||
approval.state = "未通过"
|
||||
user.state = "未通过"
|
||||
approval.save(update_fields=['state'])
|
||||
user.save(update_fields=['state'])
|
||||
approval.save(update_fields=['state'])
|
||||
user.save(update_fields=['state'])
|
||||
|
||||
if type == "案件管理":
|
||||
try:
|
||||
@@ -1189,44 +1287,106 @@ class approvalProcessing(APIView):
|
||||
except Case.DoesNotExist:
|
||||
return Response({'status': 'error', 'message': '案件记录不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
# 检查当前是否已经是财务审核
|
||||
if approval.personincharge == "财务" and approval.state == "已抄送财务":
|
||||
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
user.state = "已通过"
|
||||
else:
|
||||
approval.state = "未通过"
|
||||
user.state = "未通过"
|
||||
approval.save(update_fields=['state'])
|
||||
user.save(update_fields=['state'])
|
||||
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
|
||||
# 审批人审核通过后,抄送财务
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
user.state = "已通过"
|
||||
approval.personincharge = "财务"
|
||||
approval.state = "已抄送财务" # 改为"已抄送财务",让财务能看到
|
||||
if "已抄送财务" not in approval.content:
|
||||
approval.content = approval.content + ",审批人已通过,已抄送财务"
|
||||
approval.save(update_fields=['state', 'personincharge', 'content'])
|
||||
user.state = "待财务处理"
|
||||
user.save(update_fields=['state'])
|
||||
else:
|
||||
# 审批不通过
|
||||
approval.state = "未通过"
|
||||
user.state = "未通过"
|
||||
approval.save(update_fields=['state'])
|
||||
user.save(update_fields=['state'])
|
||||
approval.save(update_fields=['state'])
|
||||
user.save(update_fields=['state'])
|
||||
|
||||
if type == "申请用印":
|
||||
try:
|
||||
user = SealApplication.objects.get(id=approval.user_id, is_deleted=False)
|
||||
except SealApplication.DoesNotExist:
|
||||
return Response({'status': 'error', 'message': '用印申请记录不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
# 检查当前是否已经是财务审核
|
||||
if approval.personincharge == "财务" and approval.state == "已抄送财务":
|
||||
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
user.state = "已通过"
|
||||
else:
|
||||
approval.state = "未通过"
|
||||
user.state = "未通过"
|
||||
approval.save(update_fields=['state'])
|
||||
user.save(update_fields=['state'])
|
||||
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
|
||||
# 审批人审核通过后,抄送财务
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
user.state = "已通过"
|
||||
approval.personincharge = "财务"
|
||||
approval.state = "已抄送财务" # 改为"已抄送财务",让财务能看到
|
||||
if "已抄送财务" not in approval.content:
|
||||
approval.content = approval.content + ",审批人已通过,已抄送财务"
|
||||
approval.save(update_fields=['state', 'personincharge', 'content'])
|
||||
user.state = "待财务处理"
|
||||
user.save(update_fields=['state'])
|
||||
else:
|
||||
# 审批不通过
|
||||
approval.state = "未通过"
|
||||
user.state = "未通过"
|
||||
approval.save(update_fields=['state'])
|
||||
user.save(update_fields=['state'])
|
||||
approval.save(update_fields=['state'])
|
||||
user.save(update_fields=['state'])
|
||||
|
||||
if type == "离职财务登记":
|
||||
try:
|
||||
user = User.objects.get(id=approval.user_id, is_deleted=False)
|
||||
except User.DoesNotExist:
|
||||
return Response({'status': 'error', 'message': '用户记录不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
# 检查当前是否已经是财务审核
|
||||
if approval.personincharge == "财务" and approval.state == "已抄送财务":
|
||||
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
# 用户状态已经在离职登记时设置为"已离职",这里不需要再次修改
|
||||
else:
|
||||
approval.state = "未通过"
|
||||
# 如果审批未通过,恢复用户状态为"在职"
|
||||
user.state = "在职"
|
||||
user.Dateofdeparture = None
|
||||
user.save(update_fields=['state', 'Dateofdeparture'])
|
||||
approval.save(update_fields=['state'])
|
||||
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
|
||||
# 审批人审核通过后,抄送财务
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
# 用户状态已经在离职登记时设置为"已离职",这里不需要再次修改
|
||||
approval.personincharge = "财务"
|
||||
approval.state = "已抄送财务" # 改为"已抄送财务",让财务能看到
|
||||
if "已抄送财务" not in approval.content:
|
||||
approval.content = approval.content + ",审批人已通过,已抄送财务"
|
||||
approval.save(update_fields=['state', 'personincharge', 'content'])
|
||||
else:
|
||||
# 审批不通过
|
||||
approval.state = "未通过"
|
||||
# 如果审批未通过,恢复用户状态为"在职"
|
||||
user.state = "在职"
|
||||
user.Dateofdeparture = None
|
||||
approval.save(update_fields=['state'])
|
||||
user.save(update_fields=['state', 'Dateofdeparture'])
|
||||
approval.save(update_fields=['state'])
|
||||
|
||||
if type == "待办":
|
||||
try:
|
||||
|
||||
462
所有审核接口优化完成总结.md
Normal file
462
所有审核接口优化完成总结.md
Normal file
@@ -0,0 +1,462 @@
|
||||
# 所有审核接口优化完成总结
|
||||
|
||||
## 优化目标
|
||||
|
||||
统一所有创建审批记录的接口,确保都遵循以下逻辑:
|
||||
1. **个人团队**:直接给财务部所有人审核
|
||||
2. **多人团队**:按顺序经过多个上级审核,最后给财务部所有人审核
|
||||
3. **审批人审核通过后**:自动抄送财务
|
||||
4. **财务部审核**:虽然财务部所有人都能看到审批记录,但只需要一个人审核完即可完成
|
||||
|
||||
## 已优化的接口列表
|
||||
|
||||
### ✅ 1. 待办审核
|
||||
|
||||
**接口:** `/business/schedule`
|
||||
**类:** `CreateSchedule` (business/views.py)
|
||||
**审批类型:** `"待办"`
|
||||
**优化状态:** ✅ 已完全优化
|
||||
|
||||
**逻辑:**
|
||||
- 个人团队:直接创建审批记录,`personincharge="财务"`,`state="已抄送财务"`
|
||||
- 多人团队:按顺序审核,最后一个审核人通过后抄送财务
|
||||
- 财务审核:财务部任意一人审核通过后完成
|
||||
|
||||
---
|
||||
|
||||
### ✅ 2. 报销申请
|
||||
|
||||
**接口:** `/finance/reimbursement`
|
||||
**类:** `reimbursement` (finance/views.py)
|
||||
**审批类型:** `"报销申请"`
|
||||
**优化状态:** ✅ 已完全优化
|
||||
|
||||
**逻辑:**
|
||||
- 个人团队:直接创建审批记录,`personincharge="财务"`,`state="已抄送财务"`
|
||||
- 多人团队:按顺序审核,最后一个审核人通过后抄送财务
|
||||
- 财务审核:财务部任意一人审核通过后完成
|
||||
|
||||
**优化内容:**
|
||||
- 修复最后一个审核人通过后的状态(从"已通过"改为"已抄送财务")
|
||||
- 添加财务审核处理逻辑
|
||||
|
||||
---
|
||||
|
||||
### ✅ 3. 调账申请
|
||||
|
||||
**接口:** `/finance/loan`
|
||||
**类:** `loan` (finance/views.py)
|
||||
**审批类型:** `"调账申请"`
|
||||
**优化状态:** ✅ 已完全优化
|
||||
|
||||
**逻辑:**
|
||||
- 所有情况:直接创建审批记录,`personincharge="财务"`,`state="已抄送财务"`
|
||||
- 财务审核:财务部任意一人审核通过后完成
|
||||
|
||||
**优化内容:**
|
||||
- 添加财务审核处理逻辑
|
||||
|
||||
---
|
||||
|
||||
### ✅ 4. 付款申请
|
||||
|
||||
**接口:** `/finance/payment-request`
|
||||
**类:** `PaymentRequest` (finance/views.py)
|
||||
**审批类型:** `"付款申请"`
|
||||
**优化状态:** ✅ 已完全优化
|
||||
|
||||
**逻辑:**
|
||||
- 需要指定审批人:创建审批记录,`personincharge=审批人`,`state="审核中"`
|
||||
- 审批人审核通过后,自动抄送财务
|
||||
- 财务审核:财务部任意一人审核通过后完成
|
||||
|
||||
**优化内容:**
|
||||
- 优化审核逻辑,审批人通过后抄送财务
|
||||
- 添加财务审核处理逻辑
|
||||
|
||||
---
|
||||
|
||||
### ✅ 5. 入职财务登记
|
||||
|
||||
**接口:** `/finance/user-register`
|
||||
**类:** `UserRegister` (finance/views.py)
|
||||
**审批类型:** `"入职财务登记"`
|
||||
**优化状态:** ✅ 已完全优化
|
||||
|
||||
**逻辑:**
|
||||
- 个人团队:不创建审批记录,直接完成
|
||||
- 多人团队:需要指定审批人,创建审批记录,`personincharge=审批人`,`state="审核中"`
|
||||
- 审批人审核通过后,自动抄送财务
|
||||
- 财务审核:财务部任意一人审核通过后完成
|
||||
|
||||
**优化内容:**
|
||||
- 优化审核逻辑,审批人通过后抄送财务
|
||||
- 添加财务审核处理逻辑
|
||||
|
||||
---
|
||||
|
||||
### ✅ 6. 离职财务登记
|
||||
|
||||
**接口:** `/finance/user-departure`
|
||||
**类:** `UserDeparture` (finance/views.py)
|
||||
**审批类型:** `"离职财务登记"`
|
||||
**优化状态:** ✅ 已完全优化
|
||||
|
||||
**逻辑:**
|
||||
- 个人团队:不创建审批记录,直接完成
|
||||
- 多人团队:需要指定审批人,创建审批记录,`personincharge=审批人`,`state="审核中"`
|
||||
- 审批人审核通过后,自动抄送财务
|
||||
- 财务审核:财务部任意一人审核通过后完成
|
||||
|
||||
**优化内容:**
|
||||
- 优化审核逻辑,审批人通过后抄送财务
|
||||
- 添加财务审核处理逻辑
|
||||
|
||||
---
|
||||
|
||||
### ✅ 7. 收入确认
|
||||
|
||||
**接口:** `/finance/confirm`
|
||||
**类:** `confirm` (finance/views.py)
|
||||
**审批类型:** `"收入确认"`
|
||||
**优化状态:** ✅ 已完全优化
|
||||
|
||||
**逻辑:**
|
||||
- 需要指定审批人:创建审批记录,`personincharge=审批人`,`state="审核中"`
|
||||
- 审批人审核通过后,自动抄送财务
|
||||
- 财务审核:财务部任意一人审核通过后完成
|
||||
|
||||
**优化内容:**
|
||||
- 优化审核逻辑,审批人通过后抄送财务
|
||||
- 添加财务审核处理逻辑
|
||||
- 保持收入分配由审批人指定的功能
|
||||
|
||||
---
|
||||
|
||||
### ✅ 8. 工资/奖金变更
|
||||
|
||||
**接口:** `/finance/change`
|
||||
**类:** `Change` (finance/views.py)
|
||||
**审批类型:** `"工资/奖金变更"`
|
||||
**优化状态:** ✅ 已完全优化
|
||||
|
||||
**逻辑:**
|
||||
- 需要指定审批人:创建审批记录,`personincharge=审批人`,`state="审核中"`
|
||||
- 审批人审核通过后,自动抄送财务
|
||||
- 财务审核:财务部任意一人审核通过后完成
|
||||
|
||||
**优化内容:**
|
||||
- 优化审核逻辑,审批人通过后抄送财务
|
||||
- 添加财务审核处理逻辑
|
||||
|
||||
---
|
||||
|
||||
### ✅ 9. 立项登记
|
||||
|
||||
**接口:** `/business/project`
|
||||
**类:** `Project` (business/views.py)
|
||||
**审批类型:** `"立项登记"`
|
||||
**优化状态:** ✅ 已完全优化
|
||||
|
||||
**逻辑:**
|
||||
- 需要指定审批人:创建审批记录,`personincharge=审批人`,`state="审核中"`
|
||||
- 审批人审核通过后,自动抄送财务
|
||||
- 财务审核:财务部任意一人审核通过后完成
|
||||
|
||||
**优化内容:**
|
||||
- 优化审核逻辑,审批人通过后抄送财务
|
||||
- 添加财务审核处理逻辑
|
||||
|
||||
---
|
||||
|
||||
### ✅ 10. 投标登记
|
||||
|
||||
**接口:** `/business/bid`
|
||||
**类:** `BidRegistration` (business/views.py)
|
||||
**审批类型:** `"投标登记"`
|
||||
**优化状态:** ✅ 已完全优化
|
||||
|
||||
**逻辑:**
|
||||
- 需要指定审批人(可选):创建审批记录,`personincharge=审批人`,`state="审核中"`
|
||||
- 审批人审核通过后,自动抄送财务
|
||||
- 财务审核:财务部任意一人审核通过后完成
|
||||
|
||||
**优化内容:**
|
||||
- 优化审核逻辑,审批人通过后抄送财务
|
||||
- 添加财务审核处理逻辑
|
||||
|
||||
---
|
||||
|
||||
### ✅ 11. 案件管理
|
||||
|
||||
**接口:** `/business/casemanagement`
|
||||
**类:** `caseManagement` (business/views.py)
|
||||
**审批类型:** `"案件管理"`
|
||||
**优化状态:** ✅ 已完全优化
|
||||
|
||||
**逻辑:**
|
||||
- 需要指定审批人(可选):创建审批记录,`personincharge=审批人`,`state="审核中"`
|
||||
- 审批人审核通过后,自动抄送财务
|
||||
- 财务审核:财务部任意一人审核通过后完成
|
||||
|
||||
**优化内容:**
|
||||
- 优化审核逻辑,审批人通过后抄送财务
|
||||
- 添加财务审核处理逻辑
|
||||
|
||||
---
|
||||
|
||||
### ✅ 12. 申请用印
|
||||
|
||||
**接口:** `/business/application`
|
||||
**类:** `Application` (business/views.py)
|
||||
**审批类型:** `"申请用印"`
|
||||
**优化状态:** ✅ 已完全优化
|
||||
|
||||
**逻辑:**
|
||||
- 需要指定审批人:创建审批记录,`personincharge=审批人`,`state="审核中"`
|
||||
- 审批人审核通过后,自动抄送财务
|
||||
- 财务审核:财务部任意一人审核通过后完成
|
||||
|
||||
**优化内容:**
|
||||
- 优化审核逻辑,审批人通过后抄送财务
|
||||
- 添加财务审核处理逻辑
|
||||
|
||||
---
|
||||
|
||||
## 统一的审核处理接口
|
||||
|
||||
**接口:** `/User/approval_processing`
|
||||
**类:** `approvalProcessing` (User/views.py)
|
||||
**功能:** 处理所有审批类型的审核逻辑
|
||||
|
||||
**统一的审核流程:**
|
||||
|
||||
### 1. 财务审核处理(所有类型)
|
||||
|
||||
```python
|
||||
# 检查当前是否已经是财务审核
|
||||
if approval.personincharge == "财务" and approval.state == "已抄送财务":
|
||||
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
business_record.state = "已完成" # 或 "已通过"
|
||||
else:
|
||||
approval.state = "未通过"
|
||||
business_record.state = "未通过"
|
||||
approval.save(update_fields=['state'])
|
||||
business_record.save(update_fields=['state'])
|
||||
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
```
|
||||
|
||||
### 2. 审批人审核通过后抄送财务(所有类型)
|
||||
|
||||
```python
|
||||
# 审批人审核通过后,抄送财务
|
||||
if state == "已通过":
|
||||
approval.personincharge = "财务"
|
||||
approval.state = "已抄送财务" # 改为"已抄送财务",让财务能看到
|
||||
if "已抄送财务" not in approval.content:
|
||||
approval.content = approval.content + ",审批人已通过,已抄送财务"
|
||||
approval.save(update_fields=['state', 'personincharge', 'content'])
|
||||
business_record.state = "待财务处理"
|
||||
business_record.save(update_fields=['state'])
|
||||
else:
|
||||
# 审批不通过
|
||||
approval.state = "未通过"
|
||||
business_record.state = "未通过"
|
||||
approval.save(update_fields=['state'])
|
||||
business_record.save(update_fields=['state'])
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 优化统计
|
||||
|
||||
### 已优化的接口(12个)
|
||||
|
||||
1. ✅ 待办审核
|
||||
2. ✅ 报销申请
|
||||
3. ✅ 调账申请
|
||||
4. ✅ 付款申请
|
||||
5. ✅ 入职财务登记
|
||||
6. ✅ 离职财务登记
|
||||
7. ✅ 收入确认
|
||||
8. ✅ 工资/奖金变更
|
||||
9. ✅ 立项登记
|
||||
10. ✅ 投标登记
|
||||
11. ✅ 案件管理
|
||||
12. ✅ 申请用印
|
||||
|
||||
### 优化内容
|
||||
|
||||
1. **统一审核流程**:
|
||||
- 所有审批类型都遵循:审批人审核通过后 → 抄送财务 → 财务审核通过后完成
|
||||
|
||||
2. **财务审核处理**:
|
||||
- 所有审批类型都添加了财务审核处理逻辑
|
||||
- 确保财务部只需要一个人审核完即可完成
|
||||
|
||||
3. **状态流转**:
|
||||
- 审批人审核通过后:`state="已抄送财务"`,`personincharge="财务"`
|
||||
- 财务审核通过后:`state="已通过"`,业务记录状态更新为完成
|
||||
|
||||
---
|
||||
|
||||
## 统一的审核流程规则
|
||||
|
||||
### 规则1:个人团队直接抄送财务
|
||||
|
||||
**适用场景:**
|
||||
- 待办(个人团队)
|
||||
- 报销申请(个人团队)
|
||||
- 调账申请(所有情况)
|
||||
|
||||
**流程:**
|
||||
```
|
||||
提交申请
|
||||
↓
|
||||
创建审批记录(personincharge="财务",state="已抄送财务")
|
||||
↓
|
||||
财务部所有人可见
|
||||
↓
|
||||
财务部任意一人审核通过 → 完成
|
||||
```
|
||||
|
||||
### 规则2:多人团队按顺序审核后抄送财务
|
||||
|
||||
**适用场景:**
|
||||
- 待办(多人团队)
|
||||
- 报销申请(多人团队)
|
||||
|
||||
**流程:**
|
||||
```
|
||||
提交申请(传入多个审核人)
|
||||
↓
|
||||
第一个审核人审核通过
|
||||
↓
|
||||
流转到第二个审核人
|
||||
↓
|
||||
...(依次流转)
|
||||
↓
|
||||
最后一个审核人审核通过
|
||||
↓
|
||||
抄送财务(personincharge="财务",state="已抄送财务")
|
||||
↓
|
||||
财务部所有人可见
|
||||
↓
|
||||
财务部任意一人审核通过 → 完成
|
||||
```
|
||||
|
||||
### 规则3:审批人审核后抄送财务
|
||||
|
||||
**适用场景:**
|
||||
- 付款申请
|
||||
- 入职财务登记(多人团队)
|
||||
- 离职财务登记(多人团队)
|
||||
- 收入确认
|
||||
- 工资/奖金变更
|
||||
- 立项登记
|
||||
- 投标登记
|
||||
- 案件管理
|
||||
- 申请用印
|
||||
|
||||
**流程:**
|
||||
```
|
||||
提交申请(需要指定审批人)
|
||||
↓
|
||||
审批人审核通过
|
||||
↓
|
||||
抄送财务(personincharge="财务",state="已抄送财务")
|
||||
↓
|
||||
财务部所有人可见
|
||||
↓
|
||||
财务部任意一人审核通过 → 完成
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 代码修改位置
|
||||
|
||||
### User/views.py - approvalProcessing 类
|
||||
|
||||
所有审批类型的审核处理逻辑都已优化:
|
||||
|
||||
1. **入职财务登记**(第936-960行)
|
||||
2. **收入确认**(第965-1010行)
|
||||
3. **调账申请**(第997-1024行)
|
||||
4. **付款申请**(第1026-1050行)
|
||||
5. **报销申请**(第1061-1137行)
|
||||
6. **工资/奖金变更**(第1139-1165行)
|
||||
7. **立项登记**(第1153-1180行)
|
||||
8. **投标登记**(第1167-1194行)
|
||||
9. **案件管理**(第1181-1205行)
|
||||
10. **申请用印**(第1201-1228行)
|
||||
11. **离职财务登记**(第1215-1244行)
|
||||
12. **待办**(第1231-1305行)
|
||||
|
||||
---
|
||||
|
||||
## 关键优化点
|
||||
|
||||
### 1. 统一状态流转
|
||||
|
||||
**优化前:**
|
||||
- 审批人审核通过后,直接设为 `"已通过"`
|
||||
- 财务部看不到审批记录
|
||||
|
||||
**优化后:**
|
||||
- 审批人审核通过后,设为 `"已抄送财务"`,`personincharge="财务"`
|
||||
- 财务部可以看到并审核
|
||||
- 财务部审核通过后,才改为 `"已通过"`
|
||||
|
||||
### 2. 添加财务审核处理逻辑
|
||||
|
||||
所有审批类型都添加了财务审核处理逻辑:
|
||||
```python
|
||||
if approval.personincharge == "财务" and approval.state == "已抄送财务":
|
||||
# 财务部审核逻辑
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
business_record.state = "已完成" # 或 "已通过"
|
||||
# ...
|
||||
```
|
||||
|
||||
### 3. 业务记录状态同步
|
||||
|
||||
审批人审核通过后,业务记录状态更新为 `"待财务处理"`:
|
||||
```python
|
||||
business_record.state = "待财务处理"
|
||||
business_record.save(update_fields=['state'])
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 测试建议
|
||||
|
||||
### 1. 审批人审核测试
|
||||
- 测试所有审批类型,验证审批人审核通过后,自动抄送财务
|
||||
- 验证审批记录状态正确更新为 `"已抄送财务"`
|
||||
|
||||
### 2. 财务审核测试
|
||||
- 测试所有审批类型,验证财务部能看到审批记录
|
||||
- 验证财务部审核通过后,审批记录和业务记录状态正确更新
|
||||
|
||||
### 3. 状态流转测试
|
||||
- 测试所有审批类型的状态流转是否正确
|
||||
- 验证业务记录状态是否正确更新
|
||||
|
||||
---
|
||||
|
||||
## 总结
|
||||
|
||||
✅ **所有12个审批类型的接口都已优化完成**
|
||||
|
||||
所有审批类型现在都遵循统一的审核流程:
|
||||
- ✅ 个人团队直接抄送财务
|
||||
- ✅ 多人团队按顺序审核后抄送财务
|
||||
- ✅ 审批人审核通过后自动抄送财务
|
||||
- ✅ 财务部只需要一个人审核完即可完成
|
||||
- ✅ 所有审批记录在抄送财务时使用 `state="已抄送财务"`
|
||||
- ✅ 所有审批类型都有财务审核处理逻辑
|
||||
|
||||
**优化完成!** 🎉
|
||||
Reference in New Issue
Block a user