fix: calcul nombre de pages dans chaque tab

This commit is contained in:
N3WT DE COMPET
2025-05-05 21:39:10 +02:00
parent 5927e48e65
commit 5440f5cbdb
3 changed files with 66 additions and 36 deletions

View File

@ -74,7 +74,6 @@ class RegisterFormView(APIView):
""" """
# Récupération des paramètres # Récupération des paramètres
filter = request.GET.get('filter', '').strip() filter = request.GET.get('filter', '').strip()
search = request.GET.get('search', '').strip()
page_size = request.GET.get('page_size', None) page_size = request.GET.get('page_size', None)
establishment_id = request.GET.get('establishment_id', None) establishment_id = request.GET.get('establishment_id', None)
@ -98,7 +97,6 @@ class RegisterFormView(APIView):
registerForms_List = RegistrationForm.objects.filter(school_year=next_year) registerForms_List = RegistrationForm.objects.filter(school_year=next_year)
elif filter == 'historical': elif filter == 'historical':
registerForms_List = RegistrationForm.objects.filter(school_year__in=historical_years) registerForms_List = RegistrationForm.objects.filter(school_year__in=historical_years)
registerForms_List = bdd.getObjects(RegistrationForm, 'status', RegistrationForm.RegistrationFormStatus.RF_VALIDATED)
else: else:
registerForms_List = None registerForms_List = None

View File

