ajout case tarif ; réorganisation code

FossilOrigin-Name: 80c6f13938d5f02786155717bf1ab8b89c6ade3c58bba572bf8c471b54886666
This commit is contained in:
engel 2022-05-04 11:53:12 +00:00
parent 7ca41ea6b7
commit 6165ff531e
6 changed files with 177 additions and 126 deletions

View File

@ -22,8 +22,7 @@
<label for="radio_versements_personne"> <label for="radio_versements_personne">
<div class="explications"> <div class="explications">
<h5> <h5>
Tous les versements des membres font l'objet d'un reçu, sans Tous les versements des membres font l'objet d'un reçu, quels que soient les activités, tarifs et les comptes du plan comptable
tenir compte des activités et tarifs
</h5> </h5>
<p>Choisissez cette option si vous voulez sélectionner les versements d'une, plusieurs <p>Choisissez cette option si vous voulez sélectionner les versements d'une, plusieurs
ou toutes les personnes</p> ou toutes les personnes</p>
@ -31,6 +30,24 @@
</label> </label>
</dd> </dd>
<dd class="radio-btn">
<input type="radio" id="radio_versements_personne_compte" name="choix_versements" value="personne_compte"
onclick="choixMethodeGeneration(this.form, 'personne', '.tous', '.activites');" />
<label for="radio_versements_personne_compte">
<div class="explications">
<h5>
Seuls les versements sur certains comptes du plan comptable font l'objet d'un reçu
</h5>
<p>Choisissez cette option si vous voulez sélectionner :</p>
<ul>
<li>certains comptes du plan comptable</li>
<li>certains versements de certaines personnes</li>
</ul>
</div>
</label>
</dd>
<dd class="radio-btn">
<dd class="radio-btn"> <dd class="radio-btn">
<input type="radio" id="radio_versements_activites" name="choix_versements" <input type="radio" id="radio_versements_activites" name="choix_versements"
value="activite" onclick="choixMethodeGeneration(this.form, 'activite', '.activites', '.tous');" /> value="activite" onclick="choixMethodeGeneration(this.form, 'activite', '.activites', '.tous');" />

View File

