feat: Utilisation de l'établissement en variable de session / gestion de

la page des inscriptions en fonction de l'établissement / mise à jour du
mock_data à l'init
This commit is contained in:
N3WT DE COMPET
2025-03-06 20:08:16 +01:00
parent c03fa0ba42
commit f2ad1de5a4
20 changed files with 464 additions and 372 deletions

View File

@ -15,6 +15,7 @@ import { MoreVertical, Send, Edit, Trash2, FileText, CheckCircle, Plus } from '
import Modal from '@/components/Modal';
import InscriptionForm from '@/components/Inscription/InscriptionForm'
import AffectationClasseForm from '@/components/AffectationClasseForm'
import { getSession } from 'next-auth/react';
import {
PENDING,
@ -52,8 +53,6 @@ import { useCsrfToken } from '@/context/CsrfContext';
import { ESTABLISHMENT_ID } from '@/utils/Url';
import logger from '@/utils/logger';
const useFakeData = process.env.NEXT_PUBLIC_USE_FAKE_DATA === 'true';
export default function Page({ params: { locale } }) {
const t = useTranslations('subscriptions');
const [registrationForms, setRegistrationForms] = useState([]);
@ -88,6 +87,8 @@ export default function Page({ params: { locale } }) {
const [tuitionFees, setTuitionFees] = useState([]);
const [groups, setGroups] = useState([]);
const [establishmentId, setEstablishmentId] = useState(null);
const csrfToken = useCsrfToken();
const openModal = () => {
@ -166,115 +167,131 @@ const registerFormArchivedDataHandler = (data) => {
}
useEffect(() => {
const fetchInitialData = async () => {
try {
const [classesData, studentsData] = await Promise.all([
fetchClasses(),
fetchStudents()
]);
getSession()
.then(session => {
if (session && session.user) {
setEstablishmentId(session.user.establishment);
}
})
.catch(err => {
logger.error('Error fetching session:', err);
});
}, []);
setClasses(classesData);
setEleves(studentsData);
logger.debug('Success - Classes:', classesData);
logger.debug('Success - Students:', studentsData);
} catch (error) {
logger.error('Error fetching initial data:', error);
}
useEffect(() => {
if (establishmentId) {
const fetchInitialData = () => {
Promise.all([
fetchClasses(),
fetchStudents(establishmentId) // Utiliser l'ID de l'établissement ici
])
.then(([classesData, studentsData]) => {
setClasses(classesData);
setEleves(studentsData);
logger.debug('Success - Classes:', classesData);
logger.debug('Success - Students:', studentsData);
})
.catch(error => {
logger.error('Error fetching initial data:', error);
});
};
fetchInitialData();
}, []);
}
}, [establishmentId]);
useEffect(() => {
const fetchDataAndSetState = () => {
setIsLoading(true);
if (!useFakeData) {
fetchRegisterForms(PENDING, currentPage, itemsPerPage, searchTerm)
.then(registerFormPendingDataHandler)
.catch(requestErrorHandler)
fetchRegisterForms(SUBSCRIBED)
.then(registerFormSubscribedDataHandler)
.catch(requestErrorHandler)
fetchRegisterForms(ARCHIVED)
.then(registerFormArchivedDataHandler)
.catch(requestErrorHandler)
fetchRegistrationTemplateMaster()
.then((data)=> {
logger.debug(data);
setTemplateMasters(data)
})
.catch((err)=>{ err = err.message; logger.debug(err);})
fetchRegistrationDiscounts()
.then(data => {
setRegistrationDiscounts(data);
})
.catch(requestErrorHandler)
fetchTuitionDiscounts()
.then(data => {
setTuitionDiscounts(data);
})
.catch(requestErrorHandler)
fetchRegistrationFees()
.then(data => {
setRegistrationFees(data);
})
.catch(requestErrorHandler)
fetchTuitionFees()
.then(data => {
setTuitionFees(data);
})
.catch(requestErrorHandler);
fetchRegistrationFileGroups()
.then(data => {
setGroups(data);
})
.catch(error => logger.error('Error fetching file groups:', error));
} else {
setTimeout(() => {
setRegistrationFormsDataPending(mockFicheInscription);
}, 1000);
}
setIsLoading(false);
setReloadFetch(false);
};
fetchDataAndSetState();
}, [reloadFetch, currentPage]);
useEffect(() => {
if (establishmentId) {
const fetchDataAndSetState = () => {
setIsLoading(true);
Promise.all([
fetchRegisterForms(establishmentId, PENDING, currentPage, itemsPerPage, searchTerm)
.then(registerFormPendingDataHandler)
.catch(requestErrorHandler),
fetchRegisterForms(establishmentId, SUBSCRIBED)
.then(registerFormSubscribedDataHandler)
.catch(requestErrorHandler),
fetchRegisterForms(establishmentId, ARCHIVED)
.then(registerFormArchivedDataHandler)
.catch(requestErrorHandler),
fetchRegistrationTemplateMaster()
.then(data => {
setTemplateMasters(data);
})
.catch(err => {
logger.debug(err.message);
}),
fetchRegistrationDiscounts()
.then(data => {
setRegistrationDiscounts(data);
})
.catch(requestErrorHandler),
fetchTuitionDiscounts()
.then(data => {
setTuitionDiscounts(data);
})
.catch(requestErrorHandler),
fetchRegistrationFees()
.then(data => {
setRegistrationFees(data);
})
.catch(requestErrorHandler),
fetchTuitionFees()
.then(data => {
setTuitionFees(data);
})
.catch(requestErrorHandler),
fetchRegistrationFileGroups()
.then(data => {
setGroups(data);
})
.catch(error => {
logger.error('Error fetching file groups:', error);
})
])
.then(() => {
setIsLoading(false);
setReloadFetch(false);
})
.catch(err => {
logger.error(err);
setIsLoading(false);
setReloadFetch(false);
});
};
fetchDataAndSetState();
}
}, [establishmentId, reloadFetch, currentPage, searchTerm]);
useEffect(() => {
if (establishmentId) {
const fetchDataAndSetState = () => {
setIsLoading(true);
if (!useFakeData) {
fetchRegisterForms(PENDING, currentPage, itemsPerPage, searchTerm)
.then(registerFormPendingDataHandler)
.catch(requestErrorHandler)
fetchRegisterForms(SUBSCRIBED)
.then(registerFormSubscribedDataHandler)
.catch(requestErrorHandler)
fetchRegisterForms(ARCHIVED)
.then(registerFormArchivedDataHandler)
.catch(requestErrorHandler)
fetchRegistrationTemplateMaster()
.then((data)=> {setTemplateMasters(data)})
.catch((err)=>{ err = err.message; logger.debug(err);});
} else {
setTimeout(() => {
setRegistrationFormsDataPending(mockFicheInscription);
}, 1000);
}
fetchRegisterForms(establishmentId, PENDING, currentPage, itemsPerPage, searchTerm)
.then(registerFormPendingDataHandler)
.catch(requestErrorHandler)
fetchRegisterForms(establishmentId, SUBSCRIBED)
.then(registerFormSubscribedDataHandler)
.catch(requestErrorHandler)
fetchRegisterForms(establishmentId, ARCHIVED)
.then(registerFormArchivedDataHandler)
.catch(requestErrorHandler)
fetchRegistrationTemplateMaster()
.then((data)=> {setTemplateMasters(data)})
.catch((err)=>{ err = err.message; logger.debug(err);});
setIsLoading(false);
setReloadFetch(false);
};
}
const timeoutId = setTimeout(() => {
fetchDataAndSetState();
}, 500); // Debounce la recherche
return () => clearTimeout(timeoutId);
const timeoutId = setTimeout(() => {
fetchDataAndSetState();
}, 500); // Debounce la recherche
return () => clearTimeout(timeoutId);
}
}, [searchTerm]);
/**

View File

@ -53,6 +53,11 @@ export default function Page() {
}
const user = session.user;
logger.debug('User Session:', user);
if (user.establishment_id) {
localStorage.setItem('establishment_id', user.establishment_id);
}
if (user.droit === 0) {
// Vue ECOLE
} else if (user.droit === 1) {