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 |
}
|