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

View File

@ -3,27 +3,33 @@
<h2>Versements par personne</h2>
<form method="post" id="versements_personnes" action="generer_personnes.php">
<fieldset class="versements" id="versements_global">
<input type="checkbox" class="check_global" id="check_global" onclick="cocherDecocherToutesLesPersonnes(this.form, check_global)" />
<fieldset class="noprint">
{* <div class="noprint"> *}
<input type="checkbox" class="check_global" id="check_global"
onclick="cocherDecocherToutesLesPersonnes(check_global)" />
<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 *}
{foreach from=$lesVersements key="i" item="versement"}
{if $i == 0}
{* 1ère personne *}
<?php
$personneCourante = $versement->idUser;
$personneCourante = $versement->idUser;
?>
{afficher_debut_personne versement=$versement}
{afficher_versement versement=$versement rang=$i}
{elseif $versement.idUser != $personneCourante}
{* changement de personne *}
</fieldset>
</details>
<?php
$personneCourante = $versement->idUser;
$personneCourante = $versement->idUser;
?>
{afficher_debut_personne versement=$versement}
{afficher_versement versement=$versement rang=$i}
@ -33,6 +39,7 @@
{/if}
{/foreach} {* Itération sur les personnes *}
</fieldset>
</details>
<input type="submit" value="Générer les reçus" onclick="return verifierChoix(this.form)">
</form>
@ -40,5 +47,21 @@
{* scripts pour cases à cocher *}
<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 -->
{include file="admin/_foot.tpl"}
{include file="admin/_foot.tpl"}

View File

@ -5,14 +5,12 @@
*/
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>
var lesDetails = formulaire.querySelectorAll("details");
var lesDetails = document.querySelectorAll("details.activite");
for (var i = 0; i < lesDetails.length; ++i)
{
// itérer sur les personnes
var lesH3 = lesDetails[i].querySelectorAll("h3.personne");
var lesH3 = lesDetails[i].querySelectorAll("h4.personne");
cocherDecocherLesPersonnes(idCaseGlobale, lesH3);
}
// changer le message
@ -22,9 +20,9 @@ function cocherDecocherTout(idCaseGlobale)
/**
* 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);
changerMessage(idCaseGlobale.nextElementSibling, idCaseGlobale);
}
@ -36,11 +34,11 @@ function cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes)
// trouver l'élément total de la personne
var idTotal = lesPersonnes[j].querySelector("span");
// puis la case à cocher
var fieldset = lesPersonnes[j].nextElementSibling;
var fieldset = lesPersonnes[j].closest("details").querySelector("fieldset");
var idCase = fieldset.querySelector("input");
idCase.checked = idCaseGlobale.checked;
// 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 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
var fieldset = idCase.closest("fieldset");
// chercher le fieldset des versements
var fieldset = idCase.closest("details").querySelector("fieldset");
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;
}
@ -65,13 +64,12 @@ function cocherDecocherPersonne(idCase, idTotal)
var listeMontants = fieldset.querySelectorAll("span.montant");
calculerTotal(listeCases, listeMontants, idTotal);
// changer le message
changerMessage(idCase.nextElementSibling, idCase);
if (changerMessage) { changerMessage(idCase.nextElementSibling, idCase); }
}
/**
* 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 l'élément afficher le total

View File

@ -25,8 +25,8 @@ span.montant {
summary.activite {
background: rgba(var(--gMainColor), 0.25);
}
h3.personne {
background: rgba(var(--gSecondColor), 0.35);
h3.personne, h4.personne {
background: rgba(var(--gSecondColor), 0.15);
}
#signature
{
@ -48,3 +48,7 @@ div.actions
{
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
$confNoms = (array) $plugin->getConfig('nomChamps');
$confNoms = Utils::getChampsNom($config, $plugin);
uasort($confNoms, function ($a, $b)
{
return $a->position - $b->position;
@ -71,7 +71,7 @@ $tpl->register_function('afficher_debut_tarif', function ($params)
$idActivite = $tarif->idActivite;
$activite = $_SESSION['lesActivites'][$idActivite];
$out = '<details open="open">
$out = '<details class="activite" open="open">
<summary class="activite">';
$out .= sprintf('
<h3>Activité « %s »</h3>', $activite->label);
@ -91,22 +91,24 @@ $tpl->register_function('afficher_debut_tarif', function ($params)
return $out;
});
// afficher les informations d'une personne
// Afficher les informations d'une personne
$tpl->register_function('afficher_debut_personne', function ($params)
{
$versement = $params['versement'];
$idUser = $versement->idUser;
$personne = $_SESSION['membresDonateurs'][$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,
$idVersement);
$out .= '</summary>';
$out .= sprintf('
<fieldset class="versements" id="versements_%s">',
$idVersement);
$out .= sprintf('
<input type="checkbox" class="check_%s" id="check_%s"',
$idVersement,
<input type="checkbox" id="check_%s"',
$idVersement);
$out .= sprintf(' onclick="cocherDecocherPersonne(check_%s, total_%s)" />',
$idVersement,
@ -128,17 +130,28 @@ $tpl->register_function('afficher_versement', function ($params)
$out = '<div class="';
$out .= ($rang%2==0) ? 'pair">' : 'impair">';
$out .= sprintf('
<input type="checkbox" class="check_%s" id="check_%s_%s"
name="selected[]" value="%s"
onclick="cocherDecocherVersement(check_%s_%s, total_%s)" />
<label for="check_%s_%s"></label>
<span class="montant">%.2f</span>
<input type="checkbox"
class="check_%s"
id="check_%s_%s"
name="selected[]"
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>
</div>',
$idVersement, $idVersement,
$rang, $rang,
$idVersement, $rang, $idVersement, $idVersement, $rang,
$versement->versement/100,
date_format(date_create($versement->date),"d/m/Y"));
return $out;
});

View File

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