Subversion Repositories eFlore/Applications.coel

Rev

Rev 1680 | Rev 1762 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1680 Rev 1687
1
package org.tela_botanica.client.vues.personne;
1
package org.tela_botanica.client.vues.personne;
2
 
2
 
3
import java.util.ArrayList;
3
import java.util.ArrayList;
4
import java.util.Iterator;
4
import java.util.Iterator;
5
import java.util.List;
5
import java.util.List;
6
 
6
 
7
 
7
 
8
import org.tela_botanica.client.Mediateur;
8
import org.tela_botanica.client.Mediateur;
9
import org.tela_botanica.client.RegistreId;
9
import org.tela_botanica.client.RegistreId;
10
import org.tela_botanica.client.composants.ChampFiltreRecherche;
10
import org.tela_botanica.client.composants.ChampFiltreRecherche;
11
import org.tela_botanica.client.composants.InfoLogger;
11
import org.tela_botanica.client.composants.InfoLogger;
12
import org.tela_botanica.client.images.Images;
12
import org.tela_botanica.client.images.Images;
13
import org.tela_botanica.client.interfaces.Rafraichissable;
13
import org.tela_botanica.client.interfaces.Rafraichissable;
14
import org.tela_botanica.client.modeles.Information;
14
import org.tela_botanica.client.modeles.Information;
15
import org.tela_botanica.client.modeles.Utilisateur;
15
import org.tela_botanica.client.modeles.Utilisateur;
16
import org.tela_botanica.client.modeles.personne.Personne;
16
import org.tela_botanica.client.modeles.personne.Personne;
17
import org.tela_botanica.client.modeles.personne.PersonneListe;
17
import org.tela_botanica.client.modeles.personne.PersonneListe;
18
import org.tela_botanica.client.modeles.projet.Projet;
18
import org.tela_botanica.client.modeles.projet.Projet;
19
import org.tela_botanica.client.util.Debug;
19
import org.tela_botanica.client.util.Debug;
20
import org.tela_botanica.client.vues.BarrePaginationVue;
20
import org.tela_botanica.client.vues.BarrePaginationVue;
21
 
21
 
22
import com.extjs.gxt.ui.client.Registry;
22
import com.extjs.gxt.ui.client.Registry;
23
import com.extjs.gxt.ui.client.Style.SortDir;
23
import com.extjs.gxt.ui.client.Style.SortDir;
24
import com.extjs.gxt.ui.client.data.ModelComparer;
24
import com.extjs.gxt.ui.client.data.ModelComparer;
25
import com.extjs.gxt.ui.client.event.BaseEvent;
25
import com.extjs.gxt.ui.client.event.BaseEvent;
26
import com.extjs.gxt.ui.client.event.ButtonEvent;
26
import com.extjs.gxt.ui.client.event.ButtonEvent;
27
import com.extjs.gxt.ui.client.event.Events;
27
import com.extjs.gxt.ui.client.event.Events;
28
import com.extjs.gxt.ui.client.event.Listener;
28
import com.extjs.gxt.ui.client.event.Listener;
29
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
29
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
30
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
30
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
31
import com.extjs.gxt.ui.client.event.SelectionListener;
31
import com.extjs.gxt.ui.client.event.SelectionListener;
32
import com.extjs.gxt.ui.client.store.ListStore;
32
import com.extjs.gxt.ui.client.store.ListStore;
33
import com.extjs.gxt.ui.client.store.Store;
33
import com.extjs.gxt.ui.client.store.Store;
34
import com.extjs.gxt.ui.client.store.StoreSorter;
34
import com.extjs.gxt.ui.client.store.StoreSorter;
35
import com.extjs.gxt.ui.client.widget.ContentPanel;
35
import com.extjs.gxt.ui.client.widget.ContentPanel;
36
import com.extjs.gxt.ui.client.widget.button.Button;
36
import com.extjs.gxt.ui.client.widget.button.Button;
37
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
37
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
38
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
38
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
39
import com.extjs.gxt.ui.client.widget.grid.Grid;
39
import com.extjs.gxt.ui.client.widget.grid.Grid;
40
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
40
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
41
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
41
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
42
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
42
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
43
import com.google.gwt.core.client.GWT;
43
import com.google.gwt.core.client.GWT;
44
import com.google.gwt.i18n.client.Constants;
44
import com.google.gwt.i18n.client.Constants;
45
 
