fix: exclusion des equipements sans taille et tailles non renseignees de l'export commande equipementier

This commit is contained in:
2026-08-27 10:40:00 +02:00
parent 2bc702d9bc
commit 504b2df791
2 changed files with 65 additions and 3 deletions
@@ -34,9 +34,19 @@ public class DotationService {
Map<String, Integer> groupCountMap = new LinkedHashMap<>(); Map<String, Integer> groupCountMap = new LinkedHashMap<>();
for (Dotation d : dotations) { for (Dotation d : dotations) {
String equipement = d.getEquipement() != null ? d.getEquipement().getNom() : "Inconnu"; // Exclure les équipements sans choix de tailles (ex: sacs à dos, ballons, etc.)
String reference = d.getEquipement() != null && d.getEquipement().getReference() != null ? d.getEquipement().getReference() : ""; if (d.getEquipement() == null || d.getEquipement().getTaillesDisponibles() == null || d.getEquipement().getTaillesDisponibles().trim().isEmpty()) {
String taille = d.getTaille() != null && !d.getTaille().trim().isEmpty() ? d.getTaille() : "Non renseignée"; continue;
}
// Exclure les dotations pour lesquelles la taille n'est pas renseignée/choisie
if (d.getTaille() == null || d.getTaille().trim().isEmpty()) {
continue;
}
String equipement = d.getEquipement().getNom();
String reference = d.getEquipement().getReference() != null ? d.getEquipement().getReference() : "";
String taille = d.getTaille().trim();
String key = equipement + "|||" + reference + "|||" + taille; String key = equipement + "|||" + reference + "|||" + taille;
groupCountMap.put(key, groupCountMap.getOrDefault(key, 0) + 1); groupCountMap.put(key, groupCountMap.getOrDefault(key, 0) + 1);
@@ -121,4 +121,56 @@ public class DotationServiceTest {
verify(dotationRepository, times(1)).save(d2); verify(dotationRepository, times(1)).save(d2);
} }
@Test
@DisplayName("Générer CSV Commande - Équipement regroupé par taille (Exclut les articles sans grille de tailles)")
public void testGenererCsvCommandeEquipement_ExclutSansTaille() {
Equipement eqMaillot = new Equipement();
eqMaillot.setId(1L);
eqMaillot.setNom("Maillot de match");
eqMaillot.setReference("REF-MAILLOT");
eqMaillot.setTaillesDisponibles("S,M,L,XL");
Equipement eqSac = new Equipement();
eqSac.setId(2L);
eqSac.setNom("Sac à dos");
eqSac.setReference("REF-SAC");
eqSac.setTaillesDisponibles(null); // No size options!
Dotation dMaillot = new Dotation();
dMaillot.setId(1L);
dMaillot.setLicence(licence);
dMaillot.setEquipement(eqMaillot);
dMaillot.setTaille("M");
dMaillot.setChoisi(true);
dMaillot.setCommandee(false);
Dotation dSac = new Dotation();
dSac.setId(2L);
dSac.setLicence(licence);
dSac.setEquipement(eqSac);
dSac.setChoisi(true);
dSac.setCommandee(false);
Dotation dMaillotSansTaille = new Dotation();
dMaillotSansTaille.setId(3L);
dMaillotSansTaille.setLicence(licence);
dMaillotSansTaille.setEquipement(eqMaillot);
dMaillotSansTaille.setTaille(null); // Taille non choisie par l'adhérent
dMaillotSansTaille.setChoisi(true);
dMaillotSansTaille.setCommandee(false);
when(dotationRepository.findByLicence_SaisonAndChoisiTrueAndCommandeeFalse(saison))
.thenReturn(List.of(dMaillot, dSac, dMaillotSansTaille));
String csv = dotationService.genererCsvCommandeEquipement(saison);
assertNotNull(csv);
assertTrue(csv.contains("Maillot de match"));
assertTrue(csv.contains("M"));
assertFalse(csv.contains("Sac à dos"), "Le sac à dos sans grille de tailles doit être exclu de l'export fournisseur par taille");
assertTrue(dMaillot.getCommandee());
assertFalse(dSac.getCommandee());
assertFalse(dMaillotSansTaille.getCommandee(), "Le maillot dont la taille n'est pas choisie doit rester non commandé");
}
} }