diff --git a/admin/action.php b/admin/action.php index f3aa4dc..b0500ac 100644 --- a/admin/action.php +++ b/admin/action.php @@ -71,8 +71,8 @@ $tpl->register_function('afficher_debut_tarif', function ($params)
', - $idTarif, "total_general"); + onclick="cocherDecocherTarif(check_%1$s)" />', + $idTarif); if ($idTarif == 0) { // versement sur un compte non rattaché à une activité $out .= sprintf(' @@ -122,7 +122,7 @@ $tpl->register_function('afficher_debut_personne', function ($params)
+ onclick="cocherDecocherPersonne(check_%1$s, total_%1$s)" /> @@ -130,8 +130,7 @@ $tpl->register_function('afficher_debut_personne', function ($params)
', $idVersement, - $personne->nomPrenom, - "total_general" + $personne->nomPrenom ); return $out; }); @@ -164,7 +163,7 @@ $tpl->register_function('afficher_versement', function ($params) id="check_%1$s_%2$s" name="selected[]" value="%2$s" - onclick="cocherDecocherCase(check_%1$s_%2$s, total_%1$s, %5$s)" /> + onclick="cocherDecocherVersement(check_%1$s_%2$s, total_%1$s)" /> @@ -177,8 +176,7 @@ $tpl->register_function('afficher_versement', function ($params) ",", " " ), - date_format(date_create($versement->date),"d/m/Y"), - "total_general" + date_format(date_create($versement->date),"d/m/Y") ); return $out; }); diff --git a/admin/script.js b/admin/script.js index 8faea47..a46ce9a 100644 --- a/admin/script.js +++ b/admin/script.js @@ -1,26 +1,5 @@ "use strict"; -/** - * renvoyer la valeur numérique d'un montant formaté en € - * @param texte qui représente nu nombre - */ -function getNumber(texte) { - return Number(texte.replace(/[^0-9,]/g, '').replace(/,/, '.')); -} - -/** - * afficher un montant au format monétaire - * @param montant à afficher - * @param idElem : élément où faire l'affichage - */ -function displayNumber(montant, idElem) { - idElem.innerHTML = - montant.toLocaleString('fr-FR', { - style: 'currency', currency: 'EUR', - minimumFractionDigits: 2 - }); -} - // ------------------------------------------------------------------------ // actions sur la liste des versements // ------------------------------------------------------------------------ @@ -29,15 +8,14 @@ function displayNumber(montant, idElem) { * Fonction appelée quand on (dé)coche la case globale * (dé)sélectionner toutes les cases de toutes les activités * @param {HTMLInputElement} idCaseGlobale id de la case globale - * @param {HTMLSpanElement} idTotalGeneral id du total général */ -function cocherDecocherTout(idCaseGlobale, idTotalGeneral) { +function cocherDecocherTout(idCaseGlobale) { // itérer sur la liste des éléments détails : 1 par couple let lesDetails = document.querySelectorAll("details.activite"); for (let i = 0; i < lesDetails.length; ++i) { let idCase = lesDetails[i].querySelector("input[type=checkbox]"); idCase.checked = idCaseGlobale.checked; - cocherDecocherTarif(idCase, idTotalGeneral); + cocherDecocherTarif(idCase); } // changer le message changerMessage(idCaseGlobale.nextElementSibling, idCaseGlobale); @@ -47,37 +25,35 @@ function cocherDecocherTout(idCaseGlobale, idTotalGeneral) { * Fonction appelée quand on (dé)coche la case d'activité * (dé)sélectionner toutes les cases de cette activité * @param {HTMLInputElement} idCaseGlobale id de la case d'activité - * @param {HTMLSpanElement} idTotalGeneral id du total général */ -function cocherDecocherTarif(idCaseGlobale, idTotalGeneral) { +function cocherDecocherTarif(idCaseGlobale) { let lesPersonnes = idCaseGlobale.closest("details").querySelectorAll("div.personne"); - cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes, idTotalGeneral); + cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes); } /** * idem dans le cas des versements des personnes * @param {HTMLInputElement} idCaseGlobale id case à cocher d'une personne */ -function cocherDecocherToutesLesPersonnes(idCaseGlobale, idTotalGeneral) { - let lesPersonnes = document.querySelectorAll("summary.personne"); - cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes, idTotalGeneral); +function cocherDecocherToutesLesPersonnes(idCaseGlobale) { + let lesPersonnes = document.querySelectorAll("div.personne"); + cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes); changerMessage(idCaseGlobale.nextElementSibling, idCaseGlobale); } /** * @param {HTMLInputElement} idCaseGlobale * @param {NodeListOf} lesPersonnes - * @param {HTMLSpanElement} idTotalGeneral id du total général -*/ -function cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes, idTotalGeneral) { + */ +function cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes) { for (let j = 0; j < lesPersonnes.length; ++j) { // trouver l'élément total de la personne - let idTotal = lesPersonnes[j].querySelector("span.total"); + let idTotal = lesPersonnes[j].querySelector("span"); // puis la case à cocher - let idCase = lesPersonnes[j].querySelector("input[type=checkbox]"); + let idCase = lesPersonnes[j].closest("summary").querySelector("input"); idCase.checked = idCaseGlobale.checked; // puis traiter toutes les cases de la personne - cocherDecocherPersonne(idCase, idTotal, idTotalGeneral); + cocherDecocherPersonne(idCase, idTotal); } } @@ -86,45 +62,51 @@ function cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes, idTotalGeneral) * - (dé)sélectionner toutes les cases à cocher * - faire le total des cases cochées et l'afficher * @param {HTMLInputElement} idCase id de la case qui a été cochée - * @param {HTMLSpanElement} idTotal id de l'élément où afficher le total de la personne - * @param {HTMLSpanElement} idTotalGeneral id de l'élément où afficher le total général + * @param {HTMLSpanElement} idTotal id de l'élément où afficher le total */ -function cocherDecocherPersonne(idCase, idTotal, idTotalGeneral) { - let conteneur = idCase.closest("details").querySelector("div.versements"); - let listeCases = conteneur.querySelectorAll("input[type=checkbox]"); - - for (let i = 0; i < listeCases.length; ++i) { - if (listeCases[i].checked != idCase.checked) { - listeCases[i].checked = idCase.checked; - cocherDecocherVersement(listeCases[i], idTotal, idTotalGeneral); - } - } +function cocherDecocherPersonne(idCase, idTotal) { + // chercher le fieldset des versements + let fieldset = idCase.closest("details").querySelector("div.versements"); + let listeCases = fieldset.querySelectorAll("input[type=checkbox]"); + for (let i = 0; i < listeCases.length; ++i) { + listeCases[i].checked = idCase.checked; + cocherDecocherVersement(listeCases[i], idTotal); + } } /** * Fonction appelée quand on (dé)coche la case d'un versement - * Mettre à jour le total des cases cochées et le total global et les afficher + * Faire le total des cases cochées et l'afficher * - * @param {HTMLInputElement} idCase id de la case qui a été (dé)cochée - * @param {HTMLSpanElement} idTotal id du total de la personne - * @param {HTMLSpanElement} idTotalGeneral id du total général + * @param {HTMLInputElement} idCase id de la case qui a été cochée + * @param {HTMLSpanElement} idTotal id de l'élément où afficher le total */ +function cocherDecocherVersement(idCase, idTotal) { + let fieldset = idCase.closest("div.versements"); + let listeCases = fieldset.querySelectorAll("input[type=checkbox]"); + let listeMontants = fieldset.querySelectorAll("span.montant"); + calculerTotal(listeCases, listeMontants, idTotal); +} -function cocherDecocherVersement(idCase, idTotal, idTotalGeneral) { - let div = idCase.closest("div"); - let idmontant = div.querySelector("span.montant"); - let montant = getNumber(idmontant.textContent); - let totalPersonne = getNumber(idTotal.textContent); - let totalGeneral = getNumber(idTotalGeneral.textContent); - if (idCase.checked) { - totalPersonne += montant; - totalGeneral += montant; - } else { - totalPersonne -= montant; - totalGeneral -= montant; - } - displayNumber(totalPersonne, idTotal); - displayNumber(totalGeneral, idTotalGeneral); +/** + * Faire le total des cases cochées et l'afficher + * @param {NodeListOf} listeCases liste des cases + * @param {NodeListOf} listeMontants liste des montants associés + * @param {HTMLSpanElement} idTotal id de l'élément où afficher le total + */ +function calculerTotal(listeCases, listeMontants, idTotal) { + let total = 0; + for (let i = 0; i < listeCases.length; ++i) { + if (listeCases[i].checked) { + total += parseFloat(listeMontants[i].textContent.replace(/\s/g, "").replace(",", ".")); + } + } + // afficher le total + idTotal.innerHTML = + total.toLocaleString('fr-FR', { + style: 'currency', currency: 'EUR', + minimumFractionDigits: 2 + }); } /** @@ -291,4 +273,4 @@ function changerStyle(document) { if (sheet.href.includes('imprimer_recu.css')) { sheet.media = 'print'; } } // console.log(styles); -} +} \ No newline at end of file diff --git a/admin/style.css b/admin/style.css index 23b3976..e096fff 100644 --- a/admin/style.css +++ b/admin/style.css @@ -2,10 +2,6 @@ * liste des versements */ -label.strong { - font-weight : bold; -} - div.pair { background-color: rgba(var(--gSecondColor), 0.15); } diff --git a/admin/upload.php b/admin/upload.php index fca8872..c98fcd3 100644 --- a/admin/upload.php +++ b/admin/upload.php @@ -15,8 +15,8 @@ if (!File::checkCreateAccess($parent, $session)) { $csrf_key = 'upload_file_' . md5($parent); -$form->runIf('upload', function () use ($parent, $session) { - $_SESSION['sig_file'] = \Paheko\Files\Files::uploadMultiple($parent, 'file', $session); +$form->runIf('upload', function () use ($parent) { + $_SESSION['sig_file'] = \Paheko\Files\Files::uploadMultiple($parent, 'file'); }, $csrf_key, PLUGIN_ROOT . '/admin/config.php'); $tpl->assign(compact('parent', 'csrf_key')); diff --git a/templates/versements_activites.tpl b/templates/versements_activites.tpl index aff07a9..f343490 100644 --- a/templates/versements_activites.tpl +++ b/templates/versements_activites.tpl @@ -4,24 +4,15 @@

Année {$annee_recu} : versements par activité et tarif

-
-
- - 0,00 € -
-
- + -
-
-
-
+
{button type="submit" label="Télécharger les reçus au format PDF" shape="download" form="versements_activites" formaction="generer_recus.php?type=activite&format=pdf" @@ -30,8 +21,6 @@ form="versements_activites" formaction="generer_recus.php?type=activite&format=print" onclick="return verifierChoix(this.form)"} -
-
diff --git a/templates/versements_personnes.tpl b/templates/versements_personnes.tpl index 4020a7c..380a584 100644 --- a/templates/versements_personnes.tpl +++ b/templates/versements_personnes.tpl @@ -4,33 +4,21 @@

Année {$annee_recu} : versements par personne

-
- -
- - 0,00 € -
-
- - -
-
- -
-
- {button type="submit" label="Télécharger les reçus au format PDF" shape="download" - form="versements_personnes" - formaction="generer_recus.php?type=personne&format=pdf" - onclick="return verifierChoix(this.form)"} - {button type="submit" label="Imprimer les reçus" shape="print" - form="versements_personnes" - formaction="generer_recus.php?type=personne&format=print" - onclick="return verifierChoix(this.form)"} -
-
+ + + +
+ {button type="submit" label="Télécharger les reçus au format PDF" shape="download" + form="versements_personnes" + formaction="generer_recus.php?type=personne&format=pdf" + onclick="return verifierChoix(this.form)"} + {button type="submit" label="Imprimer les reçus" shape="print" + form="versements_personnes" + formaction="generer_recus.php?type=personne&format=print" + onclick="return verifierChoix(this.form)"}