feat(client): Creation page modification membre exhaustive et formulaire reutilisable

NOUVELLES PAGES:
- modifier.xhtml : Page dediee pour modifier un membre (exhaustive)
- membre-form.xhtml : Fragment reutilisable pour formulaire membre (DRY/WOU)

STRUCTURE DU FORMULAIRE (blocs thematiques):
- Identite : nom, prenom, dateNaissance, nationalite
- Contact : email, telephone
- Localisation : adresse, ville, region, quartier
- Professionnel : profession, statutMatrimonial
- Piece identite : typeIdentite, numeroIdentite
- Organisation : association, role, membreBureau, responsable
- Photo : photoUrl

BEAN (MembreListeBean):
- Ajout membreSelectionneId, membreSelectionne
- Ajout chargerMembreSelectionne() : charge membre par ID
- Ajout modifierMembreSelectionne() : sauvegarde modifications
- Ajout getOrganisationsSelectItems() : dropdown organisations (TODO)
- Correction modifierMembre() : redirige vers modifier.xhtml

BOUTON MODIFIER dans liste.xhtml:
- Navigation directe vers modifier.xhtml au lieu de popup
- Coherence avec inscription.xhtml

Respecte DRY/WOU avec formulaire reutilisable membre-form.xhtml
This commit is contained in:
dahoud
2025-11-29 22:45:39 +00:00
parent f8866feffe
commit a1f05441b0
4 changed files with 303 additions and 7 deletions

View File

@@ -191,7 +191,65 @@ public class MembreListeBean implements Serializable {
}
public String modifierMembre(MembreDTO membre) {
return "/pages/secure/membre/modification?id=" + membre.getId() + "&faces-redirect=true";
return "/pages/secure/membre/modifier?id=" + membre.getId() + "&faces-redirect=true";
}
// Propriétés pour la page de modification
private UUID membreSelectionneId;
private MembreDTO membreSelectionne;
public UUID getMembreSelectionneId() {
return membreSelectionneId;
}
public void setMembreSelectionneId(UUID membreSelectionneId) {
this.membreSelectionneId = membreSelectionneId;
}
public MembreDTO getMembreSelectionne() {
return membreSelectionne;
}
public void setMembreSelectionne(MembreDTO membreSelectionne) {
this.membreSelectionne = membreSelectionne;
}
public void chargerMembreSelectionne() {
if (membreSelectionneId != null) {
try {
membreSelectionne = membreService.obtenirParId(membreSelectionneId);
LOGGER.info("Membre chargé pour modification: " + membreSelectionne.getNomComplet());
} catch (Exception e) {
LOGGER.severe("Erreur lors du chargement du membre: " + e.getMessage());
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erreur",
"Impossible de charger le membre: " + e.getMessage()));
}
}
}
public String modifierMembreSelectionne() {
try {
membreService.modifier(membreSelectionne.getId(), membreSelectionne);
LOGGER.info("Membre modifié: " + membreSelectionne.getNomComplet());
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_INFO, "Succès",
"Le membre a été modifié avec succès"));
return "/pages/secure/membre/liste?faces-redirect=true";
} catch (Exception e) {
LOGGER.severe("Erreur lors de la modification: " + e.getMessage());
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erreur",
"Impossible de modifier le membre: " + e.getMessage()));
return null;
}
}
// Méthode pour obtenir la liste des organisations pour le dropdown
public List<jakarta.faces.model.SelectItem> getOrganisationsSelectItems() {
// TODO: Implémenter la récupération des organisations
// Pour l'instant, retourner une liste vide
return new java.util.ArrayList<>();
}
public String gererCotisations(MembreDTO membre) {