Subversion Repositories eFlore/Applications.cel

Rev

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

Rev Author Line No. Line
2850 aurel 1
/* Héritage */
2
function WidgetSaisieMessicoles()
3
{
2857 aurel 4
	this.taxons = {};
2850 aurel 5
}
2857 aurel 6
 
2850 aurel 7
WidgetSaisieMessicoles.prototype = new WidgetSaisie();
8
 
9
/* Surcharge des fonctions */
2854 mathias 10
 
2857 aurel 11
// Surcharge ajouterObs
12
WidgetSaisieMessicoles.prototype.ajouterObs = function() {
2852 mathias 13
	// Fermeture automatique des dialogue de transmission de données
14
	// @WARNING TEST
15
	$('#dialogue-obs-transaction-ko').hide();
16
	$('#dialogue-obs-transaction-ok').hide();
2850 aurel 17
 
2852 mathias 18
	// vérification : si la détermination est incertaine, obligation
19
	// de fournir au moins une image
2857 aurel 20
	var certitude = $('#identification-liste').val(),
21
		nbImages = $('#miniatures img').length,
2852 mathias 22
		imagesOK = true;
23
	if (certitude != "certaine" && nbImages == 0) {
24
		imagesOK = false;
2857 aurel 25
		$('#image-obligatoire').show();
2852 mathias 26
	} else {
2857 aurel 27
		$('#image-obligatoire').hide();
2852 mathias 28
	}
29
 
30
	if ((this.validerFormulaire() == true) && imagesOK) {
31
		this.masquerPanneau('#dialogue-form-invalide');
2857 aurel 32
		//return false;
2852 mathias 33
		// suite des opérations
34
		this.obsNbre = this.obsNbre + 1;
35
		$(".obs-nbre").text(this.obsNbre);
36
		$(".obs-nbre").triggerHandler('changement');
37
		this.afficherObs();
38
		this.stockerObsData();
39
		this.supprimerMiniatures();
40
		if(! this.especeImposee) {
41
			$("#taxon").val("");
42
			$("#taxon").data("numNomSel",undefined);
43
		}
2881 aurel 44
		$('#form-obs').each(function(){
45
			this.reset();
46
		});
2852 mathias 47
		$('#barre-progression-upload').attr('aria-valuemax', this.obsNbre);
48
		$('#barre-progression-upload .sr-only').text('0/'+this.obsNbre+" observations transmises");
49
	} else {
50
		this.afficherPanneau('#dialogue-form-invalide');
51
	}
52
};
53
 
2857 aurel 54
// surcharge fonction definirReglesFormValidator()
55
WidgetSaisieMessicoles.prototype.definirReglesFormValidator = function() {
56
	// WidgetSaisie.definirReglesFormValidator();
57
	$("#form-observateur").validate({
58
		rules: {
59
			courriel : {
60
				required : true,
61
				email : true},
62
			courriel_confirmation : {
63
				required : true,
64
				equalTo: "#courriel"}
65
		}
66
	});
67
	$("#form-station").validate({
2860 mathias 68
		ignore: ':hidden:not("#latitude, #longitude")', // validation des champs cachés...
69
		errorPlacement: function(error, element) { // ...mais erreur visible
70
			error.insertBefore("#coordonnees-geo");
71
		},
72
		groups: {
73
			latLon: "latitude longitude"
74
		},
2857 aurel 75
		rules: {
76
			latitude : {
2860 mathias 77
				required: true,
78
				range: [-90, 90]
79
			},
2857 aurel 80
			longitude : {
2860 mathias 81
				required: true,
82
				range: [-180, 180]
83
			}
2861 mathias 84
		},
85
		messages: {
86
			// astuce pour simuler un message personnalisé pour le groupe "latLon"
87
			latitude: "Veuillez géolocaliser votre observation en déplaçant le curseur sur la carte",
88
			longitude: "Veuillez géolocaliser votre observation en déplaçant le curseur sur la carte"
2857 aurel 89
		}
90
	});
91
	$("#form-obs").validate({
92
		rules: {
93
			"taxon-liste" : "required",
94
			"abondance-liste" : "required",
95
			"zone-champ[]" : {
96
            	required : true,
97
            	minlength : 1
98
            }
2860 mathias 99
		},
2881 aurel 100
		errorPlacement: function(error, element) {
2860 mathias 101
			error.insertBefore(element.parent());
2857 aurel 102
		}
103
	});
104
	$("#form-date").validate({
105
		rules: {
106
			date : {
107
				required : true,
108
				date : date
109
			}
110
		}
111
	});
112
};
113
 
