Subversion Repositories eFlore/Applications.coel

Compare Revisions

Ignore whitespace Rev 874 → Rev 875

/trunk/src/org/tela_botanica/client/vues/CollectionFormPersonne.java
7,14 → 7,20
import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.images.Images;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.Collection;
import org.tela_botanica.client.modeles.CollectionAPersonne;
import org.tela_botanica.client.modeles.CollectionAPersonneListe;
import org.tela_botanica.client.modeles.Information;
import org.tela_botanica.client.modeles.InterneValeur;
import org.tela_botanica.client.modeles.Personne;
import org.tela_botanica.client.modeles.PersonneListe;
import org.tela_botanica.client.modeles.Publication;
import org.tela_botanica.client.modeles.StructureAPersonne;
import org.tela_botanica.client.modeles.UniteBase;
import org.tela_botanica.client.modeles.UniteRangement;
import org.tela_botanica.client.modeles.Valeur;
import org.tela_botanica.client.modeles.ValeurListe;
import org.tela_botanica.client.modeles.aDonnee;
 
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.ButtonEvent;
25,6 → 31,7
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.store.Record;
import com.extjs.gxt.ui.client.store.Store;
import com.extjs.gxt.ui.client.store.StoreEvent;
import com.extjs.gxt.ui.client.widget.ContentPanel;
33,12 → 40,15
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.button.ButtonBar;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.grid.CellEditor;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnData;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.EditorGrid;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
import com.extjs.gxt.ui.client.widget.grid.HeaderGroupConfig;
import com.extjs.gxt.ui.client.widget.grid.RowNumberer;
50,19 → 60,25
 
