优化案件模块

This commit is contained in:
27942
2026-01-20 16:10:15 +08:00
parent 2a350fd9ad
commit a497ea2fc3
2 changed files with 62 additions and 88 deletions

View File

@@ -1386,36 +1386,7 @@ class approvalProcessing(APIView):
except Payment.DoesNotExist:
return Response({'status': 'error', 'message': '付款申请记录不存在或已被删除', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
# 检查支付方式
payment_type = getattr(payment, 'payment_type', '律所支付')
# 如果是律所支付,且当前是律所负责人审批
if payment_type == "律所支付" and not is_finance_personincharge(approval.personincharge):
# 律所负责人审批
if not state:
return Response({'status': 'error', 'message': '缺少参数state审核状态已通过/未通过)', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
if state == "已通过":
# 律所负责人同意后,抄送给财务部负责人
from User.utils import get_finance_personincharge_value
finance_personincharge = get_finance_personincharge_value()
approval.personincharge = finance_personincharge
approval.state = "已抄送财务"
approval.content = approval.content + ",已抄送财务部"
approval.save(update_fields=['personincharge', 'state', 'content'])
payment.state = "已通过"
payment.save(update_fields=['state'])
return Response({'message': '处理成功,已抄送财务', 'code': 0}, status=status.HTTP_200_OK)
else:
# 律所负责人不同意
approval.state = "未通过"
approval.save(update_fields=['state'])
payment.state = "未通过"
payment.save(update_fields=['state'])
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
# 如果是财务审核(自己账户支付或律所支付已到财务阶段)
# 检查当前是否已经是财务审核
if is_finance_personincharge(approval.personincharge) and approval.state == "已抄送财务":
# 财务部审核逻辑如果只传了type和id不传state则默认为"已通过"
if not state:
@@ -1431,7 +1402,8 @@ class approvalProcessing(APIView):
approval.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)

View File

@@ -1974,11 +1974,12 @@ class PaymentRequest(APIView):
4、收款方名称
5、收款方银行账号
6、收款方开户行
7、申请人
7、申请人通过token自动获取
8、支付说明
抄送逻辑:
- 如果是律所支付:抄送给律所负责人审批,生成待办,律所负责人同意后抄送给财务部负责人
- 如果是自己账户支付:直接抄送财务负责人
9、审批人可选多人团队时需要
审批逻辑和离职逻辑一样:
- 个人团队personal/独立律师):不触发审批,直接抄送财务
- 团队team/团队律师):需要审批,按顺序依次审批,最后抄送财务
:param request:
:param args:
:param kwargs:
@@ -1990,9 +1991,11 @@ class PaymentRequest(APIView):
payee_name = request.data.get('payee_name') # 收款方名称
payee_account = request.data.get('payee_account') # 收款方银行账号
payee_bank = request.data.get('payee_bank') # 收款方开户行
applicant = request.data.get('applicant') # 申请人
payment_description = request.data.get('payment_description') # 支付说明
payment_type = request.data.get('payment_type', '律所支付') # 支付方式:律所支付/自己账户支付
approvers = request.data.get('approvers') # 审核人列表可选多人团队时需要推荐用户ID数组如[1,2,3],兼容:用户名数组)
# 兼容旧接口:如果传了 personincharge转换为 approvers
personincharge = request.data.get('personincharge')
approvers = normalize_approvers_param(approvers, personincharge)
# 兼容旧字段
reason = request.data.get('reason') or payment_reason
@@ -2000,8 +2003,8 @@ class PaymentRequest(APIView):
bankcard = request.data.get('bankcard') or payee_account
BankName = request.data.get('BankName') or payee_bank
# 必填字段验证
if not all([payment_reason or reason, amount, payee_name or payee, payee_account or bankcard, payee_bank or BankName, applicant, payment_description]):
# 必填字段验证申请人通过token获取不需要验证
if not all([payment_reason or reason, amount, payee_name or payee, payee_account or bankcard, payee_bank or BankName, payment_description]):
missing_params = []
if not (payment_reason or reason):
missing_params.append('payment_reason(付款事由)')
@@ -2013,8 +2016,6 @@ class PaymentRequest(APIView):
missing_params.append('payee_account(收款方银行账号)')
if not (payee_bank or BankName):
missing_params.append('payee_bank(收款方开户行)')
if not applicant:
missing_params.append('applicant(申请人)')
if not payment_description:
missing_params.append('payment_description(支付说明)')
return Response({
@@ -2023,17 +2024,33 @@ class PaymentRequest(APIView):
'code': 1
}, status=status.HTTP_400_BAD_REQUEST)
# 从token获取申请人
token = request.META.get('token')
try:
applicant_user = User.objects.get(token=token, is_deleted=False)
applicant = applicant_user.username
except User.DoesNotExist:
return Response({'status': 'error', 'message': '用户不存在或已被删除', 'code': 1},
status=status.HTTP_401_UNAUTHORIZED)
from datetime import datetime
now = datetime.now()
date_string = now.strftime("%Y-%m-%d")
# 获取申请人的团队信息
team_name = None
try:
applicant_user = User.objects.get(username=applicant, is_deleted=False)
team_name = applicant_user.team
except User.DoesNotExist:
return Response({'status': 'error', 'message': '申请人不存在', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
team_name = applicant_user.team
team = None
if team_name:
from User.models import Team
try:
team = Team.objects.get(name=team_name, is_deleted=False)
except Team.DoesNotExist:
# 如果团队不存在,默认按团队类型处理(需要审批)
pass
# 根据团队类型决定初始状态
# 如果是团队类型且需要审核,状态为"审核中";否则为"已通过"(直接抄送财务)
initial_state = "审核中" if (team and team.team_type == 'team') else "已通过"
# 创建付款申请记录
pay = Payment.objects.create(
@@ -2047,7 +2064,7 @@ class PaymentRequest(APIView):
payment_description=payment_description,
payment_type=payment_type,
submit_tiem=date_string,
state="审核中",
state=initial_state,
# 兼容旧字段
reason=reason or payment_reason,
payee=payee or payee_name,
@@ -2069,45 +2086,27 @@ class PaymentRequest(APIView):
content_parts.insert(3, f"付款日期:{times}")
content = "".join(content_parts)
# 根据支付方式决定审批流程
from User.utils import get_finance_personincharge_value, get_law_firm_leader
from User.models import Approval
if payment_type == "律所支付":
# 律所支付:先抄送给律所负责人审批
law_firm_leader = get_law_firm_leader(team_name)
if not law_firm_leader:
return Response({
'status': 'error',
'message': '无法找到律所负责人,请检查团队配置或管委会角色',
'code': 1
}, status=status.HTTP_400_BAD_REQUEST)
approval = Approval.objects.create(
title=applicant + "提交付款申请",
content=content,
times=date_string,
personincharge=law_firm_leader,
state="审核中",
type="付款申请",
user_id=str(pay.id)
)
pay.state = "审核中"
pay.save(update_fields=['state'])
else:
# 自己账户支付:直接抄送财务负责人
finance_personincharge = get_finance_personincharge_value()
approval = Approval.objects.create(
title=applicant + "提交付款申请",
content=content,
times=date_string,
personincharge=finance_personincharge,
state="已抄送财务",
type="付款申请",
user_id=str(pay.id)
)
pay.state = "已通过" # 自己账户支付直接通过
pay.save(update_fields=['state'])
# 使用统一的审核流程函数(与离职逻辑一样)
from User.utils import create_approval_with_team_logic
approval, approvers_order_json, needs_approval = create_approval_with_team_logic(
team_name=team_name,
approvers=approvers,
title=applicant + "提交付款申请",
content=content,
approval_type="付款申请",
user_id=str(pay.id),
business_record=pay,
today=date_string
)
# 如果返回None且需要审核说明缺少审核人
if approval is None and needs_approval:
return Response({
'status': 'error',
'message': build_missing_approvers_message(team_name, approvers),
'code': 1
}, status=status.HTTP_400_BAD_REQUEST)
# 记录操作日志
new_data = {
@@ -2137,7 +2136,10 @@ class PaymentRequest(APIView):
'data': {
'id': pay.id,
'state': pay.state,
'approval_id': approval.id if approval else None
'approval_id': approval.id if approval else None,
'needs_approval': team is None or team.team_type != 'personal', # 是否需要审批(前端用这个字段判断是团队还是个人)
'team_type': team.team_type if team else None, # 团队类型personal/team前端用这个字段判断
'team_name': team_name # 团队名称
}
}, status=status.HTTP_200_OK)