114
// surcharge fonction validerFormulaire()
115
WidgetSaisieMessicoles.prototype.validerFormulaire = function() {
116
	observateur = $("#form-observateur").valid();
117
	station = $("#form-station").valid();
118
	obs = $("#form-obs").valid();
119
	date = $("#form-date").valid();
120
	return (observateur && station && obs && date);
121
};
122
 
123
// surcharge fonction stockerObsData()
124
WidgetSaisieMessicoles.prototype.stockerObsData = function() {
125
	var lthis = this;
126
	var nomHorsListe = $('#taxon-liste').val() == '?' ? true : false;
127
		numNomSel = nomHorsListe ? $('#taxon').data('numNomSel') : $('#taxon-liste').val();
128
	var nomSel = nomHorsListe ? $('#taxon').val() : $('#taxon-liste option:selected').data('nom-a-sauver'),
129
		nomRet = nomHorsListe ? $('#taxon').data('nomRet') : this.taxons[numNomSel]['nom_ret'],
130
		numNomRet = nomHorsListe ? $('#taxon').data('numNomRet') : this.taxons[numNomSel]['num_nom_ret'],
131
		numTaxon = nomHorsListe ? $('#taxon').data('nt') : this.taxons[numNomSel]['num_taxon'],
132
		famille = nomHorsListe ? $('#taxon').data('famille') : this.taxons[numNomSel]['famille'],
133
		referentiel = (numNomSel == undefined) ? '' : this.nomSciReferentiel,
2862 mathias 134
		notes = $('#notes').val();
135
	// champs spécifques aux messicoles
136
	var abondance = $('#abondance-liste').val(),
137
		certitude = $('#identification-liste').val();
2880 aurel 138
 
2862 mathias 139
 
2857 aurel 140
	$('#liste-obs').data('obsId'+this.obsNbre, {
141
		'date': $('#date').val(),
142
		'notes': notes,
143
 
144
		'latitude': $('#latitude').val(),
145
		'longitude': $('#longitude').val(),
146
		'commune_nom': $('#commune-nom').text(),
147
		'commune_code_insee': $('#commune-code-insee').text(),
2862 mathias 148
		'lieudit' : $("#lieudit").val(),
149
		'station' : $("#station").val(),
150
		'milieu' : $("#milieu").val(),
2857 aurel 151
 
152
		'nom_sel': nomSel,
153
		'num_nom_sel': numNomSel,
154
		'nom_ret': nomRet,
155
		'num_nom_ret': numNomRet,
156
		'num_taxon': numTaxon,
157
		'famille': famille,
158
		'referentiel': referentiel,
2862 mathias 159
 
2857 aurel 160
		'certitude': certitude,
161
		'abondance': abondance,
162
 
163
		// Ajout des champs images
2862 mathias 164
		'image_nom' : lthis.getNomsImgsOriginales(),
165
		'image_b64' : lthis.getB64ImgsOriginales(),
2857 aurel 166
 
167
		// Ajout des champs étendus de l'obs
2862 mathias 168
		'obs_etendue': lthis.getObsChpEtendus()
2857 aurel 169
	});
170
	if (this.debug) {
171
		console.log($('#liste-obs').data('obsId'+this.obsNbre));
172
	}
173
};
174
 
175
/**
176
 * Affiche une observation dans la liste des observations à transmettre
177
 */
