feat: add pay information to licence

This commit is contained in:
2025-08-13 22:05:19 +02:00
parent 09f6cd7463
commit 0563c7c8de
12 changed files with 114 additions and 71 deletions

View File

@@ -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 = "<Nom>¤<yyyy-mm-dd>")
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;
}

View File

@@ -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) {

View File

@@ -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)));
}

View File

@@ -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<List<LicenceModel>> getLicenceListe(int licenceRequest, int payState) {
Uni<List<LicenceModel>> 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<PageResult<SimpleMembre>> 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<List<LicenceModel>> 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<List<LicenceModel>> 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<PageResult<SimpleMembre>> search(int limit, int page, String search, int licenceRequest,
public Uni<PageResult<SimpleMembre>> 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<List<LicenceModel>> 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<List<LicenceModel>> baseUni = getLicenceListe(licenceRequest, payState);
return baseUni
.map(l -> l.stream().map(l2 -> l2.getMembre().getId()).toList())

View File

@@ -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

View File

@@ -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

View File

@@ -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();
}
}

View File

@@ -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 = "<Nom>¤<yyyy-mm-dd>", 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;
}