Subversion Repositories eFlore/Applications.coel

Rev

Rev 1844 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1844 Rev 1845
Line 9... Line 9...
9
import java.util.List;
9
import java.util.List;
Line 10... Line 10...
10
 
10
 
11
import org.tela_botanica.client.ComposantClass;
11
import org.tela_botanica.client.ComposantClass;
12
import org.tela_botanica.client.Mediateur;
12
import org.tela_botanica.client.Mediateur;
13
import org.tela_botanica.client.RegistreId;
-
 
14
import org.tela_botanica.client.composants.ChampComboBoxRechercheTempsReelPaginable;
13
import org.tela_botanica.client.RegistreId;
15
import org.tela_botanica.client.composants.ChampMultiValeurs;
14
import org.tela_botanica.client.composants.ChampMultiValeurs;
16
import org.tela_botanica.client.composants.ChampMultiValeursImage;
15
import org.tela_botanica.client.composants.ChampMultiValeursImage;
17
import org.tela_botanica.client.composants.ChampMultiValeursMultiTypes;
16
import org.tela_botanica.client.composants.ChampMultiValeursMultiTypes;
18
import org.tela_botanica.client.composants.ChampMultiValeursMultiTypesPaginable;
-
 
19
import org.tela_botanica.client.composants.ChampMultiValeursPaginable;
17
import org.tela_botanica.client.composants.ChampMultiValeursMultiTypesPaginable;
20
import org.tela_botanica.client.composants.HashMapComposants;
18
import org.tela_botanica.client.composants.HashMapComposants;
21
import org.tela_botanica.client.configuration.Configuration;
19
import org.tela_botanica.client.configuration.Configuration;
22
import org.tela_botanica.client.images.Images;
20
import org.tela_botanica.client.images.Images;
Line 23... Line 21...
23
import org.tela_botanica.client.interfaces.Rafraichissable;
21
import org.tela_botanica.client.interfaces.Rafraichissable;
24
 
22
 
25
import org.tela_botanica.client.modeles.Information;
23
import org.tela_botanica.client.modeles.Information;
26
import org.tela_botanica.client.modeles.MenuApplicationId;
24
import org.tela_botanica.client.modeles.MenuApplicationId;
27
import org.tela_botanica.client.modeles.Valeur;
25
import org.tela_botanica.client.modeles.Valeur;
-
 
26
import org.tela_botanica.client.modeles.ValeurListe;
28
import org.tela_botanica.client.modeles.ValeurListe;
27
import org.tela_botanica.client.modeles.personne.Personne;
29
import org.tela_botanica.client.modeles.personne.Personne;
28
import org.tela_botanica.client.modeles.personne.PersonneAsyncDao;
30
import org.tela_botanica.client.modeles.personne.PersonneListe;
29
import org.tela_botanica.client.modeles.personne.PersonneListe;
31
import org.tela_botanica.client.modeles.publication.Publication;
30
import org.tela_botanica.client.modeles.publication.Publication;
32
import org.tela_botanica.client.modeles.publication.PublicationAPersonneListe;
31
import org.tela_botanica.client.modeles.publication.PublicationAPersonneListe;
33
import org.tela_botanica.client.modeles.publication.PublicationListe;
32
import org.tela_botanica.client.modeles.publication.PublicationListe;
34
import org.tela_botanica.client.synchronisation.Sequenceur;
33
import org.tela_botanica.client.synchronisation.Sequenceur;
-
 
34
import org.tela_botanica.client.util.Debug;
35
import org.tela_botanica.client.util.Debug;
35
import org.tela_botanica.client.util.Pattern;
36
import org.tela_botanica.client.util.Pattern;
36
import org.tela_botanica.client.util.UtilDate;
Line 37... Line 37...
37
import org.tela_botanica.client.util.UtilString;
37
import org.tela_botanica.client.util.UtilString;
38
import org.tela_botanica.client.vues.Formulaire;
38
import org.tela_botanica.client.vues.Formulaire;
Line 47... Line 47...
47
import com.extjs.gxt.ui.client.Style.VerticalAlignment;
47
import com.extjs.gxt.ui.client.Style.VerticalAlignment;
Line 48... Line 48...
48
 
48
 
49
import com.extjs.gxt.ui.client.binding.FieldBinding;
49
import com.extjs.gxt.ui.client.binding.FieldBinding;
Line -... Line 50...
-
 
50
import com.extjs.gxt.ui.client.binding.FormBinding;
50
import com.extjs.gxt.ui.client.binding.FormBinding;
51
 
51
 
