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 bfeccf3..7011e37 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java @@ -126,11 +126,17 @@ public class MembreService { } public Uni> searchAdmin(int limit, int page, String search, String club, - int licenceRequest, int payState, String order) { + int licenceRequest, int payState, String order, String categorie) { if (search == null) search = ""; search = "%" + search.replaceAll(" ", "% %") + "%"; + String categorieFilter; + if (categorie == null || categorie.isBlank()) + categorieFilter = " True"; + else + categorieFilter = "categorie = " + Categorie.valueOf(categorie).ordinal(); + String finalSearch = search; Uni> baseUni = getLicenceListe(licenceRequest, payState); @@ -147,18 +153,18 @@ public class MembreService { if (club == null || club.isBlank()) { query = repository.find( - "id " + idf + " ?2 AND (" + FIND_NAME_REQUEST + ")", + "id " + idf + " ?2 AND (" + FIND_NAME_REQUEST + ") AND " + categorieFilter, sort, finalSearch, ids) .page(Page.ofSize(limit)); } else { if (club.equals("null")) { query = repository.find( - "id " + idf + " ?2 AND club IS NULL AND (" + FIND_NAME_REQUEST + ")", + "id " + idf + " ?2 AND club IS NULL AND (" + FIND_NAME_REQUEST + ") AND " + categorieFilter, sort, finalSearch, ids).page(Page.ofSize(limit)); } else { query = repository.find( - "id " + idf + " ?3 AND LOWER(club.name) LIKE LOWER(?2) AND (" + FIND_NAME_REQUEST + ")", - sort, finalSearch, club + "%", ids) + "id " + idf + " ?3 AND LOWER(club.name) LIKE LOWER(?2) AND (" + FIND_NAME_REQUEST + ") AND " + categorieFilter, + sort, finalSearch, club, ids) .page(Page.ofSize(limit)); } } @@ -167,7 +173,7 @@ public class MembreService { } public Uni> search(int limit, int page, String search, int licenceRequest, int payState, - String order, String subject) { + String order, String categorie, String subject) { if (search == null) search = ""; search = "%" + search.replaceAll(" ", "% %") + "%"; @@ -176,6 +182,12 @@ public class MembreService { Uni> baseUni = getLicenceListe(licenceRequest, payState); + String categorieFilter; + if (categorie == null || categorie.isBlank()) + categorieFilter = " True"; + else + categorieFilter = "categorie = " + Categorie.valueOf(categorie).ordinal(); + Sort sort = getSort(order); if (sort == null) return Uni.createFrom().failure(new DInternalError("Erreur lors calcul du trie")); @@ -188,7 +200,7 @@ public class MembreService { return repository.find("userId = ?1", subject).firstResult() .chain(membreModel -> { PanacheQuery query = repository.find( - "id " + idf + " ?3 AND club = ?2 AND (" + FIND_NAME_REQUEST + ")", + "id " + idf + " ?3 AND club = ?2 AND (" + FIND_NAME_REQUEST + ") AND " + categorieFilter, sort, finalSearch, membreModel.getClub(), ids) .page(Page.ofSize(limit)); return getPageResult(query, limit, page); diff --git a/src/main/java/fr/titionfire/ffsaf/rest/MembreAdminEndpoints.java b/src/main/java/fr/titionfire/ffsaf/rest/MembreAdminEndpoints.java index 426ef6e..543dcd7 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/MembreAdminEndpoints.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/MembreAdminEndpoints.java @@ -58,6 +58,7 @@ 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 = "Catégorie à filter") @QueryParam("categorie") String categorie, @Parameter(description = "État 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 = "État du payment: 0 -> non payer, 1 -> payer, 2 -> tout") @QueryParam("payment") int payment, @Parameter(description = "Ordre") @QueryParam("order") String order) { @@ -65,7 +66,7 @@ public class MembreAdminEndpoints { limit = 50; if (page == null || page < 1) page = 1; - return membreService.searchAdmin(limit, page - 1, search, club, licenceRequest, payment, order); + return membreService.searchAdmin(limit, page - 1, search, club, licenceRequest, payment, order, categorie); } @GET diff --git a/src/main/java/fr/titionfire/ffsaf/rest/MembreClubEndpoints.java b/src/main/java/fr/titionfire/ffsaf/rest/MembreClubEndpoints.java index d227cda..6ddca01 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/MembreClubEndpoints.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/MembreClubEndpoints.java @@ -50,6 +50,7 @@ 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 = "Catégorie à filter") @QueryParam("categorie") String categorie, @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, @Parameter(description = "Ordre") @QueryParam("order") String order) { @@ -57,7 +58,7 @@ public class MembreClubEndpoints { limit = 50; if (page == null || page < 1) page = 1; - return membreService.search(limit, page - 1, search, licenceRequest, payment, order, securityCtx.getSubject()); + return membreService.search(limit, page - 1, search, licenceRequest, payment, order, categorie, securityCtx.getSubject()); } @GET diff --git a/src/main/webapp/src/pages/MemberList.jsx b/src/main/webapp/src/pages/MemberList.jsx index 51b3093..bf55622 100644 --- a/src/main/webapp/src/pages/MemberList.jsx +++ b/src/main/webapp/src/pages/MemberList.jsx @@ -28,18 +28,19 @@ export function MemberList({source}) { const [lastSearch, setLastSearch] = useState(""); const [paymentFilter, setPaymentFilter] = useState(2); const [order, setOrder] = useState(""); + const [catFilter, setCatFilter] = useState(""); const setLoading = useLoadingSwitcher() const { data, error, refresh - } = useFetch(`/member/find/${source}?page=${page}&licenceRequest=${stateFilter}&payment=${paymentFilter}&order=${order}`, setLoading, 1) + } = useFetch(`/member/find/${source}?page=${page}&licenceRequest=${stateFilter}&payment=${paymentFilter}&order=${order}&categorie=${catFilter}`, setLoading, 1) useEffect(() => { - refresh(`/member/find/${source}?page=${page}&search=${lastSearch}&club=${clubFilter}&licenceRequest=${stateFilter}&payment=${paymentFilter}&order=${order}`); - }, [hash, clubFilter, stateFilter, lastSearch, paymentFilter, order]); + refresh(`/member/find/${source}?page=${page}&search=${lastSearch}&club=${clubFilter}&licenceRequest=${stateFilter}&payment=${paymentFilter}&order=${order}&categorie=${catFilter}`); + }, [hash, clubFilter, stateFilter, lastSearch, paymentFilter, order, catFilter]); useEffect(() => { if (!data) @@ -123,10 +124,10 @@ export function MemberList({source}) {
Filtre
- + setPaymentFilter={setPaymentFilter} catFilter={catFilter} setCatFilter={setCatFilter}/>
@@ -501,31 +502,32 @@ function OrderBar({onOrderChange, source}) { ); } -let allClub = [] - function FiltreBar({ showLicenceState, setShowLicenceState, - data, clubFilter, setClubFilter, source, stateFilter, setStateFilter, paymentFilter, - setPaymentFilter + setPaymentFilter, + catFilter, + setCatFilter, }) { - useEffect(() => { - if (!data) - return; - allClub.push(...data.result.map((e) => e.club?.name)) - allClub = allClub.filter((value, index, self) => self.indexOf(value) === index).filter(value => value != null).sort() - }, [data]); return
+
+ +
{source !== "club" && }