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 Enseignant, Specialite, Classe, Planning from .serializers import EnseignantSerializer, SpecialiteSerializer, ClasseSerializer, PlanningSerializer from N3wtSchool import bdd class EnseignantsView(APIView): def get(self, request): enseignantsList=bdd.getAllObjects(Enseignant) enseignants_serializer=EnseignantSerializer(enseignantsList, many=True) return JsonResponse(enseignants_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): enseignant = bdd.getObject(_objectName=Enseignant, _columnName='id', _value=_id) enseignant_serializer=EnseignantSerializer(enseignant) return JsonResponse(enseignant_serializer.data, safe=False) def post(self, request): enseignant_data=JSONParser().parse(request) enseignant_serializer = EnseignantSerializer(data=enseignant_data) if enseignant_serializer.is_valid(): enseignant_serializer.save() return JsonResponse(enseignant_serializer.data, safe=False) return JsonResponse(enseignant_serializer.errors, safe=False) def put(self, request, _id): enseignant_data=JSONParser().parse(request) enseignant = bdd.getObject(_objectName=Enseignant, _columnName='id', _value=_id) enseignant_serializer = EnseignantSerializer(enseignant, data=enseignant_data) if enseignant_serializer.is_valid(): enseignant_serializer.save() return JsonResponse(enseignant_serializer.data, safe=False) return JsonResponse(enseignant_serializer.errors, safe=False) def delete(self, request, _id): enseignant = bdd.getObject(_objectName=Enseignant, _columnName='id', _value=_id) if enseignant is not None: if enseignant.profilAssocie: print('Suppression du profil associé') enseignant.profilAssocie.delete() enseignant.delete() return JsonResponse({'message': 'La suppression de l\'enseignant a été effectuée avec succès'}, safe=False) else: return JsonResponse({'erreur': 'L\'enseignant n\'a pas été trouvé'}, safe=False) @method_decorator(csrf_protect, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch') class SpecialitesView(APIView): def get(self, request): specialitesList=bdd.getAllObjects(Specialite) specialites_serializer=SpecialiteSerializer(specialitesList, many=True) return JsonResponse(specialites_serializer.data, safe=False) def post(self, request): specialites_data=JSONParser().parse(request) all_valid = True for specialite_data in specialites_data: specialite_serializer = SpecialiteSerializer(data=specialite_data) if specialite_serializer.is_valid(): specialite_serializer.save() else: all_valid = False break if all_valid: specialitesList = bdd.getAllObjects(Specialite) specialites_serializer = SpecialiteSerializer(specialitesList, many=True) return JsonResponse(specialites_serializer.data, safe=False) return JsonResponse(specialite_serializer.errors, safe=False) @method_decorator(csrf_protect, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch') class SpecialiteView(APIView): def get (self, request, _id): specialite = bdd.getObject(_objectName=Specialite, _columnName='id', _value=_id) specialite_serializer=SpecialiteSerializer(specialite) return JsonResponse(specialite_serializer.data, safe=False) def post(self, request): specialite_data=JSONParser().parse(request) specialite_serializer = SpecialiteSerializer(data=specialite_data) if specialite_serializer.is_valid(): specialite_serializer.save() return JsonResponse(specialite_serializer.data, safe=False) return JsonResponse(specialite_serializer.errors, safe=False) def put(self, request, _id): specialite_data=JSONParser().parse(request) specialite = bdd.getObject(_objectName=Specialite, _columnName='id', _value=_id) specialite_serializer = SpecialiteSerializer(specialite, data=specialite_data) if specialite_serializer.is_valid(): specialite_serializer.save() return JsonResponse(specialite_serializer.data, safe=False) return JsonResponse(specialite_serializer.errors, safe=False) def delete(self, request, _id): specialite = bdd.getObject(_objectName=Specialite, _columnName='id', _value=_id) if specialite != None: specialite.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(Classe) classes_serializer=ClasseSerializer(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 = ClasseSerializer(data=classe_data) if classe_serializer.is_valid(): classe_serializer.save() else: all_valid = False break if all_valid: classesList = bdd.getAllObjects(Classe) classes_serializer = ClasseSerializer(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): classe = bdd.getObject(_objectName=Classe, _columnName='id', _value=_id) classe_serializer=ClasseSerializer(classe) return JsonResponse(classe_serializer.data, safe=False) def post(self, request): classe_data=JSONParser().parse(request) classe_serializer = ClasseSerializer(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) classe = bdd.getObject(_objectName=Classe, _columnName='id', _value=_id) classe_serializer = ClasseSerializer(classe, 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): classe = bdd.getObject(_objectName=Classe, _columnName='id', _value=_id) if classe is not None: # Supprimer les plannings associés à la classe for planning in classe.plannings.all(): print(f'Planning à supprimer : {planning}') planning.delete() # Retirer la classe des élèves associés for eleve in classe.eleves.all(): print(f'Eleve à retirer de la classe : {eleve}') eleve.classeAssociee = None eleve.save() # Supprimer la classe classe.delete() return JsonResponse("La suppression de la classe 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)