52
import com.extjs.gxt.ui.client.event.BaseEvent;
52
import com.extjs.gxt.ui.client.event.ButtonEvent;
53
import com.extjs.gxt.ui.client.event.ButtonEvent;
53
import com.extjs.gxt.ui.client.event.ComponentEvent;
54
import com.extjs.gxt.ui.client.event.ComponentEvent;
54
import com.extjs.gxt.ui.client.event.KeyListener;
55
import com.extjs.gxt.ui.client.event.KeyListener;
Line 91... Line 92...
91
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
92
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
92
import com.extjs.gxt.ui.client.widget.layout.TableData;
93
import com.extjs.gxt.ui.client.widget.layout.TableData;
93
import com.extjs.gxt.ui.client.widget.layout.TableLayout;
94
import com.extjs.gxt.ui.client.widget.layout.TableLayout;
94
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
95
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
95
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
96
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
-
 
97
import com.google.gwt.core.client.Callback;
96
import com.google.gwt.core.client.GWT;
98
import com.google.gwt.core.client.GWT;
-
 
99
import com.google.gwt.json.client.JSONArray;
-
 
100
import com.google.gwt.json.client.JSONObject;
97
import com.google.gwt.user.client.Window;
101
import com.google.gwt.user.client.Window;
Line 98... Line 102...
98
 
102
 
