565 lines
23 KiB
Python
565 lines
23 KiB
Python
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
|
|
|
|
|
|
|
|
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') # 工资标准
|
|
if not all([username, account, password, IdCard, department, position,nation,mobilePhone,team,Dateofjoining,academic,contract]):
|
|
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)
|
|
|
|
Dateofjoining = datetime.datetime.strptime(Dateofjoining, "%Y-%m-%d")
|
|
if Confirmationtime:
|
|
Confirmationtime = datetime.datetime.strptime(Confirmationtime, "%Y-%m-%d")
|
|
else:
|
|
Confirmationtime = None
|
|
if Practicingcertificatetime:
|
|
Practicingcertificatetime = datetime.datetime.strptime(Practicingcertificatetime, "%Y-%m-%d")
|
|
else:
|
|
Practicingcertificatetime = None
|
|
role_list = ast.literal_eval(role)
|
|
department_id = ast.literal_eval(department)
|
|
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
|
|
)
|
|
user.role.add(*role_list)
|
|
user.department.add(*department_id)
|
|
return Response({'message': '添加人员成功', 'code': 0}, status=status.HTTP_200_OK)
|
|
|
|
class EditorialStaffView(APIView):
|
|
def post(self, request, *args, **kwargs):
|
|
"""修改人员信息"""
|
|
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 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.department = department
|
|
user.mobilePhone = mobilePhone
|
|
user.position = position
|
|
user.team = team
|
|
user.academic = academic
|
|
user.salary = salary
|
|
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 != '在职':
|
|
return Response({'me' 'ssage': '你的账号已经封存。', '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)
|
|
permissionId = list(user.role.values("permissionId"))
|
|
permission_ids = [item['permissionId'] for item in permissionId]
|
|
permission_ids = [i for s in permission_ids for i in ast.literal_eval(s)]
|
|
permissions = permission.objects.filter(id__in=permission_ids)
|
|
permission_data = []
|
|
for per in permissions:
|
|
permission_data.append({
|
|
'id': per.id,
|
|
'permission_name': per.permission_name,
|
|
"permission_logo": per.permission_logo,
|
|
"parent": per.parent,
|
|
})
|
|
|
|
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').filter(Q_obj)
|
|
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')),
|
|
"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)
|
|
dep = Department.objects.get(id=id)
|
|
department = User.objects.filter(department=dep.username)
|
|
if department:
|
|
return Response({'status': 'error', 'message': '删除失败,该部门还存在,请及时转移', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
Department.objects.filter(id=id).delete()
|
|
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
|
|
|
|
class Personlist(APIView):
|
|
def post(self, request, *args, **kwargs):
|
|
users = Department.objects.all()
|
|
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,
|
|
"username": user.username,
|
|
# "position": user.position,
|
|
# "state": user.state,
|
|
})
|
|
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.get(token=token)
|
|
approvals = Approval.objects.filter(
|
|
state="审核中",
|
|
personincharge__in=[user.username, user.department]
|
|
)
|
|
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'])
|
|
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)
|
|
|
|
|