XH_Digital_Management/application/org_mgnt/views.py

185 lines
6.6 KiB
Python
Raw Normal View History

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