diff --git a/src/main/java/fr/titionfire/ffsaf/data/model/LicenceModel.java b/src/main/java/fr/titionfire/ffsaf/data/model/LicenceModel.java index 9249442..c14547e 100644 --- a/src/main/java/fr/titionfire/ffsaf/data/model/LicenceModel.java +++ b/src/main/java/fr/titionfire/ffsaf/data/model/LicenceModel.java @@ -30,9 +30,13 @@ public class LicenceModel { @Schema(description = "La saison de la licence.", example = "2025") int saison; - @Schema(description = "Nom du médecin sur certificat médical.", example = "M. Jean") // TODO Update for date + @Schema(description = "Nom et date du médecin sur certificat médical.", example = "M. Jean¤2025-02-03", format = "¤") String certificate; @Schema(description = "Licence validée", example = "true") boolean validate; + + @Schema(description = "Licence payer", example = "true") + @Column(nullable = false, columnDefinition = "boolean default false") + boolean pay = false; } diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java index cc7bf88..89c7d28 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java @@ -20,18 +20,11 @@ import io.smallrye.mutiny.Uni; import io.smallrye.mutiny.unchecked.Unchecked; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; -import jakarta.ws.rs.core.HttpHeaders; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response; import org.eclipse.microprofile.config.inject.ConfigProperty; import org.hibernate.reactive.mutiny.Mutiny; -import java.io.*; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; -import java.util.UUID; -import java.util.concurrent.TimeUnit; import java.util.stream.Stream; @WithSession @@ -270,7 +263,7 @@ public class AffiliationService { .call(l1 -> l1 != null && l1.stream().anyMatch(l -> l.getSaison() == saison) ? Uni.createFrom().nullItem() : Panache.withTransaction(() -> licenceRepository.persist( - new LicenceModel(null, m, club.getId(), saison, null, true))))); + new LicenceModel(null, m, club.getId(), saison, null, true, false))))); } public Uni accept(AffiliationRequestSaveForm form) { diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/LicenceService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/LicenceService.java index a8db060..d4e1f50 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/LicenceService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/LicenceService.java @@ -78,6 +78,7 @@ public class LicenceService { model.setSaison(form.getSaison()); model.setCertificate(form.getCertificate()); model.setValidate(form.isValidate()); + model.setPay(form.isPay()); return Panache.withTransaction(() -> repository.persist(model) .call(m -> m.isValidate() ? Uni.createFrom().item(membreModel) .call(genLicenceNumberAndAccountIfNeed()) @@ -88,6 +89,7 @@ public class LicenceService { return repository.findById(form.getId()).chain(model -> { model.setCertificate(form.getCertificate()); model.setValidate(form.isValidate()); + model.setPay(form.isPay()); return Panache.withTransaction(() -> repository.persist(model) .call(m -> m.isValidate() ? Mutiny.fetch(m.getMembre()) .call(genLicenceNumberAndAccountIfNeed()) @@ -143,6 +145,8 @@ public class LicenceService { .invoke(Unchecked.consumer(licenceModel -> { if (licenceModel.isValidate()) throw new DBadRequestException("Impossible de supprimer une licence déjà validée"); + if (licenceModel.isPay()) + throw new DBadRequestException("Impossible de supprimer une licence déjà payée"); })) .chain(__ -> Panache.withTransaction(() -> repository.deleteById(id))); } diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java index 673e6b9..cd20f5f 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java @@ -78,29 +78,38 @@ public class MembreService { final static String FIND_NAME_REQUEST = "unaccent(fname) ILIKE unaccent(?1) OR unaccent(lname) ILIKE unaccent(?1) " + "OR unaccent(fname || ' ' || lname) ILIKE unaccent(?1) OR unaccent(lname || ' ' || fname) ILIKE unaccent(?1)"; + private Uni> getLicenceListe(int licenceRequest, int payState) { + Uni> baseUni; + String queryStr = "saison = ?1"; + if (payState == 0) + queryStr += " AND pay = FALSE"; + if (payState == 1) + queryStr += " AND pay = TRUE"; + if (licenceRequest == 0 || licenceRequest == 1) + baseUni = licenceRepository.list(queryStr, Utils.getSaison()); + else if (licenceRequest == 2) + baseUni = licenceRepository.list(queryStr + " AND validate = FALSE", Utils.getSaison()); + else if (licenceRequest == 5) + baseUni = licenceRepository.list(queryStr + " AND validate = FALSE AND LENGTH(certificate) >= 3", + Utils.getSaison()); + else if (licenceRequest == 6) + baseUni = licenceRepository.list(queryStr + " AND validate = FALSE AND LENGTH(certificate) <= 2", + Utils.getSaison()); + else if (licenceRequest == 3) + baseUni = licenceRepository.list(queryStr + " AND validate = TRUE", Utils.getSaison()); + else + baseUni = Uni.createFrom().item(new ArrayList<>()); + return baseUni; + } + public Uni> searchAdmin(int limit, int page, String search, String club, - int licenceRequest) { + int licenceRequest, int payState) { if (search == null) search = ""; search = "%" + search.replaceAll(" ", "% %") + "%"; String finalSearch = search; - - Uni> baseUni; - if (licenceRequest == 0 || licenceRequest == 1) - baseUni = licenceRepository.list("saison = ?1", Utils.getSaison()); - else if (licenceRequest == 2) - baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE", Utils.getSaison()); - else if (licenceRequest == 5) - baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE AND LENGTH(certificate) >= 3", - Utils.getSaison()); - else if (licenceRequest == 6) - baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE AND LENGTH(certificate) <= 2", - Utils.getSaison()); - else if (licenceRequest == 3) - baseUni = licenceRepository.list("saison = ?1 AND validate = TRUE", Utils.getSaison()); - else - baseUni = Uni.createFrom().item(new ArrayList<>()); + Uni> baseUni = getLicenceListe(licenceRequest, payState); return baseUni .map(l -> l.stream().map(l2 -> l2.getMembre().getId()).toList()) @@ -110,7 +119,6 @@ public class MembreService { String idf = ((licenceRequest == 0 || licenceRequest == 4) ? "NOT IN" : "IN"); if (club == null || club.isBlank()) { - LOGGER.info(ids); query = repository.find( "id " + idf + " ?2 AND (" + FIND_NAME_REQUEST + ")", Sort.ascending("fname", "lname"), finalSearch, ids) @@ -131,7 +139,7 @@ public class MembreService { }); } - public Uni> search(int limit, int page, String search, int licenceRequest, + public Uni> search(int limit, int page, String search, int licenceRequest, int payState, String subject) { if (search == null) search = ""; @@ -139,21 +147,7 @@ public class MembreService { String finalSearch = search; - Uni> baseUni; - if (licenceRequest == 0 || licenceRequest == 1) - baseUni = licenceRepository.list("saison = ?1", Utils.getSaison()); - else if (licenceRequest == 2) - baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE", Utils.getSaison()); - else if (licenceRequest == 5) - baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE AND LENGTH(certificate) >= 3", - Utils.getSaison()); - else if (licenceRequest == 6) - baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE AND LENGTH(certificate) <= 2", - Utils.getSaison()); - else if (licenceRequest == 3) - baseUni = licenceRepository.list("saison = ?1 AND validate = TRUE", Utils.getSaison()); - else - baseUni = Uni.createFrom().item(new ArrayList<>()); + Uni> baseUni = getLicenceListe(licenceRequest, payState); return baseUni .map(l -> l.stream().map(l2 -> l2.getMembre().getId()).toList()) diff --git a/src/main/java/fr/titionfire/ffsaf/rest/MembreAdminEndpoints.java b/src/main/java/fr/titionfire/ffsaf/rest/MembreAdminEndpoints.java index 5fb8f82..e0b04b0 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/MembreAdminEndpoints.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/MembreAdminEndpoints.java @@ -58,12 +58,13 @@ public class MembreAdminEndpoints { @Parameter(description = "Page à consulter") @QueryParam("page") Integer page, @Parameter(description = "Text à rechercher") @QueryParam("search") String search, @Parameter(description = "Club à filter") @QueryParam("club") String club, - @Parameter(description = "Etat de la demande de licence: 0 -> sans demande, 1 -> avec demande ou validée, 2 -> toute les demande non validée, 3 -> validée, 4 -> tout, 5 -> demande complete, 6 -> demande incomplete") @QueryParam("licenceRequest") int licenceRequest) { + @Parameter(description = "Etat de la demande de licence: 0 -> sans demande, 1 -> avec demande ou validée, 2 -> toute les demande non validée, 3 -> validée, 4 -> tout, 5 -> demande complete, 6 -> demande incomplete") @QueryParam("licenceRequest") int licenceRequest, + @Parameter(description = "Etat du payment: 0 -> non payer, 1 -> payer, 2 -> tout") @QueryParam("payment") int payment) { if (limit == null) limit = 50; if (page == null || page < 1) page = 1; - return membreService.searchAdmin(limit, page - 1, search, club, licenceRequest); + return membreService.searchAdmin(limit, page - 1, search, club, licenceRequest, payment); } @GET diff --git a/src/main/java/fr/titionfire/ffsaf/rest/MembreClubEndpoints.java b/src/main/java/fr/titionfire/ffsaf/rest/MembreClubEndpoints.java index 4dcc4e1..545552c 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/MembreClubEndpoints.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/MembreClubEndpoints.java @@ -50,12 +50,13 @@ public class MembreClubEndpoints { @Parameter(description = "Nombre max de résulta (max 50)") @QueryParam("limit") Integer limit, @Parameter(description = "Page à consulter") @QueryParam("page") Integer page, @Parameter(description = "Text à rechercher") @QueryParam("search") String search, - @Parameter(description = "Etat de la demande de licence: 0 -> sans demande, 1 -> avec demande ou validée, 2 -> toute les demande non validée, 3 -> validée, 4 -> tout, 5 -> demande complete, 6 -> demande incomplete") @QueryParam("licenceRequest") int licenceRequest) { + @Parameter(description = "Etat de la demande de licence: 0 -> sans demande, 1 -> avec demande ou validée, 2 -> toute les demande non validée, 3 -> validée, 4 -> tout, 5 -> demande complete, 6 -> demande incomplete") @QueryParam("licenceRequest") int licenceRequest, + @Parameter(description = "Etat du payment: 0 -> non payer, 1 -> payer, 2 -> tout") @QueryParam("payment") int payment) { if (limit == null) limit = 50; if (page == null || page < 1) page = 1; - return membreService.search(limit, page - 1, search, licenceRequest, securityCtx.getSubject()); + return membreService.search(limit, page - 1, search, licenceRequest, payment, securityCtx.getSubject()); } @GET diff --git a/src/main/java/fr/titionfire/ffsaf/rest/data/SimpleLicence.java b/src/main/java/fr/titionfire/ffsaf/rest/data/SimpleLicence.java index fad08b3..66709be 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/data/SimpleLicence.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/data/SimpleLicence.java @@ -22,6 +22,8 @@ public class SimpleLicence { String certificate; @Schema(description = "Validation de la licence", example = "true") boolean validate; + @Schema(description = "Licence payer", example = "true") + boolean pay; public static SimpleLicence fromModel(LicenceModel model) { if (model == null) @@ -33,6 +35,7 @@ public class SimpleLicence { .saison(model.getSaison()) .certificate(model.getCertificate()) .validate(model.isValidate()) + .pay(model.isPay()) .build(); } } diff --git a/src/main/java/fr/titionfire/ffsaf/rest/from/LicenceForm.java b/src/main/java/fr/titionfire/ffsaf/rest/from/LicenceForm.java index f6d8cc3..7b2af3c 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/from/LicenceForm.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/from/LicenceForm.java @@ -21,10 +21,14 @@ public class LicenceForm { private int saison; @FormParam("certificate") - @Schema(description = "Nom du médecin sur certificat médical.", example = "M. Jean", required = true) + @Schema(description = "Nom et date du médecin sur certificat médical.", example = "M. Jean¤2025-02-03", format = "¤", required = true) private String certificate = null; @FormParam("validate") - @Schema(description = "Licence validée (seuls les admin pourrons enregistrer cette valeur)", example = "true", required = true) + @Schema(description = "Licence validée (seuls les admin pourrons modifier cette valeur)", example = "true", required = true) private boolean validate; + + @FormParam("pay") + @Schema(description = "Paiement de la licence (seuls les admin pourrons modifier cette valeur)", example = "true", required = true) + private boolean pay; } diff --git a/src/main/webapp/src/pages/MemberList.jsx b/src/main/webapp/src/pages/MemberList.jsx index 54a568f..07a7adb 100644 --- a/src/main/webapp/src/pages/MemberList.jsx +++ b/src/main/webapp/src/pages/MemberList.jsx @@ -10,6 +10,8 @@ import {apiAxios, errFormater} from "../utils/Tools.js"; import {toast} from "react-toastify"; import {SearchBar} from "../components/SearchBar.jsx"; import * as XLSX from "xlsx-js-style"; +import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; +import {faEuroSign} from "@fortawesome/free-solid-svg-icons"; export function MemberList({source}) { const {hash} = useLocation(); @@ -23,14 +25,15 @@ export function MemberList({source}) { const [clubFilter, setClubFilter] = useState(""); const [stateFilter, setStateFilter] = useState(4) const [lastSearch, setLastSearch] = useState(""); + const [paymentFilter, setPaymentFilter] = useState(2); const setLoading = useLoadingSwitcher() - const {data, error, refresh} = useFetch(`/member/find/${source}?page=${page}&licenceRequest=${stateFilter}`, setLoading, 1) + const {data, error, refresh} = useFetch(`/member/find/${source}?page=${page}&licenceRequest=${stateFilter}&payment=${paymentFilter}`, setLoading, 1) useEffect(() => { - refresh(`/member/find/${source}?page=${page}&search=${lastSearch}&club=${clubFilter}&licenceRequest=${stateFilter}`); - }, [hash, clubFilter, stateFilter]); + refresh(`/member/find/${source}?page=${page}&search=${lastSearch}&club=${clubFilter}&licenceRequest=${stateFilter}&payment=${paymentFilter}`); + }, [hash, clubFilter, stateFilter, lastSearch, paymentFilter]); useEffect(() => { if (!data) @@ -74,7 +77,6 @@ export function MemberList({source}) { if (search === lastSearch) return; setLastSearch(search); - refresh(`/member/find/${source}?page=${page}&search=${search}&club=${clubFilter}&licenceRequest=${stateFilter}`); } return <> @@ -102,7 +104,8 @@ export function MemberList({source}) {
+ stateFilter={stateFilter} setStateFilter={setStateFilter} paymentFilter={paymentFilter} + setPaymentFilter={setPaymentFilter}/>
@@ -361,7 +364,8 @@ function MakeCentralPanel({data, visibleMember, navigate, showLicenceState, page function MakeRow({member, showLicenceState, navigate, source}) { const rowContent = <>
- {member.licence_number ? String(member.licence_number).padStart(5, '0') : "-------"} + {(member.licence_number ? String(member.licence_number).padStart(5, '0') : "-------") + " "} + {(showLicenceState && member.licence != null && member.licence.pay)? : <>  }
{member.fname} {member.lname}
@@ -386,7 +390,7 @@ function MakeRow({member, showLicenceState, navigate, source}) { let allClub = [] -function FiltreBar({showLicenceState, setShowLicenceState, data, clubFilter, setClubFilter, source, stateFilter, setStateFilter}) { +function FiltreBar({showLicenceState, setShowLicenceState, data, clubFilter, setClubFilter, source, stateFilter, setStateFilter, paymentFilter, setPaymentFilter}) { useEffect(() => { if (!data) return; @@ -410,6 +414,14 @@ function FiltreBar({showLicenceState, setShowLicenceState, data, clubFilter, set
+
+ +
} diff --git a/src/main/webapp/src/pages/ValidateList.jsx b/src/main/webapp/src/pages/ValidateList.jsx index 70f54b0..2969d06 100644 --- a/src/main/webapp/src/pages/ValidateList.jsx +++ b/src/main/webapp/src/pages/ValidateList.jsx @@ -8,6 +8,8 @@ import {apiAxios, errFormater} from "../utils/Tools.js"; import {toast} from "react-toastify"; import {SearchBar} from "../components/SearchBar.jsx"; import {ConfirmDialog} from "../components/ConfirmDialog.jsx"; +import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; +import {faEuroSign} from "@fortawesome/free-solid-svg-icons"; export function ValidateList({source}) { const {hash} = useLocation(); @@ -20,16 +22,21 @@ export function ValidateList({source}) { const [clubFilter, setClubFilter] = useState(""); const [stateFilter, setStateFilter] = useState(2) const [lastSearch, setLastSearch] = useState(""); + const [paymentFilter, setPaymentFilter] = useState(2); const [selectedMembers, setSelectedMembers] = useState([]); const setLoading = useLoadingSwitcher() - const {data, error, refresh} = useFetch(`/member/find/${source}?page=${page}&licenceRequest=${stateFilter}`, setLoading, 1) + const { + data, + error, + refresh + } = useFetch(`/member/find/${source}?page=${page}&licenceRequest=${stateFilter}&payment=${paymentFilter}`, setLoading, 1) useEffect(() => { - refresh(`/member/find/${source}?page=${page}&search=${lastSearch}&club=${clubFilter}&licenceRequest=${stateFilter}`); - }, [hash, clubFilter, stateFilter]); + refresh(`/member/find/${source}?page=${page}&search=${lastSearch}&club=${clubFilter}&licenceRequest=${stateFilter}&payment=${paymentFilter}`); + }, [hash, clubFilter, stateFilter, lastSearch, paymentFilter]); useEffect(() => { if (!data) @@ -70,7 +77,6 @@ export function ValidateList({source}) { if (search === lastSearch) return; setLastSearch(search); - refresh(`/member/find/${source}?page=${page}&search=${search}&club=${clubFilter}&licenceRequest=${stateFilter}`); } const handleValidation = () => { @@ -92,7 +98,7 @@ export function ValidateList({source}) { } ).then(() => { setSelectedMembers([]); - refresh(`/member/find/${source}?page=${page}&search=${lastSearch}&club=${clubFilter}&licenceRequest=${stateFilter}`); + refresh(`/member/find/${source}?page=${page}&search=${lastSearch}&club=${clubFilter}&licenceRequest=${stateFilter}&payment=${paymentFilter}`); }); } @@ -119,7 +125,8 @@ export function ValidateList({source}) {
Filtre
+ stateFilter={stateFilter} setStateFilter={setStateFilter} paymentFilter={paymentFilter} + setPaymentFilter={setPaymentFilter}/>
} @@ -128,7 +135,8 @@ export function ValidateList({source}) { - } @@ -223,7 +231,8 @@ function MakeRow({member, source, isChecked, onCheckboxClick, onRowClick}) { { }} onClick={(e) => onCheckboxClick(e, member.id)}/> - {member.licence_number ? String(member.licence_number).padStart(5, '0') : "-------"} + {(member.licence_number ? String(member.licence_number).padStart(5, '0') : "-------") + " "} + {(member.licence != null && member.licence.pay)? : <>  }
{member.fname} {member.lname}
@@ -251,7 +260,7 @@ function MakeRow({member, source, isChecked, onCheckboxClick, onRowClick}) { let allClub = [] -function FiltreBar({data, clubFilter, setClubFilter, source, stateFilter, setStateFilter}) { +function FiltreBar({data, clubFilter, setClubFilter, source, stateFilter, setStateFilter, paymentFilter, setPaymentFilter}) { useEffect(() => { if (!data) return; @@ -268,6 +277,13 @@ function FiltreBar({data, clubFilter, setClubFilter, source, stateFilter, setSta
+
+ +
} diff --git a/src/main/webapp/src/pages/admin/member/LicenceCard.jsx b/src/main/webapp/src/pages/admin/member/LicenceCard.jsx index 83c49a8..ea7f0c0 100644 --- a/src/main/webapp/src/pages/admin/member/LicenceCard.jsx +++ b/src/main/webapp/src/pages/admin/member/LicenceCard.jsx @@ -2,7 +2,7 @@ import {useLoadingSwitcher} from "../../../hooks/useLoading.jsx"; import {useFetch} from "../../../hooks/useFetch.js"; import {useEffect, useReducer, useState} from "react"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; -import {faPen} from "@fortawesome/free-solid-svg-icons"; +import {faEuroSign, faPen} from "@fortawesome/free-solid-svg-icons"; import {AxiosError} from "../../../components/AxiosError.jsx"; import {apiAxios, errFormater, getSaison} from "../../../utils/Tools.js"; import {toast} from "react-toastify"; @@ -66,7 +66,7 @@ export function LicenceCard({userData}) { return
1 ? "warning" : "danger"))}> -
{licence?.saison}-{licence?.saison + 1}
+
{licence?.saison}-{licence?.saison + 1} {(licence.pay) && }
@@ -134,6 +134,7 @@ function ModalContent({licence, dispatch}) { const [certificateBy, setCertificateBy] = useState("") const [certificateDate, setCertificateDate] = useState("") const [validate, setValidate] = useState(false) + const [pay, setPay] = useState(false) const [isNew, setNew] = useState(true) const setSeason = (event) => { setSaison(Number(event.target.value)) @@ -147,6 +148,9 @@ function ModalContent({licence, dispatch}) { const handleValidateChange = (event) => { setValidate(event.target.value === 'true'); } + const handlePayChange = (event) => { + setPay(event.target.value === 'true'); + } useEffect(() => { if (licence.id !== -1) { @@ -160,12 +164,14 @@ function ModalContent({licence, dispatch}) { setCertificateDate(licence.certificate.split('¤')[1]) } setValidate(licence.validate) + setPay(licence.pay); } else { setNew(true) setSaison(getSaison()) setCertificateBy("") setCertificateDate("") setValidate(false) + setPay(false); } }, [licence]); @@ -197,6 +203,8 @@ function ModalContent({licence, dispatch}) {
+ diff --git a/src/main/webapp/src/pages/club/member/LicenceCard.jsx b/src/main/webapp/src/pages/club/member/LicenceCard.jsx index 5bcccb7..cf3e75c 100644 --- a/src/main/webapp/src/pages/club/member/LicenceCard.jsx +++ b/src/main/webapp/src/pages/club/member/LicenceCard.jsx @@ -2,7 +2,7 @@ import {useLoadingSwitcher} from "../../../hooks/useLoading.jsx"; import {useFetch} from "../../../hooks/useFetch.js"; import {useEffect, useReducer, useState} from "react"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; -import {faInfo, faPen} from "@fortawesome/free-solid-svg-icons"; +import {faEuroSign, faInfo, faPen} from "@fortawesome/free-solid-svg-icons"; import {AxiosError} from "../../../components/AxiosError.jsx"; import {apiAxios, errFormater, getSaison} from "../../../utils/Tools.js"; import {toast} from "react-toastify"; @@ -172,13 +172,16 @@ function ModalContent({licence, dispatch}) { Certificat médical
Fait par - , le -
+
+
Paiement de la licence:
+
Validation de la licence:
@@ -187,7 +190,7 @@ function ModalContent({licence, dispatch}) { {currentSaison && !licence.validate && } - {currentSaison && !licence.validate && licence.id !== -1 && + {currentSaison && !licence.validate && licence.id !== -1 && !licence.pay && }