优化案件模块
This commit is contained in:
@@ -1659,7 +1659,10 @@ class approvalProcessing(APIView):
|
||||
|
||||
# 检查当前是否已经是财务审核
|
||||
if is_finance_personincharge(approval.personincharge) and approval.state == "已抄送财务":
|
||||
# 财务部审核逻辑:财务部只需要一个人审核完即可完成
|
||||
# 财务部审核逻辑:如果只传了type和id,不传state,则默认为"已通过"
|
||||
if not state:
|
||||
state = "已通过"
|
||||
|
||||
if state == "已通过":
|
||||
approval.state = "已通过"
|
||||
seal_app.state = "已通过"
|
||||
@@ -1670,7 +1673,11 @@ class approvalProcessing(APIView):
|
||||
seal_app.save(update_fields=['state'])
|
||||
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
|
||||
|
||||
# 使用统一的审核流程处理函数
|
||||
# 使用统一的审核流程处理函数(与付款申请、报销申请逻辑一样)
|
||||
# 非财务查看时,state参数是必填的
|
||||
if not state:
|
||||
return Response({'status': 'error', 'message': '缺少参数state(审核状态:已通过/未通过)', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
from User.utils import process_approval_flow
|
||||
current_approver = approval.personincharge
|
||||
is_completed, error = process_approval_flow(
|
||||
@@ -2190,6 +2197,7 @@ class ApprovalStatusCheck(APIView):
|
||||
def post(self, request, *args, **kwargs):
|
||||
"""
|
||||
查询待办的审核状态,判断是否已经审核完全通过
|
||||
财务部查看时,自动将状态从"已抄送财务"更新为"已通过",使其从待办列表中移除
|
||||
:param request:
|
||||
:param args:
|
||||
:param kwargs:
|
||||
@@ -2197,6 +2205,7 @@ class ApprovalStatusCheck(APIView):
|
||||
"""
|
||||
type = request.data.get('type')
|
||||
id = request.data.get('id')
|
||||
token = request.META.get('token')
|
||||
|
||||
if not all([type, id]):
|
||||
return Response({'status': 'error', 'message': '缺少参数type或id', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
|
||||
@@ -2206,6 +2215,24 @@ class ApprovalStatusCheck(APIView):
|
||||
except Approval.DoesNotExist:
|
||||
return Response({'status': 'error', 'message': '审批记录不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
# 获取当前用户信息,判断是否是财务部人员
|
||||
is_finance_view = False
|
||||
if token:
|
||||
try:
|
||||
current_user = User.objects.prefetch_related('department').get(token=token, is_deleted=False)
|
||||
user_departments = current_user.department.values_list('username', flat=True)
|
||||
user_department_names = list(user_departments)
|
||||
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:
|
||||
pass
|
||||
|
||||
# 获取业务记录状态
|
||||
business_state = None
|
||||
is_approved = False
|
||||
@@ -2217,6 +2244,7 @@ class ApprovalStatusCheck(APIView):
|
||||
income = Income.objects.get(id=approval.user_id, is_deleted=False)
|
||||
business_state = income.state
|
||||
is_approved = (income.state == "已通过")
|
||||
# 如果财务查看,且业务记录状态还是"已通过"(之前已经是已通过),保持状态不变
|
||||
except Income.DoesNotExist:
|
||||
pass
|
||||
elif type == "开票":
|
||||
@@ -2225,6 +2253,12 @@ class ApprovalStatusCheck(APIView):
|
||||
invoice = Invoice.objects.get(id=approval.user_id, is_deleted=False)
|
||||
business_state = invoice.state
|
||||
is_approved = (invoice.state == "已通过")
|
||||
# 如果财务查看,且业务记录状态还不是"已通过",更新业务记录状态
|
||||
if is_finance_view and invoice.state != "已通过":
|
||||
invoice.state = "已通过"
|
||||
invoice.save(update_fields=['state'])
|
||||
business_state = "已通过"
|
||||
is_approved = True
|
||||
except Invoice.DoesNotExist:
|
||||
pass
|
||||
elif type == "付款申请":
|
||||
@@ -2233,6 +2267,12 @@ class ApprovalStatusCheck(APIView):
|
||||
payment = Payment.objects.get(id=approval.user_id, is_deleted=False)
|
||||
business_state = payment.state
|
||||
is_approved = (payment.state == "已通过")
|
||||
# 如果财务查看,且业务记录状态还不是"已通过",更新业务记录状态
|
||||
if is_finance_view and payment.state != "已通过":
|
||||
payment.state = "已通过"
|
||||
payment.save(update_fields=['state'])
|
||||
business_state = "已通过"
|
||||
is_approved = True
|
||||
except Payment.DoesNotExist:
|
||||
pass
|
||||
elif type == "报销申请":
|
||||
@@ -2241,6 +2281,12 @@ class ApprovalStatusCheck(APIView):
|
||||
reimbursement = Reimbursement.objects.get(id=approval.user_id, is_deleted=False)
|
||||
business_state = reimbursement.state
|
||||
is_approved = (reimbursement.state == "已完成")
|
||||
# 如果财务查看,且业务记录状态还不是"已通过",更新业务记录状态
|
||||
if is_finance_view and reimbursement.state != "已通过":
|
||||
reimbursement.state = "已通过"
|
||||
reimbursement.save(update_fields=['state'])
|
||||
business_state = "已通过"
|
||||
is_approved = True
|
||||
except Reimbursement.DoesNotExist:
|
||||
pass
|
||||
elif type == "案件管理":
|
||||
@@ -2249,8 +2295,28 @@ class ApprovalStatusCheck(APIView):
|
||||
case = Case.objects.get(id=approval.user_id, is_deleted=False)
|
||||
business_state = case.state
|
||||
is_approved = (case.state == "已通过")
|
||||
# 如果财务查看,且业务记录状态还不是"已通过",更新业务记录状态
|
||||
if is_finance_view and case.state != "已通过":
|
||||
case.state = "已通过"
|
||||
case.save(update_fields=['state'])
|
||||
business_state = "已通过"
|
||||
is_approved = True
|
||||
except Case.DoesNotExist:
|
||||
pass
|
||||
elif type == "申请用印":
|
||||
from business.models import SealApplication
|
||||
try:
|
||||
seal_app = SealApplication.objects.get(id=approval.user_id, is_deleted=False)
|
||||
business_state = seal_app.state
|
||||
is_approved = (seal_app.state == "已通过")
|
||||
# 如果财务查看,且业务记录状态还不是"已通过",更新业务记录状态
|
||||
if is_finance_view and seal_app.state != "已通过":
|
||||
seal_app.state = "已通过"
|
||||
seal_app.save(update_fields=['state'])
|
||||
business_state = "已通过"
|
||||
is_approved = True
|
||||
except SealApplication.DoesNotExist:
|
||||
pass
|
||||
# 可以根据需要添加其他类型
|
||||
except Exception as e:
|
||||
import logging
|
||||
@@ -2265,7 +2331,8 @@ class ApprovalStatusCheck(APIView):
|
||||
'approval_state': approval.state,
|
||||
'business_state': business_state,
|
||||
'is_approved': is_approved, # 是否已经审核完全通过
|
||||
'type': type
|
||||
'type': type,
|
||||
'auto_marked_as_viewed': is_finance_view # 是否已自动标记为已查看
|
||||
}
|
||||
}, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
@@ -2198,7 +2198,11 @@ class Application(APIView):
|
||||
"""
|
||||
token = request.META.get('token')
|
||||
Printingpurpose = request.data.get('Printingpurpose')
|
||||
# 案件编号(前端可不传),后端自动同步为“合同号”
|
||||
# 兼容:仍支持直接传 CaseNumber(即合同号)
|
||||
CaseNumber = request.data.get('CaseNumber')
|
||||
case_id = request.data.get('case_id')
|
||||
project_id = request.data.get('project_id')
|
||||
Reason = request.data.get('Reason')
|
||||
seal_number = request.data.get('seal_number')
|
||||
seal_type = request.data.get('seal_type')
|
||||
@@ -2212,9 +2216,35 @@ class Application(APIView):
|
||||
now = datetime.now()
|
||||
date_str = now.strftime('%Y-%m-%d')
|
||||
user = User.objects.get(token=token, is_deleted=False)
|
||||
|
||||
# 自动查询合同号写入 CaseNumber(案件编号)
|
||||
# 优先级:case_id > project_id > CaseNumber(兼容旧传参)
|
||||
contract_no = None
|
||||
if case_id:
|
||||
try:
|
||||
case = Case.objects.select_related('project').get(id=case_id, is_deleted=False)
|
||||
contract_no = case.contract_no or (case.project.ContractNo if case.project else None)
|
||||
except Case.DoesNotExist:
|
||||
return Response({'status': 'error', 'message': '案件不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
|
||||
elif project_id:
|
||||
try:
|
||||
project = ProjectRegistration.objects.get(id=project_id, is_deleted=False)
|
||||
contract_no = project.ContractNo
|
||||
except ProjectRegistration.DoesNotExist:
|
||||
return Response({'status': 'error', 'message': '立项登记不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
|
||||
else:
|
||||
contract_no = CaseNumber
|
||||
|
||||
if not contract_no:
|
||||
return Response({
|
||||
'status': 'error',
|
||||
'message': '缺少案件信息:请传 case_id 或 project_id 以自动获取合同号,或直接传 CaseNumber(合同号)',
|
||||
'code': 1
|
||||
}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
sea = SealApplication.objects.create(
|
||||
Printingpurpose=Printingpurpose,
|
||||
CaseNumber=CaseNumber,
|
||||
CaseNumber=contract_no,
|
||||
Reason=Reason,
|
||||
seal_number=seal_number,
|
||||
seal_type=seal_type,
|
||||
@@ -2230,7 +2260,7 @@ class Application(APIView):
|
||||
team_name=team_name,
|
||||
approvers=approvers,
|
||||
title=user.username + "申请用印",
|
||||
content=user.username + "在" + date_str + "申请用印,用印事由:" + Reason + ",盖章份数:" + seal_number + "盖着类型:" + seal_type,
|
||||
content=user.username + "在" + date_str + "申请用印,合同编号:" + str(contract_no) + ",用印事由:" + Reason + ",盖章份数:" + seal_number + "盖着类型:" + seal_type,
|
||||
approval_type="申请用印",
|
||||
user_id=sea.id,
|
||||
business_record=sea,
|
||||
@@ -2308,7 +2338,10 @@ class EditApplication(APIView):
|
||||
"""
|
||||
id = request.data.get('id')
|
||||
Printingpurpose = request.data.get('Printingpurpose')
|
||||
# 案件编号(合同号):支持前端直接传,也支持通过 case_id/project_id 自动同步
|
||||
CaseNumber = request.data.get('CaseNumber')
|
||||
case_id = request.data.get('case_id')
|
||||
project_id = request.data.get('project_id')
|
||||
Reason = request.data.get('Reason')
|
||||
seal_number = request.data.get('seal_number')
|
||||
seal_type = request.data.get('seal_type')
|
||||
@@ -2329,8 +2362,25 @@ class EditApplication(APIView):
|
||||
if Printingpurpose:
|
||||
app.Printingpurpose = Printingpurpose
|
||||
app.save(update_fields=['Printingpurpose'])
|
||||
if CaseNumber:
|
||||
app.CaseNumber = CaseNumber
|
||||
# 优先通过 case_id / project_id 自动同步合同号
|
||||
contract_no = None
|
||||
if case_id:
|
||||
try:
|
||||
case = Case.objects.select_related('project').get(id=case_id, is_deleted=False)
|
||||
contract_no = case.contract_no or (case.project.ContractNo if case.project else None)
|
||||
except Case.DoesNotExist:
|
||||
return Response({'status': 'error', 'message': '案件不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
|
||||
elif project_id:
|
||||
try:
|
||||
project = ProjectRegistration.objects.get(id=project_id, is_deleted=False)
|
||||
contract_no = project.ContractNo
|
||||
except ProjectRegistration.DoesNotExist:
|
||||
return Response({'status': 'error', 'message': '立项登记不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
|
||||
elif CaseNumber:
|
||||
contract_no = CaseNumber
|
||||
|
||||
if contract_no:
|
||||
app.CaseNumber = contract_no
|
||||
app.save(update_fields=['CaseNumber'])
|
||||
if Reason:
|
||||
app.Reason = Reason
|
||||
@@ -2354,7 +2404,7 @@ class EditApplication(APIView):
|
||||
team_name=team_name,
|
||||
approvers=approvers,
|
||||
title=app.username + "申请用印重新编辑",
|
||||
content=app.username + "在" + date_str + "申请用印,用印事由:" + (
|
||||
content=app.username + "在" + date_str + "申请用印,合同编号:" + str(contract_no or app.CaseNumber) + ",用印事由:" + (
|
||||
Reason or app.Reason) + ",盖章份数:" + (seal_number or app.seal_number) + "盖着类型:" + (
|
||||
seal_type or app.seal_type),
|
||||
approval_type="申请用印",
|
||||
|
||||
Reference in New Issue
Block a user