优化案件模块
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
116
finance/views.py
116
finance/views.py
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user