Subversion Repositories eFlore/Applications.cel

Rev

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