优化离职登记审批
This commit is contained in:
136
finance/views.py
136
finance/views.py
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user