De Forum des Usages Coopératifs
(140 révisions intermédiaires par 2 utilisateurs sont masquées) | |||
Ligne 2 : | Ligne 2 : | ||
<script type="text/javascript"> | <script type="text/javascript"> | ||
// Ce code permet de calculer la somme à régler en fonction des différents éléments sélectionnés dans le formulaire | // Ce code permet de calculer la somme à régler en fonction des différents éléments sélectionnés dans le formulaire | ||
− | + | // Javascript viewer : https://codebeautify.org/jsviewer# | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | /*_____________________________________________________________________________________________________*/ | |
− | + | // Définition des variables globales utilisées | |
− | + | // les différents tarifs sont fournis en paramètre à l'appel du modèle | |
− | + | ||
− | + | var debug = false; // -1 en prod, 1 en phase de test | |
− | + | ||
− | + | ||
− | + | var tarifDouche = </html>{{{tarif_douche}}}<html>; // cout d'un hébergement individuel pour une nuit | |
− | + | var tarifNoDouche = </html>{{{tarif_nodouche}}}<html>; // cout d'un hébergement individuel pour une nuit | |
+ | var tarifRepas = </html>{{{tarif_repas}}}<html>; // cout d'un repas | ||
+ | var soirOrdinaire = </html>{{{tarif_soir_ordi}}}<html>; // cout d'une soirée ordinaire | ||
+ | var soirGala = </html>{{{tarif_soir_gala}}}<html>; // cout de la soirée de gala | ||
+ | var tarifInscriptionMin = </html>{{{tarif_insc_min}}}<html>; // cout du tarif d'inscription réduit | ||
+ | var tarifInscriptionMax = </html>{{{tarif_insc_max}}}<html>; // cout du tarif d'inscription plein | ||
+ | var deductionContrib = </html>{{{deduct_contrib}}}<html>; // montant de la déduction contributeur | ||
− | + | // définition du tableau des différents types de structures d'appartenance des inscrit | |
− | + | // le tableau ci-dessous doit contenir les mêmes éléments que ceux présents dans la liste déroulante | |
− | + | // fournie à la section "Frais d'inscription" > "Votre structure est" du formulaire d'inscription | |
− | + | var structures = new Array; | |
− | + | structures[0] = 'une association'; | |
− | + | structures[1] = 'un établissement scolaire'; | |
+ | structures[2] = 'une collectivité'; | ||
+ | structures[3] = 'une entreprise'; | ||
+ | structures[4] = 'autre'; | ||
− | + | /*_____________________________________________________________________________________________________*/ | |
− | + | // !!! HACKISH PART !!! | |
− | + | // | |
+ | // Définition des identifiants des champs utilisées | ||
+ | // les identifiants des champs sont fournis en paramètre à l'appel du modèle | ||
+ | // les identifiants des champs successifs sont calculés à partir de l'identifiant du premier champ fournis en paramètre | ||
− | + | var fieldIndividuel = 'input_' + (</html>{{{field_inscription}}}<html>); | |
− | + | var fieldPrisEnCharge = 'input_' + (</html>{{{field_inscription}}}<html> + 1); | |
+ | var fieldIntervenant = 'input_' + (</html>{{{field_inscription}}}<html> + 2); | ||
− | + | // identifiant de la liste déroulante utilisée pour la sélection du type de la structure | |
− | + | var fieldStructure = 'input_' + (</html>{{{field_inscription}}}<html> + 3); | |
− | + | /*_____________________________________________________________________________________________________*/ | |
− | + | // ajustement des identifiants des variables par rapport aux radio bouton laissés vides | |
− | + | // initialisation des variables d'incrémentation | |
− | + | var inc_max = 0; | |
− | + | var inc_min = 0; | |
− | + | var inc_panier = 0; | |
− | + | var inc_contrib = 0; | |
+ | |||
+ | // cas d'une prise en charge avec / sans panier | ||
+ | // les boutons radios des tarifs max et min sont obligatoirement positionnées à null | ||
+ | var checkinput_20 = document.getElementById('input_20'); | ||
+ | |||
+ | // cas d'un tarif min avec / sans contrib & avec / sans panier | ||
+ | // le bouton radio de la contribution obligatoire pour une prise en charge est obligatoirement positionné à null | ||
+ | var checkinput_27 = document.getElementById('input_27'); | ||
+ | |||
+ | // cas d'un tarif maxi avec / sans contrib & avec / sans panier | ||
+ | // le bouton radio de la contribution obligatoire pour une prise en charge est obligatoirement positionné à null | ||
+ | var checkinput_28 = document.getElementById('input_28'); | ||
+ | |||
+ | // cas d'un intervenant | ||
+ | var checkinput_17 = document.getElementById('input_17'); | ||
+ | |||
+ | if (checkinput_27 != null) { | ||
+ | if (document.getElementById('input_27').value == '' ) { | ||
+ | inc_contrib++; | ||
+ | if (debug == true) { | ||
+ | alert('inc_contrib : ' + inc_contrib); | ||
+ | } | ||
+ | if (document.getElementById('input_44').value == '' ) { | ||
+ | inc_panier++; | ||
+ | if (debug == true) { | ||
+ | alert('inc_panier: ' + inc_panier); | ||
} | } | ||
+ | }; | ||
+ | }; | ||
+ | if (checkinput_20 != null) { | ||
+ | if (document.getElementById('input_20').value == '' ) { | ||
+ | inc_max++; | ||
+ | if (debug == true) { | ||
+ | alert('inc_max : ' + inc_max); | ||
+ | } | ||
+ | inc_min++; | ||
+ | if (debug == true) { | ||
+ | alert('inc_min: ' + inc_min); | ||
+ | } | ||
+ | if (document.getElementById('input_17').checked ) { | ||
+ | var inc_contrib = 2; | ||
+ | } | ||
+ | else if (document.getElementById('input_45').value == '' ) { | ||
+ | inc_panier++; | ||
+ | if (debug == true) { | ||
+ | alert('inc_panier: ' + inc_panier); | ||
+ | } | ||
+ | }; | ||
+ | }; | ||
+ | } | ||
+ | } | ||
+ | else if (checkinput_28 != null) { | ||
+ | if (document.getElementById('input_28').value == '' ) { | ||
+ | inc_min++; | ||
+ | if (debug == true) { | ||
+ | alert('inc_min : ' + inc_min); | ||
} | } | ||
+ | inc_contrib++; | ||
+ | if (debug == true) { | ||
+ | alert('inc_contrib : ' + inc_contrib); | ||
+ | } | ||
+ | if (document.getElementById('input_45').value == '' ) { | ||
+ | inc_panier++; | ||
+ | if (debug == true) { | ||
+ | alert('inc_panier: ' + inc_panier); | ||
+ | } | ||
+ | }; | ||
+ | }; | ||
+ | } | ||
− | + | /*_____________________________________________________________________________________________________*/ | |
− | + | // définitions des identifiants des champs utilisés dans le calcul de l'inscription. | |
+ | // les identifiants numériques sont calculés en fonction des incrémentation définies dans la partie précédente. | ||
+ | // le nombre initial utilisé comme base à ce calcul est celui qui correspond au numéro du champ tel qu'indiqué | ||
+ | // lors de la création d'une nouvelle fiche. le calcul permet de préserver le bon fonctionnement du code dans le | ||
+ | // cas d'une mise à jour d'une fiche existante. | ||
+ | // les valeurs initiales des identifiants des champs sont fournis en paramètre à l'appel du modèle | ||
+ | // les identifiants des champs successifs sont calculés à partir de l'identifiant du premier champ fournis en paramètre | ||
− | + | // identifiant des radiobuttons correspondant au tarif plein / réduit | |
− | var | + | // section "Frais d'inscription" > "Je choisis ma formule : " |
+ | var fieldPleinA = 'input_' + (</html>{{{field_frais}}}<html> + inc_max); | ||
+ | var fieldPleinB = 'input_' + (</html>{{{field_frais}}}<html> + 1 + inc_max); | ||
+ | var fieldReduitA = 'input_' + (</html>{{{field_frais}}}<html> + 3 + inc_max + inc_min); | ||
+ | var fieldReduitB = 'input_' + (</html>{{{field_frais}}}<html> + 4 + inc_max + inc_min); | ||
− | + | // identifiant des radiobox définissant le type de chambre choisie | |
+ | var fieldDouche = 'input_' + (</html>{{{field_douche}}}<html> + inc_max + inc_min + inc_contrib); | ||
+ | var fieldNoDouche = 'input_' + (</html>{{{field_nodouche}}}<html> + inc_max + inc_min + inc_contrib); | ||
− | + | // identifiants des checkboxes utilisées pour la sélection des nuitées: | |
− | + | // section "Hébergement / Repas / Soirées" > "Je réserve les nuits : " | |
+ | var fieldHebergement = new Array; | ||
+ | for (var i=0;i<</html>{{{num_night}}}<html>;i++) { | ||
+ | fieldHebergement[i] = 'input_' + (</html>{{{field_heberger}}}<html> + i + inc_max + inc_min + inc_contrib); | ||
+ | } | ||
− | + | // identifiants des checkboxes utilisées pour la sélection des déjeuners: | |
− | + | // section "Hébergement / Repas / Soirées" > "Je réserve les déjeuners : " | |
+ | var fieldRepas = new Array; | ||
+ | for (var i=0;i<</html>{{{num_repas}}}<html>;i++) { | ||
+ | fieldRepas[i] = 'input_' + (</html>{{{field_repas}}}<html> + i + inc_max + inc_min + inc_contrib); | ||
+ | } | ||
− | + | // identifiants des checkboxes utilisées pour la sélection des soirées: | |
− | + | // section "Hébergement / Repas / Soirées" > "Je participerai aux soirées suivantes : " | |
+ | // soirée ordinaire | ||
+ | var fieldSoiree = new Array; | ||
+ | for (var i=0;i<</html>{{{num_soir}}}<html>;i++) { | ||
+ | fieldSoiree[i] = 'input_' + (</html>{{{field_soir}}}<html> + i + inc_max + inc_min + inc_contrib + inc_panier); | ||
+ | } | ||
− | + | // soirée de gala | |
− | + | var fieldGala = new Array; | |
− | + | fieldGala[0] = 'input_' + (</html>{{{field_gala}}}<html> + inc_max + inc_min + inc_contrib + inc_panier); | |
− | + | // identifiants du champ texte utilisé pour l'affichage du resultat: | |
− | + | // section "Finaliser" > "Montant total : " | |
− | + | var fieldFake = 'input_' + (</html>{{{field_calcul}}}<html> + inc_max + inc_min + inc_contrib + inc_panier); | |
+ | var fieldSomme = 'input_' + (</html>{{{field_calcul}}}<html> + 1 + inc_max + inc_min + inc_contrib + inc_panier); | ||
− | + | /*_____________________________________________________________________________________________________*/ | |
− | + | // vérifie si la chaine passée en argument est présente dans le tableau des structures défini ci-dessous | |
− | + | function searchStructure(string) { | |
− | + | // on s'assure que la structure sélectionnée dans la liste déroulante fait partie du tableau défini ci-dessus | |
+ | for (var j=0; j<structures .length; j++) { | ||
+ | if (structures [j].match (string)) return 1; | ||
+ | } | ||
− | + | // retourne false si non | |
− | + | return -1; | |
+ | } | ||
− | + | /*_____________________________________________________________________________________________________*/ | |
− | + | // calcule le montant des frais d'hébergements | |
− | + | // | |
− | + | // le paramètre facture : | |
− | + | // positionné à 1 si les couts d'hébergement sont à la charge du participant | |
+ | // positionné à -1 si les couts d'hébergement sont à la charge de l'organisation ( intervenants uniquement ) | ||
− | + | function calculFrais(facture,debug) { | |
− | + | var hebergement = 0; // initialisation du cout des nuités | |
− | + | var repas = 0; // initialisation du cout des repas | |
− | + | var soirees = 0; // initialisation du cout des soirées | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | // définition du tarif d'hébergement correspondant au type de chambre choisi | |
− | + | var tarifHebergement = 0; // init cout d'un hébergement individuel pour une nuit | |
− | + | if (document.getElementById(fieldDouche).checked) { | |
− | + | tarifHebergement = tarifDouche; | |
− | + | if (debug == true) { | |
+ | alert("douche : " + tarifDouche); | ||
+ | } | ||
+ | } | ||
+ | else if (document.getElementById(fieldNoDouche).checked) { | ||
+ | tarifHebergement = tarifNoDouche; | ||
+ | if (debug == true) { | ||
+ | alert("no douche : " + tarifNoDouche); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | if (facture == true) { | ||
// détermination des cout d'hébergement | // détermination des cout d'hébergement | ||
// section "Hébergement / Repas / Soirées" > "Je réserve les nuits : " | // section "Hébergement / Repas / Soirées" > "Je réserve les nuits : " | ||
− | + | for (var j=0; j<fieldHebergement.length; j++) { | |
− | + | if (document.getElementById(fieldHebergement [j]).checked) { | |
− | + | hebergement = hebergement + tarifHebergement ; | |
− | + | } | |
+ | } | ||
// détermination des cout des repas | // détermination des cout des repas | ||
// section "Hébergement / Repas / Soirées" > "Je réserve les déjeuners : " | // section "Hébergement / Repas / Soirées" > "Je réserve les déjeuners : " | ||
− | + | for (var j=0; j<fieldRepas.length; j++) { | |
− | + | if (document.getElementById(fieldRepas [j]).checked) { | |
− | + | repas = repas + tarifRepas ; | |
+ | } | ||
+ | } | ||
// détermination de la participation aux soirées | // détermination de la participation aux soirées | ||
// section "Hébergement / Repas / Soirées" > "Je participerai aux soirées suivantes : " | // section "Hébergement / Repas / Soirées" > "Je participerai aux soirées suivantes : " | ||
− | + | for (var j=0; j<fieldSoiree.length; j++) { | |
− | + | if (document.getElementById(fieldSoiree[j]).checked) { | |
− | + | soirees = soirees + soirOrdinaire; | |
+ | } | ||
+ | } | ||
+ | for (var j=0; j<fieldGala.length; j++) { | ||
+ | if (document.getElementById(fieldGala[j]).checked) { | ||
+ | soirees = soirees + soirGala ; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | else { | ||
+ | hebergement = 0; | ||
+ | repas = 0; | ||
+ | soirees = 0; | ||
+ | } | ||
− | // | + | // debug |
− | + | if (debug == true) { | |
− | + | alert("Frais d'hébergement : " + hebergement); | |
− | + | alert("Frais de restauration : " + repas); | |
+ | alert("Frais de participation aux soirées : " + soirees); | ||
+ | } | ||
− | + | return hebergement + repas + soirees; | |
− | + | } | |
− | + | /*_____________________________________________________________________________________________________*/ | |
− | + | // calcule le montant des frais d'inscription | |
+ | // | ||
+ | // le paramètre échelle : | ||
+ | // positionné à 1 pour un cout d'inscription reduit | ||
+ | // positionné à -1 pour un cout d'inscription plein | ||
+ | // | ||
+ | // les paramètres input_a et input_b définissent les identifiants à prendre en compte en fonction du type de la structure | ||
− | + | function calculInscription(echelle,input_a,input_b,debug) { | |
− | + | var tarif = 0; | |
− | + | // la valeur de ces variables doit être mise à jour en fonction des différents tarif d'inscription | |
− | + | switch(echelle) { | |
− | + | case -1: var contrib = tarifInscriptionMin; break; // montant de l'inscription minimal contribution | |
− | + | case 1: var contrib = tarifInscriptionMax; break; // montant de l'inscription maximal contribution | |
− | + | } | |
− | + | if (document.getElementById(input_a).checked) { | |
− | + | tarif = contrib - deductionContrib; | |
+ | var msg = "avec contribution -> "; | ||
+ | } | ||
− | + | else if (document.getElementById(input_b).checked) { | |
− | + | tarif = contrib; | |
− | + | var msg = "sans contribution -> "; | |
− | + | } | |
− | + | // debug | |
− | + | if (debug == true) { | |
+ | alert("Montant de l'inscription : " + msg + tarif); | ||
+ | } | ||
− | if( | + | return tarif; |
− | + | } | |
+ | |||
+ | /*_____________________________________________________________________________________________________*/ | ||
+ | // analyse les les champs rempli dans le formulaire et calcule le montant total de l'inscription | ||
+ | |||
+ | function processFormData() { | ||
+ | var total = 0; // initialisation du total à payer | ||
+ | var inscription = 0; // initialisation du total à payer | ||
+ | |||
+ | var map = document.getElementById('map_google3_1_forminput_values'); | ||
+ | if (map != null) { | ||
+ | if(map.value == "") { | ||
+ | alert("Merci de bien vouloir renseigner vos informations de géolocalisation avant de calculer le montant de votre inscription!"); | ||
+ | return -1; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /*_____________________________________________________________________________________ */ | ||
+ | // L'inscription est à titre individuel | ||
+ | // section "Frais d'inscription" > "Je m'inscris : " > "à titre individuel" | ||
+ | if (document.getElementById(fieldIndividuel).checked) { | ||
+ | |||
+ | // debug | ||
+ | if (debug == true) { | ||
+ | alert("debug : frais inscription"); | ||
+ | } | ||
+ | |||
+ | // on récupère le contenu de l'input 18 | ||
+ | // section "Frais d'inscription" > "Votre structure est" | ||
+ | var checkstruct = document.getElementById(fieldStructure); | ||
+ | |||
+ | // on s'assure que la structure sélectionnée est valide | ||
+ | if (searchStructure(checkstruct.value) == true) { | ||
+ | // la facturation des frais annexes est à la charge du participant | ||
+ | var facture = 1; | ||
// debug | // debug | ||
− | if (debug == true) { alert(" | + | if (debug == true) { |
+ | alert("Type de la structure : " + checkstruct.value); | ||
} | } | ||
− | + | ||
− | + | // sélection du niveau de facturation en fonction du type de structure | |
− | + | // minimal pour les structures associatives et les établissements scolaires | |
− | + | // maximal pour les autres | |
− | + | switch(checkstruct.value) { | |
− | + | case 'une association': | |
− | + | case 'un établissement scolaire': | |
− | + | // le tarif minimal est sélectionné, les champs champs input_23 et input_24 sont récupérés | |
− | + | // pour déterminer les montants des inscriptions avec et sans contribution | |
+ | inscription = calculInscription(-1,fieldReduitA ,fieldReduitB ,debug); | ||
+ | break; | ||
+ | default: | ||
+ | // le tarif maximal est sélectionné, les champs champs input_20 et input_21 sont récupérés | ||
+ | // pour déterminer les montants des inscriptions avec et sans contribution | ||
+ | inscription = calculInscription(1,fieldPleinA ,fieldPleinB ,debug); | ||
+ | break; | ||
} | } | ||
+ | } | ||
+ | } | ||
− | + | /*_____________________________________________________________________________________ */ | |
− | + | // L'inscription contient une demande de prise en charge | |
− | + | // section "Frais d'inscription" > "Je m'inscris : " > "avec demande de prise en charge" | |
− | + | else if (document.getElementById(fieldPrisEnCharge).checked) { | |
− | + | // la facturation des frais annexes est à la charge du participant | |
+ | var facture = 1; | ||
// debug | // debug | ||
− | if (debug == true) { alert(" | + | if (debug == true) { |
+ | alert("Inscription avec demande de prise en charge"); | ||
+ | } | ||
+ | } | ||
− | + | /*_____________________________________________________________________________________ */ | |
− | + | // L'inscription concerne un intervenant | |
− | + | // section "Frais d'inscription" > "Je m'inscris : " > "comme intervenant" | |
− | + | else if (document.getElementById(fieldIntervenant).checked) { | |
+ | // la facturation des frais annexes est prise en charge par l'organisation | ||
+ | var facture = -1; | ||
// debug | // debug | ||
− | if (debug == true) { alert(" | + | if (debug == true) { |
+ | alert("Inscription d'un intervenant"); | ||
+ | } | ||
+ | } | ||
− | + | /*_____________________________________________________________________________________ */ | |
− | + | // erreur | |
− | + | else { | |
+ | alert("Erreur, le type de l'inscription ne peut-être identifié, la page sera rechargé."); | ||
+ | window.location.reload(true); | ||
+ | } | ||
− | + | /*_____________________________________________________________________________________ */ | |
− | + | var frais = calculFrais(facture,debug); | |
− | + | ||
− | + | total = inscription + frais; | |
− | + | ||
− | + | ||
− | + | // debug | |
− | + | if (debug == true) { | |
+ | alert("Le montant total est de : " + total + " €"); | ||
+ | } | ||
− | + | document.getElementById(fieldFake).value = total; | |
− | + | document.getElementById(fieldSomme).value = total; | |
− | + | ||
− | + | return 0; | |
− | + | ||
− | + | ||
} | } | ||
</script> | </script> | ||
</html> | </html> | ||
[[Category:Bazar/Template/Info]] | [[Category:Bazar/Template/Info]] |
Version actuelle en date du 3 mai 2018 à 11:45