feat: handle goalkeeper vs field player equipment differentiation
This commit is contained in:
@@ -23,6 +23,9 @@ public class Equipement {
|
||||
@Column(name = "gestion_sexe", nullable = false)
|
||||
private boolean gestionSexe = false;
|
||||
|
||||
@Column(name = "type_public", nullable = false, length = 20)
|
||||
private String typePublic = "TOUS"; // JOUEUR, GARDIEN, TOUS
|
||||
|
||||
@Column(name = "tailles_disponibles", length = 500)
|
||||
private String taillesDisponibles;
|
||||
|
||||
@@ -51,6 +54,9 @@ public class Equipement {
|
||||
public boolean isGestionSexe() { return gestionSexe; }
|
||||
public void setGestionSexe(boolean gestionSexe) { this.gestionSexe = gestionSexe; }
|
||||
|
||||
public String getTypePublic() { return typePublic; }
|
||||
public void setTypePublic(String typePublic) { this.typePublic = typePublic; }
|
||||
|
||||
public String getTaillesDisponibles() { return taillesDisponibles; }
|
||||
public void setTaillesDisponibles(String taillesDisponibles) { this.taillesDisponibles = taillesDisponibles; }
|
||||
|
||||
|
||||
@@ -86,12 +86,21 @@ public class CategorieService {
|
||||
List<Dotation> currentDotations = licence.getDotations();
|
||||
List<Dotation> toRemove = new ArrayList<>();
|
||||
|
||||
// Remove dotations for equipements no longer in the category
|
||||
// Remove dotations for equipements no longer in the category or not matching public
|
||||
for (Dotation d : currentDotations) {
|
||||
boolean found = false;
|
||||
for (CategorieEquipement ce : categorieEquipements) {
|
||||
if (ce.getEquipement().getId().equals(d.getEquipement().getId())) {
|
||||
found = true;
|
||||
String typePublic = ce.getEquipement().getTypePublic();
|
||||
String typeMaillot = licence.getAdherent() != null ? licence.getAdherent().getTypeMaillot() : "JOUEUR";
|
||||
|
||||
boolean matchPublic = "TOUS".equals(typePublic) ||
|
||||
("GARDIEN".equals(typePublic) && "GARDIEN".equals(typeMaillot)) ||
|
||||
("JOUEUR".equals(typePublic) && "JOUEUR".equals(typeMaillot));
|
||||
|
||||
if (matchPublic) {
|
||||
found = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -103,6 +112,17 @@ public class CategorieService {
|
||||
|
||||
// Add missing dotations
|
||||
for (CategorieEquipement ce : categorieEquipements) {
|
||||
String typePublic = ce.getEquipement().getTypePublic();
|
||||
String typeMaillot = licence.getAdherent() != null ? licence.getAdherent().getTypeMaillot() : "JOUEUR";
|
||||
|
||||
boolean matchPublic = "TOUS".equals(typePublic) ||
|
||||
("GARDIEN".equals(typePublic) && "GARDIEN".equals(typeMaillot)) ||
|
||||
("JOUEUR".equals(typePublic) && "JOUEUR".equals(typeMaillot));
|
||||
|
||||
if (!matchPublic) {
|
||||
continue;
|
||||
}
|
||||
|
||||
boolean found = false;
|
||||
for (Dotation d : currentDotations) {
|
||||
if (ce.getEquipement().getId().equals(d.getEquipement().getId())) {
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE equipement ADD COLUMN type_public VARCHAR(20) DEFAULT 'TOUS' NOT NULL;
|
||||
@@ -177,21 +177,29 @@ public class AdherentController {
|
||||
Adherent existing = adherentRepository.findById(adherent.getId()).orElse(null);
|
||||
if (existing != null) {
|
||||
boolean dateChanged = !existing.getDateNaissance().equals(adherent.getDateNaissance());
|
||||
boolean typeMaillotChanged = !existing.getTypeMaillot().equals(adherent.getTypeMaillot());
|
||||
|
||||
if (dateChanged) {
|
||||
if (dateChanged || typeMaillotChanged) {
|
||||
int newBirthYear = adherent.getDateNaissance().getYear();
|
||||
List<Licence> licences = licenceRepository.findByAdherentId(adherent.getId());
|
||||
for (Licence licence : licences) {
|
||||
Saison saison = licence.getSaison();
|
||||
Categorie newCat = categorieRepository.findBySaison(saison).stream()
|
||||
.filter(c -> newBirthYear >= c.getAnneeMin() && newBirthYear <= c.getAnneeMax())
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
if (newCat != null) {
|
||||
licence.setCategorie(newCat);
|
||||
licence = licenceRepository.save(licence);
|
||||
categorieService.syncDotationsForLicence(licence);
|
||||
if (dateChanged) {
|
||||
Saison saison = licence.getSaison();
|
||||
Categorie newCat = categorieRepository.findBySaison(saison).stream()
|
||||
.filter(c -> newBirthYear >= c.getAnneeMin() && newBirthYear <= c.getAnneeMax())
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
if (newCat != null) {
|
||||
licence.setCategorie(newCat);
|
||||
licence = licenceRepository.save(licence);
|
||||
}
|
||||
}
|
||||
|
||||
// We need to update the entity's state before syncing dotations so it reads the new typeMaillot.
|
||||
// We haven't updated 'existing' yet, so let's temporarily set it on the licence's adherent or wait.
|
||||
// Actually, 'adherent' has the new typeMaillot.
|
||||
licence.getAdherent().setTypeMaillot(adherent.getTypeMaillot());
|
||||
categorieService.syncDotationsForLicence(licence);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -45,6 +45,15 @@
|
||||
<label class="ml-2 block text-sm text-gray-700">Gérer les coupes Homme/Femme</label>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-gray-700 mb-1">Type de public (Poste)</label>
|
||||
<select th:field="*{typePublic}" class="w-full border border-gray-300 rounded-lg px-4 py-2 text-sm focus:ring-2 focus:ring-blue-500 outline-none">
|
||||
<option value="TOUS">Tous (Joueurs et Gardiens)</option>
|
||||
<option value="JOUEUR">Joueurs de champ uniquement</option>
|
||||
<option value="GARDIEN">Gardiens de but uniquement</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-gray-700 mb-1">Tailles disponibles</label>
|
||||
<input type="text" th:field="*{taillesDisponibles}" placeholder="ex: XS, S, M, L, XL ou 5/6 ANS, 7/8 ANS..." class="w-full border border-gray-300 rounded-lg px-4 py-2 text-sm focus:ring-2 focus:ring-blue-500 outline-none">
|
||||
|
||||
Reference in New Issue
Block a user