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}'})