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+"%"); |
} |