Files
n3wt-school/Back-End/School/views.py
2025-03-09 16:22:28 +01:00

414 lines
18 KiB
Python

from django.http.response import JsonResponse
from django.views.decorators.csrf import ensure_csrf_cookie, csrf_protect
from django.utils.decorators import method_decorator
from rest_framework.parsers import JSONParser
from rest_framework.views import APIView
from rest_framework import status
from .models import (
Teacher,
Speciality,
SchoolClass,
Planning,
Discount,
Fee,
PaymentPlan,
PaymentMode
)
from .serializers import (
TeacherSerializer,
SpecialitySerializer,
SchoolClassSerializer,
PlanningSerializer,
DiscountSerializer,
FeeSerializer,
PaymentPlanSerializer,
PaymentModeSerializer
)
from N3wtSchool.bdd import delete_object, getAllObjects, getObject
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class SpecialityListCreateView(APIView):
def get(self, request):
establishment_id = request.GET.get('establishment_id', None)
if establishment_id is None:
return JsonResponse({'error': 'establishment_id est requis'}, safe=False, status=status.HTTP_400_BAD_REQUEST)
specialities_list = getAllObjects(Speciality)
if establishment_id:
specialities_list = specialities_list.filter(establishment__id=establishment_id).distinct()
specialities_serializer = SpecialitySerializer(specialities_list, many=True)
return JsonResponse(specialities_serializer.data, safe=False)
def post(self, request):
speciality_data=JSONParser().parse(request)
speciality_serializer = SpecialitySerializer(data=speciality_data)
if speciality_serializer.is_valid():
speciality_serializer.save()
return JsonResponse(speciality_serializer.data, safe=False, status=status.HTTP_201_CREATED)
return JsonResponse(speciality_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class SpecialityDetailView(APIView):
def get(self, request, id):
speciality = getObject(_objectName=Speciality, _columnName='id', _value=id)
speciality_serializer=SpecialitySerializer(speciality)
return JsonResponse(speciality_serializer.data, safe=False)
def put(self, request, id):
speciality_data=JSONParser().parse(request)
speciality = getObject(_objectName=Speciality, _columnName='id', _value=id)
speciality_serializer = SpecialitySerializer(speciality, data=speciality_data)
if speciality_serializer.is_valid():
speciality_serializer.save()
return JsonResponse(speciality_serializer.data, safe=False)
return JsonResponse(speciality_serializer.errors, safe=False)
def delete(self, request, id):
return delete_object(Speciality, id)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class TeacherListCreateView(APIView):
def get(self, request):
establishment_id = request.GET.get('establishment_id', None)
if establishment_id is None:
return JsonResponse({'error': 'establishment_id est requis'}, safe=False, status=status.HTTP_400_BAD_REQUEST)
teachers_list = getAllObjects(Teacher)
if teachers_list:
teachers_list = teachers_list.filter(profile_role__establishment_id=establishment_id)
teachers_serializer = TeacherSerializer(teachers_list, many=True)
return JsonResponse(teachers_serializer.data, safe=False)
def post(self, request):
teacher_data=JSONParser().parse(request)
teacher_serializer = TeacherSerializer(data=teacher_data)
if teacher_serializer.is_valid():
teacher_serializer.save()
return JsonResponse(teacher_serializer.data, safe=False)
return JsonResponse(teacher_serializer.errors, safe=False)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class TeacherDetailView(APIView):
def get (self, request, id):
teacher = getObject(_objectName=Teacher, _columnName='id', _value=id)
teacher_serializer=TeacherSerializer(teacher)
return JsonResponse(teacher_serializer.data, safe=False)
def put(self, request, id):
teacher_data=JSONParser().parse(request)
teacher = getObject(_objectName=Teacher, _columnName='id', _value=id)
teacher_serializer = TeacherSerializer(teacher, data=teacher_data)
if teacher_serializer.is_valid():
teacher_serializer.save()
return JsonResponse(teacher_serializer.data, safe=False)
return JsonResponse(teacher_serializer.errors, safe=False)
def delete(self, request, id):
return delete_object(Teacher, id, related_field='profile')
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class SchoolClassListCreateView(APIView):
def get(self, request):
establishment_id = request.GET.get('establishment_id', None)
if establishment_id is None:
return JsonResponse({'error': 'establishment_id est requis'}, safe=False, status=status.HTTP_400_BAD_REQUEST)
school_classes_list = getAllObjects(SchoolClass)
if school_classes_list:
school_classes_list = school_classes_list.filter(establishment=establishment_id).distinct()
classes_serializer = SchoolClassSerializer(school_classes_list, many=True)
return JsonResponse(classes_serializer.data, safe=False)
def post(self, request):
classe_data=JSONParser().parse(request)
classe_serializer = SchoolClassSerializer(data=classe_data)
if classe_serializer.is_valid():
classe_serializer.save()
return JsonResponse(classe_serializer.data, safe=False)
return JsonResponse(classe_serializer.errors, safe=False)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class SchoolClassDetailView(APIView):
def get (self, request, id):
schoolClass = getObject(_objectName=SchoolClass, _columnName='id', _value=id)
classe_serializer=SchoolClassSerializer(schoolClass)
return JsonResponse(classe_serializer.data, safe=False)
def put(self, request, id):
classe_data=JSONParser().parse(request)
schoolClass = getObject(_objectName=SchoolClass, _columnName='id', _value=id)
classe_serializer = SchoolClassSerializer(schoolClass, data=classe_data)
if classe_serializer.is_valid():
classe_serializer.save()
return JsonResponse(classe_serializer.data, safe=False)
return JsonResponse(classe_serializer.errors, safe=False)
def delete(self, request, id):
return delete_object(SchoolClass, id)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class PlanningListCreateView(APIView):
def get(self, request):
schedulesList=getAllObjects(Planning)
schedules_serializer=PlanningSerializer(schedulesList, many=True)
return JsonResponse(schedules_serializer.data, safe=False)
def post(self, request):
planning_data=JSONParser().parse(request)
planning_serializer = PlanningSerializer(data=planning_data)
if planning_serializer.is_valid():
planning_serializer.save()
return JsonResponse(planning_serializer.data, safe=False)
return JsonResponse(planning_serializer.errors, safe=False)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class PlanningDetailView(APIView):
def get (self, request, id):
planning = getObject(_objectName=Planning, _columnName='classe_id', _value=id)
planning_serializer=PlanningSerializer(planning)
return JsonResponse(planning_serializer.data, safe=False)
def put(self, request, id):
planning_data = JSONParser().parse(request)
try:
planning = Planning.objects.get(id=id)
except Planning.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
except Planning.MultipleObjectsReturned:
return JsonResponse({'error': 'Multiple objects found'}, status=status.HTTP_400_BAD_REQUEST)
planning_serializer = PlanningSerializer(planning, data=planning_data)
if planning_serializer.is_valid():
planning_serializer.save()
return JsonResponse(planning_serializer.data, safe=False)
return JsonResponse(planning_serializer.errors, safe=False)
def delete(self, request, id):
return delete_object(Planning, id)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class FeeListCreateView(APIView):
def get(self, request, *args, **kwargs):
establishment_id = request.GET.get('establishment_id', None)
if establishment_id is None:
return JsonResponse({'error': 'establishment_id est requis'}, safe=False, status=status.HTTP_400_BAD_REQUEST)
filter = request.GET.get('filter', '').strip()
fee_type_value = 0 if filter == 'registration' else 1
fees = Fee.objects.filter(type=fee_type_value, establishment_id=establishment_id).distinct()
fee_serializer = FeeSerializer(fees, many=True)
return JsonResponse(fee_serializer.data, safe=False, status=status.HTTP_200_OK)
def post(self, request):
fee_data = JSONParser().parse(request)
fee_serializer = FeeSerializer(data=fee_data)
if fee_serializer.is_valid():
fee_serializer.save()
return JsonResponse(fee_serializer.data, safe=False, status=status.HTTP_201_CREATED)
return JsonResponse(fee_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class FeeDetailView(APIView):
def get(self, request, id):
try:
fee = Fee.objects.get(id=id)
fee_serializer = FeeSerializer(fee)
return JsonResponse(fee_serializer.data, safe=False)
except Fee.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
def put(self, request, id):
fee_data = JSONParser().parse(request)
try:
fee = Fee.objects.get(id=id)
except Fee.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
fee_serializer = FeeSerializer(fee, data=fee_data, partial=True)
if fee_serializer.is_valid():
fee_serializer.save()
return JsonResponse(fee_serializer.data, safe=False)
return JsonResponse(fee_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, id):
return delete_object(Fee, id)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class DiscountListCreateView(APIView):
def get(self, request, *args, **kwargs):
establishment_id = request.GET.get('establishment_id', None)
if establishment_id is None:
return JsonResponse({'error': 'establishment_id est requis'}, safe=False, status=status.HTTP_400_BAD_REQUEST)
filter = request.GET.get('filter', '').strip()
discount_type_value = 0 if filter == 'registration' else 1
discounts = Discount.objects.filter(type=discount_type_value, establishment_id=establishment_id).distinct()
discounts_serializer = DiscountSerializer(discounts, many=True)
return JsonResponse(discounts_serializer.data, safe=False, status=status.HTTP_200_OK)
def post(self, request):
discount_data = JSONParser().parse(request)
discount_serializer = DiscountSerializer(data=discount_data)
if discount_serializer.is_valid():
discount_serializer.save()
return JsonResponse(discount_serializer.data, safe=False, status=status.HTTP_201_CREATED)
return JsonResponse(discount_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class DiscountDetailView(APIView):
def get(self, request, id):
try:
discount = Discount.objects.get(id=id)
discount_serializer = DiscountSerializer(discount)
return JsonResponse(discount_serializer.data, safe=False)
except Discount.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
def put(self, request, id):
discount_data = JSONParser().parse(request)
try:
discount = Discount.objects.get(id=id)
except Discount.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
discount_serializer = DiscountSerializer(discount, data=discount_data, partial=True) # Utilisation de partial=True
if discount_serializer.is_valid():
discount_serializer.save()
return JsonResponse(discount_serializer.data, safe=False)
return JsonResponse(discount_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, id):
return delete_object(Discount, id)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class PaymentPlanListCreateView(APIView):
def get(self, request, *args, **kwargs):
establishment_id = request.GET.get('establishment_id', None)
if establishment_id is None:
return JsonResponse({'error': 'establishment_id est requis'}, safe=False, status=status.HTTP_400_BAD_REQUEST)
filter = request.GET.get('filter', '').strip()
type_value = 0 if filter == 'registration' else 1
payment_plans = PaymentPlan.objects.filter(type=type_value, establishment_id=establishment_id).distinct()
payment_plans_serializer = PaymentPlanSerializer(payment_plans, many=True)
return JsonResponse(payment_plans_serializer.data, safe=False, status=status.HTTP_200_OK)
def post(self, request):
payment_plan_data = JSONParser().parse(request)
payment_plan_serializer = PaymentPlanSerializer(data=payment_plan_data)
if payment_plan_serializer.is_valid():
payment_plan_serializer.save()
return JsonResponse(payment_plan_serializer.data, safe=False, status=status.HTTP_201_CREATED)
return JsonResponse(payment_plan_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class PaymentPlanDetailView(APIView):
def get(self, request, id):
try:
payment_plan = PaymentPlan.objects.get(id=id)
payment_plan_serializer = PaymentPlanSerializer(payment_plan)
return JsonResponse(payment_plan_serializer.data, safe=False)
except PaymentPlan.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
def put(self, request, id):
payment_plan_data = JSONParser().parse(request)
try:
payment_plan = PaymentPlan.objects.get(id=id)
except PaymentPlan.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
payment_plan_serializer = PaymentPlanSerializer(payment_plan, data=payment_plan_data, partial=True)
if payment_plan_serializer.is_valid():
payment_plan_serializer.save()
return JsonResponse(payment_plan_serializer.data, safe=False)
return JsonResponse(payment_plan_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, id):
return delete_object(PaymentPlan, id)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class PaymentModeListCreateView(APIView):
def get(self, request):
establishment_id = request.GET.get('establishment_id', None)
if establishment_id is None:
return JsonResponse({'error': 'establishment_id est requis'}, safe=False, status=status.HTTP_400_BAD_REQUEST)
filter = request.GET.get('filter', '').strip()
type_value = 0 if filter == 'registration' else 1
payment_modes = PaymentMode.objects.filter(type=type_value, establishment_id=establishment_id).distinct()
payment_modes_serializer = PaymentModeSerializer(payment_modes, many=True)
return JsonResponse(payment_modes_serializer.data, safe=False, status=status.HTTP_200_OK)
def post(self, request):
payment_mode_data = JSONParser().parse(request)
payment_mode_serializer = PaymentModeSerializer(data=payment_mode_data)
if payment_mode_serializer.is_valid():
payment_mode_serializer.save()
return JsonResponse(payment_mode_serializer.data, safe=False, status=status.HTTP_201_CREATED)
return JsonResponse(payment_mode_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class PaymentModeDetailView(APIView):
def get(self, request, id):
try:
payment_mode = PaymentMode.objects.get(id=id)
payment_mode_serializer = PaymentModeSerializer(payment_mode)
return JsonResponse(payment_mode_serializer.data, safe=False)
except PaymentMode.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
def put(self, request, id):
payment_mode_data = JSONParser().parse(request)
try:
payment_mode = PaymentMode.objects.get(id=id)
except PaymentMode.DoesNotExist:
return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)
payment_mode_serializer = PaymentModeSerializer(payment_mode, data=payment_mode_data, partial=True)
if payment_mode_serializer.is_valid():
payment_mode_serializer.save()
return JsonResponse(payment_mode_serializer.data, safe=False)
return JsonResponse(payment_mode_serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, id):
return delete_object(PaymentMode, id)