diff --git a/Back-End/Subscriptions/views/registration_file_views.py b/Back-End/Subscriptions/views/registration_file_views.py index 84fc514..15f22bb 100644 --- a/Back-End/Subscriptions/views/registration_file_views.py +++ b/Back-End/Subscriptions/views/registration_file_views.py @@ -12,11 +12,27 @@ from N3wtSchool import bdd class RegistrationSchoolFileMasterView(APIView): @swagger_auto_schema( - operation_description="Récupère tous les masters de templates d'inscription", + operation_description="Récupère tous les masters de templates d'inscription pour un établissement donné", + manual_parameters=[ + openapi.Parameter( + 'establishment_id', + openapi.IN_QUERY, + description="ID de l'établissement", + type=openapi.TYPE_INTEGER, + required=True + ) + ], responses={200: RegistrationSchoolFileMasterSerializer(many=True)} ) def get(self, request): - masters = RegistrationSchoolFileMaster.objects.all() + establishment_id = request.GET.get('establishment_id') + if not establishment_id: + return Response({'error': "Paramètre 'establishment_id' requis"}, status=status.HTTP_400_BAD_REQUEST) + + # Filtrer les masters liés à l'établissement via groups.establishment + masters = RegistrationSchoolFileMaster.objects.filter( + groups__establishment__id=establishment_id + ).distinct() serializer = RegistrationSchoolFileMasterSerializer(masters, many=True) return Response(serializer.data) @@ -86,11 +102,27 @@ class RegistrationSchoolFileMasterSimpleView(APIView): class RegistrationSchoolFileTemplateView(APIView): @swagger_auto_schema( - operation_description="Récupère tous les templates d'inscription", + operation_description="Récupère tous les templates d'inscription pour un établissement donné", + manual_parameters=[ + openapi.Parameter( + 'establishment_id', + openapi.IN_QUERY, + description="ID de l'établissement", + type=openapi.TYPE_INTEGER, + required=True + ) + ], responses={200: RegistrationSchoolFileTemplateSerializer(many=True)} ) def get(self, request): - templates = RegistrationSchoolFileTemplate.objects.all() + establishment_id = request.GET.get('establishment_id') + if not establishment_id: + return Response({'error': "Paramètre 'establishment_id' requis"}, status=status.HTTP_400_BAD_REQUEST) + + # Filtrer les templates liés à l'établissement via master.groups.establishment + templates = RegistrationSchoolFileTemplate.objects.filter( + master__groups__establishment__id=establishment_id + ).distinct() serializer = RegistrationSchoolFileTemplateSerializer(templates, many=True) return Response(serializer.data) @@ -160,11 +192,27 @@ class RegistrationSchoolFileTemplateSimpleView(APIView): class RegistrationParentFileMasterView(APIView): @swagger_auto_schema( - operation_description="Récupère tous les fichiers parents", + operation_description="Récupère tous les fichiers parents pour un établissement donné", + manual_parameters=[ + openapi.Parameter( + 'establishment_id', + openapi.IN_QUERY, + description="ID de l'établissement", + type=openapi.TYPE_INTEGER, + required=True + ) + ], responses={200: RegistrationParentFileMasterSerializer(many=True)} ) def get(self, request): - templates = RegistrationParentFileMaster.objects.all() + establishment_id = request.GET.get('establishment_id') + if not establishment_id: + return Response({'error': "Paramètre 'establishment_id' requis"}, status=status.HTTP_400_BAD_REQUEST) + + # Filtrer les fichiers parents liés à l'établissement + templates = RegistrationParentFileMaster.objects.filter( + groups__establishment__id=establishment_id + ).distinct() serializer = RegistrationParentFileMasterSerializer(templates, many=True) return Response(serializer.data) @@ -234,11 +282,27 @@ class RegistrationParentFileMasterSimpleView(APIView): class RegistrationParentFileTemplateView(APIView): @swagger_auto_schema( - operation_description="Récupère tous les templates d'inscription", + operation_description="Récupère tous les templates parents pour un établissement donné", + manual_parameters=[ + openapi.Parameter( + 'establishment_id', + openapi.IN_QUERY, + description="ID de l'établissement", + type=openapi.TYPE_INTEGER, + required=True + ) + ], responses={200: RegistrationParentFileTemplateSerializer(many=True)} ) def get(self, request): - templates = RegistrationParentFileTemplate.objects.all() + establishment_id = request.GET.get('establishment_id') + if not establishment_id: + return Response({'error': "Paramètre 'establishment_id' requis"}, status=status.HTTP_400_BAD_REQUEST) + + # Filtrer les templates parents liés à l'établissement via master.groups.establishment + templates = RegistrationParentFileTemplate.objects.filter( + master__groups__establishment__id=establishment_id + ).distinct() serializer = RegistrationParentFileTemplateSerializer(templates, many=True) return Response(serializer.data) diff --git a/Front-End/src/app/[locale]/admin/structure/page.js b/Front-End/src/app/[locale]/admin/structure/page.js index 1e38917..b79559e 100644 --- a/Front-End/src/app/[locale]/admin/structure/page.js +++ b/Front-End/src/app/[locale]/admin/structure/page.js @@ -78,7 +78,7 @@ export default function Page() { handleTuitionFees(); // Fetch data for registration file schoolFileTemplates - fetchRegistrationSchoolFileMasters() + fetchRegistrationSchoolFileMasters(selectedEstablishmentId) .then((data) => { setFichiers(data); }) diff --git a/Front-End/src/app/[locale]/admin/subscriptions/createSubscription/page.js b/Front-End/src/app/[locale]/admin/subscriptions/createSubscription/page.js index 2510392..797a485 100644 --- a/Front-End/src/app/[locale]/admin/subscriptions/createSubscription/page.js +++ b/Front-End/src/app/[locale]/admin/subscriptions/createSubscription/page.js @@ -313,13 +313,13 @@ export default function CreateSubscriptionPage() { }) .catch(requestErrorHandler); - fetchRegistrationSchoolFileMasters() + fetchRegistrationSchoolFileMasters(selectedEstablishmentId) .then((data) => { setSchoolFileMasters(data); }) .catch(requestErrorHandler); - fetchRegistrationParentFileMasters() + fetchRegistrationParentFileMasters(selectedEstablishmentId) .then((data) => { setParentFileMasters(data); }) diff --git a/Front-End/src/app/actions/registerFileGroupAction.js b/Front-End/src/app/actions/registerFileGroupAction.js index 444ceec..4783c74 100644 --- a/Front-End/src/app/actions/registerFileGroupAction.js +++ b/Front-End/src/app/actions/registerFileGroupAction.js @@ -47,11 +47,8 @@ export const fetchRegistrationFileFromGroup = async (groupId) => { return response.json(); }; -export const fetchRegistrationSchoolFileMasters = (id = null) => { - let url = `${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_MASTERS_URL}`; - if (id) { - url = `${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_MASTERS_URL}/${id}`; - } +export const fetchRegistrationSchoolFileMasters = (establishment) => { + let url = `${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_MASTERS_URL}?establishment_id=${establishment}`; const request = new Request(`${url}`, { method: 'GET', headers: { @@ -61,11 +58,8 @@ export const fetchRegistrationSchoolFileMasters = (id = null) => { return fetch(request).then(requestResponseHandler).catch(errorHandler); }; -export const fetchRegistrationParentFileMasters = (id = null) => { - let url = `${BE_SUBSCRIPTION_REGISTRATION_PARENT_FILE_MASTERS_URL}`; - if (id) { - url = `${BE_SUBSCRIPTION_REGISTRATION_PARENT_FILE_MASTERS_URL}/${id}`; - } +export const fetchRegistrationParentFileMasters = (establishment) => { + let url = `${BE_SUBSCRIPTION_REGISTRATION_PARENT_FILE_MASTERS_URL}?establishment_id=${establishment}`; const request = new Request(`${url}`, { method: 'GET', headers: { @@ -75,11 +69,8 @@ export const fetchRegistrationParentFileMasters = (id = null) => { return fetch(request).then(requestResponseHandler).catch(errorHandler); }; -export const fetchRegistrationSchoolFileTemplates = (id = null) => { - let url = `${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_TEMPLATES_URL}`; - if (id) { - url = `${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_TEMPLATES_URL}/${id}`; - } +export const fetchRegistrationSchoolFileTemplates = (establishment) => { + let url = `${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_TEMPLATES_URL}?establishment_id=${establishment}`; const request = new Request(`${url}`, { method: 'GET', headers: { diff --git a/Front-End/src/components/ProfileSelector.js b/Front-End/src/components/ProfileSelector.js index 9c470f2..761368a 100644 --- a/Front-End/src/components/ProfileSelector.js +++ b/Front-End/src/components/ProfileSelector.js @@ -24,7 +24,8 @@ const ProfileSelector = ({ onRoleChange, className = '' }) => { setSelectedEstablishmentEvaluationFrequency, setSelectedEstablishmentTotalCapacity, selectedEstablishmentLogo, - setSelectedEstablishmentLogo + setSelectedEstablishmentLogo, + setApiDocuseal } = useEstablishment(); const { isConnected, connectionStatus } = useChatConnection(); const [dropdownOpen, setDropdownOpen] = useState(false); @@ -40,6 +41,8 @@ const ProfileSelector = ({ onRoleChange, className = '' }) => { user.roles[roleId].establishment__total_capacity; const establishmentLogo = user.roles[roleId].establishment__logo; + const establishmentApiDocuseal = + user.roles[roleId].establishment__api_docuseal; setProfileRole(role); setSelectedEstablishmentId(establishmentId); setSelectedEstablishmentEvaluationFrequency( @@ -47,6 +50,7 @@ const ProfileSelector = ({ onRoleChange, className = '' }) => { ); setSelectedEstablishmentTotalCapacity(establishmentTotalCapacity); setSelectedEstablishmentLogo(establishmentLogo); + setApiDocuseal(establishmentApiDocuseal); setSelectedRoleId(roleId); if (onRoleChange) { onRoleChange(roleId); diff --git a/Front-End/src/components/Structure/Files/FilesGroupsManagement.js b/Front-End/src/components/Structure/Files/FilesGroupsManagement.js index ad1ff4c..499d564 100644 --- a/Front-End/src/components/Structure/Files/FilesGroupsManagement.js +++ b/Front-End/src/components/Structure/Files/FilesGroupsManagement.js @@ -78,10 +78,10 @@ export default function FilesGroupsManagement({ useEffect(() => { if (selectedEstablishmentId) { Promise.all([ - fetchRegistrationSchoolFileMasters(), + fetchRegistrationSchoolFileMasters(selectedEstablishmentId), fetchRegistrationFileGroups(selectedEstablishmentId), - fetchRegistrationSchoolFileTemplates(), - fetchRegistrationParentFileMasters(), + fetchRegistrationSchoolFileTemplates(selectedEstablishmentId), + fetchRegistrationParentFileMasters(selectedEstablishmentId), ]) .then( ([