harmonisation présentation personnes-activités

FossilOrigin-Name: 53550421b288837f1c2120259c638952fdf2853441a1315359d7af51c57c80d8
This commit is contained in:
engel 2022-03-29 12:50:25 +00:00
parent 2fddc192f9
commit 328789b923
6 changed files with 137 additions and 71 deletions

View File

@ -3,17 +3,18 @@
<h2>Versements par activité et tarif</h2> <h2>Versements par activité et tarif</h2>
<div class="year-header noprint"> <fieldset class="noprint">
<button type="button" data-icon="↓" class="icn-btn" id="open_details">Déplier toutes les activités</button> {* <div class="noprint"> *}
<button type="button" data-icon="↑" class="icn-btn" id="close_details">Replier toutes les activités</button>
</div>
<form method="post" id="versements_activites" action="generer_activites.php">
<fieldset class="versements" id="versements_global">
<input type="checkbox" class="check_global" id="check_global" onclick="cocherDecocherTout(check_global)" /> <input type="checkbox" class="check_global" id="check_global" onclick="cocherDecocherTout(check_global)" />
<label for="check_global">Cliquer pour cocher toutes les lignes</label> <label for="check_global">Cliquer pour cocher toutes les lignes</label>
</fieldset> <button type="button" data-icon="↑" class="icn-btn" id="close_details_activite">Replier toutes les activités</button>
<button type="button" data-icon="↓" class="icn-btn" id="open_details_activite">Déplier toutes les activités</button>
<button type="button" data-icon="↑" class="icn-btn" id="close_details_personne">Replier toutes les personnes</button>
<button type="button" data-icon="↓" class="icn-btn" id="open_details_personne">Déplier toutes les personnes</button>
{* </div> *}
</fieldset>
<form method="post" id="versements_activites" action="generer_activites.php">
{* Itération sur les versements *} {* Itération sur les versements *}
{foreach from=$lesVersements key="i" item="versement"} {foreach from=$lesVersements key="i" item="versement"}
@ -31,7 +32,8 @@
{if $versement.idTarif != $tarifCourant} {if $versement.idTarif != $tarifCourant}
{* changement de tarif *} {* changement de tarif *}
</fieldset> {* fin versements d'une personne *} </fieldset> {* fin versements d'une personne *}
</details> </details> {* fin versements d'une personne *}
</details> {* fin tarif *}
<?php <?php
$tarifCourant = $versement->idTarif; $tarifCourant = $versement->idTarif;
$personneCourante = $versement->idUser; $personneCourante = $versement->idUser;
@ -42,6 +44,7 @@
{elseif $versement.idUser != $personneCourante} {elseif $versement.idUser != $personneCourante}
{* changement de personne *} {* changement de personne *}
</fieldset> </fieldset>
</details>
<?php <?php
$personneCourante = $versement->idUser; $personneCourante = $versement->idUser;
?> ?>
@ -53,8 +56,9 @@
{/if} {/if}
{/if} {/if}
{/foreach} {* Itération sur les versements *} {/foreach} {* Itération sur les versements *}
</fieldset> </fieldset> {* fin versements d'une personne *}
</details> </details> {* fin versements d'une personne *}
</details> {* fin tarif *}
<input type="submit" value="Générer les reçus" onclick="return verifierChoix(this.form)"> <input type="submit" value="Générer les reçus" onclick="return verifierChoix(this.form)">
</form> </form>
@ -64,14 +68,25 @@
{literal} {literal}
<script type="text/javascript"> <script type="text/javascript">
// ouvrir/fermer les détails // ouvrir/fermer les détails des activités
document.querySelector('#open_details').onclick = () => { document.querySelector('#open_details_activite').onclick = () => {
document.querySelectorAll('details').forEach((e) => { document.querySelectorAll('details.activite').forEach((e) => {
e.setAttribute('open', 'open'); e.setAttribute('open', 'open');
}); });
}; };
document.querySelector('#close_details').onclick = () => { document.querySelector('#close_details_activite').onclick = () => {
document.querySelectorAll('details').forEach((e) => { document.querySelectorAll('details.activite').forEach((e) => {
e.removeAttribute('open');
});
};
// ouvrir/fermer les détails des personnes
document.querySelector('#open_details_personne').onclick = () => {
document.querySelectorAll('details.personne').forEach((e) => {
e.setAttribute('open', 'open');
});
};
document.querySelector('#close_details_personne').onclick = () => {
document.querySelectorAll('details.personne').forEach((e) => {
e.removeAttribute('open'); e.removeAttribute('open');
}); });
}; };

View File

@ -3,27 +3,33 @@
<h2>Versements par personne</h2> <h2>Versements par personne</h2>
<form method="post" id="versements_personnes" action="generer_personnes.php"> <fieldset class="noprint">
{* <div class="noprint"> *}
<fieldset class="versements" id="versements_global"> <input type="checkbox" class="check_global" id="check_global"
<input type="checkbox" class="check_global" id="check_global" onclick="cocherDecocherToutesLesPersonnes(this.form, check_global)" /> onclick="cocherDecocherToutesLesPersonnes(check_global)" />
<label for="check_global">Cliquer pour cocher toutes les lignes</label> <label for="check_global">Cliquer pour cocher toutes les lignes</label>
</fieldset> <button type="button" data-icon="↑" class="icn-btn" id="close_details_personne">Replier toutes les personnes</button>
<button type="button" data-icon="↓" class="icn-btn" id="open_details_personne">Déplier toutes les personnes</button>
{* </div> *}
</fieldset>
<form method="post" id="versements_personnes" action="generer_personnes.php">
{* Itération sur les personnes *} {* Itération sur les personnes *}
{foreach from=$lesVersements key="i" item="versement"} {foreach from=$lesVersements key="i" item="versement"}
{if $i == 0} {if $i == 0}
{* 1ère personne *} {* 1ère personne *}
<?php <?php
$personneCourante = $versement->idUser; $personneCourante = $versement->idUser;
?> ?>
{afficher_debut_personne versement=$versement} {afficher_debut_personne versement=$versement}
{afficher_versement versement=$versement rang=$i} {afficher_versement versement=$versement rang=$i}
{elseif $versement.idUser != $personneCourante} {elseif $versement.idUser != $personneCourante}
{* changement de personne *} {* changement de personne *}
</fieldset> </fieldset>
</details>
<?php <?php
$personneCourante = $versement->idUser; $personneCourante = $versement->idUser;
?> ?>
{afficher_debut_personne versement=$versement} {afficher_debut_personne versement=$versement}
{afficher_versement versement=$versement rang=$i} {afficher_versement versement=$versement rang=$i}
@ -33,6 +39,7 @@
{/if} {/if}
{/foreach} {* Itération sur les personnes *} {/foreach} {* Itération sur les personnes *}
</fieldset> </fieldset>
</details>
<input type="submit" value="Générer les reçus" onclick="return verifierChoix(this.form)"> <input type="submit" value="Générer les reçus" onclick="return verifierChoix(this.form)">
</form> </form>
@ -40,5 +47,21 @@
{* scripts pour cases à cocher *} {* scripts pour cases à cocher *}
<script src="script.js"></script> <script src="script.js"></script>
{literal}
<script type="text/javascript">
// ouvrir/fermer les détails
document.querySelector('#open_details_personne').onclick = () => {
document.querySelectorAll('details.personne').forEach((e) => {
e.setAttribute('open', 'open');
});
};
document.querySelector('#close_details_personne').onclick = () => {
document.querySelectorAll('details.personne').forEach((e) => {
e.removeAttribute('open');
});
};
</script>
{/literal}
<!-- footer --> <!-- footer -->
{include file="admin/_foot.tpl"} {include file="admin/_foot.tpl"}

View File

@ -5,14 +5,12 @@
*/ */
function cocherDecocherTout(idCaseGlobale) function cocherDecocherTout(idCaseGlobale)
{ {
// chercher le formulaire englobant
var formulaire = idCaseGlobale.closest("form");
// itérer sur la liste des éléments détails : 1 par couple <activité, tarif> // itérer sur la liste des éléments détails : 1 par couple <activité, tarif>
var lesDetails = formulaire.querySelectorAll("details"); var lesDetails = document.querySelectorAll("details.activite");
for (var i = 0; i < lesDetails.length; ++i) for (var i = 0; i < lesDetails.length; ++i)
{ {
// itérer sur les personnes // itérer sur les personnes
var lesH3 = lesDetails[i].querySelectorAll("h3.personne"); var lesH3 = lesDetails[i].querySelectorAll("h4.personne");
cocherDecocherLesPersonnes(idCaseGlobale, lesH3); cocherDecocherLesPersonnes(idCaseGlobale, lesH3);
} }
// changer le message // changer le message
@ -22,9 +20,9 @@ function cocherDecocherTout(idCaseGlobale)
/** /**
* idem dans le cas des versements des personnes * idem dans le cas des versements des personnes
*/ */
function cocherDecocherToutesLesPersonnes(formulaire, idCaseGlobale) function cocherDecocherToutesLesPersonnes(idCaseGlobale)
{ {
var lesH3 = formulaire.querySelectorAll("h3.personne"); var lesH3 = document.querySelectorAll("h4.personne");
cocherDecocherLesPersonnes(idCaseGlobale, lesH3); cocherDecocherLesPersonnes(idCaseGlobale, lesH3);
changerMessage(idCaseGlobale.nextElementSibling, idCaseGlobale); changerMessage(idCaseGlobale.nextElementSibling, idCaseGlobale);
} }
@ -36,11 +34,11 @@ function cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes)
// trouver l'élément total de la personne // trouver l'élément total de la personne
var idTotal = lesPersonnes[j].querySelector("span"); var idTotal = lesPersonnes[j].querySelector("span");
// puis la case à cocher // puis la case à cocher
var fieldset = lesPersonnes[j].nextElementSibling; var fieldset = lesPersonnes[j].closest("details").querySelector("fieldset");
var idCase = fieldset.querySelector("input"); var idCase = fieldset.querySelector("input");
idCase.checked = idCaseGlobale.checked; idCase.checked = idCaseGlobale.checked;
// puis traiter toutes les cases de la personne // puis traiter toutes les cases de la personne
cocherDecocherPersonne(idCase, idTotal); cocherDecocherPersonne(idCase, idTotal, false);
} }
} }
@ -51,13 +49,14 @@ function cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes)
* *
* @param id de la case qui a été cochée * @param id de la case qui a été cochée
* @param id de l'élément afficher le total * @param id de l'élément afficher le total
* @param changerMessage : vrai, s'il faut changer le message de la personne
*/ */
function cocherDecocherPersonne(idCase, idTotal) function cocherDecocherPersonne(idCase, idTotal, changerMessage = true)
{ {
// chercher le fieldset englobant // chercher le fieldset des versements
var fieldset = idCase.closest("fieldset"); var fieldset = idCase.closest("details").querySelector("fieldset");
var listeCases = fieldset.querySelectorAll("input[type=checkbox]"); var listeCases = fieldset.querySelectorAll("input[type=checkbox]");
for (var i = 1; i < listeCases.length; ++i) for (var i = 0; i < listeCases.length; ++i)
{ {
listeCases[i].checked = idCase.checked; listeCases[i].checked = idCase.checked;
} }
@ -65,13 +64,12 @@ function cocherDecocherPersonne(idCase, idTotal)
var listeMontants = fieldset.querySelectorAll("span.montant"); var listeMontants = fieldset.querySelectorAll("span.montant");
calculerTotal(listeCases, listeMontants, idTotal); calculerTotal(listeCases, listeMontants, idTotal);
// changer le message // changer le message
changerMessage(idCase.nextElementSibling, idCase); if (changerMessage) { changerMessage(idCase.nextElementSibling, idCase); }
} }
/** /**
* Fonction appelée quand on ()coche la case d'un versement * Fonction appelée quand on ()coche la case d'un versement
* - ()sélectionner cette case (?) * Faire le total des cases cochées et l'afficher
* - faire le total des cases cochées et l'afficher
* *
* @param id de la case qui a été cochée * @param id de la case qui a été cochée
* @param id de l'élément afficher le total * @param id de l'élément afficher le total

View File

@ -25,8 +25,8 @@ span.montant {
summary.activite { summary.activite {
background: rgba(var(--gMainColor), 0.25); background: rgba(var(--gMainColor), 0.25);
} }
h3.personne { h3.personne, h4.personne {
background: rgba(var(--gSecondColor), 0.35); background: rgba(var(--gSecondColor), 0.15);
} }
#signature #signature
{ {
@ -48,3 +48,7 @@ div.actions
{ {
display : inline; display : inline;
} }
input.check_global
{
margin : 0.2em 0.5em;
}

View File

@ -14,7 +14,7 @@ if (! isset($_SESSION['annee_recu']) || $_SESSION['annee_recu'] == "") {
} }
// champs pour le nom et prénom // champs pour le nom et prénom
$confNoms = (array) $plugin->getConfig('nomChamps'); $confNoms = Utils::getChampsNom($config, $plugin);
uasort($confNoms, function ($a, $b) uasort($confNoms, function ($a, $b)
{ {
return $a->position - $b->position; return $a->position - $b->position;
@ -71,7 +71,7 @@ $tpl->register_function('afficher_debut_tarif', function ($params)
$idActivite = $tarif->idActivite; $idActivite = $tarif->idActivite;
$activite = $_SESSION['lesActivites'][$idActivite]; $activite = $_SESSION['lesActivites'][$idActivite];
$out = '<details open="open"> $out = '<details class="activite" open="open">
<summary class="activite">'; <summary class="activite">';
$out .= sprintf(' $out .= sprintf('
<h3>Activité « %s »</h3>', $activite->label); <h3>Activité « %s »</h3>', $activite->label);
@ -91,22 +91,24 @@ $tpl->register_function('afficher_debut_tarif', function ($params)
return $out; return $out;
}); });
// afficher les informations d'une personne // Afficher les informations d'une personne
$tpl->register_function('afficher_debut_personne', function ($params) $tpl->register_function('afficher_debut_personne', function ($params)
{ {
$versement = $params['versement']; $versement = $params['versement'];
$idUser = $versement->idUser; $idUser = $versement->idUser;
$personne = $_SESSION['membresDonateurs'][$idUser]; $personne = $_SESSION['membresDonateurs'][$idUser];
$idVersement = $versement->idTarif . "_" . $versement->idUser; $idVersement = $versement->idTarif . "_" . $versement->idUser;
$out = sprintf('<h3 class="personne">Versements de %s : <span id="total_%s">0,00 €</span></h3>', $out = '<details class="personne" open="open">
<summary class="personne">';
$out .= sprintf('<h4 class="personne">Versements de %s : <span id="total_%s">0,00 €</span></h>',
$personne->nomPrenom, $personne->nomPrenom,
$idVersement); $idVersement);
$out .= '</summary>';
$out .= sprintf(' $out .= sprintf('
<fieldset class="versements" id="versements_%s">', <fieldset class="versements" id="versements_%s">',
$idVersement); $idVersement);
$out .= sprintf(' $out .= sprintf('
<input type="checkbox" class="check_%s" id="check_%s"', <input type="checkbox" id="check_%s"',
$idVersement,
$idVersement); $idVersement);
$out .= sprintf(' onclick="cocherDecocherPersonne(check_%s, total_%s)" />', $out .= sprintf(' onclick="cocherDecocherPersonne(check_%s, total_%s)" />',
$idVersement, $idVersement,
@ -128,17 +130,28 @@ $tpl->register_function('afficher_versement', function ($params)
$out = '<div class="'; $out = '<div class="';
$out .= ($rang%2==0) ? 'pair">' : 'impair">'; $out .= ($rang%2==0) ? 'pair">' : 'impair">';
$out .= sprintf(' $out .= sprintf('
<input type="checkbox" class="check_%s" id="check_%s_%s" <input type="checkbox"
name="selected[]" value="%s" class="check_%s"
onclick="cocherDecocherVersement(check_%s_%s, total_%s)" /> id="check_%s_%s"
<label for="check_%s_%s"></label> name="selected[]"
<span class="montant">%.2f</span> value="%s"
onclick="cocherDecocherVersement(check_%s_%s, total_%s)" />',
$idVersement,
$idVersement, $rang,
$rang,
$idVersement, $rang, $idVersement
);
$out .= sprintf('
<label for="check_%s_%s"></label>',
$idVersement, $rang
);
$out .= sprintf('
<span class="montant">%.2f</span>',
$versement->versement/100
);
$out .= sprintf('
<span>%s</span> <span>%s</span>
</div>', </div>',
$idVersement, $idVersement,
$rang, $rang,
$idVersement, $rang, $idVersement, $idVersement, $rang,
$versement->versement/100,
date_format(date_create($versement->date),"d/m/Y")); date_format(date_create($versement->date),"d/m/Y"));
return $out; return $out;
}); });

View File

@ -13,7 +13,7 @@ if (! isset($_SESSION['annee_recu']) || $_SESSION['annee_recu'] == "") {
$_SESSION['taux_reduction'] = $_POST['taux_reduction']; $_SESSION['taux_reduction'] = $_POST['taux_reduction'];
// champs pour le nom et prénom // champs pour le nom et prénom
$confNoms = (array) $plugin->getConfig('nomChamps'); $confNoms = Utils::getChampsNom($config, $plugin);
uasort($confNoms, function ($a, $b) uasort($confNoms, function ($a, $b)
{ {
return $a->position - $b->position; return $a->position - $b->position;
@ -34,22 +34,24 @@ $_SESSION['membresDonateurs'] = Utils::getDonateurs($_SESSION['annee_recu'],
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
// fonctions pour l'affichage // fonctions pour l'affichage
// afficher les informations d'une personne // Afficher les informations d'une personne
$tpl->register_function('afficher_debut_personne', function ($params) $tpl->register_function('afficher_debut_personne', function ($params)
{ {
$versement = $params['versement']; $versement = $params['versement'];
$idUser = $versement->idUser; $idUser = $versement->idUser;
$personne = $_SESSION['membresDonateurs'][$idUser]; $personne = $_SESSION['membresDonateurs'][$idUser];
$idVersement = $versement->idUser; $idVersement = $versement->idUser;
$out = sprintf('<h3 class="personne">Versements de %s : <span id="total_%s">0,00 €</span></h3>', $out = '<details class="personne" open="open">
<summary class="personne">';
$out .= sprintf('<h4 class="personne">Versements de %s : <span id="total_%s">0,00 €</span></h4>',
$personne->nomPrenom, $personne->nomPrenom,
$idVersement); $idVersement);
$out .= '</summary>';
$out .= sprintf(' $out .= sprintf('
<fieldset class="versements" id="versements_%s">', <fieldset class="versements" id="versements_%s">',
$idVersement); $idVersement);
$out .= sprintf(' $out .= sprintf('
<input type="checkbox" class="check_%s" id="check_%s"', <input type="checkbox" id="check_%s"',
$idVersement,
$idVersement); $idVersement);
$out .= sprintf(' onclick="cocherDecocherPersonne(check_%s, total_%s)" />', $out .= sprintf(' onclick="cocherDecocherPersonne(check_%s, total_%s)" />',
$idVersement, $idVersement,
@ -71,17 +73,28 @@ $tpl->register_function('afficher_versement', function ($params)
$out = '<div class="'; $out = '<div class="';
$out .= ($rang%2==0) ? 'pair">' : 'impair">'; $out .= ($rang%2==0) ? 'pair">' : 'impair">';
$out .= sprintf(' $out .= sprintf('
<input type="checkbox" class="check_%s" id="check_%s_%s" <input type="checkbox"
name="selected[]" value="%s" class="check_%s"
onclick="cocherDecocherVersement(check_%s_%s, total_%s)" /> id="check_%s_%s"
<label for="check_%s_%s"></label> name="selected[]"
<span class="montant">%.2f</span> value="%s"
onclick="cocherDecocherVersement(check_%s_%s, total_%s)" />',
$idVersement,
$idVersement, $rang,
$rang,
$idVersement, $rang, $idVersement
);
$out .= sprintf('
<label for="check_%s_%s"></label>',
$idVersement, $rang
);
$out .= sprintf('
<span class="montant">%.2f</span>',
$versement->versement/100
);
$out .= sprintf('
<span>%s</span> <span>%s</span>
</div>', </div>',
$idVersement, $idVersement,
$rang, $rang,
$idVersement, $rang, $idVersement, $idVersement, $rang,
$versement->versement/100,
date_format(date_create($versement->date),"d/m/Y")); date_format(date_create($versement->date),"d/m/Y"));
return $out; return $out;
}); });