Subversion Repositories Sites.obs-saisons.fr

Rev

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

Rev 302 Rev 320
Line 98... Line 98...
98
**/
98
**/
Line 99... Line 99...
99
 
99
 
100
htmlEnCours = '';
100
htmlEnCours = '';
101
elementEnCours = null;
101
elementEnCours = null;
-
 
102
ancienneValeurEnCours = null;
Line 102... Line 103...
102
ancienneValeurEnCours = null;
103
id_formulaire = null;
Line 103... Line 104...
103
 
104
 
Line 104... Line 105...
104
function initialiserLignesCliquables() {
105
function initialiserLignesCliquables() {
-
 
106
 
Line 105... Line 107...
105
	
107
	$('.conteneur_element_modifier').hide();
-
 
108
 
-
 
109
	$(".date_observation_individu").live("click", function(e) {
Line -... Line 110...
-
 
110
		e.preventDefault();
106
	$('.conteneur_element_modifier').hide();
111
 
-
 
112
		if($(e.target).hasClass('conteneur_supprimer_observation') || $(e.target).hasClass('supprimer_observation')) {
107
	
113
			return;
108
	$(".date_observation_individu").each(function() {
114
		}
109
		
-
 
110
		$(this).bind('click', function() {
115
 
111
			
116
		$('.element_clique').removeClass('element_clique');
112
			if($(this).hasClass('element_clique')) {
-
 
113
				return false;
-
 
114
			} else {
-
 
115
				
117
		if($(this).hasClass('element_clique')) {
116
				conteneur_obs = $(this).children('span');
118
			fermerDatePicker();
117
				id_formulaire = conteneur_obs.attr('id');
119
			return false;
-
 
120
		} else {
-
 
121
			$(this).addClass('element_clique');
-
 
122
			afficherSaisieObservation($(this));
-
 
123
			return false;
-
 
124
		}
-
 
125
	});
-
 
126
 
-
 
127
	$(".date_observation_individu .conteneur_supprimer_observation").live("click", function(e) {
-
 
128
		e.preventDefault();
-
 
129
		if(window.confirm('Êtes-vous sûr de vouloir supprimer cette observation ?')) {
-
 
130
			// les obs ne sont jamais vraiment supprimées
-
 
131
			// mais seulement remplacées par des dates au format 00/00/yyyy
-
 
132
			envoyerRequeteAjaxSaisieObservation('', $(this).parent('.date_observation_individu'));
-
 
133
		}
-
 
134
	});
-
 
135
 
118
				
136
	// pour fermer le datepicker sur esc
119
				remplacerElementDateParFormulaireAjax(id_formulaire, $(this));
137
	$(document).keyup(function(e) {
Line 120... Line 138...
120
										
138
	  if (e.keyCode === 27) {
-
 
139
			$('.element_clique').removeClass('element_clique');
-
 
140
			fermerDatePicker();   // esc
Line 121... Line 141...
121
				return false;
141
		}
122
			}
142
	});
Line -... Line 143...
-
 
143
}
123
		});
144
 
-
 
145
function afficherSaisieObservation($obs) {
-
 
146
 
-
 
147
	fermerDatePicker();
-
 
148
 
-
 
149
	var dateMin = getDateMinCalendrier();
-
 
150
	var dateMax = getDateMaxCalendrier();
-
 
151
 
124
	});	
152
	var dateCouranteStr = $obs.data('date-observation');
125
}
153
	var dateCourante = new Date();
-
 
154
	if(!!dateCouranteStr && dateCouranteStr != '' && dateCouranteStr != '+') {
126
 
155
		var jour   = parseInt(dateCouranteStr.substring(0,2));
127
function initialiserCalendrierFormulaire() {
156
		var mois  = parseInt(dateCouranteStr.substring(3,5));
128
	
157
		var annee   = parseInt(dateCouranteStr.substring(6,10));
129
	dateMin = getDateMinCalendrier();
-
 
130
	dateMax = getDateMaxCalendrier();
158
		dateCourante = new Date(annee, mois-1, jour);
-
 
159
	}
-
 
160
 
-
 
161
	$obs.find('.datepicker_container').datepicker({
131
	
162
		disabled: true,
-
 
163
		constrainInput: true,
-
 
164
		altFormat: 'dd/mm/yyyy',
-
 
165
		minDate: dateMin,
-
 
166
		maxDate: dateMax,
132
	$(".calendrier").each(function() {
167
		changeMonth: true,
133
		$(this).find("input").datepicker({
-
 
134
			disabled: true,
-
 
135
			altFormat: 'dd/mm/yyyy',
-
 
136
			minDate: dateMin,
-
 
137
			maxDate: dateMax
168
		defaultDate: dateCourante,
Line 138... Line 169...
138
		
169
		onSelect: function(dateText, inst) {
139
		});
170
			validerSaisieObservation(dateText, $obs)
140
	});
-
 
141
}
171
		},
Line 142... Line 172...
142
 
172
		beforeShowDay: function(date) {
Line 143... Line -...
143
$(document).ready(function() {
-
 
144
	initialiserCalendrierFormulaire();
-
 
145
 
-
 
146
});
173
			var dates_a_exclure = getDatesSaisiesPourStadeEtIndividu($obs.data('id-individu'), $obs.data('id-stade-observation'));
147
 
174
      var string = jQuery.datepicker.formatDate('dd/mm/yy', date);
148
function estUneDateValide(peutEtreUneDate) {
175
      return [dates_a_exclure.indexOf(string) == -1]
149
	var reg= new RegExp("^[0-3][0-9][/]{1}[0-1][0-2][/]{1}[0-9]{4}$","g");
-
 
150
	return reg.test(peutEtreUneDate);
-
 
151
}
176
    }
Line 152... Line 177...
152
 
177
	});
153
function getAnneeEnCoursDeConsultation() {
-
 
154
	
-
 
Line -... Line 178...
-
 
178
 
155
	anneeEnCours = jQuery.trim($("#annee_en_cours").html());
179
	$obs.datepicker("show");
156
	
180
	$('.ui-datepicker').attr("title", "Appuyez sur échap pour annuler l'édition");
Line 157... Line -...
157
	if(typeof(anneeEnCours)=='undefined'){ 
-
 
158
		dateCourante = new Date(); 
-
 
159
		anneeEnCours = dateCourante.getFullYear(); 
181
}
160
	}
-
 
-
 
182
 
161
	
183
function validerSaisieObservation(dateStr, $obs) {
-
 
184
 
Line -... Line 185...
-
 
185
	if(estUneDateValide(dateStr)) {
-
 
186
		envoyerRequeteAjaxSaisieObservation(dateStr, $obs);
-
 
187
	}
162
	return anneeEnCours;
188
}
-
 
189
 
-
 
190
function formaterDonneesObservationPourEnvoi(dateStr, $obs) {
Line 163... Line 191...
163
}
191
 
164
 
192
	if(dateStr == null ) {
165
function getDateMinCalendrier() {
193
		return false ;
Line 166... Line 194...
166
	anneeEnCours = getAnneeEnCoursDeConsultation();
194
	}
167
	dateMin = '01/01/'+anneeEnCours;
195
 
Line 168... Line -...
168
	
-
 
169
	return dateMin;
-
 
Line 170... Line 196...
170
}
196
	var anneeEnCours = getAnneeEnCoursDeConsultation();
171
 
197
	if(jQuery.trim(dateStr) == '') {
Line 172... Line -...
172
function getDateMaxCalendrier() {
-
 
173
	
-
 
174
	anneeEnCours = getAnneeEnCoursDeConsultation();
-
 
175
	
-
 
176
	dateMax = '31/12/'+anneeEnCours;
-
 
177
	
-
 
178
	dateCourante = new Date();
-
 
179
	
-
 
180
	if(anneeEnCours == dateCourante.getFullYear()) {
198
		dateStr = '00/00/'+anneeEnCours;
181
		dateMax = dateCourante.getDate()+'/'+(dateCourante.getMonth()+ 1)+'/'+anneeEnCours;
199
	}
182
	}
-
 
183
	
-
 
184
	return dateMax;
-
 
185
}
-
 
186
 
-
 
187
/** Fonctions de manipulation des éléments du tableau pour les transformer en élements cliquables et calendriers **/
-
 
Line 188... Line 200...
188
function initialiserMiniCalendrierFormulaire(id_element) {
200
 
189
	
-
 
-
 
201
	donnees_obs = {
-
 
202
		"id_individu": $obs.data('id-individu'),
-
 
203
		"id_evenement": $obs.data('id-stade-observation'),
Line -... Line 204...
-
 
204
		"date_evenement": dateStr,
-
 
205
		"annee_en_cours": anneeEnCours
-
 
206
	};
190
	dateMin = getDateMinCalendrier();
207
 
-
 
208
	if(!!$obs.data('id-observation')) {
Line 191... Line 209...
191
	dateMax = getDateMaxCalendrier();
209
		donnees_obs.id_observation = $obs.data('id-observation');
192
	
210
	}
Line 193... Line -...
193
	$('#'+id_element)
-
 
194
	.datepicker({
-
 
195
		disabled: true,
211
 
196
		constrainInput: true,
212
	return donnees_obs;
197
		altFormat: 'dd/mm/yyyy',
213
}
198
		minDate: dateMin,
-
 
199
		maxDate: dateMax,
214
 
200
		onSelect: function(dateText, inst) {
215
 
201
			$('#'+id_element).val(dateText);
-
 
202
			donnees_obs = collecterDonneesMiniFormulaire(id_formulaire);
216
/** Fonctions d'envoi et de récupération des élements du formulaire ajax **/
-
 
217
function envoyerRequeteAjaxSaisieObservation(dateStr, $obs) {
-
 
218
 
203
			envoyerRequeteAjaxValidationMiniFormulaire(donnees_obs, id_formulaire);
219
	var est_obs_existante = !!$obs.data('id-observation');
Line 204... Line 220...
204
		},
220
	var donnees_obs = formaterDonneesObservationPourEnvoi(dateStr, $obs);
Line 205... Line 221...
205
		onClose: function(dateText, inst) {
221
 
206
			gererFermetureMiniCalendrier(dateText,id_formulaire);
222
	url_page_courante = document.URL;
207
		}
223
	url_page_courante = url_page_courante.replace('module=Individu','module=Observation');
-
 
224
	url_page_courante = url_page_courante.replace('action=afficherListeIndividu','action=validerFormulaireModificationObservationAjax');
208
	});
225
	url_ajax = url_page_courante.replace('action=validerFormulaireSaisieIndividu','action=validerFormulaireModificationObservationAjax');
-
 
226
 
209
 
227
	$conteneurAjout = null;
Line 210... Line -...
210
	$('#'+id_element).datepicker( "show" );
-
 
211
}
228
	if(!est_obs_existante) {
212
 
229
		var id_conteneur_ajout = 'ajouter_observation_individu_'+donnees_obs['id_individu']+'_evenement_'+donnees_obs['id_evenement'];
Line 213... Line 230...
213
function gererFermetureMiniCalendrier(dateText, id_formulaire) {
230
		var $conteneurAjout = $('#'+id_conteneur_ajout).clone();
214
	
231
	}
-
 
232
 
215
	ancienne_valeur_date = jQuery.trim(ancienneValeurEnCours);
233
	var donnees_obs = formaterDonneesObservationPourEnvoi(dateStr, $obs);
Line 216... Line -...
216
	nouvelle_valeur_date = jQuery.trim(dateText);
-
 
217
	
234
	$.post(url_ajax, donnees_obs, function(obj_retour) {
218
	if(nouvelle_valeur_date == '' && ancienne_valeur_date != '-' && ancienne_valeur_date != nouvelle_valeur_date) {
235
 
Line -... Line 236...
-
 
236
		if(obj_retour.data.erreurs) {
219
		if(window.confirm("Voulez vous supprimer cette observation ?")) {
237
			var message = 'Une ou plusieurs erreurs se sont produites : '+"\n";
Line 220... Line 238...
220
			$('#'+id_formulaire).val(nouvelle_valeur_date);
238
			for (var key in obj_retour.data.erreurs) {
221
			donnees_obs = collecterDonneesMiniFormulaire(id_formulaire);
-
 
222
			envoyerRequeteAjaxValidationMiniFormulaire(donnees_obs, id_formulaire);
239
  		if (obj_retour.data.erreurs.hasOwnProperty(key))
223
		} else {
240
    		message += '- '+obj_retour.data.erreurs[key]+"\n";
224
			$('#'+id_formulaire).val(ancienne_valeur_date);
-
 
225
			remplacerMiniFormulaireParElementDate(id_formulaire);	
241
			}
226
		}
242
			window.alert(message);
Line 227... Line -...
227
	}
-
 
228
}
243
			return;
229
 
244
		}
230
function remplacerElementDateParFormulaireAjax(id_element, conteneur_selectionne) {
245
 
-
 
246
		if(obj_retour.reponse === 'OK') {
Line -... Line 247...
-
 
247
 
-
 
248
			// les obs ne sont jamais vraiment supprimées
-
 
249
			// mais seulement remplacées par des dates au format 00/00/yyyy
231
	
250
			if(estUneDateSuppressionObs(dateStr)) {
Line -... Line 251...
-
 
251
				$obs.remove();
-
 
252
				delete $obs;
-
 
253
				return;
-
 
254
			}
-
 
255
 
Line 232... Line 256...
232
	if(elementEnCours != null) {
256
			$obs.find('.date_observation').text(dateStr);
233
		elementEnCours.removeClass('element_clique');
257
			$obs.data('date-observation', dateStr);
-
 
258
 
Line 234... Line 259...
234
		elementEnCours.html(htmlEnCours);
259
			if(!est_obs_existante) {
235
		ancienneValeurEnCours = null;
260
				$obs.removeClass('ajouter_observation');
-
 
261
				$obs.attr('title', 'Cliquez pour modifier la date de cette observation')
-
 
262
				$obs.data('id-observation', obj_retour.data.id_observation);
236
	}
263
 
237
	
264
				var id_conteneur_observation = 'individu_'+donnees_obs['id_individu']+'_evenement_'+donnees_obs['id_evenement']+'_observation_'+obj_retour.data.id_observation;
-
 
265
				$obs.attr('id', id_conteneur_observation);
Line -... Line 266...
-
 
266
 
-
 
267
				$obs.after($conteneurAjout);
238
	ancienneValeurEnCours = conteneur_selectionne.children('span').html()
268
			}
Line 239... Line 269...
239
	elementEnCours = conteneur_selectionne;
269
 
240
	htmlEnCours = conteneur_selectionne.html();
270
			$('.element_clique').removeClass('element_clique');
241
	
-
 
242
	conteneur_obs = $('#'+id_element);
271
			fermerDatePicker();
243
	valeur_date = conteneur_obs.html();
272
		}
Line 244... Line 273...
244
	valeur_date = valeur_date.replace('-','');
273
	});
Line 245... Line 274...
245
		
274
}
Line 246... Line 275...
246
	conteneur_selectionne.addClass('element_clique');
275
 
247
	conteneur_selectionne.html('<span class="calendrier"><input type="text" value="'+jQuery.trim(valeur_date)+'" class="calendrier" id="'+id_formulaire+'" size="7" maxlenght="10" /></div>');			
276
function estUneDateSuppressionObs(dateStr) {
-
 
277
	var date_vide_pattern = /^00\/00\/\d{4}$/;
248
	initialiserMiniCalendrierFormulaire(id_formulaire);
278
	return dateStr == '' || date_vide_pattern.test(dateStr);
Line 249... Line -...
249
	
-
 
250
}
279
}
251
 
