Files
unionflow-client-quarkus-pr…/src/main/java/dev/lions/unionflow/client/view/MembreProfilBean.java

747 lines
30 KiB
Java

package dev.lions.unionflow.client.view;
import dev.lions.unionflow.client.dto.MembreDTO;
import dev.lions.unionflow.client.service.MembreService;
import jakarta.enterprise.context.SessionScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import jakarta.annotation.PostConstruct;
import org.eclipse.microprofile.rest.client.inject.RestClient;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.logging.Logger;
import org.primefaces.event.FileUploadEvent;
@Named("membreProfilBean")
@SessionScoped
public class MembreProfilBean implements Serializable {
private static final long serialVersionUID = 1L;
private static final Logger LOGGER = Logger.getLogger(MembreProfilBean.class.getName());
// Constantes de navigation outcomes (WOU/DRY - réutilisables)
private static final String OUTCOME_MEMBRE_LISTE = "membreListPage";
private static final String OUTCOME_MEMBRE_COTISATIONS = "membreCotisationsPage";
@Inject
@RestClient
private MembreService membreService;
private Membre membre;
private Membre membreEdit;
private Statistiques statistiques;
private CotisationsData cotisations;
private EvenementsData evenements;
private AidesData aides;
private DemandesData demandes;
private HistoriqueData historique;
private ContactData contact;
private UUID membreId;
@PostConstruct
public void init() {
if (membreId == null) {
LOGGER.warning("Aucun membreId fourni, impossible de charger le profil");
return;
}
chargerMembre();
chargerStatistiques();
chargerCotisations();
chargerEvenements();
chargerAides();
chargerDemandes();
chargerHistorique();
initContact();
}
private void chargerMembre() {
try {
MembreDTO dto = membreService.obtenirParId(membreId);
membre = convertToMembre(dto);
// Copie pour l'édition
membreEdit = new Membre();
copierMembre(membre, membreEdit);
} catch (Exception e) {
LOGGER.severe("Erreur lors du chargement du membre: " + e.getMessage());
membre = new Membre();
membre.setId(membreId);
}
}
private Membre convertToMembre(MembreDTO dto) {
Membre membre = new Membre();
membre.setId(dto.getId());
membre.setNumeroMembre(dto.getNumeroMembre());
membre.setPrenom(dto.getPrenom());
membre.setNom(dto.getNom());
membre.setEmail(dto.getEmail());
membre.setTelephone(dto.getTelephone());
membre.setDateNaissance(dto.getDateNaissance());
// Note: Genre, situation familiale, ville, pays, type membre ne sont pas disponibles dans MembreDTO client
// Ces champs seront ajoutés ultérieurement si nécessaire
membre.setProfession(dto.getProfession());
membre.setAdresse(dto.getAdresse());
membre.setStatut(dto.getStatut() != null ? dto.getStatut() : "ACTIF");
membre.setDateAdhesion(dto.getDateInscription() != null ? dto.getDateInscription().toLocalDate() : null);
return membre;
}
private void chargerStatistiques() {
statistiques = new Statistiques();
statistiques.setEvenementsParticipes(24);
statistiques.setCotisationsPayees(12);
statistiques.setAidesRecues(2);
statistiques.setScoreEngagement(95);
statistiques.setTauxParticipation(85);
statistiques.setEvenementsAnnee(8);
statistiques.setEvenementsTotal(24);
statistiques.setEvenementsOrganises(3);
statistiques.setAbsences(2);
}
private void chargerCotisations() {
cotisations = new CotisationsData();
cotisations.setStatutActuel("À jour");
cotisations.setStatutSeverity("success");
cotisations.setDernierPaiement("15/07/2024");
cotisations.setProchaineEcheance("15/08/2024");
cotisations.setProchaineEcheanceClass("text-green-500");
cotisations.setTotalAnnee("120 000 FCFA");
// Historique des paiements
List<PaiementCotisation> historique = new ArrayList<>();
for (int i = 1; i <= 6; i++) {
PaiementCotisation paiement = new PaiementCotisation();
paiement.setDate(LocalDate.now().minusMonths(i));
paiement.setMontant(10000.0);
paiement.setModePaiement(i % 2 == 0 ? "Wave Money" : "Espèces");
paiement.setModeIcon(i % 2 == 0 ? "pi-mobile" : "pi-money-bill");
paiement.setStatut("Validé");
paiement.setStatutSeverity("success");
historique.add(paiement);
}
cotisations.setHistorique(historique);
}
private void chargerEvenements() {
evenements = new EvenementsData();
List<EvenementParticipation> recents = new ArrayList<>();
String[] titres = {"Réunion mensuelle", "Action humanitaire", "Formation leadership", "Collecte de fonds"};
String[] lieux = {"Hôtel Radisson", "École Primaire", "Centre de formation", "Stade Léopold Sédar Senghor"};
String[] types = {"REUNION", "ACTION", "FORMATION", "COLLECTE"};
for (int i = 0; i < 4; i++) {
EvenementParticipation evt = new EvenementParticipation();
evt.setTitre(titres[i]);
evt.setDate(LocalDate.now().minusDays(i * 7).toString());
evt.setLieu(lieux[i]);
evt.setParticipation(i < 3 ? "Présent" : "Absent");
evt.setParticipationSeverity(i < 3 ? "success" : "danger");
evt.setRole(i == 0 ? "Organisateur" : "Participant");
evt.setTypeIcon("pi-calendar");
evt.setTypeColorClass("bg-blue-500");
recents.add(evt);
}
evenements.setRecents(recents);
}
private void chargerAides() {
aides = new AidesData();
List<Aide> recues = new ArrayList<>();
Aide aide1 = new Aide();
aide1.setType("Aide médicale");
aide1.setMontant(50000.0);
aide1.setDate(LocalDate.of(2024, 5, 10));
aide1.setStatut("Validée");
aide1.setStatutSeverity("success");
aide1.setTypeIcon("pi-heart");
aide1.setTypeColor("text-red-500");
recues.add(aide1);
Aide aide2 = new Aide();
aide2.setType("Aide scolaire");
aide2.setMontant(25000.0);
aide2.setDate(LocalDate.of(2024, 1, 15));
aide2.setStatut("Validée");
aide2.setStatutSeverity("success");
aide2.setTypeIcon("pi-book");
aide2.setTypeColor("text-blue-500");
recues.add(aide2);
aides.setRecues(recues);
}
private void chargerDemandes() {
demandes = new DemandesData();
List<Demande> enCours = new ArrayList<>();
Demande demande1 = new Demande();
demande1.setType("Certificat");
demande1.setObjet("Certificat d'adhésion");
demande1.setDateDepot(LocalDate.now().minusDays(3));
demande1.setStatut("En cours");
demande1.setStatutSeverity("warning");
enCours.add(demande1);
demandes.setEnCours(enCours);
}
private void chargerHistorique() {
historique = new HistoriqueData();
List<Activite> activites = new ArrayList<>();
String[] descriptions = {
"Profil mis à jour",
"Participation à la réunion mensuelle",
"Paiement de cotisation validé",
"Nouvelle adhésion enregistrée"
};
for (int i = 0; i < 4; i++) {
Activite activite = new Activite();
activite.setDescription(descriptions[i]);
activite.setDate(LocalDateTime.now().minusDays(i * 2).toString());
activite.setAuteur(i == 0 ? "Jean DIALLO" : "Admin");
activite.setIcone(i % 2 == 0 ? "pi-user" : "pi-calendar");
activite.setCouleur(i % 2 == 0 ? "text-blue-500" : "text-green-500");
if (i == 2) {
activite.setDetails("Montant: 10 000 FCFA via Wave Money");
}
activites.add(activite);
}
historique.setActivites(activites);
}
private void initContact() {
contact = new ContactData();
contact.setCanaux(new ArrayList<>());
}
// Actions
public void changerPhoto(FileUploadEvent event) {
// Logique de changement de photo
LOGGER.info("Photo changée: " + event.getFile().getFileName());
}
public String gererCotisations() {
// Utilisation de navigation outcome au lieu de chemin direct (WOU/DRY)
return OUTCOME_MEMBRE_COTISATIONS + "?id=" + membre.getId() + "&faces-redirect=true";
}
public void sauvegarderModifications() {
copierMembre(membreEdit, membre);
LOGGER.info("Profil mis à jour pour: " + membre.getNomComplet());
}
public void envoyerMessage() {
LOGGER.info("Message envoyé: " + contact.getSujet() + " via " + contact.getCanaux());
contact = new ContactData();
contact.setCanaux(new ArrayList<>());
}
public void envoyerRappelCotisation() {
LOGGER.info("Rappel de cotisation envoyé à: " + membre.getEmail());
}
public void suspendre() {
membre.setStatut("SUSPENDU");
LOGGER.info("Membre suspendu: " + membre.getNomComplet());
}
public void reactiver() {
membre.setStatut("ACTIF");
LOGGER.info("Membre réactivé: " + membre.getNomComplet());
}
public void exporterDonnees() {
LOGGER.info("Export des données pour: " + membre.getNomComplet());
}
public String supprimer() {
LOGGER.info("Membre supprimé: " + membre.getNomComplet());
return OUTCOME_MEMBRE_LISTE + "?faces-redirect=true";
}
private void copierMembre(Membre source, Membre destination) {
destination.setId(source.getId());
destination.setPrenom(source.getPrenom());
destination.setNom(source.getNom());
destination.setEmail(source.getEmail());
destination.setTelephone(source.getTelephone());
destination.setDateNaissance(source.getDateNaissance());
destination.setProfession(source.getProfession());
destination.setAdresse(source.getAdresse());
}
// Getters et Setters
public Membre getMembre() { return membre; }
public void setMembre(Membre membre) { this.membre = membre; }
public Membre getMembreEdit() { return membreEdit; }
public void setMembreEdit(Membre membreEdit) { this.membreEdit = membreEdit; }
public Statistiques getStatistiques() { return statistiques; }
public void setStatistiques(Statistiques statistiques) { this.statistiques = statistiques; }
public CotisationsData getCotisations() { return cotisations; }
public void setCotisations(CotisationsData cotisations) { this.cotisations = cotisations; }
public EvenementsData getEvenements() { return evenements; }
public void setEvenements(EvenementsData evenements) { this.evenements = evenements; }
public AidesData getAides() { return aides; }
public void setAides(AidesData aides) { this.aides = aides; }
public DemandesData getDemandes() { return demandes; }
public void setDemandes(DemandesData demandes) { this.demandes = demandes; }
public HistoriqueData getHistorique() { return historique; }
public void setHistorique(HistoriqueData historique) { this.historique = historique; }
public ContactData getContact() { return contact; }
public void setContact(ContactData contact) { this.contact = contact; }
public UUID getMembreId() { return membreId; }
public void setMembreId(UUID membreId) { this.membreId = membreId; }
// Classes internes
public static class Membre {
private UUID id;
private String numeroMembre;
private String prenom;
private String nom;
private String email;
private String telephone;
private LocalDate dateNaissance;
private String genre;
private String situationFamiliale;
private String profession;
private String adresse;
private String ville;
private String pays;
private String typeMembre;
private String statut;
private String entite;
private LocalDate dateAdhesion;
private String cotisationStatut;
private int tauxParticipation;
private String photoUrl;
private List<MembreFamille> famille = new ArrayList<>();
// Getters et setters
public UUID getId() { return id; }
public void setId(UUID id) { this.id = id; }
public String getNumeroMembre() { return numeroMembre; }
public void setNumeroMembre(String numeroMembre) { this.numeroMembre = numeroMembre; }
public String getPrenom() { return prenom; }
public void setPrenom(String prenom) { this.prenom = prenom; }
public String getNom() { return nom; }
public void setNom(String nom) { this.nom = nom; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
public String getTelephone() { return telephone; }
public void setTelephone(String telephone) { this.telephone = telephone; }
public LocalDate getDateNaissance() { return dateNaissance; }
public void setDateNaissance(LocalDate dateNaissance) { this.dateNaissance = dateNaissance; }
public String getGenre() { return genre; }
public void setGenre(String genre) { this.genre = genre; }
public String getSituationFamiliale() { return situationFamiliale; }
public void setSituationFamiliale(String situationFamiliale) { this.situationFamiliale = situationFamiliale; }
public String getProfession() { return profession; }
public void setProfession(String profession) { this.profession = profession; }
public String getAdresse() { return adresse; }
public void setAdresse(String adresse) { this.adresse = adresse; }
public String getVille() { return ville; }
public void setVille(String ville) { this.ville = ville; }
public String getPays() { return pays; }
public void setPays(String pays) { this.pays = pays; }
public String getTypeMembre() { return typeMembre; }
public void setTypeMembre(String typeMembre) { this.typeMembre = typeMembre; }
public String getStatut() { return statut; }
public void setStatut(String statut) { this.statut = statut; }
public String getEntite() { return entite; }
public void setEntite(String entite) { this.entite = entite; }
public LocalDate getDateAdhesion() { return dateAdhesion; }
public void setDateAdhesion(LocalDate dateAdhesion) { this.dateAdhesion = dateAdhesion; }
public String getCotisationStatut() { return cotisationStatut; }
public void setCotisationStatut(String cotisationStatut) { this.cotisationStatut = cotisationStatut; }
public int getTauxParticipation() { return tauxParticipation; }
public void setTauxParticipation(int tauxParticipation) { this.tauxParticipation = tauxParticipation; }
public String getPhotoUrl() { return photoUrl; }
public void setPhotoUrl(String photoUrl) { this.photoUrl = photoUrl; }
public List<MembreFamille> getFamille() { return famille; }
public void setFamille(List<MembreFamille> famille) { this.famille = famille; }
// Propriétés dérivées
public String getNomComplet() {
return prenom + " " + nom;
}
public String getInitiales() {
return (prenom != null ? prenom.substring(0, 1) : "") +
(nom != null ? nom.substring(0, 1) : "");
}
public String getStatutSeverity() {
return switch (statut) {
case "ACTIF" -> "success";
case "INACTIF" -> "warning";
case "SUSPENDU" -> "danger";
case "RADIE" -> "danger";
default -> "secondary";
};
}
public String getStatutIcon() {
return switch (statut) {
case "ACTIF" -> "pi-check";
case "INACTIF" -> "pi-pause";
case "SUSPENDU" -> "pi-ban";
case "RADIE" -> "pi-times";
default -> "pi-circle";
};
}
public String getTypeSeverity() {
return switch (typeMembre) {
case "ACTIF" -> "info";
case "ASSOCIE" -> "success";
case "BIENFAITEUR" -> "warning";
case "HONORAIRE" -> "secondary";
default -> "info";
};
}
public String getTypeIcon() {
return switch (typeMembre) {
case "ACTIF" -> "pi-user";
case "ASSOCIE" -> "pi-users";
case "BIENFAITEUR" -> "pi-star";
case "HONORAIRE" -> "pi-crown";
default -> "pi-user";
};
}
public String getAnciennete() {
if (dateAdhesion == null) return "N/A";
long mois = java.time.temporal.ChronoUnit.MONTHS.between(dateAdhesion, LocalDate.now());
if (mois < 12) return mois + " mois";
return (mois / 12) + " an" + (mois / 12 > 1 ? "s" : "");
}
public String getCotisationColor() {
return cotisationStatut != null && cotisationStatut.equals("À jour") ? "text-green-500" : "text-red-500";
}
}
public static class MembreFamille {
private String nomComplet;
private String relation;
private LocalDate dateNaissance;
private boolean beneficiaire;
// Getters et setters
public String getNomComplet() { return nomComplet; }
public void setNomComplet(String nomComplet) { this.nomComplet = nomComplet; }
public String getRelation() { return relation; }
public void setRelation(String relation) { this.relation = relation; }
public LocalDate getDateNaissance() { return dateNaissance; }
public void setDateNaissance(LocalDate dateNaissance) { this.dateNaissance = dateNaissance; }
public boolean isBeneficiaire() { return beneficiaire; }
public void setBeneficiaire(boolean beneficiaire) { this.beneficiaire = beneficiaire; }
}
public static class Statistiques {
private int evenementsParticipes;
private int cotisationsPayees;
private int aidesRecues;
private int scoreEngagement;
private int tauxParticipation;
private int evenementsAnnee;
private int evenementsTotal;
private int evenementsOrganises;
private int absences;
// Getters et setters
public int getEvenementsParticipes() { return evenementsParticipes; }
public void setEvenementsParticipes(int evenementsParticipes) { this.evenementsParticipes = evenementsParticipes; }
public int getCotisationsPayees() { return cotisationsPayees; }
public void setCotisationsPayees(int cotisationsPayees) { this.cotisationsPayees = cotisationsPayees; }
public int getAidesRecues() { return aidesRecues; }
public void setAidesRecues(int aidesRecues) { this.aidesRecues = aidesRecues; }
public int getScoreEngagement() { return scoreEngagement; }
public void setScoreEngagement(int scoreEngagement) { this.scoreEngagement = scoreEngagement; }
public int getTauxParticipation() { return tauxParticipation; }
public void setTauxParticipation(int tauxParticipation) { this.tauxParticipation = tauxParticipation; }
public int getEvenementsAnnee() { return evenementsAnnee; }
public void setEvenementsAnnee(int evenementsAnnee) { this.evenementsAnnee = evenementsAnnee; }
public int getEvenementsTotal() { return evenementsTotal; }
public void setEvenementsTotal(int evenementsTotal) { this.evenementsTotal = evenementsTotal; }
public int getEvenementsOrganises() { return evenementsOrganises; }
public void setEvenementsOrganises(int evenementsOrganises) { this.evenementsOrganises = evenementsOrganises; }
public int getAbsences() { return absences; }
public void setAbsences(int absences) { this.absences = absences; }
}
public static class CotisationsData {
private String statutActuel;
private String statutSeverity;
private String dernierPaiement;
private String prochaineEcheance;
private String prochaineEcheanceClass;
private String totalAnnee;
private List<PaiementCotisation> historique = new ArrayList<>();
// Getters et setters
public String getStatutActuel() { return statutActuel; }
public void setStatutActuel(String statutActuel) { this.statutActuel = statutActuel; }
public String getStatutSeverity() { return statutSeverity; }
public void setStatutSeverity(String statutSeverity) { this.statutSeverity = statutSeverity; }
public String getDernierPaiement() { return dernierPaiement; }
public void setDernierPaiement(String dernierPaiement) { this.dernierPaiement = dernierPaiement; }
public String getProchaineEcheance() { return prochaineEcheance; }
public void setProchaineEcheance(String prochaineEcheance) { this.prochaineEcheance = prochaineEcheance; }
public String getProchaineEcheanceClass() { return prochaineEcheanceClass; }
public void setProchaineEcheanceClass(String prochaineEcheanceClass) { this.prochaineEcheanceClass = prochaineEcheanceClass; }
public String getTotalAnnee() { return totalAnnee; }
public void setTotalAnnee(String totalAnnee) { this.totalAnnee = totalAnnee; }
public List<PaiementCotisation> getHistorique() { return historique; }
public void setHistorique(List<PaiementCotisation> historique) { this.historique = historique; }
}
public static class PaiementCotisation {
private LocalDate date;
private Double montant;
private String modePaiement;
private String modeIcon;
private String statut;
private String statutSeverity;
// Getters et setters
public LocalDate getDate() { return date; }
public void setDate(LocalDate date) { this.date = date; }
public Double getMontant() { return montant; }
public void setMontant(Double montant) { this.montant = montant; }
public String getModePaiement() { return modePaiement; }
public void setModePaiement(String modePaiement) { this.modePaiement = modePaiement; }
public String getModeIcon() { return modeIcon; }
public void setModeIcon(String modeIcon) { this.modeIcon = modeIcon; }
public String getStatut() { return statut; }
public void setStatut(String statut) { this.statut = statut; }
public String getStatutSeverity() { return statutSeverity; }
public void setStatutSeverity(String statutSeverity) { this.statutSeverity = statutSeverity; }
}
public static class EvenementsData {
private List<EvenementParticipation> recents = new ArrayList<>();
public List<EvenementParticipation> getRecents() { return recents; }
public void setRecents(List<EvenementParticipation> recents) { this.recents = recents; }
}
public static class EvenementParticipation {
private String titre;
private String date;
private String lieu;
private String participation;
private String participationSeverity;
private String role;
private String typeIcon;
private String typeColorClass;
// Getters et setters
public String getTitre() { return titre; }
public void setTitre(String titre) { this.titre = titre; }
public String getDate() { return date; }
public void setDate(String date) { this.date = date; }
public String getLieu() { return lieu; }
public void setLieu(String lieu) { this.lieu = lieu; }
public String getParticipation() { return participation; }
public void setParticipation(String participation) { this.participation = participation; }
public String getParticipationSeverity() { return participationSeverity; }
public void setParticipationSeverity(String participationSeverity) { this.participationSeverity = participationSeverity; }
public String getRole() { return role; }
public void setRole(String role) { this.role = role; }
public String getTypeIcon() { return typeIcon; }
public void setTypeIcon(String typeIcon) { this.typeIcon = typeIcon; }
public String getTypeColorClass() { return typeColorClass; }
public void setTypeColorClass(String typeColorClass) { this.typeColorClass = typeColorClass; }
}
public static class AidesData {
private List<Aide> recues = new ArrayList<>();
public List<Aide> getRecues() { return recues; }
public void setRecues(List<Aide> recues) { this.recues = recues; }
}
public static class Aide {
private String type;
private Double montant;
private LocalDate date;
private String statut;
private String statutSeverity;
private String typeIcon;
private String typeColor;
// Getters et setters
public String getType() { return type; }
public void setType(String type) { this.type = type; }
public Double getMontant() { return montant; }
public void setMontant(Double montant) { this.montant = montant; }
public LocalDate getDate() { return date; }
public void setDate(LocalDate date) { this.date = date; }
public String getStatut() { return statut; }
public void setStatut(String statut) { this.statut = statut; }
public String getStatutSeverity() { return statutSeverity; }
public void setStatutSeverity(String statutSeverity) { this.statutSeverity = statutSeverity; }
public String getTypeIcon() { return typeIcon; }
public void setTypeIcon(String typeIcon) { this.typeIcon = typeIcon; }
public String getTypeColor() { return typeColor; }
public void setTypeColor(String typeColor) { this.typeColor = typeColor; }
}
public static class DemandesData {
private List<Demande> enCours = new ArrayList<>();
public List<Demande> getEnCours() { return enCours; }
public void setEnCours(List<Demande> enCours) { this.enCours = enCours; }
}
public static class Demande {
private String type;
private String objet;
private LocalDate dateDepot;
private String statut;
private String statutSeverity;
// Getters et setters
public String getType() { return type; }
public void setType(String type) { this.type = type; }
public String getObjet() { return objet; }
public void setObjet(String objet) { this.objet = objet; }
public LocalDate getDateDepot() { return dateDepot; }
public void setDateDepot(LocalDate dateDepot) { this.dateDepot = dateDepot; }
public String getStatut() { return statut; }
public void setStatut(String statut) { this.statut = statut; }
public String getStatutSeverity() { return statutSeverity; }
public void setStatutSeverity(String statutSeverity) { this.statutSeverity = statutSeverity; }
}
public static class HistoriqueData {
private List<Activite> activites = new ArrayList<>();
public List<Activite> getActivites() { return activites; }
public void setActivites(List<Activite> activites) { this.activites = activites; }
}
public static class Activite {
private String description;
private String date;
private String auteur;
private String icone;
private String couleur;
private String details;
// Getters et setters
public String getDescription() { return description; }
public void setDescription(String description) { this.description = description; }
public String getDate() { return date; }
public void setDate(String date) { this.date = date; }
public String getAuteur() { return auteur; }
public void setAuteur(String auteur) { this.auteur = auteur; }
public String getIcone() { return icone; }
public void setIcone(String icone) { this.icone = icone; }
public String getCouleur() { return couleur; }
public void setCouleur(String couleur) { this.couleur = couleur; }
public String getDetails() { return details; }
public void setDetails(String details) { this.details = details; }
}
public static class ContactData {
private String sujet;
private String message;
private List<String> canaux = new ArrayList<>();
// Getters et setters
public String getSujet() { return sujet; }
public void setSujet(String sujet) { this.sujet = sujet; }
public String getMessage() { return message; }
public void setMessage(String message) { this.message = message; }
public List<String> getCanaux() { return canaux; }
public void setCanaux(List<String> canaux) { this.canaux = canaux; }
}
}