recusfiscaux/www/admin/generer_activites.php

301 lines
7.4 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace Garradin;
use Garradin\Plugin\RecusFiscaux\RecusHTML;
use Garradin\Plugin\RecusFiscaux\Utils;
use Garradin\Plugin\RecusFiscaux\Personne;
// récupérer les lignes sélectionnées
$lesLignes = f('selected');
// filtrer les versements sélectionnés
$versementsSelectionnes = array();
foreach ($lesLignes as $ligne) {
$versementsSelectionnes[] = $_SESSION['lesVersements'][$ligne];
}
// cumuler les versements d'une personne
$totalPersonnes = cumulerVersements($versementsSelectionnes);
// informations de l'association
$nomAsso = Utils::getNomAsso();
$adresseAsso = Utils::getAdresseAsso();
$signature =
(null !== $plugin->getConfig('signature')) ?
\Garradin\Files\Files::get($plugin->getConfig('signature'))->fullpath() :
"";
$objetAsso = $plugin->getConfig('objet_asso');
$nomResponsable = $plugin->getConfig('nom_responsable');
$fonctionResponsable = $plugin->getConfig('fonction_responsable');
// articles du CGI
$articlesCGI = array();
foreach ($plugin->getConfig('articlesCGI') as $article)
{
if ($article->valeur == 1) {
$articlesCGI[] = $article->titre;
}
}
/**
* insérer une feuille de style
*/
$tpl->register_function('ajouter_style', function()
{
$out = '
@page
{
size: A4 portrait;
margin: 1cm;
}
body
{
font-family: Serif;
font-size: 11pt;
background-color: white;
}
#logoCerfa
{
line-height: 40px;
width: 100px;
background-color: rgb(0, 0, 128);
border-radius : 50%;
text-align : center;
margin : 2mm;
}
.centre
{
display : inline-block;
vertical-align : middle;
line-height: 20px; /* moitié de la hauteur du logo */
color : white;
font-weight: bold;
font-size : 14pt;
}
#numCerfa
{
width: 100px; /* largeur du logo */
text-align: center;
}
#titre
{
margin : 0 4cm 0 4cm;
text-align : center;
font-size : 14pt;
font-weight: bold;
}
#articles
{
margin : 0 4cm 0 4cm; /* idem titre */
text-align : center;
}
#numRecu
{
text-align : right;
}
#final
{
height : 5cm;
}
.rubrique
{
background-color : rgb(200, 200, 250);
padding : 2mm;
}
.cartouche
{
margin : 2mm auto;
padding : 0 2mm;
border : 1px solid rgb(0, 0, 128);
border-radius : 8px;
}
.titre, .important
{
font-weight:bold;
}
#signature
{
display: block;
max-width : 7cm;
max-height : 2cm;
margin: 0 auto;
padding-bottom : 2mm;
}
#fonction, #nom
{
text-align : center;
}
';
return $out;
});
/**
* imprimer un montant et le taux de réduction associé
* @param montant
* @param taux
*/
$tpl->register_function('imprimer_montant', function ($params)
{
$montant = $params['montant'];
$taux = $params['taux'];
$valeur = number_format($montant, 2, ',', '');
$libelle = Utils::getLigneReduction($taux);
$out = sprintf('
<li>la somme de <b>%s euros</b>',
$valeur);
if ($libelle != "") {
$out .= sprintf(' (%s)', $libelle);
}
$out .= '
</li>
';
return $out;
});
/**
* imprimer les articles du code général des impôts concernés
* @param articles
*/
$tpl->register_function('imprimer_articles', function ($params)
{
$articlesCGI = $params['articles'];
$nbArticles = count($articlesCGI);
$out = "<p>Le bénéficiaire certifie sur lhonneur que les dons et versements quil reçoit ouvrent droit à la réduction d'impôt prévue";
if ($nbArticles == 1)
{
$out .= sprintf(' à larticle %s du code général des impôts</p>', articlesCGI[0]);
}
else if ($nbArticles > 1)
{
$out .= " aux articles ";
for ($i = 0; $i < $nbArticles; ++$i) {
$out .= sprintf("%s", $articlesCGI[$i]);
if ($i < $nbArticles - 2) {
$out .= ", ";
}
else if ($i == $nbArticles - 2) {
$out .= " et ";
}
}
$out .= " du code général des impôts.</p>";
}
return $out;
});
$listeFichiers = array(); // fichiers pdf générés
foreach ($totalPersonnes as $idPersonne => $personne)
{
// extraire les montants des versements
$lesMontants = array();
foreach ($personne->versements as $versement)
{
if (array_key_exists($versement->tauxReduction, $lesMontants)) {
$lesMontants[$versement->tauxReduction] += $versement->montant;
}
else {
$lesMontants[$versement->tauxReduction] = $versement->montant;
}
}
$tpl->assign(compact('nomAsso',
'adresseAsso',
'objetAsso',
'nomResponsable',
'fonctionResponsable',
'articlesCGI',
'signature'
));
$tpl->assign('anneeRecu', $_SESSION['annee_recu']);
$tpl->assign('numero', $personne->id);
$tpl->assign('nom', $personne->nomPrenom);
$tpl->assign('lesMontants', $lesMontants);
$tpl->assign('adresse', $personne->adresse);
$tpl->assign('codePostal', $personne->codePostal);
$tpl->assign('ville', $personne->ville);
// $tpl->assign('styleSheet', 'pdf.css');
ob_start();
$tpl->display(PLUGIN_ROOT . '/templates/recuHTML.tpl');
$html = ob_get_clean();
// fabriquer le fichier PDF
$nomPDF = \Garradin\Utils::filePDF($html);
// changer le nom du fichier
$nom = str_replace(' ', '_', $personne->nomPrenom);
$nom = str_replace("'", "", $nom);
$nomFichier = "recu_" . $_SESSION['annee_recu'] . "_" . $nom . ".pdf";
rename($nomPDF, $nomFichier);
// ajouter le nom du fichier à la liste pour mettre dans une archive
$listeFichiers[] = $nomFichier;
}
// faire une archive zip
$fichierZip = Utils::makeArchive(
$listeFichiers,
$_SESSION['annee_recu'],
PLUGIN_ROOT . "/zip"
);
/**
* Cumuler les versements de chaque personne par tarif
* @param tableau des versements triés par idTarif, idUser, date
* @return tableau des versements cumulés : id => Personne
*/
function cumulerVersements($versements)
{
$totalPersonnes = array();
$idTarif_courant = -1;
$idPersonne_courant = -1;
$totalVersements = 0;
foreach ($versements as $ligne)
{
if (
$ligne->idTarif != $idTarif_courant ||
$ligne->idUser != $idPersonne_courant
)
{
if ($idTarif_courant != -1) {
$totalPersonnes[$idPersonne_courant]->ajouterVersement(
$_SESSION['lesTarifs'][$idTarif_courant]->idActivite,
$idTarif_courant,
$totalVersements/100,
$_SESSION['tauxSelectionnes'][$idTarif_courant]
);
}
$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"] = $_SESSION['membresDonateurs'][$ligne->idUser]->clone();
}
} else {
// cumuler versements
$totalVersements += $ligne->versement;
}
}
// et le dernier
$totalPersonnes[$idPersonne_courant]->ajouterVersement(
$_SESSION['lesTarifs'][$idTarif_courant]->idActivite,
$idTarif_courant,
$totalVersements/100,
$_SESSION['tauxSelectionnes'][$idTarif_courant]
);
return $totalPersonnes;
}