You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

160 lines
7.9 KiB
Python

import logging
from django.db import transaction
from django.db.models import Q
from django.shortcuts import render
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import viewsets
from app.pagination import MyPageNumberPagination
from user.models import UserProfile
from .models import Department
from .serializers import DepartmentSerializer
# Create your views here.
logger = logging.getLogger('mylogger')
class DepartmentView(viewsets.GenericViewSet):
def list(self, request, *args, **kwargs):
data = dict()
try:
parent_departments = list(Department.objects.filter(parent_id__isnull=True).values())
for parent_department in parent_departments:
parent_id = parent_department.get('id')
son_departs = list(Department.objects.filter(parent_id=parent_id).values())
parent_department['children'] = son_departs
data['data'] = parent_departments
return Response(data)
except Exception as e:
return Response({'msg': f'查询失败, {e}'})
def query_department_users(self, request, *args, **kwargs):
res = dict()
data = request.data
department_id = data.get('department_id')
try:
users = list(UserProfile.objects.filter(department_id=department_id).values('id', 'username', 'phone_number', 'status', 'department_id'))
res['data'] = users
return Response(res)
except Exception as e:
return Response({'msg': f'查询失败,原因{e}'})
# def list_son_departments(self, request, *args, **kwargs):
# query_params = dict(request.query_params)
# parent_name = query_params.get('parent_name')
# if isinstance(parent_name, list):
# parent_name = ''.join(parent_name)
# logger.info(parent_name)
# parent_obj = Department.objects.filter(name=parent_name).first()
# if not parent_obj:
# return Response({'msg': '非法请求,该父级部门不存在'})
# parent_id = parent_obj.id
# queryset = Department.objects.filter(parent_id=parent_id).order_by('-id')
# paginator = MyPageNumberPagination()
# paginated_queryset = paginator.paginate_queryset(queryset, request)
# serializer = DepartmentSerializer(paginated_queryset, many=True)
#
# return paginator.get_paginated_response(serializer.data)
# def create(self, request, *args, **kwargs):
# data = request.data
# parent_depart_name = data.get('parent_department')
# if not parent_depart_name:
# return Response({"msg": "请输入父级部门名称"})
# parent_obj = Department.objects.filter(name=parent_depart_name).first()
# if parent_obj:
# return Response({'msg': '该部门已存在,请换一个'})
# try:
# with transaction.atomic():
# new_obj = Department.objects.create(name=parent_depart_name)
# return Response({'msg': '创建父级部门成功'})
# except Exception as e:
# return Response({'msg': f'创建失败,原因{e}'})
# def create(self, request, *args, **kwargs):
# data = request.data
# parent_name = data.get('parent_department_name')
# if not parent_name:
# return Response({'msg': '请输入父级部门名称'})
# depart_name = data.get('department_name')
# try:
# with transaction.atomic():
# if not depart_name:
# old_parent_obj = Department.objects.filter(name=parent_name).first()
# if old_parent_obj:
# return Response({'msg': '该父级部门名称已存在,请换一个'})
# parent_obj = Department.objects.create(name=parent_name)
# return Response({'msg': '创建父级部门成功'})
# else:
# old_parent_obj = Department.objects.filter(name=parent_name).first()
# if not old_parent_obj:
# old_parent_obj = Department.objects.create(name=parent_name)
# old_depart_obj = Department.objects.filter(name=depart_name, parent_id=old_parent_obj.id).first()
# if old_depart_obj:
# return Response({'msg': f'{parent_name}下已有{depart_name}啦,请换一个'})
# new_depart_obj = Department.objects.create(name=depart_name, parent_id=old_parent_obj.id)
# return Response({'msg': '创建子部门成功'})
# except Exception as e:
# return Response({'msg': f'创建失败,{e}'})
def create(self, request, *args, **kwargs):
data = request.data
department_name = data.get('department_name')
department_id = data.get('department_id')
if not department_id or department_id == '':
old_depart_obj = Department.objects.filter(name=department_name, parent_id__isnull=True).first()
if old_depart_obj:
return Response({'msg': f'该父级部门{department_name}已存在'})
depart_obj = Department.objects.create(name=department_name)
return Response({'msg': f'创建父级部门{department_name}成功', 'success': True})
else:
parent_obj = Department.objects.filter(id=department_id, parent_id__isnull=True).first()
if not parent_obj:
return Response({'msg': '非法请求'})
old_son_obj = Department.objects.filter(name=department_name, parent_id=department_id).first()
if old_son_obj:
return Response({'msg': f'该父级部门{parent_obj.name}下已有{old_son_obj.name}'})
son_obj = Department.objects.create(name=department_name, parent_id=department_id)
return Response({'msg': f'创建父级部门{parent_obj.name}{son_obj.name}成功', 'success': True})
# def create_son_department(self, request, *args, **kwargs):
# data = request.data
# parent_name = data.get('parent_name')
# if not parent_name:
# return Response({'msg': '请输入父级部门名称以便创建子部门'})
# parent_obj = Department.objects.filter(name=parent_name).first()
# parent_id = parent_obj.id
# department_name = data.get('department_name')
# if not department_name:
# return Response({'msg': '请输入子部门名称'})
# depart_obj = Department.objects.filter(name=department_name, parent_id=parent_id).first()
# if depart_obj:
# return Response({'msg': f'{parent_name}下已有{department_name},请换一个'})
# try:
# with transaction.atomic():
# Department.objects.create(name=department_name, parent_id=parent_id)
# return Response({'msg': '创建成功'})
# except Exception as e:
# return Response({'msg': f'创建失败,原因{e}'})
def update(self, request, pk, *args, **kwargs):
data = request.data
try:
with transaction.atomic():
depart_obj = Department.objects.filter(id=pk).update(**data)
return Response({'msg': '更新成功', 'success': True})
except Department.DoesNotExist:
return Response({'msg': '该部门不存在'})
except Exception as e:
return Response({'msg': f'更新失败,原因{e}'})
def destroy(self, request, pk, *args, **kwargs):
try:
with transaction.atomic():
depart_obj = Department.objects.filter(id=pk).delete()
return Response({'msg': '删除成功', 'success': True})
except Department.DoesNotExist:
return Response({'msg': '该部门不存在'})
except Exception as e:
return Response({'msg': f'删除失败,原因{e}'})