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 django.core.cache import cache from .models import Teacher, Speciality, SchoolClass, Planning from .serializers import TeacherSerializer, SpecialitySerializer, SchoolClassSerializer, PlanningSerializer from N3wtSchool import bdd class TeachersView(APIView): def get(self, request): teachersList=bdd.getAllObjects(Teacher) teachers_serializer=TeacherSerializer(teachersList, many=True) return JsonResponse(teachers_serializer.data, safe=False) @method_decorator(csrf_protect, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch') class EnseignantView(APIView): def get (self, request, _id): teacher = bdd.getObject(_objectName=Teacher, _columnName='id', _value=_id) teacher_serializer=TeacherSerializer(teacher) return JsonResponse(teacher_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) def put(self, request, _id): teacher_data=JSONParser().parse(request) teacher = bdd.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): teacher = bdd.getObject(_objectName=Teacher, _columnName='id', _value=_id) if teacher is not None: if teacher.profilAssocie: print('Suppression du profil associé') teacher.profilAssocie.delete() teacher.delete() return JsonResponse({'message': 'La suppression de l\'teacher a été effectuée avec succès'}, safe=False) else: return JsonResponse({'erreur': 'L\'teacher n\'a pas été trouvé'}, safe=False) @method_decorator(csrf_protect, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch') class SpecialitiesView(APIView): def get(self, request): specialitiesList=bdd.getAllObjects(Speciality) specialities_serializer=SpecialitySerializer(specialitiesList, many=True) return JsonResponse(specialities_serializer.data, safe=False) def post(self, request): specialities_data=JSONParser().parse(request) all_valid = True for speciality_data in specialities_data: speciality_serializer = SpecialitySerializer(data=speciality_data) if speciality_serializer.is_valid(): speciality_serializer.save() else: all_valid = False break if all_valid: specialitiesList = bdd.getAllObjects(Speciality) specialities_serializer = SpecialitySerializer(specialitiesList, many=True) return JsonResponse(specialities_serializer.data, safe=False) return JsonResponse(speciality_serializer.errors, safe=False) @method_decorator(csrf_protect, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch') class SpecialityView(APIView): def get (self, request, _id): speciality = bdd.getObject(_objectName=Speciality, _columnName='id', _value=_id) speciality_serializer=SpecialitySerializer(speciality) return JsonResponse(speciality_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) return JsonResponse(speciality_serializer.errors, safe=False) def put(self, request, _id): speciality_data=JSONParser().parse(request) speciality = bdd.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): speciality = bdd.getObject(_objectName=Speciality, _columnName='id', _value=_id) if speciality != None: speciality.delete() return JsonResponse("La suppression de la spécialité a été effectuée avec succès", safe=False) @method_decorator(csrf_protect, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch') class ClassesView(APIView): def get(self, request): classesList=bdd.getAllObjects(SchoolClass) classes_serializer=SchoolClassSerializer(classesList, many=True) return JsonResponse(classes_serializer.data, safe=False) def post(self, request): all_valid = True classes_data=JSONParser().parse(request) for classe_data in classes_data: classe_serializer = SchoolClassSerializer(data=classe_data) if classe_serializer.is_valid(): classe_serializer.save() else: all_valid = False break if all_valid: classesList = bdd.getAllObjects(SchoolClass) classes_serializer = SchoolClassSerializer(classesList, many=True) return JsonResponse(classes_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 ClasseView(APIView): def get (self, request, _id): schoolClass = bdd.getObject(_objectName=SchoolClass, _columnName='id', _value=_id) classe_serializer=SchoolClassSerializer(schoolClass) return JsonResponse(classe_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) def put(self, request, _id): classe_data=JSONParser().parse(request) schoolClass = bdd.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): schoolClass = bdd.getObject(_objectName=SchoolClass, _columnName='id', _value=_id) if schoolClass is not None: # Supprimer les plannings associés à la schoolClass for planning in schoolClass.plannings.all(): print(f'Planning à supprimer : {planning}') planning.delete() # Retirer la schoolClass des élèves associés for eleve in schoolClass.eleves.all(): print(f'Student à retirer de la schoolClass : {eleve}') eleve.classeAssociee = None eleve.save() # Supprimer la schoolClass schoolClass.delete() return JsonResponse("La suppression de la schoolClass a été effectuée avec succès", safe=False) @method_decorator(csrf_protect, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch') class PlanningsView(APIView): def get(self, request): schedulesList=bdd.getAllObjects(Planning) schedules_serializer=PlanningSerializer(schedulesList, many=True) return JsonResponse(schedules_serializer.data, safe=False) @method_decorator(csrf_protect, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch') class PlanningView(APIView): def get (self, request, _id): planning = bdd.getObject(_objectName=Planning, _columnName='classe__id', _value=_id) planning_serializer=PlanningSerializer(planning) return JsonResponse(planning_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) 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=404) except Planning.MultipleObjectsReturned: return JsonResponse({'error': 'Multiple objects found'}, status=400) 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)