From 7c197abbc8787d471c4bccac7c3dade5efaea8c6 Mon Sep 17 00:00:00 2001 From: engel <> Date: Thu, 10 Mar 2022 17:12:42 +0000 Subject: [PATCH] =?UTF-8?q?test=20g=C3=A9n=C3=A9ration=20re=C3=A7u=20html?= =?UTF-8?q?=20avec=20template?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FossilOrigin-Name: 1070052b9c2d7df2121a02c7ad2b9653459d96e66bf58ad02ef88712e45e16e0 --- templates/recuHTML.tpl | 67 ++++++++++ www/admin/generer_personnes.php | 213 ++++++++++++++++++++++++++++---- 2 files changed, 258 insertions(+), 22 deletions(-) create mode 100644 templates/recuHTML.tpl diff --git a/templates/recuHTML.tpl b/templates/recuHTML.tpl new file mode 100644 index 0000000..39cc87e --- /dev/null +++ b/templates/recuHTML.tpl @@ -0,0 +1,67 @@ + + + + + +{* + + +*} + + + + +
+
+ Cerfa +
+
+ N° 11580*4 +
+

Reçu au titre des dons à certains organismes d'intérêt général

+

Articles 200, 238 bis et 978 du code général des impôts

+
+

Reçu numéro {$anneeRecu}/{$numero}

+
+
+ +
+

Bénéficiaire des versements

+

Association « {$nomAsso} »

+

{$adresseAsso}

+

Objet : {$objetAsso}

+
+ +
+

Donateur

+

{$nom}

+

{$adresse}

+

{$codePostal} {$ville}

+
+ +
+

Le bénéficiaire reconnaît avoir reçu au titre des dons et versements ouvrant droit à réduction + d'impôt :

+ +

Date des versements : année {$anneeRecu}

+

Nature du don : Numéraire

+

Mode de versement : chèque et/ou virement

+ {imprimer_articles articles=$articlesCGI} +
+ +
+ +

Rennes le {$date}

+ +

{$nomResponsable}

+

{$fonctionResponsable}

+
+ + + \ No newline at end of file diff --git a/www/admin/generer_personnes.php b/www/admin/generer_personnes.php index 524d3d1..bcd107a 100644 --- a/www/admin/generer_personnes.php +++ b/www/admin/generer_personnes.php @@ -15,13 +15,16 @@ foreach ($lesLignes as $ligne) { $versementsSelectionnes[] = $_SESSION['lesVersementsTotaux'][$ligne]; } -// générer les reçus +// 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(); @@ -31,34 +34,199 @@ foreach ($plugin->getConfig('articlesCGI') as $article) $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(' +
  • la somme de %s euros', + $valeur); + if ($libelle != "") { + $out .= sprintf(' (%s)', $libelle); + } + $out .= ' +
  • +'; + 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 = "

    Le bénéficiaire certifie sur l’honneur que les dons et versements qu’il reçoit ouvrent droit à la réduction d'impôt prévue"; + if ($nbArticles == 1) + { + $out .= sprintf(' à l’article %s du code général des impôts

    ', 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.

    "; + } + return $out; +}); + $listeFichiers = array(); // fichiers pdf générés foreach ($versementsSelectionnes as $ligne) { - // générer un fichier par reçu - $html = new RecusHTML( - $nomAsso, - $adresseAsso, - $plugin->getConfig('objet_asso'), - $plugin->getConfig('nom_responsable'), - $plugin->getConfig('fonction_responsable'), - $articlesCGI, - $signature - ); - + //$ligne = $versementsSelectionnes[0]; // extraire les montants des versements $lesMontants[$_SESSION['taux_reduction']] = $ligne->versement/100; $personne = $_SESSION['membresDonateurs'][$ligne->idUser]; - $html->imprimer_recu( - $_SESSION['annee_recu'], - $personne->id, - $personne->nomPrenom, - $lesMontants, - $personne->adresse, - $personne->codePostal, - $personne->ville - ); + + $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'); + // $tpl->assign('styleSheet', \Garradin\PLUGIN_URL . 'pdf.css'); + //$tpl->assign('plugin_css', ['pdf.css']); + + ob_start(); + $tpl->display(PLUGIN_ROOT . '/templates/recuHTML.tpl'); + $html = ob_get_clean(); + // fabriquer le fichier PDF - $nomPDF = \Garradin\Utils::filePDF($html->get()); + $nomPDF = \Garradin\Utils::filePDF($html); // changer le nom du fichier $nom = str_replace(' ', '_', $personne->nomPrenom); $nom = str_replace("'", "", $nom); @@ -66,6 +234,7 @@ foreach ($versementsSelectionnes as $ligne) rename($nomPDF, $nomFichier); // ajouter le nom du fichier à la liste pour mettre dans une archive $listeFichiers[] = $nomFichier; + } // faire une archive zip