nouvelle version des structures de données

FossilOrigin-Name: ff5fc2aff4eab5aa2817d5b6183a5ab842bc701609fb255e97728a2a95e19c14
This commit is contained in:
engel 2022-02-10 16:05:24 +00:00
parent 2a7f5ad834
commit 341afe6a7b
9 changed files with 263 additions and 109 deletions

View file

@ -14,7 +14,6 @@ $versementsSelectionnes = array();
foreach ($lesLignes as $indice => $ligne) {
$versementsSelectionnes[] = $_SESSION['lesVersements'][$ligne];
}
// cumuler les versements d'une personne
$totalPersonnes = cumulerVersements($versementsSelectionnes);
@ -51,8 +50,8 @@ foreach ($totalPersonnes as $idPersonne => $personne) {
$personne->nomPrenom,
$lesMontants,
$personne->adresse,
$personne->ville,
$personne->codePostal
$personne->codePostal,
$personne->ville
);
// fabriquer le nom du fichier PDF
$nom = str_replace(' ', '_', $personne->nomPrenom);
@ -73,44 +72,36 @@ $fichierZip = Utils::makeArchive(
);
/**
* Cumuler les versements de chaque personne par tarif et activité
* Cumuler les versements de chaque personne par tarif
* @param tableau des versements
* @return tableau des versements cumulés
*/
function cumulerVersements($versements)
{
$totalPersonnes = array();
$idActivite_courant = -1;
$idTarif_courant = -1;
$idPersonne_courant = -1;
$totalVersements = 0;
foreach ($versements as $ligne) {
if (
$ligne->idActivite != $idActivite_courant ||
$ligne->idTarif != $idTarif_courant ||
$ligne->idUser != $idPersonne_courant
) {
if ($idActivite_courant != -1) {
if ($idTarif_courant != -1) {
$totalPersonnes["$idPersonne_courant"]->ajouterVersement(
$idActivite_courant,
$_SESSION['lesTarifs'][$idTarif_courant]->idActivite,
$idTarif_courant,
$totalVersements/100
);
}
$idActivite_courant = $ligne->idActivite;
$idTarif_courant = $ligne->idTarif;
$idPersonne_courant = $ligne->idUser;
$totalVersements = $ligne->versement;
// créer les infos de la personne, sauf si elle est déjà présente
if (!array_key_exists($idPersonne_courant, $totalPersonnes)) {
$totalPersonnes["$idPersonne_courant"] = new Personne(
$ligne->idUser,
$ligne->nom,
$ligne->adresse,
$ligne->ville,
$ligne->codePostal,
$ligne->courriel
);
if (!array_key_exists($idPersonne_courant, $totalPersonnes))
{
$totalPersonnes["$idPersonne_courant"] =
Personne::copier($_SESSION['membresDonateurs'][$ligne->idUser]);
}
} else {
// cumuler versements
@ -119,7 +110,7 @@ function cumulerVersements($versements)
}
// et le dernier
$totalPersonnes["$idPersonne_courant"]->ajouterVersement(
$idActivite_courant,
$_SESSION['lesTarifs'][$idTarif_courant]->idActivite,
$idTarif_courant,
$totalVersements/100
);

View file

@ -45,8 +45,8 @@ foreach ($versementsSelectionnes as $idPersonne => $personne) {
$personne->nom,
array($personne->montant/100),
$personne->adresse,
$personne->ville,
$personne->codePostal
$personne->codePostal,
$personne->ville
);
// fabriquer le nom du fichier PDF
$nom = str_replace(' ', '_', $personne->nom);

View file

@ -2,41 +2,144 @@
namespace Garradin;
use Garradin\Plugin\RecusFiscaux\Activite;
use Garradin\Plugin\RecusFiscaux\Personne;
use Garradin\Plugin\RecusFiscaux\Tarif;
use Garradin\Plugin\RecusFiscaux\Utils;
// vérifier si l'année a bien été sélectionnée au préalable
$_SESSION['annee_recu'] = f('annee_recu');
// error_log("va.php::annee_recu = (" .$_SESSION['annee_recu'] . ")");
if (! isset($_SESSION['annee_recu']) || $_SESSION['annee_recu'] == "") {
\Garradin\Utils::redirect(PLUGIN_URL . 'index.php');
}
// récupérer les infos du formulaire
$lesTarifs = f('tarifs') ?: [];
$tarifsSelectionnes = f('tarifs') ?: [];
// taux de réduction associés
$lesTaux = array();
foreach ($lesTarifs as $idTarif) {
$tauxSelectionnes = array();
foreach ($tarifsSelectionnes as $idTarif) {
$nomRadio = "taux_reduction_" . $idTarif;
$valRadio = f("$nomRadio");
$lesTaux[] = $valRadio ? $valRadio: $plugin->getConfig()->reduction[0]->taux;
$tauxSelectionnes[] = $valRadio ? $valRadio: $plugin->getConfig()->reduction[0]->taux;
}
// error_log("Tarifs = " . print_r($lesTarifs, true) . "\n");
// error_log("Réducs = " . print_r($lesTaux, true) . "\n");
// obtenir les instances de tarifs correspondant à la sélection
$lesTarifs = array();
foreach (Utils::getTarifs($tarifsSelectionnes) as $ot) {
$lesTarifs[$ot->id] = Tarif::copier($ot);
}
$_SESSION['lesTarifs'] = $lesTarifs;
// liste des versements correspondants
$_SESSION['lesVersements'] = Utils::getVersementsActivite($_SESSION['annee_recu'], $lesTarifs);
// activités correspondants aux tarifs sélectionnés
$lesActivites = array();
foreach (Utils::getActivites($tarifsSelectionnes) as $activite) {
$lesActivites[$activite->id] = Activite::copier($activite);
}
$_SESSION['lesActivites'] = $lesActivites;
// liste des activités
$activites = Utils::getActivites();
foreach ($activites as $num => $activite)
// versements correspondants aux tarifs sélectionnés
$_SESSION['lesVersements'] = Utils::getVersementsTarifs($_SESSION['annee_recu'], $tarifsSelectionnes);
// membres donateurs
$membresDonateurs = array();
$versementsMembres = Utils::getVersementsTotaux($_SESSION['annee_recu']);
foreach ($versementsMembres as $versement) {
$membresDonateurs[$versement->idUser] = new Personne($versement->idUser,
$versement->nom,
$versement->adresse,
$versement->codePostal,
$versement->ville);
}
$_SESSION['membresDonateurs'] = $membresDonateurs;
// ------------------------------------------------------------------------
// fonctions pour l'affichage
// afficher les informations d'une activité et d'un tarif
$tpl->register_function('afficher_debut_tarif', function ($params)
{
// ajouter les tarifs de l'activité
$activite->{'tarifs'} = Utils::getTarifs($activite->{'idActivite'});
}
$versement = $params['versement'];
$idTarif = $versement->idTarif;
$tarif = $_SESSION['lesTarifs'][$idTarif];
$idActivite = $tarif->idActivite;
$activite = $_SESSION['lesActivites'][$idActivite];
$out = '<details open="open">
<summary class="activite">';
$out .= sprintf('
<h3>Activité « %s »</h3>', $activite->label);
if (!empty($activite->description)) {
$out .= sprintf('
<h4>%s</h4>', $activite->description);
}
$out .= sprintf('
<h4>tarif « %s »', $tarif->label);
if ($tarif->montant > 0) {
$out .= sprintf(' montant : %.2f €', $tarif->montant/100);
} else {
$out .= ' montant : libre';
}
$out .= '</h4>
</summary>';
return $out;
});
// 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>',
$personne->nomPrenom,
$idVersement);
$out .= sprintf('
<fieldset class="versements" id="versements_%s">',
$idVersement);
$out .= sprintf('
<input type="checkbox" class="check_%s" id="check_%s"',
$idVersement,
$idVersement);
$out .= sprintf(' onclick="cocherDecocherPersonne(check_%s, total_%s)" />',
$idVersement,
$idVersement);
$out .= sprintf('
<label for="check_%s">Cliquer pour cocher toutes les lignes</label>',
$idVersement);
$out .= '<br />
<hr>';
return $out;
});
// afficher un versement
$tpl->register_function('afficher_versement', function ($params)
{
$versement = $params['versement'];
$rang = $params['rang'];
$idVersement = $versement->idTarif . "_" . $versement->idUser;
$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>
<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;
});
// ------------------------------------------------------------------------
// préparation de l'affichage
$tpl->assign('lesActivites', $lesActivites);
$tpl->assign('lesTarifs', $lesTarifs);
$tpl->assign('lesVersements', $_SESSION['lesVersements']);
$tpl->assign('listeParActiviteEtTarif', $activites);
$tpl->assign('plugin_css', ['style.css']);
// envoyer au template