From 358becfca7d3ea19ac41d48301cdc06cda1420bb Mon Sep 17 00:00:00 2001 From: engel <> Date: Fri, 14 Jan 2022 17:59:18 +0000 Subject: [PATCH] Changement structure code html et javascript FossilOrigin-Name: 5d8368da9ebcec86dbee43bd4b7bf7282afe71cf1b2b28ffa332d935f32411e8 --- templates/index.tpl | 253 +++++++++++++++++--------------------------- www/admin/script.js | 90 ++++++++++++++++ 2 files changed, 189 insertions(+), 154 deletions(-) create mode 100644 www/admin/script.js diff --git a/templates/index.tpl b/templates/index.tpl index 5abb9f4..40c2c90 100644 --- a/templates/index.tpl +++ b/templates/index.tpl @@ -1,183 +1,128 @@ {include file="admin/_head.tpl" title="%s"|args:$plugin.nom current="plugin_%s"|args:$plugin.id} -{* barre de navigation *} +{* barre de navigation - +*} {* TODO : Temporaire - à supprimer (?) *}

Liste des activités, cotisations et comptes associés

- - - - - - - - - - - - {foreach from=$activitesTarifsComptes item="activite"} - - - - - - - - - {/foreach} - + + + + + + + + + + + + {foreach from=$activitesTarifsComptes item="activite"} + + + + + + + + + {/foreach} +
NomDescriptionTarifDescriptionN° CompteNom Compte
{$activite.label}{$activite.descService}{$activite.Tarif}{$activite.descTarif}{$activite.numero_cpt}{$activite.nom_cpt}
NomDescriptionTarifDescriptionN° CompteNom Compte
{$activite.label}{$activite.descService}{$activite.Tarif}{$activite.descTarif}{$activite.numero_cpt}{$activite.nom_cpt}

Liste des versements par activité et tarif

