优化案件模块
This commit is contained in:
@@ -577,7 +577,7 @@ def process_approval_flow(approval, business_record, current_approver, state,
|
||||
- 如果没有审核人列表(个人团队),直接抄送财务
|
||||
- 如果有审核人列表(多人团队),按顺序流转
|
||||
- 最后一个审核人通过后,抄送财务
|
||||
- 财务审核通过后,完成审批
|
||||
- 财务部只需要查看,不需要审批,查看后直接完成(审批记录和业务记录都更新为"已通过")
|
||||
|
||||
Args:
|
||||
approval: Approval对象
|
||||
@@ -609,13 +609,21 @@ def process_approval_flow(approval, business_record, current_approver, state,
|
||||
|
||||
# 检查当前是否已经是财务审核(部门ID或“财务”字符串均视为财务阶段)
|
||||
if is_finance_personincharge(approval.personincharge) and approval.state == "已抄送财务":
|
||||
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
|
||||
if state == "已通过":
|
||||
# 财务部只需要查看,不需要审批,查看后直接完成
|
||||
# 如果不传state或state为"已通过",则完成审批
|
||||
if not state or state == "已通过":
|
||||
approval.state = "已通过"
|
||||
approval.save(update_fields=['state'])
|
||||
|
||||
if business_record and hasattr(business_record, 'state'):
|
||||
business_record.state = final_state_map.get("已通过", "已完成")
|
||||
business_record.state = final_state_map.get("已通过", "已通过")
|
||||
business_record.save(update_fields=['state'])
|
||||
elif state == "未通过":
|
||||
approval.state = "未通过"
|
||||
approval.save(update_fields=['state'])
|
||||
|
||||
if business_record and hasattr(business_record, 'state'):
|
||||
business_record.state = final_state_map.get("未通过", "未通过")
|
||||
business_record.save(update_fields=['state'])
|
||||
|
||||
return True, None
|
||||
|
||||
133
User/views.py
133
User/views.py
@@ -991,65 +991,19 @@ class roxyExhibition(APIView):
|
||||
status_list = [filter_status]
|
||||
|
||||
# 需要先遍历所有记录,计算 status,然后过滤
|
||||
# 优化后:不需要查询业务记录状态,直接根据审批记录状态判断
|
||||
for info in approvals:
|
||||
# 计算 status(简化版,完整逻辑在下面循环中)
|
||||
business_state = None
|
||||
is_approved = False
|
||||
try:
|
||||
if info.type == "收入确认":
|
||||
try:
|
||||
income = Income.objects.get(id=info.user_id, is_deleted=False)
|
||||
business_state = income.state
|
||||
is_approved = (income.state == "已通过")
|
||||
except Income.DoesNotExist:
|
||||
pass
|
||||
elif info.type == "开票":
|
||||
try:
|
||||
invoice = Invoice.objects.get(id=info.user_id, is_deleted=False)
|
||||
business_state = invoice.state
|
||||
is_approved = (invoice.state == "已通过")
|
||||
except Invoice.DoesNotExist:
|
||||
pass
|
||||
elif info.type == "付款申请":
|
||||
try:
|
||||
payment = Payment.objects.get(id=info.user_id, is_deleted=False)
|
||||
business_state = payment.state
|
||||
is_approved = (payment.state == "已通过")
|
||||
except Payment.DoesNotExist:
|
||||
pass
|
||||
elif info.type == "报销申请":
|
||||
try:
|
||||
reimbursement = Reimbursement.objects.get(id=info.user_id, is_deleted=False)
|
||||
business_state = reimbursement.state
|
||||
is_approved = (reimbursement.state == "已完成")
|
||||
except Reimbursement.DoesNotExist:
|
||||
pass
|
||||
elif info.type == "案件管理":
|
||||
try:
|
||||
case_id = int(info.user_id)
|
||||
case = Case.objects.filter(id=case_id, is_deleted=False).first()
|
||||
if case:
|
||||
business_state = case.state
|
||||
is_approved = (case.state == "已通过")
|
||||
except (ValueError, TypeError, AttributeError):
|
||||
pass
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# 计算 approval_status
|
||||
# 计算 approval_status(优化后:不需要检查业务记录状态)
|
||||
approval_status = "审批中"
|
||||
if info.state == "已抄送财务":
|
||||
approval_status = "待查看"
|
||||
elif info.state == "已通过" and is_approved:
|
||||
elif info.state == "已通过":
|
||||
# 审批记录状态为"已通过"(通常是财务查看后),就是已完成
|
||||
approval_status = "已完成"
|
||||
elif info.state == "审核中":
|
||||
approval_status = "审批中"
|
||||
elif info.state == "已通过":
|
||||
approval_status = "审批中"
|
||||
elif info.state == "未通过":
|
||||
approval_status = "审批中"
|
||||
elif is_approved:
|
||||
approval_status = "已完成"
|
||||
|
||||
# 如果 status 匹配(支持多个值),添加到过滤列表
|
||||
if approval_status in status_list:
|
||||
@@ -1317,27 +1271,22 @@ class roxyExhibition(APIView):
|
||||
logger.error(f"获取业务记录状态失败 (type={info.type}, user_id={info.user_id}): {str(e)}")
|
||||
|
||||
# 计算优化后的状态:审批中、待查看、已完成
|
||||
# 状态判断逻辑:
|
||||
# 状态判断逻辑(优化后):
|
||||
# 1. 优先判断:如果审批记录状态为"已抄送财务",则状态为"待查看"(给财务部用的)
|
||||
# 2. 如果审批记录状态为"已通过"且业务记录已通过,则状态为"已完成"
|
||||
# 2. 如果审批记录状态为"已通过"(财务查看后),则状态为"已完成"(不需要检查业务记录状态)
|
||||
# 3. 其他情况(如"审核中"、"未通过"等),则状态为"审批中"
|
||||
approval_status = "审批中" # 默认状态
|
||||
if info.state == "已抄送财务":
|
||||
# 优先判断:已抄送财务时,无论业务记录状态如何,都显示"待查看"(财务部需要查看)
|
||||
# 优先判断:已抄送财务时,显示"待查看"(财务部需要查看)
|
||||
approval_status = "待查看"
|
||||
elif info.state == "已通过" and is_approved:
|
||||
# 审批记录和业务记录都已通过,显示"已完成"
|
||||
elif info.state == "已通过":
|
||||
# 审批记录状态为"已通过"(通常是财务查看后),显示"已完成"
|
||||
# 不需要检查业务记录状态,只要审批记录通过就是已完成
|
||||
approval_status = "已完成"
|
||||
elif info.state == "审核中":
|
||||
approval_status = "审批中"
|
||||
elif info.state == "已通过":
|
||||
# 如果审批记录是"已通过"但业务记录还没通过,可能是数据不一致,保持"审批中"
|
||||
approval_status = "审批中"
|
||||
elif info.state == "未通过":
|
||||
approval_status = "审批中" # 未通过也可以继续审批流程
|
||||
elif is_approved:
|
||||
# 如果业务记录已通过但审批记录状态不是"已通过"或"已抄送财务",可能是数据不一致,显示"已完成"
|
||||
approval_status = "已完成"
|
||||
|
||||
itme = {
|
||||
'id': info.id,
|
||||
@@ -1348,9 +1297,9 @@ class roxyExhibition(APIView):
|
||||
"personincharge": info.personincharge,
|
||||
"state": info.state, # 审批记录状态(原始状态)
|
||||
"type": info.type,
|
||||
"business_state": business_state, # 业务记录当前状态
|
||||
"is_approved": is_approved, # 是否已经审核完全通过
|
||||
"status": approval_status, # 优化后的状态:审批中、待查看、已完成
|
||||
"business_state": business_state, # 业务记录当前状态(保留用于兼容)
|
||||
"is_approved": is_approved, # 是否已经审核完全通过(保留用于兼容)
|
||||
"status": approval_status, # 优化后的状态:审批中、待查看、已完成(财务查看后即为已完成)
|
||||
}
|
||||
|
||||
# 如果是离职财务登记类型,从content中解析结算工资
|
||||
@@ -1451,6 +1400,7 @@ class approvalProcessing(APIView):
|
||||
"""
|
||||
消除代办
|
||||
财务查看时,只需要传type和id,不需要传state(默认为查看通过)
|
||||
财务部只需要查看,不需要审批,查看后直接完成(审批记录和业务记录都更新为"已通过")
|
||||
:param request:
|
||||
:param args:
|
||||
:param kwargs:
|
||||
@@ -1584,7 +1534,7 @@ class approvalProcessing(APIView):
|
||||
|
||||
# 检查当前是否已经是财务审核
|
||||
if is_finance_personincharge(approval.personincharge) and approval.state == "已抄送财务":
|
||||
# 财务部只是查看,不需要审核,状态已经是"已通过"
|
||||
# 财务部只需要查看,不需要审批,查看后直接完成
|
||||
# 如果财务标记为未通过,则更新状态
|
||||
if state == "未通过":
|
||||
approval.state = "未通过"
|
||||
@@ -1593,11 +1543,14 @@ class approvalProcessing(APIView):
|
||||
approval.save(update_fields=['state'])
|
||||
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
else:
|
||||
# 财务查看通过(默认或不传state),状态保持"已通过"(已经是"已通过")
|
||||
# 如果审批记录状态不是"已通过",更新为"已通过"(表示财务已查看)
|
||||
if approval.state != "已通过":
|
||||
approval.state = "已通过"
|
||||
approval.save(update_fields=['state'])
|
||||
# 财务查看通过(默认或不传state),直接完成
|
||||
# 更新审批记录状态为"已通过"(表示财务已查看)
|
||||
approval.state = "已通过"
|
||||
approval.save(update_fields=['state'])
|
||||
# 确保业务记录状态也为"已通过"(财务查看即完成)
|
||||
if income.state != "已通过":
|
||||
income.state = "已通过"
|
||||
income.save(update_fields=['state'])
|
||||
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
|
||||
# 负责人填写收入分配
|
||||
@@ -1685,7 +1638,7 @@ class approvalProcessing(APIView):
|
||||
# 调账申请不需要审核流程,直接抄送财务查看即可
|
||||
# 检查当前是否已经是财务审核
|
||||
if is_finance_personincharge(approval.personincharge) and approval.state == "已抄送财务":
|
||||
# 财务部只是查看,不需要审核,状态已经是"已通过"
|
||||
# 财务部只需要查看,不需要审批,查看后直接完成
|
||||
# 如果财务标记为未通过,则更新状态
|
||||
if state == "未通过":
|
||||
approval.state = "未通过"
|
||||
@@ -1694,11 +1647,14 @@ class approvalProcessing(APIView):
|
||||
approval.save(update_fields=['state'])
|
||||
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
else:
|
||||
# 财务查看通过(默认或不传state),状态保持"已通过"(已经是"已通过")
|
||||
# 如果审批记录状态不是"已通过",更新为"已通过"(表示财务已查看)
|
||||
if approval.state != "已通过":
|
||||
approval.state = "已通过"
|
||||
approval.save(update_fields=['state'])
|
||||
# 财务查看通过(默认或不传state),直接完成
|
||||
# 更新审批记录状态为"已通过"(表示财务已查看)
|
||||
approval.state = "已通过"
|
||||
approval.save(update_fields=['state'])
|
||||
# 确保业务记录状态也为"已通过"(财务查看即完成)
|
||||
if account.state != "已通过":
|
||||
account.state = "已通过"
|
||||
account.save(update_fields=['state'])
|
||||
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
|
||||
# 其他情况(兼容旧数据)
|
||||
@@ -1892,7 +1848,11 @@ class approvalProcessing(APIView):
|
||||
|
||||
# 检查当前是否已经是财务审核
|
||||
if is_finance_personincharge(approval.personincharge) and approval.state == "已抄送财务":
|
||||
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
|
||||
# 财务部只需要查看,不需要审批,查看后直接完成
|
||||
# 如果只传了type和id,不传state,则默认为"已通过"
|
||||
if not state:
|
||||
state = "已通过"
|
||||
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
case.state = "已通过"
|
||||
@@ -2044,7 +2004,11 @@ class approvalProcessing(APIView):
|
||||
|
||||
# 检查当前是否已经是财务审核
|
||||
if is_finance_personincharge(approval.personincharge) and approval.state == "已抄送财务":
|
||||
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
|
||||
# 财务部只需要查看,不需要审批,查看后直接完成
|
||||
# 如果只传了type和id,不传state,则默认为"已通过"
|
||||
if not state:
|
||||
state = "已通过"
|
||||
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
# 用户状态已经在离职登记时设置为"已离职",这里不需要再次修改
|
||||
@@ -2545,7 +2509,8 @@ class ApprovalStatusCheck(APIView):
|
||||
def post(self, request, *args, **kwargs):
|
||||
"""
|
||||
查询待办的审核状态,判断是否已经审核完全通过
|
||||
财务部查看时,自动将状态从"已抄送财务"更新为"已通过",使其从待办列表中移除
|
||||
财务部查看时,自动将状态从"已抄送财务"更新为"已通过",并确保业务记录状态也为"已通过"
|
||||
财务部只需要查看,不需要审批,查看后直接完成(status变为"已完成")
|
||||
:param request:
|
||||
:param args:
|
||||
:param kwargs:
|
||||
@@ -2573,9 +2538,10 @@ class ApprovalStatusCheck(APIView):
|
||||
is_finance_user = '财务部' in user_department_names
|
||||
|
||||
# 如果是财务部人员,且当前审批状态是"已抄送财务",则自动标记为已查看(已通过)
|
||||
# 财务部只需要查看,不需要审批,查看后直接完成
|
||||
if is_finance_user and is_finance_personincharge(approval.personincharge) and approval.state == "已抄送财务":
|
||||
is_finance_view = True
|
||||
# 自动将状态更新为"已通过"
|
||||
# 自动将审批状态更新为"已通过"
|
||||
approval.state = "已通过"
|
||||
approval.save(update_fields=['state'])
|
||||
except User.DoesNotExist:
|
||||
@@ -2592,7 +2558,12 @@ class ApprovalStatusCheck(APIView):
|
||||
income = Income.objects.get(id=approval.user_id, is_deleted=False)
|
||||
business_state = income.state
|
||||
is_approved = (income.state == "已通过")
|
||||
# 如果财务查看,且业务记录状态还是"已通过"(之前已经是已通过),保持状态不变
|
||||
# 如果财务查看,确保业务记录状态为"已通过"(财务查看即完成)
|
||||
if is_finance_view and income.state != "已通过":
|
||||
income.state = "已通过"
|
||||
income.save(update_fields=['state'])
|
||||
business_state = "已通过"
|
||||
is_approved = True
|
||||
except Income.DoesNotExist:
|
||||
pass
|
||||
elif type == "开票":
|
||||
|
||||
Reference in New Issue
Block a user