@ -6,60 +6,63 @@
<fieldset class="noprint"> <fieldset class="noprint">
<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>
<button type="button" data-icon="↑" class="icn-btn" id="close_details_activite" onclick="montrerMasquerDetails(this.id, 'details.activite', 'toutes les activités')">Replier toutes les activités</button> <button type="button" data-icon="↑" class="icn-btn" id="close_details_activite"
<button type="button" data-icon="↑" class="icn-btn" id="close_details_personne" onclick="montrerMasquerDetails(this.id, 'details.personne', 'toutes les personnes')">Replier toutes les personnes</button> onclick="montrerMasquerDetails(this.id, 'details.activite', 'toutes les activités')">Replier toutes les
<input type="submit" value="Générer les reçus" form="versements_activites" onclick="return verifierChoix(this.form)" /> activités</button>
<button type="button" data-icon="↑" class="icn-btn" id="close_details_personne"
onclick="montrerMasquerDetails(this.id, 'details.personne', 'toutes les personnes')">Replier toutes les
personnes</button>
<input type="submit" value="Générer les reçus" form="versements_activites"
onclick="return verifierChoix(this.form)" />
</fieldset> </fieldset>
<form method="post" id="versements_activites" action="generer_recus.php?type=activite"> <form method="post" id="versements_activites" action="generer_recus.php?type=activite">
{* Itération sur les versements *} {* Itération sur les versements *}
<?php $rang = 0; ?> {foreach from=$lesVersements key="rang" item="versement"}
{foreach from=$lesVersements key="num" item="versement"}
{if $rang == 0} {if $rang == 0}
{* premier versement *} {* premier versement *}
<?php <?php
$pair = true;
$tarifCourant = $versement->idTarif; $tarifCourant = $versement->idTarif;
$personneCourante = $versement->idUser; $personneCourante = $versement->idUser;
$compteCourant = $versement->compte;
?> ?>
{afficher_debut_tarif versement=$versement} {afficher_debut_tarif versement=$versement}
{afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante} {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.idTarif != $tarifCourant}
{else}
{* autre versement *}
{if $versement.idTarif != $tarifCourant}
{* changement de tarif *} {* changement de tarif *}
</fieldset> {* fin versements d'une personne *} {fin_personne}
</details> {* fin versements d'une personne *} {fin_tarif}
</details> {* fin tarif *}
<?php <?php
$rang=0; $pair = true;
$tarifCourant = $versement->idTarif; $tarifCourant = $versement->idTarif;
$personneCourante = $versement->idUser; $personneCourante = $versement->idUser;
$compteCourant = $versement->compte;
?> ?>
{afficher_debut_tarif versement=$versement} {afficher_debut_tarif versement=$versement}
{afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante} {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} {elseif $versement.idUser != $personneCourante}
{* changement de personne *} {* changement de personne *}
<?php $rang = 0; ?> {fin_personne}
</fieldset>
</details>
<?php <?php
$pair = true;
$personneCourante = $versement->idUser; $personneCourante = $versement->idUser;
$compteCourant = $versement->compte;
?> ?>
{afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante} {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.compte != $compteCourant}
{* même personne mais changement de compte *}
<?php $compteCourant = $versement->compte; ?>
<hr />
{else} {else}
{* même personne *} {* même personne, même compte *}
{afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante num=$num rang=$rang}
{/if} {/if}
{/if} {afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante rang=$rang pair=$pair}
<?php ++$rang; ?> <?php $pair = ! $pair; ?>
{/foreach} {* Itération sur les versements *} {/foreach} {* Itération sur les versements *}
</fieldset> {* fin versements d'une personne *} {fin_personne}
</details> {* fin versements d'une personne *} {fin_tarif}
</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>

View File

@ -17,33 +17,35 @@
<form method="post" id="versements_personnes" action="generer_recus.php?type=personne"> <form method="post" id="versements_personnes" action="generer_recus.php?type=personne">
{* Itération sur les personnes *} {* Itération sur les personnes *}
<?php $rang = 0; ?> {foreach from=$lesVersements key="rang" item="versement"}
{foreach from=$lesVersements key="num" item="versement"}
{if $rang == 0} {if $rang == 0}
{* 1ère personne *} {* 1ère personne *}
<?php <?php
$pair = true;
$personneCourante = $versement->idUser; $personneCourante = $versement->idUser;
$compteCourant = $versement->compte;
?> ?>
{afficher_debut_personne user=$personneCourante idVersement=$personneCourante} {afficher_debut_personne user=$personneCourante idVersement=$personneCourante}
{afficher_versement versement=$versement idVersement=$personneCourante num=$num rang=$rang}
{elseif $versement.idUser != $personneCourante} {elseif $versement.idUser != $personneCourante}
{* changement de personne *} {* changement de personne *}
<?php $rang = 0; ?> {fin_personne}
</fieldset>
</details>
<?php <?php
$pair = true;
$personneCourante = $versement->idUser; $personneCourante = $versement->idUser;
$compteCourant = $versement->compte;
?> ?>
{afficher_debut_personne user=$personneCourante idVersement=$personneCourante} {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 *}
<?php $compteCourant = $versement->compte; ?>
<hr />
{else} {else}
{* même personne *} {* même personne, même compte *}
{afficher_versement versement=$versement idVersement=$personneCourante num=$num rang=$rang}
{/if} {/if}
<?php ++$rang; ?> {afficher_versement versement=$versement idVersement=$personneCourante rang=$rang pair=$pair}
<?php $pair = ! $pair; ?>
{/foreach} {* Itération sur les personnes *} {/foreach} {* Itération sur les personnes *}
</fieldset> {fin_personne}
</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>

View File

@ -68,22 +68,31 @@ $tpl->register_function('afficher_debut_tarif', function ($params)
$idActivite = $tarif->idActivite; $idActivite = $tarif->idActivite;
$activite = $_SESSION['lesActivites'][$idActivite]; $activite = $_SESSION['lesActivites'][$idActivite];
$out = '<details class="activite" open="open"> $out = sprintf('
<summary class="activite">'; <details class="activite" open="open">
$out .= sprintf(' <summary class="activite">
<h3>Activité « %s »</h3>', $activite->label); <div class="activite">
<input type="checkbox" id="check_%1$s"
onclick="cocherDecocherTarif(check_%1$s)" />
<label for="check_%1$s">
<h3 class="activite">Activité « %2$s »</h3>',
$idTarif,
$activite->label);
if (!empty($activite->description)) { if (!empty($activite->description)) {
$out .= sprintf(' $out .= sprintf('
<h4>%s</h4>', $activite->description); <p class="activite">%s</p>', $activite->description);
} }
$out .= sprintf(' $out .= sprintf('
<h4>tarif « %s »', $tarif->label); <p class="activite">tarif « %s »', $tarif->label);
if ($tarif->montant > 0) { if ($tarif->montant > 0) {
$out .= sprintf(' montant : %.2f €', $tarif->montant/100); $out .= sprintf(' montant : %.2f €</p>', $tarif->montant/100);
} else { } else {
$out .= ' montant : libre'; $out .= ' montant : libre</p>';
} }
$out .= '</h4> $out .= '
</label>
</div>
</summary>'; </summary>';
return $out; return $out;
}); });
@ -95,25 +104,22 @@ $tpl->register_function('afficher_debut_personne', function ($params)
$idVersement = $params['idVersement']; $idVersement = $params['idVersement'];
$personne = $_SESSION['membresDonateurs'][$idUser]; $personne = $_SESSION['membresDonateurs'][$idUser];
$out = '<details class="personne" open="open"> $out = sprintf('
<details class="personne" open="open">
<summary class="personne"> <summary class="personne">
<h4 class="personne">'; <div class="personne">
$out .= sprintf(' <input type="checkbox" id="check_%1$s"
<input type="checkbox" id="check_%s"', onclick="cocherDecocherPersonne(check_%1$s, total_%1$s)" />
$idVersement); <label for="check_%1$s">
$out .= sprintf(' onclick="cocherDecocherPersonne(check_%s, total_%s)" />', %2$s : <span class="total" id="total_%1$s">0,00 </span>
</label>
</div>
</summary>
<fieldset class="versements" id="versements_%1$s">',
$idVersement, $idVersement,
$idVersement); $personne->nomPrenom
$out .= sprintf(' );
<label for="check_%s">',
$idVersement);
$out .= sprintf('%s : <span class="total" id="total_%s">0,00 €</span>',
$personne->nomPrenom,
$idVersement);
$out .= '</label></h4></summary>';
$out .= sprintf('
<fieldset class="versements" id="versements_%s">',
$idVersement);
return $out; return $out;
}); });
@ -122,42 +128,47 @@ $tpl->register_function('afficher_versement', function ($params)
{ {
$versement = $params['versement']; $versement = $params['versement'];
$idVersement = $params['idVersement']; $idVersement = $params['idVersement'];
$num = $params['num'];
$rang = $params['rang']; $rang = $params['rang'];
$pair = $params['pair'];
$out = '<div class="'; $out = '<div class="';
$out .= ($rang%2==0) ? 'pair">' : 'impair">'; $out .= $pair ? 'pair">' : 'impair">';
$out .= sprintf(' $out .= sprintf('
<input type="checkbox" <input type="checkbox"
class="check_%s" class="check_%1$s"
id="check_%s_%s" id="check_%1$s_%2$s"
name="selected[]" name="selected[]"
value="%s" value="%2$s"
onclick="cocherDecocherVersement(check_%s_%s, total_%s)" />', onclick="cocherDecocherVersement(check_%1$s_%2$s, total_%1$s)" />
$idVersement, <label for="check_%1$s_%2$s"><span class="montant">%3$.2f</span>
$idVersement, $rang, <span>%4$s</span>
$num, <span>%5$s</span>
$idVersement, $rang, $idVersement </label>
); </div>',
$out .= sprintf('
<label for="check_%s_%s"><span class="montant">%.2f</span>',
$idVersement, $idVersement,
$rang, $rang,
$versement->versement/100 $versement->versement/100,
); date_format(date_create($versement->date),"d/m/Y"),
$out .= sprintf(' $versement->compte
<span>%s</span>',
date_format(date_create($versement->date),"d/m/Y"));
$out .= sprintf('
<span>%s</span>',
$versement->compte);
$out .= sprintf('
</label>
</div>'
); );
return $out; return $out;
}); });
$tpl->register_function('fin_personne', function ($params)
{
$out = '
</fieldset>
</details>';
return $out;
});
$tpl->register_function('fin_tarif', function ($params)
{
$out = '
</details>';
return $out;
});
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
// aiguillage // aiguillage
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------

