Compare commits
No commits in common. "master" and "evolution" have entirely different histories.
13 changed files with 137 additions and 178 deletions
|
|
@ -71,8 +71,8 @@ $tpl->register_function('afficher_debut_tarif', function ($params)
|
||||||
<summary class="activite">
|
<summary class="activite">
|
||||||
<div class="activite">
|
<div class="activite">
|
||||||
<input type="checkbox" id="check_%1$s"
|
<input type="checkbox" id="check_%1$s"
|
||||||
onclick="cocherDecocherTarif(check_%1$s, %2$s)" />',
|
onclick="cocherDecocherTarif(check_%1$s)" />',
|
||||||
$idTarif, "total_general");
|
$idTarif);
|
||||||
if ($idTarif == 0) {
|
if ($idTarif == 0) {
|
||||||
// versement sur un compte non rattaché à une activité
|
// versement sur un compte non rattaché à une activité
|
||||||
$out .= sprintf('
|
$out .= sprintf('
|
||||||
|
|
@ -122,7 +122,7 @@ $tpl->register_function('afficher_debut_personne', function ($params)
|
||||||
<summary class="personne">
|
<summary class="personne">
|
||||||
<div class="personne">
|
<div class="personne">
|
||||||
<input type="checkbox" id="check_%1$s"
|
<input type="checkbox" id="check_%1$s"
|
||||||
onclick="cocherDecocherPersonne(check_%1$s, total_%1$s, %3$s)" />
|
onclick="cocherDecocherPersonne(check_%1$s, total_%1$s)" />
|
||||||
<label for="check_%1$s">
|
<label for="check_%1$s">
|
||||||
%2$s : <span class="total" id="total_%1$s">0,00 €</span>
|
%2$s : <span class="total" id="total_%1$s">0,00 €</span>
|
||||||
</label>
|
</label>
|
||||||
|
|
@ -130,8 +130,7 @@ $tpl->register_function('afficher_debut_personne', function ($params)
|
||||||
</summary>
|
</summary>
|
||||||
<div class="versements">',
|
<div class="versements">',
|
||||||
$idVersement,
|
$idVersement,
|
||||||
$personne->nomPrenom,
|
$personne->nomPrenom
|
||||||
"total_general"
|
|
||||||
);
|
);
|
||||||
return $out;
|
return $out;
|
||||||
});
|
});
|
||||||
|
|
@ -164,7 +163,7 @@ $tpl->register_function('afficher_versement', function ($params)
|
||||||
id="check_%1$s_%2$s"
|
id="check_%1$s_%2$s"
|
||||||
name="selected[]"
|
name="selected[]"
|
||||||
value="%2$s"
|
value="%2$s"
|
||||||
onclick="cocherDecocherCase(check_%1$s_%2$s, total_%1$s, %5$s)" />
|
onclick="cocherDecocherVersement(check_%1$s_%2$s, total_%1$s)" />
|
||||||
<label for="check_%1$s_%2$s"><span class="montant">%3$s</span>
|
<label for="check_%1$s_%2$s"><span class="montant">%3$s</span>
|
||||||
<span>%4$s</span>
|
<span>%4$s</span>
|
||||||
</label>
|
</label>
|
||||||
|
|
@ -177,8 +176,7 @@ $tpl->register_function('afficher_versement', function ($params)
|
||||||
",",
|
",",
|
||||||
" "
|
" "
|
||||||
),
|
),
|
||||||
date_format(date_create($versement->date),"d/m/Y"),
|
date_format(date_create($versement->date),"d/m/Y")
|
||||||
"total_general"
|
|
||||||
);
|
);
|
||||||
return $out;
|
return $out;
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -16,11 +16,9 @@ $_GET['_dialog'] = true;
|
||||||
|
|
||||||
// signature
|
// signature
|
||||||
$signature =
|
$signature =
|
||||||
(null !== $config->fileURL('signature')) ?
|
(null !== $plugin->getConfig('signature')) ?
|
||||||
$config->fileURL('signature') :
|
\KD2\HTTP::getScheme() . '://' . \KD2\HTTP::getHost() . WWW_URI . "/" . $plugin->getConfig('signature') :
|
||||||
((null !== $plugin->getConfig('signature')) ?
|
"";
|
||||||
\KD2\HTTP::getScheme() . '://' . \KD2\HTTP::getHost() . WWW_URI . $plugin->getConfig('signature') :
|
|
||||||
"");
|
|
||||||
|
|
||||||
// logo
|
// logo
|
||||||
$config = Config::getInstance();
|
$config = Config::getInstance();
|
||||||
|
|
@ -113,8 +111,7 @@ function genererRecusPDF($totalPersonnes,
|
||||||
$numero_sequentiel = getNumSequentiel($configNum);
|
$numero_sequentiel = getNumSequentiel($configNum);
|
||||||
foreach ($totalPersonnes as $idPersonne => $personne) {
|
foreach ($totalPersonnes as $idPersonne => $personne) {
|
||||||
$tpl = new UserTemplate(null);
|
$tpl = new UserTemplate(null);
|
||||||
/* $tpl->setSource(PLUGIN_ROOT . '/templates/recu.skel'); */
|
$tpl->setSource(PLUGIN_ROOT . '/templates/recu.skel');
|
||||||
$tpl->setSourcePath(PLUGIN_ROOT . '/templates/recu.skel');
|
|
||||||
|
|
||||||
$tpl->assignArray(compact('signature', 'logo_asso', 'texteArticles'));
|
$tpl->assignArray(compact('signature', 'logo_asso', 'texteArticles'));
|
||||||
$tpl->assign('objet_asso', $plugin->getConfig('objet_asso'));
|
$tpl->assign('objet_asso', $plugin->getConfig('objet_asso'));
|
||||||
|
|
@ -128,7 +125,7 @@ function genererRecusPDF($totalPersonnes,
|
||||||
$tpl->assign('date', date("j/m/Y"));
|
$tpl->assign('date', date("j/m/Y"));
|
||||||
|
|
||||||
// numéro de reçu
|
// numéro de reçu
|
||||||
$tpl->assign('numero',
|
$tpl->assign('numero',
|
||||||
faireNumeroRecu($prefixeNum,
|
faireNumeroRecu($prefixeNum,
|
||||||
$configNum->membre,
|
$configNum->membre,
|
||||||
$personne->numero,
|
$personne->numero,
|
||||||
|
|
@ -208,9 +205,9 @@ function genererRecusPDF($totalPersonnes,
|
||||||
);
|
);
|
||||||
|
|
||||||
//supprimer les fichiers pdf
|
//supprimer les fichiers pdf
|
||||||
foreach ($listeFichiersPDF as $f) {
|
// foreach ($listeFichiersPDF as $f) {
|
||||||
\Paheko\Utils::safe_unlink($f);
|
// \Paheko\Utils::safe_unlink($f);
|
||||||
}
|
// }
|
||||||
} // genererRecusPDF
|
} // genererRecusPDF
|
||||||
|
|
||||||
function generererRecusHTML($tpl,
|
function generererRecusHTML($tpl,
|
||||||
|
|
|
||||||
|
|
@ -34,18 +34,5 @@ div.previs_recu
|
||||||
font-family: Serif;
|
font-family: Serif;
|
||||||
font-size: 11pt;
|
font-size: 11pt;
|
||||||
background-color: white;
|
background-color: white;
|
||||||
break-after: always;
|
page-break-after: always;
|
||||||
}
|
|
||||||
|
|
||||||
/* supprimer saut de page après dernier */
|
|
||||||
div.previs_recu:last-of-type
|
|
||||||
{
|
|
||||||
font-family: Serif;
|
|
||||||
font-size: 11pt;
|
|
||||||
background-color: white;
|
|
||||||
break-after: avoid;
|
|
||||||
}
|
|
||||||
|
|
||||||
#__profiler {
|
|
||||||
display: none;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -95,9 +95,3 @@ span.titre, span.libelle
|
||||||
{
|
{
|
||||||
display : inline;
|
display : inline;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ne pas imprimer le bandeau des boutons du profiler */
|
|
||||||
#__profiler
|
|
||||||
{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
|
||||||
122
admin/script.js
122
admin/script.js
|
|
@ -1,26 +1,5 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
/**
|
|
||||||
* renvoyer la valeur numérique d'un montant formaté en €
|
|
||||||
* @param texte qui représente nu nombre
|
|
||||||
*/
|
|
||||||
function getNumber(texte) {
|
|
||||||
return Number(texte.replace(/[^0-9,]/g, '').replace(/,/, '.'));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* afficher un montant au format monétaire
|
|
||||||
* @param montant à afficher
|
|
||||||
* @param idElem : élément où faire l'affichage
|
|
||||||
*/
|
|
||||||
function displayNumber(montant, idElem) {
|
|
||||||
idElem.innerHTML =
|
|
||||||
montant.toLocaleString('fr-FR', {
|
|
||||||
style: 'currency', currency: 'EUR',
|
|
||||||
minimumFractionDigits: 2
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
// actions sur la liste des versements
|
// actions sur la liste des versements
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
|
@ -29,15 +8,14 @@ function displayNumber(montant, idElem) {
|
||||||
* Fonction appelée quand on (dé)coche la case globale
|
* Fonction appelée quand on (dé)coche la case globale
|
||||||
* (dé)sélectionner toutes les cases de toutes les activités
|
* (dé)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
|
||||||
* @param {HTMLSpanElement} idTotalGeneral id du total général
|
|
||||||
*/
|
*/
|
||||||
function cocherDecocherTout(idCaseGlobale, idTotalGeneral) {
|
function cocherDecocherTout(idCaseGlobale) {
|
||||||
// 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>
|
||||||
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) {
|
||||||
let idCase = lesDetails[i].querySelector("input[type=checkbox]");
|
let idCase = lesDetails[i].querySelector("input[type=checkbox]");
|
||||||
idCase.checked = idCaseGlobale.checked;
|
idCase.checked = idCaseGlobale.checked;
|
||||||
cocherDecocherTarif(idCase, idTotalGeneral);
|
cocherDecocherTarif(idCase);
|
||||||
}
|
}
|
||||||
// changer le message
|
// changer le message
|
||||||
changerMessage(idCaseGlobale.nextElementSibling, idCaseGlobale);
|
changerMessage(idCaseGlobale.nextElementSibling, idCaseGlobale);
|
||||||
|
|
@ -47,37 +25,35 @@ function cocherDecocherTout(idCaseGlobale, idTotalGeneral) {
|
||||||
* Fonction appelée quand on (dé)coche la case d'activité
|
* Fonction appelée quand on (dé)coche la case d'activité
|
||||||
* (dé)sélectionner toutes les cases de cette activité
|
* (dé)sélectionner toutes les cases de cette activité
|
||||||
* @param {HTMLInputElement} idCaseGlobale id de la case d'activité
|
* @param {HTMLInputElement} idCaseGlobale id de la case d'activité
|
||||||
* @param {HTMLSpanElement} idTotalGeneral id du total général
|
|
||||||
*/
|
*/
|
||||||
function cocherDecocherTarif(idCaseGlobale, idTotalGeneral) {
|
function cocherDecocherTarif(idCaseGlobale) {
|
||||||
let lesPersonnes = idCaseGlobale.closest("details").querySelectorAll("div.personne");
|
let lesPersonnes = idCaseGlobale.closest("details").querySelectorAll("div.personne");
|
||||||
cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes, idTotalGeneral);
|
cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* idem dans le cas des versements des personnes
|
* idem dans le cas des versements des personnes
|
||||||
* @param {HTMLInputElement} idCaseGlobale id case à cocher d'une personne
|
* @param {HTMLInputElement} idCaseGlobale id case à cocher d'une personne
|
||||||
*/
|
*/
|
||||||
function cocherDecocherToutesLesPersonnes(idCaseGlobale, idTotalGeneral) {
|
function cocherDecocherToutesLesPersonnes(idCaseGlobale) {
|
||||||
let lesPersonnes = document.querySelectorAll("summary.personne");
|
let lesPersonnes = document.querySelectorAll("div.personne");
|
||||||
cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes, idTotalGeneral);
|
cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes);
|
||||||
changerMessage(idCaseGlobale.nextElementSibling, idCaseGlobale);
|
changerMessage(idCaseGlobale.nextElementSibling, idCaseGlobale);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {HTMLInputElement} idCaseGlobale
|
* @param {HTMLInputElement} idCaseGlobale
|
||||||
* @param {NodeListOf<Element>} lesPersonnes
|
* @param {NodeListOf<Element>} lesPersonnes
|
||||||
* @param {HTMLSpanElement} idTotalGeneral id du total général
|
*/
|
||||||
*/
|
function cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes) {
|
||||||
function cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes, idTotalGeneral) {
|
|
||||||
for (let j = 0; j < lesPersonnes.length; ++j) {
|
for (let j = 0; j < lesPersonnes.length; ++j) {
|
||||||
// trouver l'élément total de la personne
|
// trouver l'élément total de la personne
|
||||||
let idTotal = lesPersonnes[j].querySelector("span.total");
|
let idTotal = lesPersonnes[j].querySelector("span");
|
||||||
// puis la case à cocher
|
// puis la case à cocher
|
||||||
let idCase = lesPersonnes[j].querySelector("input[type=checkbox]");
|
let idCase = lesPersonnes[j].closest("summary").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, idTotalGeneral);
|
cocherDecocherPersonne(idCase, idTotal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -86,45 +62,51 @@ function cocherDecocherLesPersonnes(idCaseGlobale, lesPersonnes, idTotalGeneral)
|
||||||
* - (dé)sélectionner toutes les cases à cocher
|
* - (dé)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
|
||||||
* @param {HTMLSpanElement} idTotal id de l'élément où afficher le total de la personne
|
* @param {HTMLSpanElement} idTotal id de l'élément où afficher le total
|
||||||
* @param {HTMLSpanElement} idTotalGeneral id de l'élément où afficher le total général
|
|
||||||
*/
|
*/
|
||||||
function cocherDecocherPersonne(idCase, idTotal, idTotalGeneral) {
|
function cocherDecocherPersonne(idCase, idTotal) {
|
||||||
let conteneur = idCase.closest("details").querySelector("div.versements");
|
// chercher le fieldset des versements
|
||||||
let listeCases = conteneur.querySelectorAll("input[type=checkbox]");
|
let fieldset = idCase.closest("details").querySelector("div.versements");
|
||||||
|
let listeCases = fieldset.querySelectorAll("input[type=checkbox]");
|
||||||
for (let i = 0; i < listeCases.length; ++i) {
|
for (let i = 0; i < listeCases.length; ++i) {
|
||||||
if (listeCases[i].checked != idCase.checked) {
|
listeCases[i].checked = idCase.checked;
|
||||||
listeCases[i].checked = idCase.checked;
|
cocherDecocherVersement(listeCases[i], idTotal);
|
||||||
cocherDecocherVersement(listeCases[i], idTotal, idTotalGeneral);
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fonction appelée quand on (dé)coche la case d'un versement
|
* Fonction appelée quand on (dé)coche la case d'un versement
|
||||||
* Mettre à jour le total des cases cochées et le total global et les afficher
|
* Faire le total des cases cochées et l'afficher
|
||||||
*
|
*
|
||||||
* @param {HTMLInputElement} idCase id de la case qui a été (dé)cochée
|
* @param {HTMLInputElement} idCase id de la case qui a été cochée
|
||||||
* @param {HTMLSpanElement} idTotal id du total de la personne
|
* @param {HTMLSpanElement} idTotal id de l'élément où afficher le total
|
||||||
* @param {HTMLSpanElement} idTotalGeneral id du total général
|
|
||||||
*/
|
*/
|
||||||
|
function cocherDecocherVersement(idCase, idTotal) {
|
||||||
|
let fieldset = idCase.closest("div.versements");
|
||||||
|
let listeCases = fieldset.querySelectorAll("input[type=checkbox]");
|
||||||
|
let listeMontants = fieldset.querySelectorAll("span.montant");
|
||||||
|
calculerTotal(listeCases, listeMontants, idTotal);
|
||||||
|
}
|
||||||
|
|
||||||
function cocherDecocherVersement(idCase, idTotal, idTotalGeneral) {
|
/**
|
||||||
let div = idCase.closest("div");
|
* Faire le total des cases cochées et l'afficher
|
||||||
let idmontant = div.querySelector("span.montant");
|
* @param {NodeListOf<Element>} listeCases liste des cases
|
||||||
let montant = getNumber(idmontant.textContent);
|
* @param {NodeListOf<Element>} listeMontants liste des montants associés
|
||||||
let totalPersonne = getNumber(idTotal.textContent);
|
* @param {HTMLSpanElement} idTotal id de l'élément où afficher le total
|
||||||
let totalGeneral = getNumber(idTotalGeneral.textContent);
|
*/
|
||||||
if (idCase.checked) {
|
function calculerTotal(listeCases, listeMontants, idTotal) {
|
||||||
totalPersonne += montant;
|
let total = 0;
|
||||||
totalGeneral += montant;
|
for (let i = 0; i < listeCases.length; ++i) {
|
||||||
} else {
|
if (listeCases[i].checked) {
|
||||||
totalPersonne -= montant;
|
total += parseFloat(listeMontants[i].textContent.replace(/\s/g, "").replace(",", "."));
|
||||||
totalGeneral -= montant;
|
}
|
||||||
}
|
}
|
||||||
displayNumber(totalPersonne, idTotal);
|
// afficher le total
|
||||||
displayNumber(totalGeneral, idTotalGeneral);
|
idTotal.innerHTML =
|
||||||
|
total.toLocaleString('fr-FR', {
|
||||||
|
style: 'currency', currency: 'EUR',
|
||||||
|
minimumFractionDigits: 2
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -285,8 +267,10 @@ function verifierCases(conteneur, type, message) {
|
||||||
*/
|
*/
|
||||||
function changerStyle(document) {
|
function changerStyle(document) {
|
||||||
let styles = document.querySelectorAll('link[rel="stylesheet"]');
|
let styles = document.querySelectorAll('link[rel="stylesheet"]');
|
||||||
|
// console.log(styles);
|
||||||
for (let sheet of styles) {
|
for (let sheet of styles) {
|
||||||
if (sheet.href.includes('print.css')) { sheet.media = "tv"; }
|
if (sheet.href.includes('print.css')) { sheet.media = "tv"; sheet.remove; }
|
||||||
if (sheet.href.includes('imprimer_recu.css')) { sheet.media = 'print'; }
|
if (sheet.href.includes('imprimer_recu.css')) { sheet.media = 'print'; }
|
||||||
}
|
}
|
||||||
}
|
// console.log(styles);
|
||||||
|
}
|
||||||
|
|
@ -2,10 +2,6 @@
|
||||||
* liste des versements
|
* liste des versements
|
||||||
*/
|
*/
|
||||||
|
|
||||||
label.strong {
|
|
||||||
font-weight : bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.pair {
|
div.pair {
|
||||||
background-color: rgba(var(--gSecondColor), 0.15);
|
background-color: rgba(var(--gSecondColor), 0.15);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,8 @@ if (!File::checkCreateAccess($parent, $session)) {
|
||||||
|
|
||||||
$csrf_key = 'upload_file_' . md5($parent);
|
$csrf_key = 'upload_file_' . md5($parent);
|
||||||
|
|
||||||
$form->runIf('upload', function () use ($parent, $session) {
|
$form->runIf('upload', function () use ($parent) {
|
||||||
$_SESSION['sig_file'] = \Paheko\Files\Files::uploadMultiple($parent, 'file', $session);
|
$_SESSION['sig_file'] = \Paheko\Files\Files::uploadMultiple($parent, 'file');
|
||||||
}, $csrf_key, PLUGIN_ROOT . '/admin/config.php');
|
}, $csrf_key, PLUGIN_ROOT . '/admin/config.php');
|
||||||
|
|
||||||
$tpl->assign(compact('parent', 'csrf_key'));
|
$tpl->assign(compact('parent', 'csrf_key'));
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ class Utils
|
||||||
description,
|
description,
|
||||||
amount as montant
|
amount as montant
|
||||||
FROM services_fees');
|
FROM services_fees');
|
||||||
return $db->getGrouped($sql);
|
return Utils::toAssoc($db->get($sql), 'id');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -37,7 +37,7 @@ class Utils
|
||||||
services.label,
|
services.label,
|
||||||
services.description
|
services.description
|
||||||
FROM services');
|
FROM services');
|
||||||
return $db->getGrouped($sql);
|
return Utils::toAssoc($db->get($sql), 'id');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -76,7 +76,7 @@ class Utils
|
||||||
$annee,
|
$annee,
|
||||||
$db->where('code', $op, $comptes)
|
$db->where('code', $op, $comptes)
|
||||||
);
|
);
|
||||||
return $db->getGrouped($sql);
|
return Utils::toAssoc($db->get($sql), 'id');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -120,6 +120,32 @@ class Utils
|
||||||
return $db->get($sql);
|
return $db->get($sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* faire un tableau associatif avec le résultat d'une requête
|
||||||
|
*/
|
||||||
|
static function toAssoc($array, $nomCle)
|
||||||
|
{
|
||||||
|
$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;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return versements correspondants à l'année donnée
|
* @return versements correspondants à l'année donnée
|
||||||
* @param $annee
|
* @param $annee
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
<!-- title -->
|
<!-- title -->
|
||||||
{include file="_head.tpl" title="%s"|args:$plugin.label current="plugin_%s"|args:$plugin.name}
|
{include file="_head.tpl" title="%s"|args:$plugin.label current="plugin_%s"|args:$plugin.id}
|
||||||
|
|
||||||
<!-- nav bar -->
|
<!-- nav bar -->
|
||||||
<nav class="tabs">
|
<nav class="tabs">
|
||||||
<ul>
|
<ul>
|
||||||
<li{if $current_nav == 'index'} class="current"{/if}><a href="{plugin_url}">Accueil</a></li>
|
<li{if $current_nav == 'index'} class="current"{/if}><a href="{plugin_url}">Accueil</a></li>
|
||||||
{if $current_nav == 'personne'} <li class="current"><a>Versements par personne</a></li>{/if}
|
<li{if $current_nav == 'personne'} class="current"{/if}><a href="{plugin_url file="action.php?action=personne"}">Versements par personne</a></li>
|
||||||
{if $current_nav == 'activite'} <li class="current"><a>Versements par activité et tarif</a></li>{/if}
|
<li{if $current_nav == 'activite'} class="current"{/if}><a href="{plugin_url file="action.php?action=activite"}">Versements par activité et tarif</a></li>
|
||||||
{if $session->canAccess($session::SECTION_ACCOUNTING, $session::ACCESS_WRITE)}
|
{if $session->canAccess($session::SECTION_ACCOUNTING, $session::ACCESS_WRITE)}
|
||||||
<li{if $current_nav == 'config'} class="current"{/if}><a href="{plugin_url file="config.php"}">Configuration</a></li>
|
<li{if $current_nav == 'config'} class="current"{/if}><a href="{plugin_url file="config.php"}">Configuration</a></li>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
<fieldset>
|
<fieldset>
|
||||||
{* <legend>Choisir une des méthodes</legend> *}
|
{* <legend>Choisir une des méthodes</legend> *}
|
||||||
<dl>
|
<dl id="menu">
|
||||||
<dd class="radio-btn">
|
<dd class="radio-btn">
|
||||||
<input type="radio" id="radio_versements_personne" name="choix_versements" value="personne"
|
<input type="radio" id="radio_versements_personne" name="choix_versements" value="personne"
|
||||||
onclick="choixMethodeGeneration(this.form, 'personne', 'menu_versements', '.menu');" />
|
onclick="choixMethodeGeneration(this.form, 'personne', 'menu_versements', '.menu');" />
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
{include file="_head.tpl" title="%s"|args:$plugin.label current="plugin_%s"|args:$plugin.id}
|
{include file="_head.tpl" title="%s"|args:$plugin.name current="plugin_%s"|args:$plugin.id}
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
$fmt = new \NumberFormatter('fr_FR', \NumberFormatter::SPELLOUT);
|
$fmt = new \NumberFormatter('fr_FR', \NumberFormatter::SPELLOUT);
|
||||||
|
|
@ -15,12 +15,12 @@
|
||||||
<p id="articles">Articles 200, 238 bis et 978 du code général des impôts</p>
|
<p id="articles">Articles 200, 238 bis et 978 du code général des impôts</p>
|
||||||
<div id="numRecu">
|
<div id="numRecu">
|
||||||
{if $numero_sequentiel}
|
{if $numero_sequentiel}
|
||||||
{afficher_numero_recu prefixe=$prefixeNum membre=$membre numero_personne=$personne->numero numero_sequentiel=$numero_courant}
|
{afficher_numero_recu prefixe=$prefixeNum membre=$membre numero_personne=$personne->numero numero_sequentiel=$numero_courant}
|
||||||
<?php
|
<?php
|
||||||
++$numero_courant;
|
++$numero_courant;
|
||||||
?>
|
?>
|
||||||
{else}
|
{else}
|
||||||
{afficher_numero_recu prefixe=$prefixeNum membre=$membre numero_personne=$personne->numero numero_sequentiel=$numero_sequentiel}
|
{afficher_numero_recu prefixe=$prefixeNum membre=$membre numero_personne=$personne->numero numero_sequentiel=$numero_sequentiel}
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -28,20 +28,20 @@
|
||||||
<div class="cartouche" id="beneficiaire">
|
<div class="cartouche" id="beneficiaire">
|
||||||
<h3 class="rubrique">Bénéficiaire des versements</h3>
|
<h3 class="rubrique">Bénéficiaire des versements</h3>
|
||||||
<p class="important">Association « {$org_name} »<br />
|
<p class="important">Association « {$org_name} »<br />
|
||||||
{$org_address}<br />
|
{$org_address}<br />
|
||||||
<span class="titre">Objet : </span><span class="libelle">{$objet_asso}</span>
|
<span class="titre">Objet : </span><span class="libelle">{$objet_asso}</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="cartouche" id="donateur">
|
<div class="cartouche" id="donateur">
|
||||||
<h3 class="rubrique">Donateur</h3>
|
<h3 class="rubrique">Donateur</h3>
|
||||||
<p>
|
<p>
|
||||||
{$personne.nomPrenom}<br />
|
{$personne.nomPrenom}<br />
|
||||||
{$personne.adresse}<br />
|
{$personne.adresse}<br />
|
||||||
{$personne.codePostal} {$personne.ville}
|
{$personne.codePostal} {$personne.ville}
|
||||||
{if $courriel && $personne.courriel != ""}
|
{if $courriel && $personne.courriel != ""}
|
||||||
<br />courriel : <a href="mailto:{$personne.courriel}">{$personne.courriel}</a>
|
<br />courriel : <a href="mailto:{$personne.courriel}">{$personne.courriel}</a>
|
||||||
{/if}
|
{/if}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -50,7 +50,7 @@
|
||||||
<ul>
|
<ul>
|
||||||
{foreach from=$personne.versements key="taux" item="versement"}
|
{foreach from=$personne.versements key="taux" item="versement"}
|
||||||
<li>
|
<li>
|
||||||
la somme de <b>***{$versement.montant|raw|money}*** euros</b>
|
la somme de <b>***{$versement.montant|raw|money}*** euros</b>
|
||||||
<?php
|
<?php
|
||||||
$euros = $fmt->format((int)($versement->montant / 100));
|
$euros = $fmt->format((int)($versement->montant / 100));
|
||||||
if ($versement->montant % 100 != 0) {
|
if ($versement->montant % 100 != 0) {
|
||||||
|
|
|
||||||
|
|
@ -4,24 +4,15 @@
|
||||||
<h2>Année {$annee_recu} : versements par activité et tarif</h2>
|
<h2>Année {$annee_recu} : versements par activité et tarif</h2>
|
||||||
|
|
||||||
<fieldset class="noprint">
|
<fieldset class="noprint">
|
||||||
<dl>
|
<input type="checkbox" class="check_global" id="check_global" onclick="cocherDecocherTout(check_global)" />
|
||||||
<dd>
|
|
||||||
<label class="strong">Total des cases cochées : </label>
|
|
||||||
<span class="total" id="total_general">0,00 €</span>
|
|
||||||
</dd>
|
|
||||||
<dd>
|
|
||||||
<input type="checkbox" class="check_global" id="check_global" onclick="cocherDecocherTout(check_global, total_general)" />
|
|
||||||
<label for="check_global">Cliquer pour cocher toutes les lignes</label>
|
<label for="check_global">Cliquer pour cocher toutes les lignes</label>
|
||||||
</dd>
|
|
||||||
<dd>
|
|
||||||
<button type="button" data-icon="↑" class="icn-btn" id="close_details_activite"
|
<button type="button" data-icon="↑" class="icn-btn" id="close_details_activite"
|
||||||
onclick="montrerMasquerDetails(this.id, 'details.activite', 'toutes les activités')">
|
onclick="montrerMasquerDetails(this.id, 'details.activite', 'toutes les activités')">
|
||||||
Replier toutes les activités</button>
|
Replier toutes les activités</button>
|
||||||
<button type="button" data-icon="↑" class="icn-btn" id="close_details_personne"
|
<button type="button" data-icon="↑" class="icn-btn" id="close_details_personne"
|
||||||
onclick="montrerMasquerDetails(this.id, 'details.personne', 'toutes les personnes')">
|
onclick="montrerMasquerDetails(this.id, 'details.personne', 'toutes les personnes')">
|
||||||
Replier toutes les personnes</button>
|
Replier toutes les personnes</button>
|
||||||
</dd>
|
<br />
|
||||||
<dd>
|
|
||||||
{button type="submit" label="Télécharger les reçus au format PDF" shape="download"
|
{button type="submit" label="Télécharger les reçus au format PDF" shape="download"
|
||||||
form="versements_activites"
|
form="versements_activites"
|
||||||
formaction="generer_recus.php?type=activite&format=pdf"
|
formaction="generer_recus.php?type=activite&format=pdf"
|
||||||
|
|
@ -30,11 +21,9 @@
|
||||||
form="versements_activites"
|
form="versements_activites"
|
||||||
formaction="generer_recus.php?type=activite&format=print"
|
formaction="generer_recus.php?type=activite&format=print"
|
||||||
onclick="return verifierChoix(this.form)"}
|
onclick="return verifierChoix(this.form)"}
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
<form method="post" target="_blank" id="versements_activites" data-disable-progress="1">
|
<form method="post" target="_blank" id="versements_activites">
|
||||||
|
|
||||||
{* Itération sur les versements *}
|
{* Itération sur les versements *}
|
||||||
{foreach from=$lesVersements key="rang" item="versement"}
|
{foreach from=$lesVersements key="rang" item="versement"}
|
||||||
|
|
|
||||||
|
|
@ -4,36 +4,24 @@
|
||||||
<h2>Année {$annee_recu} : versements par personne</h2>
|
<h2>Année {$annee_recu} : versements par personne</h2>
|
||||||
|
|
||||||
<fieldset class="noprint">
|
<fieldset class="noprint">
|
||||||
<dl>
|
<input type="checkbox" class="check_global" id="check_global"
|
||||||
|
onclick="cocherDecocherToutesLesPersonnes(check_global)" />
|
||||||
<dd>
|
<label for="check_global">Cliquer pour cocher toutes les lignes</label>
|
||||||
<label class="strong">Total des cases cochées : </label>
|
<button type="button" data-icon="↑" class="icn-btn" id="close_details_personne"
|
||||||
<span class="total" id="total_general">0,00 €</span>
|
onclick="montrerMasquerDetails(this.id, 'details.personne', 'toutes les personnes')">
|
||||||
</dd>
|
Replier toutes les personnes</button>
|
||||||
<dd>
|
<br />
|
||||||
<input type="checkbox" class="check_global" id="check_global"
|
{button type="submit" label="Télécharger les reçus au format PDF" shape="download"
|
||||||
onclick="cocherDecocherToutesLesPersonnes(check_global, total_general)" />
|
form="versements_personnes"
|
||||||
<label for="check_global">Cliquer pour cocher toutes les lignes</label>
|
formaction="generer_recus.php?type=personne&format=pdf"
|
||||||
</dd>
|
onclick="return verifierChoix(this.form)"}
|
||||||
<dd>
|
{button type="submit" label="Imprimer les reçus" shape="print"
|
||||||
<button type="button" data-icon="↑" class="icn-btn" id="close_details_personne"
|
form="versements_personnes"
|
||||||
onclick="montrerMasquerDetails(this.id, 'details.personne', 'toutes les personnes')">
|
formaction="generer_recus.php?type=personne&format=print"
|
||||||
Replier toutes les personnes</button>
|
onclick="return verifierChoix(this.form)"}
|
||||||
</dd>
|
|
||||||
<dd>
|
|
||||||
{button type="submit" label="Télécharger les reçus au format PDF" shape="download"
|
|
||||||
form="versements_personnes"
|
|
||||||
formaction="generer_recus.php?type=personne&format=pdf"
|
|
||||||
onclick="return verifierChoix(this.form)"}
|
|
||||||
{button type="submit" label="Imprimer les reçus" shape="print"
|
|
||||||
form="versements_personnes"
|
|
||||||
formaction="generer_recus.php?type=personne&format=print"
|
|
||||||
onclick="return verifierChoix(this.form)"}
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
<form method="post" target="_dialog" id="versements_personnes" data-disable-progress="1">
|
<form method="post" target="_dialog" id="versements_personnes">
|
||||||
|
|
||||||
{* Itération sur les personnes *}
|
{* Itération sur les personnes *}
|
||||||
{foreach from=$lesVersements key="rang" item="versement"}
|
{foreach from=$lesVersements key="rang" item="versement"}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue