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(); |