View File

@ -1,8 +1,8 @@
"use strict"; "use strict";
/** /**
* Fonction appelée quand on ()coche la case de sélection globale * Fonction appelée quand on ()coche la case globale
* ()sélectionner toutes les cases à cocher de toutes les activités * ()sélectionner toutes les cases de toutes les activités
* @param {HTMLInputElement} idCaseGlobale id de la case globale * @param {HTMLInputElement} idCaseGlobale id de la case globale
*/ */
function cocherDecocherTout(idCaseGlobale) function cocherDecocherTout(idCaseGlobale)
@ -11,21 +11,32 @@ function cocherDecocherTout(idCaseGlobale)
let lesDetails = document.querySelectorAll("details.activite"); let lesDetails = document.querySelectorAll("details.activite");
for (let i = 0; i < lesDetails.length; ++i) for (let i = 0; i < lesDetails.length; ++i)
{ {
// itérer sur les personnes let idCase = lesDetails[i].querySelector("input[type=checkbox]");
let lesPersonnes = lesDetails[i].querySelectorAll("h4.personne"); idCase.checked = idCaseGlobale.checked;
cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes); cocherDecocherTarif(idCase);
} }
// changer le message // changer le message
changerMessage(idCaseGlobale.nextElementSibling, idCaseGlobale); changerMessage(idCaseGlobale.nextElementSibling, idCaseGlobale);
} }
/**
* Fonction appelée quand on ()coche la case d'activité
* ()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 * 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) function cocherDecocherToutesLesPersonnes(idCaseGlobale)
{ {
let lesPersonnes = document.querySelectorAll("h4.personne"); let lesPersonnes = document.querySelectorAll("div.personne");
cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes); cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes);
changerMessage(idCaseGlobale.nextElementSibling, idCaseGlobale); changerMessage(idCaseGlobale.nextElementSibling, idCaseGlobale);
} }
@ -49,7 +60,7 @@ function cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes)
} }
/** /**
* Fonction appelée quand on ()coche la case globale d'une personne * Fonction appelée quand on ()coche la case d'une personne
* - ()sélectionner toutes les cases à cocher * - ()sélectionner toutes les cases à cocher
* - faire le total des cases cochées et l'afficher * - faire le total des cases cochées et l'afficher
* @param {HTMLInputElement} idCase id de la case qui a été cochée * @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) for (let i = 0; i < listeCases.length; ++i)
{ {
listeCases[i].checked = idCase.checked; listeCases[i].checked = idCase.checked;
cocherDecocherVersement(listeCases[i], idTotal);
} }
// calculer et afficher le total
let listeMontants = fieldset.querySelectorAll("span.montant");
calculerTotal(listeCases, listeMontants, idTotal);
} }
/** /**

View File

@ -2,7 +2,9 @@
div.impair { div.impair {
background: rgba(var(--gSecondColor), 0.15); background: rgba(var(--gSecondColor), 0.15);
} }
fieldset { fieldset.versements
{
margin-left : 4em;
-webkit-border-radius:8px; -webkit-border-radius:8px;
border-radius:8px; border-radius:8px;
} }
@ -23,7 +25,6 @@ span.total
} }
summary.activite summary.activite
{ {
background: rgba(var(--gSecondColor), 0.5);
margin-bottom : 0.5em; margin-bottom : 0.5em;
} }
summary.personne summary.personne
@ -32,11 +33,19 @@ summary.personne
padding-top : 0; padding-top : 0;
padding-bottom : 0; padding-bottom : 0;
} }
h3.personne, h4.personne div.personne, div.activite
{ {
font-weight : normal; font-weight : normal;
background: rgba(var(--gSecondColor), 0.25); background: rgba(var(--gSecondColor), 0.25);
} }
h3.activite
{
display : inline;
}
p.activite
{
margin-left : 2.5em;
}
#signature #signature
{ {
padding : 1em 0.5em 0 0.5em; padding : 1em 0.5em 0 0.5em;