{* TODO : vérifier le détail de ce div *}
- - + +
-{* Itération sur les activités *} -{foreach from=$listeParActiviteEtTarif item="activite"} + {* Itération sur les activités *} + {foreach from=$listeParActiviteEtTarif item="activite"} - {* Itération sur les tarifs de l'activité *} - {foreach from=$activite->tarifs item="tarif"} + {* Itération sur les tarifs de l'activité *} + {foreach from=$activite->tarifs item="tarif"} - {* TODO : s'inspirer du fonctionnement de
- -

Activité « {$activite->label} »

- {if !empty($activite->description)} -

{$activite->description}

- {/if} -

tarif « {$tarif->titreTarif} », montant : {if $tarif->montantTarif > 0}{$tarif->montantTarif} - €{else}libre - {/if} -

-
+
+ +

Activité « {$activite->label} »

+ {if !empty($activite->description)} +

{$activite->description}

+ {/if} +

tarif « {$tarif->titreTarif} », montant : {if $tarif->montantTarif > 0}{$tarif->montantTarif} + €{else}libre + {/if} +

+
- {* - Itération sur les versements d'un tarif d'une activité - présentation : une table pour les versements d'une personne -TODO : régler la fermeture de table lors du changement de personne - *} - - {foreach from=$lesVersements key="rang" item="versement"} - {if $versement.idActivite == $activite->id && - $versement.idTarif == $tarif->idTarif} - {if $versement.idUser != $currentUser} - {* changement de personne *} - {if $firstLine} - - {else} - {* fermer le tableau précédent *} - - - - {/if} -

Versements de {$versement.Nom}

- - {* on ne met pas thead pour éviter l'écouteur prédéfini ... *} - {* mais du coup, il faut mettre le mien ... *} - {* *} - - - {* TODO : voir common/dynamic_list_head.tpl *} - idUser; ?> - - - - - {* *} - {* *} - idUser; ?> - {/if} - - {* TODO : voir admin/membres/index.tpl *} - - - - - {/if} - {/foreach} {* Itération sur les versements *} - -
- VersementDate
{input class=$tableau type="checkbox" name="selected[]" value=$rang}{$versement.Versement}{$versement.Date|date_format:"%d/%m/%Y"}
-
- {/foreach} {* Itération sur les tarifs de l'activité *} -{/foreach} {* Itération sur les activités *} + {* + Itération sur les versements d'un tarif d'une activité + présentation : une table pour les versements d'une personne + *} + + {foreach from=$lesVersements key="rang" item="versement"} + {if $versement.idActivite == $activite->id && + $versement.idTarif == $tarif->idTarif} + {if $versement.idUser != $currentUser} + {* changement de personne *} + {if $firstUser} + + {else} + {* fermer le tableau précédent *} + + {/if} + {* Afficher les infos de la personne *} + idTarif."_".$versement->idUser; ?> +

Versements de {$versement.Nom} : 0,00 €

+
+ +
+
+ idUser; ?> + {/if} + {* afficher les infos du versement de la personne*} + + + {$versement.Versement} + {$versement.Date|date_format:"%d/%m/%Y"}
+ {/if} + {/foreach} {* Itération sur les versements *} +
+
+ {/foreach} {* Itération sur les tarifs de l'activité *} + {/foreach} {* Itération sur les activités *}
+{* scripts pour cases à cocher *} + + {literal} {/literal} -{include file="admin/_foot.tpl"} +{include file="admin/_foot.tpl"} \ No newline at end of file diff --git a/www/admin/script.js b/www/admin/script.js new file mode 100644 index 0000000..f0e9d4a --- /dev/null +++ b/www/admin/script.js @@ -0,0 +1,90 @@ +/** + * Fonction appelée quand on (dé)coche la case d'une personne + * - (dé)sélectionner toutes les cases à cocher + * - faire le total des cases cochées + * + * @param id de la case qui a été cochée + * @param id de l'élément où afficher le total + */ +function cocherDecocherPersonne(idCase, idTotal) { + // chercher le fieldset englobant + var fieldset = idCase.closest("fieldset"); + var listeCheck = fieldset.getElementsByTagName("input"); + var listeMontants = fieldset.querySelectorAll("span.montant"); + var total = 0; + for (var i = 1; i < listeCheck.length; ++i) + { + listeCheck[i].checked = listeCheck[0].checked; + if (listeCheck[i].checked) { + total += Number(listeMontants[i-1].textContent); + } + } + // "afficher" le total + idTotal.innerHTML = + total.toLocaleString('fr-FR', {style: 'currency', currency: 'EUR', + minimumFractionDigits: 2}); +} + +/** + * Cocher/décocher toutes les cases d'un tableau + * en fonction de l'état de la première (ligne d'entête) + * @param evt : événement déclencheur +* @remarks : est remplacé par la foncion cocherDecocher ci-dessus + */ +function cocherDecocher_old(evt) { + console.log("this = " + this.className); + console.log("currentTarget = " + evt.currentTarget.className); + console.log("evt.target = " + evt.target.className); + var composed = evt.composedPath(); + console.log("composedPath = " + composed); + + var firstInput = evt.target; + // voir si la case tousCochés est cochée + var tousCoches = firstInput.checked; + // chercher la table englobante + var laTable = firstInput.closest("table"); + console.log("Table trouvée = " + laTable.id); + // et la liste des lignes + var rows = laTable.getElementsByTagName("tr"); + // modifier les autres cases en fonction de celle-ci + for (let i = 1; i < rows.length; ++i) { + var input = rows[i].getElementsByTagName("input")[0]; + input.checked = tousCoches; + } +} + +/** + * Associer un écouteur à la première case à cocher de chaque table + * @remarks : n'est plus utile + */ +function activerListener() { + // parcourir les tables + const lesTables = document.querySelectorAll("table.list"); + for (let i = 0; i < lesTables.length; ++i) { + // vérifier si c'est l'une des tables qui nous intéresse + // l'id est du genre : versements_xx où xx est un entier + const id = lesTables[i].id; + const re = /^versements_[0-9]+/; + console.log("id = " + id + " => " + re.test(id)); + if (re.test(id)) { + // chercher le premier élément input + const premierInput = lesTables[i].querySelector("input"); + // associer un écouteur à la première case à cocher + premierInput.addEventListener('change', cocherDecocher); + } + } +} + +/* +// ouvrir/fermer les détails +document.querySelector('#open_details').onclick = () => { + document.querySelectorAll('details').forEach((e) => { + e.setAttribute('open', 'open'); + }); +}; +document.querySelector('#close_details').onclick = () => { + document.querySelectorAll('details').forEach((e) => { + e.removeAttribute('open'); + }); +}; +*/