fix: Link documents with establishments

This commit is contained in:
N3WT DE COMPET
2025-06-01 07:54:33 +02:00
parent c161fa7e75
commit 2f6d30b85b
6 changed files with 89 additions and 30 deletions

View File

@ -12,11 +12,27 @@ from N3wtSchool import bdd
class RegistrationSchoolFileMasterView(APIView): class RegistrationSchoolFileMasterView(APIView):
@swagger_auto_schema( @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)} responses={200: RegistrationSchoolFileMasterSerializer(many=True)}
) )
def get(self, request): 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) serializer = RegistrationSchoolFileMasterSerializer(masters, many=True)
return Response(serializer.data) return Response(serializer.data)
@ -86,11 +102,27 @@ class RegistrationSchoolFileMasterSimpleView(APIView):
class RegistrationSchoolFileTemplateView(APIView): class RegistrationSchoolFileTemplateView(APIView):
@swagger_auto_schema( @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)} responses={200: RegistrationSchoolFileTemplateSerializer(many=True)}
) )
def get(self, request): 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) serializer = RegistrationSchoolFileTemplateSerializer(templates, many=True)
return Response(serializer.data) return Response(serializer.data)
@ -160,11 +192,27 @@ class RegistrationSchoolFileTemplateSimpleView(APIView):
class RegistrationParentFileMasterView(APIView): class RegistrationParentFileMasterView(APIView):
@swagger_auto_schema( @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)} responses={200: RegistrationParentFileMasterSerializer(many=True)}
) )
def get(self, request): 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) serializer = RegistrationParentFileMasterSerializer(templates, many=True)
return Response(serializer.data) return Response(serializer.data)
@ -234,11 +282,27 @@ class RegistrationParentFileMasterSimpleView(APIView):
class RegistrationParentFileTemplateView(APIView): class RegistrationParentFileTemplateView(APIView):
@swagger_auto_schema( @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)} responses={200: RegistrationParentFileTemplateSerializer(many=True)}
) )
def get(self, request): 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) serializer = RegistrationParentFileTemplateSerializer(templates, many=True)
return Response(serializer.data) return Response(serializer.data)

View File

@ -78,7 +78,7 @@ export default function Page() {
handleTuitionFees(); handleTuitionFees();
// Fetch data for registration file schoolFileTemplates // Fetch data for registration file schoolFileTemplates
fetchRegistrationSchoolFileMasters() fetchRegistrationSchoolFileMasters(selectedEstablishmentId)
.then((data) => { .then((data) => {
setFichiers(data); setFichiers(data);
}) })

View File

@ -313,13 +313,13 @@ export default function CreateSubscriptionPage() {
}) })
.catch(requestErrorHandler); .catch(requestErrorHandler);
fetchRegistrationSchoolFileMasters() fetchRegistrationSchoolFileMasters(selectedEstablishmentId)
.then((data) => { .then((data) => {
setSchoolFileMasters(data); setSchoolFileMasters(data);
}) })
.catch(requestErrorHandler); .catch(requestErrorHandler);
fetchRegistrationParentFileMasters() fetchRegistrationParentFileMasters(selectedEstablishmentId)
.then((data) => { .then((data) => {
setParentFileMasters(data); setParentFileMasters(data);
}) })

View File