@ -90,20 +90,26 @@ export default function CreateSubscriptionPage() {
const isSubmitDisabled = () => { const isSubmitDisabled = () => {
// Vérifie si les champs requis sont remplis // Vérifie si les champs requis sont remplis
const requiredFields = ['schoolYear', 'studentLastName', 'studentFirstName']; const requiredFields = [
const hasErrors = requiredFields.some((field) => getLocalError(field) !== ''); 'schoolYear',
'studentLastName',
'studentFirstName',
];
const hasErrors = requiredFields.some(
(field) => getLocalError(field) !== ''
);
// Vérifie si un groupe de fichiers est sélectionné // Vérifie si un groupe de fichiers est sélectionné
const isFileGroupSelected = formData.selectedFileGroup !== null; const isFileGroupSelected = formData.selectedFileGroup !== null;
// Vérifie si au moins un frais de scolarité est sélectionné // Vérifie si au moins un frais de scolarité est sélectionné
const hasSelectedTuitionFees = formData.selectedTuitionFees.length > 0; const hasSelectedTuitionFees = formData.selectedTuitionFees.length > 0;
// Vérifie les conditions spécifiques pour le responsable // Vérifie les conditions spécifiques pour le responsable
const isGuardianValid = isNewResponsable const isGuardianValid = isNewResponsable
? getLocalError('guardianEmail') === '' ? getLocalError('guardianEmail') === ''
: formData.selectedGuardians.length > 0; : formData.selectedGuardians.length > 0;
// Retourne true si une des conditions n'est pas remplie // Retourne true si une des conditions n'est pas remplie
return ( return (
hasErrors || hasErrors ||

View File

@ -71,14 +71,20 @@ export default function Page({ params: { locale } }) {
const currentSchoolYear = getCurrentSchoolYear(); // Exemple : "2024-2025" const currentSchoolYear = getCurrentSchoolYear(); // Exemple : "2024-2025"
const nextSchoolYear = getNextSchoolYear(); // Exemple : "2025-2026" const nextSchoolYear = getNextSchoolYear(); // Exemple : "2025-2026"
const historicalYears = getHistoricalYears(); const historicalYears = getHistoricalYears();
const [totalCurrentSchoolYearPages, setTotalCurrentSchoolYearPages] =
useState(1);
const [totalNextSchoolYearPages, setTotalNextSchoolYearPages] = useState(1);
const [totalHistoricalPages, setTotalHistoricalPages] = useState(1);
const [currentSchoolYearPage, setCurrentSchoolYearPage] = useState(1);
const [currentSchoolNextYearPage, setCurrentSchoolNextYearPage] = useState(1);
const [currentSchoolHistoricalYearPage, setCurrentSchoolHistoricalYearPage] =
useState(1);
const [searchTerm, setSearchTerm] = useState(''); const [searchTerm, setSearchTerm] = useState('');
const [alertPage, setAlertPage] = useState(false); const [alertPage, setAlertPage] = useState(false);
const [isLoading, setIsLoading] = useState(false); const [isLoading, setIsLoading] = useState(false);
const [activeTab, setActiveTab] = useState('currentYear'); const [activeTab, setActiveTab] = useState('currentYear');
const [currentPage, setCurrentPage] = useState(1);
const [totalPages, setTotalPages] = useState(1);
const [totalCurrentYear, setTotalCurrentYear] = useState(0); const [totalCurrentYear, setTotalCurrentYear] = useState(0);
const [totalSubscribed, setTotalNextYear] = useState(0); const [totalNextYear, setTotalNextYear] = useState(0);
const [totalHistorical, setTotalHistorical] = useState(0); const [totalHistorical, setTotalHistorical] = useState(0);
const [itemsPerPage, setItemsPerPage] = useState(10); // Définir le nombre d'éléments par page const [itemsPerPage, setItemsPerPage] = useState(10); // Définir le nombre d'éléments par page
@ -131,7 +137,7 @@ export default function Page({ params: { locale } }) {
* @param {Array} data.registerForms - The array of registration forms. * @param {Array} data.registerForms - The array of registration forms.
* @param {number} data.count - The total count of registration forms. * @param {number} data.count - The total count of registration forms.
*/ */
const registerFormPendingDataHandler = (data) => { const registerFormCurrrentYearDataHandler = (data) => {
if (data) { if (data) {
const { registerForms, count, page_size } = data; const { registerForms, count, page_size } = data;
if (registerForms) { if (registerForms) {
@ -140,7 +146,7 @@ export default function Page({ params: { locale } }) {
const calculatedTotalPages = const calculatedTotalPages =
count === 0 ? 1 : Math.ceil(count / page_size); count === 0 ? 1 : Math.ceil(count / page_size);
setTotalCurrentYear(count); setTotalCurrentYear(count);
setTotalPages(calculatedTotalPages); setTotalCurrentSchoolYearPages(calculatedTotalPages);
} }
}; };
@ -151,13 +157,16 @@ export default function Page({ params: { locale } }) {
* @param {Array} data.registerForms - An array of registration forms. * @param {Array} data.registerForms - An array of registration forms.
* @param {number} data.count - The total count of subscribed forms. * @param {number} data.count - The total count of subscribed forms.
*/ */
const registerFormSubscribedDataHandler = (data) => { const registerFormNextYearDataHandler = (data) => {
if (data) { if (data) {
const { registerForms, count, page_size } = data; const { registerForms, count, page_size } = data;
setTotalNextYear(count);
if (registerForms) { if (registerForms) {
setRegistrationFormsDataNextYear(registerForms); setRegistrationFormsDataNextYear(registerForms);
} }
const calculatedTotalPages =
count === 0 ? 1 : Math.ceil(count / page_size);
setTotalNextYear(count);
setTotalNextSchoolYearPages(calculatedTotalPages);
} }
}; };
@ -168,14 +177,17 @@ export default function Page({ params: { locale } }) {
* @param {Array} data.registerForms - The array of archived register forms. * @param {Array} data.registerForms - The array of archived register forms.
* @param {number} data.count - The total count of archived register forms. * @param {number} data.count - The total count of archived register forms.
*/ */
const registerFormArchivedDataHandler = (data) => { const registerFormHistoricalDataHandler = (data) => {
if (data) { if (data) {
const { registerForms, count, page_size } = data; const { registerForms, count, page_size } = data;
setTotalHistorical(count);
if (registerForms) { if (registerForms) {
setRegistrationFormsDataHistorical(registerForms); setRegistrationFormsDataHistorical(registerForms);
} }
const calculatedTotalPages =
count === 0 ? 1 : Math.ceil(count / page_size);
setTotalHistorical(count);
setTotalHistoricalPages(calculatedTotalPages);
} }
}; };
@ -187,11 +199,11 @@ export default function Page({ params: { locale } }) {
fetchRegisterForms( fetchRegisterForms(
selectedEstablishmentId, selectedEstablishmentId,
CURRENT_YEAR, CURRENT_YEAR,
currentPage, currentSchoolYearPage,
itemsPerPage, itemsPerPage,
searchTerm searchTerm
) )
.then(registerFormPendingDataHandler) .then(registerFormCurrrentYearDataHandler)
.catch(requestErrorHandler), .catch(requestErrorHandler),
fetchClasses(selectedEstablishmentId) fetchClasses(selectedEstablishmentId)
@ -201,10 +213,10 @@ export default function Page({ params: { locale } }) {
.catch(requestErrorHandler), .catch(requestErrorHandler),
fetchRegisterForms(selectedEstablishmentId, NEXT_YEAR) fetchRegisterForms(selectedEstablishmentId, NEXT_YEAR)
.then(registerFormSubscribedDataHandler) .then(registerFormNextYearDataHandler)
.catch(requestErrorHandler), .catch(requestErrorHandler),
fetchRegisterForms(selectedEstablishmentId, HISTORICAL) fetchRegisterForms(selectedEstablishmentId, HISTORICAL)
.then(registerFormArchivedDataHandler) .then(registerFormHistoricalDataHandler)
.catch(requestErrorHandler), .catch(requestErrorHandler),
fetchProfiles() fetchProfiles()
.then((data) => { .then((data) => {
@ -227,7 +239,7 @@ export default function Page({ params: { locale } }) {
fetchDataAndSetState(); fetchDataAndSetState();
} }
}, [selectedEstablishmentId, reloadFetch, currentPage, searchTerm]); }, [selectedEstablishmentId, reloadFetch, currentSchoolYearPage, searchTerm]);
useEffect(() => { useEffect(() => {
if (selectedEstablishmentId) { if (selectedEstablishmentId) {
@ -236,17 +248,17 @@ export default function Page({ params: { locale } }) {
fetchRegisterForms( fetchRegisterForms(
selectedEstablishmentId, selectedEstablishmentId,
CURRENT_YEAR, CURRENT_YEAR,
currentPage, currentSchoolYearPage,
itemsPerPage, itemsPerPage,
searchTerm searchTerm
) )
.then(registerFormPendingDataHandler) .then(registerFormCurrrentYearDataHandler)
.catch(requestErrorHandler); .catch(requestErrorHandler);
fetchRegisterForms(selectedEstablishmentId, NEXT_YEAR) fetchRegisterForms(selectedEstablishmentId, NEXT_YEAR)
.then(registerFormSubscribedDataHandler) .then(registerFormNextYearDataHandler)
.catch(requestErrorHandler); .catch(requestErrorHandler);
fetchRegisterForms(selectedEstablishmentId, HISTORICAL) fetchRegisterForms(selectedEstablishmentId, HISTORICAL)
.then(registerFormArchivedDataHandler) .then(registerFormHistoricalDataHandler)
.catch(requestErrorHandler); .catch(requestErrorHandler);
setIsLoading(false); setIsLoading(false);
@ -265,13 +277,15 @@ export default function Page({ params: { locale } }) {
*/ */
useEffect(() => { useEffect(() => {
if (activeTab === 'currentYear') { if (activeTab === 'currentYear') {
setTotalPages(Math.ceil(totalCurrentYear / itemsPerPage)); setTotalCurrentSchoolYearPages(
Math.ceil(totalCurrentYear / itemsPerPage)
);
} else if (activeTab === 'nextYear') { } else if (activeTab === 'nextYear') {
setTotalPages(Math.ceil(totalSubscribed / itemsPerPage)); setTotalNextSchoolYearPages(Math.ceil(totalNextYear / itemsPerPage));
} else if (activeTab === 'historical') { } else if (activeTab === 'historical') {
setTotalPages(Math.ceil(totalHistorical / itemsPerPage)); setTotalHistoricalPages(Math.ceil(totalHistorical / itemsPerPage));
} }
}, [currentPage]); }, [currentSchoolYearPage]);
const handleSepaFileUpload = (file, row) => { const handleSepaFileUpload = (file, row) => {
if (!file || !row) { if (!file || !row) {
@ -377,7 +391,7 @@ export default function Page({ params: { locale } }) {
}; };
const handlePageChange = (newPage) => { const handlePageChange = (newPage) => {
setCurrentPage(newPage); setCurrentSchoolYearPage(newPage);
}; };
const updateRF = (updatedData) => { const updateRF = (updatedData) => {
@ -756,7 +770,7 @@ export default function Page({ params: { locale } }) {
<> <>
{nextSchoolYear} {nextSchoolYear}
<span className="ml-2 text-sm text-gray-400"> <span className="ml-2 text-sm text-gray-400">
({totalSubscribed}) ({totalNextYear})
</span> </span>
</> </>
} }
@ -813,7 +827,7 @@ export default function Page({ params: { locale } }) {
<div className="w-full"> <div className="w-full">
<DjangoCSRFToken csrfToken={csrfToken} /> <DjangoCSRFToken csrfToken={csrfToken} />
<Table <Table
key={`${currentPage}-${searchTerm}`} key={`${currentSchoolYearPage}-${searchTerm}`}
data={ data={
activeTab === 'currentYear' activeTab === 'currentYear'
? registrationFormsDataCurrentYear ? registrationFormsDataCurrentYear
@ -823,8 +837,20 @@ export default function Page({ params: { locale } }) {
} }
columns={columns} columns={columns}
itemsPerPage={itemsPerPage} itemsPerPage={itemsPerPage}
currentPage={currentPage} currentPage={
totalPages={totalPages} activeTab === 'currentYear'
? currentSchoolYearPage
: activeTab === 'nextYear'
? currentSchoolNextYearPage
: currentSchoolHistoricalYearPage
}
totalPages={
activeTab === 'currentYear'
? totalCurrentSchoolYearPages
: activeTab === 'nextYear'
? totalNextSchoolYearPages
: totalHistoricalPages
}
onPageChange={handlePageChange} onPageChange={handlePageChange}
/> />
</div> </div>