Ajout (dé)sélection globale
Suppression de code inutile Le numéro de reçu devient le numéro de membre FossilOrigin-Name: 3c547eb17e551fff833728a9b3bf6deb4693b1e021c9d55685b054cab930c5cf
This commit is contained in:
parent
41c93cf556
commit
c72996befe
@ -1,41 +1,5 @@
|
|||||||
{include file="admin/_head.tpl" title="%s"|args:$plugin.nom current="plugin_%s"|args:$plugin.id}
|
{include file="admin/_head.tpl" title="%s"|args:$plugin.nom current="plugin_%s"|args:$plugin.id}
|
||||||
|
|
||||||
{* barre de navigation
|
|
||||||
<nav class="tabs noprint">
|
|
||||||
<ul>
|
|
||||||
<li><a>Page 1</a></li>
|
|
||||||
<li><a>Page 2</a></li>
|
|
||||||
<li><a>Page 3</a></li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
*}
|
|
||||||
{* TODO : Temporaire - à supprimer (?) *}
|
|
||||||
<h2>Liste des activités, cotisations et comptes associés</h2>
|
|
||||||
<table class="list">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Nom</th>
|
|
||||||
<th>Description</th>
|
|
||||||
<th>Tarif</th>
|
|
||||||
<th>Description</th>
|
|
||||||
<th>N° Compte</th>
|
|
||||||
<th>Nom Compte</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{foreach from=$activitesTarifsComptes item="activite"}
|
|
||||||
<tr>
|
|
||||||
<td>{$activite.label}</td>
|
|
||||||
<td>{$activite.descService}</td>
|
|
||||||
<td>{$activite.tarif}</td>
|
|
||||||
<td>{$activite.descTarif}</td>
|
|
||||||
<td>{$activite.numero_cpt}</td>
|
|
||||||
<td>{$activite.nom_cpt}</td>
|
|
||||||
</tr>
|
|
||||||
{/foreach}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<h2>Liste des versements par activité et tarif</h2>
|
<h2>Liste des versements par activité et tarif</h2>
|
||||||
|
|
||||||
{* TODO : vérifier le détail de ce div *}
|
{* TODO : vérifier le détail de ce div *}
|
||||||
@ -46,6 +10,15 @@
|
|||||||
|
|
||||||
<form method="post" action="action.php" class="memberList">
|
<form method="post" action="action.php" class="memberList">
|
||||||
|
|
||||||
|
<fieldset class="versements" id="versements_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>
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
{* Itération sur les activités *}
|
{* Itération sur les activités *}
|
||||||
{foreach from=$listeParActiviteEtTarif item="activite"}
|
{foreach from=$listeParActiviteEtTarif item="activite"}
|
||||||
|
|
||||||
@ -53,7 +26,7 @@
|
|||||||
{foreach from=$activite->tarifs item="tarif"}
|
{foreach from=$activite->tarifs item="tarif"}
|
||||||
|
|
||||||
<details open="open">
|
<details open="open">
|
||||||
<summary>
|
<summary class="activite">
|
||||||
<h3>Activité « {$activite->label} »</h3>
|
<h3>Activité « {$activite->label} »</h3>
|
||||||
{if !empty($activite->description)}
|
{if !empty($activite->description)}
|
||||||
<h4>{$activite->description}</h4>
|
<h4>{$activite->description}</h4>
|
||||||
@ -82,14 +55,14 @@
|
|||||||
{/if}
|
{/if}
|
||||||
{* Afficher les infos de la personne *}
|
{* Afficher les infos de la personne *}
|
||||||
<?php $idVersements = $versement->idTarif."_".$versement->idUser; ?>
|
<?php $idVersements = $versement->idTarif."_".$versement->idUser; ?>
|
||||||
<h3>Versements de {$versement.nom} : <span id="total_{$idVersements}">0,00 €</span></h3>
|
<h3 class="personne">Versements de {$versement.nom} : <span id="total_{$idVersements}">0,00 €</span></h3>
|
||||||
<fieldset class="versements" id="versements_{$idVersements}">
|
<fieldset class="versements" id="versements_{$idVersements}">
|
||||||
<input
|
<input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
class="check_{$idVersements}"
|
class="check_{$idVersements}"
|
||||||
id="check_{$idVersements}"
|
id="check_{$idVersements}"
|
||||||
onclick="cocherDecocherPersonne(check_{$idVersements}, total_{$idVersements})" />
|
onclick="cocherDecocherPersonne(check_{$idVersements}, total_{$idVersements})" />
|
||||||
<label for="check_{$idVersements}" style="font-weight:bold;">Cliquer pour cocher toutes les lignes</label>
|
<label for="check_{$idVersements}">Cliquer pour cocher toutes les lignes</label>
|
||||||
<br />
|
<br />
|
||||||
<hr>
|
<hr>
|
||||||
<?php $currentUser = $versement->idUser; ?>
|
<?php $currentUser = $versement->idUser; ?>
|
||||||
@ -122,9 +95,6 @@
|
|||||||
|
|
||||||
{literal}
|
{literal}
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
// activer l'écouteur sur la première case de chaque table
|
|
||||||
// window.addEventListener("load", activerListener);
|
|
||||||
|
|
||||||
// ouvrir/fermer les détails
|
// ouvrir/fermer les détails
|
||||||
document.querySelector('#open_details').onclick = () => {
|
document.querySelector('#open_details').onclick = () => {
|
||||||
document.querySelectorAll('details').forEach((e) => {
|
document.querySelectorAll('details').forEach((e) => {
|
||||||
|
@ -14,20 +14,19 @@ $versementsSelectionnes = array();
|
|||||||
foreach ($list as $indice => $ligne) {
|
foreach ($list as $indice => $ligne) {
|
||||||
$versementsSelectionnes[] = $_SESSION['lesVersements'][$ligne];
|
$versementsSelectionnes[] = $_SESSION['lesVersements'][$ligne];
|
||||||
}
|
}
|
||||||
// print_r($versementsSelectionnes);
|
|
||||||
|
|
||||||
// cumuler les versements d'une personne
|
// cumuler les versements d'une personne
|
||||||
$totalPersonnes = cumulerVersements($versementsSelectionnes);
|
$totalPersonnes = cumulerVersements($versementsSelectionnes);
|
||||||
// print_r($totalPersonnes);
|
|
||||||
|
|
||||||
// générer les reçus
|
// générer les reçus
|
||||||
$nomAsso = Services::getNomAsso();
|
$nomAsso = Services::getNomAsso();
|
||||||
$adresseAsso = Services::getAdresseAsso();
|
$adresseAsso = Services::getAdresseAsso();
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
// - mémoriser numéro reçu pour pouvoir générer des reçus en plusieurs sessions indépendantes
|
// - mémoriser numéro reçu pour pouvoir générer des reçus en plusieurs sessions indépendantes
|
||||||
// - paramétrer l'année fiscale
|
// - paramétrer l'année fiscale
|
||||||
// $num_recu = 1;
|
|
||||||
$annee_recu = "2021";
|
$annee_recu = "2021";
|
||||||
|
|
||||||
// récupérer le logo CERFA (bôf) et la signature
|
// récupérer le logo CERFA (bôf) et la signature
|
||||||
// TODO : paramétrer le répertoire des images
|
// TODO : paramétrer le répertoire des images
|
||||||
$logoCERFA = PLUGIN_ROOT . "/data/logoCerfa.png";
|
$logoCERFA = PLUGIN_ROOT . "/data/logoCerfa.png";
|
||||||
@ -58,7 +57,6 @@ foreach ($totalPersonnes as $idPersonne => $personne) {
|
|||||||
$personne->ville,
|
$personne->ville,
|
||||||
$personne->codePostal
|
$personne->codePostal
|
||||||
);
|
);
|
||||||
//++$num_recu;
|
|
||||||
// fabriquer le nom du fichier PDF
|
// fabriquer le nom du fichier PDF
|
||||||
$nom = str_replace(' ', '_', $personne->nomPrenom);
|
$nom = str_replace(' ', '_', $personne->nomPrenom);
|
||||||
$nom = str_replace("'", "", $nom);
|
$nom = str_replace("'", "", $nom);
|
||||||
|
@ -1,3 +1,36 @@
|
|||||||
|
/**
|
||||||
|
* 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
|
||||||
|
*/
|
||||||
|
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");
|
||||||
|
for (var i = 0; i < lesDetails.length; ++i) {
|
||||||
|
// itérer sur les personnes
|
||||||
|
var lesH3 = lesDetails[i].querySelectorAll("h3.personne");
|
||||||
|
for (var j = 0; j < lesH3.length; ++j) {
|
||||||
|
// trouver l'élément total de la personne
|
||||||
|
var idTotal = lesH3[j].querySelector("span");
|
||||||
|
// puis la case à cocher
|
||||||
|
var fieldset = lesH3[j].nextElementSibling;
|
||||||
|
var idCase = fieldset.querySelector("input");
|
||||||
|
idCase.checked = idCaseGlobale.checked;
|
||||||
|
// puis traiter toutes les cases de la personne
|
||||||
|
cocherDecocherPersonne(idCase, idTotal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// changer le message
|
||||||
|
var message = idCaseGlobale.nextElementSibling;
|
||||||
|
if (idCase.checked) {
|
||||||
|
message.innerHTML = "Cliquer pour dé-cocher toutes les lignes";
|
||||||
|
} else {
|
||||||
|
message.innerHTML = "Cliquer pour cocher toutes les lignes";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fonction appelée quand on (dé)coche la case d'une personne
|
* Fonction appelée quand on (dé)coche la case d'une personne
|
||||||
* - (dé)sélectionner toutes les cases à cocher
|
* - (dé)sélectionner toutes les cases à cocher
|
||||||
@ -84,67 +117,3 @@ function verifierChoix(formulaire)
|
|||||||
}
|
}
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Cocher/décocher toutes les cases d'un tableau
|
|
||||||
* en fonction de l'état de la première (ligne d'entête)
|
|
||||||
* @param evt : événement déclencheur
|
|
||||||
* @remarks : est remplacé par la fonction cocherDecocherPersonne ci-dessus
|
|
||||||
*/
|
|
||||||
function cocherDecocher_old(evt) {
|
|
||||||
console.log("this = " + this.className);
|
|
||||||
console.log("currentTarget = " + evt.currentTarget.className);
|
|
||||||
console.log("evt.target = " + evt.target.className);
|
|
||||||
var composed = evt.composedPath();
|
|
||||||
console.log("composedPath = " + composed);
|
|
||||||
|
|
||||||
var firstInput = evt.target;
|
|
||||||
// voir si la case tousCochés est cochée
|
|
||||||
var tousCoches = firstInput.checked;
|
|
||||||
// chercher la table englobante
|
|
||||||
var laTable = firstInput.closest("table");
|
|
||||||
console.log("Table trouvée = " + laTable.id);
|
|
||||||
// et la liste des lignes
|
|
||||||
var rows = laTable.getElementsByTagName("tr");
|
|
||||||
// modifier les autres cases en fonction de celle-ci
|
|
||||||
for (let i = 1; i < rows.length; ++i) {
|
|
||||||
var input = rows[i].getElementsByTagName("input")[0];
|
|
||||||
input.checked = tousCoches;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Associer un écouteur à la première case à cocher de chaque table
|
|
||||||
* @remarks : n'est plus utile
|
|
||||||
*/
|
|
||||||
function activerListener() {
|
|
||||||
// parcourir les tables
|
|
||||||
const lesTables = document.querySelectorAll("table.list");
|
|
||||||
for (let i = 0; i < lesTables.length; ++i) {
|
|
||||||
// vérifier si c'est l'une des tables qui nous intéresse
|
|
||||||
// l'id est du genre : versements_xx où xx est un entier
|
|
||||||
const id = lesTables[i].id;
|
|
||||||
const re = /^versements_[0-9]+/;
|
|
||||||
console.log("id = " + id + " => " + re.test(id));
|
|
||||||
if (re.test(id)) {
|
|
||||||
// chercher le premier élément input
|
|
||||||
const premierInput = lesTables[i].querySelector("input");
|
|
||||||
// associer un écouteur à la première case à cocher
|
|
||||||
premierInput.addEventListener('change', cocherDecocher);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
// ouvrir/fermer les détails
|
|
||||||
document.querySelector('#open_details').onclick = () => {
|
|
||||||
document.querySelectorAll('details').forEach((e) => {
|
|
||||||
e.setAttribute('open', 'open');
|
|
||||||
});
|
|
||||||
};
|
|
||||||
document.querySelector('#close_details').onclick = () => {
|
|
||||||
document.querySelectorAll('details').forEach((e) => {
|
|
||||||
e.removeAttribute('open');
|
|
||||||
});
|
|
||||||
};
|
|
||||||
*/
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
|
/* liste de versements */
|
||||||
div.pair {
|
div.pair {
|
||||||
padding : 0.2em;
|
padding : 0.2em;
|
||||||
background: rgba(var(--gSecondColor), 0.2);
|
background: rgba(var(--gSecondColor), 0.2);
|
||||||
}
|
}
|
||||||
div.impair {
|
div.impair {
|
||||||
padding : 0.2em;
|
padding : 0.2em;
|
||||||
/*background: #eeeeee; /*rgba(var(--gSecondColor), 0.5);*/
|
|
||||||
}
|
}
|
||||||
fieldset {
|
fieldset {
|
||||||
border:2px solid brown;
|
border:2px solid brown;
|
||||||
@ -18,3 +18,9 @@ div span {
|
|||||||
padding-left : 0.5em;
|
padding-left : 0.5em;
|
||||||
padding-right : 0.5em;
|
padding-right : 0.5em;
|
||||||
}
|
}
|
||||||
|
summary.activite {
|
||||||
|
background: rgba(var(--gMainColor), 0.25);
|
||||||
|
}
|
||||||
|
h3.personne {
|
||||||
|
background: rgba(var(--gSecondColor), 0.35);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user