Subversion Repositories Sites.obs-saisons.fr

Compare Revisions

Regard whitespace Rev 302 → Rev 320

/trunk/applications/saisie/squelettes/js/saisie.js
100,215 → 100,249
htmlEnCours = '';
elementEnCours = null;
ancienneValeurEnCours = null;
id_formulaire = null;
 
function initialiserLignesCliquables() {
$('.conteneur_element_modifier').hide();
$(".date_observation_individu").each(function() {
$(".date_observation_individu").live("click", function(e) {
e.preventDefault();
$(this).bind('click', function() {
if($(e.target).hasClass('conteneur_supprimer_observation') || $(e.target).hasClass('supprimer_observation')) {
return;
}
$('.element_clique').removeClass('element_clique');
if($(this).hasClass('element_clique')) {
fermerDatePicker();
return false;
} else {
conteneur_obs = $(this).children('span');
id_formulaire = conteneur_obs.attr('id');
remplacerElementDateParFormulaireAjax(id_formulaire, $(this));
$(this).addClass('element_clique');
afficherSaisieObservation($(this));
return false;
}
});
 
$(".date_observation_individu .conteneur_supprimer_observation").live("click", function(e) {
e.preventDefault();
if(window.confirm('Êtes-vous sûr de vouloir supprimer cette observation ?')) {
// les obs ne sont jamais vraiment supprimées
// mais seulement remplacées par des dates au format 00/00/yyyy
envoyerRequeteAjaxSaisieObservation('', $(this).parent('.date_observation_individu'));
}
});
 
// pour fermer le datepicker sur esc
$(document).keyup(function(e) {
if (e.keyCode === 27) {
$('.element_clique').removeClass('element_clique');
fermerDatePicker(); // esc
}
});
}
 
function initialiserCalendrierFormulaire() {
function afficherSaisieObservation($obs) {
dateMin = getDateMinCalendrier();
dateMax = getDateMaxCalendrier();
fermerDatePicker();
$(".calendrier").each(function() {
$(this).find("input").datepicker({
var dateMin = getDateMinCalendrier();
var dateMax = getDateMaxCalendrier();
 
var dateCouranteStr = $obs.data('date-observation');
var dateCourante = new Date();
if(!!dateCouranteStr && dateCouranteStr != '' && dateCouranteStr != '+') {
var jour = parseInt(dateCouranteStr.substring(0,2));
var mois = parseInt(dateCouranteStr.substring(3,5));
var annee = parseInt(dateCouranteStr.substring(6,10));
dateCourante = new Date(annee, mois-1, jour);
}
 
$obs.find('.datepicker_container').datepicker({
disabled: true,
constrainInput: true,
altFormat: 'dd/mm/yyyy',
minDate: dateMin,
maxDate: dateMax
});
});
maxDate: dateMax,
changeMonth: true,
defaultDate: dateCourante,
onSelect: function(dateText, inst) {
validerSaisieObservation(dateText, $obs)
},
beforeShowDay: function(date) {
var dates_a_exclure = getDatesSaisiesPourStadeEtIndividu($obs.data('id-individu'), $obs.data('id-stade-observation'));
var string = jQuery.datepicker.formatDate('dd/mm/yy', date);
return [dates_a_exclure.indexOf(string) == -1]
}
 
$(document).ready(function() {
initialiserCalendrierFormulaire();
 
});
 
function estUneDateValide(peutEtreUneDate) {
var reg= new RegExp("^[0-3][0-9][/]{1}[0-1][0-2][/]{1}[0-9]{4}$","g");
return reg.test(peutEtreUneDate);
$obs.datepicker("show");
$('.ui-datepicker').attr("title", "Appuyez sur échap pour annuler l'édition");
}
 
function getAnneeEnCoursDeConsultation() {
function validerSaisieObservation(dateStr, $obs) {
anneeEnCours = jQuery.trim($("#annee_en_cours").html());
if(typeof(anneeEnCours)=='undefined'){
dateCourante = new Date();
anneeEnCours = dateCourante.getFullYear();
if(estUneDateValide(dateStr)) {
envoyerRequeteAjaxSaisieObservation(dateStr, $obs);
}
return anneeEnCours;
}
 
function getDateMinCalendrier() {
anneeEnCours = getAnneeEnCoursDeConsultation();
dateMin = '01/01/'+anneeEnCours;
function formaterDonneesObservationPourEnvoi(dateStr, $obs) {
return dateMin;
if(dateStr == null ) {
return false ;
}
 
function getDateMaxCalendrier() {
var anneeEnCours = getAnneeEnCoursDeConsultation();
if(jQuery.trim(dateStr) == '') {
dateStr = '00/00/'+anneeEnCours;
}
anneeEnCours = getAnneeEnCoursDeConsultation();
donnees_obs = {
"id_individu": $obs.data('id-individu'),
"id_evenement": $obs.data('id-stade-observation'),
"date_evenement": dateStr,
"annee_en_cours": anneeEnCours
};
dateMax = '31/12/'+anneeEnCours;
dateCourante = new Date();
if(anneeEnCours == dateCourante.getFullYear()) {
dateMax = dateCourante.getDate()+'/'+(dateCourante.getMonth()+ 1)+'/'+anneeEnCours;
if(!!$obs.data('id-observation')) {
donnees_obs.id_observation = $obs.data('id-observation');
}
return dateMax;
return donnees_obs;
}
 
/** Fonctions de manipulation des éléments du tableau pour les transformer en élements cliquables et calendriers **/
function initialiserMiniCalendrierFormulaire(id_element) {
dateMin = getDateMinCalendrier();
dateMax = getDateMaxCalendrier();
/** Fonctions d'envoi et de récupération des élements du formulaire ajax **/
function envoyerRequeteAjaxSaisieObservation(dateStr, $obs) {
$('#'+id_element)
.datepicker({
disabled: true,
constrainInput: true,
altFormat: 'dd/mm/yyyy',
minDate: dateMin,
maxDate: dateMax,
onSelect: function(dateText, inst) {
$('#'+id_element).val(dateText);
donnees_obs = collecterDonneesMiniFormulaire(id_formulaire);
envoyerRequeteAjaxValidationMiniFormulaire(donnees_obs, id_formulaire);
},
onClose: function(dateText, inst) {
gererFermetureMiniCalendrier(dateText,id_formulaire);
}
});
var est_obs_existante = !!$obs.data('id-observation');
var donnees_obs = formaterDonneesObservationPourEnvoi(dateStr, $obs);
 
$('#'+id_element).datepicker( "show" );
url_page_courante = document.URL;
url_page_courante = url_page_courante.replace('module=Individu','module=Observation');
url_page_courante = url_page_courante.replace('action=afficherListeIndividu','action=validerFormulaireModificationObservationAjax');
url_ajax = url_page_courante.replace('action=validerFormulaireSaisieIndividu','action=validerFormulaireModificationObservationAjax');
 
$conteneurAjout = null;
if(!est_obs_existante) {
var id_conteneur_ajout = 'ajouter_observation_individu_'+donnees_obs['id_individu']+'_evenement_'+donnees_obs['id_evenement'];
var $conteneurAjout = $('#'+id_conteneur_ajout).clone();
}
 
function gererFermetureMiniCalendrier(dateText, id_formulaire) {
var donnees_obs = formaterDonneesObservationPourEnvoi(dateStr, $obs);
$.post(url_ajax, donnees_obs, function(obj_retour) {
ancienne_valeur_date = jQuery.trim(ancienneValeurEnCours);
nouvelle_valeur_date = jQuery.trim(dateText);
if(nouvelle_valeur_date == '' && ancienne_valeur_date != '-' && ancienne_valeur_date != nouvelle_valeur_date) {
if(window.confirm("Voulez vous supprimer cette observation ?")) {
$('#'+id_formulaire).val(nouvelle_valeur_date);
donnees_obs = collecterDonneesMiniFormulaire(id_formulaire);
envoyerRequeteAjaxValidationMiniFormulaire(donnees_obs, id_formulaire);
} else {
$('#'+id_formulaire).val(ancienne_valeur_date);
remplacerMiniFormulaireParElementDate(id_formulaire);
if(obj_retour.data.erreurs) {
var message = 'Une ou plusieurs erreurs se sont produites : '+"\n";
for (var key in obj_retour.data.erreurs) {
if (obj_retour.data.erreurs.hasOwnProperty(key))
message += '- '+obj_retour.data.erreurs[key]+"\n";
}
window.alert(message);
return;
}
}
 
function remplacerElementDateParFormulaireAjax(id_element, conteneur_selectionne) {
if(obj_retour.reponse === 'OK') {
if(elementEnCours != null) {
elementEnCours.removeClass('element_clique');
elementEnCours.html(htmlEnCours);
ancienneValeurEnCours = null;
// les obs ne sont jamais vraiment supprimées
// mais seulement remplacées par des dates au format 00/00/yyyy
if(estUneDateSuppressionObs(dateStr)) {
$obs.remove();
delete $obs;
return;
}
ancienneValeurEnCours = conteneur_selectionne.children('span').html()
elementEnCours = conteneur_selectionne;
htmlEnCours = conteneur_selectionne.html();
$obs.find('.date_observation').text(dateStr);
$obs.data('date-observation', dateStr);
conteneur_obs = $('#'+id_element);
valeur_date = conteneur_obs.html();
valeur_date = valeur_date.replace('-','');
if(!est_obs_existante) {
$obs.removeClass('ajouter_observation');
$obs.attr('title', 'Cliquez pour modifier la date de cette observation')
$obs.data('id-observation', obj_retour.data.id_observation);
conteneur_selectionne.addClass('element_clique');
conteneur_selectionne.html('<span class="calendrier"><input type="text" value="'+jQuery.trim(valeur_date)+'" class="calendrier" id="'+id_formulaire+'" size="7" maxlenght="10" /></div>');
initialiserMiniCalendrierFormulaire(id_formulaire);
var id_conteneur_observation = 'individu_'+donnees_obs['id_individu']+'_evenement_'+donnees_obs['id_evenement']+'_observation_'+obj_retour.data.id_observation;
$obs.attr('id', id_conteneur_observation);
$obs.after($conteneurAjout);
}
 
function remplacerMiniFormulaireParElementDate(id_element) {
$('.element_clique').removeClass('element_clique');
fermerDatePicker();
}
});
}
valeur_date_pour_stade = $('#'+id_element).val();
function estUneDateSuppressionObs(dateStr) {
var date_vide_pattern = /^00\/00\/\d{4}$/;
return dateStr == '' || date_vide_pattern.test(dateStr);
}
if(jQuery.trim(valeur_date_pour_stade) == '') {
valeur_date_pour_stade = '-';
function fermerDatePicker() {
if($(".hasDatepicker").length == 0) {
return;
}
elementEnCours.html('<span id="'+id_element+'">'+valeur_date_pour_stade+' </span>');
elementEnCours.removeClass('element_clique');
elementEnCours = null;
ancienneValeurEnCours = null;
$(".hasDatepicker").each(function() {
$(this).datepicker("destroy");
$(this).removeClass(".hasDatepicker").removeAttr('id');
});
}
 
function obtenirAttributsData(el) {
return [].filter.call(el.attributes, function(at) { return /^data-/.test(at.name); });
}
 
// vérifie qu'une date est au format d/m/y
// merci stacky https://stackoverflow.com/questions/5812220/how-to-validate-a-date
function estUneDateValide(s) {
var bits = s.split('/');
var d = new Date(bits[2], bits[1] - 1, bits[0]);
return d && (d.getMonth() + 1) == bits[1];
}
 
/** Fonctions d'envoi et de récupération des élements du formulaire ajax **/
function envoyerRequeteAjaxValidationMiniFormulaire(donnees_obs, id_formulaire) {
function getDatesSaisiesPourStadeEtIndividu(id_individu, id_stade) {
var selecteur_data = '[data-id-individu="'+id_individu+'"]'+
'[data-id-stade-observation="'+id_stade+'"]';
url_page_courante = document.URL;
url_page_courante = url_page_courante.replace('module=Individu','module=Observation');
url_page_courante = url_page_courante.replace('action=afficherListeIndividu','action=validerFormulaireModificationObservationAjax');
url_ajax = url_page_courante.replace('action=validerFormulaireSaisieIndividu','action=validerFormulaireModificationObservationAjax');
$.post(url_ajax, donnees_obs, function(obj_retour) {
if(obj_retour.reponse === 'OK') {
remplacerMiniFormulaireParElementDate(id_formulaire);
return $('.date_observation_individu'+selecteur_data).map(function() {
return $(this).data("date-observation");
}).get();
}
});
}
 
function collecterDonneesMiniFormulaire(id_formulaire) {
function getAnneeEnCoursDeConsultation() {
valeur_date_pour_stade = $('#'+id_formulaire).val();
anneeEnCours = jQuery.trim($("#annee_en_cours").html());
if(valeur_date_pour_stade == null ) {
return false ;
if(typeof(anneeEnCours)=='undefined'){
dateCourante = new Date();
anneeEnCours = dateCourante.getFullYear();
}
if(jQuery.trim(valeur_date_pour_stade) == '') {
valeur_date_pour_stade = '00/00/'+anneeEnCours;
return anneeEnCours;
}
id_individu_stade_obs = id_formulaire.split('_');
function getDateMinCalendrier() {
anneeEnCours = getAnneeEnCoursDeConsultation();
dateMin = '01/01/'+anneeEnCours;
stade_obs = 'observation_'+id_individu_stade_obs[3];
date_annee_en_cours = jQuery.trim($("#annee_en_cours").html());
return dateMin;
}
donnees_obs = { "id_individu": id_individu_stade_obs[1],
"annee_en_cours": date_annee_en_cours
};
function getDateMaxCalendrier() {
identifiant_observation = 'observation_'+id_individu_stade_obs[3];
anneeEnCours = getAnneeEnCoursDeConsultation();
donnees_obs[identifiant_observation] = valeur_date_pour_stade;
dateMax = '31/12/'+anneeEnCours;
return donnees_obs;
dateCourante = new Date();
 
if(anneeEnCours == dateCourante.getFullYear()) {
dateMax = dateCourante.getDate()+'/'+(dateCourante.getMonth()+ 1)+'/'+anneeEnCours;
}
 
return dateMax;
}
 
$('#saisie_liste_evenements').ready(function() {
initialiserLignesCliquables();