Line 99... Line 103...
99
public class PersonneForm extends Formulaire implements Rafraichissable {
103
public class PersonneForm extends Formulaire implements Rafraichissable {
Line 122... Line 126...
122
	
126
	
123
	//Publi
127
	//Publi
124
	private ComboBox<Publication> cbPubli;
128
	private ComboBox<Publication> cbPubli;
Line -... Line 129...
-
 
129
	private ListStore<Publication> storePubli;
-
 
130
	
-
 
131
	// Gestion de la vérification des doublons
125
	private ListStore<Publication> storePubli;
132
	private boolean verificationDoublonEffectuee = false;
126
	
133
	
127
	// CONSTRUCTEUR  
134
	// CONSTRUCTEUR  
128
	public PersonneForm(Mediateur mediateurCourrant, String personneId) {
135
	public PersonneForm(Mediateur mediateurCourrant, String personneId) {
Line 266... Line 273...
266
		tfPrenom.setFieldLabel("Prénom");
273
		tfPrenom.setFieldLabel("Prénom");
267
		tfPrenom.setName("prenom");
274
		tfPrenom.setName("prenom");
Line 268... Line 275...
268
 
275
 
269
		fsNoms.add(tfPrenom, new FormData(300, 0));
276
		fsNoms.add(tfPrenom, new FormData(300, 0));
-
 
277
		hmIdentite.put("tfPrenom", tfPrenom);
-
 
278
		
-
 
279
		tfPrenom.addListener(Events.Blur, creerEcouteurNomPrenomExistant());
-
 
280
		tfPrenom.addListener(Events.Change, new Listener<BaseEvent>() {
-
 
281
			@Override
-
 
282
			public void handleEvent(BaseEvent be) {
-
 
283
				verificationDoublonEffectuee = false;	
-
 
284
			}
Line 270... Line 285...
270
		hmIdentite.put("tfPrenom", tfPrenom);
285
		});
271
 
286
 
272
		//Nom
287
		//Nom
273
		TextField<String> tfNom = new TextField<String>();
288
		TextField<String> tfNom = new TextField<String>();
274
		tfNom.setFieldLabel("Nom");
289
		tfNom.setFieldLabel("Nom");
275
		tfNom.setAllowBlank(false);
290
		tfNom.setAllowBlank(false);
276
		tfNom.setName("nom");
291
		tfNom.setName("nom");
Line -... Line 292...
-
 
292
		tfNom.addStyleName(ComposantClass.OBLIGATOIRE);
-
 
293
		tfNom.addListener(Events.Valid, creerEcouteurChampObligatoire());
-
 
294
		
-
 
295
		tfNom.addListener(Events.Blur, creerEcouteurNomPrenomExistant());
-
 
296
		tfNom.addListener(Events.Change, new Listener<BaseEvent>() {
-
 
297
			@Override
-
 
298
			public void handleEvent(BaseEvent be) {
-
 
299
				verificationDoublonEffectuee = false;	
277
		tfNom.addStyleName(ComposantClass.OBLIGATOIRE);
300
			}
278
		tfNom.addListener(Events.Valid, creerEcouteurChampObligatoire());
301
		});
Line 279... Line 302...
279
		
302
		
280
		fsNoms.add(tfNom, new FormData(300, 0));
303
		fsNoms.add(tfNom, new FormData(300, 0));
Line 1298... Line 1321...
1298
	}
1321
	}
Line 1299... Line 1322...
1299
	
1322
	
1300
	public String getPersonneId() {
1323
	public String getPersonneId() {
1301
		return this.personneId;
1324
		return this.personneId;
-
 
1325
	}
-
 
1326
	
-
 
1327
	private Listener<BaseEvent> creerEcouteurNomPrenomExistant() {
-
 
1328
		return new Listener<BaseEvent>() {
-
 
1329
			public void handleEvent(BaseEvent be) {
-
 
1330
				if(mode.equals(MODE_AJOUTER) && !verificationDoublonEffectuee) {
-
 
1331
					
-
 
1332
					TextField<String> nom = (TextField<String>) hmIdentite.get("tfNom");
-
 
1333
					TextField<String> prenom = (TextField<String>) hmIdentite.get("tfPrenom");
-
 
1334
					LabelField nomComplet = (LabelField) hmIdentite.get("nomComplet");
-
 
1335
					
-
 
1336
					if(nom.getValue() != null && !nom.getValue().isEmpty()) {
-
 
1337
						PersonneAsyncDao dao = new PersonneAsyncDao(PersonneForm.this);
-
 
1338
						// Suppression d'éventuels doubles espaces (ou plus) et ajout d'un joker devant
-
 
1339
						// (pour gérer la recherche lorsqu'on a qu'un nom de famille)
-
 
1340
						String nomCompletStr = "%"+nomComplet.getValue().toString().trim().replaceAll(" +", " ");
-
 
1341
						
-
 
1342
						if(prenom.getValue() != null && !prenom.getValue().isEmpty()) {
-
 
1343
							// Ajouter un % derrière le prénom permet de gérer facilement le cas de l'initiale
-
 
1344
							// et également de rechercher des noms potentiels si l'on a saisi qu'une initiale
-
 
1345
							nomCompletStr = nomCompletStr.replaceAll(prenom+" ", prenom+"%");
-
 
1346
						}
-
 
1347
						
-
 
1348
						dao.testerExistencePersonne(nomCompletStr, new Callback<JSONObject, String>() {				
-
 
1349
							@Override
-
 
1350
							public void onSuccess(JSONObject objet) {
-
 
1351
								
-
 
1352
								String message = formaterMessageAvertissementDoublon(objet);
-
 
1353
								verificationDoublonEffectuee = true;
-
 
1354
								
-
 
1355
								if(!message.isEmpty()) {
-
 
1356
									Window.alert(message);
-
 
1357
								}
-
 
1358
							}
-
 
1359
							
-
 
1360
							@Override
-
 
1361
							public void onFailure(String reason) {
-
 
1362
								// TODO Auto-generated method stub
-
 
1363
							}
-
 
1364
						});
-
 
1365
					}
-
 
1366
				}
-
 
1367
			}
-
 
1368
		};
-
 
1369
	}
-
 
1370
	
-
 
1371
	private String formaterMessageAvertissementDoublon(JSONObject objet) {
-
 
1372
		
-
 
1373
		double nbPers = objet.get("nbElements").isNumber().getValue();
-
 
1374
		JSONArray personnes = objet.isObject().get("personnes").isArray();
-
 
1375
		String message = "";
-
 
1376
		if(nbPers > 0) {
-
 
1377
			String pers = nbPers == 1 ? "personne" : "personnes";
-
 
1378
			String exist = nbPers == 1 ? "existe" : "existent";
-
 
1379
			message = "Attention : "+(int)nbPers+" "+pers+" portant ce nom "+exist+" déjà"+"\n";
-
 
1380
			for(int i = 0; i < personnes.size(); i++) {
-
 
1381
				message += "- "+personnes.get(i).isObject().get("cp_fmt_nom_complet").isString().stringValue();
-
 
1382
				if(personnes.get(i).isObject().get("cp_ville") != null && personnes.get(i).isObject().get("cp_ville").isString() != null) {
-
 
1383
					message += " à "+personnes.get(i).isObject().get("cp_ville").isString().stringValue();
-
 
1384
				}
-
 
1385
				
-
 
1386
				if(personnes.get(i).isObject().get("cp_naissance_date") != null 
-
 
1387
					&& personnes.get(i).isObject().get("cp_naissance_date").isString()!= null
-
 
1388
					&& !personnes.get(i).isObject().get("cp_naissance_date").isString().stringValue().equals("0000-00-00")) {
-
 
1389
					String dateChaine = personnes.get(i).isObject().get("cp_naissance_date").isString().stringValue();
-
 
1390
					
-
 
1391
					String dateNaissance = "";
-
 
1392
					// Quelque fois on ne possède que l'année de naissance de la personne,
-
 
1393
					// dans ce cas là la date est de la forme XXXX-00-00
-
 
1394
					if(dateChaine.endsWith("-00-00")) {
-
 
1395
						dateNaissance = dateChaine.substring(0, 4);
-
 
1396
					} else {
-
 
1397
						dateNaissance = UtilDate.formaterEnStringFormatFr(UtilString.formaterEnDate(dateChaine));
-
 
1398
					}
-
 
1399
 
-
 
1400
					message += ", date de naissance : "+dateNaissance;
-
 
1401
				}
-
 
1402
				message += "\n";
-
 
1403
			}
-
 
1404
		}
-
 
1405
		
-
 
1406
		return message;
1302
	}
1407
	}
1303
}
1408
}