178
WidgetSaisieMessicoles.prototype.afficherObs = function() {
2863 mathias 179
	console.log(this.taxons);
2862 mathias 180
	var nomHorsListe = $('#taxon-liste').val() == '?' ? true : false,
181
		numNomSel = nomHorsListe ? $('#taxon').data('numNomSel') : $('#taxon-liste').val();
182
	var nomSel = nomHorsListe ? $('#taxon').val() : $('#taxon-liste option:selected').data('nom-a-sauver'),
2863 mathias 183
		//famille = nomHorsListe ? $('#taxon').data('famille') : this.taxons[numNomSel]['famille'],
2862 mathias 184
		referentiel = (numNomSel == undefined) ? '' : this.nomSciReferentiel;
185
 
2857 aurel 186
	var commune = $("#commune-nom").text();
187
	commune = commune.trim() != "" ? commune : $("#carte-recherche").val();
188
	var code_insee = $('#commune-code-insee').text();
189
	code_insee = code_insee.trim() != "" ? "("+code_insee+")" : "";
190
	var latitude = $("#latitude").val();
191
	var longitude = $("#longitude").val();
2881 aurel 192
	var lieudit = ($('#lieudit').val() != "" ? $('#lieudit').val() : "aucun lieu-dit saisi");
193
	var station = ($('#station').val() != "" ? $('#station').val() : "aucune station saisie");
194
	var milieu = ($('#milieu').val() != "" ? $('#milieu').val() : "aucun milieu saisi");
195
	var notes = ($('#notes').val() != "" ? $('#notes').val() : "<b>aucunes notes saisies</b>");
2862 mathias 196
	var date = $("#date").val();
197
	// champs spécifques aux messicoles
2881 aurel 198
 
199
 
200
	var culture = ($('input[name=type-culture]').is(':checked') ? $('input[name=type-culture]:checked').data('titre') : "?");
201
	var cultureDetails = ($('input[name=type-culture]').is(':checked') ? $('input[name=type-culture]:checked').parent().find('input[type=text]').val() : '?');
202
 
203
 
204
 
2857 aurel 205
	var identification = $('#identification-liste option:selected').data('titre');
206
	var abondance = $('#abondance-liste option:selected').data('titre');
207
	var zoneChamp = [];
208
	// récupération des cases à cocher multiples dans un tableau pour l'abondance
209
	$('input[name="zone-champ[]"]:checked').each(function() {
210
		zoneChamp.push(' '+$(this).data('titre'));
211
	});
212
 
213
	// affichage des données de l'observation à transmettre
214
	$("#liste-obs").prepend(
215
		'<div id="obs'+this.obsNbre+'" class="row-fluid obs obs'+this.obsNbre+'">'+
216
			'<div class="span12">'+
217
				'<div class="well">'+
218
					'<div class="obs-action pull-right has-tooltip" data-placement="bottom" '+
219
						'title="Supprimer cette observation de la liste à transmettre">'+
220
						'<button class="btn btn-danger supprimer-obs" value="'+this.obsNbre+'" title="'+this.obsNbre+'">'+
221
							'<i class="icon-trash icon-white"></i>'+
222
						'</button>'+
223
					'</div> '+
224
					'<div class="row-fluid">'+
225
						'<div class="thumbnail span2">'+
226
						this.ajouterImgMiniatureAuTransfert()+
227
						'</div>'+
228
						'<div class="span9">'+
229
							'<ul class="unstyled">'+
230
								'<li>'+
2866 aurel 231
									'<span class="nom-sci gras">'+nomSel+'</span> '+
2862 mathias 232
									this.ajouterNumNomSel(numNomSel, referentiel)+
2857 aurel 233
									' observé à <span class="gras">'+commune+' '+code_insee+'</span> ['+latitude+' / '+longitude+']'+' le <span class="gras">'+' '+date+'</span>'+
234
								'</li>'+
235
								'<li>'+
236
									'<div class="row-fluid">'+
237
										'<span class="span4">Lieu-dit : <span class="gras">'+lieudit+'</span></span>'+
238
										'<span class="span4">Station : <span class="gras">'+station+'</span></span>'+
239
										'<span class="span4">Milieu : <span class="gras">'+milieu+'</span></span>'+
240
									'</div>'+
241
								'</li>'+
242
								'<li>'+
243
									'<div class="row-fluid">'+
2881 aurel 244
										'<span class="span4">Culture de <span class="gras">'+cultureDetails+'</span> de type <span class="gras">'+culture+'</span></span>'+
2857 aurel 245
										'<span class="span4">Identification <span class="gras">'+identification+'</span></span>'+
246
										'<span class="span4">Abondance de <span class="gras">'+abondance+'</span></span>'+
247
									'</div>'+
248
								'</li>'+
249
								'<li>'+
250
									'Espèce située en <span class="gras">'+zoneChamp+'</span> du champ'+
251
								'</li>'+
252
								'<li>'+
253
									'Notes : <span class="discretion">'+notes+'</span>'+
254
								'</li>'+
255
							'</ul>'+
256
						'</div>'+
257
					'</div>'+
258
				'</div>'+
259
			'</div>'+
260
		'</div>');
261
	$('#zone-liste-obs').removeClass("hidden").show();
262
};
263
 
2863 mathias 264
WidgetSaisieMessicoles.prototype.surAutocompletionTaxon = function(event, ui) {
265
	$("#taxon").data(ui.item);
266
	if (ui.item.retenu == true) {
267
		$("#taxon").addClass('ns-retenu');
268
	} else {
269
		$("#taxon").removeClass('ns-retenu');
270
	}
271
	// détection de si c'est un(e?) messicole ou pas
272
	var panneauAvertissementNonMessicole = $('#avertissement-non-messicole');
273
	panneauAvertissementNonMessicole.hide();
274
	if (nnr_messicoles.indexOf(parseInt(ui.item.numNomRet)) == -1) {
275
		panneauAvertissementNonMessicole.show();
276
	}
277
};
278
 
