|
|
|
@@ -4,50 +4,70 @@ import com.astalange.core.entity.Dotation;
|
|
|
|
|
import com.astalange.core.entity.Saison;
|
|
|
|
|
import com.astalange.core.repository.DotationRepository;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
public class DotationService {
|
|
|
|
|
|
|
|
|
|
private final DotationRepository dotationRepository;
|
|
|
|
|
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
|
|
|
|
|
|
|
|
|
|
public DotationService(DotationRepository dotationRepository) {
|
|
|
|
|
this.dotationRepository = dotationRepository;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Transactional
|
|
|
|
|
public String genererCsvCommandeEquipement(Saison saisonActive) {
|
|
|
|
|
List<Dotation> dotations = dotationRepository.findByLicence_SaisonAndChoisiTrueAndFourniFalse(saisonActive);
|
|
|
|
|
return genererCsvCommandeEquipementGrouped(saisonActive, true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Transactional
|
|
|
|
|
public String genererCsvCommandeEquipementGrouped(Saison saisonActive, boolean markAsCommandee) {
|
|
|
|
|
List<Dotation> dotations = dotationRepository.findByLicence_SaisonAndChoisiTrueAndCommandeeFalse(saisonActive);
|
|
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
String dateCommandeFormatted = now.format(DATE_FORMATTER);
|
|
|
|
|
|
|
|
|
|
Map<String, Integer> groupCountMap = new LinkedHashMap<>();
|
|
|
|
|
|
|
|
|
|
for (Dotation d : dotations) {
|
|
|
|
|
String equipement = d.getEquipement() != null ? d.getEquipement().getNom() : "Inconnu";
|
|
|
|
|
String reference = d.getEquipement() != null && d.getEquipement().getReference() != null ? d.getEquipement().getReference() : "";
|
|
|
|
|
String taille = d.getTaille() != null && !d.getTaille().trim().isEmpty() ? d.getTaille() : "Non renseignée";
|
|
|
|
|
|
|
|
|
|
String key = equipement + "|||" + reference + "|||" + taille;
|
|
|
|
|
groupCountMap.put(key, groupCountMap.getOrDefault(key, 0) + 1);
|
|
|
|
|
|
|
|
|
|
if (markAsCommandee) {
|
|
|
|
|
d.setCommandee(true);
|
|
|
|
|
d.setDateCommande(now);
|
|
|
|
|
dotationRepository.save(d);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
|
// BOM for Excel to open UTF-8 correctly
|
|
|
|
|
sb.append('\ufeff');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Header
|
|
|
|
|
sb.append("Catégorie;Nom;Prénom;Poste;Sexe;Équipement;Référence;Taille;Flocage;Numéro\n");
|
|
|
|
|
sb.append("Équipement;Référence;Taille;Quantité;Commandé;Date de Commande\n");
|
|
|
|
|
|
|
|
|
|
for (Dotation d : dotations) {
|
|
|
|
|
String categorie = d.getLicence().getCategorie() != null ? d.getLicence().getCategorie().getNom() : "";
|
|
|
|
|
String nom = d.getLicence().getAdherent().getNom();
|
|
|
|
|
String prenom = d.getLicence().getAdherent().getPrenom();
|
|
|
|
|
String poste = d.getLicence().getAdherent().getTypeMaillot() != null ? d.getLicence().getAdherent().getTypeMaillot() : "";
|
|
|
|
|
String sexe = d.getLicence().getAdherent().getSexe() != null ? d.getLicence().getAdherent().getSexe() : "";
|
|
|
|
|
String equipement = d.getEquipement() != null ? d.getEquipement().getNom() : "";
|
|
|
|
|
String reference = d.getEquipement() != null && d.getEquipement().getReference() != null ? d.getEquipement().getReference() : "";
|
|
|
|
|
String taille = d.getTaille() != null ? d.getTaille() : "";
|
|
|
|
|
String flocage = d.getFlocage() != null ? d.getFlocage() : "";
|
|
|
|
|
String numero = d.getNumero() != null ? d.getNumero() : "";
|
|
|
|
|
for (Map.Entry<String, Integer> entry : groupCountMap.entrySet()) {
|
|
|
|
|
String[] parts = entry.getKey().split("\\|\\|\\|", -1);
|
|
|
|
|
String equipement = parts[0];
|
|
|
|
|
String reference = parts[1];
|
|
|
|
|
String taille = parts[2];
|
|
|
|
|
int quantite = entry.getValue();
|
|
|
|
|
|
|
|
|
|
sb.append(escapeCsv(categorie)).append(";")
|
|
|
|
|
.append(escapeCsv(nom)).append(";")
|
|
|
|
|
.append(escapeCsv(prenom)).append(";")
|
|
|
|
|
.append(escapeCsv(poste)).append(";")
|
|
|
|
|
.append(escapeCsv(sexe)).append(";")
|
|
|
|
|
.append(escapeCsv(equipement)).append(";")
|
|
|
|
|
sb.append(escapeCsv(equipement)).append(";")
|
|
|
|
|
.append(escapeCsv(reference)).append(";")
|
|
|
|
|
.append(escapeCsv(taille)).append(";")
|
|
|
|
|
.append(escapeCsv(flocage)).append(";")
|
|
|
|
|
.append(escapeCsv(numero)).append("\n");
|
|
|
|
|
.append(quantite).append(";")
|
|
|
|
|
.append("Oui").append(";")
|
|
|
|
|
.append(escapeCsv(dateCommandeFormatted)).append("\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return sb.toString();
|
|
|
|
@@ -57,9 +77,9 @@ public class DotationService {
|
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
|
// BOM for Excel to open UTF-8 correctly
|
|
|
|
|
sb.append('\ufeff');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Header
|
|
|
|
|
sb.append("Saison;Catégorie;Nom;Prénom;Poste;Sexe;Équipement;Référence;Taille;Flocage;Numéro;Fourni\n");
|
|
|
|
|
sb.append("Saison;Catégorie;Nom;Prénom;Poste;Sexe;Équipement;Référence;Taille;Flocage;Numéro;Fourni;Commandé;Date Commande\n");
|
|
|
|
|
|
|
|
|
|
for (Dotation d : dotations) {
|
|
|
|
|
String saison = d.getLicence().getSaison() != null ? d.getLicence().getSaison().getNom() : "";
|
|
|
|
@@ -74,6 +94,8 @@ public class DotationService {
|
|
|
|
|
String flocage = d.getFlocage() != null ? d.getFlocage() : "";
|
|
|
|
|
String numero = d.getNumero() != null ? d.getNumero() : "";
|
|
|
|
|
String fourni = Boolean.TRUE.equals(d.getFourni()) ? "Oui" : "Non";
|
|
|
|
|
String commandee = Boolean.TRUE.equals(d.getCommandee()) ? "Oui" : "Non";
|
|
|
|
|
String dateCommande = d.getDateCommande() != null ? d.getDateCommande().format(DATE_FORMATTER) : "";
|
|
|
|
|
|
|
|
|
|
sb.append(escapeCsv(saison)).append(";")
|
|
|
|
|
.append(escapeCsv(categorie)).append(";")
|
|
|
|
@@ -86,7 +108,9 @@ public class DotationService {
|
|
|
|
|
.append(escapeCsv(taille)).append(";")
|
|
|
|
|
.append(escapeCsv(flocage)).append(";")
|
|
|
|
|
.append(escapeCsv(numero)).append(";")
|
|
|
|
|
.append(escapeCsv(fourni)).append("\n");
|
|
|
|
|
.append(escapeCsv(fourni)).append(";")
|
|
|
|
|
.append(escapeCsv(commandee)).append(";")
|
|
|
|
|
.append(escapeCsv(dateCommande)).append("\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return sb.toString();
|
|
|
|
|