Subversion Repositories eFlore/Applications.coel

Rev

Rev 605 | Rev 614 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
69 jpm 1
package org.tela_botanica.client.vues;
2
 
91 jpm 3
import java.util.ArrayList;
4
import java.util.Iterator;
69 jpm 5
import java.util.List;
6
 
119 jpm 7
import org.tela_botanica.client.Mediateur;
91 jpm 8
import org.tela_botanica.client.RegistreId;
115 jpm 9
import org.tela_botanica.client.i18n.Constantes;
569 jp_milcent 10
import org.tela_botanica.client.images.Images;
69 jpm 11
import org.tela_botanica.client.interfaces.Rafraichissable;
91 jpm 12
import org.tela_botanica.client.modeles.Configuration;
153 jpm 13
import org.tela_botanica.client.modeles.Information;
100 jpm 14
import org.tela_botanica.client.modeles.InterneValeur;
15
import org.tela_botanica.client.modeles.InterneValeurListe;
330 jp_milcent 16
import org.tela_botanica.client.modeles.MenuApplicationId;
102 jpm 17
import org.tela_botanica.client.modeles.Personne;
243 jp_milcent 18
import org.tela_botanica.client.modeles.PersonneListe;
277 jp_milcent 19
import org.tela_botanica.client.modeles.Projet;
20
import org.tela_botanica.client.modeles.ProjetListe;
119 jpm 21
import org.tela_botanica.client.modeles.Structure;
211 jp_milcent 22
import org.tela_botanica.client.modeles.StructureAPersonne;
23
import org.tela_botanica.client.modeles.StructureAPersonneListe;
188 jp_milcent 24
import org.tela_botanica.client.modeles.StructureConservation;
192 jp_milcent 25
import org.tela_botanica.client.modeles.StructureValorisation;
91 jpm 26
import org.tela_botanica.client.modeles.Valeur;
27
import org.tela_botanica.client.modeles.ValeurListe;
243 jp_milcent 28
import org.tela_botanica.client.util.UtilArray;
69 jpm 29
 
491 gduche 30
import com.extjs.gxt.ui.client.event.Events;
91 jpm 31
import com.extjs.gxt.ui.client.Registry;
69 jpm 32
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
110 jpm 33
import com.extjs.gxt.ui.client.Style.Scroll;
295 jp_milcent 34
import com.extjs.gxt.ui.client.event.BaseEvent;
491 gduche 35
import com.extjs.gxt.ui.client.event.ButtonEvent;
111 jpm 36
import com.extjs.gxt.ui.client.event.ComponentEvent;
214 jp_milcent 37
import com.extjs.gxt.ui.client.event.GridEvent;
243 jp_milcent 38
import com.extjs.gxt.ui.client.event.KeyListener;
111 jpm 39
import com.extjs.gxt.ui.client.event.Listener;
100 jpm 40
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
41
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
103 jpm 42
import com.extjs.gxt.ui.client.event.SelectionListener;
69 jpm 43
import com.extjs.gxt.ui.client.store.ListStore;
245 jp_milcent 44
import com.extjs.gxt.ui.client.store.Record;
45
import com.extjs.gxt.ui.client.store.Store;
46
import com.extjs.gxt.ui.client.store.StoreEvent;
111 jpm 47
import com.extjs.gxt.ui.client.widget.Component;
102 jpm 48
import com.extjs.gxt.ui.client.widget.ContentPanel;
569 jp_milcent 49
import com.extjs.gxt.ui.client.widget.Html;
153 jpm 50
import com.extjs.gxt.ui.client.widget.Info;
69 jpm 51
import com.extjs.gxt.ui.client.widget.LayoutContainer;
320 gduche 52
import com.extjs.gxt.ui.client.widget.MessageBox;
100 jpm 53
import com.extjs.gxt.ui.client.widget.TabItem;
54
import com.extjs.gxt.ui.client.widget.TabPanel;
69 jpm 55
import com.extjs.gxt.ui.client.widget.button.Button;
579 jp_milcent 56
import com.extjs.gxt.ui.client.widget.button.ButtonBar;
108 jpm 57
import com.extjs.gxt.ui.client.widget.form.CheckBox;
58
import com.extjs.gxt.ui.client.widget.form.CheckBoxGroup;
69 jpm 59
import com.extjs.gxt.ui.client.widget.form.ComboBox;
100 jpm 60
import com.extjs.gxt.ui.client.widget.form.DateField;
119 jpm 61
import com.extjs.gxt.ui.client.widget.form.Field;
100 jpm 62
import com.extjs.gxt.ui.client.widget.form.FieldSet;
69 jpm 63
import com.extjs.gxt.ui.client.widget.form.FormPanel;
172 jp_milcent 64
import com.extjs.gxt.ui.client.widget.form.HiddenField;
103 jpm 65
import com.extjs.gxt.ui.client.widget.form.LabelField;
102 jpm 66
import com.extjs.gxt.ui.client.widget.form.NumberField;
109 jpm 67
import com.extjs.gxt.ui.client.widget.form.Radio;
68
import com.extjs.gxt.ui.client.widget.form.RadioGroup;
164 jp_milcent 69
import com.extjs.gxt.ui.client.widget.form.TextArea;
69 jpm 70
import com.extjs.gxt.ui.client.widget.form.TextField;
71
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
72
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;
102 jpm 73
import com.extjs.gxt.ui.client.widget.grid.CellEditor;
74
import com.extjs.gxt.ui.client.widget.grid.CheckColumnConfig;
75
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
76
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
77
import com.extjs.gxt.ui.client.widget.grid.EditorGrid;
231 jp_milcent 78
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
79
import com.extjs.gxt.ui.client.widget.grid.RowNumberer;
69 jpm 80
import com.extjs.gxt.ui.client.widget.layout.ColumnData;
81
import com.extjs.gxt.ui.client.widget.layout.ColumnLayout;
82
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
100 jpm 83
import com.extjs.gxt.ui.client.widget.layout.FormData;
69 jpm 84
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
110 jpm 85
import com.extjs.gxt.ui.client.widget.tips.ToolTipConfig;
579 jp_milcent 86
import com.extjs.gxt.ui.client.widget.toolbar.FillToolItem;
102 jpm 87
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
88
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
91 jpm 89
import com.google.gwt.core.client.GWT;
100 jpm 90
import com.google.gwt.i18n.client.DateTimeFormat;
102 jpm 91
import com.google.gwt.i18n.client.NumberFormat;
609 jp_milcent 92
import com.google.gwt.user.client.ui.AbstractImagePrototype;
69 jpm 93
 
