from django.http.response import JsonResponse from django.core.files import File from drf_yasg.utils import swagger_auto_schema from drf_yasg import openapi from rest_framework.parsers import MultiPartParser, FormParser from rest_framework.response import Response from rest_framework.views import APIView from rest_framework import status import os from Subscriptions.serializers import RegistrationFileTemplateSerializer, RegistrationFileSerializer from Subscriptions.models import RegistrationFileTemplate, RegistrationFile from N3wtSchool import bdd class RegistrationFileTemplateView(APIView): @swagger_auto_schema( operation_description="Récupère tous les fichiers templates pour les dossiers d'inscription", responses={200: RegistrationFileTemplateSerializer(many=True)} ) def get(self, request): """ Récupère les fichiers templates pour les dossiers d’inscription. """ files = RegistrationFileTemplate.objects.all() serializer = RegistrationFileTemplateSerializer(files, many=True) return Response(serializer.data) @swagger_auto_schema( operation_description="Crée un nouveau fichier template pour les dossiers d'inscription", request_body=RegistrationFileTemplateSerializer, responses={ 201: RegistrationFileTemplateSerializer, 400: "Données invalides" } ) def post(self, request): """ Crée un fichier template pour les dossiers d’inscription. """ serializer = RegistrationFileTemplateSerializer(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 RegistrationFileTemplateSimpleView(APIView): """ Gère les fichiers templates pour les dossiers d’inscription. """ parser_classes = (MultiPartParser, FormParser) @swagger_auto_schema( operation_description="Récupère un fichier template spécifique", responses={ 200: RegistrationFileTemplateSerializer, 404: "Fichier template non trouvé" } ) def get(self, request, id): """ Récupère les fichiers templates pour les dossiers d’inscription. """ registationFileTemplate = bdd.getObject(_objectName=RegistrationFileTemplate, _columnName='id', _value=id) if registationFileTemplate is None: return JsonResponse({"errorMessage":'Le fichier d\'inscription n\'a pas été trouvé'}, safe=False, status=status.HTTP_404_NOT_FOUND) serializer = RegistrationFileTemplateSerializer(registationFileTemplate) return JsonResponse(serializer.data, safe=False) @swagger_auto_schema( operation_description="Met à jour un fichier template existant", request_body=RegistrationFileTemplateSerializer, responses={ 201: RegistrationFileTemplateSerializer, 400: "Données invalides", 404: "Fichier template non trouvé" } ) def put(self, request, id): """ Met à jour un fichier template existant. """ registationFileTemplate = bdd.getObject(_objectName=RegistrationFileTemplate, _columnName='id', _value=id) if registationFileTemplate is None: return JsonResponse({'erreur': 'Le fichier d\'inscription n\'a pas été trouvé'}, safe=False, status=status.HTTP_404_NOT_FOUND) serializer = RegistrationFileTemplateSerializer(registationFileTemplate,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) @swagger_auto_schema( operation_description="Supprime un fichier template", responses={ 204: "Suppression réussie", 404: "Fichier template non trouvé" } ) def delete(self, request, id): """ Supprime un fichier template existant. """ registrationFileTemplate = bdd.getObject(_objectName=RegistrationFileTemplate, _columnName='id', _value=id) if registrationFileTemplate is not None: registrationFileTemplate.file.delete() # Supprimer le fichier uploadé registrationFileTemplate.delete() return JsonResponse({'message': 'La suppression du fichier d\'inscription a été effectuée avec succès'}, safe=False, status=status.HTTP_204_NO_CONTENT) else: return JsonResponse({'erreur': 'Le fichier d\'inscription n\'a pas été trouvé'}, safe=False, status=status.HTTP_404_NOT_FOUND) class RegistrationFileView(APIView): @swagger_auto_schema( operation_description="Récupère tous les fichiers d'inscription", responses={200: RegistrationFileSerializer(many=True)} ) def get(self, request): """ Récupère les fichiers liés à un dossier d’inscription donné. """ files = RegistrationFile.objects.all() serializer = RegistrationFileSerializer(files, many=True) return Response(serializer.data) @swagger_auto_schema( operation_description="Crée un nouveau fichier d'inscription", request_body=RegistrationFileSerializer, responses={ 201: RegistrationFileSerializer, 400: "Données invalides" } ) def post(self, request): """ Crée un RegistrationFile pour le RegistrationForm associé. """ serializer = RegistrationFileSerializer(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 RegistrationFileSimpleView(APIView): """ Gère la création, mise à jour et suppression de fichiers liés à un dossier d’inscription. """ parser_classes = (MultiPartParser, FormParser) @swagger_auto_schema( operation_description="Récupère un fichier d'inscription spécifique", responses={ 200: RegistrationFileSerializer, 404: "Fichier non trouvé" } ) def get(self, request, id): """ Récupère les fichiers liés à un dossier d’inscription donné. """ registationFile = bdd.getObject(_objectName=RegistrationFile, _columnName='id', _value=id) if registationFile is None: return JsonResponse({"errorMessage":'Le fichier d\'inscription n\'a pas été trouvé'}, safe=False, status=status.HTTP_404_NOT_FOUND) serializer = RegistrationFileSerializer(registationFile) return JsonResponse(serializer.data, safe=False) @swagger_auto_schema( operation_description="Met à jour un fichier d'inscription existant", request_body=RegistrationFileSerializer, responses={ 200: openapi.Response( description="Fichier mis à jour avec succès", schema=RegistrationFileSerializer ), 400: "Données invalides", 404: "Fichier non trouvé" } ) def put(self, request, id): """ Met à jour un RegistrationFile existant. """ registrationFile = bdd.getObject(_objectName=RegistrationFile, _columnName='id', _value=id) if registrationFile is None: return JsonResponse({'erreur': 'Le fichier d\'inscription n\'a pas été trouvé'}, safe=False, status=status.HTTP_404_NOT_FOUND) serializer = RegistrationFileSerializer(registrationFile, data=request.data) if serializer.is_valid(): serializer.save() return Response({'message': 'Fichier mis à jour avec succès', 'data': serializer.data}, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) @swagger_auto_schema( operation_description="Supprime un fichier d'inscription", responses={ 200: "Suppression réussie", 404: "Fichier non trouvé" } ) def delete(self, request, id): """ Supprime un RegistrationFile existant. """ registrationFile = bdd.getObject(_objectName=RegistrationFile, _columnName='id', _value=id) if registrationFile is not None: registrationFile.file.delete() # Supprimer le fichier uploadé registrationFile.delete() return JsonResponse({'message': 'La suppression du fichier a été effectuée avec succès'}, safe=False) else: return JsonResponse({'erreur': 'Le fichier n\'a pas été trouvé'}, safe=False, status=status.HTTP_404_NOT_FOUND)