Files
jyls_django/User/views.py
2025-12-30 16:28:07 +08:00

808 lines
34 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from django.contrib.auth.models import Permission
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
import json
import ast
from .models import User, Approval, Department
from business.models import permission
from finance.models import Income, Accounts, Payment, Reimbursement, BonusChange
from finance.models import Invoice
from business.models import ProjectRegistration, Case, SealApplication
import datetime
from utility.utility import flies
from django.contrib.sessions.backends.db import SessionStore
from django.db.models import Count, Q
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from collections import defaultdict
from .utils import is_department_id
class CreateUserView(APIView):
def post(self, request, *args, **kwargs):
"""人事管理-人员添加"""
role = request.data.get('role')
username = request.data.get('username') # 姓名
account = request.data.get('account') # 账号
password = request.data.get('password') # 密码
nation = request.data.get('nation') # 民族
IdCard = request.data.get('IdCard') # 身份证
department = request.data.get('department') # 归属部门
mobilePhone = request.data.get('mobilePhone') # 手机号
position = request.data.get('position') # 岗位
team = request.data.get('team') # 所属团队
Dateofjoining = request.data.get('Dateofjoining') # 入职时间
Confirmationtime = request.data.get('Confirmationtime') # 转正时间
Practicingcertificatetime = request.data.get('Practicingcertificatetime') # 执业证时间
AcademicResume = request.FILES.getlist('AcademicResume') # 学业简历
academic = request.data.get('academic') # 学历
contract = request.FILES.getlist('contract') # 合同
ApplicationForm = request.FILES.getlist('ApplicationForm') # 入职申请表
salary = request.data.get('salary') # 工资标准
# 详细的参数验证,提供更明确的错误信息
missing_params = []
if not username:
missing_params.append('username(姓名)')
if not account:
missing_params.append('account(账号)')
if not password:
missing_params.append('password(密码)')
if not IdCard:
missing_params.append('IdCard(身份证)')
if not department:
missing_params.append('department(归属部门)')
if not position:
missing_params.append('position(岗位)')
if not nation:
missing_params.append('nation(民族)')
if not mobilePhone:
missing_params.append('mobilePhone(手机号)')
if not team:
missing_params.append('team(所属团队)')
if not Dateofjoining:
missing_params.append('Dateofjoining(入职时间)')
if not academic:
missing_params.append('academic(学历)')
if not contract or (isinstance(contract, list) and len(contract) == 0):
missing_params.append('contract(合同文件)')
if missing_params:
return Response({
'status': 'error',
'message': f'缺少参数: {", ".join(missing_params)}',
'code': 1
}, status=status.HTTP_400_BAD_REQUEST)
# 检查用户名是否已存在username字段有唯一性约束
if User.objects.filter(username=username).exists():
return Response({'status': 'error', 'message': '用户名已存在,不能重复', 'code': 1},
status=status.HTTP_400_BAD_REQUEST)
AcademicResume_url = flies(AcademicResume)
ApplicationForm_url = flies(ApplicationForm)
contract_url = flies(contract)
# 日期格式验证和解析
try:
Dateofjoining = datetime.datetime.strptime(Dateofjoining, "%Y-%m-%d")
except ValueError:
return Response({'status': 'error', 'message': '入职时间格式错误应为YYYY-MM-DD格式', 'code': 1},
status=status.HTTP_400_BAD_REQUEST)
if Confirmationtime:
try:
Confirmationtime = datetime.datetime.strptime(Confirmationtime, "%Y-%m-%d")
except ValueError:
return Response({'status': 'error', 'message': '转正时间格式错误应为YYYY-MM-DD格式', 'code': 1},
status=status.HTTP_400_BAD_REQUEST)
else:
Confirmationtime = None
if Practicingcertificatetime:
try:
Practicingcertificatetime = datetime.datetime.strptime(Practicingcertificatetime, "%Y-%m-%d")
except ValueError:
return Response({'status': 'error', 'message': '执业证时间格式错误应为YYYY-MM-DD格式', 'code': 1},
status=status.HTTP_400_BAD_REQUEST)
else:
Practicingcertificatetime = None
# 解析角色和部门ID列表
try:
if role:
role_list = ast.literal_eval(role) if isinstance(role, str) else role
if not isinstance(role_list, list):
role_list = [role_list] if role_list else []
else:
role_list = []
except (ValueError, SyntaxError) as e:
return Response({'status': 'error', 'message': f'角色参数格式错误: {str(e)}', 'code': 1},
status=status.HTTP_400_BAD_REQUEST)
try:
if department:
department_id = ast.literal_eval(department) if isinstance(department, str) else department
if not isinstance(department_id, list):
department_id = [department_id] if department_id else []
else:
department_id = []
except (ValueError, SyntaxError) as e:
return Response({'status': 'error', 'message': f'部门参数格式错误: {str(e)}', 'code': 1},
status=status.HTTP_400_BAD_REQUEST)
# 创建用户,添加异常处理
try:
user = User.objects.create(
username=username,
account=account,
password=password,
ethnicity=nation,
card=IdCard,
mobilePhone=mobilePhone,
position=position,
team=team,
Dateofjoining=Dateofjoining,
Confirmationtime=Confirmationtime,
Practicingcertificatetime=Practicingcertificatetime,
AcademicResume=json.dumps(AcademicResume_url),
academic=academic,
contract=json.dumps(contract_url),
ApplicationForm=json.dumps(ApplicationForm_url),
state="待登记",
salary=salary
)
# 添加角色和部门关联
if role_list:
user.role.add(*role_list)
if department_id:
user.department.add(*department_id)
return Response({'message': '添加人员成功', 'code': 0}, status=status.HTTP_200_OK)
except Exception as e:
# 捕获数据库操作异常
error_msg = str(e)
if 'Duplicate entry' in error_msg or 'UNIQUE constraint' in error_msg:
if 'username' in error_msg:
return Response({'status': 'error', 'message': '用户名已存在,不能重复', 'code': 1},
status=status.HTTP_400_BAD_REQUEST)
else:
return Response({'status': 'error', 'message': '数据已存在,请检查唯一性约束', 'code': 1},
status=status.HTTP_400_BAD_REQUEST)
else:
return Response({'status': 'error', 'message': f'创建用户失败: {error_msg}', 'code': 1},
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
class EditorialStaffView(APIView):
def post(self, request, *args, **kwargs):
"""修改人员信息"""
print(request.data)
id = request.data.get('id')
username = request.data.get('username') # 姓名
account = request.data.get('account') # 账号
password = request.data.get('password') # 密码
nation = request.data.get('nation') # 民族
IdCard = request.data.get('IdCard') # 身份证
department = request.data.get('department') # 归属部门
mobilePhone = request.data.get('mobilePhone') # 手机号
position = request.data.get('position') # 岗位
team = request.data.get('team') # 所属团队
Dateofjoining = request.data.get('Dateofjoining') # 入职时间
Confirmationtime = request.data.get('Confirmationtime') # 转正时间
Practicingcertificatetime = request.data.get('Practicingcertificatetime') # 执业证时间
AcademicResume = request.FILES.getlist('AcademicResume') # 学业简历
academic = request.data.get('academic') # 学历
contract = request.FILES.getlist('contract') # 合同
ApplicationForm = request.FILES.getlist('ApplicationForm') # 入职申请表
salary = request.data.get('salary') # 工资标准
print([username, account, password, IdCard, department, position, nation, mobilePhone, team, Dateofjoining,
academic])
if not all([username, account, password, IdCard, department, position, nation, mobilePhone, team, Dateofjoining,
academic]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
user = User.objects.get(id=id)
# 检查用户名是否已被其他用户使用(排除当前用户)
if username and User.objects.filter(username=username).exclude(id=id).exists():
return Response({'status': 'error', 'message': '用户名已存在,不能重复', 'code': 1},
status=status.HTTP_400_BAD_REQUEST)
if AcademicResume:
AcademicResume_url = flies(AcademicResume)
user.AcademicResume = json.dumps(AcademicResume_url)
if ApplicationForm:
ApplicationForm_url = flies(ApplicationForm)
user.ApplicationForm = json.dumps(ApplicationForm_url)
if contract:
contract_url = flies(contract)
user.contract = json.dumps(contract_url)
def parse_date_str(date_str):
if date_str and date_str != "0000-00-00":
return datetime.datetime.strptime(date_str, "%Y-%m-%d").strftime('%Y-%m-%d')
return "" # 设置默认日期
Dateofjoining = parse_date_str(Dateofjoining)
Confirmationtime = parse_date_str(Confirmationtime)
Practicingcertificatetime = parse_date_str(Practicingcertificatetime)
user.Confirmationtime = Confirmationtime
user.Practicingcertificatetime = Practicingcertificatetime
user.Dateofjoining = Dateofjoining
user.username = username
user.account = account
user.password = password
user.ethnicity = nation
user.card = IdCard
user.mobilePhone = mobilePhone
user.position = position
user.team = team
user.academic = academic
user.salary = salary
# 处理 ManyToMany 字段 department
if department:
try:
# 尝试解析 JSON 格式的字符串,如 "[1,2]" 或 "1,2"
if isinstance(department, str):
# 如果是 "1,2" 格式,先转换为列表格式
if ',' in department and not department.startswith('['):
department_id = [int(x.strip()) for x in department.split(',')]
else:
department_id = ast.literal_eval(department)
else:
department_id = department
# 确保 department_id 是列表格式ManyToMany 字段的 set 方法需要可迭代对象)
if not isinstance(department_id, (list, tuple)):
department_id = [department_id]
user.department.set(department_id)
except (ValueError, SyntaxError):
# 如果解析失败尝试作为单个ID处理
try:
user.department.set([int(department)])
except (ValueError, TypeError):
pass
# 处理 ManyToMany 字段 role如果有传入
role = request.data.get('role')
if role:
role_id = ast.literal_eval(role) if isinstance(role, str) else role
# 确保 role_id 是列表格式ManyToMany 字段的 set 方法需要可迭代对象)
if not isinstance(role_id, (list, tuple)):
role_id = [role_id]
user.role.set(role_id)
user.save()
return Response({'message': '修改成功', 'code': 0}, status=status.HTTP_200_OK)
class LoginView(APIView):
"""
登录页面
"""
def post(self, request):
token = request.META.get('token')
username = request.data.get('username')
password = request.data.get('password')
if not all([username, password]):
return Response({'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
user = User.objects.get(account=username)
# 只有"在职"状态的用户才能登录,新创建的用户需要完成财务登记审批流程
if user.state != '在职':
if user.state == '待登记':
return Response(
{'message': '您的账号尚未完成财务登记,请联系财务部门完成入职财务登记审批。', 'code': 1},
status=status.HTTP_400_BAD_REQUEST)
else:
return Response({'message': '你的账号已经封存。', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
# 比较密码
if user.password == password or user.token == token:
# if '123456' == password or user.token == token:
# 更新 encryption 字段到数据库
user.token = token
user.save()
# 创建会话
session = SessionStore()
session.create()
session['user_id'] = user.id
session.save()
# 置 sessionid 到响应的 cookie 中
response = Response({
'id': user.id,
'message': '登录成功',
'code': 0
}, status=status.HTTP_200_OK)
response.set_cookie(key='sessionid', value=session.session_key, httponly=True)
return response
else:
return Response({'message': '密码错误', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
except User.DoesNotExist:
return Response({'status': 'error', 'message': '用户不存在', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
class PersonnelDetailsView(APIView):
"""展示人员信息"""
def post(self, request, *args, **kwargs):
token = request.META.get('token')
user = User.objects.prefetch_related('role', 'department').get(token=token)
# 如果是admin用户直接返回最高权限标识
if user.username == 'admin' or user.account == 'admin':
permission_data = ['*:*:*']
else:
# 非admin用户从数据库查询权限
permissionId = list(user.role.values("permissionId"))
permission_ids_raw = [item['permissionId'] for item in permissionId if item['permissionId']]
permission_ids = []
# 解析权限ID支持多种格式
for perm_str in permission_ids_raw:
if not perm_str:
continue
try:
# 处理逗号分隔的字符串格式(如 "1,2,3"
if ',' in perm_str and not perm_str.strip().startswith('['):
perm_list = [int(x.strip()) for x in perm_str.split(',') if x.strip()]
permission_ids.extend(perm_list)
else:
# 处理 JSON 列表格式(如 "[1,2,3]")或单个数字字符串(如 "1"
parsed = ast.literal_eval(perm_str)
if isinstance(parsed, list):
permission_ids.extend(parsed)
elif isinstance(parsed, int):
# 单个数字的情况
permission_ids.append(parsed)
except (ValueError, SyntaxError):
# 如果解析失败跳过这个权限ID
continue
permissions = permission.objects.filter(id__in=permission_ids)
permission_data = []
for per in permissions:
permission_data.append(per.permission_logo)
data = {
'id': user.id,
'username': user.username,
'account': user.account,
"ethnicity": user.ethnicity,
"card": user.card,
"mobilePhone": user.mobilePhone,
"position": user.position,
"team": user.team,
"Dateofjoining": user.Dateofjoining,
"Confirmationtime": user.Confirmationtime,
'Practicingcertificatetime': user.Practicingcertificatetime,
"Dateofdeparture": user.Dateofdeparture,
"AcademicResume": user.AcademicResume,
"academic": user.academic,
"contract": user.contract,
"ApplicationForm": user.ApplicationForm,
"state": user.state,
# 角色数据
"role": list(user.role.values('id', 'RoleName', "permissionId")), # 假设Role模型有name字段
# 如果需要部门数据
"department": list(user.department.values('id', 'username')),
"permission_data": permission_data,
}
return Response({'message': '详细人员信息展示成功', "data": data, 'code': 0}, status=status.HTTP_200_OK)
class DepartmentView(APIView):
def post(self, request, *args, **kwargs):
"""部门列表"""
name = request.data.get('name')
Q_obj = Q()
if name:
Q_obj &= Q(username__icontains=name)
deps = Department.objects.filter(Q_obj)
data = []
for dep in deps:
data.append({
'id': dep.id,
'name': dep.username,
})
return Response({'message': '展示成功', "data": data, 'code': 0}, status=status.HTTP_200_OK)
class PersonnelListView(APIView):
def post(self, request, *args, **kwargs):
"""
人员列表
:param request:
:param args:
:param kwargs:
:return:
"""
page = request.data.get('page')
per_page = request.data.get('per_page')
username = request.data.get('username')
department = request.data.get('department')
if not all([page, per_page]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
Q_obj = Q()
if username:
Q_obj &= Q(username__icontains=username)
if department:
Q_obj &= Q(department__username__icontains=department)
users = User.objects.prefetch_related('department', 'role').filter(Q_obj).order_by('-id')
total = len(users)
paginator = Paginator(users, per_page)
try:
user_agents_page = paginator.page(page)
except PageNotAnInteger:
user_agents_page = paginator.page(1)
except EmptyPage:
user_agents_page = paginator.page(paginator.num_pages)
data = []
for info in user_agents_page.object_list:
data.append({
'id': info.id,
"username": info.username, # 姓名
"account": info.account, # 账号
"nation": info.ethnicity, # 名族
"IdCard": info.card, # 身份证
"mobilePhone": info.mobilePhone, # 手机号
"department": list(info.department.values('id', 'username')),
"role": list(info.role.values('id', 'RoleName', 'permissionId')), # 角色信息
"position": info.position, # 岗位
"team": info.team, # 所属团队
"Dateofjoining": info.Dateofjoining, # 入职时间
"Confirmationtime": info.Confirmationtime, # # 转正时间
'Practicingcertificatetime': info.Practicingcertificatetime, # 执业证时间
"Dateofdeparture": info.Dateofdeparture, # 离职时间
"AcademicResume": info.AcademicResume, # 学业简历
"academic": info.academic, # 学历信息
"contract": info.contract, # 合同
"ApplicationForm": info.ApplicationForm, # 入职申请表
"salary": info.salary, # 工资
"state": info.state, # 状态
})
return Response({'message': '查看成功', "total": total, 'data': data, 'code': 0}, status=status.HTTP_200_OK)
class AddDepartment(APIView):
def post(self, request, *args, **kwargs):
name = request.data.get('name')
if not all([name]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
dep = Department.objects.filter(username=name).first()
if dep:
return Response({'message': '添加失败,部门存在', 'code': 0}, status=status.HTTP_400_BAD_REQUEST)
Department.objects.create(username=name)
return Response({'message': '添加部门成功', 'code': 0}, status=status.HTTP_200_OK)
class DeleteDepartment(APIView):
def post(self, request, *args, **kwargs):
id = request.data.get('id')
if not all([id]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
dep = Department.objects.get(id=id)
except Department.DoesNotExist:
return Response({'status': 'error', 'message': '部门不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
department = User.objects.filter(department=dep)
if department.exists():
return Response({'status': 'error', 'message': '删除失败,该部门还存在人员,请及时转移', 'code': 1},
status=status.HTTP_400_BAD_REQUEST)
dep.delete()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
class Personlist(APIView):
"""
部门列表展示
"""
def post(self, request, *args, **kwargs):
users = Department.objects.all().order_by('id')
page = request.data.get('page')
per_page = request.data.get('per_page')
total = len(users)
paginator = Paginator(users, per_page)
try:
user_agents_page = paginator.page(page)
except PageNotAnInteger:
user_agents_page = paginator.page(1)
except EmptyPage:
user_agents_page = paginator.page(paginator.num_pages)
department_dict = []
for user in user_agents_page.object_list:
department_dict.append({
'id': user.id,
"name": user.username, # 修改为 name与前端期望的字段名一致
"department": user.username, # 同时保留 username 字段以兼容
})
return Response({'message': '展示成功', "total": total, 'data': department_dict, 'code': 0},
status=status.HTTP_200_OK)
class roxyExhibition(APIView):
def post(self, request, *args, **kwargs):
"""
代办展示
:param request:
:param args:
:param kwargs:
:return:
"""
page = request.data.get('page')
per_page = request.data.get('per_page')
token = request.META.get('token')
if not all([page, per_page]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
user = User.objects.prefetch_related('department').get(token=token)
# 获取用户所属的所有部门ID转为字符串因为personincharge存储的是字符串
user_department_ids = list(user.department.values_list('id', flat=True))
user_department_ids_str = [str(did) for did in user_department_ids]
# 构建查询条件:
# personincharge字段统一规则
# - 纯数字字符串 = 部门ID该部门下所有人员都能看到
# - 非纯数字字符串 = 审批员用户名(只有该审批员能看到)
query = Q(state="审核中")
# 部门匹配personincharge字段是纯数字字符串且匹配用户所属部门
department_query = Q()
if user_department_ids_str:
# 匹配personincharge字段等于用户所属的任一部门ID纯数字字符串
department_query = Q(personincharge__in=user_department_ids_str)
# 审批员匹配personincharge字段是用户名非纯数字字符串
person_query = Q(personincharge=user.username)
# 组合查询:部门匹配 OR 审批员匹配
# 如果用户有部门,使用部门匹配;否则只使用审批员匹配
if user_department_ids_str:
query &= (department_query | person_query)
else:
# 如果用户没有部门,只匹配审批员(兼容旧数据)
query &= person_query
approvals = Approval.objects.filter(query).order_by('-id')
# 调试信息(生产环境可以注释掉)
# print(f"用户: {user.username}, 部门IDs: {user_department_ids_str}")
# print(f"查询到的审批数量: {approvals.count()}")
total = len(approvals)
paginator = Paginator(approvals, per_page)
try:
user_agents_page = paginator.page(page)
except PageNotAnInteger:
user_agents_page = paginator.page(1)
except EmptyPage:
user_agents_page = paginator.page(paginator.num_pages)
data = []
for info in user_agents_page.object_list:
itme = {
'id': info.id,
"title": info.title,
"content": info.content,
"times": info.times,
"completeTiem": info.completeTiem,
"personincharge": info.personincharge,
"state": info.state,
"type": info.type,
}
data.append(itme)
return Response({'message': '展示成功', "total": total, 'data': data, 'code': 0}, status=status.HTTP_200_OK)
class approvalProcessing(APIView):
def post(self, request, *args, **kwargs):
"""
消除代办
:param request:
:param args:
:param kwargs:
:return:
"""
state = request.data.get('state')
type = request.data.get('type')
id = request.data.get('id')
if not all([state, type, id]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
approval = Approval.objects.get(id=id)
if type == "入职财务登记":
user = User.objects.get(id=approval.user_id)
if state == "已通过":
approval.state = "已通过"
user.state = "在职"
else:
approval.state = "未通过"
user.state = "异常"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
if type == "开票":
user = Invoice.objects.get(id=approval.user_id)
if state == "已通过":
approval.state = "已通过"
user.state = "已通过"
else:
approval.state = "未通过"
user.state = "异常"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
if type == "收入确认":
approval = Approval.objects.get(id=id)
user = Income.objects.get(id=approval.user_id)
if state == "已通过":
approval.state = "已通过"
user.state = "已通过"
else:
approval.state = "未通过"
user.state = "未通过"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
if type == "调账申请":
approval = Approval.objects.get(id=id)
user = Accounts.objects.get(id=approval.user_id)
if state == "已通过":
approval.state = "已通过"
user.state = "已通过"
else:
approval.state = "未通过"
user.state = "未通过"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
if type == "付款申请":
approval = Approval.objects.get(id=id)
user = Payment.objects.get(id=approval.user_id)
if state == "已通过":
approval.state = "已通过"
user.state = "已通过"
else:
approval.state = "未通过"
user.state = "未通过"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
if type == "报销申请":
approval = Approval.objects.get(id=id)
user = Reimbursement.objects.get(id=approval.user_id)
if state == "已通过":
approval.state = "已通过"
user.state = "已通过"
else:
approval.state = "未通过"
user.state = "未通过"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
if type == "工资/奖金变更":
approval = Approval.objects.get(id=id)
user = BonusChange.objects.get(id=approval.user_id)
if state == "已通过":
approval.state = "已通过"
user.state = "已通过"
else:
approval.state = "未通过"
user.state = "未通过"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
if type == "立项登记":
approval = Approval.objects.get(id=id)
user = ProjectRegistration.objects.get(id=approval.user_id)
if state == "已通过":
approval.state = "已通过"
user.state = "已通过"
else:
approval.state = "未通过"
user.state = "未通过"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
if type == "案件管理":
approval = Approval.objects.get(id=id)
user = Case.objects.get(id=approval.user_id)
if state == "已通过":
approval.state = "已通过"
user.state = "已通过"
else:
approval.state = "未通过"
user.state = "未通过"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
if type == "申请用印":
approval = Approval.objects.get(id=id)
user = SealApplication.objects.get(id=approval.user_id)
if state == "已通过":
approval.state = "已通过"
user.state = "已通过"
else:
approval.state = "未通过"
user.state = "未通过"
approval.save(update_fields=['state'])
user.save(update_fields=['state'])
if type == "离职财务登记":
approval = Approval.objects.get(id=id)
user = User.objects.get(id=approval.user_id)
if state == "已通过":
approval.state = "已通过"
# 用户状态已经在离职登记时设置为"已离职",这里不需要再次修改
else:
approval.state = "未通过"
# 如果审批未通过,恢复用户状态为"在职"
user.state = "在职"
user.Dateofdeparture = None
user.save(update_fields=['state', 'Dateofdeparture'])
approval.save(update_fields=['state'])
return Response({'message': '处理成功', 'code': 0}, status=status.HTTP_200_OK)
class personneldisplay(APIView):
def get(self, request, *args, **kwargs):
"""
人员列表
:param request:
:param args:
:param kwargs:
:return:
"""
users = User.objects.all()
data = []
for user in users:
itme = {
'id': user.id,
"username": user.username,
'position': user.position,
}
data.append(itme)
return Response({'message': '展示成功', "data": data, 'code': 0}, status=status.HTTP_200_OK)
class DeleteUser(APIView):
def post(self, request, *args, **kwargs):
"""
删除用户
:param request:
:param args:
:param kwargs:
:return:
"""
id = request.data.get('id')
if not id:
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
user = User.objects.get(id=id)
except User.DoesNotExist:
return Response({'status': 'error', 'message': '用户不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
user.delete()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)