2862 mathias 279
WidgetSaisieMessicoles.prototype.ajouterNumNomSel = function(numNom, referentiel) {
280
	var nn = '';
281
	if (numNom == '' || numNom == undefined) {
282
		nn = '<span class="alert-error">[non lié au référentiel]</span>';
283
	} else {
284
		nn = '<span class="nn">[nn'+numNom+']</span>'
285
		+ '<span class="referentiel-obs"> '
286
		+ referentiel+'</span>';
287
	}
288
	return nn;
289
};
2857 aurel 290
 
2862 mathias 291
// surcharge, abadon du mécanisme générique et bidouillage en dur (plus facile
292
// car champs radio / checkboxes)
293
WidgetSaisieMessicoles.prototype.getObsChpEtendus = function() {
294
	var champs = [];
2857 aurel 295
 
2862 mathias 296
	var zoneChamp = [];
297
	$('input[name="zone-champ[]"]:checked').each(function() {
298
		zoneChamp.push($(this).val());
299
	});
300
	//console.log("zc:", zoneChamp);
301
	// obligatoire donc jamais vide (on croise les doigts)
302
	champs.push({
303
		cle: "zoneDuChamp",
304
		label: "Zone du champ",
305
		valeur: zoneChamp.join()
306
	});
2881 aurel 307
 
308
	var typeCulture = $('input[name=type-culture]:checked').data('titre');
309
	alert(typeCulture);
2862 mathias 310
	//console.log("tc:", typeCulture);
311
	if (typeCulture != '') {
312
		champs.push({
313
			cle: "typeDeCulture",
314
			label: "Type de culture",
315
			valeur: typeCulture
316
		});
317
	}
2881 aurel 318
 
319
	var typeCultureDetails = $('input[name=type-culture]:checked').parent().find('input[type=text]').val();
320
	alert(typeCultureDetails);
321
 
322
	//console.log("tcd:", typeCultureDetails);
323
	if (typeCultureDetails != '') {
2880 aurel 324
		champs.push({
2881 aurel 325
			cle: "typeDeCultureDetails",
326
			label: "Details de la culture",
327
			valeur: typeCultureDetails
2880 aurel 328
		});
329
	}
2862 mathias 330
 
331
	return champs;
332
}
333
 
334
 
335
 
336
 
2851 mathias 337
/* jQuery en vrac */
338
$(document).ready(function() {
2881 aurel 339
 
2851 mathias 340
	// super popover qui va chercher son contenu dans un div à côté (pour les
341
	// boutons d'aide des types de champs, etc.)
342
	$('[data-toggle="popover"]').popover({
343
        html : true,
344
        content: function() {
345
			var parentFor = $(this).parent().attr("for");
346
			var popoverHtmlContentDiv = $('.popover-html-content[data-for="' + parentFor + '"]');
347
			return popoverHtmlContentDiv.html();
348
        }
349
    });
2860 mathias 350
 
2880 aurel 351
    // Activation de la saisie si on clique sur un type de champ
2881 aurel 352
    function gererAffichageChampCulture(){
353
    	$('.culture input[type=text]').hide();
354
    	var radio = $('.culture input[type=radio]:checked');
355
    	var input = radio.parent().find('input[type=text]');
2880 aurel 356
   		(radio.is(':checked')) ? input.show() && input.focus() : input.hide();
2881 aurel 357
   	}
358
   	$('.culture').change(gererAffichageChampCulture);
359
   	// ... et aussi au chargement du widget, si la sélection est restée sur un champ
360
	gererAffichageChampCulture();
361
 
362
 
363
 
364
 
2860 mathias 365
 
366
    // Affichage de l'espèce liée au référentiel sélectionné lors de la sélection 'Autres' (espèce)
2862 mathias 367
	function gererAffichageChampAutreEspece() {
2857 aurel 368
    	var option = $('#taxon-liste').val();
369
    	var taxonCompletion = $('#taxon-input-groupe');
370
    	if (option == '?') {
371
    		taxonCompletion.show();
372
    		$('#taxon').focus();
2856 aurel 373
    	}
374
    	else {
2857 aurel 375
    		taxonCompletion.hide();
2856 aurel 376
    	}
2862 mathias 377
    }
378
    $('#taxon-liste').change(gererAffichageChampAutreEspece);
379
	// ... et aussi au chargement du widget, si la sélection est restée sur "Autre espèce"
380
	gererAffichageChampAutreEspece();
2860 mathias 381
 
2857 aurel 382
    // On masque l'option par défaut pour l'abondance puisque le choix est obligatoire
383
    $('#abondance-liste').click(masquerTitreListe('abondance'));
384
    function masquerTitreListe(element) {
385
		$('#' + element + '-liste .a-masquer').hide();
386
	}
2850 aurel 387
});