public class CollectionFormPersonne extends FormulaireOnglet implements Rafraichissable {
private Collection collection = null;
private Collection collectionCollectee = null;
private ContentPanel panneauPrincipal = null;
private ToolBar barreOutils = null;
private Grid<Personne> grille;
private Grid<CollectionAPersonne> grille;
private ComboBox<Valeur> typeRelationCombo = null;
private PersonneListe personnes = null;
private PersonneListe personnesAjoutes = null;
private PersonneListe personnesSupprimes = null;
private CollectionAPersonneListe personnes = null;
private CollectionAPersonneListe personnesAjoutees = null;
private CollectionAPersonneListe personnesModifiees = null;
private CollectionAPersonneListe personnesSupprimees = null;
private ComboBox<Personne> personnesSaisisComboBox = null;
private Button personnesBoutonSupprimer = null;
private Button personnesBoutonModifier = null;
private Button ajouterPersonneSaisiBouton = null;
private ValeurListe listeIon = null;
private FenetreForm fenetreFormulaire = null;
private static final String ETAT_AJOUTE = "A";
private static final String ETAT_SUPPRIME = "S";
77,6 → 93,7
panneauPrincipal.setTopComponent(barreOutils);
grille = creerGrille();
panneauPrincipal.add(grille);
mediateur.obtenirListeValeurEtRafraichir(this, "ion");
mediateur.obtenirListeValeurEtRafraichir(this, "relationPersonneCollection");
add(panneauPrincipal);
85,12 → 102,18
private void initialiser() {
// Remise à zéro des modification dans la liste des auteurs
personnesAjoutes = new PersonneListe();
personnesSupprimes = new PersonneListe();
personnesAjoutees = new CollectionAPersonneListe();
personnesModifiees = new CollectionAPersonneListe();
personnesSupprimees = new CollectionAPersonneListe();
// Actualisation de l'état des boutons de la barre d'outils
actualiserEtatBoutonsBarreOutils();
}
private void initialiserCollection() {
collection = ((CollectionForm) formulaire).collection;
collectionCollectee = ((CollectionForm) formulaire).collectionCollectee;
}
private ContentPanel creerPanneauContenantGrille() {
ContentPanel panneau = new ContentPanel();
111,7 → 134,7
barreOutils.add(new Text(" ou "));
personnesSaisisComboBox = creerComboBoxAuteursSaisis();
personnesSaisisComboBox = creerComboBoxPersonnesSaisies();
barreOutils.add(personnesSaisisComboBox);
barreOutils.add(new SeparatorToolItem());
136,10 → 159,11
Button bouton = new Button(i18nC.ajouter());
bouton.setIcon(Images.ICONES.vcardAjouter());
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
 
@Override
public void componentSelected(ButtonEvent ce) {
FenetreForm fenetre = creerFenetreModaleAvecFormulairePersonne(Formulaire.MODE_AJOUTER);
fenetre.show();
fenetreFormulaire = creerFenetreModaleAvecFormulairePersonne(Formulaire.MODE_AJOUTER);
fenetreFormulaire.show();
}
});
return bouton;
151,12 → 175,12
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
Personne auteurSaisiSelectionne = grille.getSelectionModel().getSelectedItem();
if (auteurSaisiSelectionne == null) {
CollectionAPersonne personneSaisiSelectionne = grille.getSelectionModel().getSelectedItem();
if (personneSaisiSelectionne == null) {
Info.display(i18nC.informationTitreGenerique(), i18nC.selectionnerPersonne());
} else {
FenetreForm fenetre = creerFenetreModaleAvecFormulairePersonne(Formulaire.MODE_MODIFIER);
fenetre.show();
fenetreFormulaire = creerFenetreModaleAvecFormulairePersonne(Formulaire.MODE_MODIFIER);
fenetreFormulaire.show();
}
}
});
164,33 → 188,30
}
private FenetreForm creerFenetreModaleAvecFormulairePersonne(String mode) {
String personneId = null;
if (mode.equals(Formulaire.MODE_MODIFIER)) {
CollectionAPersonne personneSaisieSelectionnee = grille.getSelectionModel().getSelectedItem();
personneId = personneSaisieSelectionnee.getId();
}
final FenetreForm fenetre = new FenetreForm("");
final PersonneForm formulaire = creerFormulairePersonne(fenetre);
final PersonneForm formulaire = creerFormulairePersonne(fenetre, personneId);
fenetre.add(formulaire);
return fenetre;
}
private PersonneForm creerFormulairePersonne(final FenetreForm fenetre) {
PersonneForm formulaire = new PersonneForm(mediateur, PersonneForm.MODE_AJOUTER, null);
/*fenetre.setHeading(formulaire.getHeading());
formulaire.setHeaderVisible(false);
formulaire.setTopComponent(null);*/
private PersonneForm creerFormulairePersonne(final FenetreForm fenetre, String personneId) {
PersonneForm formulaire = new PersonneForm(mediateur, personneId, this);
FormPanel panneauFormulaire = formulaire.getFormulaire();
fenetre.setHeading(panneauFormulaire.getHeading());
panneauFormulaire.setHeaderVisible(false);
panneauFormulaire.setTopComponent(null);
 
// TODO : gérer la barre d'outil avec des évènements spécifique au contexte de fenêtre modale
SelectionListener<ButtonEvent> ecouteur = creerEcouteurValidationFormulairePersonne(fenetre, formulaire);
final ButtonBar barreValidation = new FormulaireBarreValidation(ecouteur);
//formulaire.setBottomComponent(barreValidation);
panneauFormulaire.setBottomComponent(barreValidation);
if (mode.equals(Formulaire.MODE_MODIFIER)) {
// TODO : simplifier la gestion de l'ajout des données d'une Personne au form pour la modification... (pas besoin de passer par une liste).
Information info = new Information("liste_personne");
PersonneListe personnes = new PersonneListe();
Personne auteurSaisiSelectionne = grille.getSelectionModel().getSelectedItem();
personnes.put(auteurSaisiSelectionne.getId(), auteurSaisiSelectionne);
info.setDonnee(0, personnes);
formulaire.rafraichir(info);
}
return formulaire;
}
200,20 → 221,17
public void componentSelected(ButtonEvent ce) {
String code = ((Button) ce.getComponent()).getData("code");
if (code.equals(FormulaireBarreValidation.CODE_BOUTON_VALIDER)) {
Boolean ok = formulaire.enregistrer();
if (ok == true) {
// Fermer fenêtre et ajouter/modifier l'élément dans la liste
if (formulaire.soumettreFormulaire()) {
fenetre.hide();
}
fenetre.hide();
} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_APPLIQUER)) {
Boolean ok = formulaire.enregistrer();
if (ok == true) {
// Fermer fenêtre et ajouter/modifier l'élément dans la liste
}
formulaire.soumettreFormulaire();
} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_ANNULER)) {
fenetre.hide();
} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_REINITIALISER)) {
formulaire.reinitialiserFormulaire();
fenetreFormulaire.hide();
fenetreFormulaire = creerFenetreModaleAvecFormulairePersonne(formulaire.mode);
fenetreFormulaire.show();
}
}
};
227,11 → 245,11
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
Personne auteurSaisiSelectionne = grille.getSelectionModel().getSelectedItem();
if (auteurSaisiSelectionne == null) {
CollectionAPersonne personneSaisiSelectionnee = grille.getSelectionModel().getSelectedItem();
if (personneSaisiSelectionnee == null) {
Info.display(i18nC.informationTitreGenerique(), i18nC.selectionnerPersonne());
} else {
supprimerDansGrille(auteurSaisiSelectionne);
supprimerDansGrille(personneSaisiSelectionnee);
}
}
});
250,7 → 268,7
return bouton;
}
private ComboBox<Personne> creerComboBoxAuteursSaisis() {
private ComboBox<Personne> creerComboBoxPersonnesSaisies() {
ListStore<Personne> personnesSaisiesStore = new ListStore<Personne>();
personnesSaisiesStore.add(new ArrayList<Personne>());
274,8 → 292,8
@Override
public void handleEvent(BaseEvent be) {
if (personnesSaisisComboBox.getValue() instanceof Personne) {
Personne auteurSaisiSelectionne = personnesSaisisComboBox.getValue();
ajouterDansGrille(auteurSaisiSelectionne);
Personne personneSaisiSelectionnee = personnesSaisisComboBox.getValue();
ajouterDansGrille(personneSaisiSelectionnee);
personnesSaisisComboBox.setValue(null);
}
}
285,33 → 303,38
private void ajouterDansGrille(Personne personne) {
if (personne != null) {
CollectionAPersonne relationCollectionPersonne = new CollectionAPersonne();
relationCollectionPersonne.setPersonne(personne);
// Ajout de la personne ajoutée à la liste
if (personne.getId() != null && !personne.getId().equals("")) {
personnesAjoutes.put(personne.getId(), personne);
if (relationCollectionPersonne.getId() != null && !relationCollectionPersonne.getId().equals("")) {
personnesAjoutees.put(relationCollectionPersonne.getId(), relationCollectionPersonne);
}
// Définition de l'état
personne.set("etat", ETAT_AJOUTE);
relationCollectionPersonne.set("etat", ETAT_AJOUTE);
// Ajout à la grille
grille.getStore().insert(personne, 0);
grille.getStore().insert(relationCollectionPersonne, 0);
grille.getSelectionModel().select(0, false);
}
}
private void supprimerDansGrille(Personne personne) {
if (personne != null) {
private void supprimerDansGrille(CollectionAPersonne relationCollectionPersonne) {
if (relationCollectionPersonne != null) {
// Ajout de la personne supprimée à la liste
if ((personne.get("etat") == null || !personne.get("etat").equals(ETAT_AJOUTE)) && personne.getId() != null && !personne.getId().equals("")) {
personnesSupprimes.put(personne.getId(), personne);
if ((relationCollectionPersonne.get("etat") == null || !relationCollectionPersonne.get("etat").equals(ETAT_AJOUTE))
&& relationCollectionPersonne.getId() != null
&& !relationCollectionPersonne.getId().equals("")) {
personnesSupprimees.put(relationCollectionPersonne.getId(), relationCollectionPersonne);
}
// Suppression de l'enregistrement de la grille
grille.getStore().remove(personne);
grille.getStore().remove(relationCollectionPersonne);
}
}
 
private Grid<Personne> creerGrille() {
private Grid<CollectionAPersonne> creerGrille() {
ListStore<Personne> storeGrille = new ListStore<Personne>();
storeGrille.addListener(Store.Add, new Listener<StoreEvent<Personne>>() {
public void handleEvent(StoreEvent<Personne> ce) {
363,7 → 386,7
}
};
ColumnConfig typeRelationColonne = new ColumnConfig("type_relation", i18nC.typeRelationPersonneCollection(), 75);
ColumnConfig typeRelationColonne = new ColumnConfig("id_role", i18nC.typeRelationPersonneCollection(), 75);
typeRelationColonne.setEditor(editeurRelation);
colonnes.add(typeRelationColonne);
370,15 → 393,13
colonnes.add(new ColumnConfig("fmt_nom_complet", i18nC.personneNomComplet(), 150));
colonnes.add(new ColumnConfig("nom", i18nC.personneNom(), 75));
colonnes.add(new ColumnConfig("prenom", i18nC.personnePrenom(), 75));
colonnes.add(new ColumnConfig("prefixe", i18nC.personnePrefixe(), 50));
//colonnes.add(new ColumnConfig("truk_nom_autre", i18nC.personneNomAutre(), 200));
colonnes.add(new ColumnConfig("naissance_date", i18nC.date(), 75));
colonnes.add(new ColumnConfig("naissance_lieu", i18nC.lieu(), 100));
colonnes.add(new ColumnConfig("ce_deces", i18nC.personneDecedeeInterogation(), 50));
colonnes.add(creerColonneDeces());
colonnes.add(new ColumnConfig("deces_date", i18nC.date(), 75));
colonnes.add(new ColumnConfig("deces_lieu", i18nC.lieu(), 100));
GridSelectionModel<Personne> modeleDeSelection = new GridSelectionModel<Personne>();
GridSelectionModel<CollectionAPersonne> modeleDeSelection = new GridSelectionModel<CollectionAPersonne>();
ColumnModel modeleDeColonnes = new ColumnModel(colonnes);
modeleDeColonnes.addHeaderGroup(0, 1, new HeaderGroupConfig(i18nC.personneIdentite(), 1, 4));
385,7 → 406,7
modeleDeColonnes.addHeaderGroup(0, 5, new HeaderGroupConfig(i18nC.personneNaissance(), 1, 2));
modeleDeColonnes.addHeaderGroup(0, 7, new HeaderGroupConfig(i18nC.personneDeces(), 1, 3));
EditorGrid<Personne> grillePersonne = new EditorGrid<Personne>(storeGrille, modeleDeColonnes);
EditorGrid<CollectionAPersonne> grillePersonne = new EditorGrid<CollectionAPersonne>(storeGrille, modeleDeColonnes);
grillePersonne.setHeight("100%");
grillePersonne.setBorders(true);
grillePersonne.setSelectionModel(modeleDeSelection);
398,6 → 419,23
return grillePersonne;
}
public ColumnConfig creerColonneDeces() {
GridCellRenderer<CollectionAPersonne> decesRendu = new GridCellRenderer<CollectionAPersonne>() {
@Override
public String render(CollectionAPersonne modele, String property, ColumnData config, int rowIndex, int colIndex, ListStore<CollectionAPersonne> store, Grid<CollectionAPersonne> grid) {
String deces = modele.getPersonne().getDeces();
if (listeIon != null && modele.getPersonne().getDeces().matches("[0-9]+")) {
deces = listeIon.get(modele.getPersonne().getDeces()).getNom();
}
modele.set("_deces_", deces);
return deces;
}
};
ColumnConfig decesColonne = new ColumnConfig("_deces_", Mediateur.i18nC.personneDecedeeInterogation(), 50);
decesColonne.setRenderer(decesRendu);
return decesColonne;
}
public void actualiserEtatBoutonsBarreOutils() {
// Activation des boutons si la grille contient un élément
if (grille.getStore().getCount() > 0) {
424,7 → 462,9
}
private void rafraichirValeurListe(ValeurListe listeValeurs) {
if (listeValeurs.getId().equals(config.getListeId("relationPersonneCollection"))) {
if (listeValeurs.getId().equals(config.getListeId("ion"))) {
listeIon = listeValeurs;
} else if (listeValeurs.getId().equals(config.getListeId("relationPersonneCollection"))) {
Formulaire.rafraichirComboBox(listeValeurs, typeRelationCombo);
} else {
GWT.log("Gestion de la liste "+listeValeurs.getId()+" non implémenté!", null);
452,14 → 492,100
//auteurs = (CollectionAPersonneListe) info.getDonnee(0);
peupler();
}
} else if (info.getType().equals("ajout_collection")) {
if (info.getDonnee(0) != null && info.getDonnee(0) instanceof String) {
String collectionId = (String) info.getDonnee(0);
// Suite à la récupération de l'id de la collection nouvellement ajoutée nous ajoutons les personnes liées
// En mode AJOUT, il ne peut que y avoir des personnes liées ajoutées
mediateur.ajouterCollectionAPersonne(this, collectionId, personnesAjoutees);
} else {
Info.display("Ajout d'une Institution", info.toString());
}
} else if (info.getType().equals("modif_collection_a_personne")) {
Info.display("Modification des personnes liées à la collection", info.toString());
} else if (info.getType().equals("suppression_collection_a_personne")) {
Info.display("Suppression des personnes liées à la collection", info.toString());
} else if (info.getType().equals("ajout_collection_a_personne")) {
Info.display("Ajout des personnes liées à la collection", info.toString());
}
}
 
private void peupler() {
public void peupler() {
initialiserCollection();
layout();
Info.display(i18nC.chargementPersonne(), i18nC.ok());
}
 
public ArrayList<String> verifier() {
ArrayList<String> messages = new ArrayList<String>();
String personneNumero = "";
int nbrePersonne = grille.getStore().getCount();
if (nbrePersonne > 0) {
for (int i = 0; i < nbrePersonne; i++) {
CollectionAPersonne personne = grille.getStore().getAt(i);
if (personne.getIdRole().equals("")) {
personneNumero += (i != 0 ? ", " : "")+(i+1);
}
}
if (!personneNumero.equals("")) {
messages.add("Veuillez indiquez le type de relation existant entre la collection et les personnes numéros : "+personneNumero);
}
}
return messages;
}
public void collecter() {
initialiserCollection();
if (etreAccede()) {
int nbrePersonne = grille.getStore().getCount();
for (int i = 0; i < nbrePersonne; i++) {
CollectionAPersonne personne = grille.getStore().getAt(i);
// Seules les lignes ajoutées ou modifiées sont prises en compte.
Record enregistrement = grille.getStore().getRecord(personne);
if (grille.getStore().getModifiedRecords().contains(enregistrement) == true
|| (personne.get("etat") != null && personne.get("etat").equals(aDonnee.ETAT_AJOUTE) )) {
// Gestion de l'id de la structure
if (mode.equals(Formulaire.MODE_MODIFIER)) {
personne.setIdCollection(collection.getId());
}
// Ajout de la personne dans la liste correspondant à son état (ajouté ou modifié)
if (personne.get("etat") != null && personne.get("etat").equals(aDonnee.ETAT_AJOUTE)) {// Une personne ajoutée
personnesAjoutees.put(""+i, personne);
} else {// Une personne modifiée
personnesModifiees.put(personne.getId(), personne);
}
} else {
GWT.log("Personne non modifiées : "+personne.getPersonne().getPrenom()+" "+personne.getPersonne().getNom(), null);
}
}
}
}
public void soumettre() {
if (mode.equals(Formulaire.MODE_MODIFIER)) {
if (personnesModifiees.size() == 0 && personnesAjoutees.size() == 0 && personnesSupprimees.size() == 0) {
Info.display("Modification des personnes liées", "Rien n'a été enregistré car le formulaire n'a pas été modifié.");
} else {
if (personnesModifiees.size() != 0) {
mediateur.modifierCollectionAPersonne(this, personnesModifiees);
}
// Ajout des relations CollectionAPersonne
if (personnesAjoutees.size() != 0) {
mediateur.ajouterCollectionAPersonne(this, collection.getId(), personnesAjoutees);
}
// Suppression des relations StructureAPersonne
if (personnesSupprimees.size() != 0) {
mediateur.supprimerCollectionAPersonne(this, personnesSupprimees);
}
}
}
}
private void obtenirPersonnesSaisis(String nom) {
mediateur.selectionnerPersonneParNomComplet(this, null, nom+"%");
}