From bbfba688c6ffb9b03a778c64cb73eaf526e1f035 Mon Sep 17 00:00:00 2001 From: engel <> Date: Sun, 24 Apr 2022 12:07:36 +0000 Subject: [PATCH 01/20] =?UTF-8?q?ajout=20bouton=20g=C3=A9n=C3=A9rer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FossilOrigin-Name: c4ee1e2f9ebe9c1a99adb825034569a4274d92e953df1a30475210c08bc3aa28 --- lib/Personne.php | 12 +-- lib/Utils.php | 164 +++++++++++++++++++---------- templates/versements_activites.tpl | 1 + templates/versements_personnes.tpl | 1 + www/admin/versements_personnes.php | 70 +++++++++++- 5 files changed, 187 insertions(+), 61 deletions(-) diff --git a/lib/Personne.php b/lib/Personne.php index 9a10979..31b4344 100644 --- a/lib/Personne.php +++ b/lib/Personne.php @@ -8,28 +8,28 @@ namespace Garradin\Plugin\RecusFiscaux; class Personne { public $id; + public $rang; // par ordre alpha de nomPrenom ; sert aux tris public $nomPrenom; public $adresse; public $codePostal; public $ville; - public $courriel; public $versements; // versements par taux de réduction public function __construct( $id, + $rang, $nomPrenom, $adresse, $codePostal, - $ville, - $courriel = "" + $ville ) { $this->id = $id; + $this->rang = $rang; $this->nomPrenom = $nomPrenom; $this->adresse = $adresse; $this->codePostal = $codePostal; $this->ville = $ville; - $this->courriel = $courriel; $this->versements = array(); // clé = tarif, valeur = montant } @@ -40,11 +40,11 @@ class Personne { return new Personne( $this->id, + $this->rang, $this->nomPrenom, $this->adresse, $this->codePostal, - $this->ville, - $this->courriel); + $this->ville); } /** diff --git a/lib/Utils.php b/lib/Utils.php index d2c3400..7d7dc29 100644 --- a/lib/Utils.php +++ b/lib/Utils.php @@ -111,40 +111,135 @@ class Utils /** * @return versements correspondants à l'année et aux comptes donnés * @param $annee + * @param $op : opérateur de combinaison des comptes * @param array $comptes * @param array $champsNom : liste non vide des champs de nom/prénom + * exemples : + * op = 'in', comptes = ['706', '7780', '756'] + * op = 'like', comptes = '7%' */ - public static function getVersementsComptes($annee, $comptes, $champsNom) + public static function getVersementsComptes($annee, $op, $comptes, $champsNom) { $db = DB::getInstance(); $tri = Utils::combinerTri($champsNom); $sql = sprintf( 'SELECT - acc_accounts.code as compte, - membres.id as idUser, - acc_transactions_lines.credit as versement, - acc_transactions.date + services_fees.id as idTarif, + acc_accounts.code as compte, + membres.id as idUser, + acc_transactions_lines.credit as versement, + acc_transactions.date FROM acc_transactions_users - INNER JOIN membres on acc_transactions_users.id_user = membres.id - INNER JOIN acc_transactions on acc_transactions_users.id_transaction = acc_transactions.id - INNER JOIN services_users on acc_transactions_users.id_service_user = services_users.id - INNER JOIN acc_transactions_lines on acc_transactions_lines.id_transaction = acc_transactions.id + INNER JOIN membres + ON acc_transactions_users.id_user = membres.id + INNER JOIN acc_transactions + ON acc_transactions_users.id_transaction = acc_transactions.id + INNER JOIN services_users + ON acc_transactions_users.id_service_user = services_users.id + INNER JOIN services_fees + ON services_users.id_fee = services_fees.id + INNER JOIN acc_transactions_lines + ON acc_transactions_lines.id_transaction = acc_transactions.id + INNER JOIN acc_accounts + ON acc_transactions_lines.id_account = acc_accounts.id WHERE - (strftime(%s, acc_transactions.date) = "%d" + (strftime(%s, acc_transactions.date) = "%d" AND - acc_accounts.%s + acc_accounts.%s AND - acc_transactions_lines.credit > 0) - ORDER by acc_accounts.code, %s, acc_transactions.date', + acc_transactions_lines.credit > 0) + ORDER by %s, acc_transactions.date', '"%Y"', $annee, - $db->where('code', $comptes), + $db->where('code', $op, $comptes), $tri ); return $db->get($sql); } /** + * @return personnes ayant versé des dons pour une année donnée + * @param $annee + * @param array $champsNom : champs qui définissent le nom et le prénom d'une personne + */ + public static function getDonateurs($annee, $champsNom) : array + { + // concaténer les champs nom/prénoms pour la sélection + $nom = Utils::combinerChamps($champsNom); + // et pour le tri + $tri = Utils::combinerTri($champsNom); + $sql = sprintf( + 'SELECT + membres.id as idUser, + row_number() over(order by %s) as rang, + %s as nom, + membres.adresse as adresse, + membres.code_postal as codePostal, + membres.ville as ville + FROM + acc_transactions_users, + membres, + acc_transactions + INNER JOIN acc_transactions_lines + ON acc_transactions_lines.id_transaction = acc_transactions.id + WHERE ( + strftime(%s, acc_transactions.date) = "%d" + AND + acc_transactions_lines.credit > 0 + AND + acc_transactions_users.id_transaction = acc_transactions.id + AND + acc_transactions_users.id_user = membres.id + ) + GROUP by membres.id + ORDER by %1$s COLLATE U_NOCASE + ', + $tri, + $nom, + '"%Y"', + $annee + ); + // error_log("getDonateurs = " . print_r($sql, true)); + $donateurs = array(); + foreach (DB::getInstance()->iterate($sql) as $personne) + { + $donateurs[$personne->idUser] = new Personne($personne->idUser, + $personne->rang, + $personne->nom, + $personne->adresse, + $personne->codePostal, + $personne->ville); + } + return $donateurs; + } + + /** + * combiner les champs avec un opérateur + * @param array $champs : liste (non vide) de champs + * @return chaîne combinée + */ + private static function combinerChamps($champs) + { + $op = ' || " " || '; + $result = 'ifnull(membres.' . $champs[0] . ', "")'; + for ($i = 1; $i < count($champs); ++$i) + { + $result .= $op . 'ifnull(membres.' . $champs[$i] . ', "")'; + } + return 'trim(' . $result . ')'; + } + + private static function combinerTri($champs) + { + $tri = 'membres.' . $champs[0]; + for ($i = 1; $i < count($champs); ++$i) + { + $tri .= ', membres.' . $champs[$i]; + } + return $tri; + } + + /** OBSOLETE * Versements totaux par personne pour une année donnée * @param année * @param array $champsNom : liste non vide des champs de nom/prénom @@ -179,38 +274,7 @@ class Utils return DB::getInstance()->get($sql); } - /** - * combiner les champs avec un opérateur - * @param array $champs : liste (non vide) de champs - * @return chaîne combinée - */ - private static function combinerChamps($champs) - { - $op = ' || " " || '; - $result = 'ifnull(membres.' . $champs[0] . ', "")'; - for ($i = 1; $i < count($champs); ++$i) - { - $result .= $op . 'ifnull(membres.' . $champs[$i] . ', "")'; - } - return $result; - } - - private static function combinerTri($champs) - { - $tri = 'membres.' . $champs[0]; - for ($i = 1; $i < count($champs); ++$i) - { - $tri .= ', membres.' . $champs[$i]; - } - return $tri; - } - - /** - * @return personnes ayant versé des dons pour une année donnée - * @param $annee - * @param array $champsNom : champs qui définissent le nom et le prénom d'une personne - */ - public static function getDonateurs($annee, $champsNom) : array + public static function getDonateurs_old($annee, $champsNom) : array { // concaténer les champs nom/prénoms pour la sélection $nom = 'trim(' . Utils::combinerChamps($champsNom) . ') as nom,'; @@ -258,17 +322,11 @@ class Utils { foreach ($lesTaux as $elem) { - /* - $ligne = "taux " . $elem->taux . ", ligne " . $elem->ligne; - if ($elem->remarque != "") { - $ligne .= ", " . $elem->remarque; - } - $lignes[$elem->taux] = $ligne; - */ $lignes[$elem->taux] = $elem->remarque; } return $lignes; } + public static function getLigneReduction($taux) { return $_SESSION['ligneReduction'][$taux]; diff --git a/templates/versements_activites.tpl b/templates/versements_activites.tpl index 6762f0e..1abcd10 100644 --- a/templates/versements_activites.tpl +++ b/templates/versements_activites.tpl @@ -8,6 +8,7 @@ +
diff --git a/templates/versements_personnes.tpl b/templates/versements_personnes.tpl index cae6d14..de7c87d 100644 --- a/templates/versements_personnes.tpl +++ b/templates/versements_personnes.tpl @@ -8,6 +8,7 @@ onclick="cocherDecocherToutesLesPersonnes(check_global)" /> + diff --git a/www/admin/versements_personnes.php b/www/admin/versements_personnes.php index 56376a0..1a16cca 100644 --- a/www/admin/versements_personnes.php +++ b/www/admin/versements_personnes.php @@ -8,8 +8,74 @@ use Garradin\Plugin\RecusFiscaux\Utils; $_SESSION['taux_reduction'] = $_POST['taux_reduction']; // versements par personne -$_SESSION['lesVersements'] = Utils::getVersementsPersonnes($_SESSION['annee_recu'], - $champsNom); +$_SESSION['lesVersements'] = Utils::getVersementsComptes($_SESSION['annee_recu'], + "like", + '7%', + $champsNom); + + // Utils::getVersementsPersonnes($_SESSION['annee_recu'], + // $champsNom); + +// ------------------------------------------------------------------------ +// tests +// ------------------------------------------------------------------------ +/* +$versementsComptes = Utils::getVersementsComptes("2021", + // "in", + // ['706', '7780', '756'], + "like", + '7%', + $champsNom); +// table triée par nom, date +// error_log("versementsComptes triée par nom, date = " . print_r($versementsComptes, true)); + +// comparer 2 lignes selon le nom +function comparerNoms($ligne1, $ligne2) +{ + return + $_SESSION['membresDonateurs'][$ligne1->idUser]->rang + - + $_SESSION['membresDonateurs'][$ligne2->idUser]->rang; +} + +// comparer 2 lignes selon la date +function comparerDate($ligne1, $ligne2) +{ + return + strtotime($ligne1->date) - strtotime($ligne2->date); +} + +// comparer 2 lignes selon un champ +function comparerChamp($ligne1, $ligne2, $champ) +{ + return $ligne1->$champ - $ligne2->$champ; +} + +// autres tris +// par tarif, nom, date +usort($versementsComptes, function($ligne1, $ligne2) +{ + $result = comparerChamp($ligne1, $ligne2, 'idTarif'); //$ligne1->idTarif - $ligne2->idTarif; + if ($result == 0) { $result = comparerNoms($ligne1, $ligne2); } + if ($result == 0) { $result = comparerDate($ligne1, $ligne2); } + return $result; +}); +// error_log("versementsComptes triée par tarif, nom, date = " . print_r($versementsComptes, true)); + +// par nom, compte, date... +usort($versementsComptes, function($ligne1, $ligne2) +{ + $result = comparerNoms($ligne1, $ligne2); + if ($result == 0) { $result = comparerChamp($ligne1, $ligne2, 'compte'); } + if ($result == 0) { $result = comparerDate($ligne1, $ligne2); } + return $result; +}); + +// error_log("versementsComptes triée par nom, compte, date = " . print_r($versementsComptes, true)); +*/ +// ------------------------------------------------------------------------ +// fin tests +// ------------------------------------------------------------------------ // préparation de l'affichage $tpl->assign('lesVersements', $_SESSION['lesVersements']); From 3bbe2e4ac9cb20d149a238e644cfcc79980f93d6 Mon Sep 17 00:00:00 2001 From: engel <> Date: Wed, 27 Apr 2022 13:29:13 +0000 Subject: [PATCH 02/20] =?UTF-8?q?am=C3=A9liorations=20cosm=C3=A9tiques?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FossilOrigin-Name: 27cde9941860c65a47879f2726b83247dbe8baeba28066f63be07e8c6eed3e4e --- templates/versements_activites.tpl | 16 ++++++++++------ templates/versements_personnes.tpl | 13 ++++++++----- www/admin/style.css | 20 +++++++++----------- 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/templates/versements_activites.tpl b/templates/versements_activites.tpl index 1abcd10..c91b289 100644 --- a/templates/versements_activites.tpl +++ b/templates/versements_activites.tpl @@ -14,8 +14,9 @@ {* Itération sur les versements *} - {foreach from=$lesVersements key="i" item="versement"} - {if $i == 0} + + {foreach from=$lesVersements item="versement"} + {if $rang == 0} {* premier versement *} idTarif; @@ -23,7 +24,7 @@ ?> {afficher_debut_tarif versement=$versement} {afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante} - {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante rang=$i} + {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante rang=$rang} {else} {* autre versement *} {if $versement.idTarif != $tarifCourant} @@ -32,26 +33,29 @@ {* fin versements d'une personne *} {* fin tarif *} idTarif; $personneCourante = $versement->idUser; ?> {afficher_debut_tarif versement=$versement} {afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante} - {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante rang=$i} + {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante rang=$rang} {elseif $versement.idUser != $personneCourante} {* changement de personne *} + idUser; ?> {afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante} - {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante rang=$i} + {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante rang=$rang} {else} {* même personne *} - {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante rang=$i} + {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante rang=$rang} {/if} {/if} + {/foreach} {* Itération sur les versements *} {* fin versements d'une personne *} {* fin versements d'une personne *} diff --git a/templates/versements_personnes.tpl b/templates/versements_personnes.tpl index de7c87d..cb1f926 100644 --- a/templates/versements_personnes.tpl +++ b/templates/versements_personnes.tpl @@ -14,27 +14,30 @@ {* Itération sur les personnes *} - {foreach from=$lesVersements key="i" item="versement"} - {if $i == 0} + + {foreach from=$lesVersements item="versement"} + {if $rang == 0} {* 1ère personne *} idUser; ?> {afficher_debut_personne user=$personneCourante idVersement=$personneCourante} - {afficher_versement versement=$versement idVersement=$personneCourante rang=$i} + {afficher_versement versement=$versement idVersement=$personneCourante rang=$rang} {elseif $versement.idUser != $personneCourante} {* changement de personne *} + idUser; ?> {afficher_debut_personne user=$personneCourante idVersement=$personneCourante} - {afficher_versement versement=$versement idVersement=$personneCourante rang=$i} + {afficher_versement versement=$versement idVersement=$personneCourante rang=$rang} {else} {* même personne *} - {afficher_versement versement=$versement idVersement=$personneCourante rang=$i} + {afficher_versement versement=$versement idVersement=$personneCourante rang=$rang} {/if} + {/foreach} {* Itération sur les personnes *} diff --git a/www/admin/style.css b/www/admin/style.css index f5ab0ef..81dc14d 100644 --- a/www/admin/style.css +++ b/www/admin/style.css @@ -1,15 +1,10 @@ /* liste des versements */ -div.pair { - padding : 0.1em; - background: rgba(var(--gSecondColor), 0.2); -} div.impair { - padding : 0.1em; + background: rgba(var(--gSecondColor), 0.15); } fieldset { - border:1px solid brown; - -webkit-border-radius:8px; - border-radius:8px; + -webkit-border-radius:8px; + border-radius:8px; } div span { padding-left : 0.5em; @@ -26,17 +21,20 @@ span.total { font-weight : bold; } -summary.activite { - background: rgba(var(--gMainColor), 0.25); +summary.activite +{ + background: rgba(var(--gSecondColor), 0.5); margin-bottom : 0.5em; } summary.personne { margin-bottom : 0.5em; + padding-top : 0; + padding-bottom : 0; } h3.personne, h4.personne { font-weight : normal; - background: rgba(var(--gSecondColor), 0.15); + background: rgba(var(--gSecondColor), 0.25); } #signature { From 1888314fa7b3bd347e122c1860959666183bd6d2 Mon Sep 17 00:00:00 2001 From: engel <> Date: Wed, 27 Apr 2022 13:49:23 +0000 Subject: [PATCH 03/20] modernisation code ; simplification affichage FossilOrigin-Name: e1b162c4d12b471d8f71c44e29fcce22c466ce789434c6780d2439bb14f3b761 --- garradin_plugin.ini | 2 +- templates/versements_personnes.tpl | 17 ++-- www/admin/action.php | 21 ++--- www/admin/script.js | 143 +++++++++++++++++------------ www/admin/style.css | 3 +- 5 files changed, 109 insertions(+), 77 deletions(-) diff --git a/garradin_plugin.ini b/garradin_plugin.ini index 3193717..41e3323 100644 --- a/garradin_plugin.ini +++ b/garradin_plugin.ini @@ -2,7 +2,7 @@ nom="Reçus fiscaux" description="Génération de reçus fiscaux pour les dons des membres" auteur="jce" url="https://git.roflcopter.fr/lesanges/recus-fiscaux-garradin" -version="0.6" +version="0.6.4" menu=1 config=1 min_version="1.1" diff --git a/templates/versements_personnes.tpl b/templates/versements_personnes.tpl index cb1f926..da70472 100644 --- a/templates/versements_personnes.tpl +++ b/templates/versements_personnes.tpl @@ -4,11 +4,14 @@

Versements par personne

- - - - + + + +
@@ -19,7 +22,7 @@ {if $rang == 0} {* 1ère personne *} idUser; + $personneCourante = $versement->idUser; ?> {afficher_debut_personne user=$personneCourante idVersement=$personneCourante} {afficher_versement versement=$versement idVersement=$personneCourante rang=$rang} @@ -29,7 +32,7 @@ idUser; + $personneCourante = $versement->idUser; ?> {afficher_debut_personne user=$personneCourante idVersement=$personneCourante} {afficher_versement versement=$versement idVersement=$personneCourante rang=$rang} diff --git a/www/admin/action.php b/www/admin/action.php index 53bce04..3036d84 100644 --- a/www/admin/action.php +++ b/www/admin/action.php @@ -71,14 +71,8 @@ $tpl->register_function('afficher_debut_personne', function ($params) $personne = $_SESSION['membresDonateurs'][$idUser]; $out = '
- '; - $out .= sprintf('

Versements de %s : 0,00 €

', - $personne->nomPrenom, - $idVersement); - $out .= '
'; - $out .= sprintf(' -
', - $idVersement); + +

'; $out .= sprintf(' register_function('afficher_debut_personne', function ($params) $idVersement, $idVersement); $out .= sprintf(' - ', + ', + $idVersement); + $out .= sprintf('%s : 0,00 €', + $personne->nomPrenom, + $idVersement); + $out .= '

'; + $out .= sprintf(' +
', $idVersement); - $out .= '
-
'; return $out; }); diff --git a/www/admin/script.js b/www/admin/script.js index f97f5c9..0829d99 100644 --- a/www/admin/script.js +++ b/www/admin/script.js @@ -1,16 +1,18 @@ +"use strict"; + /** * Fonction appelée quand on (dé)coche la case de sélection globale * (dé)sélectionner toutes les cases à cocher de toutes les activités - * @param id de la case globale + * @param {HTMLInputElement} idCaseGlobale id de la case globale */ function cocherDecocherTout(idCaseGlobale) { // itérer sur la liste des éléments détails : 1 par couple - var lesDetails = document.querySelectorAll("details.activite"); - for (var i = 0; i < lesDetails.length; ++i) + let lesDetails = document.querySelectorAll("details.activite"); + for (let i = 0; i < lesDetails.length; ++i) { // itérer sur les personnes - var lesPersonnes = lesDetails[i].querySelectorAll("h4.personne"); + let lesPersonnes = lesDetails[i].querySelectorAll("h4.personne"); cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes); } // changer le message @@ -19,26 +21,30 @@ function cocherDecocherTout(idCaseGlobale) /** * idem dans le cas des versements des personnes -*/ + * @param {HTMLInputElement} idCaseGlobale id de la case globale + */ function cocherDecocherToutesLesPersonnes(idCaseGlobale) { - var lesPersonnes = document.querySelectorAll("h4.personne"); + let lesPersonnes = document.querySelectorAll("h4.personne"); cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes); changerMessage(idCaseGlobale.nextElementSibling, idCaseGlobale); } +/** + * @param {HTMLInputElement} idCaseGlobale + * @param {NodeListOf} lesPersonnes + */ function cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes) { - for (var j = 0; j < lesPersonnes.length; ++j) + for (let j = 0; j < lesPersonnes.length; ++j) { // trouver l'élément total de la personne - var idTotal = lesPersonnes[j].querySelector("span"); + let idTotal = lesPersonnes[j].querySelector("span"); // puis la case à cocher - var fieldset = lesPersonnes[j].closest("details").querySelector("fieldset"); - var idCase = fieldset.querySelector("input"); + let idCase = lesPersonnes[j].closest("summary").querySelector("input"); idCase.checked = idCaseGlobale.checked; // puis traiter toutes les cases de la personne - cocherDecocherPersonne(idCase, idTotal, false); + cocherDecocherPersonne(idCase, idTotal); } } @@ -46,58 +52,54 @@ function cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes) * Fonction appelée quand on (dé)coche la case globale d'une personne * - (dé)sélectionner toutes les cases à cocher * - faire le total des cases cochées et l'afficher - * - * @param id de la case qui a été cochée - * @param id de l'élément où afficher le total - * @param changer : vrai, s'il faut changer le message de la personne + * @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 cocherDecocherPersonne(idCase, idTotal, changer = true) +function cocherDecocherPersonne(idCase, idTotal) { // chercher le fieldset des versements - var fieldset = idCase.closest("details").querySelector("fieldset"); - var listeCases = fieldset.querySelectorAll("input[type=checkbox]"); - for (var i = 0; i < listeCases.length; ++i) + let fieldset = idCase.closest("details").querySelector("fieldset"); + let listeCases = fieldset.querySelectorAll("input[type=checkbox]"); + for (let i = 0; i < listeCases.length; ++i) { listeCases[i].checked = idCase.checked; } // calculer et afficher le total - var listeMontants = fieldset.querySelectorAll("span.montant"); + let listeMontants = fieldset.querySelectorAll("span.montant"); calculerTotal(listeCases, listeMontants, idTotal); - // changer le message - if (changer) { changerMessage(idCase.nextElementSibling, idCase); } } /** * Fonction appelée quand on (dé)coche la case d'un versement * Faire le total des cases cochées et l'afficher * - * @param id de la case qui a été cochée - * @param id de l'élément où afficher le total + * @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) { - var fieldset = idCase.closest("fieldset"); - var listeCases = fieldset.querySelectorAll("input[type=checkbox]"); - var listeMontants = fieldset.querySelectorAll("span.montant"); + let fieldset = idCase.closest("fieldset"); + let listeCases = fieldset.querySelectorAll("input[type=checkbox]"); + let listeMontants = fieldset.querySelectorAll("span.montant"); calculerTotal(listeCases, listeMontants, idTotal); } /** * Faire le total des cases cochées et l'afficher - * @param listes des cases - * @param listes des montants associés - * @param id de l'élément où afficher le total -*/ + * @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) { - var total = 0; - for (var i = 1; i < listeCases.length; ++i) + let total = 0; + for (let i = 0; i < listeCases.length; ++i) { if (listeCases[i].checked) { - total += parseFloat(listeMontants[i-1].textContent.replace(/\s/g, "")); + total += parseFloat(listeMontants[i].textContent.replace(/\s/g, "")); } } - // "afficher" le total + // afficher le total idTotal.innerHTML = total.toLocaleString('fr-FR', {style: 'currency', currency: 'EUR', minimumFractionDigits: 2}); @@ -105,7 +107,9 @@ function calculerTotal(listeCases, listeMontants, idTotal) /** * changer le message en fonction de l'état coché de la case -*/ + * @param {Element} message + * @param {HTMLInputElement} idCase + */ function changerMessage(message, idCase) { if (idCase.checked) { @@ -118,13 +122,13 @@ function changerMessage(message, idCase) /** * fonction appelée lors de la validation du formulaire * @return vrai si au moins un choix a été fait - * @param : formulaire -*/ + * @param {HTMLFormElement} formulaire + */ function verifierChoix(formulaire) { - var listeCheck = formulaire.getElementsByTagName("input"); - var ok = false; - for (var i = 1; i < listeCheck.length; ++i) + let listeCheck = formulaire.getElementsByTagName("input"); + let ok = false; + for (let i = 1; i < listeCheck.length; ++i) { if (listeCheck[i].checked) { @@ -139,39 +143,55 @@ function verifierChoix(formulaire) return ok; } +/** + * afficher et masquer des portions de formulaire selon l'action + * @param {HTMLFormElement} formulaire + * @param {string} action après envoi du formulaire + * @param {any} nomClasse1 classe des éléments à afficher + * @param {any} nomClasse2 classe des éléments à masquer + */ function choixMethodeGeneration(formulaire, action, nomClasse1, nomClasse2) { formulaire.setAttribute('action', 'action.php?action=' + action); afficherMasquer(formulaire, nomClasse1, nomClasse2); } +/** + * afficher et masquer des portions de formulaire + * @param {HTMLFormElement} formulaire + * @param {any} nomClasse1 classe des éléments à afficher + * @param {any} nomClasse2 classe des éléments à masquer + */ function afficherMasquer(formulaire, nomClasse1, nomClasse2) { - for (var elem of formulaire.querySelectorAll(nomClasse1)) { + for (let elem of formulaire.querySelectorAll(nomClasse1)) { elem.classList.remove('hidden'); } - for (var elem of formulaire.querySelectorAll(nomClasse2)) { + for (let elem of formulaire.querySelectorAll(nomClasse2)) { elem.classList.add('hidden'); } } -// vérifier -// - qu'au moins une activité/tarif est sélectionnée -// - qu'un radio de chaque activité/tarif sélectionné a été sélectionné :) +/** + * vérifier + * - qu'au moins une activité/tarif est sélectionnée + * - qu'un radio de chaque activité/tarif sélectionné a été sélectionné :) + * @param {string} idElem id du conteneur des cases à vérifier + */ function verifierCases(idElem) { - var div = document.getElementById(idElem); - var nbChoix = 0; + let div = document.getElementById(idElem); + let nbChoix = 0; // parcourir les cases à cocher - for (var idCase of div.querySelectorAll("input[type=checkbox]")) + for (let idCase of div.querySelectorAll("input[type=checkbox]")) { if (idCase.checked) { ++nbChoix; // vérifier qu'un radio de la même ligne est sélectionné - var ligneCorrecte = false; + let ligneCorrecte = false; // trouver la ligne englobante - var ligne = idCase.closest("tr"); - for (var idRadio of ligne.querySelectorAll('input[type=radio]')) + let ligne = idCase.closest("tr"); + for (let idRadio of ligne.querySelectorAll('input[type=radio]')) { if (idRadio.checked) { ligneCorrecte = true; break; } } @@ -187,11 +207,14 @@ function verifierCases(idElem) return nbChoix != 0; } -// vérifier qu'un radio a été sélectionné dans la div paramètre +/** + * vérifier qu'un radio a été sélectionné dans la div paramètre + * @param {string} idElem id du conteneur des radios à vérifier + */ function verifierRadio(idElem) { - var div = document.getElementById(idElem); - for (var idRadio of div.querySelectorAll('input[type=radio]')) + let div = document.getElementById(idElem); + for (let idRadio of div.querySelectorAll('input[type=radio]')) { if (idRadio.checked) { return true; } } @@ -199,12 +222,18 @@ function verifierRadio(idElem) return false; } +/** + * afficher/masquer les détails + * @param {string} idElem bouton de masquage/affichage + * @param {string} classe des détails à afficher/masquer + * @param {string} texte du bouton + */ function montrerMasquerDetails(idElem, classe, texte) { - var lesDetails = document.querySelectorAll(classe); + let lesDetails = document.querySelectorAll(classe); if (lesDetails.length > 0) { - var leBouton = document.getElementById(idElem); + let leBouton = document.getElementById(idElem); if (leBouton.textContent.startsWith('Replier')) { // masquer diff --git a/www/admin/style.css b/www/admin/style.css index 81dc14d..7253822 100644 --- a/www/admin/style.css +++ b/www/admin/style.css @@ -32,7 +32,8 @@ summary.personne padding-top : 0; padding-bottom : 0; } -h3.personne, h4.personne { +h3.personne, h4.personne +{ font-weight : normal; background: rgba(var(--gSecondColor), 0.25); } From c7f5500224188a945a1dde41e07e4d4d6986e359 Mon Sep 17 00:00:00 2001 From: engel <> Date: Wed, 27 Apr 2022 13:57:16 +0000 Subject: [PATCH 04/20] simplification affichage FossilOrigin-Name: 676c58857ae7ff3522d30289744ec302c2254097bfdf2420e1c2178d4ddf4c5d --- templates/index.tpl | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/templates/index.tpl b/templates/index.tpl index 8e54e1b..d6c7cba 100644 --- a/templates/index.tpl +++ b/templates/index.tpl @@ -101,8 +101,8 @@ de configuration 0 && $nbChamps > 0} - + @@ -111,6 +111,10 @@ {foreach from=$activitesTarifsComptes item="activite"} + + - ) - var ligne = idCase.closest("tr"); + // chercher la ligne englobante (
  • ) + var ligne = idCase.closest("li"); // itérer sur les radio de cette ligne var lesRadios = ligne.querySelectorAll('input[type=radio]'); for (var idRadio of lesRadios) { diff --git a/templates/versements_activites.tpl b/templates/versements_activites.tpl index 4092df0..1ebd69c 100644 --- a/templates/versements_activites.tpl +++ b/templates/versements_activites.tpl @@ -26,41 +26,51 @@ $pair = true; $tarifCourant = $versement->idTarif; $personneCourante = $versement->idUser; - $compteCourant = $versement->compte; + $compteCourant = $versement->idCompte; ?> {afficher_debut_tarif versement=$versement} {afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante} + {afficher_debut_compte idCompte=$compteCourant} {elseif $versement.idTarif != $tarifCourant} {* changement de tarif *} + {fin_compte} {fin_personne} {fin_tarif} idTarif; $personneCourante = $versement->idUser; - $compteCourant = $versement->compte; + $compteCourant = $versement->idCompte; ?> {afficher_debut_tarif versement=$versement} {afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante} + {afficher_debut_compte idCompte=$compteCourant} {elseif $versement.idUser != $personneCourante} {* changement de personne *} + {fin_compte} {fin_personne} idUser; - $compteCourant = $versement->compte; + $compteCourant = $versement->idCompte; ?> {afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante} - {elseif $versement.compte != $compteCourant} - {* même personne mais changement de compte *} - compte; ?> -
    + {afficher_debut_compte idCompte=$compteCourant} + {elseif $versement.idCompte != $compteCourant} + {fin_compte} + {* changement de compte *} + idCompte; + ?> + {afficher_debut_compte idCompte=$compteCourant} {else} {* même personne, même compte *} {/if} {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante rang=$rang pair=$pair} {/foreach} {* Itération sur les versements *} + {fin_compte} {fin_personne} {fin_tarif} diff --git a/templates/versements_personnes.tpl b/templates/versements_personnes.tpl index 5d3d731..82ffd04 100644 --- a/templates/versements_personnes.tpl +++ b/templates/versements_personnes.tpl @@ -3,6 +3,42 @@

    Versements par personne

    +
    + + +
    @@ -14,7 +50,7 @@ onclick="return verifierChoix(this.form)" />
    -
    + {* Itération sur les personnes *} {foreach from=$lesVersements key="rang" item="versement"} @@ -23,28 +59,36 @@ idUser; - $compteCourant = $versement->compte; + $compteCourant = $versement->idCompte; ?> {afficher_debut_personne user=$personneCourante idVersement=$personneCourante} + {afficher_debut_compte idCompte=$compteCourant} {elseif $versement.idUser != $personneCourante} {* changement de personne *} + {fin_compte} {fin_personne} idUser; - $compteCourant = $versement->compte; + $compteCourant = $versement->idCompte; ?> {afficher_debut_personne user=$personneCourante idVersement=$personneCourante} - {elseif $versement.compte != $compteCourant} - {* même personne mais changement de compte *} - compte; ?> -
    + {afficher_debut_compte idCompte=$compteCourant} + {elseif $versement.idCompte != $compteCourant} + {fin_compte} + {* changement de compte *} + idCompte; + ?> + {afficher_debut_compte idCompte=$compteCourant} {else} {* même personne, même compte *} {/if} {afficher_versement versement=$versement idVersement=$personneCourante rang=$rang pair=$pair} {/foreach} {* Itération sur les personnes *} + {fin_compte} {fin_personne} diff --git a/www/admin/action.php b/www/admin/action.php index 05cc7af..67602ac 100644 --- a/www/admin/action.php +++ b/www/admin/action.php @@ -64,31 +64,43 @@ $tpl->register_function('afficher_debut_tarif', function ($params) { $versement = $params['versement']; $idTarif = $versement->idTarif; - $tarif = $_SESSION['lesTarifs'][$idTarif]; - $idActivite = $tarif->idActivite; - $activite = $_SESSION['lesActivites'][$idActivite]; - + $out = sprintf('
    -
    - -
    ', +
    ', $idVersement, $personne->nomPrenom ); return $out; }); +// afficher infos compte +$tpl->register_function('afficher_debut_compte', function ($params) +{ + $idCompte = $params['idCompte']; + $out = sprintf(' +
    +

    Compte N° %1$s : %2$s

    ', + $_SESSION['comptes'][$idCompte]->codeCompte, + $_SESSION['comptes'][$idCompte]->nomCompte); + return $out; +}); + // afficher un versement $tpl->register_function('afficher_versement', function ($params) { @@ -140,24 +163,34 @@ $tpl->register_function('afficher_versement', function ($params) name="selected[]" value="%2$s" onclick="cocherDecocherVersement(check_%1$s_%2$s, total_%1$s)" /> -
    ', $idVersement, $rang, - $versement->versement/100, - date_format(date_create($versement->date),"d/m/Y"), - $versement->compte + number_format( + $versement->versement/100, + 2, + ",", + " " + ), + date_format(date_create($versement->date),"d/m/Y") ); return $out; }); -$tpl->register_function('fin_personne', function ($params) +$tpl->register_function('fin_compte', function () { $out = ' -
    + '; + return $out; +}); + +$tpl->register_function('fin_personne', function () +{ + $out = ' +
    '; return $out; }); @@ -175,6 +208,8 @@ $tpl->register_function('fin_tarif', function ($params) if ($_GET['action'] == 'personne') { require('versements_personnes.php'); -} else { +} else if ($_GET['action'] == 'compte') { + require('versements_personnes.php'); +} else if ($_GET['action'] == 'activite') { require('versements_activites.php'); } diff --git a/www/admin/index.php b/www/admin/index.php index c489221..a7e73a5 100644 --- a/www/admin/index.php +++ b/www/admin/index.php @@ -10,10 +10,7 @@ if (! isset($_SESSION['annee_recu']) || $_SESSION['annee_recu'] == "") $_SESSION['annee_recu'] = date("Y") - 1; } -// libellés pour les taux de réduction -$_SESSION['ligneReduction'] = Utils::getLignesReduction($plugin->getConfig('reduction')); - -// compter le nombre de taux de réduction activés +// nombre de taux de réduction activés $nbTaux = 0; foreach ($plugin->getConfig('reduction') as $taux) { @@ -23,7 +20,6 @@ foreach ($plugin->getConfig('reduction') as $taux) // idem avec les champs nom/prénom $nbChamps = 0; $champsNom = Utils::getChampsNom($config, $plugin); - if (null !== $champsNom) { foreach ($champsNom as $nom => $champ) @@ -32,13 +28,36 @@ if (null !== $champsNom) } } +// comptes sur lesquels des versements de membres ont été faits +// pendant l'année fiscale choisie +$_SESSION['comptes'] = Utils::getComptes($_SESSION['annee_recu'], 'like', '7%'); + // liste des activités, cotisations et comptes associés -$activitesTarifsComptes = Utils::getActivitesTarifsEtComptes(); +$activitesTarifsComptes = Utils::getTarifsComptes($_SESSION['annee_recu'], 'like', '7%'); +$_SESSION['lesTarifs'] = Utils::getTarifs(); +$_SESSION['lesActivites'] = Utils::getActivites(); + +// liste des comptes associés à aucune activité +$comptesSansActivite = array(); +foreach ($_SESSION['comptes'] as $id => $elem) +{ + $trouve = false; + foreach ($activitesTarifsComptes as $elem) + { + if ($id == $elem->idCompte) { $trouve = true ; break; } + } + if (! $trouve) { $comptesSansActivite[] = $id; } +} // préparation de l'affichage $tpl->assign('annee_recu', $_SESSION['annee_recu']); +$tpl->assign('lesComptes', $_SESSION['comptes']); +$tpl->assign('lesTarifs', $_SESSION['lesTarifs']); +$tpl->assign('lesActivites', $_SESSION['lesActivites']); $tpl->assign('activitesTarifsComptes', $activitesTarifsComptes); +$tpl->assign('comptesSansActivite', $comptesSansActivite); $tpl->assign('nbTarifs', count($activitesTarifsComptes)); +$tpl->assign('nbComptes', count($_SESSION['comptes'])); $tpl->assign('plugin_config', $plugin->getConfig()); $tpl->assign('nbTaux', $nbTaux); $tpl->assign('nbChamps', $nbChamps); diff --git a/www/admin/style.css b/www/admin/style.css index 26db1bb..e9e9ff0 100644 --- a/www/admin/style.css +++ b/www/admin/style.css @@ -36,7 +36,6 @@ summary.personne } div.activite { - font-weight : normal; background-color: rgba(var(--gSecondColor), 0.4); } div.personne @@ -101,3 +100,13 @@ div.infos margin-left : 1em; width : 20em; } +ul#liste_activites dd +{ + display: inline-block; +} + +ul.reduction span.radio-btn +{ + margin-left : 2em; + border-spacing : 0.1em; +} diff --git a/www/admin/versements_activites.php b/www/admin/versements_activites.php index 68fd0b4..014ef54 100644 --- a/www/admin/versements_activites.php +++ b/www/admin/versements_activites.php @@ -7,42 +7,57 @@ use Garradin\Plugin\RecusFiscaux\Personne; use Garradin\Plugin\RecusFiscaux\Tarif; use Garradin\Plugin\RecusFiscaux\Utils; +// ------------------------------------------------------------ // récupérer les infos du formulaire +// ------------------------------------------------------------ + +// tarifs sélectionnés $tarifsSelectionnes = f('tarifs') ?: []; +// comptes sélectionnés +$comptesSelectionnes = f('comptes') ?: []; + // taux de réduction associés $tauxSelectionnes = array(); -foreach ($tarifsSelectionnes as $idTarif) { +foreach ($tarifsSelectionnes as $idTarif) +{ $nomRadio = "taux_reduction_" . $idTarif; $valRadio = f("$nomRadio"); $tauxSelectionnes[$idTarif] = $valRadio; } +foreach ($comptesSelectionnes as $idCompte) +{ + $nomRadio = "taux_reduction_" . $idCompte; + $valRadio = f("$nomRadio"); + $tauxSelectionnes[$idCompte] = $valRadio; +} $_SESSION['tauxSelectionnes'] = $tauxSelectionnes; -// obtenir les instances de tarifs correspondant à la sélection -$lesTarifs = array(); -foreach (Utils::getTarifs($tarifsSelectionnes) as $ot) { - $lesTarifs[$ot->id] = $ot; -} -$_SESSION['lesTarifs'] = $lesTarifs; +// versements correspondants à la sélection, triés par tarif, nom, compte, date +$lesTarifs = array_map(fn($elem) : string => substr($elem, 0, strpos($elem, '_')), + $tarifsSelectionnes); +$lesComptes = array_map(fn($elem) : string => substr($elem, 1 + strpos($elem, '_')), + $tarifsSelectionnes); +$_SESSION['lesVersements'] = + Utils::getVersementsTarifsComptes( + $_SESSION['annee_recu'], + $lesTarifs, + $lesComptes, + $champsNom); -// activités correspondants aux tarifs sélectionnés -$lesActivites = array(); -foreach (Utils::getActivites($tarifsSelectionnes) as $activite) { - $lesActivites[$activite->id] = $activite; +// ajouter les versements sans tarif (tri par nom, compte, date) +$versementsSansTarif = Utils::getVersementsComptes($_SESSION['annee_recu'], + $comptesSelectionnes, + $champsNom); +foreach ($versementsSansTarif as $versement) +{ + $_SESSION['lesVersements'][] = $versement; } -$_SESSION['lesActivites'] = $lesActivites; - -// versements correspondants aux tarifs sélectionnés -$_SESSION['lesVersements'] = Utils::getVersementsTarifs($_SESSION['annee_recu'], - $tarifsSelectionnes, - $champsNom); // préparation de l'affichage -$tpl->assign('lesActivites', $lesActivites); -$tpl->assign('lesTarifs', $lesTarifs); $tpl->assign('lesVersements', $_SESSION['lesVersements']); $tpl->assign('plugin_css', ['style.css']); // envoyer au template $tpl->display(PLUGIN_ROOT . '/templates/versements_activites.tpl'); + diff --git a/www/admin/versements_personnes.php b/www/admin/versements_personnes.php index 1a16cca..d0ee822 100644 --- a/www/admin/versements_personnes.php +++ b/www/admin/versements_personnes.php @@ -5,81 +5,23 @@ namespace Garradin; use Garradin\Plugin\RecusFiscaux\Personne; use Garradin\Plugin\RecusFiscaux\Utils; -$_SESSION['taux_reduction'] = $_POST['taux_reduction']; +// vérifier si le taux de réduction a été sélectionné au préalable +$_SESSION['taux_reduction'] = f('taux_reduction'); +if (! isset($_SESSION['taux_reduction']) || $_SESSION['taux_reduction'] == "") { + \Garradin\Utils::redirect(PLUGIN_URL . 'index.php'); +} // versements par personne -$_SESSION['lesVersements'] = Utils::getVersementsComptes($_SESSION['annee_recu'], - "like", - '7%', - $champsNom); - - // Utils::getVersementsPersonnes($_SESSION['annee_recu'], - // $champsNom); - -// ------------------------------------------------------------------------ -// tests -// ------------------------------------------------------------------------ -/* -$versementsComptes = Utils::getVersementsComptes("2021", - // "in", - // ['706', '7780', '756'], - "like", - '7%', - $champsNom); -// table triée par nom, date -// error_log("versementsComptes triée par nom, date = " . print_r($versementsComptes, true)); - -// comparer 2 lignes selon le nom -function comparerNoms($ligne1, $ligne2) -{ - return - $_SESSION['membresDonateurs'][$ligne1->idUser]->rang - - - $_SESSION['membresDonateurs'][$ligne2->idUser]->rang; -} - -// comparer 2 lignes selon la date -function comparerDate($ligne1, $ligne2) -{ - return - strtotime($ligne1->date) - strtotime($ligne2->date); -} - -// comparer 2 lignes selon un champ -function comparerChamp($ligne1, $ligne2, $champ) -{ - return $ligne1->$champ - $ligne2->$champ; -} - -// autres tris -// par tarif, nom, date -usort($versementsComptes, function($ligne1, $ligne2) -{ - $result = comparerChamp($ligne1, $ligne2, 'idTarif'); //$ligne1->idTarif - $ligne2->idTarif; - if ($result == 0) { $result = comparerNoms($ligne1, $ligne2); } - if ($result == 0) { $result = comparerDate($ligne1, $ligne2); } - return $result; -}); -// error_log("versementsComptes triée par tarif, nom, date = " . print_r($versementsComptes, true)); - -// par nom, compte, date... -usort($versementsComptes, function($ligne1, $ligne2) -{ - $result = comparerNoms($ligne1, $ligne2); - if ($result == 0) { $result = comparerChamp($ligne1, $ligne2, 'compte'); } - if ($result == 0) { $result = comparerDate($ligne1, $ligne2); } - return $result; -}); - -// error_log("versementsComptes triée par nom, compte, date = " . print_r($versementsComptes, true)); -*/ -// ------------------------------------------------------------------------ -// fin tests -// ------------------------------------------------------------------------ +$_SESSION['lesVersements'] = Utils::getVersementsPersonnes( + $_SESSION['annee_recu'], + 'like', + '7%', + $champsNom); // préparation de l'affichage $tpl->assign('lesVersements', $_SESSION['lesVersements']); $tpl->assign('plugin_css', ['style.css']); // envoyer au template +$tpl->assign('plugin_config', $plugin->getConfig()); $tpl->display(PLUGIN_ROOT . '/templates/versements_personnes.tpl'); From e4bcec41d190af441985cbacc1cea3f814434e30 Mon Sep 17 00:00:00 2001 From: engel <> Date: Wed, 18 May 2022 10:29:48 +0000 Subject: [PATCH 11/20] =?UTF-8?q?int=C3=A9gration=20comptes=20;=20correcti?= =?UTF-8?q?on=20r=C3=A9pertoire=20fichiers=20PDF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FossilOrigin-Name: 73be628660ffd83648eef220291a2361d74f7910098cd89a9ba63b4c796878bb --- www/admin/generer_recus.php | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/www/admin/generer_recus.php b/www/admin/generer_recus.php index 18d2965..8f17c1b 100644 --- a/www/admin/generer_recus.php +++ b/www/admin/generer_recus.php @@ -6,7 +6,6 @@ use Garradin\Files\Files; use Garradin\Entities\Files\File; use Garradin\UserTemplate\UserTemplate; -//use Garradin\Plugin\RecusFiscaux\RecusHTML; use Garradin\Plugin\RecusFiscaux\Utils; use Garradin\Plugin\RecusFiscaux\Personne; @@ -50,6 +49,9 @@ elseif ($nbArticles > 1) } } +// libellés pour les taux de réduction +$libelles_taux = Utils::getLignesReduction($plugin->getConfig('reduction')); + // filtrer les versements sélectionnés $lesLignes = f('selected'); $versementsSelectionnes = array(); @@ -89,12 +91,12 @@ foreach ($totalPersonnes as $idPersonne => $personne) // les versements $tpl->registerSection('versements', - function () use($personne) + function () use($personne, $libelles_taux) { foreach ($personne->versements as $taux => $montant) { $ligne['montant'] = $montant; - $ligne['libelle'] = Utils::getLigneReduction($taux); + $ligne['libelle'] = $libelles_taux[$taux]; yield $ligne; } }); @@ -129,7 +131,10 @@ foreach ($totalPersonnes as $idPersonne => $personne) // changer le nom du fichier $nom = str_replace(' ', '_', $personne->nomPrenom); $nom = str_replace("'", "", $nom); - $nomFichier = "recu_" . $_SESSION['annee_recu'] . "_" . $nom . ".pdf"; + $nomFichier = sprintf('%s/recu_%s_%s.pdf', + dirname($nomPDF), + $_SESSION['annee_recu'], + $nom); rename($nomPDF, $nomFichier); // ajouter le nom du fichier à la liste pour mettre dans une archive $listeFichiersPDF[] = $nomFichier; @@ -142,6 +147,12 @@ $fichierZip = Utils::makeArchive( PLUGIN_ROOT . "/zip" ); +//supprimer les fichiers pdf (utile ?) +// foreach ($listeFichiersPDF as $f) +// { +// unlink($f); +// } + /** * Cumuler les versements de chaque personne * @param tableau des versements triés par idUser, date From 3543f50bd3b2446232c7db9ddefeee13bec72994 Mon Sep 17 00:00:00 2001 From: engel <> Date: Wed, 18 May 2022 10:30:10 +0000 Subject: [PATCH 12/20] =?UTF-8?q?int=C3=A9gration=20comptes=20;=20correcti?= =?UTF-8?q?on=20calcul=20total=20(centimes)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FossilOrigin-Name: e2258a9966d61dda05c821ceee19965331f6b0204c0ecb63a1d5c9be86ee15ce --- www/admin/script.js | 47 +++++++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/www/admin/script.js b/www/admin/script.js index b53db28..5e82a87 100644 --- a/www/admin/script.js +++ b/www/admin/script.js @@ -69,7 +69,7 @@ function cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes) function cocherDecocherPersonne(idCase, idTotal) { // chercher le fieldset des versements - let fieldset = idCase.closest("details").querySelector("fieldset"); + let fieldset = idCase.closest("details").querySelector("div.versements"); let listeCases = fieldset.querySelectorAll("input[type=checkbox]"); for (let i = 0; i < listeCases.length; ++i) { @@ -87,7 +87,7 @@ function cocherDecocherPersonne(idCase, idTotal) */ function cocherDecocherVersement(idCase, idTotal) { - let fieldset = idCase.closest("fieldset"); + let fieldset = idCase.closest("div.versements"); let listeCases = fieldset.querySelectorAll("input[type=checkbox]"); let listeMontants = fieldset.querySelectorAll("span.montant"); calculerTotal(listeCases, listeMontants, idTotal); @@ -105,7 +105,7 @@ function calculerTotal(listeCases, listeMontants, idTotal) for (let i = 0; i < listeCases.length; ++i) { if (listeCases[i].checked) { - total += parseFloat(listeMontants[i].textContent.replace(/\s/g, "")); + total += parseFloat(listeMontants[i].textContent.replace(/\s/g, "").replace(",", ".")); } } // afficher le total @@ -153,31 +153,28 @@ function verifierChoix(formulaire) } /** + * positionner l'action déclenchée par l'envoi du formulaire * afficher et masquer des portions de formulaire selon l'action * @param {HTMLFormElement} formulaire * @param {string} action après envoi du formulaire - * @param {any} nomClasse1 classe des éléments à afficher - * @param {any} nomClasse2 classe des éléments à masquer + * @param {any} idElem id de l'élément à afficher + * @param {any} nomClasse classe des éléments à masquer (sauf idElem) */ -function choixMethodeGeneration(formulaire, action, nomClasse1, nomClasse2) +function choixMethodeGeneration(formulaire, action, idElem, nomClasse) { + console.log("id = " + idElem + ", cl = " + nomClasse); formulaire.setAttribute('action', 'action.php?action=' + action); - afficherMasquer(formulaire, nomClasse1, nomClasse2); -} - -/** - * afficher et masquer des portions de formulaire - * @param {HTMLFormElement} formulaire - * @param {any} nomClasse1 classe des éléments à afficher - * @param {any} nomClasse2 classe des éléments à masquer - */ -function afficherMasquer(formulaire, nomClasse1, nomClasse2) -{ - for (let elem of formulaire.querySelectorAll(nomClasse1)) { - elem.classList.remove('hidden'); - } - for (let elem of formulaire.querySelectorAll(nomClasse2)) { - elem.classList.add('hidden'); + for (let elem of formulaire.querySelectorAll(nomClasse)) + { + console.log("elem.id = " + elem.id + ", elem.classList = " + elem.classList); + if (elem.id == idElem) + { + elem.classList.remove('hidden'); + } + else + { + elem.classList.add('hidden'); + } } } @@ -199,7 +196,7 @@ function verifierCases(idElem) // vérifier qu'un radio de la même ligne est sélectionné let ligneCorrecte = false; // trouver la ligne englobante - let ligne = idCase.closest("tr"); + let ligne = idCase.closest("li"); for (let idRadio of ligne.querySelectorAll('input[type=radio]')) { if (idRadio.checked) { ligneCorrecte = true; break; } @@ -211,7 +208,7 @@ function verifierCases(idElem) } } if (nbChoix == 0) { - alert("Erreur : il faut sélectionner au moins une activité/tarif"); + alert("Erreur : il faut sélectionner au moins une ligne"); } return nbChoix != 0; } @@ -228,7 +225,7 @@ function verifierRadio(idElem) if (idRadio.checked) { return true; } } alert("Erreur : il faut sélectionner un taux de réduction"); - return false; + return false; } /** From e4a1c118728ea970de9f938cba1acb30c6e4046d Mon Sep 17 00:00:00 2001 From: engel <> Date: Wed, 18 May 2022 19:37:17 +0000 Subject: [PATCH 13/20] suppression fonction inutile FossilOrigin-Name: e012a353747dd79da683af96d0adddb4f7643482ffe99b9e0a8d18e27fe2357d --- lib/Utils.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lib/Utils.php b/lib/Utils.php index d3cf3cf..ad34fdc 100644 --- a/lib/Utils.php +++ b/lib/Utils.php @@ -387,11 +387,6 @@ class Utils return $lignes; } - public static function getLigneReduction($taux) - { - return $_SESSION['ligneReduction'][$taux]; - } - /** * récupérer dans la config du plugin les champs des membres * utilisés pour le nom et le prénom ; ajouter/supprimer les From 92a4b7b8a6797774747c9d08952809ce9b6087b2 Mon Sep 17 00:00:00 2001 From: engel <> Date: Wed, 18 May 2022 19:38:02 +0000 Subject: [PATCH 14/20] suppression messages inutiles FossilOrigin-Name: e9f360c137e3a41453b47d042cf8433b8ec50886e0756dfed5e67bf553a91189 --- www/admin/script.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/www/admin/script.js b/www/admin/script.js index 5e82a87..0c98978 100644 --- a/www/admin/script.js +++ b/www/admin/script.js @@ -162,11 +162,9 @@ function verifierChoix(formulaire) */ function choixMethodeGeneration(formulaire, action, idElem, nomClasse) { - console.log("id = " + idElem + ", cl = " + nomClasse); formulaire.setAttribute('action', 'action.php?action=' + action); for (let elem of formulaire.querySelectorAll(nomClasse)) { - console.log("elem.id = " + elem.id + ", elem.classList = " + elem.classList); if (elem.id == idElem) { elem.classList.remove('hidden'); From 358aad1ec79984200cfb08ba6b01de1662f279fe Mon Sep 17 00:00:00 2001 From: engel <> Date: Wed, 18 May 2022 19:38:59 +0000 Subject: [PATCH 15/20] correction bug total compte FossilOrigin-Name: d24bebd61e6729bab7cb2caa65523d20146e187b621935e47be84169db710dc7 --- www/admin/generer_recus.php | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/www/admin/generer_recus.php b/www/admin/generer_recus.php index 8f17c1b..760fd0b 100644 --- a/www/admin/generer_recus.php +++ b/www/admin/generer_recus.php @@ -205,25 +205,31 @@ function cumulerVersementsTarif($versements) $totalPersonnes = array(); $idTarifCourant = -1; $idPersonneCourant = -1; + $idCompteCourant = -1; $totalVersements = 0; foreach ($versements as $ligne) { if ( - $ligne->idTarif != $idTarifCourant || - $ligne->idUser != $idPersonneCourant + $ligne->idTarif != $idTarifCourant || + $ligne->idUser != $idPersonneCourant || + $ligne->idCompte != $idCompteCourant ) { if ($idTarifCourant != -1) { // changement de tarif ou de personne + $tarifCompte = ($idTarifCourant == 0) ? + $idCompteCourant : + $idTarifCourant . "_" . $idCompteCourant; $totalPersonnes[$idPersonneCourant]->ajouterVersement( - $_SESSION['tauxSelectionnes'][$idTarifCourant], + $_SESSION['tauxSelectionnes'][$tarifCompte], $totalVersements ); } - $idTarifCourant = $ligne->idTarif; + $idTarifCourant = $ligne->idTarif; $idPersonneCourant = $ligne->idUser; - $totalVersements = $ligne->versement; + $idCompteCourant = $ligne->idCompte; + $totalVersements = $ligne->versement; // créer les infos de la personne, sauf si elle est déjà présente if (!array_key_exists($idPersonneCourant, $totalPersonnes)) { @@ -235,8 +241,11 @@ function cumulerVersementsTarif($versements) } } // et le dernier + $tarifCompte = ($idTarifCourant == 0) ? + $idCompteCourant : + $idTarifCourant . "_" . $idCompteCourant; $totalPersonnes[$idPersonneCourant]->ajouterVersement( - $_SESSION['tauxSelectionnes'][$idTarifCourant], + $_SESSION['tauxSelectionnes'][$tarifCompte], $totalVersements ); return $totalPersonnes; From 9c64e19f4c611503c25136aeefb9e9b418408a2f Mon Sep 17 00:00:00 2001 From: engel <> Date: Fri, 20 May 2022 19:41:50 +0000 Subject: [PATCH 16/20] =?UTF-8?q?simplification=20pr=C3=A9sentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FossilOrigin-Name: 92a26d123e288053bef4008013ecc4531bd1a94f91dfb36877f0ecfc1731b31e --- templates/index.tpl | 83 +----------------------------- templates/versements_personnes.tpl | 36 ------------- 2 files changed, 2 insertions(+), 117 deletions(-) diff --git a/templates/index.tpl b/templates/index.tpl index abd3ba6..382aa02 100644 --- a/templates/index.tpl +++ b/templates/index.tpl @@ -27,20 +27,7 @@ - {* -
    - - -
    -*} +
    @@ -95,73 +82,7 @@

    - {* Comptes *} -{* -
  • Cocher Activité et TarifCocher Taux de réduction Caractéristiques activité N° et Compte
    + {$activite.titreActivite} - {$activite.titreTarif} + {if $nbTarifs == 1} {input @@ -127,9 +131,6 @@ } {/if} - {$activite.titreActivite} - {$activite.titreTarif} - {foreach from=$plugin_config->reduction item="reduc"} {if $reduc->valeur == 1} From 7d2707eddd196c8c0b97ee56ae9e483d0256ae64 Mon Sep 17 00:00:00 2001 From: engel <> Date: Thu, 28 Apr 2022 11:28:41 +0000 Subject: [PATCH 05/20] fusion branche bug FossilOrigin-Name: 31a7a9e50c6f99940fc5a05e557c08b08366fd06c2180c2c0a1b0321a0cda07d --- templates/versements_activites.tpl | 14 +++++++------- templates/versements_personnes.tpl | 12 ++++++------ www/admin/action.php | 22 ++++++++++++---------- 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/templates/versements_activites.tpl b/templates/versements_activites.tpl index c91b289..7b04e84 100644 --- a/templates/versements_activites.tpl +++ b/templates/versements_activites.tpl @@ -8,14 +8,14 @@ - + {* Itération sur les versements *} - {foreach from=$lesVersements item="versement"} + {foreach from=$lesVersements key="num" item="versement"} {if $rang == 0} {* premier versement *} {afficher_debut_tarif versement=$versement} {afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante} - {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante rang=$rang} + {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante num=$num rang=$rang} {else} {* autre versement *} {if $versement.idTarif != $tarifCourant} @@ -39,7 +39,7 @@ ?> {afficher_debut_tarif versement=$versement} {afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante} - {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante rang=$rang} + {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante num=$num rang=$rang} {elseif $versement.idUser != $personneCourante} {* changement de personne *} @@ -49,10 +49,10 @@ $personneCourante = $versement->idUser; ?> {afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante} - {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante rang=$rang} + {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante num=$num rang=$rang} {else} {* même personne *} - {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante rang=$rang} + {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante num=$num rang=$rang} {/if} {/if} @@ -61,7 +61,7 @@ {* fin versements d'une personne *} {* fin tarif *} - + {* scripts divers *} diff --git a/templates/versements_personnes.tpl b/templates/versements_personnes.tpl index da70472..46364d0 100644 --- a/templates/versements_personnes.tpl +++ b/templates/versements_personnes.tpl @@ -11,21 +11,21 @@ onclick="montrerMasquerDetails(this.id, 'details.personne', 'toutes les personnes')">Replier toutes les personnes + onclick="return verifierChoix(this.form)" />
    {* Itération sur les personnes *} - {foreach from=$lesVersements item="versement"} + {foreach from=$lesVersements key="num" item="versement"} {if $rang == 0} {* 1ère personne *} idUser; ?> {afficher_debut_personne user=$personneCourante idVersement=$personneCourante} - {afficher_versement versement=$versement idVersement=$personneCourante rang=$rang} + {afficher_versement versement=$versement idVersement=$personneCourante num=$num rang=$rang} {elseif $versement.idUser != $personneCourante} {* changement de personne *} @@ -35,17 +35,17 @@ $personneCourante = $versement->idUser; ?> {afficher_debut_personne user=$personneCourante idVersement=$personneCourante} - {afficher_versement versement=$versement idVersement=$personneCourante rang=$rang} + {afficher_versement versement=$versement idVersement=$personneCourante num=$num rang=$rang} {else} {* même personne *} - {afficher_versement versement=$versement idVersement=$personneCourante rang=$rang} + {afficher_versement versement=$versement idVersement=$personneCourante num=$num rang=$rang} {/if} {/foreach} {* Itération sur les personnes *} - +
    {* scripts divers *} diff --git a/www/admin/action.php b/www/admin/action.php index 3036d84..75b5426 100644 --- a/www/admin/action.php +++ b/www/admin/action.php @@ -80,12 +80,12 @@ $tpl->register_function('afficher_debut_personne', function ($params) $idVersement, $idVersement); $out .= sprintf(' - ', + '; $out .= sprintf('
    ', $idVersement); @@ -97,6 +97,7 @@ $tpl->register_function('afficher_versement', function ($params) { $versement = $params['versement']; $idVersement = $params['idVersement']; + $num = $params['num']; $rang = $params['rang']; $out = '
    ', $idVersement, $idVersement, $rang, - $rang, + $num, $idVersement, $rang, $idVersement ); $out .= sprintf(' - ', - $idVersement, $rang - ); - $out .= sprintf(' - %.2f', +
    ', + %s', date_format(date_create($versement->date),"d/m/Y")); + $out .= sprintf(' + + ' + ); return $out; }); From 7ca41ea6b74b459b509637b1aef05687683b128a Mon Sep 17 00:00:00 2001 From: engel <> Date: Fri, 29 Apr 2022 09:01:15 +0000 Subject: [PATCH 06/20] =?UTF-8?q?Changement=20gestion=20choix=20ann=C3=A9e?= =?UTF-8?q?=20fiscale?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FossilOrigin-Name: d6a1c29317cfa870514efff87598a508738ef9d089e52c9b75b0e3e5477a73c9 --- templates/choix_annee.tpl | 20 ++++++++++++++++++++ templates/index.tpl | 17 +++++++---------- www/admin/action.php | 40 +++++++++++++++++++++++++++++++++------ www/admin/choix_annee.php | 24 +++++++++++++++++++++++ www/admin/index.php | 12 +++++------- 5 files changed, 90 insertions(+), 23 deletions(-) create mode 100644 templates/choix_annee.tpl create mode 100644 www/admin/choix_annee.php diff --git a/templates/choix_annee.tpl b/templates/choix_annee.tpl new file mode 100644 index 0000000..9536b5c --- /dev/null +++ b/templates/choix_annee.tpl @@ -0,0 +1,20 @@ +{include file="admin/_head.tpl" title="Changer d'année fiscale"} + +
    +
    + Changer l'année fiscale des reçus + +
    +

    + {csrf_field key="acc_select_year"} + + {button type="submit" name="change" label="Changer" shape="right" class="main"} +

    +
    + +{include file="admin/_foot.tpl"} \ No newline at end of file diff --git a/templates/index.tpl b/templates/index.tpl index d6c7cba..84db4cd 100644 --- a/templates/index.tpl +++ b/templates/index.tpl @@ -1,17 +1,14 @@ {include file="%s/templates/_nav.tpl"|args:$plugin_root current_nav="index"} -

    Choisir l'année fiscale

    + + +
    -
    - {* Choisir l'année fiscale *} - -

    Choisir une méthode de génération des reçus

    diff --git a/www/admin/action.php b/www/admin/action.php index 75b5426..fe53a67 100644 --- a/www/admin/action.php +++ b/www/admin/action.php @@ -8,12 +8,6 @@ use Garradin\Plugin\RecusFiscaux\Utils; // opérations communes // ------------------------------------------------------------------------ -// vérifier si l'année a bien été sélectionnée au préalable -$_SESSION['annee_recu'] = f('annee_recu'); -if (! isset($_SESSION['annee_recu']) || $_SESSION['annee_recu'] == "") { - \Garradin\Utils::redirect(PLUGIN_URL . 'index.php'); -} - // champs pour le nom et prénom $confNoms = Utils::getChampsNom($config, $plugin); uasort($confNoms, function ($a, $b) @@ -30,6 +24,37 @@ foreach ($confNoms as $nom => $champ) $_SESSION['membresDonateurs'] = Utils::getDonateurs($_SESSION['annee_recu'], $champsNom); +// comparaison de lignes de versements +// comparer 2 lignes selon le nom +function comparerNoms($ligne1, $ligne2) +{ + return + $_SESSION['membresDonateurs'][$ligne1->idUser]->rang + - + $_SESSION['membresDonateurs'][$ligne2->idUser]->rang; +} + +// comparer 2 activités par leur libellé +function comparerActivites($ligne1, $ligne2) +{ + return strcoll( + $_SESSION['lesActivites'][$_SESSION['lesTarifs'][$ligne1->idTarif]->idActivite]->label, + $_SESSION['lesActivites'][$_SESSION['lesTarifs'][$ligne2->idTarif]->idActivite]->label); +} + +// comparer 2 lignes selon la date +function comparerDate($ligne1, $ligne2) +{ + return + strtotime($ligne1->date) - strtotime($ligne2->date); +} + +// comparer 2 lignes selon un champ numérique entier +function comparerChamp($ligne1, $ligne2, $champ) +{ + return $ligne1->$champ - $ligne2->$champ; +} + // ------------------------------------------------------------------------ // fonctions pour l'affichage // ------------------------------------------------------------------------ @@ -123,6 +148,9 @@ $tpl->register_function('afficher_versement', function ($params) $out .= sprintf(' %s', date_format(date_create($versement->date),"d/m/Y")); + $out .= sprintf(' + %s', + $versement->compte); $out .= sprintf('
    ' diff --git a/www/admin/choix_annee.php b/www/admin/choix_annee.php new file mode 100644 index 0000000..a10167a --- /dev/null +++ b/www/admin/choix_annee.php @@ -0,0 +1,24 @@ +assign('anneesFiscales', $anneesFiscales); +$tpl->assign('annee_recu', $_SESSION['annee_recu']); +$tpl->assign('from', qg('from')); + +$tpl->display(PLUGIN_ROOT . '/templates/choix_annee.tpl'); diff --git a/www/admin/index.php b/www/admin/index.php index 3791e44..c489221 100644 --- a/www/admin/index.php +++ b/www/admin/index.php @@ -4,11 +4,10 @@ namespace Garradin; use Garradin\Plugin\RecusFiscaux\Utils; -// première année d'exercice -$anneeCourante = date("Y"); -$anneesFiscales = Utils::getAnneesFiscales(); -if ($anneesFiscales[0] < $anneeCourante) { - array_unshift($anneesFiscales, $anneeCourante); +// Année fiscale par défaut +if (! isset($_SESSION['annee_recu']) || $_SESSION['annee_recu'] == "") +{ + $_SESSION['annee_recu'] = date("Y") - 1; } // libellés pour les taux de réduction @@ -37,8 +36,7 @@ if (null !== $champsNom) $activitesTarifsComptes = Utils::getActivitesTarifsEtComptes(); // préparation de l'affichage -$tpl->assign('anneesFiscales', $anneesFiscales); -$tpl->assign('anneeCourante', $anneeCourante); +$tpl->assign('annee_recu', $_SESSION['annee_recu']); $tpl->assign('activitesTarifsComptes', $activitesTarifsComptes); $tpl->assign('nbTarifs', count($activitesTarifsComptes)); $tpl->assign('plugin_config', $plugin->getConfig()); From 6165ff531e04b6aab38a4c36bd5d8a7a8eaf1c38 Mon Sep 17 00:00:00 2001 From: engel <> Date: Wed, 4 May 2022 11:53:12 +0000 Subject: [PATCH 07/20] =?UTF-8?q?ajout=20case=20tarif=20;=20r=C3=A9organis?= =?UTF-8?q?ation=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FossilOrigin-Name: 80c6f13938d5f02786155717bf1ab8b89c6ade3c58bba572bf8c471b54886666 --- templates/index.tpl | 21 ++++- templates/versements_activites.tpl | 85 ++++++++++---------- templates/versements_personnes.tpl | 30 +++---- www/admin/action.php | 121 ++++++++++++++++------------- www/admin/script.js | 31 +++++--- www/admin/style.css | 15 +++- 6 files changed, 177 insertions(+), 126 deletions(-) diff --git a/templates/index.tpl b/templates/index.tpl index 84db4cd..4292f15 100644 --- a/templates/index.tpl +++ b/templates/index.tpl @@ -22,8 +22,7 @@
    {* fin versements d'une personne *} - {* fin versements d'une personne *} - {* fin tarif *} - idTarif; $personneCourante = $versement->idUser; - ?> - {afficher_debut_tarif versement=$versement} - {afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante} - {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante num=$num rang=$rang} - {elseif $versement.idUser != $personneCourante} - {* changement de personne *} - - - - compte; + ?> + {afficher_debut_tarif versement=$versement} + {afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante} + {elseif $versement.idUser != $personneCourante} + {* changement de personne *} + {fin_personne} + idUser; - ?> - {afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante} - {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante num=$num rang=$rang} - {else} - {* même personne *} - {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante num=$num rang=$rang} - {/if} + $compteCourant = $versement->compte; + ?> + {afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante} + {elseif $versement.compte != $compteCourant} + {* même personne mais changement de compte *} + compte; ?> +
    + {else} + {* même personne, même compte *} {/if} - - {/foreach} {* Itération sur les versements *} - {* fin versements d'une personne *} - {* fin versements d'une personne *} - {* fin tarif *} + {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante rang=$rang pair=$pair} + + {/foreach} {* Itération sur les versements *} + {fin_personne} + {fin_tarif} diff --git a/templates/versements_personnes.tpl b/templates/versements_personnes.tpl index 46364d0..5d3d731 100644 --- a/templates/versements_personnes.tpl +++ b/templates/versements_personnes.tpl @@ -17,33 +17,35 @@
    {* Itération sur les personnes *} - - {foreach from=$lesVersements key="num" item="versement"} + {foreach from=$lesVersements key="rang" item="versement"} {if $rang == 0} {* 1ère personne *} idUser; + $pair = true; + $personneCourante = $versement->idUser; + $compteCourant = $versement->compte; ?> {afficher_debut_personne user=$personneCourante idVersement=$personneCourante} - {afficher_versement versement=$versement idVersement=$personneCourante num=$num rang=$rang} {elseif $versement.idUser != $personneCourante} {* changement de personne *} - - - + {fin_personne} idUser; + $pair = true; + $personneCourante = $versement->idUser; + $compteCourant = $versement->compte; ?> {afficher_debut_personne user=$personneCourante idVersement=$personneCourante} - {afficher_versement versement=$versement idVersement=$personneCourante num=$num rang=$rang} + {elseif $versement.compte != $compteCourant} + {* même personne mais changement de compte *} + compte; ?> +
    {else} - {* même personne *} - {afficher_versement versement=$versement idVersement=$personneCourante num=$num rang=$rang} + {* même personne, même compte *} {/if} - + {afficher_versement versement=$versement idVersement=$personneCourante rang=$rang pair=$pair} + {/foreach} {* Itération sur les personnes *} - - + {fin_personne}
    diff --git a/www/admin/action.php b/www/admin/action.php index fe53a67..05cc7af 100644 --- a/www/admin/action.php +++ b/www/admin/action.php @@ -68,23 +68,32 @@ $tpl->register_function('afficher_debut_tarif', function ($params) $idActivite = $tarif->idActivite; $activite = $_SESSION['lesActivites'][$idActivite]; - $out = '
    - '; - $out .= sprintf(' -

    Activité « %s »

    ', $activite->label); + $out = sprintf(' +
    + +
    + +
    '; + $out .= ' + + +
    '; return $out; }); @@ -95,25 +104,22 @@ $tpl->register_function('afficher_debut_personne', function ($params) $idVersement = $params['idVersement']; $personne = $_SESSION['membresDonateurs'][$idUser]; - $out = '
    - -

    '; - $out .= sprintf(' - ', - $idVersement, - $idVersement); - $out .= sprintf(' -

    '; - $out .= sprintf(' -
    ', - $idVersement); + $out = sprintf(' +
    + +
    + + +
    +
    + +
    ', + $idVersement, + $personne->nomPrenom + ); return $out; }); @@ -122,42 +128,47 @@ $tpl->register_function('afficher_versement', function ($params) { $versement = $params['versement']; $idVersement = $params['idVersement']; - $num = $params['num']; $rang = $params['rang']; + $pair = $params['pair']; $out = '
    ' : 'impair">'; + $out .= $pair ? 'pair">' : 'impair">'; $out .= sprintf(' - ', - $idVersement, - $idVersement, $rang, - $num, - $idVersement, $rang, $idVersement - ); - $out .= sprintf(' -
    ', $idVersement, $rang, - $versement->versement/100 - ); - $out .= sprintf(' - %s', - date_format(date_create($versement->date),"d/m/Y")); - $out .= sprintf(' - %s', - $versement->compte); - $out .= sprintf(' - - ' + $versement->versement/100, + date_format(date_create($versement->date),"d/m/Y"), + $versement->compte ); return $out; }); +$tpl->register_function('fin_personne', function ($params) +{ + $out = ' +
    +
    '; + return $out; +}); + +$tpl->register_function('fin_tarif', function ($params) +{ + $out = ' +
    '; + return $out; +}); + // ------------------------------------------------------------------------ // aiguillage // ------------------------------------------------------------------------ diff --git a/www/admin/script.js b/www/admin/script.js index 0829d99..b53db28 100644 --- a/www/admin/script.js +++ b/www/admin/script.js @@ -1,8 +1,8 @@ "use strict"; /** - * Fonction appelée quand on (dé)coche la case de sélection globale - * (dé)sélectionner toutes les cases à cocher de toutes les activités + * 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 */ function cocherDecocherTout(idCaseGlobale) @@ -11,21 +11,32 @@ function cocherDecocherTout(idCaseGlobale) let lesDetails = document.querySelectorAll("details.activite"); for (let i = 0; i < lesDetails.length; ++i) { - // itérer sur les personnes - let lesPersonnes = lesDetails[i].querySelectorAll("h4.personne"); - cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes); + let idCase = lesDetails[i].querySelector("input[type=checkbox]"); + idCase.checked = idCaseGlobale.checked; + cocherDecocherTarif(idCase); } // changer le message changerMessage(idCaseGlobale.nextElementSibling, idCaseGlobale); } +/** + * Fonction appelée quand on (dé)coche la case d'activité + * (dé)sélectionner toutes les cases à cocher de cette activité + * @param {HTMLInputElement} idCaseGlobale id de la case d'activité + */ +function cocherDecocherTarif(idCaseGlobale) +{ + let lesPersonnes = idCaseGlobale.closest("details").querySelectorAll("div.personne"); + cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes); +} + /** * idem dans le cas des versements des personnes - * @param {HTMLInputElement} idCaseGlobale id de la case globale + * @param {HTMLInputElement} idCaseGlobale id case à cocher d'une personne */ function cocherDecocherToutesLesPersonnes(idCaseGlobale) { - let lesPersonnes = document.querySelectorAll("h4.personne"); + let lesPersonnes = document.querySelectorAll("div.personne"); cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes); changerMessage(idCaseGlobale.nextElementSibling, idCaseGlobale); } @@ -49,7 +60,7 @@ function cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes) } /** - * Fonction appelée quand on (dé)coche la case globale d'une personne + * 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 et l'afficher * @param {HTMLInputElement} idCase id de la case qui a été cochée @@ -63,10 +74,8 @@ function cocherDecocherPersonne(idCase, idTotal) for (let i = 0; i < listeCases.length; ++i) { listeCases[i].checked = idCase.checked; + cocherDecocherVersement(listeCases[i], idTotal); } - // calculer et afficher le total - let listeMontants = fieldset.querySelectorAll("span.montant"); - calculerTotal(listeCases, listeMontants, idTotal); } /** diff --git a/www/admin/style.css b/www/admin/style.css index 7253822..fe146a1 100644 --- a/www/admin/style.css +++ b/www/admin/style.css @@ -2,7 +2,9 @@ div.impair { background: rgba(var(--gSecondColor), 0.15); } -fieldset { +fieldset.versements +{ + margin-left : 4em; -webkit-border-radius:8px; border-radius:8px; } @@ -23,7 +25,6 @@ span.total } summary.activite { - background: rgba(var(--gSecondColor), 0.5); margin-bottom : 0.5em; } summary.personne @@ -32,11 +33,19 @@ summary.personne padding-top : 0; padding-bottom : 0; } -h3.personne, h4.personne +div.personne, div.activite { font-weight : normal; background: rgba(var(--gSecondColor), 0.25); } +h3.activite +{ + display : inline; +} +p.activite +{ + margin-left : 2.5em; +} #signature { padding : 1em 0.5em 0 0.5em; From 556a75d1f8e25b05431608756fcd9dcaab2e340b Mon Sep 17 00:00:00 2001 From: engel <> Date: Thu, 5 May 2022 07:58:55 +0000 Subject: [PATCH 08/20] =?UTF-8?q?modifications=20cosm=C3=A9tiques=20onglet?= =?UTF-8?q?=20config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FossilOrigin-Name: a793835de1eacfb9d0e12ab06772a669ebc5fc22545375444bd4ab81f2b645a4 --- templates/config.tpl | 9 ++++---- www/admin/style.css | 49 ++++++++++++++++++++++++++++++++++++-------- 2 files changed, 45 insertions(+), 13 deletions(-) diff --git a/templates/config.tpl b/templates/config.tpl index f7433f1..7c0fd68 100644 --- a/templates/config.tpl +++ b/templates/config.tpl @@ -92,10 +92,11 @@
    {foreach from=$champsNom key="nom" item="champ"} -
    - - -
    +
    +
    +
    + +
    {/foreach} diff --git a/www/admin/style.css b/www/admin/style.css index fe146a1..26db1bb 100644 --- a/www/admin/style.css +++ b/www/admin/style.css @@ -1,10 +1,11 @@ /* liste des versements */ -div.impair { - background: rgba(var(--gSecondColor), 0.15); +div.pair { + background-color: rgba(var(--gSecondColor), 0.15); } fieldset.versements { - margin-left : 4em; + margin-bottom : 0; + margin-right : 0.5em; -webkit-border-radius:8px; border-radius:8px; } @@ -33,10 +34,15 @@ summary.personne padding-top : 0; padding-bottom : 0; } -div.personne, div.activite +div.activite { font-weight : normal; - background: rgba(var(--gSecondColor), 0.25); + background-color: rgba(var(--gSecondColor), 0.4); +} +div.personne +{ + font-weight : normal; + background-color: rgba(var(--gSecondColor), 0.25); } h3.activite { @@ -52,10 +58,6 @@ p.activite max-width: 300px; max-height: 150px; } -dl.config -{ - padding : 1ex 0; -} div.explications ul { @@ -70,3 +72,32 @@ input.check_global { margin : 0.2em 0.5em; } +dl#menu +{ + min-width : 40em; + width : 50%; +} +div.versements +{ + margin-left : 4em; + display: flex; + flex-wrap: wrap; +} +/* config */ +dl.config +{ + padding : 1ex 0; +} +div.champnom +{ + display : flex; + margin-top : 0.25rem; +} +div.infos +{ + border : 1px solid rgba(var(--gMainColor)); + border-radius : 0.25rem; + padding : 0.4rem; + margin-left : 1em; + width : 20em; +} From 4958b885389c69fe4d23964bd173065650006c46 Mon Sep 17 00:00:00 2001 From: engel <> Date: Thu, 5 May 2022 11:57:45 +0000 Subject: [PATCH 09/20] =?UTF-8?q?modifications=20cosm=C3=A9tiques=20onglet?= =?UTF-8?q?=20config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FossilOrigin-Name: 21f83c5e9592879d6bf6da68422ef32c7a12ca5f55444b296bb1e8d37634f43d --- templates/config.tpl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/templates/config.tpl b/templates/config.tpl index 7c0fd68..e4aa2ca 100644 --- a/templates/config.tpl +++ b/templates/config.tpl @@ -29,9 +29,9 @@ {input type="checkbox" name="articlesCGI[]" value=$key label=$article.titre} *}
    - - +
    {/foreach} @@ -43,9 +43,9 @@ {foreach from=$plugin_config->reduction key="key" item="taux"}
    - -
    {/foreach} From 68e6afed118b8320281dc4223bccff65234f3945 Mon Sep 17 00:00:00 2001 From: engel <> Date: Wed, 18 May 2022 10:29:19 +0000 Subject: [PATCH 10/20] =?UTF-8?q?int=C3=A9gration=20comptes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FossilOrigin-Name: d81e13438cbc9ed585e76b36e2950615b8da359697f2c577673c77460b59064d --- lib/Utils.php | 413 +++++++++++++++-------------- templates/index.tpl | 271 ++++++++++++------- templates/versements_activites.tpl | 24 +- templates/versements_personnes.tpl | 58 +++- www/admin/action.php | 89 +++++-- www/admin/index.php | 31 ++- www/admin/style.css | 11 +- www/admin/versements_activites.php | 53 ++-- www/admin/versements_personnes.php | 80 +----- 9 files changed, 609 insertions(+), 421 deletions(-) diff --git a/lib/Utils.php b/lib/Utils.php index 7d7dc29..d3cf3cf 100644 --- a/lib/Utils.php +++ b/lib/Utils.php @@ -8,35 +8,139 @@ use KD2\ZipWriter; class Utils { /** - * @return tarifs demandés - * @param array $tarifs + * @return informations sur les tarifs */ - public static function getTarifs($tarifs) + public static function getTarifs() { $db = DB::getInstance(); $sql = sprintf( - 'SELECT id, id_service as idActivite, label, description, amount as montant - FROM services_fees - WHERE services_fees.%s', - $db->where('id', $tarifs)); + 'SELECT + id, + id_service as idActivite, + label, + description, + amount as montant + FROM services_fees'); + return Utils::toAssoc($db->get($sql), 'id'); + } + + /** + * @return informations sur les activités + */ + public static function getActivites() + { + $db = DB::getInstance(); + $sql = sprintf( + 'SELECT + services.id, + services.label, + services.description + FROM services'); + return Utils::toAssoc($db->get($sql), 'id'); + } + + /** + * @return comptes sur lesquels des versements de membres ont été faits + * @param string $annee + * @param $op : opérateur de combinaison des comptes + * @param array $comptes + */ + public static function getComptes($annee, $op, $comptes) + { + $db = DB::getInstance(); + $sql = sprintf( + 'SELECT + acc_accounts.id, + acc_accounts.code as codeCompte, + acc_accounts.label as nomCompte + FROM acc_transactions_users + INNER JOIN membres + ON acc_transactions_users.id_user = membres.id + INNER JOIN acc_transactions + ON acc_transactions_users.id_transaction = acc_transactions.id + INNER JOIN acc_transactions_lines + ON acc_transactions_lines.id_transaction = acc_transactions.id + INNER JOIN acc_accounts + ON acc_transactions_lines.id_account = acc_accounts.id + WHERE + (strftime(%s, acc_transactions.date) = "%d" + AND + acc_accounts.%s + ) + GROUP by acc_accounts.id + ORDER by acc_accounts.id', + '"%Y"', + $annee, + $db->where('code', $op, $comptes) + ); + return Utils::toAssoc($db->get($sql), 'id'); + } + + /** + * @return tarifs des activités et comptes ayant des versements de + * membres dans l'année + * @param string $annee + * @param $op : opérateur de combinaison des comptes + * @param array $comptes + */ + public static function getTarifsComptes($annee, $op, $comptes) + { + $db = DB::getInstance(); + $sql = sprintf( + ' + SELECT + services_users.id_fee as idTarif, + acc_accounts.id as idCompte, + acc_accounts.code as codeCompte + FROM acc_transactions_users + INNER JOIN acc_transactions + ON acc_transactions_users.id_transaction = acc_transactions.id + INNER JOIN services_users + ON acc_transactions_users.id_service_user = services_users.id + INNER JOIN services_fees + ON services_users.id_fee = services_fees.id + INNER JOIN acc_transactions_lines + ON acc_transactions_lines.id_transaction = acc_transactions.id + INNER JOIN acc_accounts + ON acc_transactions_lines.id_account = acc_accounts.id + WHERE + (strftime(%s, acc_transactions.date) = "%d" + AND + acc_accounts.%s + ) + GROUP BY services_fees.id,acc_accounts.id + ', + '"%Y"', + $annee, + $db->where('code', $op, $comptes) + ); return $db->get($sql); } /** - * @return activités correspondant aux tarifs demandés - * @param array $tarifs + * faire un tableau associatif avec le résultat d'une requête */ - public static function getActivites($tarifs) + static function toAssoc($array, $nomCle) { - $db = DB::getInstance(); - $sql = sprintf( - 'SELECT services.id, services.label, services.description - FROM services - LEFT JOIN services_fees ON services_fees.id_service = services.id - WHERE services_fees.%s - GROUP BY services.id', - $db->where('id', $tarifs)); - return $db->get($sql); + $assoc = array(); + foreach ($array as $elem) + { + $ro = new \ReflectionObject($elem); + $proprietes = $ro->getProperties(); + $obj = new \stdClass(); + foreach ($proprietes as $p) + { + $pname = $p->getName(); + if ($pname == $nomCle) { + $key = $p->getValue($elem); + } + else { + $obj->$pname = $p->getValue($elem); + } + } + $assoc[$key] = $obj; + } + return $assoc; } /** @@ -44,88 +148,60 @@ class Utils * @param $annee * @param array $champsNom : liste non vide des champs de nom/prénom */ - public static function getVersementsPersonnes($annee, $champsNom) + public static function getVersementsPersonnes($annee, $op, $comptes, $champsNom) { $db = DB::getInstance(); $tri = Utils::combinerTri($champsNom); $sql = sprintf( 'SELECT membres.id as idUser, + acc_accounts.id as idCompte, + acc_accounts.code as codeCompte, acc_transactions_lines.credit as versement, acc_transactions.date FROM acc_transactions_users - INNER JOIN membres on acc_transactions_users.id_user = membres.id - INNER JOIN acc_transactions on acc_transactions_users.id_transaction = acc_transactions.id - INNER JOIN services_users on acc_transactions_users.id_service_user = services_users.id - INNER JOIN acc_transactions_lines on acc_transactions_lines.id_transaction = acc_transactions.id + INNER JOIN membres + ON acc_transactions_users.id_user = membres.id + INNER JOIN acc_transactions + ON acc_transactions_users.id_transaction = acc_transactions.id + INNER JOIN acc_transactions_lines + ON acc_transactions_lines.id_transaction = acc_transactions.id + INNER JOIN acc_accounts + ON acc_transactions_lines.id_account = acc_accounts.id WHERE (strftime(%s, acc_transactions.date) = "%d" AND - acc_transactions_lines.credit > 0) - ORDER by %s, acc_transactions.date', + acc_accounts.%s + ) + ORDER by %s, acc_accounts.id, acc_transactions.date', '"%Y"', $annee, + $db->where('code', $op, $comptes), $tri ); return $db->get($sql); } /** - * @return versements correspondants à l'année et aux tarifs donnés - * triés par tarif, nom, date - * @param $annee - * @param array $tarifs + * @return versements correspondants à : + * @param $annee : année fiscale + * @param $tarifs : tarifs sélectionnés + * @param array $comptes : comptes associés aux tarifs * @param array $champsNom : liste non vide des champs de nom/prénom + * @remarks tri par tarif, nom, compte, date */ - public static function getVersementsTarifs($annee, $tarifs, $champsNom) - { - $db = DB::getInstance(); - $tri = Utils::combinerTri($champsNom); - $sql = sprintf( - 'SELECT - services_fees.id as idTarif, - membres.id as idUser, - acc_transactions_lines.credit as versement, - acc_transactions.date - FROM acc_transactions_users - INNER JOIN membres on acc_transactions_users.id_user = membres.id - INNER JOIN acc_transactions on acc_transactions_users.id_transaction = acc_transactions.id - INNER JOIN services_users on acc_transactions_users.id_service_user = services_users.id - INNER JOIN services_fees on services_users.id_fee = services_fees.id - INNER JOIN acc_transactions_lines on acc_transactions_lines.id_transaction = acc_transactions.id - WHERE - (strftime(%s, acc_transactions.date) = "%d" - AND - services_fees.%s - AND - acc_transactions_lines.credit > 0) - ORDER by services_fees.id, %s, acc_transactions.date', - '"%Y"', - $annee, - $db->where('id', $tarifs), - $tri - ); - return $db->get($sql); - } - - /** - * @return versements correspondants à l'année et aux comptes donnés - * @param $annee - * @param $op : opérateur de combinaison des comptes - * @param array $comptes - * @param array $champsNom : liste non vide des champs de nom/prénom - * exemples : - * op = 'in', comptes = ['706', '7780', '756'] - * op = 'like', comptes = '7%' - */ - public static function getVersementsComptes($annee, $op, $comptes, $champsNom) + public static function getVersementsTarifsComptes($annee, + $tarifs, + $comptes, + $champsNom) { $db = DB::getInstance(); $tri = Utils::combinerTri($champsNom); $sql = sprintf( 'SELECT services_fees.id as idTarif, - acc_accounts.code as compte, + acc_accounts.id as idCompte, + acc_accounts.code as codeCompte, membres.id as idUser, acc_transactions_lines.credit as versement, acc_transactions.date @@ -145,13 +221,62 @@ class Utils WHERE (strftime(%s, acc_transactions.date) = "%d" AND - acc_accounts.%s + services_fees.%s AND - acc_transactions_lines.credit > 0) - ORDER by %s, acc_transactions.date', + acc_accounts.%s + ) + ORDER by services_fees.id, %s, acc_accounts.id, acc_transactions.date', '"%Y"', $annee, - $db->where('code', $op, $comptes), + $db->where('id', 'in', $tarifs), + $db->where('id', 'in', $comptes), + $tri + ); + return $db->get($sql); + } + + /** + * @return versements correspondants à : + * @param $annee année fiscale + * @param $comptesIsoles comptes NON associés à un tarif + * @param array $champsNom : liste non vide des champs de nom/prénom + * @remarks tri par nom, compte, date + */ + public static function getVersementsComptes($annee, + $comptesIsoles, + $champsNom) + { + $db = DB::getInstance(); + $tri = Utils::combinerTri($champsNom); + $sql = sprintf( + ' + SELECT + 0 as idTarif, + acc_accounts.id as idCompte, + acc_accounts.code as codeCompte, + membres.id as idUser, + acc_transactions_lines.credit as versement, + acc_transactions.date + FROM acc_transactions_users + INNER JOIN membres + ON acc_transactions_users.id_user = membres.id + INNER JOIN acc_transactions + ON acc_transactions_users.id_transaction = acc_transactions.id + INNER JOIN acc_transactions_lines + ON acc_transactions_lines.id_transaction = acc_transactions.id + INNER JOIN acc_accounts + ON acc_transactions_lines.id_account = acc_accounts.id + WHERE + (strftime(%s, acc_transactions.date) = "%d" + AND + acc_accounts.%s + ) + + ORDER by %s, acc_accounts.id, acc_transactions.date + ', + '"%Y"', + $annee, + $db->where('id', 'in', $comptesIsoles), $tri ); return $db->get($sql); @@ -184,8 +309,6 @@ class Utils ON acc_transactions_lines.id_transaction = acc_transactions.id WHERE ( strftime(%s, acc_transactions.date) = "%d" - AND - acc_transactions_lines.credit > 0 AND acc_transactions_users.id_transaction = acc_transactions.id AND @@ -199,7 +322,6 @@ class Utils '"%Y"', $annee ); - // error_log("getDonateurs = " . print_r($sql, true)); $donateurs = array(); foreach (DB::getInstance()->iterate($sql) as $personne) { @@ -239,121 +361,6 @@ class Utils return $tri; } - /** OBSOLETE - * Versements totaux par personne pour une année donnée - * @param année - * @param array $champsNom : liste non vide des champs de nom/prénom - */ - public static function getVersementsTotaux($annee, $champsNom) - { - $tri = Utils::combinerTri($champsNom); - $sql = sprintf( - 'SELECT - membres.id as idUser, - sum(acc_transactions_lines.credit) AS versement - FROM - acc_transactions_users, - membres, - acc_transactions - INNER JOIN acc_transactions_lines - ON acc_transactions_lines.id_transaction = acc_transactions.id - WHERE ( - strftime(%s, acc_transactions.date) = "%d" - AND - acc_transactions_lines.credit > 0 - AND - acc_transactions_users.id_transaction = acc_transactions.id - AND - acc_transactions_users.id_user = membres.id - ) - GROUP by acc_transactions_users.id_user - ORDER by %s COLLATE U_NOCASE', - '"%Y"', - $annee, - $tri); - return DB::getInstance()->get($sql); - } - - public static function getDonateurs_old($annee, $champsNom) : array - { - // concaténer les champs nom/prénoms pour la sélection - $nom = 'trim(' . Utils::combinerChamps($champsNom) . ') as nom,'; - // et pour le tri - $tri = Utils::combinerTri($champsNom); - $sql = - "SELECT - membres.id as idUser, - " . - $nom . " - membres.adresse as adresse, - membres.code_postal as codePostal, - membres.ville as ville - FROM - acc_transactions_users, - membres, - acc_transactions - INNER JOIN acc_transactions_lines - ON acc_transactions_lines.id_transaction = acc_transactions.id - WHERE ( - strftime('%Y', acc_transactions.date) = ? - AND - acc_transactions_lines.credit > 0 - AND - acc_transactions_users.id_transaction = acc_transactions.id - AND - acc_transactions_users.id_user = membres.id - ) - GROUP by membres.id - ORDER by " . $tri . " COLLATE U_NOCASE - "; - $donateurs = array(); - foreach (DB::getInstance()->iterate($sql, $annee) as $personne) - { - $donateurs[$personne->idUser] = new Personne($personne->idUser, - $personne->nom, - $personne->adresse, - $personne->codePostal, - $personne->ville); - } - return $donateurs; - } - - public static function getLignesReduction($lesTaux) - { - foreach ($lesTaux as $elem) - { - $lignes[$elem->taux] = $elem->remarque; - } - return $lignes; - } - - public static function getLigneReduction($taux) - { - return $_SESSION['ligneReduction'][$taux]; - } - - /** - * @return liste de toutes les activités, tarifs et comptes associés - */ - public static function getActivitesTarifsEtComptes() - { - return DB::getInstance()->get( - "SELECT - services.id as idActivite, - services.label as titreActivite, - services.description as descActivite, - services_fees.id as idTarif, - services_fees.label as titreTarif, - services_fees.description as descTarif, - acc_accounts.code as numeroCpt, - acc_accounts.label as nomCpt - FROM services - LEFT JOIN services_fees ON services_fees.id_service = services.id - LEFT JOIN acc_accounts ON services_fees.id_account = acc_accounts.id - ORDER BY services.label" - ); - } - /** * @return liste des années fiscales */ @@ -371,11 +378,25 @@ class Utils return $anneesFiscales; } + public static function getLignesReduction($lesTaux) + { + foreach ($lesTaux as $elem) + { + $lignes[$elem->taux] = $elem->remarque; + } + return $lignes; + } + + public static function getLigneReduction($taux) + { + return $_SESSION['ligneReduction'][$taux]; + } + /** * récupérer dans la config du plugin les champs des membres * utilisés pour le nom et le prénom ; ajouter/supprimer les * modifications par rapport à la config garradin - * @return tableau des champs : clé = nom, valeur = { titre, position } + * @return array tableau des champs : clé = nom, valeur = { titre, position } */ public static function getChampsNom($config, $plugin) : array { diff --git a/templates/index.tpl b/templates/index.tpl index 4292f15..abd3ba6 100644 --- a/templates/index.tpl +++ b/templates/index.tpl @@ -1,67 +1,55 @@ {include file="%s/templates/_nav.tpl"|args:$plugin_root current_nav="index"} -
    -

    Choisir une méthode de génération des reçus

    +

    Sélectionner les versements pour les reçus

    {* Choisir une des méthodes *} -
    +
    - {* Toutes les personnes *} -
    - - - - - - - - {foreach from=$lesComptes key="idcpt" item="compte"} - - - - {/foreach} - -
    N° et CompteTaux de réduction
    - {if $nbTarifs == 1} - {input - type="checkbox" - name="comptes[]" - value=$idcpt - label="%s : %s"|args:$compte.codeCompte,$compte.nomCompte - checked="checked" - } - {else} - {input - type="checkbox" - name="comptes[]" - value=$idcpt - label="%s : %s"|args:$compte.codeCompte,$compte.nomCompte - } - {/if} - - {foreach from=$plugin_config->reduction item="reduc"} - {if $reduc->valeur == 1} - - 1}disabled{/if} {if $nbTaux == 1}checked{/if} /> - - - {/if} - {/foreach} -
    - {/if} -
    - -

    - {csrf_field key="generer_recus_comptes"} - {button type="submit" name="generer_comptes" label="Poursuivre" shape="right" class="main" onclick="return verifierCases('menu_comptes');" } -

    - -*} - {* Activités et tarifs *} + {* Activités, tarifs et comptes *}