2024-05-30 13:39:36 +08:00
|
|
|
import json
|
|
|
|
|
|
|
|
from django.http import JsonResponse
|
|
|
|
from django.views import View
|
|
|
|
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
|
|
|
|
from django.shortcuts import render, get_object_or_404
|
|
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
|
|
from rest_framework.decorators import api_view
|
|
|
|
from rest_framework.response import Response
|
|
|
|
from rest_framework import status
|
|
|
|
from .models import PrimaryDepartment, SecondaryDepartment
|
|
|
|
from .serializers import PrimaryDepartmentSerializer, SecondaryDepartmentSerializer
|
2024-05-15 09:23:16 +08:00
|
|
|
|
2024-05-27 23:39:32 +08:00
|
|
|
|
|
|
|
def entity_information_registration(request):
|
|
|
|
return render(request, 'org_mgnt/entity_information_registration.html')
|
|
|
|
|
|
|
|
|
|
|
|
def primary_departments(request):
|
|
|
|
return render(request, 'org_mgnt/primary_departments.html')
|
|
|
|
|
|
|
|
|
|
|
|
def secondary_departments(request):
|
|
|
|
return render(request, 'org_mgnt/secondary_departments.html')
|
2024-05-30 13:39:36 +08:00
|
|
|
|
|
|
|
|
|
|
|
@api_view(['POST'])
|
|
|
|
def create_primary_department(request):
|
|
|
|
if request.method == 'POST':
|
|
|
|
serializer = PrimaryDepartmentSerializer(data=request.data)
|
|
|
|
if serializer.is_valid():
|
|
|
|
serializer.save()
|
|
|
|
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
|
|
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
|
|
|
|
|
|
|
|
class PrimaryDepartmentListView(View):
|
|
|
|
def get(self, request):
|
|
|
|
# 获取查询参数
|
|
|
|
department_name = request.GET.get('department_name', '')
|
|
|
|
|
|
|
|
# 过滤查询集
|
|
|
|
queryset = PrimaryDepartment.objects.all()
|
|
|
|
if department_name:
|
|
|
|
queryset = queryset.filter(department_name=department_name)
|
|
|
|
|
|
|
|
# 分页
|
|
|
|
page = request.GET.get('page', 1)
|
|
|
|
paginator = Paginator(queryset, 10) # 每页10条记录
|
|
|
|
|
|
|
|
try:
|
|
|
|
departments = paginator.page(page)
|
|
|
|
except PageNotAnInteger:
|
|
|
|
departments = paginator.page(1)
|
|
|
|
except EmptyPage:
|
|
|
|
departments = paginator.page(paginator.num_pages)
|
|
|
|
|
|
|
|
# 序列化数据
|
|
|
|
department_list = [{
|
|
|
|
'primary_department_id': department.primary_department_id,
|
|
|
|
'department_name': department.department_name,
|
|
|
|
'description': department.description,
|
|
|
|
} for department in departments]
|
|
|
|
|
|
|
|
pagination_html = render(request, 'pagination.html', {
|
|
|
|
'page': departments.number,
|
|
|
|
'pages': paginator.num_pages,
|
|
|
|
'has_next': departments.has_next(),
|
|
|
|
'has_previous': departments.has_previous(),
|
|
|
|
'total': paginator.count,
|
|
|
|
'start_index': departments.start_index(),
|
|
|
|
'end_index': departments.end_index(),
|
|
|
|
'range': range(1, paginator.num_pages + 1)
|
|
|
|
}).content.decode('utf-8')
|
|
|
|
|
|
|
|
# 返回JSON响应
|
|
|
|
return JsonResponse({
|
|
|
|
'departments': department_list,
|
|
|
|
'pagination_html': pagination_html,
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
@api_view(['PUT'])
|
|
|
|
def update_primary_department(request, pk):
|
|
|
|
try:
|
|
|
|
department = PrimaryDepartment.objects.get(pk=pk)
|
|
|
|
except PrimaryDepartment.DoesNotExist:
|
|
|
|
return Response(status=status.HTTP_404_NOT_FOUND)
|
|
|
|
|
|
|
|
if request.method == 'PUT':
|
|
|
|
serializer = PrimaryDepartmentSerializer(department, data=request.data)
|
|
|
|
if serializer.is_valid():
|
|
|
|
serializer.save()
|
|
|
|
return Response(serializer.data)
|
|
|
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
|
|
|
|
|
|
|
|
@api_view(['DELETE'])
|
|
|
|
def delete_primary_department(request, pk):
|
|
|
|
try:
|
|
|
|
department = PrimaryDepartment.objects.get(pk=pk)
|
|
|
|
except PrimaryDepartment.DoesNotExist:
|
|
|
|
return Response(status=status.HTTP_404_NOT_FOUND)
|
|
|
|
|
|
|
|
if request.method == 'DELETE':
|
|
|
|
department.delete()
|
|
|
|
return Response(status=status.HTTP_204_NO_CONTENT)
|
|
|
|
|
|
|
|
|
|
|
|
# 二级部门
|
|
|
|
|
|
|
|
def get_secondary_department(request):
|
|
|
|
department_name = request.GET.get('department_name', '')
|
|
|
|
page_number = request.GET.get('page', 1)
|
|
|
|
|
|
|
|
if department_name:
|
|
|
|
departments = SecondaryDepartment.objects.filter(name__icontains=department_name)
|
|
|
|
else:
|
|
|
|
departments = SecondaryDepartment.objects.all()
|
|
|
|
|
|
|
|
paginator = Paginator(departments, 10)
|
|
|
|
page_obj = paginator.get_page(page_number)
|
|
|
|
departments_data = [
|
|
|
|
{
|
|
|
|
"secondary_department_id": department.secondary_department_id,
|
|
|
|
"primary_department_name": department.primary_department.department_name,
|
|
|
|
"secondary_department_name": department.secondary_department_name,
|
|
|
|
"description": department.description,
|
|
|
|
}
|
|
|
|
for department in page_obj
|
|
|
|
]
|
|
|
|
|
|
|
|
response_data = {
|
|
|
|
"departments": departments_data,
|
|
|
|
"pagination_html": render(request, "pagination.html", {"page_obj": page_obj}).content.decode()
|
|
|
|
}
|
|
|
|
|
|
|
|
return JsonResponse(response_data)
|
|
|
|
|
|
|
|
|
|
|
|
@csrf_exempt
|
|
|
|
def create_secondary_department(request):
|
|
|
|
if request.method == "POST":
|
|
|
|
data = json.loads(request.body)
|
|
|
|
primary_department_id = data.get('primary_department_id')
|
|
|
|
secondary_department_name = data.get('secondary_department_name')
|
|
|
|
description = data.get('description')
|
|
|
|
|
|
|
|
SecondaryDepartment.objects.create(
|
|
|
|
primary_department_id=primary_department_id,
|
|
|
|
secondary_department_name=secondary_department_name,
|
|
|
|
description=description,
|
|
|
|
)
|
|
|
|
|
|
|
|
return JsonResponse({"message": "Secondary department created successfully"}, status=201)
|
|
|
|
|
|
|
|
|
|
|
|
def update_secondary_department(request, department_id):
|
|
|
|
if request.method == "PUT":
|
|
|
|
data = json.loads(request.body)
|
|
|
|
primary_department_name = data.get('primary_department_name')
|
|
|
|
secondary_department_name = data.get('secondary_department_name')
|
|
|
|
description = data.get('description')
|
|
|
|
|
|
|
|
try:
|
|
|
|
department = SecondaryDepartment.objects.get(id=department_id)
|
|
|
|
department.primary_department = PrimaryDepartment.objects.get(name=primary_department_name)
|
|
|
|
department.name = secondary_department_name
|
|
|
|
department.description = description
|
|
|
|
department.save()
|
|
|
|
|
|
|
|
return JsonResponse({"message": "Secondary department updated successfully"}, status=200)
|
|
|
|
except SecondaryDepartment.DoesNotExist:
|
|
|
|
return JsonResponse({"error": "Secondary department not found"}, status=404)
|
|
|
|
|
|
|
|
|
|
|
|
def delete_secondary_department(request, department_id):
|
|
|
|
if request.method == "DELETE":
|
|
|
|
try:
|
|
|
|
department = SecondaryDepartment.objects.get(id=department_id)
|
|
|
|
department.delete()
|
|
|
|
return JsonResponse({"message": "Secondary department deleted successfully"}, status=200)
|
|
|
|
except SecondaryDepartment.DoesNotExist:
|
|
|
|
return JsonResponse({"error": "Secondary department not found"}, status=404)
|