444 jp_milcent 94
public class StructureForm extends LayoutContainer implements Rafraichissable {
115 jpm 95
 
306 jp_milcent 96
	public static final String MODE_AJOUTER = "AJOUT";
97
	public static final String MODE_MODIFIER = "MODIF";
295 jp_milcent 98
 
115 jpm 99
	private Constantes i18nC = null;
119 jpm 100
	private Mediateur mediateur = null;
101
 
306 jp_milcent 102
	private String mode = null;
609 jp_milcent 103
	private Boolean clicBoutonvalidation = false;
104
	private int decompteRafraichissementPersonnel = 0;
277 jp_milcent 105
	private int tabIndex = 100;
206 jp_milcent 106
	private FormPanel structureFormPanneau = null;
107
	private TabPanel onglets = null;
192 jp_milcent 108
 
206 jp_milcent 109
	private TabItem identificationOnglet = null;
192 jp_milcent 110
	private TabItem personnelOnglet = null;
111
	private TabItem conservationOnglet = null;
112
	private TabItem valorisationOnglet = null;
206 jp_milcent 113
 
114
	private HiddenField<String> idStructureChp = null;
115 jpm 115
 
206 jp_milcent 116
	// Onglet IDENTIFICATION
602 jp_milcent 117
	private Structure identification = null;
91 jpm 118
	private ListStore<Valeur> magazinLstpr = null;
119
	private ComboBox<Valeur> comboLstpr = null;
120
	private ListStore<Valeur> magazinLstpu = null;
121
	private ComboBox<Valeur> comboLstpu = null;
103 jpm 122
	private ListStore<Valeur> magazinLiStatut = null;
123
	private ComboBox<Valeur> comboLiStatut = null;
295 jp_milcent 124
	private ListStore<Valeur> fonctionsMagazin = null;
125
	private ComboBox<Valeur> fonctionsCombo = null;
100 jpm 126
	private ComboBox<InterneValeur> comboAcronyme = null;
127
	private TextField<String> ihChp = null;
128
	private TextField<String> mnhnChp = null;
129
	private ComboBox<InterneValeur> comboTypeStructure = null;
602 jp_milcent 130
	private TextField<String> nomStructureChp = null;
131
	private DateField dateFondationChp = null;
132
	private TextArea adrChp = null;
133
	private TextField<String> cpChp = null;
134
	private TextField<String> villeChp = null;
135
	private TextField<String> regionChp = null;
136
	private TextField<String> telChp = null;
137
	private TextField<String> faxChp = null;
138
	private TextField<String> emailChp = null;
139
	private TextField<String> urlChp = null;
140
	private ListStore<Valeur> magazinPays = null;
141
	private ComboBox<Valeur> comboPays = null;
192 jp_milcent 142
 
206 jp_milcent 143
	// Onglet PERSONNEL
602 jp_milcent 144
	private StructureAPersonneListe personnel = null;
231 jp_milcent 145
	private StructureAPersonneListe personnelAjoute = null;
146
	private StructureAPersonneListe personnelModifie = null;
147
	private StructureAPersonneListe personnelSupprime = null;
211 jp_milcent 148
	private NumberField nbreTotalPersonneStructureChp = null;
149
	private EditorGrid<StructureAPersonne> grillePersonnel = null;
150
	private ListStore<StructureAPersonne> personnelGrilleMagazin = null;
151
 
206 jp_milcent 152
	// Onglet CONSERVATION
211 jp_milcent 153
	private StructureConservation conservation = null;
602 jp_milcent 154
	private RadioGroup formationMarkRGrpChp = null;
155
	private RadioGroup interetFormationMarkRGrpChp = null;
156
	private RadioGroup collectionCommuneMarkRGrpChp = null;
157
	private RadioGroup accesControleMarkRGrpChp = null;
158
	private RadioGroup restaurationMarkRGrpChp = null;
159
	private RadioGroup traitementMarkRGrpChp = null;
160
	private RadioGroup collectionAcquisitionMarkRGrpChp = null;
161
	private RadioGroup echantillonAcquisitionMarkRGrpChp = null;
162
	private TextField<String> localStockageAutreChp = null;
163
	private TextField<String> meubleStockageAutreChp = null;
164
	private TextField<String> parametreStockageAutreChp = null;
165
	private TextField<String> collectionAutreAutreChp = null;
166
	private TextField<String> autreCollectionAutreChp = null;
167
	private TextField<String> opRestauAutreChp = null;
168
	private TextField<String> autreMaterielAutreChp = null;
169
	private TextField<String> poisonTraitementAutreChp = null;
170
	private TextField<String> traitementAutreChp = null;
171
	private TextField<String> insecteTraitementAutreChp = null;
172
	private TextField<String> actionAutreChp = null;
173
	private TextField<String> provenanceRechercheAutreChp = null;
174
	private TextField<String> typeRechercheAutreChp = null;
115 jpm 175
	private CheckBoxGroup localStockageTrukCacGrpChp = null;
569 jp_milcent 176
	private LayoutContainer localStockageTrukCp = null;
115 jpm 177
	private CheckBoxGroup meubleStockageTrukCacGrpChp = null;
569 jp_milcent 178
	private LayoutContainer meubleStockageTrukCp = null;
115 jpm 179
	private CheckBoxGroup parametreStockageTrukCacGrpChp = null;
569 jp_milcent 180
	private LayoutContainer parametreStockageTrukCp = null;
181
	private LayoutContainer collectionAutreTrukCp = null;
111 jpm 182
	private CheckBoxGroup collectionAutreTrukCacGrpChp = null;
115 jpm 183
	private CheckBoxGroup opRestauTrukCacGrpChp = null;
569 jp_milcent 184
	private LayoutContainer opRestauTrukCp = null;
115 jpm 185
	private CheckBoxGroup autreMaterielTrukCacGrpChp = null;
569 jp_milcent 186
	private LayoutContainer autreMaterielTrukCp = null;
187
	private LayoutContainer traitementTrukCp = null;
111 jpm 188
	private CheckBoxGroup traitementTrukCacGrpChp = null;
569 jp_milcent 189
	private LayoutContainer poisonTraitementTrukCp = null;
190
	private LayoutContainer insecteTraitementTrukCp = null;
111 jpm 191
	private CheckBoxGroup insecteTraitementTrukCacGrpChp = null;
115 jpm 192
	private CheckBoxGroup poisonTraitementTrukCacGrpChp = null;
569 jp_milcent 193
	private LayoutContainer autreCollectionTrukCp = null;
119 jpm 194
	private CheckBoxGroup autreCollectionTrukCacGrpChp = null;
569 jp_milcent 195
	private LayoutContainer provenanceRechercheTrukCp = null;
115 jpm 196
	private CheckBoxGroup provenanceRechercheTrukCacGrpChp = null;
197
	private CheckBoxGroup typeRechercheTrukCacGrpChp = null;
569 jp_milcent 198
	private LayoutContainer typeRechercheTrukCp = null;
115 jpm 199
	private TextField<String> futureActionChp = null;
200
	private TextField<String> sansMotifAccesChp = null;
201
	private TextField<String> avecMotifAccesChp = null;
202
	private TextField<String> formationChp = null;
203
	private RadioGroup traitementAcquisitionMarkRGrpChp = null;
204
	private LabelField traitementAcquisitionMarkLabel = null;
205
	private RadioGroup materielConservationCeRGrpChp = null;
119 jpm 206
 
206 jp_milcent 207
	// Onglet VALORISATION
211 jp_milcent 208
	private StructureValorisation valorisation = null;
206 jp_milcent 209
	private RadioGroup actionMarkRGrpChp = null;
569 jp_milcent 210
	private LayoutContainer actionTrukCp = null;
206 jp_milcent 211
	private CheckBoxGroup actionTrukCacGrpChp = null;
602 jp_milcent 212
	private RadioGroup futureActionMarkRGrpChp = null;
213
	private RadioGroup rechercheMarkRGrpChp = null;
214
	private RadioGroup sansMotifAccesMarkRGrpChp = null;
215
	private RadioGroup avecMotifAccesMarkRGrpChp = null;
216
	private TextField<String> publicationChp = null;
217
	private LayoutContainer materielConservationCp = null;
218
	private ListStore<Personne> personneExistanteMagazin = null;
219
	private ComboBox<Personne> personneExistanteCombo = null;
220
	private Button supprimerPersonnelBtn = null;
221
	private ListStore<Projet> projetsMagazin = null;
222
	private ComboBox<Projet> projetsCombo = null;
223
	private CellEditor fonctionEditor = null;
224
	private List<Valeur> fonctionsListe = null;
225
	private ButtonBar barreOutilsValidation = null;
192 jp_milcent 226
 
231 jp_milcent 227
 
444 jp_milcent 228
	public StructureForm(Mediateur mediateurCourrant, String modeDeCreation) {
100 jpm 229
		//+-----------------------------------------------------------------------------------------------------------+
230
		// Initialisation de variables
306 jp_milcent 231
		mode = modeDeCreation;
402 jp_milcent 232
		mediateur = mediateurCourrant;
609 jp_milcent 233
		i18nC = Mediateur.i18nC;
119 jpm 234
 
366 jp_milcent 235
		// Iniatilisation du layoutContainer
236
		setLayout(new FitLayout());
237
		setBorders(false);
238
 
110 jpm 239
		// Création du panneau du FORMULAIRE GÉNÉRAL
119 jpm 240
		structureFormPanneau = new FormPanel();
366 jp_milcent 241
		structureFormPanneau.setBodyBorder(false);
119 jpm 242
		structureFormPanneau.setFrame(true);
579 jp_milcent 243
		structureFormPanneau.setIcon(Images.ICONES.formAjouter());
119 jpm 244
		structureFormPanneau.setCollapsible(false);
156 jp_milcent 245
		structureFormPanneau.setHeading(i18nC.titreAjoutFormStructurePanneau());
119 jpm 246
		structureFormPanneau.setButtonAlign(HorizontalAlignment.CENTER);
559 jp_milcent 247
		structureFormPanneau.setLayout(new FitLayout());
100 jpm 248
 
249
		// Création des onglets
609 jp_milcent 250
		creerOnglets();
251
 
252
		// Ajout des boutons au panneau formulaire
253
		creerBarreOutilsValidation();
254
 
255
		// Ajout du panneau Formulaire à la disposition générale
256
		add(structureFormPanneau);
257
	}
258
 
259
	private void creerOnglets() {
192 jp_milcent 260
		onglets = new TabPanel();
110 jpm 261
		// NOTE : pour faire apparaître les scrollBar il faut définir la hauteur du panneau d'onglets à 100% (autoHeight ne semble pas fonctionner)
262
		onglets.setHeight("100%");
69 jpm 263
 
100 jpm 264
		// Onlget formulaire IDENTIFICATION
110 jpm 265
		onglets.add(creerOngletIdentification());
206 jp_milcent 266
 
100 jpm 267
		// Onlget formulaire PERSONNEL
103 jpm 268
		onglets.add(creerOngletPersonnel());
91 jpm 269
 
100 jpm 270
		// Onlget formulaire CONSERVATION
108 jpm 271
		onglets.add(creerOngletConservation());
100 jpm 272
 
273
		// Onlget formulaire VALORISATION
111 jpm 274
		onglets.add(creerOngletValorisation());
100 jpm 275
 
119 jpm 276
		// Sélection de l'onglet par défaut
306 jp_milcent 277
		//onglets.setSelection(personnelOnglet);
192 jp_milcent 278
 
119 jpm 279
		// Ajout des onglets au formulaire général
280
		structureFormPanneau.add(onglets);
609 jp_milcent 281
	}
282
 
283
	private void creerBarreOutilsValidation() {
579 jp_milcent 284
		barreOutilsValidation = new ButtonBar();
285
		barreOutilsValidation.setAlignment(HorizontalAlignment.LEFT);
286
 
609 jp_milcent 287
		barreOutilsValidation.add(creerBouton(i18nC.reinitialiser(), Images.ICONES.reinitialiser(), "RE"));
579 jp_milcent 288
 
289
		barreOutilsValidation.add(new FillToolItem());
290
 
609 jp_milcent 291
		barreOutilsValidation.add(creerBouton(i18nC.appliquer(), Images.ICONES.appliquer(), "AP"));
579 jp_milcent 292
 
609 jp_milcent 293
		barreOutilsValidation.add(creerBouton(i18nC.annuler(), Images.ICONES.annuler(), "AN"));
579 jp_milcent 294
 
609 jp_milcent 295
		barreOutilsValidation.add(creerBouton(i18nC.valider(), Images.ICONES.valider(), "VA"));
296
 
297
		structureFormPanneau.setBottomComponent(barreOutilsValidation);
298
	}
299
 
300
	private Button creerBouton(String nom, AbstractImagePrototype icone, final String code) {
301
		SelectionListener<ButtonEvent> sl = new SelectionListener<ButtonEvent>() {
119 jpm 302
			@Override
491 gduche 303
			public void componentSelected(ButtonEvent ce) {
609 jp_milcent 304
				if (code.equals("VA")) {
305
					soumettreFormulaire();
306
					clicBoutonvalidation = true;
307
				} else if (code.equals("AP")) {
308
					soumettreFormulaire();
309
				} else if (code.equals("AN")) {
310
					mediateur.clicMenu(MenuApplicationId.STRUCTURE);
311
				} else if (code.equals("RE")) {
312
					if (mode.equals(StructureForm.MODE_MODIFIER)) {
313
						mediateur.afficherFormStructure(identification.getId());
314
					} else {
315
						mediateur.afficherFormStructure(null);
316
					}
317
				}
119 jpm 318
			}
609 jp_milcent 319
		};
69 jpm 320
 
609 jp_milcent 321
		Button bouton = new Button(nom);
322
		bouton.setIcon(icone);
323
		bouton.addSelectionListener(sl);
579 jp_milcent 324
 
609 jp_milcent 325
		return bouton;
69 jpm 326
	}
108 jpm 327
 
119 jpm 328
	private void soumettreFormulaire() {
243 jp_milcent 329
		// Vérification de la validité des champs du formulaire
330
		if (verifierFormulaire()) {
331
			// Collecte des données du formulaire
332
			Structure structure = collecterStructureIdentification();
333
			StructureConservation conservation = collecterStructureConservation();
334
			StructureValorisation valorisation = collecterStructureValorisation();
335
			collecterStructurePersonnel();
336
 
337
			if (mode.equals("AJOUT")) {
338
				// Ajout des informations sur la Structure
277 jp_milcent 339
				mediateur.ajouterStructure(this, structure, conservation, valorisation);
243 jp_milcent 340
				// L'ajout des relations StructureAPersonne se fait quand la structure a été ajoutée
341
				// Voir la méthode rafraichir().
342
			} else if (mode.equals("MODIF")) {
343
				// Modification des informations sur la Structure
306 jp_milcent 344
				if (structure == null && conservation == null && valorisation == null) {
345
					Info.display("Modification d'une institution", "Rien n'a été enregistré car le formulaire n'a pas été modifié.");
346
				} else {
347
					mediateur.modifierStructure(this, identification.getId(), structure, conservation, valorisation);
348
				}
349
				if (personnelModifie.size() == 0 && personnelAjoute.size() == 0 && personnelSupprime.size() == 0) {
350
					Info.display("Modification du personnel", "Rien n'a été enregistré car le formulaire n'a pas été modifié.");
351
				} else {
352
					if (personnelModifie.size() != 0) {
609 jp_milcent 353
						decompteRafraichissementPersonnel++;
306 jp_milcent 354
						mediateur.modifierStructureAPersonne(this, personnelModifie);
355
					}
356
					// Ajout des relations StructureAPersonne
357
					if (personnelAjoute.size() != 0) {
609 jp_milcent 358
						decompteRafraichissementPersonnel++;
306 jp_milcent 359
						mediateur.ajouterStructureAPersonne(this, identification.getId(), personnelAjoute);
360
					}
361
					// Suppression des relations StructureAPersonne
362
					if (personnelSupprime.size() != 0) {
609 jp_milcent 363
						decompteRafraichissementPersonnel++;
306 jp_milcent 364
						mediateur.supprimerStructureAPersonne(this, personnelSupprime);
365
					}
366
				}
243 jp_milcent 367
			}
368
		}
369
	}
370
 
371
	private Boolean verifierFormulaire() {
372
		ArrayList<String> messages = new ArrayList<String>();
231 jp_milcent 373
 
295 jp_milcent 374
		// Vérification des infos sur le nom de la structure
263 jp_milcent 375
		if (	(identificationOnglet.getData("acces").equals(true) && nomStructureChp.getValue() == null) ||
376
				(identificationOnglet.getData("acces").equals(true) && nomStructureChp.getValue().equals("")) ||
243 jp_milcent 377
				(identificationOnglet.getData("acces").equals(false) && identification.getNom().equals(""))) {
378
			messages.add("Veuillez indiquez un nom à l'institution.");
156 jp_milcent 379
		}
243 jp_milcent 380
 
295 jp_milcent 381
		// Vérification des infos sur le projet de la structure
382
		if (	(identificationOnglet.getData("acces").equals(true) && projetsCombo.getValue() == null) ||
383
				(identificationOnglet.getData("acces").equals(true) && projetsCombo.getValue().equals("")) ||
384
				(identificationOnglet.getData("acces").equals(false) && identification.getIdProjet().equals(""))) {
385
			messages.add("Veuillez sélectionner un projet pour l'institution.");
386
		}
387
 
243 jp_milcent 388
		// Vérification du Personnel
389
		if (personnelOnglet.getData("acces").equals(true)) {
390
			String personnelNumero = "";
391
			int nbrePersonne = personnelGrilleMagazin.getCount();
392
			for (int i = 0; i < nbrePersonne; i++) {
393
				StructureAPersonne personne = personnelGrilleMagazin.getAt(i);
394
				if (personne.getNom().equals("") || personne.getPrenom().equals("")) {
395
					personnelNumero += (i != 0 ? ", " : "")+(i+1);
396
				}
397
			}
398
			if (!personnelNumero.equals("")) {
399
				messages.add("Veuillez indiquez un prénom et un nom au personnel numéro : "+personnelNumero);
400
			}
401
		}
402
 
403
		// Affichage des messages d'alerte
404
		if (messages.size() != 0) {
405
			String[] a = {};
406
			a = messages.toArray(a);
320 gduche 407
			MessageBox.alert("Erreurs de saisies", UtilArray.implode(a, "\n\n"), null);
243 jp_milcent 408
			return false;
409
		}
410
		return true;
119 jpm 411
	}
412
 
192 jp_milcent 413
	private StructureValorisation collecterStructureValorisation() {
306 jp_milcent 414
		StructureValorisation valorisationARetourner = null;
415
		if (valorisationOnglet.getData("acces").equals(true)) {
206 jp_milcent 416
			// Création de l'objet
306 jp_milcent 417
			StructureValorisation valorisationCollectee = (StructureValorisation) valorisation.cloner(new StructureValorisation());
206 jp_milcent 418
 
419
			// ACTION
420
			if (actionMarkRGrpChp.getValue() != null) {
306 jp_milcent 421
				valorisationCollectee.setAction(actionMarkRGrpChp.getValue().getValueAttribute());
206 jp_milcent 422
			}
423
 
424
			// ACTION INFO
306 jp_milcent 425
			valorisationCollectee.setActionInfo(creerChaineDenormalisee(actionTrukCacGrpChp.getValues()));
426
			valorisationCollectee.setActionInfo("AUTRE", actionAutreChp.getValue());
206 jp_milcent 427
 
428
			// PUBLICATION
306 jp_milcent 429
			valorisationCollectee.setPublication(publicationChp.getValue());
206 jp_milcent 430
 
431
			// COLLECTION AUTRE
306 jp_milcent 432
			valorisationCollectee.setCollectionAutre(creerChaineDenormalisee(autreCollectionTrukCacGrpChp.getValues()));
433
			valorisationCollectee.setCollectionAutre("AUTRE", autreCollectionAutreChp.getValue());
206 jp_milcent 434
 
435
			// ACTION FUTURE
436
			if (futureActionMarkRGrpChp.getValue() != null) {
306 jp_milcent 437
				valorisationCollectee.setActionFuture(futureActionMarkRGrpChp.getValue().getValueAttribute());
206 jp_milcent 438
			}
439
			// ACTION FUTURE INFO
306 jp_milcent 440
			valorisationCollectee.setActionFutureInfo(futureActionChp.getValue());
206 jp_milcent 441
 
442
			// RECHERCHE
443
			if (rechercheMarkRGrpChp.getValue() != null) {
306 jp_milcent 444
				valorisationCollectee.setRecherche(rechercheMarkRGrpChp.getValue().getValueAttribute());
602 jp_milcent 445
 
446
				// RECHERCHE PROVENANCE
447
				valorisationCollectee.setRechercheProvenance(creerChaineDenormalisee(provenanceRechercheTrukCacGrpChp.getValues()));
448
				valorisationCollectee.setRechercheProvenance("AUTRE", provenanceRechercheAutreChp.getValue());
449
 
450
				// RECHERCHE TYPE
451
				valorisationCollectee.setRechercheType(creerChaineDenormalisee(typeRechercheTrukCacGrpChp.getValues()));
452
				valorisationCollectee.setRechercheType("AUTRE", typeRechercheAutreChp.getValue());
206 jp_milcent 453
			}
454
 
455
			// ACCÈS SANS MOTIF
456
			if (sansMotifAccesMarkRGrpChp.getValue() != null) {
306 jp_milcent 457
				valorisationCollectee.setAccesSansMotif(sansMotifAccesMarkRGrpChp.getValue().getValueAttribute());
206 jp_milcent 458
			}
459
			// ACCÈS SANS MOTIF INFO
306 jp_milcent 460
			valorisationCollectee.setAccesSansMotifInfo(sansMotifAccesChp.getValue());
206 jp_milcent 461
 
462
			// VISITE AVEC MOTIF
463
			if (avecMotifAccesMarkRGrpChp.getValue() != null) {
306 jp_milcent 464
				valorisationCollectee.setVisiteAvecMotif(avecMotifAccesMarkRGrpChp.getValue().getValueAttribute());
206 jp_milcent 465
			}
466
			// VISITE AVEC MOTIF INFO
306 jp_milcent 467
			valorisationCollectee.setVisiteAvecMotifInfo(avecMotifAccesChp.getValue());
206 jp_milcent 468
 
306 jp_milcent 469
			// Retour de l'objet
470
			if (!valorisationCollectee.comparer(valorisation)) {
471
				valorisationARetourner = valorisation = valorisationCollectee;
472
			}
192 jp_milcent 473
		}
306 jp_milcent 474
		return valorisationARetourner;
192 jp_milcent 475
	}
476
 
477
	private void peuplerStructureValorisation() {
605 jp_milcent 478
		if (mode.equals(MODE_AJOUTER)) {
479
			// Indique que l'onglet a pu être modifié pour la méthode collecter...
480
			valorisationOnglet.setData("acces", true);
481
			// Initialisation de l'objet Structure
482
			valorisation = new StructureValorisation();
483
		}
484
		if (mode.equals(MODE_MODIFIER) && valorisation != null && valorisationOnglet.getData("acces").equals(false)) {
491 gduche 485
			// ACTION :
486
			//TODO : check below:
487
			((Radio) actionMarkRGrpChp.get((valorisation.getAction().equals("1") ? 0 : 1))).setValue(true);
206 jp_milcent 488
 
491 gduche 489
 
206 jp_milcent 490
			// ACTION INFO
491
			peuplerCasesACocher(valorisation.getActionInfo(), actionTrukCacGrpChp, actionAutreChp);
492
 
493
			// PUBLICATION
494
			publicationChp.setValue(valorisation.getPublication());
495
 
496
			// COLLECTION AUTRE
497
			peuplerCasesACocher(valorisation.getCollectionAutre(), autreCollectionTrukCacGrpChp, autreCollectionAutreChp);
498
 
499
			// ACTION FUTURE
491 gduche 500
			((Radio) futureActionMarkRGrpChp.get((valorisation.getActionFuture().equals("1") ? 0 : 1))).setValue(true);
206 jp_milcent 501
 
502
			// ACTION FUTURE INFO
503
			futureActionChp.setValue(valorisation.getActionFutureInfo());
504
 
505
			// RECHERCHE
491 gduche 506
			((Radio) rechercheMarkRGrpChp.get((valorisation.getRecherche().equals("1") ? 0 : 1))).setValue(true);
206 jp_milcent 507
			// RECHERCHE PROVENANCE
508
			peuplerCasesACocher(valorisation.getRechercheProvenance(), provenanceRechercheTrukCacGrpChp, provenanceRechercheAutreChp);
509
			// RECHERCHE TYPE
510
			peuplerCasesACocher(valorisation.getRechercheType(), typeRechercheTrukCacGrpChp, typeRechercheAutreChp);
511
 
512
			// ACCÈS SANS MOTIF
491 gduche 513
			((Radio) sansMotifAccesMarkRGrpChp.get((valorisation.getAccesSansMotif().equals("1") ? 0 : 1))).setValue(true);
206 jp_milcent 514
			// ACCÈS SANS MOTIF INFO
515
			sansMotifAccesChp.setValue(valorisation.getAccesSansMotifInfo());
516
 
517
			// VISITE AVEC MOTIF
491 gduche 518
			((Radio) avecMotifAccesMarkRGrpChp.get((valorisation.getVisiteAvecMotif().equals("1") ? 0 : 1))).setValue(true);
206 jp_milcent 519
			// VISITE AVEC MOTIF INFO
520
			avecMotifAccesChp.setValue(valorisation.getVisiteAvecMotifInfo());
211 jp_milcent 521
 
243 jp_milcent 522
			// Indique que l'onglet a été rempli et a pu être modifié pour la méthode collecter...
523
			valorisationOnglet.setData("acces", true);
206 jp_milcent 524
		}
192 jp_milcent 525
	}
526
 
527
	private StructureConservation collecterStructureConservation() {
306 jp_milcent 528
		StructureConservation conservationARetourner = null;
529
		if (conservationOnglet.getData("acces").equals(true)) {
605 jp_milcent 530
			GWT.log("Début récupé", null);
206 jp_milcent 531
			// Création de l'objet
306 jp_milcent 532
			StructureConservation conservationCollectee = (StructureConservation) conservation.cloner(new StructureConservation());
192 jp_milcent 533
 
206 jp_milcent 534
			// FORMATION
535
			if (formationMarkRGrpChp.getValue() != null) {
306 jp_milcent 536
				conservationCollectee.setFormation(formationMarkRGrpChp.getValue().getValueAttribute());
206 jp_milcent 537
			}
538
			// FORMATION INFO
306 jp_milcent 539
			conservationCollectee.setFormationInfo(formationChp.getValue());
206 jp_milcent 540
			// FORMATION INTERET
541
			if (interetFormationMarkRGrpChp.getValue() != null) {
306 jp_milcent 542
				conservationCollectee.setFormationInteret(interetFormationMarkRGrpChp.getValue().getValueAttribute());
206 jp_milcent 543
			}
544
 
545
			// STOCKAGE LOCAL
306 jp_milcent 546
			conservationCollectee.setStockageLocal(creerChaineDenormalisee(localStockageTrukCacGrpChp.getValues()));
547
			conservationCollectee.setStockageLocal("AUTRE", localStockageAutreChp.getValue());
206 jp_milcent 548
 
549
			// STOCKAGE MEUBLE
306 jp_milcent 550
			conservationCollectee.setStockageMeuble(creerChaineDenormalisee(meubleStockageTrukCacGrpChp.getValues()));
551
			conservationCollectee.setStockageMeuble("AUTRE", meubleStockageAutreChp.getValue());
206 jp_milcent 552
 
553
			// STOCKAGE PAREMETRE
306 jp_milcent 554
			conservationCollectee.setStockageParametre(creerChaineDenormalisee(parametreStockageTrukCacGrpChp.getValues()));
555
			conservationCollectee.setStockageParametre("AUTRE", parametreStockageAutreChp.getValue());
206 jp_milcent 556
 
557
			// COLLECTION COMMUNE
558
			if (collectionCommuneMarkRGrpChp.getValue() != null) {
306 jp_milcent 559
				conservationCollectee.setCollectionCommune(collectionCommuneMarkRGrpChp.getValue().getValueAttribute());
206 jp_milcent 560
			}
561
			// COLLECTION AUTRE
306 jp_milcent 562
			conservationCollectee.setCollectionAutre(creerChaineDenormalisee(collectionAutreTrukCacGrpChp.getValues()));
563
			conservationCollectee.setCollectionAutre("AUTRE", collectionAutreAutreChp.getValue());
206 jp_milcent 564
 
565
			// ACCÈS CONTROLÉ
566
			if (accesControleMarkRGrpChp.getValue() != null) {
306 jp_milcent 567
				conservationCollectee.setAccesControle(accesControleMarkRGrpChp.getValue().getValueAttribute());
206 jp_milcent 568
			}
569
 
570
			// RESTAURATION
571
			if (restaurationMarkRGrpChp.getValue() != null) {
306 jp_milcent 572
				conservationCollectee.setRestauration(restaurationMarkRGrpChp.getValue().getValueAttribute());
206 jp_milcent 573
			}
574
			// RESTAURATION OPÉRATION
306 jp_milcent 575
			conservationCollectee.setRestaurationOperation(creerChaineDenormalisee(opRestauTrukCacGrpChp.getValues()));
576
			conservationCollectee.setRestaurationOperation("AUTRE", opRestauAutreChp.getValue());
206 jp_milcent 577
 
578
			// MATERIEL CONSERVATION
579
			if (materielConservationCeRGrpChp.getValue() != null) {
306 jp_milcent 580
				conservationCollectee.setMaterielConservation(materielConservationCeRGrpChp.getValue().getValueAttribute());
428 jp_milcent 581
 
582
				// MATERIEL AUTRE
583
				conservationCollectee.setMaterielAutre(creerChaineDenormalisee(autreMaterielTrukCacGrpChp.getValues()));
584
				conservationCollectee.setMaterielAutre("AUTRE", autreMaterielAutreChp.getValue());
206 jp_milcent 585
			}
586
 
587
			// TRAITEMENT
588
			if (traitementMarkRGrpChp.getValue() != null) {
306 jp_milcent 589
				conservationCollectee.setTraitement(traitementMarkRGrpChp.getValue().getValueAttribute());
206 jp_milcent 590
			}
591
			// TRAIEMENTS
306 jp_milcent 592
			conservationCollectee.setTraitements(creerChaineDenormalisee(traitementTrukCacGrpChp.getValues()));
593
			conservationCollectee.setTraitements("AUTRE", traitementAutreChp.getValue());
206 jp_milcent 594
 
595
 
596
			// ACQUISITION COLLECTION
597
			if (collectionAcquisitionMarkRGrpChp.getValue() != null) {
306 jp_milcent 598
				conservationCollectee.setAcquisitionCollection(collectionAcquisitionMarkRGrpChp.getValue().getValueAttribute());
206 jp_milcent 599
			}
600
 
601
			// ACQUISITION ECHANTILLON
602
			if (echantillonAcquisitionMarkRGrpChp.getValue() != null) {
306 jp_milcent 603
				conservationCollectee.setAcquisitionEchantillon(echantillonAcquisitionMarkRGrpChp.getValue().getValueAttribute());
206 jp_milcent 604
			}
605
			// ACQUISITION TRAITEMENT
606
			if (traitementAcquisitionMarkRGrpChp.getValue() != null) {
306 jp_milcent 607
				conservationCollectee.setAcquisitionTraitement(traitementAcquisitionMarkRGrpChp.getValue().getValueAttribute());
206 jp_milcent 608
			}
609
			// ACQUISITION TRAITEMENT POISON
306 jp_milcent 610
			conservationCollectee.setAcquisitionTraitementPoison(creerChaineDenormalisee(poisonTraitementTrukCacGrpChp.getValues()));
611
			conservationCollectee.setAcquisitionTraitementPoison("AUTRE", poisonTraitementAutreChp.getValue());
206 jp_milcent 612
			// ACQUISITION TRAITEMENT INSECTE
306 jp_milcent 613
			conservationCollectee.setAcquisitionTraitementInsecte(creerChaineDenormalisee(insecteTraitementTrukCacGrpChp.getValues()));
614
			conservationCollectee.setAcquisitionTraitementInsecte("AUTRE", insecteTraitementAutreChp.getValue());
206 jp_milcent 615
 
616
			// Retour de l'objet
306 jp_milcent 617
			if (!conservationCollectee.comparer(conservation)) {
605 jp_milcent 618
				GWT.log("Collecte différent de Retour", null);
306 jp_milcent 619
				conservationARetourner = conservation = conservationCollectee;
620
			}
192 jp_milcent 621
		}
306 jp_milcent 622
		return conservationARetourner;
188 jp_milcent 623
	}
624
 
192 jp_milcent 625
	private void peuplerStructureConservation() {
605 jp_milcent 626
		if (mode.equals(MODE_AJOUTER)) {
627
			// Indique que l'onglet a pu être modifié pour la méthode collecter...
628
			conservationOnglet.setData("acces", true);
629
			// Initialisation de l'objet Structure
630
			conservation = new StructureConservation();
631
		}
632
		if (mode.equals(MODE_MODIFIER) && conservation != null && conservationOnglet.getData("acces").equals(false)) {
206 jp_milcent 633
			// FORMATION
634
			// Bouton oui, à toujours l'index 0 donc on teste en fonction...
491 gduche 635
			((Radio) formationMarkRGrpChp.get((conservation.getFormation().equals("1") ? 0 : 1))).setValue(true);
206 jp_milcent 636
			// FORMATION INFO
637
			formationChp.setValue(conservation.getFormationInfo());
638
			// FORMATION INTERET
491 gduche 639
			((Radio) interetFormationMarkRGrpChp.get((conservation.getFormationInteret().equals("1") ? 0 : 1))).setValue(true);
206 jp_milcent 640
 
641
			// STOCKAGE LOCAL
642
			peuplerCasesACocher(conservation.getStockageLocal(), localStockageTrukCacGrpChp,localStockageAutreChp);
643
 
644
			// STOCKAGE MEUBLE
645
			peuplerCasesACocher(conservation.getStockageMeuble(), meubleStockageTrukCacGrpChp, meubleStockageAutreChp);
646
 
647
			// STOCKAGE PAREMETRE
648
			peuplerCasesACocher(conservation.getStockageParametre(), parametreStockageTrukCacGrpChp, parametreStockageAutreChp);
649
 
650
			// COLLECTION COMMUNE
491 gduche 651
			((Radio) collectionCommuneMarkRGrpChp.get((conservation.getCollectionCommune().equals("1") ? 0 : 1))).setValue(true);
206 jp_milcent 652
			// COLLECTION AUTRE
653
			peuplerCasesACocher(conservation.getCollectionAutre(), collectionAutreTrukCacGrpChp, collectionAutreAutreChp);
654
 
655
			// ACCÈS CONTROLÉ
491 gduche 656
			((Radio) accesControleMarkRGrpChp.get((conservation.getAccesControle().equals("1") ? 0 : 1))).setValue(true);
206 jp_milcent 657
 
658
			// RESTAURATION
491 gduche 659
			((Radio) restaurationMarkRGrpChp.get((conservation.getRestauration().equals("1") ? 0 : 1))).setValue(true);
206 jp_milcent 660
			// RESTAURATION OPÉRATION
661
			peuplerCasesACocher(conservation.getRestaurationOperation(), opRestauTrukCacGrpChp, opRestauAutreChp);
662
 
663
			// MATERIEL CONSERVATION
664
			peuplerBoutonsRadio(conservation.getMaterielConservation(), materielConservationCeRGrpChp);
665
 
666
			// MATERIEL AUTRE
667
			peuplerCasesACocher(conservation.getMaterielAutre(), autreMaterielTrukCacGrpChp, autreMaterielAutreChp);
668
 
669
			// TRAITEMENT
491 gduche 670
			((Radio) traitementMarkRGrpChp.get((conservation.getTraitement().equals("1") ? 0 : 1))).setValue(true);
206 jp_milcent 671
			// TRAITEMENTS
672
			peuplerCasesACocher(conservation.getTraitements(), traitementTrukCacGrpChp, traitementAutreChp);
673
 
674
			// ACQUISITION COLLECTION
491 gduche 675
			((Radio) collectionAcquisitionMarkRGrpChp.get((conservation.getAcquisitionCollection().equals("1") ? 0 : 1))).setValue(true);
206 jp_milcent 676
 
677
			// ACQUISITION ECHANTILLON
491 gduche 678
			((Radio) echantillonAcquisitionMarkRGrpChp.get((conservation.getAcquisitionEchantillon().equals("1") ? 0 : 1))).setValue(true);
206 jp_milcent 679
 
680
			// ACQUISITION TRAITEMENT
491 gduche 681
			((Radio) traitementAcquisitionMarkRGrpChp.get((conservation.getAcquisitionTraitement().equals("1") ? 0 : 1))).setValue(true);
206 jp_milcent 682
			// ACQUISITION TRAITEMENT POISON
683
			peuplerCasesACocher(conservation.getAcquisitionTraitementPoison(), poisonTraitementTrukCacGrpChp, poisonTraitementAutreChp);
684
			// ACQUISITION TRAITEMENT INSECTE
685
			peuplerCasesACocher(conservation.getAcquisitionTraitementInsecte(), insecteTraitementTrukCacGrpChp, insecteTraitementAutreChp);
211 jp_milcent 686
 
243 jp_milcent 687
			// Indique que l'onglet a été rempli et a pu être modifié pour la méthode collecter...
688
			conservationOnglet.setData("acces", true);
206 jp_milcent 689
		}
188 jp_milcent 690
	}
691
 
192 jp_milcent 692
	private Structure collecterStructureIdentification() {
306 jp_milcent 693
		Structure structureARetourner = null;
694
		if (identificationOnglet.getData("acces").equals(true)) {
695
 
696
			Structure structureCollectee = (Structure) identification.cloner(new Structure());
697
 
698
			structureCollectee.setId(idStructureChp.getValue());
699
			structureCollectee.setNom(nomStructureChp.getValue());
277 jp_milcent 700
			// Récupération de l'identifiant du projet
701
			if (projetsCombo.getValue() != null) {
306 jp_milcent 702
				structureCollectee.setIdProjet(projetsCombo.getValue().getId());
277 jp_milcent 703
			}
211 jp_milcent 704
			// Récupération de l'acronyme (= identifiant alternatif)
306 jp_milcent 705
			structureCollectee.setIdAlternatif(null);
211 jp_milcent 706
			if (comboAcronyme.getValue() != null) {
707
				String typeAcronyme = comboAcronyme.getValue().getAbr();
708
				if (typeAcronyme == "IH") {
306 jp_milcent 709
					structureCollectee.setIdAlternatif(typeAcronyme+"##"+ihChp.getValue());
211 jp_milcent 710
				} else if (typeAcronyme == "MNHN") {
306 jp_milcent 711
					structureCollectee.setIdAlternatif(typeAcronyme+"##"+mnhnChp.getValue());
211 jp_milcent 712
				}
164 jp_milcent 713
			}
211 jp_milcent 714
			// Récupération statut de la structure
306 jp_milcent 715
			structureCollectee.setTypePublic(null);
716
			structureCollectee.setTypePrive(null);
211 jp_milcent 717
			if (comboTypeStructure.getValue() != null) {
718
				String typeStructure = comboTypeStructure.getValue().getAbr();
719
				if (typeStructure == "stpu" && comboLstpu.getValue() != null) {
306 jp_milcent 720
					structureCollectee.setTypePublic(comboLstpu.getValue().getId());
211 jp_milcent 721
				} else if (typeStructure == "stpr" && comboLstpr.getValue() != null) {
306 jp_milcent 722
					structureCollectee.setTypePrive(comboLstpr.getValue().getId());
211 jp_milcent 723
				}
164 jp_milcent 724
			}
306 jp_milcent 725
			structureCollectee.setDateFondation(dateFondationChp.getValue());
211 jp_milcent 726
 
306 jp_milcent 727
			structureCollectee.setAdresse(adrChp.getValue());
728
			structureCollectee.setCodePostal(cpChp.getValue());
729
			structureCollectee.setVille(villeChp.getValue());
730
			structureCollectee.setRegion(regionChp.getValue());
731
			structureCollectee.setPays(null);
211 jp_milcent 732
			if (comboPays.getValue() != null) {
419 jp_milcent 733
				structureCollectee.setPays(comboPays.getValue().getId());
211 jp_milcent 734
			} else if (comboPays.getRawValue() != "") {
306 jp_milcent 735
				structureCollectee.setPays(comboPays.getRawValue());
211 jp_milcent 736
			}
737
 
602 jp_milcent 738
			structureCollectee.setTelephoneFixe(telChp.getValue());
306 jp_milcent 739
			structureCollectee.setFax(faxChp.getValue());
740
			structureCollectee.setCourriel(emailChp.getValue());
741
			structureCollectee.setUrl(Structure.URL_SITE, urlChp.getValue());
211 jp_milcent 742
 
263 jp_milcent 743
			if (nbreTotalPersonneStructureChp.getValue() != null) {
306 jp_milcent 744
				structureCollectee.setNbrePersonne(nbreTotalPersonneStructureChp.getValue().intValue());
263 jp_milcent 745
			}
231 jp_milcent 746
 
306 jp_milcent 747
			if (!structureCollectee.comparer(identification)) {
748
				structureARetourner = identification = structureCollectee;
749
			}
750
 
164 jp_milcent 751
		}
306 jp_milcent 752
		return structureARetourner;
119 jpm 753
	}
754
 
211 jp_milcent 755
	private void peuplerStructureIdentification() {
295 jp_milcent 756
		if (mode.equals(MODE_AJOUTER)) {
263 jp_milcent 757
			// Indique que l'ongleta pu être modifié pour la méthode collecter...
758
			identificationOnglet.setData("acces", true);
306 jp_milcent 759
			// Initialisation de l'objet Structure
760
			identification = new Structure();
279 jp_milcent 761
			// Indication du projet sélectionné par défaut
762
			String projetCourantId = ((Mediateur) Registry.get(RegistreId.MEDIATEUR)).getProjetId();
295 jp_milcent 763
			if (projetCourantId != null && !projetCourantId.equals("0")) {
279 jp_milcent 764
				projetsCombo.setValue(projetsCombo.getStore().findModel("id_projet", projetCourantId));
765
			}
263 jp_milcent 766
		}
295 jp_milcent 767
		if (mode.equals(MODE_MODIFIER) && identification != null && identificationOnglet.getData("acces").equals(false)) {
211 jp_milcent 768
			idStructureChp.setValue(identification.getId());
769
			nomStructureChp.setValue(identification.getNom());
277 jp_milcent 770
			if (!identification.getIdProjet().equals("0")) {
771
				projetsCombo.setValue(projetsCombo.getStore().findModel("id_projet", identification.getIdProjet()));
772
			}
773
 
211 jp_milcent 774
			if (!identification.getIdAlternatif().isEmpty()) {
775
				String[] acronyme = identification.getIdAlternatif().split("##");
776
				if (acronyme[0].matches("^IH$")) {
777
					comboAcronyme.setValue(InterneValeurListe.getTypeAcronymeIH());
778
					ihChp.setValue(acronyme[1]);
779
				} else if (acronyme[0].matches("^MNHN$")) {
780
					comboAcronyme.setValue(InterneValeurListe.getTypeAcronymeMNHN());
781
					mnhnChp.setValue(acronyme[1]);
782
				}
188 jp_milcent 783
			}
211 jp_milcent 784
			if (!identification.getTypePrive().isEmpty()) {
785
				if (identification.getTypePrive().matches("^[0-9]+$")) {
786
					comboTypeStructure.setValue(InterneValeurListe.getTypePrivee());
787
					comboLstpr.setValue(comboLstpr.getStore().findModel("id_valeur", identification.getTypePrive()));
788
				}
789
			} else if (!identification.getTypePublic().isEmpty()) {
790
				if (identification.getTypePublic().matches("^[0-9]+$")) {
791
					comboTypeStructure.setValue(InterneValeurListe.getTypePublique());
792
					comboLstpu.setValue(comboLstpu.getStore().findModel("id_valeur", identification.getTypePublic()));
793
				}
172 jp_milcent 794
			}
211 jp_milcent 795
			dateFondationChp.setValue(identification.getDateFondation());
796
 
797
			adrChp.setValue(identification.getAdresse());
798
			cpChp.setValue(identification.getCodePostal());
799
			villeChp.setValue(identification.getVille());
800
			regionChp.setValue(identification.getRegion());
419 jp_milcent 801
			if (identification.getPays().matches("^[0-9]+$")) {
802
				comboPays.setValue(comboPays.getStore().findModel("id_valeur", identification.getPays()));
211 jp_milcent 803
			} else {
804
				comboPays.setRawValue(identification.getPays());
172 jp_milcent 805
			}
211 jp_milcent 806
 
602 jp_milcent 807
			telChp.setValue(identification.getTelephoneFixe());
211 jp_milcent 808
			faxChp.setValue(identification.getFax());
809
			emailChp.setValue(identification.getCourriel());
810
			urlChp.setValue(identification.getUrl("WEB"));
811
 
231 jp_milcent 812
			nbreTotalPersonneStructureChp.setValue(identification.getNbrePersonne());
813
 
243 jp_milcent 814
			// Indique que l'onglet a été rempli et a pu être modifié pour la méthode collecter...
815
			identificationOnglet.setData("acces", true);
172 jp_milcent 816
		}
156 jp_milcent 817
	}
818
 
111 jpm 819
	private TabItem creerOngletValorisation() {
820
		valorisationOnglet = new TabItem();
821
		valorisationOnglet.setText("Valorisation");
822
		valorisationOnglet.setScrollMode(Scroll.AUTO);
569 jp_milcent 823
		valorisationOnglet.setLayout(creerFormLayout(650, LabelAlign.TOP));
559 jp_milcent 824
		valorisationOnglet.setStyleAttribute("padding", "10px");
206 jp_milcent 825
		valorisationOnglet.setData("acces", false); // Permet de savoir si l'onblet a été accédé par l'utilisateur
192 jp_milcent 826
		valorisationOnglet.addListener(Events.Select, new Listener<ComponentEvent>() {
827
			public void handleEvent(ComponentEvent be) {
828
				peuplerStructureValorisation();
829
			}
830
		});
111 jpm 831
 
119 jpm 832
		actionMarkRGrpChp = creerChoixUniqueRadioGroupe("action_mark", "ouiNon");
111 jpm 833
		actionMarkRGrpChp.setFieldLabel("Avez-vous réalisé des actions de valorisation de vos collections botaniques ou avez-vous été sollicités pour la valorisation de ces collections ?");
834
		valorisationOnglet.add(actionMarkRGrpChp);
835
 
119 jpm 836
 
569 jp_milcent 837
		actionTrukCp = creerChoixMultipleCp();
111 jpm 838
		actionTrukCp.hide();
115 jpm 839
		actionTrukCacGrpChp = new CheckBoxGroup();
840
		actionTrukCacGrpChp.setFieldLabel("Si oui, lesquelles ?");
111 jpm 841
		valorisationOnglet.add(actionTrukCp);
569 jp_milcent 842
		mediateur.obtenirListeValeurEtRafraichir(this, "actionValorisation");
111 jpm 843
 
206 jp_milcent 844
		publicationChp = new TextArea();
111 jpm 845
		publicationChp.setFieldLabel("Quelques titres des ouvrages, articles scientifiques, ...");
206 jp_milcent 846
		valorisationOnglet.add(publicationChp, new FormData(550, 0));
111 jpm 847
 
569 jp_milcent 848
		autreCollectionTrukCp = creerChoixMultipleCp();
119 jpm 849
		autreCollectionTrukCacGrpChp = new CheckBoxGroup();
850
		autreCollectionTrukCacGrpChp.setFieldLabel("L'organisme dispose-t-il d'autres collections (permettant une valorisation pluridisciplinaire) ?");
111 jpm 851
		valorisationOnglet.add(autreCollectionTrukCp);
569 jp_milcent 852
		mediateur.obtenirListeValeurEtRafraichir(this, "autreCollection");
111 jpm 853
 
188 jp_milcent 854
		futureActionMarkRGrpChp = creerChoixUniqueRadioGroupe("future_action_mark", "ouiNon");
111 jpm 855
		futureActionMarkRGrpChp.setFieldLabel("Envisagez vous des actions de valorisation dans le cadre de votre politique culturelle ?");
856
		valorisationOnglet.add(futureActionMarkRGrpChp);
857
 
206 jp_milcent 858
		futureActionChp = new TextArea();
111 jpm 859
		futureActionChp.setFieldLabel("Si oui, lesquelles ?");
860
		futureActionChp.hide();
306 jp_milcent 861
		futureActionChp.addListener(Events.Hide, new Listener<BaseEvent>() {
862
 
863
			public void handleEvent(BaseEvent be) {
491 gduche 864
				((TextArea) be.getSource()).setValue("");
306 jp_milcent 865
			}
866
 
867
		});
206 jp_milcent 868
		valorisationOnglet.add(futureActionChp, new FormData(550, 0));
111 jpm 869
 
188 jp_milcent 870
		rechercheMarkRGrpChp = creerChoixUniqueRadioGroupe("recherche_mark", "ouiNon");
111 jpm 871
		rechercheMarkRGrpChp.setFieldLabel("Vos collections botaniques sont-elles utilisées pour des recherches scientifiques ?");
872
		valorisationOnglet.add(rechercheMarkRGrpChp);
873
 
569 jp_milcent 874
		provenanceRechercheTrukCp = creerChoixMultipleCp();
111 jpm 875
		provenanceRechercheTrukCp.hide();
115 jpm 876
		provenanceRechercheTrukCacGrpChp = new CheckBoxGroup();
877
		provenanceRechercheTrukCacGrpChp.setFieldLabel("Si oui, par des chercheurs (professionnels ou amateurs) de quelle provenance ?");
111 jpm 878
		valorisationOnglet.add(provenanceRechercheTrukCp);
569 jp_milcent 879
		mediateur.obtenirListeValeurEtRafraichir(this, "autreCollection");
111 jpm 880
 
569 jp_milcent 881
		typeRechercheTrukCp = creerChoixMultipleCp();
119 jpm 882
		typeRechercheTrukCp.hide();
115 jpm 883
		typeRechercheTrukCacGrpChp = new CheckBoxGroup();
884
		typeRechercheTrukCacGrpChp.setFieldLabel("Et pour quelles recherches ?");
119 jpm 885
		valorisationOnglet.add(typeRechercheTrukCp);
569 jp_milcent 886
		mediateur.obtenirListeValeurEtRafraichir(this, "typeRecherche");
111 jpm 887
 
188 jp_milcent 888
		sansMotifAccesMarkRGrpChp = creerChoixUniqueRadioGroupe("sans_motif_acces_mark", "ouiNon");
111 jpm 889
		sansMotifAccesMarkRGrpChp.setFieldLabel("Peut-on consulter vos collections botaniques sans motif de recherches scientifiques ?");
890
		valorisationOnglet.add(sansMotifAccesMarkRGrpChp);
891
 
206 jp_milcent 892
		valorisationOnglet.add(sansMotifAccesChp = new TextArea(), new FormData(550, 0));
111 jpm 893
		sansMotifAccesChp.hide();
306 jp_milcent 894
		sansMotifAccesChp.addListener(Events.Hide, new Listener<BaseEvent>() {
895
 
896
			public void handleEvent(BaseEvent be) {
491 gduche 897
				((TextArea) be.getSource()).setValue("");
306 jp_milcent 898
			}
899
 
900
		});
111 jpm 901
		sansMotifAccesChp.setFieldLabel("Si oui, quelles démarches doit-on faire pour les consulter ?");
902
 
188 jp_milcent 903
		avecMotifAccesMarkRGrpChp = creerChoixUniqueRadioGroupe("avec_motif_acces_mark", "ouiNon");
111 jpm 904
		avecMotifAccesMarkRGrpChp.setFieldLabel("Peut-on visiter vos collections botaniques avec des objectifs de recherches scientifiques ?");
905
		valorisationOnglet.add(avecMotifAccesMarkRGrpChp);
906
 
206 jp_milcent 907
		valorisationOnglet.add(avecMotifAccesChp = new TextArea(), new FormData(550, 0));
111 jpm 908
		avecMotifAccesChp.hide();
306 jp_milcent 909
		avecMotifAccesChp.addListener(Events.Hide, new Listener<BaseEvent>() {
910
 
911
			public void handleEvent(BaseEvent be) {
491 gduche 912
				((TextArea) be.getSource()).setValue("");
306 jp_milcent 913
			}
914
 
915
		});
111 jpm 916
		avecMotifAccesChp.setFieldLabel("Si oui, quelles démarches doit-on faire pour les visiter ?");
917
 
918
		return valorisationOnglet;
919
	}
920
 
108 jpm 921
	private TabItem creerOngletConservation() {
922
		conservationOnglet = new TabItem();
923
		conservationOnglet.setText("Conservation");
110 jpm 924
		conservationOnglet.setScrollMode(Scroll.AUTO);
569 jp_milcent 925
		conservationOnglet.setLayout(creerFormLayout(650, LabelAlign.TOP));
559 jp_milcent 926
		conservationOnglet.setStyleAttribute("padding", "10px");
206 jp_milcent 927
		conservationOnglet.setData("acces", false);
192 jp_milcent 928
		conservationOnglet.addListener(Events.Select, new Listener<ComponentEvent>() {
243 jp_milcent 929
			public void handleEvent(ComponentEvent be) {
206 jp_milcent 930
				peuplerStructureConservation();
279 jp_milcent 931
				conservationOnglet.layout();
192 jp_milcent 932
			}
933
		});
108 jpm 934
 
188 jp_milcent 935
		formationMarkRGrpChp = creerChoixUniqueRadioGroupe("formation_mark", "ouiNon");
936
		formationMarkRGrpChp.setFieldLabel("Le personnel s'occupant des collections a-t-il suivi des formations en conservations ?");
937
		conservationOnglet.add(formationMarkRGrpChp);
108 jpm 938
 
401 jp_milcent 939
		formationChp = new TextArea();
111 jpm 940
		formationChp.hide();
306 jp_milcent 941
		formationChp.addListener(Events.Hide, new Listener<BaseEvent>() {
942
 
943
			public void handleEvent(BaseEvent be) {
491 gduche 944
				((TextArea) be.getSource()).setValue("");
306 jp_milcent 945
			}
946
 
947
		});
111 jpm 948
		formationChp.setFieldLabel("Si oui, lesquelles ?");
108 jpm 949
		conservationOnglet.add(formationChp);
950
 
188 jp_milcent 951
		interetFormationMarkRGrpChp = creerChoixUniqueRadioGroupe("interet_formation_mark", "ouiNon");
952
		interetFormationMarkRGrpChp.setFieldLabel("Seriez vous intéressé par une formation à la conservation et à la restauration d'herbier ?");
953
		conservationOnglet.add(interetFormationMarkRGrpChp);
108 jpm 954
 
115 jpm 955
		localStockageTrukCacGrpChp = new CheckBoxGroup();
956
		localStockageTrukCacGrpChp.setFieldLabel("Avez vous des locaux spécifiques de stockage des collections botaniques ?");
569 jp_milcent 957
		localStockageTrukCp = creerChoixMultipleCp();
115 jpm 958
		conservationOnglet.add(localStockageTrukCp);
569 jp_milcent 959
		mediateur.obtenirListeValeurEtRafraichir(this, "localStockage");
108 jpm 960
 
569 jp_milcent 961
		meubleStockageTrukCp = creerChoixMultipleCp();
115 jpm 962
		meubleStockageTrukCacGrpChp = new CheckBoxGroup();
963
		meubleStockageTrukCacGrpChp.setFieldLabel("Avez vous des meubles spécifiques au stockage des collections botaniques ?");
964
		conservationOnglet.add(meubleStockageTrukCp);
569 jp_milcent 965
		mediateur.obtenirListeValeurEtRafraichir(this, "meubleStockage");
108 jpm 966
 
569 jp_milcent 967
		parametreStockageTrukCp = creerChoixMultipleCp();
115 jpm 968
		parametreStockageTrukCacGrpChp = new CheckBoxGroup();
969
		parametreStockageTrukCacGrpChp.setFieldLabel("Quels paramètres maîtrisez vous ?");
970
		conservationOnglet.add(parametreStockageTrukCp);
569 jp_milcent 971
		mediateur.obtenirListeValeurEtRafraichir(this, "parametreStockage");
109 jpm 972
 
188 jp_milcent 973
		collectionCommuneMarkRGrpChp = creerChoixUniqueRadioGroupe("collection_commune_mark", "ouiNon");
111 jpm 974
		collectionCommuneMarkRGrpChp.setFieldLabel("Les collections botaniques sont-elles conservées avec d'autres collections  dans les mêmes locaux (problème de conservation en commun) ?");
975
		conservationOnglet.add(collectionCommuneMarkRGrpChp);
109 jpm 976
 
569 jp_milcent 977
		collectionAutreTrukCp = creerChoixMultipleCp();
115 jpm 978
		collectionAutreTrukCacGrpChp = new CheckBoxGroup();
979
		collectionAutreTrukCacGrpChp.setFieldLabel("Si oui, lesquelles ?");
111 jpm 980
		collectionAutreTrukCp.hide();
981
		conservationOnglet.add(collectionAutreTrukCp);
569 jp_milcent 982
		mediateur.obtenirListeValeurEtRafraichir(this, "autreCollection");
110 jpm 983
 
188 jp_milcent 984
		accesControleMarkRGrpChp = creerChoixUniqueRadioGroupe("mark_acces_controle", "ouiNon");
115 jpm 985
		accesControleMarkRGrpChp.setFieldLabel("L'accès à vos collections botanique est-il contrôlé (ex. : manipulation réservées à des personnes compétentes) ?");
986
		conservationOnglet.add(accesControleMarkRGrpChp);
110 jpm 987
 
188 jp_milcent 988
		restaurationMarkRGrpChp = creerChoixUniqueRadioGroupe("restauration_mark", "ouiNon");
115 jpm 989
		restaurationMarkRGrpChp.setFieldLabel("Effectuez vous des opérations de restauration ou de remise en état de vos collections botaniques ?");
990
		conservationOnglet.add(restaurationMarkRGrpChp);
110 jpm 991
 
569 jp_milcent 992
		opRestauTrukCp = creerChoixMultipleCp();
115 jpm 993
		opRestauTrukCacGrpChp = new CheckBoxGroup();
994
		opRestauTrukCacGrpChp.setFieldLabel("Si oui, lesquelles ?");
111 jpm 995
		opRestauTrukCp.hide();
996
		conservationOnglet.add(opRestauTrukCp);
569 jp_milcent 997
		mediateur.obtenirListeValeurEtRafraichir(this, "opRestau");
110 jpm 998
 
188 jp_milcent 999
		// Création d'un ContentPanel vide et du groupe de bouton radio
1000
		// Le groupe de bouton radio recevra les boutons au moment de la réception des données (rafraichir()) et ser à ce moment là ajouter au ContenetPanel
569 jp_milcent 1001
		materielConservationCp = creerChoixMultipleCp();
188 jp_milcent 1002
		conservationOnglet.add(materielConservationCp);
115 jpm 1003
		materielConservationCeRGrpChp = creerChoixUniqueRadioGroupe("materiel_conservation_ce", "onep");
1004
		materielConservationCeRGrpChp.setFieldLabel("Utilisez vous du matériel de conservation ?");
1005
		materielConservationCeRGrpChp.setToolTip(new ToolTipConfig("Matériel de conservation", "matériel spécialisé pour la conservation des archives ou du patrimoine fragile. Ce matériel possède des propriétés mécaniques et chimiques qui font qu'il résiste dans le temps et que sa dégradation n'entraîne pas de dommages sur le matériel qu'il aide à conserver. Exemples : papier neutre, papier gommé, etc..."));
569 jp_milcent 1006
		mediateur.obtenirListeValeurEtRafraichir(this, "onep");
110 jpm 1007
 
569 jp_milcent 1008
		autreMaterielTrukCp = creerChoixMultipleCp();
115 jpm 1009
		autreMaterielTrukCacGrpChp = new CheckBoxGroup();
1010
		autreMaterielTrukCacGrpChp.setFieldLabel("Si non, qu'utilisez vous comme matériel ?");
428 jp_milcent 1011
		autreMaterielTrukCp.hide();
115 jpm 1012
		conservationOnglet.add(autreMaterielTrukCp);
569 jp_milcent 1013
		mediateur.obtenirListeValeurEtRafraichir(this, "autreMateriel");
110 jpm 1014
 
188 jp_milcent 1015
		traitementMarkRGrpChp = creerChoixUniqueRadioGroupe("traitement_mark", "ouiNon");
1016
		traitementMarkRGrpChp.setFieldLabel("Réalisez vous actuellement des traitements globaux contre les insectes ?");
1017
		conservationOnglet.add(traitementMarkRGrpChp);
110 jpm 1018
 
569 jp_milcent 1019
		traitementTrukCp = creerChoixMultipleCp();
115 jpm 1020
		traitementTrukCp.hide();
1021
		traitementTrukCacGrpChp = new CheckBoxGroup();
1022
		traitementTrukCacGrpChp.setFieldLabel("Si oui, lesquels ?");
111 jpm 1023
		conservationOnglet.add(traitementTrukCp);
569 jp_milcent 1024
		mediateur.obtenirListeValeurEtRafraichir(this, "insecteTraitement");
110 jpm 1025
 
188 jp_milcent 1026
		collectionAcquisitionMarkRGrpChp = creerChoixUniqueRadioGroupe("collection_acquisition_mark", "ouiNon");
1027
		collectionAcquisitionMarkRGrpChp.setFieldLabel("Actuellement, vos collections botaniques s'accroissent-elles de nouvelles acquisitions ?");
1028
		conservationOnglet.add(collectionAcquisitionMarkRGrpChp);
110 jpm 1029
 
188 jp_milcent 1030
		echantillonAcquisitionMarkRGrpChp = creerChoixUniqueRadioGroupe("echantillon_acquisition_mark", "ouiNon");
1031
		echantillonAcquisitionMarkRGrpChp.setFieldLabel("Actuellement, mettez vous en herbier de nouveaux échantillons ?");
1032
		conservationOnglet.add(echantillonAcquisitionMarkRGrpChp);
110 jpm 1033
 
115 jpm 1034
		traitementAcquisitionMarkRGrpChp = creerChoixUniqueRadioGroupe("traitement_acquisition_mark", "ouiNon");
1035
		traitementAcquisitionMarkRGrpChp.hide();
1036
		traitementAcquisitionMarkRGrpChp.setFieldLabel("Si oui, faites-vous un traitement contre les insectes avant l'intégration dans vos collections ?");
1037
		conservationOnglet.add(traitementAcquisitionMarkRGrpChp);
110 jpm 1038
 
115 jpm 1039
		traitementAcquisitionMarkLabel = new LabelField();
1040
		traitementAcquisitionMarkLabel.hide();
1041
		traitementAcquisitionMarkLabel.setFieldLabel("Si oui, lesquels ?");
1042
		conservationOnglet.add(traitementAcquisitionMarkLabel);
110 jpm 1043
 
569 jp_milcent 1044
		poisonTraitementTrukCp = creerChoixMultipleCp();
115 jpm 1045
		poisonTraitementTrukCp.hide();
1046
		poisonTraitementTrukCacGrpChp = new CheckBoxGroup();
1047
		poisonTraitementTrukCacGrpChp.setFieldLabel("Empoisonnement");
1048
		poisonTraitementTrukCacGrpChp.setLabelStyle("font-weight:normal;text-decoration:underline;");
1049
		poisonTraitementTrukCacGrpChp.setLabelSeparator("");
1050
		conservationOnglet.add(poisonTraitementTrukCp);
569 jp_milcent 1051
		mediateur.obtenirListeValeurEtRafraichir(this, "poisonTraitement");
110 jpm 1052
 
569 jp_milcent 1053
		insecteTraitementTrukCp = creerChoixMultipleCp();
115 jpm 1054
		insecteTraitementTrukCp.hide();
1055
		insecteTraitementTrukCacGrpChp = new CheckBoxGroup();
1056
		insecteTraitementTrukCacGrpChp.setLabelStyle("font-weight:normal;text-decoration:underline;");
1057
		insecteTraitementTrukCacGrpChp.setLabelSeparator("");
1058
		insecteTraitementTrukCacGrpChp.setFieldLabel("Désinsectisation");
111 jpm 1059
		conservationOnglet.add(insecteTraitementTrukCp);
569 jp_milcent 1060
		mediateur.obtenirListeValeurEtRafraichir(this, "insecteTraitement");
110 jpm 1061
 
579 jp_milcent 1062
		conservationOnglet.add(new Html("<br />"));
108 jpm 1063
		return conservationOnglet;
1064
	}
1065
 
231 jp_milcent 1066
	private void collecterStructurePersonnel() {
1067
		if (personnelOnglet.getData("acces").equals(true)) {
1068
			int nbrePersonne = personnelGrilleMagazin.getCount();
1069
			for (int i = 0; i < nbrePersonne; i++) {
1070
				StructureAPersonne personne = personnelGrilleMagazin.getAt(i);
1071
 
1072
				// Seules les lignes ajoutées ou modifiées sont prises en compte.
1073
				if (personnelGrilleMagazin.getModifiedRecords().contains(personnelGrilleMagazin.getRecord(personne)) == true) {
245 jp_milcent 1074
 
1075
					// Gestion de l'id de la structure
1076
					if (mode.equals("MODIF")) {
1077
						personne.setIdStructure(identification.getId());
1078
					}
609 jp_milcent 1079
 
1080
					// Récupération de l'id du projet de la structure qui servira aussi pour les Personnes crées dans ce formulaire
1081
					if (personne.getIdPersonne().equals("") && projetsCombo.getValue() != null) {
1082
						personne.setIdProjetPersonne(projetsCombo.getValue().getId());
1083
					}
1084
 
231 jp_milcent 1085
					// Gestion de la fonction
1086
					String fonction = personne.get("fonction");
1087
					if (fonction != null && !fonction.equals("")) {
295 jp_milcent 1088
						Valeur valeurRecherche = fonctionsCombo.getStore().findModel("nom", fonction);
231 jp_milcent 1089
						if (valeurRecherche != null) {
1090
							personne.setFonction(valeurRecherche.getId());
1091
						} else {
1092
							personne.setFonction("AUTRE", fonction);
1093
						}
602 jp_milcent 1094
					} else {
1095
						personne.setFonction("");
231 jp_milcent 1096
					}
1097
 
1098
					// Gestion de la notion de "contact"
1099
					personne.setContact(false);
1100
					if (personne.get("contact").equals(true)) {
1101
						personne.setContact(true);
1102
					}
1103
 
1104
					// Gestion du statut
1105
					String statut = personne.get("statut");
1106
					if (statut != null && !statut.equals("")) {
1107
						Valeur valeurRecherche = comboLiStatut.getStore().findModel("nom", statut);
1108
						if (valeurRecherche != null) {
1109
							personne.setStatut(valeurRecherche.getId());
1110
						} else {
1111
							personne.setStatut("AUTRE", statut);
1112
						}
602 jp_milcent 1113
					} else {
1114
						personne.setStatut("");
231 jp_milcent 1115
					}
1116
 
1117
					// Gestion du temps de travail
602 jp_milcent 1118
					personne.setBotaTravailHebdoTps(personne.get("travail").toString());
231 jp_milcent 1119
 
1120
					// Gestion du téléphone
602 jp_milcent 1121
					String telephoneFixe = personne.get("tel_fix");
1122
					personne.setTelephoneFixe(telephoneFixe);
231 jp_milcent 1123
 
1124
					// Gestion du fax
602 jp_milcent 1125
					String fax = personne.get("tel_fax");
1126
					personne.setFax(fax);
1127
 
231 jp_milcent 1128
					// Gestion du courriel
1129
					String courriel = personne.get("courriel");
602 jp_milcent 1130
					personne.setCourriel(courriel);
231 jp_milcent 1131
 
602 jp_milcent 1132
					// Gestion de la spécialité
231 jp_milcent 1133
					String specialite = personne.get("specialite");
602 jp_milcent 1134
					personne.setSpecialite(specialite);
231 jp_milcent 1135
 
1136
					// Ajout de la personne dans la liste correspondant à son état (ajouté ou modifié)
263 jp_milcent 1137
					if (personne.get("etat") != null && personne.get("etat").equals("A")) {// Une personne ajoutée
231 jp_milcent 1138
						personnelAjoute.put(""+i, personne);
1139
					} else {// Une personne modifiée
1140
						personnelModifie.put(personne.getId(), personne);
1141
					}
245 jp_milcent 1142
				} else {
1143
					GWT.log("Personne non modifiées : "+personne.getPrenom()+" "+personne.getNom(), null);
231 jp_milcent 1144
				}
1145
			}
1146
		}
1147
	}
211 jp_milcent 1148
 
1149
	private void peuplerStructurePersonnel() {
295 jp_milcent 1150
		if (mode.equals(MODE_MODIFIER) && personnel != null) {
213 jp_milcent 1151
			ArrayList<StructureAPersonne> personnes = new ArrayList<StructureAPersonne>();
1152
			for (Iterator<String> it = personnel.keySet().iterator(); it.hasNext();) {
1153
				String index = it.next();
231 jp_milcent 1154
 
1155
				// Gestion de la fonction
295 jp_milcent 1156
				if (fonctionsMagazin != null && !((String) personnel.get(index).getFonction()).startsWith("AUTRE##")) {
1157
					if (fonctionsMagazin.findModel("id_valeur", personnel.get(index).getFonction()) != null) {
1158
						personnel.get(index).set("fonction", fonctionsMagazin.findModel("id_valeur", personnel.get(index).getFonction()).getNom());
243 jp_milcent 1159
					}
213 jp_milcent 1160
				} else {
214 jp_milcent 1161
					personnel.get(index).set("fonction", personnel.get(index).getFonction().replaceFirst("AUTRE##", ""));
213 jp_milcent 1162
				}
231 jp_milcent 1163
 
1164
				// Gestion de la notion de "contact"
1165
				personnel.get(index).set("contact", (personnel.get(index).getContact().equals("1") ? true : false));
1166
 
1167
				// Gestion du statut
1168
				if (magazinLiStatut != null && ((String) personnel.get(index).getStatut()).matches("^[0-9]+$")) {
1169
					personnel.get(index).set("statut", magazinLiStatut.findModel("id_valeur", personnel.get(index).getStatut()).getNom());
1170
				} else {
1171
					personnel.get(index).set("statut", personnel.get(index).getStatut().replaceFirst("AUTRE##", ""));
1172
				}
1173
 
1174
				// Gestion du temps de travail
1175
				String tps = personnel.get(index).getBotaTravailHebdoTps();
1176
				personnel.get(index).set("travail", (tps.matches("^[0-9]+$")  ? Integer.parseInt(tps) : 0));
1177
 
213 jp_milcent 1178
				personnes.add(personnel.get(index));
1179
			}
211 jp_milcent 1180
			personnelGrilleMagazin.removeAll();
213 jp_milcent 1181
			personnelGrilleMagazin.add(personnes);
231 jp_milcent 1182
 
214 jp_milcent 1183
			// Nous vidons la variable personnel une fois qu'elle a remplie la grille
1184
			personnel = null;
211 jp_milcent 1185
		}
1186
	}
1187
 
103 jpm 1188
	private TabItem creerOngletPersonnel() {
306 jp_milcent 1189
		// Création des objets contenant les manipulations de la grille
1190
		personnelModifie = new StructureAPersonneListe();
1191
		personnelAjoute = new StructureAPersonneListe();
1192
		personnelSupprime = new StructureAPersonneListe();
1193
 
108 jpm 1194
		personnelOnglet = new TabItem();
103 jpm 1195
		personnelOnglet.setText("Personnel");
110 jpm 1196
		personnelOnglet.setScrollMode(Scroll.AUTO);
569 jp_milcent 1197
		personnelOnglet.setLayout(creerFormLayout(400, LabelAlign.LEFT));
559 jp_milcent 1198
		identificationOnglet.setStyleAttribute("padding", "10px");
211 jp_milcent 1199
		personnelOnglet.setData("acces", false); // Permet de savoir si l'onblet a été accédé par l'utilisateur
1200
		personnelOnglet.addListener(Events.Select, new Listener<ComponentEvent>() {
1201
			public void handleEvent(ComponentEvent be) {
1202
				// Indique que l'onglet a été rempli et a pu être modifié pour la méthode collecter...
1203
				personnelOnglet.setData("acces", true);
306 jp_milcent 1204
 
609 jp_milcent 1205
				// Rafraichissement du contenu de la grille du personnel
1206
				if (mode.equals(MODE_AJOUTER)) {
1207
					rafraichirPersonnel();
1208
				}
211 jp_milcent 1209
			}
1210
		});
103 jpm 1211
 
211 jp_milcent 1212
		ContentPanel cp = new ContentPanel();
231 jp_milcent 1213
		cp.setHeading("Personnes travaillant sur les collections");
569 jp_milcent 1214
		cp.setIcon(Images.ICONES.table());
231 jp_milcent 1215
		//cp.setScrollMode(Scroll.AUTO);
1216
		cp.setLayout(new FitLayout());
559 jp_milcent 1217
		//cp.setWidth(1250);
1218
		//cp.setHeight("100%");
231 jp_milcent 1219
		cp.setFrame(true);
103 jpm 1220
 
231 jp_milcent 1221
		personnelGrilleMagazin = new ListStore<StructureAPersonne>();
245 jp_milcent 1222
		personnelGrilleMagazin.addListener(Store.Add, new Listener<StoreEvent<StructureAPersonne>>() {
1223
 
1224
			public void handleEvent(StoreEvent<StructureAPersonne> ce) {
1225
				// Activation du bouton supprimer si la grille contient un élément
1226
				if (grillePersonnel.getStore().getCount() > 0) {
1227
					supprimerPersonnelBtn.enable();
1228
				}
1229
 
1230
			}
1231
		});
231 jp_milcent 1232
 
1233
		RowNumberer r = new RowNumberer();
1234
 
102 jpm 1235
		List<ColumnConfig> configs = new ArrayList<ColumnConfig>();
1236
 
231 jp_milcent 1237
		GridSelectionModel<StructureAPersonne> sm = new GridSelectionModel<StructureAPersonne>();
1238
		configs.add(r);
103 jpm 1239
 
214 jp_milcent 1240
		ColumnConfig column = new ColumnConfig("fonction", "Fonction", 150);
295 jp_milcent 1241
		fonctionsMagazin = new ListStore<Valeur>();
103 jpm 1242
 
295 jp_milcent 1243
		fonctionsCombo = new ComboBox<Valeur>();
1244
		fonctionsCombo.setTriggerAction(TriggerAction.ALL);
1245
		fonctionsCombo.setEditable(true);
1246
		fonctionsCombo.setDisplayField("nom");
1247
		fonctionsCombo.setStore(fonctionsMagazin);
569 jp_milcent 1248
		mediateur.obtenirListeValeurEtRafraichir(this, "fonction");
103 jpm 1249
 
295 jp_milcent 1250
		fonctionEditor = new CellEditor(fonctionsCombo) {
103 jpm 1251
			@Override
211 jp_milcent 1252
			public Object preProcessValue(Object valeur) {
295 jp_milcent 1253
				Valeur retour = null;
1254
 
1255
				if (valeur != null) {
1256
					String chaineTransmise = (String) valeur;
1257
					if (fonctionsMagazin.getCount() == 0 && fonctionsListe != null) {
1258
						fonctionsMagazin.add(fonctionsListe);
1259
					}
1260
					if (fonctionsMagazin.findModel("id_valeur", chaineTransmise) != null) {
1261
						retour = fonctionsMagazin.findModel("id_valeur", chaineTransmise);
1262
					} else if (fonctionsMagazin.findModel("nom", chaineTransmise) != null) {
1263
						retour = fonctionsMagazin.findModel("nom", chaineTransmise);
213 jp_milcent 1264
					} else {
295 jp_milcent 1265
						retour = new Valeur("", chaineTransmise, "", "");
213 jp_milcent 1266
					}
211 jp_milcent 1267
				}
213 jp_milcent 1268
 
211 jp_milcent 1269
				return retour;
103 jpm 1270
			}
1271
 
1272
			@Override
211 jp_milcent 1273
			public Object postProcessValue(Object valeur) {
295 jp_milcent 1274
				String retour = "";
1275
				Valeur fonctionTrouvee = null;
211 jp_milcent 1276
				if (valeur == null) {
295 jp_milcent 1277
					String valeurBrute = this.getField().getRawValue();
1278
					if (fonctionsMagazin.getCount() == 0 && fonctionsListe != null) {
1279
						fonctionsMagazin.add(fonctionsListe);
213 jp_milcent 1280
					}
295 jp_milcent 1281
					if (valeurBrute.matches("^[0-9]+$") && fonctionsMagazin.findModel("id_valeur", valeurBrute) != null) {
1282
						fonctionTrouvee = fonctionsMagazin.findModel("id_valeur", valeurBrute);
1283
					} else {
1284
						retour = valeurBrute;
211 jp_milcent 1285
					}
295 jp_milcent 1286
				} else if (valeur instanceof Valeur) {
1287
					fonctionTrouvee = (Valeur) valeur;
103 jpm 1288
				}
295 jp_milcent 1289
 
1290
				if (fonctionTrouvee != null) {
1291
					retour = fonctionTrouvee.getNom();
1292
				}
1293
 
1294
				return retour;
211 jp_milcent 1295
			}
103 jpm 1296
		};
1297
		column.setEditor(fonctionEditor);
102 jpm 1298
		configs.add(column);
1299
 
243 jp_milcent 1300
		column = new ColumnConfig("prenom", "Prénom", 100);
103 jpm 1301
		TextField<String> prenomChp = new TextField<String>();
1302
		prenomChp.setAllowBlank(false);
1303
		prenomChp.getMessages().setBlankText("Ce champ est obligatoire.");
1304
		prenomChp.setAutoValidate(true);
1305
		column.setEditor(new CellEditor(prenomChp));
102 jpm 1306
		configs.add(column);
1307
 
243 jp_milcent 1308
		column = new ColumnConfig("nom", "Nom", 100);
103 jpm 1309
		TextField<String> nomChp = new TextField<String>();
1310
		nomChp.setAllowBlank(false);
1311
		nomChp.getMessages().setBlankText("Ce champ est obligatoire.");
1312
		nomChp.setAutoValidate(true);
1313
		column.setEditor(new CellEditor(nomChp));
102 jpm 1314
		configs.add(column);
1315
 
602 jp_milcent 1316
		column = new ColumnConfig("tel_fix", "Téléphone fixe", 100);
103 jpm 1317
		TextField<String> telChp = new TextField<String>();
1318
		column.setEditor(new CellEditor(telChp));
102 jpm 1319
		configs.add(column);
1320
 
602 jp_milcent 1321
		column = new ColumnConfig("tel_fax", "Fax", 100);
103 jpm 1322
		TextField<String> faxChp = new TextField<String>();
1323
		column.setEditor(new CellEditor(faxChp));
102 jpm 1324
		configs.add(column);
1325
 
214 jp_milcent 1326
		column = new ColumnConfig("courriel", "Courriel principal", 200);
103 jpm 1327
		TextField<String> emailChp = new TextField<String>();
1328
		column.setEditor(new CellEditor(emailChp));
102 jpm 1329
		configs.add(column);
1330
 
103 jpm 1331
		magazinLiStatut = new ListStore<Valeur>();
1332
		magazinLiStatut.add(new ArrayList<Valeur>());
1333
 
1334
		comboLiStatut = new ComboBox<Valeur>();
1335
		comboLiStatut.setTriggerAction(TriggerAction.ALL);
1336
		comboLiStatut.setEditable(false);
214 jp_milcent 1337
		comboLiStatut.disableTextSelection(true);
103 jpm 1338
		comboLiStatut.setDisplayField("nom");
1339
		comboLiStatut.setStore(magazinLiStatut);
569 jp_milcent 1340
		mediateur.obtenirListeValeurEtRafraichir(this, "statut");
103 jpm 1341
 
1342
		CellEditor statutEditor = new CellEditor(comboLiStatut) {
1343
			@Override
1344
			public Object preProcessValue(Object value) {
1345
				if (value == null) {
1346
					return value;
1347
				}
1348
				return comboLiStatut.getStore().findModel("nom", (String) value);
1349
			}
1350
 
1351
			@Override
1352
			public Object postProcessValue(Object value) {
1353
				if (value == null) {
1354
					return value;
1355
				}
1356
				return ((Valeur) value).get("nom");
1357
			}
214 jp_milcent 1358
		};
103 jpm 1359
		column = new ColumnConfig("statut", "Statut", 100);
1360
		column.setEditor(statutEditor);
102 jpm 1361
		configs.add(column);
1362
 
211 jp_milcent 1363
		column = new ColumnConfig("travail", "Temps travail", 100);
103 jpm 1364
		column.setNumberFormat(NumberFormat.getFormat("##"));
1365
		NumberField tpsWChp = new NumberField();
1366
		tpsWChp.setFormat(NumberFormat.getFormat("##"));
1367
		tpsWChp.setToolTip("Ce champ doit contenir un nombre");
1368
		column.setEditor(new CellEditor(tpsWChp));
1369
		configs.add(column);
1370
 
211 jp_milcent 1371
		column = new ColumnConfig("specialite", "Spécialité principale", 150);
103 jpm 1372
		TextField<String> speChp = new TextField<String>();
1373
		column.setEditor(new CellEditor(speChp));
1374
		configs.add(column);
1375
 
211 jp_milcent 1376
		CheckColumnConfig checkColumn = new CheckColumnConfig("contact", "Contact ?", 60);
102 jpm 1377
		configs.add(checkColumn);
1378
 
1379
		ToolBar toolBar = new ToolBar();
103 jpm 1380
 
491 gduche 1381
		Button ajouterPersonnelBtn = new Button("Ajouter");
569 jp_milcent 1382
		ajouterPersonnelBtn.setIcon(Images.ICONES.vcardAjouter());
491 gduche 1383
		ajouterPersonnelBtn.addSelectionListener(new SelectionListener<ButtonEvent>() {
103 jpm 1384
			@Override
491 gduche 1385
			public void componentSelected(ButtonEvent ce) {
295 jp_milcent 1386
				StructureAPersonne membreDuPersonnel = new StructureAPersonne("", StructureAPersonne.ROLE_EQUIPE, StructureAPersonne.ETAT_AJOUTE);
1387
				ajouterMembreAGrillePersonnel(membreDuPersonnel);
103 jpm 1388
			}
1389
		});
1390
		toolBar.add(ajouterPersonnelBtn);
243 jp_milcent 1391
 
103 jpm 1392
		toolBar.add(new SeparatorToolItem());
243 jp_milcent 1393
 
491 gduche 1394
		supprimerPersonnelBtn = new Button("Supprimer");
569 jp_milcent 1395
		supprimerPersonnelBtn.setIcon(Images.ICONES.vcardSupprimer());
491 gduche 1396
		supprimerPersonnelBtn.addSelectionListener(new SelectionListener<ButtonEvent>() {
103 jpm 1397
			@Override
491 gduche 1398
			public void componentSelected(ButtonEvent ce) {
231 jp_milcent 1399
				StructureAPersonne personne = grillePersonnel.getSelectionModel().getSelectedItem();
1400
				if (personne != null) {
1401
					// Ajout de la personne supprimée à la liste
243 jp_milcent 1402
					if (personne.getIdPersonne() != null && !personne.getIdPersonne().equals("")) {
231 jp_milcent 1403
						personnelSupprime.put(personne.getId(), personne);
1404
					}
1405
 
1406
					// Suppression de l'enregistrement de la grille
1407
					grillePersonnel.getStore().remove(personne);
1408
 
1409
					// Désactivation du bouton supprimer si la grille contient plus d'élément
1410
					if (grillePersonnel.getStore().getCount() == 0) {
491 gduche 1411
						//TODO : check : Item -> component
1412
						ce.getComponent().disable();
231 jp_milcent 1413
					}
1414
				}
103 jpm 1415
			}
1416
		});
243 jp_milcent 1417
		toolBar.add(supprimerPersonnelBtn);
1418
 
1419
		toolBar.add(new SeparatorToolItem());
1420
 
491 gduche 1421
		Button rafraichirPersonnelBtn = new Button("Rafraichir");
569 jp_milcent 1422
		rafraichirPersonnelBtn.setIcon(Images.ICONES.rafraichir());
491 gduche 1423
		rafraichirPersonnelBtn.addSelectionListener(new SelectionListener<ButtonEvent>() {
243 jp_milcent 1424
			@Override
491 gduche 1425
			public void componentSelected(ButtonEvent ce) {
243 jp_milcent 1426
				rafraichirPersonnel();
1427
			}
1428
		});
1429
		toolBar.add(rafraichirPersonnelBtn);
1430
 
1431
		toolBar.add(new SeparatorToolItem());
1432
 
1433
		personneExistanteMagazin = new ListStore<Personne>();
1434
		personneExistanteMagazin.add(new ArrayList<Personne>());
1435
 
245 jp_milcent 1436
		personneExistanteCombo = new ComboBox<Personne>();
243 jp_milcent 1437
		personneExistanteCombo.setWidth(200);
1438
		personneExistanteCombo.setEmptyText("Chercher une personne existante...");
1439
		personneExistanteCombo.setTriggerAction(TriggerAction.ALL);
1440
		personneExistanteCombo.setEditable(true);
1441
		personneExistanteCombo.setDisplayField("fmt_nom_complet");
1442
		personneExistanteCombo.setStore(personneExistanteMagazin);
1443
		personneExistanteCombo.addKeyListener(new KeyListener() {
1444
 
1445
			public void componentKeyUp(ComponentEvent ce) {
1446
				if (!ce.isNavKeyPress() && personneExistanteCombo.getRawValue() != null && personneExistanteCombo.getRawValue().length() > 0) {
1447
					rafraichirPersonneExistante(personneExistanteCombo.getRawValue());
1448
				}
1449
			}
1450
 
1451
		});
1452
 
1453
		// TODO : dans GXT 2.0 plus besoin de l'adaptateur, on peut ajouter la combobox directement sur la toolbar
491 gduche 1454
			//> CHECK
1455
		toolBar.add(personneExistanteCombo);
243 jp_milcent 1456
 
491 gduche 1457
		Button ajouterPersonneExistanteBtn = new Button("Ajouter");
1458
		ajouterPersonneExistanteBtn.addSelectionListener(new SelectionListener<ButtonEvent>() {
243 jp_milcent 1459
			@Override
491 gduche 1460
			public void componentSelected(ButtonEvent ce) {
243 jp_milcent 1461
				Personne personneExistante = personneExistanteCombo.getValue();
1462
 
295 jp_milcent 1463
				if (personneExistante != null) {
1464
					StructureAPersonne membreDuPersonnel = new StructureAPersonne("", StructureAPersonne.ROLE_EQUIPE, StructureAPersonne.ETAT_AJOUTE);
1465
					membreDuPersonnel.setIdPersonne(personneExistante.getId());
609 jp_milcent 1466
					membreDuPersonnel.setIdProjetPersonne(personneExistante.getIdProjet());
295 jp_milcent 1467
					membreDuPersonnel.setNom(personneExistante.getNom());
1468
					membreDuPersonnel.setPrenom(personneExistante.getPrenom());
1469
					membreDuPersonnel.setTelephone(personneExistante.getTelephone());
603 jp_milcent 1470
					membreDuPersonnel.setCourriel(personneExistante.selectionnerCourriel(1));
1471
					membreDuPersonnel.setSpecialite(personneExistante.afficherSpecialite());
295 jp_milcent 1472
 
1473
					ajouterMembreAGrillePersonnel(membreDuPersonnel);
1474
				}
243 jp_milcent 1475
			}
1476
		});
1477
		toolBar.add(ajouterPersonneExistanteBtn);
1478
 
102 jpm 1479
		cp.setTopComponent(toolBar);
1480
 
1481
		ColumnModel cm = new ColumnModel(configs);
1482
 
559 jp_milcent 1483
		grillePersonnel = new EditorGrid<StructureAPersonne>(personnelGrilleMagazin, cm);
1484
		grillePersonnel.setHeight("100%");
103 jpm 1485
		grillePersonnel.setBorders(true);
1486
		grillePersonnel.setSelectionModel(sm);
1487
		grillePersonnel.addPlugin(checkColumn);
231 jp_milcent 1488
		grillePersonnel.addPlugin(r);
1489
		grillePersonnel.getView().setForceFit(true);
211 jp_milcent 1490
  		grillePersonnel.setAutoExpandColumn("specialite");
1491
  		grillePersonnel.setStripeRows(true);
1492
  		grillePersonnel.setTrackMouseOver(true);
551 jp_milcent 1493
  		grillePersonnel.addListener(Events.Change, new Listener<GridEvent<StructureAPersonne>>() {
214 jp_milcent 1494
 
551 jp_milcent 1495
			public void handleEvent(GridEvent<StructureAPersonne> ge) {
231 jp_milcent 1496
				// CommitChanges évite que la grille perde la valeur des combobox éditables
1497
				personnelGrilleMagazin.commitChanges();
214 jp_milcent 1498
			}
1499
 
1500
  		});
295 jp_milcent 1501
  		cp.add(grillePersonnel);
231 jp_milcent 1502
		personnelOnglet.add(cp);
306 jp_milcent 1503
 
231 jp_milcent 1504
		return personnelOnglet;
1505
	}
102 jpm 1506
 
110 jpm 1507
	private TabItem creerOngletIdentification() {
1508
		//+-----------------------------------------------------------------------------------------------------------+
1509
		// Onlget formulaire IDENTIFICATION
192 jp_milcent 1510
		identificationOnglet = new TabItem();
1511
		identificationOnglet.setId("identification");
1512
		identificationOnglet.setText("Identification");
110 jpm 1513
		identificationOnglet.setLayout(new FormLayout());
559 jp_milcent 1514
		identificationOnglet.setStyleAttribute("padding", "10px");
295 jp_milcent 1515
		identificationOnglet.setScrollMode(Scroll.AUTO);
211 jp_milcent 1516
		identificationOnglet.setData("acces", false);
1517
		identificationOnglet.addListener(Events.Select, new Listener<ComponentEvent>() {
1518
			public void handleEvent(ComponentEvent be) {
1519
				peuplerStructureIdentification();
279 jp_milcent 1520
				identificationOnglet.layout();
211 jp_milcent 1521
			}
1522
		});
1523
 
110 jpm 1524
		//+-----------------------------------------------------------------------------------------------------------+
172 jp_milcent 1525
		// Champs cachés
1526
		idStructureChp = new HiddenField<String>();
1527
 
1528
		//+-----------------------------------------------------------------------------------------------------------+
110 jpm 1529
		// Fieldset IDENTITÉ
1530
		FieldSet fieldSetIdentite = new FieldSet();
1531
		fieldSetIdentite.setHeading("Identité");
1532
		fieldSetIdentite.setCollapsible(true);
569 jp_milcent 1533
		fieldSetIdentite.setLayout(creerFormLayout(120, LabelAlign.LEFT));
110 jpm 1534
 
119 jpm 1535
		nomStructureChp = new TextField<String>();
277 jp_milcent 1536
		nomStructureChp.setTabIndex(tabIndex++);
110 jpm 1537
		nomStructureChp.setFieldLabel("Nom de la structure");
1538
		nomStructureChp.setAllowBlank(false);
1539
		nomStructureChp.getMessages().setBlankText("Ce champ est obligatoire.");
1540
		fieldSetIdentite.add(nomStructureChp, new FormData(450, 0));
1541
 
366 jp_milcent 1542
		mediateur.selectionnerProjets(this);
277 jp_milcent 1543
		projetsMagazin = new ListStore<Projet>();
1544
		projetsCombo = new ComboBox<Projet>();
1545
		projetsCombo.setTabIndex(tabIndex++);
1546
		projetsCombo.setFieldLabel("Projet");
1547
		projetsCombo.setLabelSeparator("");
1548
		projetsCombo.setDisplayField("nom");
1549
		projetsCombo.setEditable(false);
1550
		projetsCombo.setTriggerAction(TriggerAction.ALL);
1551
		projetsCombo.setStore(projetsMagazin);
1552
		fieldSetIdentite.add(projetsCombo, new FormData(450, 0));
1553
 
110 jpm 1554
		// Création du sous-formulaire : Acronyme
1555
		LayoutContainer ligne = new LayoutContainer();
1556
		ligne.setLayout(new ColumnLayout());
564 jp_milcent 1557
		ligne.setSize(600, -1);
1558
 
110 jpm 1559
		LayoutContainer gauche = new LayoutContainer();
569 jp_milcent 1560
		gauche.setLayout(creerFormLayout(120, LabelAlign.LEFT));
110 jpm 1561
		LayoutContainer droite = new LayoutContainer();
569 jp_milcent 1562
		droite.setLayout(creerFormLayout(10, LabelAlign.LEFT));
110 jpm 1563
 
1564
		ListStore<InterneValeur> acronymes = new ListStore<InterneValeur>();
1565
		acronymes.add(InterneValeurListe.getTypeAcronyme());
1566
 
133 jpm 1567
		comboAcronyme = new ComboBox<InterneValeur>();
277 jp_milcent 1568
		comboAcronyme.setTabIndex(tabIndex++);
110 jpm 1569
		comboAcronyme.setEmptyText("Sélectioner un type d'acronyme...");
564 jp_milcent 1570
		comboAcronyme.setFieldLabel("Type d'acronyme");
110 jpm 1571
		comboAcronyme.setDisplayField("nom");
1572
		comboAcronyme.setStore(acronymes);
1573
		comboAcronyme.setEditable(false);
1574
		comboAcronyme.setTypeAhead(true);
1575
		comboAcronyme.setTriggerAction(TriggerAction.ALL);
1576
		comboAcronyme.addSelectionChangedListener(new SelectionChangedListener<InterneValeur>() {
1577
			@Override
1578
			public void selectionChanged(SelectionChangedEvent<InterneValeur> se) {
1579
				String acronymeAbr = se.getSelectedItem().getAbr();
1580
				if (acronymeAbr.equals("IH")) {
1581
					mnhnChp.hide();
1582
					ihChp.show();
1583
				} else if (acronymeAbr.equals("MNHN")) {
1584
					ihChp.hide();
1585
					mnhnChp.show();
1586
				} else if (acronymeAbr.equals("")) {
1587
					ihChp.hide();
1588
					mnhnChp.hide();
1589
					comboAcronyme.clearSelections();
1590
				}
1591
			}
1592
        });
564 jp_milcent 1593
		gauche.add(comboAcronyme, new FormData("95%"));
110 jpm 1594
 
1595
		ihChp = new TextField<String>();
277 jp_milcent 1596
		ihChp.setTabIndex(tabIndex++);
110 jpm 1597
		ihChp.setLabelSeparator("");
1598
		ihChp.setToolTip("Index Herbariorum : herbier de plus de 5000 échantillons");
1599
		ihChp.hide();
564 jp_milcent 1600
		droite.add(ihChp, new FormData("95%"));
110 jpm 1601
 
133 jpm 1602
		mnhnChp = new TextField<String>();
277 jp_milcent 1603
		mnhnChp.setTabIndex(tabIndex++);
110 jpm 1604
		mnhnChp.setLabelSeparator("");
1605
		mnhnChp.setToolTip("Acronyme MNHN : herbier de moins de 5000 échantillons");
1606
		mnhnChp.hide();
564 jp_milcent 1607
		droite.add(mnhnChp, new FormData("95%"));
110 jpm 1608
 
564 jp_milcent 1609
		ligne.add(gauche, new ColumnData(.5));
1610
		ligne.add(droite, new ColumnData(.5));
110 jpm 1611
		fieldSetIdentite.add(ligne);
1612
 
1613
		// Création du sous-formulaire : Type de Structure
1614
		LayoutContainer ligneTs = new LayoutContainer();
1615
		ligneTs.setLayout(new ColumnLayout());
564 jp_milcent 1616
		ligneTs.setSize(600, -1);
110 jpm 1617
 
1618
		LayoutContainer gaucheTs = new LayoutContainer();
569 jp_milcent 1619
		gaucheTs.setLayout(creerFormLayout(120, LabelAlign.LEFT));
110 jpm 1620
 
1621
		LayoutContainer droiteTs = new LayoutContainer();
569 jp_milcent 1622
		droiteTs.setLayout(creerFormLayout(10, LabelAlign.LEFT));
110 jpm 1623
 
1624
		ListStore<InterneValeur> typesStructure = new ListStore<InterneValeur>();
1625
		typesStructure.add(InterneValeurListe.getTypeStructure());
1626
 
133 jpm 1627
		comboTypeStructure = new ComboBox<InterneValeur>();
277 jp_milcent 1628
		comboTypeStructure.setTabIndex(tabIndex++);
110 jpm 1629
		comboTypeStructure.setEmptyText("Sélectioner un type de structure...");
1630
		comboTypeStructure.setFieldLabel("Statut des structures");
1631
		comboTypeStructure.setDisplayField("nom");
1632
		comboTypeStructure.setStore(typesStructure);
1633
		comboTypeStructure.setEditable(false);
1634
		comboTypeStructure.setTypeAhead(true);
1635
		comboTypeStructure.setTriggerAction(TriggerAction.ALL);
1636
		comboTypeStructure.addSelectionChangedListener(new SelectionChangedListener<InterneValeur>() {
1637
			@Override
1638
			public void selectionChanged(SelectionChangedEvent<InterneValeur> se) {
1639
				String typeAbr = se.getSelectedItem().getAbr();
1640
				if (typeAbr.equals("stpu")) {
1641
					comboLstpr.hide();
1642
					comboLstpu.show();
1643
				} else if (typeAbr.equals("stpr")) {
1644
					comboLstpu.hide();
1645
					comboLstpr.show();
1646
				} else if (typeAbr.equals("")) {
1647
					comboLstpr.hide();
1648
					comboLstpu.hide();
1649
					comboTypeStructure.clearSelections();
1650
				}
1651
			}
1652
        });
564 jp_milcent 1653
		gaucheTs.add(comboTypeStructure, new FormData("95%"));
110 jpm 1654
 
1655
		magazinLstpu = new ListStore<Valeur>();
133 jpm 1656
		comboLstpu = new ComboBox<Valeur>();
277 jp_milcent 1657
		comboLstpu.setTabIndex(tabIndex++);
110 jpm 1658
		//comboLstpu.setFieldLabel("Statut des structures publiques");
1659
		comboLstpu.setLabelSeparator("");
1660
		comboLstpu.setDisplayField("nom");
1661
		comboLstpu.setEditable(false);
1662
		comboLstpu.setTriggerAction(TriggerAction.ALL);
1663
		comboLstpu.setStore(magazinLstpu);
1664
		comboLstpu.hide();
564 jp_milcent 1665
		droiteTs.add(comboLstpu, new FormData("95%"));
569 jp_milcent 1666
		mediateur.obtenirListeValeurEtRafraichir(this, "stpu");
110 jpm 1667
 
1668
		magazinLstpr = new ListStore<Valeur>();
133 jpm 1669
		comboLstpr = new ComboBox<Valeur>();
277 jp_milcent 1670
		comboLstpr.setTabIndex(tabIndex++);
110 jpm 1671
		//comboLstpr.setFieldLabel("Statut des structures privées");
1672
		comboLstpr.setLabelSeparator("");
1673
		comboLstpr.setDisplayField("nom");
1674
		comboLstpr.setEditable(false);
1675
		comboLstpr.setTriggerAction(TriggerAction.ALL);
1676
		comboLstpr.setStore(magazinLstpr);
1677
		comboLstpr.hide();
564 jp_milcent 1678
		droiteTs.add(comboLstpr, new FormData("95%"));
569 jp_milcent 1679
		mediateur.obtenirListeValeurEtRafraichir(this, "stpr");
110 jpm 1680
 
1681
		ligneTs.add(gaucheTs, new ColumnData(0.5));
1682
		ligneTs.add(droiteTs, new ColumnData(0.5));
1683
		fieldSetIdentite.add(ligneTs);
1684
 
119 jpm 1685
		dateFondationChp = new DateField();
277 jp_milcent 1686
		dateFondationChp.setTabIndex(tabIndex++);
110 jpm 1687
		dateFondationChp.setFieldLabel("Date de fondation");
1688
		dateFondationChp.getPropertyEditor().getFormat();
1689
		dateFondationChp.getPropertyEditor().setFormat(DateTimeFormat.getFormat("dd/MM/yyyy"));
1690
		dateFondationChp.getMessages().setInvalidText("La valeur saisie n'est pas une date valide. La date doit être au format «jj/mm/aaaa».");
1691
		fieldSetIdentite.add(dateFondationChp);
1692
 
564 jp_milcent 1693
		nbreTotalPersonneStructureChp = new NumberField();
231 jp_milcent 1694
		nbreTotalPersonneStructureChp.setFieldLabel("Nombre de personne travaillant dans l'institution");
1695
		nbreTotalPersonneStructureChp.setFormat(NumberFormat.getFormat("#"));
1696
		nbreTotalPersonneStructureChp.setToolTip("Ce champ doit contenir un nombre");
1697
		fieldSetIdentite.add(nbreTotalPersonneStructureChp);
1698
 
279 jp_milcent 1699
		identificationOnglet.add(fieldSetIdentite);
231 jp_milcent 1700
 
110 jpm 1701
		//+-----------------------------------------------------------------------------------------------------------+
1702
		// Fieldset ADRESSE
1703
		LayoutContainer principalFdAdresse = new LayoutContainer();
1704
		principalFdAdresse.setLayout(new ColumnLayout());
564 jp_milcent 1705
		principalFdAdresse.setSize(600, -1);
110 jpm 1706
 
1707
		LayoutContainer gaucheFdAdresse = new LayoutContainer();
569 jp_milcent 1708
		gaucheFdAdresse.setLayout(creerFormLayout(null, LabelAlign.LEFT));
110 jpm 1709
 
1710
		LayoutContainer droiteFdAdresse = new LayoutContainer();
569 jp_milcent 1711
		droiteFdAdresse.setLayout(creerFormLayout(null, LabelAlign.LEFT));
110 jpm 1712
 
1713
		FieldSet fieldSetAdresse = new FieldSet();
1714
		fieldSetAdresse.setHeading("Adresse");
1715
		fieldSetAdresse.setCollapsible(true);
1716
 
569 jp_milcent 1717
		fieldSetAdresse.setLayout(creerFormLayout(null, LabelAlign.LEFT));
110 jpm 1718
 
164 jp_milcent 1719
		adrChp = new TextArea();
277 jp_milcent 1720
		adrChp.setTabIndex(tabIndex++);
110 jpm 1721
		adrChp.setFieldLabel("Adresse");
1722
		fieldSetAdresse.add(adrChp, new FormData(550, 0));
1723
 
133 jpm 1724
		cpChp = new TextField<String>();
277 jp_milcent 1725
		cpChp.setTabIndex(tabIndex++);
110 jpm 1726
		cpChp.setFieldLabel("Code postal");
564 jp_milcent 1727
		gaucheFdAdresse.add(cpChp, new FormData("95%"));
110 jpm 1728
 
133 jpm 1729
		villeChp = new TextField<String>();
277 jp_milcent 1730
		villeChp.setTabIndex(tabIndex++);
110 jpm 1731
		villeChp.setFieldLabel("Ville");
564 jp_milcent 1732
		droiteFdAdresse.add(villeChp, new FormData("95%"));
110 jpm 1733
 
133 jpm 1734
		regionChp = new TextField<String>();
277 jp_milcent 1735
		regionChp.setTabIndex(tabIndex++);
110 jpm 1736
		regionChp.setFieldLabel("Région");
564 jp_milcent 1737
		gaucheFdAdresse.add(regionChp, new FormData("95%"));
110 jpm 1738
 
164 jp_milcent 1739
		magazinPays = new ListStore<Valeur>();
1740
		comboPays = new ComboBox<Valeur>();
277 jp_milcent 1741
		comboPays.setTabIndex(tabIndex++);
164 jp_milcent 1742
		comboPays.setFieldLabel("Pays");
172 jp_milcent 1743
		comboPays.setEmptyText("Sélectioner un pays...");
164 jp_milcent 1744
		comboPays.setEditable(true);
1745
		comboPays.setLabelSeparator("");
1746
		comboPays.setDisplayField("nom");
172 jp_milcent 1747
		comboPays.setTemplate(getTemplatePays());
1748
		comboPays.setTypeAhead(true);
164 jp_milcent 1749
		comboPays.setTriggerAction(TriggerAction.ALL);
1750
		comboPays.setStore(magazinPays);
564 jp_milcent 1751
		droiteFdAdresse.add(comboPays, new FormData("95%"));
569 jp_milcent 1752
		mediateur.obtenirListeValeurEtRafraichir(this, "pays");
110 jpm 1753
 
1754
		principalFdAdresse.add(gaucheFdAdresse, new ColumnData(.5));
1755
		principalFdAdresse.add(droiteFdAdresse, new ColumnData(.5));
1756
		fieldSetAdresse.add(principalFdAdresse);
279 jp_milcent 1757
 
110 jpm 1758
		identificationOnglet.add(fieldSetAdresse);
279 jp_milcent 1759
 
110 jpm 1760
		//+-----------------------------------------------------------------------------------------------------------+
1761
		// Fieldset TÉLÉPHONE et EMAIL
1762
		LayoutContainer principalFdTelMail = new LayoutContainer();
1763
		principalFdTelMail.setLayout(new ColumnLayout());
569 jp_milcent 1764
		principalFdTelMail.setSize(700, -1);
110 jpm 1765
 
1766
		LayoutContainer gaucheFdTelMail = new LayoutContainer();
569 jp_milcent 1767
		gaucheFdTelMail.setLayout(creerFormLayout(60, LabelAlign.LEFT));
110 jpm 1768
 
1769
		LayoutContainer droiteFdTelMail = new LayoutContainer();
569 jp_milcent 1770
		droiteFdTelMail.setLayout(creerFormLayout(60, LabelAlign.LEFT));
110 jpm 1771
 
1772
		FieldSet fieldSetTelMail = new FieldSet();
1773
		fieldSetTelMail.setHeading("Communication");
1774
		fieldSetTelMail.setCollapsible(true);
1775
 
569 jp_milcent 1776
		fieldSetTelMail.setLayout(creerFormLayout(null, LabelAlign.LEFT));
110 jpm 1777
 
133 jpm 1778
		telChp = new TextField<String>();
277 jp_milcent 1779
		telChp.setTabIndex(tabIndex++);
602 jp_milcent 1780
		telChp.setFieldLabel("Téléphone fixe");
564 jp_milcent 1781
		gaucheFdTelMail.add(telChp, new FormData("95%"));
110 jpm 1782
 
133 jpm 1783
		faxChp = new TextField<String>();
277 jp_milcent 1784
		faxChp.setTabIndex(tabIndex++);
110 jpm 1785
		faxChp.setFieldLabel("Fax");
564 jp_milcent 1786
		droiteFdTelMail.add(faxChp, new FormData("95%"));
110 jpm 1787
 
133 jpm 1788
		emailChp = new TextField<String>();
277 jp_milcent 1789
		emailChp.setTabIndex(tabIndex++);
110 jpm 1790
		emailChp.setFieldLabel("Courriel");
1791
		emailChp.setToolTip("Saisir le courriel de l'organisation, pas de courriel individuel. Ex. : accueil@organisation.org");
564 jp_milcent 1792
		gaucheFdTelMail.add(emailChp, new FormData("95%"));
110 jpm 1793
 
133 jpm 1794
		urlChp = new TextField<String>();
277 jp_milcent 1795
		urlChp.setTabIndex(tabIndex++);
110 jpm 1796
		urlChp.setFieldLabel("Site web");
564 jp_milcent 1797
		droiteFdTelMail.add(urlChp, new FormData("95%"));
110 jpm 1798
 
1799
		principalFdTelMail.add(gaucheFdTelMail, new ColumnData(.5));
1800
		principalFdTelMail.add(droiteFdTelMail, new ColumnData(.5));
1801
		fieldSetTelMail.add(principalFdTelMail);
279 jp_milcent 1802
 
110 jpm 1803
		identificationOnglet.add(fieldSetTelMail);
1804
 
1805
		return identificationOnglet;
1806
	}
1807
 
172 jp_milcent 1808
	private native String getTemplatePays() /*-{
1809
		return  [
1810
		'<tpl for=".">',
1811
		'<div class="x-combo-list-item">{nom} ({abreviation})</div>',
1812
		'</tpl>'
1813
		].join("");
1814
		}-*/;
1815
 
192 jp_milcent 1816
	private void peuplerCasesACocher(String donnees, CheckBoxGroup groupeCac, TextField<String> champAutre) {
1817
		String[] valeurs = donnees.split(";;");
1818
		for (int i = 0; i < valeurs.length; i++) {
1819
			if (valeurs[i].startsWith("AUTRE##")) {
1820
				champAutre.setValue(valeurs[i].replaceFirst("^AUTRE##", ""));
1821
			} else {
491 gduche 1822
				//TODO : check : List<CheckBox> cases = groupeCac.getAll();
1823
				List<Field<?>> cases = groupeCac.getAll();
192 jp_milcent 1824
				for (int j = 0; j < cases.size(); j++) {
1825
					if (cases.get(j).getId().equals("val-"+valeurs[i])) {
491 gduche 1826
						((CheckBox) cases.get(j)).setValue(true);
192 jp_milcent 1827
					}
1828
				}
1829
			}
1830
		}
1831
	}
1832
 
1833
	private void peuplerBoutonsRadio(String valeur, RadioGroup groupeBr) {
491 gduche 1834
		//List<Radio> boutons = groupeBr.getAll();
1835
		List<Field<?>> boutons = groupeBr.getAll();
192 jp_milcent 1836
		String id = valeur+"_"+groupeBr.getName().replace("_grp", "");
1837
		for (int i = 0; i < boutons.size(); i++) {
1838
			if (boutons.get(i).getId().equals(id)) {
491 gduche 1839
				((Radio) boutons.get(i)).setValue(true);
192 jp_milcent 1840
			}
1841
		}
1842
	}
1843
 
1844
	private String creerChaineDenormalisee(List<CheckBox> liste) {
1845
		String identifiants = "";
306 jp_milcent 1846
		if (liste != null) {
1847
			int taille = liste.size();
1848
			for (int i = 0; i < taille; i++) {
1849
				CheckBox cac = liste.get(i);
1850
				if (cac.isEnabled()) {
1851
					identifiants = identifiants.concat(";;"+cac.getData("id"));
1852
				}
192 jp_milcent 1853
			}
306 jp_milcent 1854
			identifiants.replaceFirst("^;;", "");
192 jp_milcent 1855
		}
306 jp_milcent 1856
		return identifiants;
192 jp_milcent 1857
	}
1858
 
108 jpm 1859
	/** Méthode simplifiant la création de FormLayout.
110 jpm 1860
	 * Chacun des paramètres peut prendre la valeur null pour utiliser la valeur par défaut.
108 jpm 1861
	 *
110 jpm 1862
	 * @param labelWidth largeur des labels.
108 jpm 1863
	 * @param labelAlign alignement des labels
1864
	 * @param padding padding du layout
1865
	 * @return
1866
	 */
569 jp_milcent 1867
	private FormLayout creerFormLayout(Integer labelWidth, LabelAlign labelAlign) {
108 jpm 1868
		FormLayout formLayout = new FormLayout();
110 jpm 1869
		if (labelWidth != null) {
1870
			formLayout.setLabelWidth(labelWidth);
1871
		}
1872
		if (labelAlign != null) {
1873
			formLayout.setLabelAlign(labelAlign);
1874
		}
108 jpm 1875
		return formLayout;
1876
	}
1877
 
109 jpm 1878
	/** Méthode simplifiant la création de bouton radio oui/non
1879
	 *
1880
	 * @param listeNom nom de la liste de valeur
1881
	 * @return
1882
	 */
115 jpm 1883
	private RadioGroup creerChoixUniqueRadioGroupe(String groupeNom, String listeNom) {
1884
		groupeNom += "_grp";
1885
		// NOTE : il semblerait qu'il faille aussi utiliser setName() pour éviter tout problème...
1886
		RadioGroup radioGroup = new RadioGroup(groupeNom);
1887
		radioGroup.setName(groupeNom);
119 jpm 1888
 
188 jp_milcent 1889
		if (listeNom.equals("ouiNon")) {
115 jpm 1890
			ValeurListe ouiNonListe = new ValeurListe();
407 jp_milcent 1891
			ouiNonListe.ajouter(new Valeur("1", i18nC.oui(), "NULL", "NULL"));
1892
			ouiNonListe.ajouter(new Valeur("0", i18nC.non(), "NULL", "NULL"));
115 jpm 1893
			creerChoixUniqueBoutonRadio(radioGroup, ouiNonListe);
1894
		}
109 jpm 1895
 
115 jpm 1896
		return radioGroup;
109 jpm 1897
	}
1898
 
115 jpm 1899
	private void creerChoixUniqueBoutonRadio(RadioGroup radioGroupe, ValeurListe listeValeurs) {
1900
		for (Iterator<String> it = listeValeurs.keySet().iterator(); it.hasNext();) {
1901
			Valeur val = listeValeurs.get(it.next());
1902
 
1903
			Radio radioBtn = new Radio();
119 jpm 1904
			radioBtn.setName(radioGroupe.getName().replace("_grp", ""));
188 jp_milcent 1905
			radioBtn.setId(val.getId()+"_"+radioBtn.getName());
115 jpm 1906
			radioBtn.setBoxLabel(val.getNom());
188 jp_milcent 1907
			radioBtn.setValueAttribute(val.getId());
119 jpm 1908
			radioBtn.addListener(Events.Change, new Listener<ComponentEvent>() {
115 jpm 1909
 
119 jpm 1910
				public void handleEvent(ComponentEvent be) {
133 jpm 1911
					//Window.alert(((Radio) be.component).getName());
491 gduche 1912
					afficherChampSupplementaire(((Radio) be.getComponent()));
115 jpm 1913
				}
1914
 
1915
			});
119 jpm 1916
 
115 jpm 1917
			if (! val.getDescription().equals("NULL")) {
1918
				radioBtn.setToolTip(new ToolTipConfig(val.getNom(), val.getDescription()));
1919
			}
188 jp_milcent 1920
			radioGroupe.add(radioBtn);
115 jpm 1921
		}
1922
	}
1923
 
1924
	private void afficherChampSupplementaire(Radio radioBtn) {
119 jpm 1925
		//GWT.log("Nom btn : "+radioBtn.getName()+" - Nom group : "+radioBtn.getGroup().getName(), null);
115 jpm 1926
		// Valeur du bouton radio déclenchant l'affichage des composants cachés
1927
		String valeurPourAfficher = "oui";
111 jpm 1928
 
115 jpm 1929
		// Construction de la liste des composants à afficher/cacher
1930
		String radioGroupeNom = radioBtn.getGroup().getName();
1931
		ArrayList<Object> composants = new ArrayList<Object>();
1932
		if (radioGroupeNom.equals("action_mark_grp")) {
1933
			composants.add(actionTrukCp);
1934
		} else if (radioGroupeNom.equals("future_action_mark_grp")) {
1935
			composants.add(futureActionChp);
1936
		} else if (radioGroupeNom.equals("sans_motif_acces_mark_grp")) {
1937
			composants.add(sansMotifAccesChp);
1938
		} else if (radioGroupeNom.equals("avec_motif_acces_mark_grp")) {
1939
			composants.add(avecMotifAccesChp);
1940
		} else if (radioGroupeNom.equals("recherche_mark_grp")) {
1941
			composants.add(provenanceRechercheTrukCp);
119 jpm 1942
			composants.add(typeRechercheTrukCp);
115 jpm 1943
		} else if (radioGroupeNom.equals("formation_mark_grp")) {
1944
			composants.add(formationChp);
1945
		} else if (radioGroupeNom.equals("collection_commune_mark_grp")) {
1946
			composants.add(collectionAutreTrukCp);
1947
		} else if (radioGroupeNom.equals("restauration_mark_grp")) {
1948
			composants.add(opRestauTrukCp);
1949
		} else if (radioGroupeNom.equals("traitement_mark_grp")) {
1950
			composants.add(traitementTrukCp);
1951
		} else if (radioGroupeNom.equals("echantillon_acquisition_mark_grp")) {
1952
			composants.add(traitementAcquisitionMarkRGrpChp);
1953
		} else if (radioGroupeNom.equals("traitement_acquisition_mark_grp")) {
1954
			composants.add(traitementAcquisitionMarkLabel);
1955
			composants.add(poisonTraitementTrukCp);
1956
			composants.add(insecteTraitementTrukCp);
1957
		} else if (radioGroupeNom.equals("materiel_conservation_ce_grp")) {
1958
			composants.add(autreMaterielTrukCp);
1959
			valeurPourAfficher = "non";
1960
		}
111 jpm 1961
 
115 jpm 1962
		// Nous affichons/cachons les composant de la liste
211 jp_milcent 1963
		final int nbreComposants = composants.size();
115 jpm 1964
		//GWT.log("Id : "+radioBtn.getId()+" - Class : "+radioBtn.getClass().toString()+"- Taille : "+tailleMax, null);
119 jpm 1965
		//Window.alert("Radio grp nom : "+radioGroupeNom+" - Id btn : "+radioBtn.getId()+" - Class : "+radioBtn.getClass().toString()+"- Taille : "+tailleMax);
211 jp_milcent 1966
		for (int i = 0; i < nbreComposants; i++) {
111 jpm 1967
			// En fonction du type de bouton cliquer, on affiche ou cache les champs
115 jpm 1968
			String type = radioBtn.getBoxLabel().toLowerCase();
119 jpm 1969
			//GWT.log(type, null);
115 jpm 1970
			if (radioBtn.getValue() == true) {
1971
				if (type.equals(valeurPourAfficher)) {
1972
					((Component) composants.get(i)).show();
1973
				} else {
1974
					((Component) composants.get(i)).hide();
1975
				}
111 jpm 1976
			}
1977
			// Si on a à faire à un ContentPanel, on l'actualise pour déclencher l'affichage
115 jpm 1978
			if (composants.get(i) instanceof ContentPanel) {
1979
				((ContentPanel) composants.get(i)).layout();
111 jpm 1980
			}
1981
		}
1982
 
1983
	}
1984
 
109 jpm 1985
	/** Méthode simplifiant la création de choix multiple sous forme de case à cocher.
1986
	 * Apelle un service retournant la liste des valeurs représentant les cases à cocher.
1987
	 * Ajoute ou pas un champ "Autre".
1988
	 *
569 jp_milcent 1989
	 * @return ContentPanel le panneau contenant les cases à cocher
109 jpm 1990
	 */
569 jp_milcent 1991
	private LayoutContainer creerChoixMultipleCp() {
1992
		LayoutContainer conteneur = new LayoutContainer();
1993
		conteneur.setLayout(creerFormLayout(650, LabelAlign.TOP));
1994
		return conteneur;
109 jpm 1995
	}
1996
 
1997
	/** Méthode simplifiant la création de choix multiple sous forme de case à cocher.
1998
	 * Apelle un service retournant la liste des valeurs représentant les cases à cocher.
1999
	 * Ajoute ou pas un champ "Autre".
2000
	 *
2001
	 * @param cp panneau conteant le groupe de case à cocher
2002
	 * @param cacGroup le groupe de case à cocher
2003
	 * @param listeValeurs la liste de valeurs à transformer en case à cocher
2004
	 * @param boolAutreChp booléen indiquant si oui ou non le champ autre doit apparaître
2005
	 * @return
2006
	 */
569 jp_milcent 2007
	private void creerChoixMultipleCac(LayoutContainer cp, final CheckBoxGroup cacGroupe, ValeurListe listeValeurs, final Field<String> autreChp) {
295 jp_milcent 2008
		cp.addListener(Events.Hide, new Listener<BaseEvent>() {
2009
 
2010
			public void handleEvent(BaseEvent be) {
306 jp_milcent 2011
				cacGroupe.reset();
2012
				autreChp.setValue("");
295 jp_milcent 2013
			}
2014
 
2015
		});
569 jp_milcent 2016
 
110 jpm 2017
		cacGroupe.setAutoWidth(true);
569 jp_milcent 2018
		cacGroupe.setStyleAttribute("padding", "3px");
188 jp_milcent 2019
		cacGroupe.setData("liste_id", listeValeurs.getId());
109 jpm 2020
		for (Iterator<String> it = listeValeurs.keySet().iterator(); it.hasNext();) {
111 jpm 2021
			Valeur val = listeValeurs.get(it.next());
2022
			String nom =  val.get("nom");
109 jpm 2023
			CheckBox cac = new CheckBox();
115 jpm 2024
			cac.setId("val-"+val.getId());
188 jp_milcent 2025
			cac.setData("id", val.getId());
111 jpm 2026
			cac.setBoxLabel(nom);
2027
			if (! val.getDescription().equals("NULL")) {
2028
				cac.setToolTip(new ToolTipConfig(val.getNom(), val.getDescription()));
109 jpm 2029
			}
2030
			cacGroupe.add(cac);
2031
		}
2032
		cp.add(cacGroupe);
2033
 
188 jp_milcent 2034
		if (autreChp != null) {
569 jp_milcent 2035
			// FIXME : éviter le chevauchement du texte des cases à cocher avec le label "Autre" sur les petits écrans
2036
			LayoutContainer conteneur = new LayoutContainer();
579 jp_milcent 2037
			conteneur.setLayout(creerFormLayout(50, LabelAlign.TOP));
188 jp_milcent 2038
			autreChp.setId("autre-"+listeValeurs.getId());
119 jpm 2039
			autreChp.setFieldLabel("Autre");
579 jp_milcent 2040
			autreChp.setLabelStyle("font-weight:normal;");
569 jp_milcent 2041
			conteneur.add(autreChp, new FormData(500, 0));
2042
 
2043
			cp.add(conteneur);
109 jpm 2044
		}
2045
		cp.layout();
2046
	}
2047
 
69 jpm 2048
	public void rafraichir(Object nouvelleDonnees) {
211 jp_milcent 2049
		try {
2050
			if (nouvelleDonnees instanceof Information) {
2051
				Information info = (Information) nouvelleDonnees;
2052
				if (info.getMessages() != null && !info.getMessages().toString().equals("[]")) {
306 jp_milcent 2053
					GWT.log("MESSAGES:\n"+info.getMessages().toString(), null);
188 jp_milcent 2054
				}
306 jp_milcent 2055
 
211 jp_milcent 2056
				if (info.getType().equals("modif_structure")) {
2057
					Info.display("Modification d'une institution", info.toString());
609 jp_milcent 2058
					// Si le bouton Valider a été cliqué, nous affichons la liste des structures
211 jp_milcent 2059
				} else if (info.getType().equals("ajout_structure")) {
306 jp_milcent 2060
					if (info.getMessage(0) != null && info.getMessage(0).matches("^[0-9]+$")) {
231 jp_milcent 2061
						Info.display("Ajout d'une Institution", "L'intitution a bien été ajoutée");
609 jp_milcent 2062
 
231 jp_milcent 2063
						// Suite à la récupération de l'id de l'institution nouvellement ajoutée nous ajoutons le personnel
2064
						mediateur.ajouterStructureAPersonne(this, info.toString(), personnelAjoute);
609 jp_milcent 2065
 
231 jp_milcent 2066
					} else {
2067
						Info.display("Ajout d'une Institution", info.toString());
2068
					}
2069
				} else if (info.getType().equals("modif_structure_a_personne")) {
2070
					Info.display("Modification du Personnel", info.toString());
609 jp_milcent 2071
					GWT.log("Decompte:"+decompteRafraichissementPersonnel, null);
2072
					testerLancementRafraichirPersonnel();
231 jp_milcent 2073
				} else if (info.getType().equals("suppression_structure_a_personne")) {
2074
					Info.display("Suppression du Personnel", info.toString());
609 jp_milcent 2075
					GWT.log("Decompte:"+decompteRafraichissementPersonnel, null);
2076
					testerLancementRafraichirPersonnel();
231 jp_milcent 2077
				} else if (info.getType().equals("ajout_structure_a_personne")) {
2078
					Info.display("Ajout du Personnel", info.toString());
609 jp_milcent 2079
					GWT.log("Decompte:"+decompteRafraichissementPersonnel, null);
2080
					testerLancementRafraichirPersonnel();
211 jp_milcent 2081
				} else if (info.getType().equals("selection_structure")) {
2082
					Info.display("Modification d'une institution", info.toString());
2083
					GWT.log("Mode du formulaire : "+mode, null);
2084
					String titre = i18nC.titreModifFormStructurePanneau();
2085
					if (info.getDonnee(0) != null) {
2086
						identification = (Structure) info.getDonnee(0);
2087
						if (onglets.getSelectedItem().equals(identificationOnglet)) {
2088
							peuplerStructureIdentification();
2089
						}
2090
						// Composition du titre
2091
						titre += " - ID : "+identification.getId();
192 jp_milcent 2092
					}
211 jp_milcent 2093
					if (info.getDonnee(1) != null) {
2094
						conservation = (StructureConservation) info.getDonnee(1);
2095
						if (onglets.getSelectedItem().equals(conservationOnglet)) {
2096
							peuplerStructureConservation();
206 jp_milcent 2097
						}
2098
					}
211 jp_milcent 2099
					if (info.getDonnee(2) != null) {
2100
						valorisation = (StructureValorisation) info.getDonnee(2);
2101
						if (valorisation != null) {
2102
							if (onglets.getSelectedItem().equals(valorisationOnglet)) {
2103
								peuplerStructureValorisation();
2104
							}
2105
						}
111 jpm 2106
					}
211 jp_milcent 2107
					structureFormPanneau.setHeading(titre);
2108
				} else if (info.getType().equals("liste_structure_a_personne")) {
2109
					if (info.getDonnee(0) != null) {
213 jp_milcent 2110
						personnel = (StructureAPersonneListe) info.getDonnee(0);
243 jp_milcent 2111
 
609 jp_milcent 2112
						peuplerStructurePersonnel();
2113
						personnelOnglet.layout();
2114
						Info.display("Chargement du Personnel", "ok");
2115
 
2116
						// Remise à zéro des modification dans la liste du personnel
2117
						personnelModifie = new StructureAPersonneListe();
2118
						personnelAjoute = new StructureAPersonneListe();
2119
						personnelSupprime = new StructureAPersonneListe();
111 jpm 2120
					}
231 jp_milcent 2121
					if (info.getDonnee(1) != null) {
2122
						Info.display("Debug", info.getDonnee(1).toString());
2123
					}
243 jp_milcent 2124
				} else if (info.getType().equals("liste_personne")) {
2125
					if (info.getDonnee(0) != null) {
2126
						PersonneListe personnes = (PersonneListe) info.getDonnee(0);
2127
 
2128
						List<Personne> liste = new ArrayList<Personne>();
2129
						for (Iterator<String> it = personnes.keySet().iterator(); it.hasNext();) {
2130
							liste.add(personnes.get(it.next()));
2131
						}
2132
 
2133
						personneExistanteMagazin.removeAll();
2134
						personneExistanteMagazin.add(liste);
2135
						personneExistanteCombo.setStore(personneExistanteMagazin);
2136
						personneExistanteCombo.expand();
2137
					}
110 jpm 2138
				}
211 jp_milcent 2139
			} else if (nouvelleDonnees instanceof ValeurListe) {
2140
				ValeurListe listeValeurs = (ValeurListe) nouvelleDonnees;
569 jp_milcent 2141
 
407 jp_milcent 2142
				List<Valeur> liste = listeValeurs.toList();
2143
 
211 jp_milcent 2144
				// Test pour savoir si la liste contient des éléments
2145
				if (liste.size() > 0) {
2146
					Configuration config = (Configuration) Registry.get(RegistreId.CONFIG);
2147
					if (listeValeurs.getId().equals(config.getListeId("stpr"))) {
2148
						magazinLstpr.removeAll();
2149
						magazinLstpr.add(liste);
2150
						comboLstpr.setStore(magazinLstpr);
110 jpm 2151
					}
211 jp_milcent 2152
					if (listeValeurs.getId().equals(config.getListeId("stpu"))) {
2153
						magazinLstpu.removeAll();
2154
						magazinLstpu.add(liste);
2155
						comboLstpu.setStore(magazinLstpu);
110 jpm 2156
					}
211 jp_milcent 2157
					if (listeValeurs.getId().equals(config.getListeId("statut"))) {
2158
						magazinLiStatut.removeAll();
2159
						magazinLiStatut.add(liste);
2160
						comboLiStatut.setStore(magazinLiStatut);
2161
					}
2162
					if (listeValeurs.getId().equals(config.getListeId("fonction"))) {
295 jp_milcent 2163
						// FIXME : le store ne contient pas tout le temps les données, chose étrange.
2164
						// On stocke donc les données dans une variables de la classe pour recharger le store si besoin.
2165
						fonctionsListe = liste;
2166
						fonctionsMagazin.removeAll();
2167
						fonctionsMagazin.add(liste);
2168
						fonctionsCombo.setStore(fonctionsMagazin);
211 jp_milcent 2169
					}
2170
					if (listeValeurs.getId().equals(config.getListeId("pays"))) {
2171
						magazinPays.removeAll();
2172
						magazinPays.add(liste);
2173
						comboPays.setStore(magazinPays);
2174
					}
2175
					if (listeValeurs.getId().equals(config.getListeId("localStockage"))) {
2176
						localStockageAutreChp = new TextField<String>();
2177
						creerChoixMultipleCac(localStockageTrukCp, localStockageTrukCacGrpChp, listeValeurs, localStockageAutreChp);
2178
					}
2179
					if (listeValeurs.getId().equals(config.getListeId("meubleStockage"))) {
2180
						meubleStockageAutreChp = new TextField<String>();
2181
						creerChoixMultipleCac(meubleStockageTrukCp, meubleStockageTrukCacGrpChp, listeValeurs, meubleStockageAutreChp);
2182
					}
2183
					if (listeValeurs.getId().equals(config.getListeId("parametreStockage"))) {
2184
						parametreStockageAutreChp = new TextField<String>();
2185
						creerChoixMultipleCac(parametreStockageTrukCp, parametreStockageTrukCacGrpChp, listeValeurs, parametreStockageAutreChp);
2186
					}
2187
					if (listeValeurs.getId().equals(config.getListeId("autreCollection"))) {
569 jp_milcent 2188
						if (collectionAutreTrukCp != null && collectionAutreTrukCp.getItemByItemId("collectionAutreTrukCacGrpChp") == null) {
211 jp_milcent 2189
							collectionAutreTrukCacGrpChp.setId("collectionAutreTrukCacGrpChp");
2190
							collectionAutreAutreChp = new TextField<String>();
2191
							creerChoixMultipleCac(collectionAutreTrukCp, collectionAutreTrukCacGrpChp, listeValeurs, collectionAutreAutreChp);
2192
						}
569 jp_milcent 2193
						if (autreCollectionTrukCp != null && autreCollectionTrukCp.getItemByItemId("autreCollectionTrukCacGrpChp") == null) {
211 jp_milcent 2194
							autreCollectionTrukCacGrpChp.setId("autreCollectionTrukCacGrpChp");
2195
							autreCollectionAutreChp = new TextField<String>();
2196
							creerChoixMultipleCac(autreCollectionTrukCp, autreCollectionTrukCacGrpChp, listeValeurs, autreCollectionAutreChp);
2197
						}
2198
					}
2199
					if (listeValeurs.getId().equals(config.getListeId("opRestau"))) {
2200
						opRestauAutreChp = new TextField<String>();
2201
						creerChoixMultipleCac(opRestauTrukCp, opRestauTrukCacGrpChp, listeValeurs, opRestauAutreChp);
2202
					}
2203
					if (listeValeurs.getId().equals(config.getListeId("onep"))) {
2204
						creerChoixUniqueBoutonRadio(materielConservationCeRGrpChp, listeValeurs);
2205
						materielConservationCp.add(materielConservationCeRGrpChp);
2206
						materielConservationCp.layout();
2207
					}
2208
					if (listeValeurs.getId().equals(config.getListeId("autreMateriel"))) {
2209
						autreMaterielAutreChp = new TextField<String>();
2210
						creerChoixMultipleCac(autreMaterielTrukCp, autreMaterielTrukCacGrpChp, listeValeurs, autreMaterielAutreChp);
2211
					}
2212
					if (listeValeurs.getId().equals(config.getListeId("poisonTraitement"))) {
2213
						poisonTraitementAutreChp = new TextField<String>();
2214
						creerChoixMultipleCac(poisonTraitementTrukCp, poisonTraitementTrukCacGrpChp, listeValeurs, poisonTraitementAutreChp);
2215
					}
2216
					if (listeValeurs.getId().equals(config.getListeId("insecteTraitement"))) {
569 jp_milcent 2217
						if (traitementTrukCp != null && traitementTrukCp.getItemByItemId("traitementTrukCacGrpChp") == null) {
211 jp_milcent 2218
							traitementTrukCacGrpChp.setId("traitementTrukCacGrpChp");
2219
							traitementAutreChp = new TextField<String>();
2220
							creerChoixMultipleCac(traitementTrukCp, traitementTrukCacGrpChp, listeValeurs, traitementAutreChp);
2221
						}
569 jp_milcent 2222
						if (insecteTraitementTrukCp != null && insecteTraitementTrukCp.getItemByItemId("insecteTraitementTrukCacGrpChp") == null) {
211 jp_milcent 2223
							insecteTraitementTrukCacGrpChp.setId("insecteTraitementTrukCacGrpChp");
2224
							insecteTraitementAutreChp = new TextField<String>();
2225
							creerChoixMultipleCac(insecteTraitementTrukCp, insecteTraitementTrukCacGrpChp, listeValeurs, insecteTraitementAutreChp);
2226
						}
2227
					}
2228
					if (listeValeurs.getId().equals(config.getListeId("actionValorisation"))) {
2229
						actionAutreChp = new TextField<String>();
2230
						creerChoixMultipleCac(actionTrukCp, actionTrukCacGrpChp, listeValeurs, actionAutreChp);
2231
					}
2232
					if (listeValeurs.getId().equals(config.getListeId("continentEtFr"))) {
2233
						provenanceRechercheAutreChp = new TextField<String>();
2234
						creerChoixMultipleCac(provenanceRechercheTrukCp, provenanceRechercheTrukCacGrpChp, listeValeurs, provenanceRechercheAutreChp);
2235
					}
2236
					if (listeValeurs.getId().equals(config.getListeId("typeRecherche"))) {
2237
						typeRechercheAutreChp = new TextField<String>();
2238
						creerChoixMultipleCac(typeRechercheTrukCp, typeRechercheTrukCacGrpChp, listeValeurs, typeRechercheAutreChp);
2239
					}
2240
					//GWT.log("La liste #"+listeValeurs.getId()+" a été reçue!", null);
2241
				} else {
2242
					GWT.log("La liste #"+listeValeurs.getId()+" ne contient aucune valeurs!", null);
110 jpm 2243
				}
277 jp_milcent 2244
			} else if (nouvelleDonnees instanceof ProjetListe) {
2245
				ProjetListe projets = (ProjetListe) nouvelleDonnees;
2246
 
2247
				List<Projet> liste = new ArrayList<Projet>();
2248
				for (Iterator<String> it = projets.keySet().iterator(); it.hasNext();) {
2249
					liste.add(projets.get(it.next()));
2250
				}
2251
				projetsMagazin.removeAll();
2252
				projetsMagazin.add(liste);
2253
				projetsCombo.setStore(projetsMagazin);
2254
			} else {
2255
				GWT.log("Pas de correspondance dans la méthode rafraichir() de la classe "+this.getClass(), null);
91 jpm 2256
			}
211 jp_milcent 2257
		} catch (Exception e) {
2258
			GWT.log("rafraichir()", e);
91 jpm 2259
		}
609 jp_milcent 2260
 
2261
		// Si le bouton Valider a été cliqué, nous affichons la liste des structures
2262
		if (clicBoutonvalidation) {
2263
			mediateur.clicMenu(MenuApplicationId.STRUCTURE);
2264
			clicBoutonvalidation = false;
2265
		}
69 jpm 2266
	}
243 jp_milcent 2267
 
609 jp_milcent 2268
	private void testerLancementRafraichirPersonnel() {
2269
		decompteRafraichissementPersonnel--;
2270
		if (decompteRafraichissementPersonnel == 0) {
2271
			// Nous rechargeons la liste du Personnel
2272
			rafraichirPersonnel();
2273
		}
2274
	}
2275
 
243 jp_milcent 2276
	private void rafraichirPersonnel() {
609 jp_milcent 2277
		GWT.log("Rafraichissement!", null);
2278
		decompteRafraichissementPersonnel = 0;
295 jp_milcent 2279
		if (mode.equals(MODE_MODIFIER)) {
609 jp_milcent 2280
			initialiserGrillePersonnelEnModification();
295 jp_milcent 2281
		} else if (mode.equals(MODE_AJOUTER)) {
2282
			initialiserGrillePersonnelEnAjout();
2283
		}
243 jp_milcent 2284
	}
2285
 
2286
	private void rafraichirPersonneExistante(String nom) {
245 jp_milcent 2287
		mediateur.selectionnerPersonneParNomComplet(this, null, nom+"%");
243 jp_milcent 2288
	}
295 jp_milcent 2289
 
2290
	private void ajouterMembreAGrillePersonnel(StructureAPersonne personnel) {
2291
		grillePersonnel.stopEditing();
306 jp_milcent 2292
		personnelGrilleMagazin.insert(personnel, 0);
295 jp_milcent 2293
 
2294
		// Nous modifions l'enregistrement pour que le modèle soit pris en compte lors de la collecte.
2295
		Record record = personnelGrilleMagazin.getRecord(personnelGrilleMagazin.getAt(0));
2296
		record.beginEdit();
603 jp_milcent 2297
 
295 jp_milcent 2298
		if (!personnel.getFonction().equals("")) {
2299
			Object fonction = fonctionEditor.preProcessValue(personnel.getFonction());
2300
			if (fonction != null && fonction instanceof Valeur) {
2301
				record.set("fonction", ((Valeur)fonction).getNom());
2302
			}
2303
		}
603 jp_milcent 2304
 
295 jp_milcent 2305
		if (!personnel.getPrenom().equals("")) {
2306
			record.set("prenom", personnel.getPrenom());
2307
		}
603 jp_milcent 2308
 
295 jp_milcent 2309
		if (!personnel.getNom().equals("")) {
2310
			record.set("nom", personnel.getNom());
2311
		}
603 jp_milcent 2312
 
602 jp_milcent 2313
		if (!personnel.getTelephoneFixe().equals("")) {
2314
			record.set("tel_fix", personnel.getTelephoneFixe());
295 jp_milcent 2315
		}
603 jp_milcent 2316
 
295 jp_milcent 2317
		if (!personnel.getFax().equals("")) {
602 jp_milcent 2318
			record.set("tel_fax", personnel.getFax());
295 jp_milcent 2319
		}
603 jp_milcent 2320
 
295 jp_milcent 2321
		if (!personnel.getCourriel().equals("")) {
2322
			record.set("courriel", personnel.selectionnerCourriel(1));
2323
		}
603 jp_milcent 2324
 
295 jp_milcent 2325
		if (!personnel.getStatut().equals("")) {
2326
			record.set("statut", personnel.getStatut());
2327
		}
603 jp_milcent 2328
 
295 jp_milcent 2329
		String tempsDeTravail = personnel.getBotaTravailHebdoTps();
2330
		record.set("travail", (tempsDeTravail.matches("^[0-9]+$")  ? Integer.parseInt(tempsDeTravail) : 0));
603 jp_milcent 2331
 
295 jp_milcent 2332
		if (!personnel.getSpecialite().equals("")) {
2333
			record.set("specialite", personnel.afficherSpecialite());
2334
		}
603 jp_milcent 2335
 
295 jp_milcent 2336
		record.set("contact", (personnel.getContact().equals("1") ? true : false));
603 jp_milcent 2337
 
295 jp_milcent 2338
		record.set("etat", personnel.get("etat"));
2339
		record.endEdit();
2340
 
2341
		grillePersonnel.startEditing(0, 0);
2342
	}
2343
 
2344
	private void initialiserGrillePersonnelEnAjout() {
2345
		personnelGrilleMagazin.removeAll();
2346
		StructureAPersonne conservateurDesCollections = new StructureAPersonne(StructureAPersonne.FONCTION_CONSERVATEUR, StructureAPersonne.ROLE_EQUIPE, StructureAPersonne.ETAT_AJOUTE);
2347
		ajouterMembreAGrillePersonnel(conservateurDesCollections);
2348
		StructureAPersonne directeurDuPersonnel = new StructureAPersonne(StructureAPersonne.FONCTION_DIRECTEUR, StructureAPersonne.ROLE_EQUIPE, StructureAPersonne.ETAT_AJOUTE);
2349
		ajouterMembreAGrillePersonnel(directeurDuPersonnel);
609 jp_milcent 2350
		personnelOnglet.layout();
295 jp_milcent 2351
	}
2352
 
609 jp_milcent 2353
	private void initialiserGrillePersonnelEnModification() {
295 jp_milcent 2354
		mediateur.selectionnerStructureAPersonne(this, identification.getId(), StructureAPersonne.ROLE_EQUIPE);
2355
	}
115 jpm 2356
}