280
 
Line -... Line 281...
-
 
281
function fermerDatePicker() {
252
function remplacerMiniFormulaireParElementDate(id_element) { 
282
	if($(".hasDatepicker").length == 0) {
-
 
283
		return;
Line 253... Line 284...
253
	
284
	}
254
	valeur_date_pour_stade = $('#'+id_element).val();
-
 
-
 
285
 
Line 255... Line 286...
255
	
286
	$(".hasDatepicker").each(function() {
-
 
287
		$(this).datepicker("destroy");
256
	if(jQuery.trim(valeur_date_pour_stade) == '') {
288
		$(this).removeClass(".hasDatepicker").removeAttr('id');
257
		valeur_date_pour_stade = '-';
-
 
Line 258... Line 289...
258
	}
289
	});
Line 259... Line 290...
259
	
290
}
Line 260... Line 291...
260
	elementEnCours.html('<span id="'+id_element+'">'+valeur_date_pour_stade+' </span>');
291
 
-
 
292
function obtenirAttributsData(el) {
261
	elementEnCours.removeClass('element_clique');
293
	return [].filter.call(el.attributes, function(at) { return /^data-/.test(at.name); });
Line -... Line 294...
-
 
294
}
-
 
295
 
Line 262... Line 296...
262
	elementEnCours = null;
296
// vérifie qu'une date est au format d/m/y
263
	ancienneValeurEnCours = null;
297
// merci stacky https://stackoverflow.com/questions/5812220/how-to-validate-a-date
264
 
298
function estUneDateValide(s) {