from django.http.response import JsonResponse from drf_yasg.utils import swagger_auto_schema from rest_framework.response import Response from rest_framework.views import APIView from rest_framework import status from rest_framework.decorators import action, api_view from drf_yasg.utils import swagger_auto_schema from drf_yasg import openapi from Subscriptions.serializers import RegistrationFileGroupSerializer from Subscriptions.models import RegistrationFileGroup, RegistrationTemplateMaster from N3wtSchool import bdd class RegistrationFileGroupView(APIView): @swagger_auto_schema( operation_description="Récupère tous les groupes de fichiers d'inscription", responses={200: RegistrationFileGroupSerializer(many=True)} ) def get(self, request): """ Récupère tous les groupes de fichiers d'inscription. """ 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) groups = RegistrationFileGroup.objects.all() if groups: groups = groups.filter(establishment_id=establishment_id).distinct() serializer = RegistrationFileGroupSerializer(groups, many=True) return Response(serializer.data) @swagger_auto_schema( operation_description="Crée un nouveau groupe de fichiers d'inscription", request_body=RegistrationFileGroupSerializer, responses={ 201: RegistrationFileGroupSerializer, 400: "Données invalides" } ) def post(self, request): """ Crée un nouveau groupe de fichiers d'inscription. """ serializer = RegistrationFileGroupSerializer(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 RegistrationFileGroupSimpleView(APIView): @swagger_auto_schema( operation_description="Récupère un groupe de fichiers d'inscription spécifique", responses={ 200: RegistrationFileGroupSerializer, 404: "Groupe non trouvé" } ) def get(self, request, id): """ Récupère un groupe de fichiers d'inscription spécifique. """ group = bdd.getObject(_objectName=RegistrationFileGroup, _columnName='id', _value=id) if group is None: return JsonResponse({"errorMessage": "Le groupe de fichiers n'a pas été trouvé"}, status=status.HTTP_404_NOT_FOUND) serializer = RegistrationFileGroupSerializer(group) return JsonResponse(serializer.data) @swagger_auto_schema( operation_description="Met à jour un groupe de fichiers d'inscription", request_body=RegistrationFileGroupSerializer, responses={ 200: RegistrationFileGroupSerializer, 400: "Données invalides", 404: "Groupe non trouvé" } ) def put(self, request, id): """ Met à jour un groupe de fichiers d'inscription existant. """ group = bdd.getObject(_objectName=RegistrationFileGroup, _columnName='id', _value=id) if group is None: return JsonResponse({'erreur': "Le groupe de fichiers n'a pas été trouvé"}, status=status.HTTP_404_NOT_FOUND) serializer = RegistrationFileGroupSerializer(group, data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) @swagger_auto_schema( operation_description="Supprime un groupe de fichiers d'inscription", responses={ 204: "Suppression réussie", 404: "Groupe non trouvé" } ) def delete(self, request, id): """ Supprime un groupe de fichiers d'inscription. """ group = bdd.getObject(_objectName=RegistrationFileGroup, _columnName='id', _value=id) if group is not None: group.delete() return JsonResponse({'message': 'La suppression du groupe a été effectuée avec succès'}, status=status.HTTP_204_NO_CONTENT) return JsonResponse({'erreur': "Le groupe de fichiers n'a pas été trouvé"}, status=status.HTTP_404_NOT_FOUND) @swagger_auto_schema( method='get', responses={200: openapi.Response('Success', schema=openapi.Schema( type=openapi.TYPE_OBJECT, properties={ 'message': openapi.Schema(type=openapi.TYPE_STRING) } ))}, operation_description="Récupère les fichiers d'inscription d'un groupe donné", operation_summary="Récupèrer les fichiers d'inscription d'un groupe donné" ) @api_view(['GET']) def get_registration_files_by_group(request, id): try: group = RegistrationFileGroup.objects.get(id=id) templateMasters = RegistrationTemplateMaster.objects.filter(groups=group) templates_data = list(templateMasters.values()) return JsonResponse(templates_data, safe=False) except RegistrationFileGroup.DoesNotExist: return JsonResponse({'error': 'Le groupe de fichiers n\'a pas été trouvé'}, status=404)