优化离职登记审批

This commit is contained in:
27942
2026-01-08 18:12:49 +08:00
parent b011550fb7
commit b7a30b118a
3 changed files with 438 additions and 25 deletions

View File

@@ -1324,40 +1324,126 @@ class UserDeparture(APIView):
user.state = "已离职"
user.save(update_fields=['Dateofdeparture', 'state'])
# 创建离职审批记录
today = datetime.datetime.now()
formatted_date = today.strftime("%Y-%m-%d")
# 根据团队类型判断是否需要审批
# 规则:
# - 个人团队personal/独立律师):不触发审批
# - 团队team/团队律师):需要审批,直接选择某个人,审批人需要指定结算工资
from User.models import Team
# 统一使用personincharge字段统一规则纯数字字符串=部门ID非纯数字字符串=审批员用户名)
if personincharge:
# 判断是部门ID还是审批员用户名
# 获取用户的团队信息
team_name = user.team # 用户的团队名称CharField
team = None
if team_name:
try:
team = Team.objects.get(name=team_name, is_deleted=False)
except Team.DoesNotExist:
# 如果团队不存在,默认按团队类型处理(需要审批)
pass
# 判断是否需要审批
if team and team.team_type == 'personal':
# 个人团队(独立律师):不触发审批,直接完成
# 不创建审批记录,但记录日志
new_data = {
'user_id': user.id,
'username': user.username,
'Dateofdeparture': Dateofdeparture,
'state': user.state,
'team_type': 'personal',
'note': '个人团队,无需审批'
}
log_operation(
request=request,
operation_type='CREATE',
module='Finance',
action='新增离职财务登记(个人团队)',
target_type='User',
target_id=user.id,
target_name=user.username,
new_data=new_data,
remark=f'新增离职财务登记:{user.username},离职时间 {Dateofdeparture}(个人团队,无需审批)'
)
else:
# 团队类型(团队律师):需要审批,必须指定审批人
settlement_salary = request.data.get('settlement_salary') # 结算工资(可选,审批人可以后续填写)
if not personincharge:
return Response({
'status': 'error',
'message': '团队类型需要指定审批人,请选择审批人',
'code': 1
}, status=status.HTTP_400_BAD_REQUEST)
# 验证审批人是否存在personincharge应该是用户名不是部门ID
from User.utils import is_department_id
if is_department_id(personincharge):
# 如果是部门ID验证部门是否存在
try:
department = Department.objects.get(id=int(personincharge))
except (Department.DoesNotExist, ValueError):
return Response({'status': 'error', 'message': '审批部门不存在', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
personincharge_value = format_personincharge(personincharge, is_department=is_department_id(personincharge))
else:
personincharge_value = ""
Approval.objects.create(
title=username + "离职财务登记",
content=username + "" + Dateofdeparture + "办理离职登记",
times=formatted_date,
personincharge=personincharge_value,
state='审核中',
type="离职财务登记",
user_id=str(user.id)
)
# 不允许使用部门ID必须直接选择某个人
return Response({
'status': 'error',
'message': '请直接选择审批人用户名不能使用部门ID',
'code': 1
}, status=status.HTTP_400_BAD_REQUEST)
# 验证审批人用户是否存在
try:
approver = User.objects.get(username=personincharge, is_deleted=False)
except User.DoesNotExist:
return Response({
'status': 'error',
'message': f'审批人"{personincharge}"不存在或已被删除',
'code': 1
}, status=status.HTTP_404_NOT_FOUND)
# 创建离职审批记录
today = datetime.datetime.now()
formatted_date = today.strftime("%Y-%m-%d")
# 构建审批内容,包含结算工资信息(如果已提供)
content_parts = [f"{username}{Dateofdeparture}办理离职登记"]
if settlement_salary:
content_parts.append(f"结算工资:{settlement_salary}")
else:
content_parts.append("结算工资:待审批人指定")
content = "".join(content_parts)
approval = Approval.objects.create(
title=username + "离职财务登记",
content=content,
times=formatted_date,
personincharge=personincharge, # 直接使用审批人用户名
state='审核中',
type="离职财务登记",
user_id=str(user.id)
)
# 记录操作日志
new_data = {
'user_id': user.id,
'username': user.username,
'Dateofdeparture': Dateofdeparture,
'state': user.state,
'approver': personincharge,
'settlement_salary': settlement_salary if settlement_salary else '待审批人指定'
}
log_operation(
request=request,
operation_type='CREATE',
module='Finance',
action='新增离职财务登记',
target_type='User',
target_id=user.id,
target_name=user.username,
new_data=new_data,
remark=f'新增离职财务登记:{user.username},离职时间 {Dateofdeparture},审批人 {personincharge}'
)
return Response({
'message': '离职登记成功',
'code': 0,
'data': {
'has_cases': False,
'case_count': 0
'case_count': 0,
'needs_approval': team is None or team.team_type != 'personal' # 是否需要审批
}
}, status=status.HTTP_200_OK)