projet-php/js/consultations.js

176 lines
6.1 KiB
JavaScript
Executable File

var notifBar = document.getElementById('NOTIFBAR');
notifBar.children[1].children[2].addEventListener('click', function(e){
remClass(notifBar, 'active');
}, false);
/* [1] On récupère les 2 <select> de création de RDV
===============================================================*/
var newRDVPatient = document.getElementById('newRDVPatient');
var newRDVMedecin = document.getElementById('newRDVMedecin');
/* [2] Si on a récupéré les 2 <select>, on créé l'évènement de selection dynamique
===============================================================*/
if( newRDVPatient != null && newRDVMedecin != null ){
/* [1] On selectionne dynamiquement le médecin traitant associé
=======================================================================*/
newRDVPatient.addEventListener('change', function(e){
var child = document.querySelector("#newRDVPatient > option[value='"+newRDVPatient.value+"'][data-medecin]");
// on selectionne le medecin associé
newRDVMedecin.value = child.dataset.medecin;
addClass(newRDVMedecin, 'associated');
}, false);
// [1] On met en valeur le médecin traitant associé (class=associated)
// =======================================================================
newRDVMedecin.addEventListener('change', function(e){
var child = document.querySelector("#newRDVPatient > option[value='"+newRDVPatient.value+"'][data-medecin]");
if( newRDVMedecin.value == child.dataset.medecin ) // si c'est le medecin traitant, on met en valeur l'association
addClass(newRDVMedecin, 'associated');
else
remClass(newRDVMedecin, 'associated');
}, false);
}
/* VERIFICATION DES CHAMPS */
var inCk = new inputChecker();
var inDate = document.getElementById('inDate');
var inHeure = document.getElementById('inHeure');
var inSecu = document.getElementById('inSecu');
var sbCreer = document.getElementById('sbCreer');
// format de date simplifié
var dateFormat = new formatChecker(null,
'Ji/Mi/2iii', { 'J': '[0-3]', 'M': '[0-1]' }
);
// format de temps simplifié
var timeFormat = new formatChecker(null,
'Hi:Mi', { 'H': '[0-2]', 'M': '[0-6]' }
);
// format numéro SECU simplifié
var secuFormat = new formatChecker(null,
'S ii Mi ii iii iii ii', { 'S': '[0-1]', 'M': '[0-1]' }
);
var now = new Date();
inCk.append( inDate, dateFormat, '01/01/2015' );
inCk.append( inHeure, timeFormat, '23:59' );
inCk.append( inSecu, secuFormat, inSecu.placeholder );
inDate.addEventListener('keyup', function(e){
if( inCk.check(inDate) ) addClass(inDate, 'validated'); // on active la classe si correct
else{ // si incorrect
remClass(inDate, 'validated'); // on désactive la classe
inCk.correct(inDate, false); // on corrige partiellement
if( inCk.check(inDate) ) addClass(inDate, 'validated'); // mise à jour de la classe après correction
}
}, false);
inHeure.addEventListener('keyup', function(e){
if( inCk.check(inHeure) ) addClass(inHeure, 'validated'); // on active la classe
else{ // si incorrect
remClass(inHeure, 'validated'); // on désactive la classe
inCk.correct(inHeure, false); // on corrige partiellement
if( inCk.check(inHeure) ) addClass(inHeure, 'validated'); // mise à jour de la classe après correction
}
}, false);
inDuree.addEventListener('keyup', function(e){
if( !isNaN(parseInt(inDuree.value)) ){
inDuree.value = parseInt( inDuree.value ); // on caste en <int>
addClass(inDuree, 'validated'); // on active la classe si correct
}else // si incorrect
remClass(inDuree, 'validated'); // on désactive la classe
}, false);
function checkSecuControlKey(pNumSecu){
var NIR = pNumSecu.slice(0,-2).replace(/ /g, '');
var key = pNumSecu.slice(-2);
return 97-(NIR%97) == key;
}
inSecu.addEventListener('keyup', function(e){
if( inCk.check(inSecu) ){
if( checkSecuControlKey(inSecu.value) ){ // si la clé est correcte
addClass(inSecu, 'validated'); // on dis que le champ est valide
remClass(inSecu, 'invalid'); // on dis qu'il n'est pas invalide
}else{
remClass(inSecu, 'validated'); // on dis que le champ n'est pas valide
addClass(inSecu, 'invalid'); // on dis qu'il est invalide
}
}else{ // si incorrect
remClass(inSecu, 'validated'); // on désactive la classe
remClass(inSecu, 'invalid'); // on dis qu'il n'est pas invalide
inCk.correct(inSecu, false); // on corrige partiellement
if( inCk.check(inSecu) ){
if( checkSecuControlKey(inSecu.value) ){ // si la clé est correcte
addClass(inSecu, 'validated'); // on dis que le champ est valide
remClass(inSecu, 'invalid'); // on dis qu'il n'est pas invalide
}else{
remClass(inSecu, 'validated'); // on dis que le champ n'est pas valide
addClass(inSecu, 'invalid'); // on dis qu'il est invalide
}
}
}
}, false);
// inDate.value = 'x3 F3/a8';
// inHeure.value = 'x3 F3/a8';
inSecu.value = '1 96 01 31 555 861';
//////////////////////////////
// VERIFICATION DU SUBMIT() //
//////////////////////////////
sbCreer.addEventListener('click', function(e){
e.preventDefault(); // on annule le submit()
var formElements = sbCreer.parentNode.children;
var checker = true;
// pour chaque <input type='text'> du formulaire (fils direct uniquement)
for( var i = 0 ; i < formElements.length ; i++ ){ if( formElements[i] instanceof HTMLInputElement && formElements[i].type == 'text' ){
// si le champ est requis (required)
if( formElements[i].required )
checker = checker && formElements[i].className.indexOf('validated') > -1; // TRUE => validé (niveau interface)
// si le champ n'est pas requis et pas vide, on le vide
else if( formElements[i].value != '' && formElements[i].className.indexOf('validated') < 0 ) // si incorrect et pas vide
formElements[i].value = ''; // on vide
}}
var inputCheckerValid = inCk.check(inDate) && inCk.check(inHeure);
var selectNoDefault = newRDVPatient.value != '*' && newRDVMedecin.value != '*';
console.log( inputCheckerValid );
console.log( checker );
console.log( selectNoDefault );
if( inputCheckerValid && checker && selectNoDefault ) // si tout es ok uniquement, on submit()
sbCreer.parentNode.submit();
}, false);