dev #74
@ -125,8 +125,21 @@ public class MembreService {
|
|||||||
return sort;
|
return sort;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Uni<PageResult<SimpleMembre>> searchAdmin(int limit, int page, String search, String club,
|
public Uni<PageResult<SimpleMembre>> search(int limit, int page, String search, int licenceRequest, int payState,
|
||||||
int licenceRequest, int payState, String order, String categorie) {
|
String order, String categorie, Boolean archive, String subject) {
|
||||||
|
return repository.find("userId = ?1", subject).firstResult()
|
||||||
|
.invoke(Unchecked.consumer(membreModel -> {
|
||||||
|
if (membreModel == null || membreModel.getClub() == null)
|
||||||
|
throw new DForbiddenException();
|
||||||
|
}))
|
||||||
|
.chain(membreModel ->
|
||||||
|
searchAdmin(limit, page, search, membreModel.getClub(), licenceRequest, payState, order,
|
||||||
|
categorie, archive));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Uni<PageResult<SimpleMembre>> searchAdmin(int limit, int page, String search, Object club,
|
||||||
|
int licenceRequest, int payState, String order, String categorie,
|
||||||
|
Boolean archive) {
|
||||||
if (search == null)
|
if (search == null)
|
||||||
search = "";
|
search = "";
|
||||||
search = "%" + search.replaceAll(" ", "% %") + "%";
|
search = "%" + search.replaceAll(" ", "% %") + "%";
|
||||||
@ -137,77 +150,47 @@ public class MembreService {
|
|||||||
else
|
else
|
||||||
categorieFilter = "categorie = " + Categorie.valueOf(categorie).ordinal();
|
categorieFilter = "categorie = " + Categorie.valueOf(categorie).ordinal();
|
||||||
|
|
||||||
String finalSearch = search;
|
String archiveFilter;
|
||||||
Uni<List<LicenceModel>> baseUni = getLicenceListe(licenceRequest, payState);
|
if (archive == null || archive)
|
||||||
|
archiveFilter = "True";
|
||||||
|
else
|
||||||
|
archiveFilter = String.format(
|
||||||
|
"EXISTS (SELECT 1 FROM LicenceModel l WHERE l.membre.id = m.id AND l.saison >= %s)",
|
||||||
|
Utils.getSaison() - 1);
|
||||||
|
|
||||||
|
String clubFilter = "?3 = ?3";
|
||||||
|
if (club != null) {
|
||||||
|
if (club instanceof String club_) {
|
||||||
|
if (!club_.isBlank()) {
|
||||||
|
if (club_.equals("null"))
|
||||||
|
clubFilter = "club IS NULL AND ?3 = ?3";
|
||||||
|
else
|
||||||
|
clubFilter = "LOWER(club.name) LIKE LOWER(?3)";
|
||||||
|
}
|
||||||
|
} else if (club instanceof ClubModel)
|
||||||
|
clubFilter = "club = ?3";
|
||||||
|
}
|
||||||
|
|
||||||
|
String queryStr = String.format(
|
||||||
|
"SELECT m FROM MembreModel m WHERE id %s ?2 AND %s AND (%s) AND %s AND %s",
|
||||||
|
(licenceRequest == 0 || licenceRequest == 4) ? "NOT IN" : "IN", clubFilter, FIND_NAME_REQUEST,
|
||||||
|
categorieFilter,
|
||||||
|
archiveFilter);
|
||||||
|
|
||||||
Sort sort = getSort(order);
|
Sort sort = getSort(order);
|
||||||
if (sort == null)
|
if (sort == null)
|
||||||
return Uni.createFrom().failure(new DInternalError("Erreur lors calcul du trie"));
|
return Uni.createFrom().failure(new DInternalError("Erreur lors calcul du trie"));
|
||||||
|
|
||||||
return baseUni
|
String finalSearch = search;
|
||||||
|
return getLicenceListe(licenceRequest, payState)
|
||||||
.map(l -> l.stream().map(l2 -> l2.getMembre().getId()).toList())
|
.map(l -> l.stream().map(l2 -> l2.getMembre().getId()).toList())
|
||||||
.chain(ids -> {
|
.chain(ids -> {
|
||||||
PanacheQuery<MembreModel> query;
|
PanacheQuery<MembreModel> query;
|
||||||
|
query = repository.find(queryStr, sort, finalSearch, ids, club).page(Page.ofSize(limit));
|
||||||
String idf = ((licenceRequest == 0 || licenceRequest == 4) ? "NOT IN" : "IN");
|
|
||||||
|
|
||||||
if (club == null || club.isBlank()) {
|
|
||||||
query = repository.find(
|
|
||||||
"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 + ") 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 + ") AND " + categorieFilter,
|
|
||||||
sort, finalSearch, club, ids)
|
|
||||||
.page(Page.ofSize(limit));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return getPageResult(query, limit, page);
|
return getPageResult(query, limit, page);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public Uni<PageResult<SimpleMembre>> search(int limit, int page, String search, int licenceRequest, int payState,
|
|
||||||
String order, String categorie, String subject) {
|
|
||||||
if (search == null)
|
|
||||||
search = "";
|
|
||||||
search = "%" + search.replaceAll(" ", "% %") + "%";
|
|
||||||
|
|
||||||
String finalSearch = search;
|
|
||||||
|
|
||||||
Uni<List<LicenceModel>> 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"));
|
|
||||||
|
|
||||||
return baseUni
|
|
||||||
.map(l -> l.stream().map(l2 -> l2.getMembre().getId()).toList())
|
|
||||||
.chain(ids -> {
|
|
||||||
String idf = ((licenceRequest == 0 || licenceRequest == 4) ? "NOT IN" : "IN");
|
|
||||||
|
|
||||||
return repository.find("userId = ?1", subject).firstResult()
|
|
||||||
.chain(membreModel -> {
|
|
||||||
PanacheQuery<MembreModel> query = repository.find(
|
|
||||||
"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);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private Uni<PageResult<SimpleMembre>> getPageResult(PanacheQuery<MembreModel> query, int limit, int page) {
|
private Uni<PageResult<SimpleMembre>> getPageResult(PanacheQuery<MembreModel> query, int limit, int page) {
|
||||||
return Uni.createFrom().item(new PageResult<SimpleMembre>())
|
return Uni.createFrom().item(new PageResult<SimpleMembre>())
|
||||||
.invoke(result -> result.setPage(page))
|
.invoke(result -> result.setPage(page))
|
||||||
|
|||||||
@ -59,6 +59,7 @@ public class MembreAdminEndpoints {
|
|||||||
@Parameter(description = "Text à rechercher") @QueryParam("search") String search,
|
@Parameter(description = "Text à rechercher") @QueryParam("search") String search,
|
||||||
@Parameter(description = "Club à filter") @QueryParam("club") String club,
|
@Parameter(description = "Club à filter") @QueryParam("club") String club,
|
||||||
@Parameter(description = "Catégorie à filter") @QueryParam("categorie") String categorie,
|
@Parameter(description = "Catégorie à filter") @QueryParam("categorie") String categorie,
|
||||||
|
@Parameter(description = "Inclure les archive") @QueryParam("archive") Boolean archive,
|
||||||
@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 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 = "État du payment: 0 -> non payer, 1 -> payer, 2 -> tout") @QueryParam("payment") int payment,
|
||||||
@Parameter(description = "Ordre") @QueryParam("order") String order) {
|
@Parameter(description = "Ordre") @QueryParam("order") String order) {
|
||||||
@ -66,7 +67,8 @@ public class MembreAdminEndpoints {
|
|||||||
limit = 50;
|
limit = 50;
|
||||||
if (page == null || page < 1)
|
if (page == null || page < 1)
|
||||||
page = 1;
|
page = 1;
|
||||||
return membreService.searchAdmin(limit, page - 1, search, club, licenceRequest, payment, order, categorie);
|
return membreService.searchAdmin(limit, page - 1, search, club, licenceRequest, payment, order,
|
||||||
|
categorie, archive);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
|
|||||||
@ -51,6 +51,7 @@ public class MembreClubEndpoints {
|
|||||||
@Parameter(description = "Page à consulter") @QueryParam("page") Integer page,
|
@Parameter(description = "Page à consulter") @QueryParam("page") Integer page,
|
||||||
@Parameter(description = "Text à rechercher") @QueryParam("search") String search,
|
@Parameter(description = "Text à rechercher") @QueryParam("search") String search,
|
||||||
@Parameter(description = "Catégorie à filter") @QueryParam("categorie") String categorie,
|
@Parameter(description = "Catégorie à filter") @QueryParam("categorie") String categorie,
|
||||||
|
@Parameter(description = "Inclure les archive") @QueryParam("archive") Boolean archive,
|
||||||
@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,
|
@Parameter(description = "Etat du payment: 0 -> non payer, 1 -> payer, 2 -> tout") @QueryParam("payment") int payment,
|
||||||
@Parameter(description = "Ordre") @QueryParam("order") String order) {
|
@Parameter(description = "Ordre") @QueryParam("order") String order) {
|
||||||
@ -58,7 +59,7 @@ public class MembreClubEndpoints {
|
|||||||
limit = 50;
|
limit = 50;
|
||||||
if (page == null || page < 1)
|
if (page == null || page < 1)
|
||||||
page = 1;
|
page = 1;
|
||||||
return membreService.search(limit, page - 1, search, licenceRequest, payment, order, categorie, securityCtx.getSubject());
|
return membreService.search(limit, page - 1, search, licenceRequest, payment, order, categorie, archive, securityCtx.getSubject());
|
||||||
}
|
}
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
|
|||||||
@ -119,13 +119,13 @@ export function CheckField({name, text, value, row = false}) {
|
|||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
|
|
||||||
export const Checkbox = ({label, value, onChange}) => {
|
export const Checkbox = ({label, value, onChange, name = "checkbox1"}) => {
|
||||||
const handleChange = () => {
|
const handleChange = () => {
|
||||||
onChange(!value);
|
onChange(!value);
|
||||||
};
|
};
|
||||||
|
|
||||||
return <div className="form-check">
|
return <div className="form-check">
|
||||||
<input className="form-check-input" type="checkbox" id="checkbox1" checked={value} onChange={handleChange}/>
|
<input className="form-check-input" type="checkbox" id={name} checked={value} onChange={handleChange}/>
|
||||||
<label className="form-check-label" htmlFor="checkbox1">{label}</label>
|
<label className="form-check-label" htmlFor={name}>{label}</label>
|
||||||
</div>
|
</div>
|
||||||
};
|
};
|
||||||
|
|||||||
@ -35,6 +35,7 @@ export function MemberList({source}) {
|
|||||||
payment: 2,
|
payment: 2,
|
||||||
order: "",
|
order: "",
|
||||||
categorie: "",
|
categorie: "",
|
||||||
|
archived: false,
|
||||||
...JSON.parse(decodeURI(hash.substring(1)) || "{}"),
|
...JSON.parse(decodeURI(hash.substring(1)) || "{}"),
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,10 +44,10 @@ export function MemberList({source}) {
|
|||||||
data,
|
data,
|
||||||
error,
|
error,
|
||||||
refresh
|
refresh
|
||||||
} = useFetch(`/member/find/${source}?page=${filter.page}&search=${filter.search}&club=${filter.club}&licenceRequest=${filter.licenceRequest}&payment=${filter.payment}&order=${filter.order}&categorie=${filter.categorie}`, setLoading, 1)
|
} = useFetch(`/member/find/${source}?page=${filter.page}&search=${filter.search}&club=${filter.club}&licenceRequest=${filter.licenceRequest}&payment=${filter.payment}&order=${filter.order}&categorie=${filter.categorie}&archive=${filter.archived}`, setLoading, 1)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const tmp = `/member/find/${source}?page=${filter.page}&search=${filter.search}&club=${filter.club}&licenceRequest=${filter.licenceRequest}&payment=${filter.payment}&order=${filter.order}&categorie=${filter.categorie}`;
|
const tmp = `/member/find/${source}?page=${filter.page}&search=${filter.search}&club=${filter.club}&licenceRequest=${filter.licenceRequest}&payment=${filter.payment}&order=${filter.order}&categorie=${filter.categorie}&archive=${filter.archived}`;
|
||||||
if (tmp === lastRefresh)
|
if (tmp === lastRefresh)
|
||||||
return;
|
return;
|
||||||
lastRefresh = tmp
|
lastRefresh = tmp
|
||||||
@ -137,6 +138,8 @@ export function MemberList({source}) {
|
|||||||
<div className="card-body">
|
<div className="card-body">
|
||||||
<FiltreBar showLicenceState={showLicenceState}
|
<FiltreBar showLicenceState={showLicenceState}
|
||||||
setShowLicenceState={setShowLicenceState}
|
setShowLicenceState={setShowLicenceState}
|
||||||
|
showArchived={filter.archived}
|
||||||
|
setShowArchived={e => setFilter({...filter, archived: e})}
|
||||||
clubFilter={filter.club}
|
clubFilter={filter.club}
|
||||||
setClubFilter={e => setFilter({...filter, club: e})}
|
setClubFilter={e => setFilter({...filter, club: e})}
|
||||||
source={source}
|
source={source}
|
||||||
@ -523,6 +526,8 @@ function OrderBar({onOrderChange, defaultValues = "", source}) {
|
|||||||
function FiltreBar({
|
function FiltreBar({
|
||||||
showLicenceState,
|
showLicenceState,
|
||||||
setShowLicenceState,
|
setShowLicenceState,
|
||||||
|
showArchived,
|
||||||
|
setShowArchived,
|
||||||
clubFilter,
|
clubFilter,
|
||||||
setClubFilter,
|
setClubFilter,
|
||||||
source,
|
source,
|
||||||
@ -538,6 +543,9 @@ function FiltreBar({
|
|||||||
<div className="mb-3">
|
<div className="mb-3">
|
||||||
<Checkbox value={showLicenceState} onChange={setShowLicenceState} label="Afficher l'état des licences"/>
|
<Checkbox value={showLicenceState} onChange={setShowLicenceState} label="Afficher l'état des licences"/>
|
||||||
</div>
|
</div>
|
||||||
|
<div className="mb-3">
|
||||||
|
<Checkbox value={showArchived} onChange={setShowArchived} name="checkbox2" label="Afficher les combattants inactifs"/>
|
||||||
|
</div>
|
||||||
<div className="mb-3">
|
<div className="mb-3">
|
||||||
<select className="form-select" value={catFilter} onChange={event => setCatFilter(event.target.value)}>
|
<select className="form-select" value={catFilter} onChange={event => setCatFilter(event.target.value)}>
|
||||||
<option value="">--- toute les catégories ---</option>
|
<option value="">--- toute les catégories ---</option>
|
||||||
|
|||||||
@ -147,15 +147,13 @@ function SearchMember({sendRegister}) {
|
|||||||
|
|
||||||
const handleAdd = (name) => {
|
const handleAdd = (name) => {
|
||||||
const member = data.find(m => `${m.fname} ${m.lname}`.trim() === name);
|
const member = data.find(m => `${m.fname} ${m.lname}`.trim() === name);
|
||||||
console.log("Quick add licence:", member)
|
|
||||||
|
|
||||||
if (!member) {
|
if (!member) {
|
||||||
toast.error("Combattant non trouvé");
|
toast.error("Combattant non trouvé");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sendRegister({
|
sendRegister({
|
||||||
licence: member.licence, fname: member.fname, lname: member.lname, weight: "", overCategory: 0, lockEdit: false, id: null
|
licence: member.licence.trim(), fname: member.fname.trim(), lname: member.lname.trim(), weight: "", overCategory: 0, lockEdit: false, id: null
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user