@ -47,11 +47,8 @@ export const fetchRegistrationFileFromGroup = async (groupId) => {
return response.json(); return response.json();
}; };
export const fetchRegistrationSchoolFileMasters = (id = null) => { export const fetchRegistrationSchoolFileMasters = (establishment) => {
let url = `${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_MASTERS_URL}`; let url = `${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_MASTERS_URL}?establishment_id=${establishment}`;
if (id) {
url = `${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_MASTERS_URL}/${id}`;
}
const request = new Request(`${url}`, { const request = new Request(`${url}`, {
method: 'GET', method: 'GET',
headers: { headers: {
@ -61,11 +58,8 @@ export const fetchRegistrationSchoolFileMasters = (id = null) => {
return fetch(request).then(requestResponseHandler).catch(errorHandler); return fetch(request).then(requestResponseHandler).catch(errorHandler);
}; };
export const fetchRegistrationParentFileMasters = (id = null) => { export const fetchRegistrationParentFileMasters = (establishment) => {
let url = `${BE_SUBSCRIPTION_REGISTRATION_PARENT_FILE_MASTERS_URL}`; let url = `${BE_SUBSCRIPTION_REGISTRATION_PARENT_FILE_MASTERS_URL}?establishment_id=${establishment}`;
if (id) {
url = `${BE_SUBSCRIPTION_REGISTRATION_PARENT_FILE_MASTERS_URL}/${id}`;
}
const request = new Request(`${url}`, { const request = new Request(`${url}`, {
method: 'GET', method: 'GET',
headers: { headers: {
@ -75,11 +69,8 @@ export const fetchRegistrationParentFileMasters = (id = null) => {
return fetch(request).then(requestResponseHandler).catch(errorHandler); return fetch(request).then(requestResponseHandler).catch(errorHandler);
}; };
export const fetchRegistrationSchoolFileTemplates = (id = null) => { export const fetchRegistrationSchoolFileTemplates = (establishment) => {
let url = `${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_TEMPLATES_URL}`; let url = `${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_TEMPLATES_URL}?establishment_id=${establishment}`;
if (id) {
url = `${BE_SUBSCRIPTION_REGISTRATION_SCHOOL_FILE_TEMPLATES_URL}/${id}`;
}
const request = new Request(`${url}`, { const request = new Request(`${url}`, {
method: 'GET', method: 'GET',
headers: { headers: {

View File

@ -24,7 +24,8 @@ const ProfileSelector = ({ onRoleChange, className = '' }) => {
setSelectedEstablishmentEvaluationFrequency, setSelectedEstablishmentEvaluationFrequency,
setSelectedEstablishmentTotalCapacity, setSelectedEstablishmentTotalCapacity,
selectedEstablishmentLogo, selectedEstablishmentLogo,
setSelectedEstablishmentLogo setSelectedEstablishmentLogo,
setApiDocuseal
} = useEstablishment(); } = useEstablishment();
const { isConnected, connectionStatus } = useChatConnection(); const { isConnected, connectionStatus } = useChatConnection();
const [dropdownOpen, setDropdownOpen] = useState(false); const [dropdownOpen, setDropdownOpen] = useState(false);
@ -40,6 +41,8 @@ const ProfileSelector = ({ onRoleChange, className = '' }) => {
user.roles[roleId].establishment__total_capacity; user.roles[roleId].establishment__total_capacity;
const establishmentLogo = const establishmentLogo =
user.roles[roleId].establishment__logo; user.roles[roleId].establishment__logo;
const establishmentApiDocuseal =
user.roles[roleId].establishment__api_docuseal;
setProfileRole(role); setProfileRole(role);
setSelectedEstablishmentId(establishmentId); setSelectedEstablishmentId(establishmentId);
setSelectedEstablishmentEvaluationFrequency( setSelectedEstablishmentEvaluationFrequency(
@ -47,6 +50,7 @@ const ProfileSelector = ({ onRoleChange, className = '' }) => {
); );
setSelectedEstablishmentTotalCapacity(establishmentTotalCapacity); setSelectedEstablishmentTotalCapacity(establishmentTotalCapacity);
setSelectedEstablishmentLogo(establishmentLogo); setSelectedEstablishmentLogo(establishmentLogo);
setApiDocuseal(establishmentApiDocuseal);
setSelectedRoleId(roleId); setSelectedRoleId(roleId);
if (onRoleChange) { if (onRoleChange) {
onRoleChange(roleId); onRoleChange(roleId);

View File

@ -78,10 +78,10 @@ export default function FilesGroupsManagement({
useEffect(() => { useEffect(() => {
if (selectedEstablishmentId) { if (selectedEstablishmentId) {
Promise.all([ Promise.all([
fetchRegistrationSchoolFileMasters(), fetchRegistrationSchoolFileMasters(selectedEstablishmentId),
fetchRegistrationFileGroups(selectedEstablishmentId), fetchRegistrationFileGroups(selectedEstablishmentId),
fetchRegistrationSchoolFileTemplates(), fetchRegistrationSchoolFileTemplates(selectedEstablishmentId),
fetchRegistrationParentFileMasters(), fetchRegistrationParentFileMasters(selectedEstablishmentId),
]) ])
.then( .then(
([ ([