45
 
46
public class PersonneListeVue extends ContentPanel implements Rafraichissable {
46
public class PersonneListeVue extends ContentPanel implements Rafraichissable {
47
	
47
	
48
	private Mediateur mediateur = null ;
48
	private Mediateur mediateur = null ;
49
	
49
	
50
	private Grid<Personne> grille = null;
50
	private Grid<Personne> grille = null;
51
	private ListStore<Personne> store = null;
51
	private ListStore<Personne> store = null;
52
	
52
	
53
	private ChampFiltreRecherche champFiltreRecherche = null;
53
	private ChampFiltreRecherche champFiltreRecherche = null;
54
	private BarrePaginationVue pagination = null;
54
	private BarrePaginationVue pagination = null;
55
	
55
	
56
	private ColumnModel modeleColonnes = null;
56
	private ColumnModel modeleColonnes = null;
57
	private Button ajouter = null;
57
	private Button ajouter = null;
58
	private Button modifier = null;
58
	private Button modifier = null;
59
	private Button supprimer = null;
59
	private Button supprimer = null;
60
	
60
	
61
	private int indexElementSelectionne = 0;
61
	private int indexElementSelectionne = 0;
62
	private Personne personneSelectionnee = null;
62
	private Personne personneSelectionnee = null;
63
	
63
	
64
	public PersonneListeVue() {
64
	public PersonneListeVue() {
65
		mediateur = Registry.get(RegistreId.MEDIATEUR);
65
		mediateur = Registry.get(RegistreId.MEDIATEUR);
66
		Constants i18nC = mediateur.i18nC;
66
		Constants i18nC = mediateur.i18nC;
67
		
67
		
68
		setHeadingHtml(Mediateur.i18nC.personneListeLabel());
68
		setHeadingHtml(Mediateur.i18nC.personneListeLabel());
69
		setLayout(new FitLayout());
69
		setLayout(new FitLayout());
70
		
70
		
71
		//Définition de la barre d'outil
71
		//Définition de la barre d'outil
72
		ToolBar toolBar = new ToolBar();
72
		ToolBar toolBar = new ToolBar();
73
		ajouter = new Button(Mediateur.i18nC.ajouter());
73
		ajouter = new Button(Mediateur.i18nC.ajouter());
74
		ajouter.setIcon(Images.ICONES.ajouter());
74
		ajouter.setIcon(Images.ICONES.ajouter());
75
		ajouter.addSelectionListener(new SelectionListener<ButtonEvent>() {  
75
		ajouter.addSelectionListener(new SelectionListener<ButtonEvent>() {  
76
			public void componentSelected(ButtonEvent ce) {  
76
			public void componentSelected(ButtonEvent ce) {  
77
				mediateur.clicAjouterPersonne();
77
				mediateur.clicAjouterPersonne();
78
			}  
78
			}  
79
		});
79
		});
80
		ajouter.setToolTip(mediateur.i18nC.indicationCreerUneFiche()+" "+mediateur.i18nC.collectionSingulier());
80
		ajouter.setToolTip(mediateur.i18nC.indicationCreerUneFiche()+" "+mediateur.i18nC.collectionSingulier());
81
		toolBar.add(ajouter);
81
		toolBar.add(ajouter);
82
 
82
 
83
		modifier = new Button(Mediateur.i18nC.modifier());
83
		modifier = new Button(Mediateur.i18nC.modifier());
84
		modifier.setIcon(Images.ICONES.formModifier());
84
		modifier.setIcon(Images.ICONES.formModifier());
85
		modifier.addSelectionListener(new SelectionListener<ButtonEvent>() {  
85
		modifier.addSelectionListener(new SelectionListener<ButtonEvent>() {  
86
			public void componentSelected(ButtonEvent ce) {  
86
			public void componentSelected(ButtonEvent ce) {  
87
				mediateur.clicModifierPersonne(grille.getSelectionModel().getSelectedItems());
87
				mediateur.clicModifierPersonne(grille.getSelectionModel().getSelectedItems());
88
			}  
88
			}  
89
		});
89
		});
90
		modifier.setToolTip(mediateur.i18nC.indicationModifierUneFiche());
90
		modifier.setToolTip(mediateur.i18nC.indicationModifierUneFiche());
91
		toolBar.add(modifier);
91
		toolBar.add(modifier);
92
		
92
		
93
		supprimer = new Button(Mediateur.i18nC.supprimer());
93
		supprimer = new Button(Mediateur.i18nC.supprimer());
94
		supprimer.setIcon(Images.ICONES.supprimer());
94
		supprimer.setIcon(Images.ICONES.supprimer());
95
		supprimer.addSelectionListener(new SelectionListener<ButtonEvent>() {  
95
		supprimer.addSelectionListener(new SelectionListener<ButtonEvent>() {  
96
			public void componentSelected(ButtonEvent ce) {  
96
			public void componentSelected(ButtonEvent ce) {  
97
				clicSupprimerPersonne(grille.getSelectionModel().getSelectedItems());
97
				clicSupprimerPersonne(grille.getSelectionModel().getSelectedItems());
98
			}  
98
			}  
99
		});
99
		});
100
		supprimer.setToolTip(mediateur.i18nC.indicationSupprimerUneFiche());
100
		supprimer.setToolTip(mediateur.i18nC.indicationSupprimerUneFiche());
101
		toolBar.add(supprimer);
101
		toolBar.add(supprimer);
102
		setTopComponent(toolBar);
102
		setTopComponent(toolBar);
103
 
103
 
104
		// Définition des colomnes de la grille:
104
		// Définition des colomnes de la grille:
105
		List<ColumnConfig> lstColumns = new ArrayList<ColumnConfig>();
105
		List<ColumnConfig> lstColumns = new ArrayList<ColumnConfig>();
106
		lstColumns.add(new ColumnConfig("id_personne", "Id", 45));
106
		lstColumns.add(new ColumnConfig("id_personne", "Id", 45));
107
		lstColumns.add(new ColumnConfig("nom", "Nom", 100));
107
		lstColumns.add(new ColumnConfig("nom", "Nom", 100));
108
		lstColumns.add(new ColumnConfig("prenom", "Prénom", 100));
108
		lstColumns.add(new ColumnConfig("prenom", "Prénom", 100));
109
		lstColumns.add(new ColumnConfig("fmt_nom_complet", "Nom Complet", 200));
109
		lstColumns.add(new ColumnConfig("fmt_nom_complet", "Nom Complet", 200));
110
		lstColumns.add(new ColumnConfig("code_postal", "Code postal", 100));
110
		lstColumns.add(new ColumnConfig("code_postal", "Code postal", 100));
111
		lstColumns.add(new ColumnConfig("ville", "Ville", 100));
111
		lstColumns.add(new ColumnConfig("ville", "Ville", 100));
112
		lstColumns.add(new ColumnConfig("_courriel_princ_", "Courriel", 200));
112
		lstColumns.add(new ColumnConfig("_courriel_princ_", "Courriel", 200));
113
 
113
 
114
		lstColumns.get(0).setHidden(true);
114
		lstColumns.get(0).setHidden(true);
115
		lstColumns.get(1).setHidden(true);
115
		lstColumns.get(1).setHidden(true);
116
		lstColumns.get(2).setHidden(true);
116
		lstColumns.get(2).setHidden(true);
117
		
117
		
118
		modeleColonnes = new ColumnModel(lstColumns);
118
		modeleColonnes = new ColumnModel(lstColumns);
119
 
119
 
120
		// Définition de la grille
120
		// Définition de la grille
121
		GridSelectionModel<Personne> gsmSelectionGrille = new GridSelectionModel<Personne>();
121
		GridSelectionModel<Personne> gsmSelectionGrille = new GridSelectionModel<Personne>();
122
		gsmSelectionGrille.addSelectionChangedListener(new SelectionChangedListener<Personne>() {
122
		gsmSelectionGrille.addSelectionChangedListener(new SelectionChangedListener<Personne>() {
123
			public void selectionChanged(SelectionChangedEvent<Personne> event) {
123
			public void selectionChanged(SelectionChangedEvent<Personne> event) {
124
				personneSelectionnee = (Personne) event.getSelectedItem();
124
				personneSelectionnee = (Personne) event.getSelectedItem();
125
				indexElementSelectionne = store.indexOf(personneSelectionnee);
125
				indexElementSelectionne = store.indexOf(personneSelectionnee);
126
				clicListe(personneSelectionnee);
126
				clicListe(personneSelectionnee);
127
			}
127
			}
128
		});
128
		});
129
		
129
		
130
		store = new ListStore<Personne>();
130
		store = new ListStore<Personne>();
131
		store.sort("nom", SortDir.ASC);
131
		store.sort("nom", SortDir.ASC);
132
		
132
		
133
		grille = new Grid<Personne>(store, modeleColonnes);		
133
		grille = new Grid<Personne>(store, modeleColonnes);		
134
		grille.setSelectionModel(gsmSelectionGrille);
134
		grille.setSelectionModel(gsmSelectionGrille);
135
		grille.setWidth("100%");
135
		grille.setWidth("100%");
136
		grille.setAutoExpandColumn("fmt_nom_complet");
136
		grille.setAutoExpandColumn("fmt_nom_complet");
137
		grille.getView().setAutoFill(true);
137
		grille.getView().setAutoFill(true);
138
		grille.getView().setForceFit(true);
138
		grille.getView().setForceFit(true);
139
		grille.addListener(Events.ViewReady, new Listener<BaseEvent>() {
139
		grille.addListener(Events.ViewReady, new Listener<BaseEvent>() {
140
			public void handleEvent(BaseEvent be) {
140
			public void handleEvent(BaseEvent be) {
141
				grille.getStore().sort("nom", SortDir.ASC);
141
				grille.getStore().sort("nom", SortDir.ASC);
142
				grille.getSelectionModel().select(0, false);
142
				grille.getSelectionModel().select(0, false);
143
			}
143
			}
144
		});
144
		});
145
		grille.addListener(Events.OnDoubleClick, new Listener<BaseEvent>(){
145
		grille.addListener(Events.OnDoubleClick, new Listener<BaseEvent>(){
146
			public void handleEvent(BaseEvent be) {
146
			public void handleEvent(BaseEvent be) {
147
				modifier.fireEvent(Events.Select);
147
				modifier.fireEvent(Events.Select);
148
			}
148
			}
149
		});
149
		});
150
		add(grille);
150
		add(grille);
151
		
151
		
152
		PersonneListe personneListe = new PersonneListe();
152
		PersonneListe personneListe = new PersonneListe();
153
		champFiltreRecherche = new ChampFiltreRecherche(mediateur, toolBar, personneListe);
153
		champFiltreRecherche = new ChampFiltreRecherche(mediateur, toolBar, personneListe);
154
		// Définition de la barre de pagination
154
		// Définition de la barre de pagination
155
		pagination = new BarrePaginationVue(personneListe, mediateur);
155
		pagination = new BarrePaginationVue(personneListe, mediateur, champFiltreRecherche);
156
		setBottomComponent(pagination);
156
		setBottomComponent(pagination);
157
	}
157
	}
158
 
158
 
159
	private void clicListe(Personne personne) {
159
	private void clicListe(Personne personne) {
160
		if (personne != null && store.getCount() > 0) {
160
		if (personne != null && store.getCount() > 0) {
161
			mediateur.clicListePersonne(personne);
161
			mediateur.clicListePersonne(personne);
162
		}
162
		}
163
	}
163
	}
164
	
164
	
165
	private void clicSupprimerPersonne(List<Personne> personnesASupprimer) {
165
	private void clicSupprimerPersonne(List<Personne> personnesASupprimer) {
166
		if (store.getCount() > 0) {
166
		if (store.getCount() > 0) {
167
			mediateur.clicSupprimerPersonne(this, personnesASupprimer);
167
			mediateur.clicSupprimerPersonne(this, personnesASupprimer);
168
		}
168
		}
169
	}
169
	}
170
	
170
	
171
	private void gererEtatActivationBouton()	{
171
	private void gererEtatActivationBouton()	{
172
		int nbreElementDuMagazin = store.getCount();
172
		int nbreElementDuMagazin = store.getCount();
173
		ajouter.enable();
173
		ajouter.enable();
174
		if (nbreElementDuMagazin == 0) {
174
		if (nbreElementDuMagazin == 0) {
175
			supprimer.disable();
175
			supprimer.disable();
176
			modifier.disable();
176
			modifier.disable();
177
		} else if (nbreElementDuMagazin > 0) {
177
		} else if (nbreElementDuMagazin > 0) {
178
			modifier.enable();
178
			modifier.enable();
179
			if (((Utilisateur) Registry.get(RegistreId.UTILISATEUR_COURANT)).isIdentifie()) {
179
			if (((Utilisateur) Registry.get(RegistreId.UTILISATEUR_COURANT)).isIdentifie()) {
180
				supprimer.enable();
180
				supprimer.enable();
181
			}
181
			}
182
		}
182
		}
183
	}
183
	}
184
	
184
	
185
	public void rafraichir(Object nouvellesDonnees) {
185
	public void rafraichir(Object nouvellesDonnees) {
186
		
186
		
187
		if (nouvellesDonnees instanceof PersonneListe) {
187
		if (nouvellesDonnees instanceof PersonneListe) {
188
			PersonneListe listePersonnes = (PersonneListe) nouvellesDonnees;
188
			PersonneListe listePersonnes = (PersonneListe) nouvellesDonnees;
189
			
189
			
190
			// la grille de gxt est case sensitive, on harmonise donc tous les noms en majuscule et sans espaces
190
			// la grille de gxt est case sensitive, on harmonise donc tous les noms en majuscule et sans espaces
191
			// au début et à la fin  afin de pouvoir trier correctement 
191
			// au début et à la fin  afin de pouvoir trier correctement 
192
			// (la colonne nom ne sert qu'au tri et n'est pas affichée)
192
			// (la colonne nom ne sert qu'au tri et n'est pas affichée)
193
			for (Iterator<Personne> iterator = listePersonnes.toList().iterator(); iterator.hasNext();) {
193
			for (Iterator<Personne> iterator = listePersonnes.toList().iterator(); iterator.hasNext();) {
194
				 Personne personne =  iterator.next();
194
				 Personne personne =  iterator.next();
195
				 personne.setNom(personne.getNom().toUpperCase().trim());
195
				 personne.setNom(personne.getNom().toUpperCase().trim());
196
			}
196
			}
197
			
197
			
198
			champFiltreRecherche.setListePaginable(listePersonnes);
198
			champFiltreRecherche.setListePaginable(listePersonnes);
199
			pagination.setlistePaginable(listePersonnes);
199
			pagination.setlistePaginable(listePersonnes);
200
			pagination.rafraichir(listePersonnes.getPageTable());
200
			pagination.rafraichir(listePersonnes.getPageTable());
201
			
201
			
202
			if (listePersonnes != null) {
202
			if (listePersonnes != null) {
203
				List<Personne> liste = (List<Personne>) listePersonnes.toList();
203
				List<Personne> liste = (List<Personne>) listePersonnes.toList();
204
				store.removeAll();
204
				store.removeAll();
205
				store.add(liste);
205
				store.add(liste);
206
				store.sort("nom", SortDir.ASC);
206
				store.sort("nom", SortDir.ASC);
207
				mediateur.actualiserPanneauCentral();
207
				mediateur.actualiserPanneauCentral();
208
				grille.fireEvent(Events.ViewReady);
208
				grille.fireEvent(Events.ViewReady);
209
			}
209
			}
210
		} else if (nouvellesDonnees instanceof Information)	{
210
		} else if (nouvellesDonnees instanceof Information)	{
211
			Information info = (Information) nouvellesDonnees;
211
			Information info = (Information) nouvellesDonnees;
212
			if (info.getType().equals("maj_utilisateur")) {
212
			if (info.getType().equals("maj_utilisateur")) {
213
				gererEtatActivationBouton();
213
				gererEtatActivationBouton();
214
			} else if(info.getType().equals("personne_modifiee")) {
214
			} else if(info.getType().equals("personne_modifiee")) {
215
				if(personneSelectionnee != null) {
215
				if(personneSelectionnee != null) {
216
					store.remove(indexElementSelectionne);
216
					store.remove(indexElementSelectionne);
217
					personneSelectionnee = null;
217
					personneSelectionnee = null;
218
				}
218
				}
219
				Personne personneModifiee = (Personne)info.getDonnee(0);
219
				Personne personneModifiee = (Personne)info.getDonnee(0);
220
				// au cas ou le bouton appliquer aurait été cliqué avant de valider
220
				// au cas ou le bouton appliquer aurait été cliqué avant de valider
221
				store.remove(personneModifiee);
221
				store.remove(personneModifiee);
222
				store.insert(personneModifiee, indexElementSelectionne);
222
				store.insert(personneModifiee, indexElementSelectionne);
223
				personneSelectionnee = personneModifiee;
223
				personneSelectionnee = personneModifiee;
224
				int indexElementSelectionne = store.indexOf(personneSelectionnee);
224
				int indexElementSelectionne = store.indexOf(personneSelectionnee);
225
				grille.getSelectionModel().select(indexElementSelectionne, false);
225
				grille.getSelectionModel().select(indexElementSelectionne, false);
226
				grille.getView().focusRow(indexElementSelectionne);
226
				grille.getView().focusRow(indexElementSelectionne);
227
				clicListe(personneSelectionnee);
227
				clicListe(personneSelectionnee);
228
			} else if (info.getType().equals("suppression_personne")) 	{
228
			} else if (info.getType().equals("suppression_personne")) 	{
229
				InfoLogger.display("Suppression de personne", info.getMessages().toString());	
229
				InfoLogger.display("Suppression de personne", info.getMessages().toString());	
230
				pagination.getlistePaginable().recharger();
230
				pagination.getlistePaginable().recharger();
231
				gererEtatActivationBouton();
231
				gererEtatActivationBouton();
232
			} else if (info.getType().equals("maj_utilisateur"))	{
232
			} else if (info.getType().equals("maj_utilisateur"))	{
233
				gererEtatActivationBouton();
233
				gererEtatActivationBouton();
234
			} else {
234
			} else {
235
				InfoLogger.display("Erreur", info.getMessages().toString(), true);
235
				InfoLogger.display("Erreur", info.getMessages().toString(), true);
236
			}
236
			}
237
		} else {
237
		} else {
238
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
238
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
239
		}
239
		}
240
		
240
		
241
		layout();
241
		layout();
242
	}
242
	}
243
}
243
}
244
 
244
 
245
 
245
 
246
 
246
 
247
 
247
 
248
 
248
 
249
 
249