From 8bde972727c530d9b46ac174a91b830129f223c0 Mon Sep 17 00:00:00 2001 From: engel <> Date: Thu, 31 Mar 2022 19:55:30 +0000 Subject: [PATCH] =?UTF-8?q?G=C3=A9n=C3=A9ration=20re=C3=A7us=20avec=20sque?= =?UTF-8?q?lette=20brindille?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FossilOrigin-Name: d9f628dbf847efbfe4cbd9fbaf67a88c50375b0edafd9e7fe4259eb0d03e0230 --- lib/RecusHTML.php | 257 ------------------------------------ templates/recu.skel | 141 ++++++++++++++++++++ www/admin/action.php | 1 + www/admin/generer_recus.php | 155 ++++++++++++++-------- 4 files changed, 243 insertions(+), 311 deletions(-) delete mode 100644 lib/RecusHTML.php create mode 100644 templates/recu.skel diff --git a/lib/RecusHTML.php b/lib/RecusHTML.php deleted file mode 100644 index eb5eaf2..0000000 --- a/lib/RecusHTML.php +++ /dev/null @@ -1,257 +0,0 @@ -nomAsso = $nomAsso; - $this->adresseAsso = $adresseAsso; - $this->logoAsso = $logoAsso; - $this->objetAsso = $objetAsso; - $this->nomResponsable = $nomResponsable; - $this->fonctionResponsable = $fonctionResponsable; - $this->villeAsso = $villeAsso; - $this->signature = $signature; - $this->articlesCGI = $articlesCGI; - $this->html = $this->entete(); - } - - function get() - { - return $this->html; - } - - // imprimer le reçu - function imprimer_recu($annee_recu, - $numero, - $nom, - $lesMontants, - $adresse, - $code_postal, - $ville) - { - ob_start(); -echo << -

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

- - - -
-

Bénéficiaire des versements

-

Association « {$this->nomAsso} »
- {$this->adresseAsso}
- Objet : {$this->objetAsso}

-
- -
-

Donateur

-

{$nom}
- {$adresse}
- {$code_postal} {$ville}

-
- -
-

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

- \n"; - $this->imprimer_description("Date des versements :", - "année {$annee_recu}"); - $this->imprimer_description("Nature du don : ", - "Numéraire"); - $this->imprimer_description("Mode de versement : ", - "chèque et/ou virement"); - - // articles du CGI - $nbArticles = count($this->articlesCGI); - if ($nbArticles == 1) - { - echo "

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 à l’article "; - printf("%s du code général des impôts

\n", $this->articlesCGI[0]); - } - else if ($nbArticles > 1) - { - echo "

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 aux articles "; - for ($i = 0; $i < $nbArticles; ++$i) { - printf("%s", $this->articlesCGI[$i]); - if ($i < $nbArticles - 2) { - echo ", "; - } - else if ($i == $nbArticles - 2) { - echo " et "; - } - } - echo " du code général des impôts

\n"; - } - echo "
\n"; - - // cartouche final - $date = date("j/m/Y"); -echo << -

{$this->villeAsso} le {$date}
- -

-
- $this->nomResponsable
- $this->fonctionResponsable -
- - - -FDD; - $this->html .= ob_get_clean(); - } - - // imprimer un libellé précédé de son titre en gras - function imprimer_description($titre, $libelle) - { - echo <<{$titre} {$libelle}

- -FDD; - } - - // imprimer le montant du versement et un libellé - function imprimer_montant($montant, $libelle = "") - { - $valeur = number_format($montant, 2, ',', ''); - echo "
  • la somme de ***{$valeur}*** euros"; - if ($libelle != "") { - echo " ({$libelle})"; - } - echo "
  • \n"; - } - - protected function entete() - { - ob_start(); -echo << - - - - - - -
    - -

    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

    - -FDD; - return ob_get_clean(); - } -} diff --git a/templates/recu.skel b/templates/recu.skel new file mode 100644 index 0000000..8638f19 --- /dev/null +++ b/templates/recu.skel @@ -0,0 +1,141 @@ + + + + + + + + +
    + +

    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 {{$annee_recu}}/{{$numero}}

    +
    +
    + +
    +

    Bénéficiaire des versements

    +

    Association « {{$config.nom_asso}} »
    + {{$config.adresse_asso}}
    + Objet : {{$objet_asso}}

    +
    + +
    +

    Donateur

    +

    {{$nom}}
    + {{$adresse}}
    + {{$code_postal}} {{$ville}}

    +
    + +
    +

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

    +
      + {{#versements}} +
    • + la somme de ***{{$montant|raw|money}}*** euros + {{if $libelle != ""}} + ({{$libelle}}) + {{/if}} +
    • + {{/versements}} +
    + + {{#informations}} +

    {{$titre}} {{$libelle}}

    + {{/informations}} + +

    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 {{$texteArticles}} du code général des impôts.

    +
    + +
    +

    {{$ville_asso}} le {{$date}}
    + +

    +
    + {{$nom_responsable}}
    + {{$fonction_responsable}} +
    +
    + + diff --git a/www/admin/action.php b/www/admin/action.php index 421e8be..53bce04 100644 --- a/www/admin/action.php +++ b/www/admin/action.php @@ -130,6 +130,7 @@ $tpl->register_function('afficher_versement', function ($params) }); // ------------------------------------------------------------------------ +// aiguillage // ------------------------------------------------------------------------ if ($_GET['action'] == 'personne') { diff --git a/www/admin/generer_recus.php b/www/admin/generer_recus.php index d2d3868..18d2965 100644 --- a/www/admin/generer_recus.php +++ b/www/admin/generer_recus.php @@ -4,15 +4,54 @@ namespace Garradin; use Garradin\Files\Files; use Garradin\Entities\Files\File; +use Garradin\UserTemplate\UserTemplate; -use Garradin\Plugin\RecusFiscaux\RecusHTML; +//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'); +// signature +$signature = + (null !== $plugin->getConfig('signature')) ? + Files::get($plugin->getConfig('signature'))->fullpath() : + ""; + +// logo +$logo_file = Files::get(File::CONTEXT_CONFIG . '/logo.png'); +$logo_asso = + (null !== $logo_file) ? + Files::get($logo_file->path)->fullpath() : + ""; + +// articles du CGI +$articlesCGI = array(); +foreach ($plugin->getConfig('articlesCGI') as $article) +{ + if ($article->valeur == 1) { + $articlesCGI[] = $article->titre; + } +} +$nbArticles = count($articlesCGI); +if ($nbArticles == 1) +{ + $texteArticles = 'à l’article ' . $articlesCGI[0]; +} +elseif ($nbArticles > 1) +{ + $texteArticles = 'aux articles '; + for ($i = 0; $i < $nbArticles; ++$i) { + $texteArticles .= $articlesCGI[$i]; + if ($i < $nbArticles - 2) { + $texteArticles .= ", "; + } + else if ($i == $nbArticles - 2) { + $texteArticles .= " et "; + } + } +} // filtrer les versements sélectionnés +$lesLignes = f('selected'); $versementsSelectionnes = array(); foreach ($lesLignes as $ligne) { $versementsSelectionnes[] = $_SESSION['lesVersements'][$ligne]; @@ -28,69 +67,77 @@ elseif ($_GET['type'] == 'activite') $totalPersonnes = cumulerVersementsTarif($versementsSelectionnes); } -// informations pour les reçus -$nomAsso = $config->get('nom_asso'); -$adresseAsso = $config->get('adresse_asso'); -$signature = - (null !== $plugin->getConfig('signature')) ? - Files::get($plugin->getConfig('signature'))->fullpath() : - ""; - -// logo -$logo_file = Files::get(File::CONTEXT_CONFIG . '/logo.png'); -$logoAsso = - (null !== $logo_file) ? - Files::get($logo_file->path)->fullpath() : - ""; - -// articles du CGI -$articlesCGI = array(); -foreach ($plugin->getConfig('articlesCGI') as $article) -{ - if ($article->valeur == 1) { - $articlesCGI[] = $article->titre; - } -} - // générer les reçus -$listeFichiers = array(); // fichiers pdf générés +$listeFichiersPDF = array(); foreach ($totalPersonnes as $idPersonne => $personne) { - $html = new RecusHTML( - $nomAsso, - $adresseAsso, - $logoAsso, - $plugin->getConfig('objet_asso'), - $plugin->getConfig('nom_responsable'), - $plugin->getConfig('fonction_responsable'), - $plugin->getConfig('ville_asso'), - $articlesCGI, - $signature - ); + $tpl = new UserTemplate(); + $tpl->setSource(PLUGIN_ROOT . '/templates/recu.skel'); - $html->imprimer_recu( - $_SESSION['annee_recu'], - $personne->id, - $personne->nomPrenom, - $personne->versements, - $personne->adresse, - $personne->codePostal, - $personne->ville + $tpl->assignArray(compact('signature', 'logo_asso', 'texteArticles')); + $tpl->assign('objet_asso', $plugin->getConfig('objet_asso')); + $tpl->assign('nom_responsable', $plugin->getConfig('nom_responsable')); + $tpl->assign('fonction_responsable', $plugin->getConfig('fonction_responsable')); + $tpl->assign('ville_asso', $plugin->getConfig('ville_asso')); + $tpl->assign('annee_recu', $_SESSION['annee_recu']); + $tpl->assign('numero', $personne->id); + $tpl->assign('nom', $personne->nomPrenom); + $tpl->assign('adresse', $personne->adresse); + $tpl->assign('code_postal', $personne->codePostal); + $tpl->assign('ville', $personne->ville); + $tpl->assign('date', date("j/m/Y")); + + // les versements + $tpl->registerSection('versements', + function () use($personne) + { + foreach ($personne->versements as $taux => $montant) + { + $ligne['montant'] = $montant; + $ligne['libelle'] = Utils::getLigneReduction($taux); + yield $ligne; + } + }); + + // mentions complémentaires + $donnees = array( + 'Date des versements : ' => "année " . $_SESSION['annee_recu'], + 'Nature du don : ' => "Numéraire", + 'Mode de versement : ' => "chèque et/ou virement" ); + $infos = array(); + foreach ($donnees as $titre => $libelle) + { + $elem = new \stdClass(); + $elem->titre = $titre; + $elem->libelle = $libelle; + $infos[] = $elem; + } + + $tpl->registerSection('informations', + function () use ($infos) + { + foreach ($infos as $elem) + { + yield (array) $elem; + } + }); + // fabriquer le fichier PDF - $nomPDF = \Garradin\Utils::filePDF($html->get()); + $result = $tpl->fetch(); + $nomPDF = \Garradin\Utils::filePDF($result); // 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; + $listeFichiersPDF[] = $nomFichier; } // faire une archive zip $fichierZip = Utils::makeArchive( - $listeFichiers, + $listeFichiersPDF, $_SESSION['annee_recu'], PLUGIN_ROOT . "/zip" ); @@ -114,7 +161,7 @@ function cumulerVersementsPersonne($versements) { $totalPersonnes[$idPersonneCourant]->ajouterVersement( $_SESSION['taux_reduction'], - $totalVersements/100 + $totalVersements ); } $idPersonneCourant = $ligne->idUser; @@ -132,7 +179,7 @@ function cumulerVersementsPersonne($versements) // et le dernier $totalPersonnes[$idPersonneCourant]->ajouterVersement( $_SESSION['taux_reduction'], - $totalVersements/100 + $totalVersements ); return $totalPersonnes; } @@ -160,7 +207,7 @@ function cumulerVersementsTarif($versements) // changement de tarif ou de personne $totalPersonnes[$idPersonneCourant]->ajouterVersement( $_SESSION['tauxSelectionnes'][$idTarifCourant], - $totalVersements/100 + $totalVersements ); } $idTarifCourant = $ligne->idTarif; @@ -179,7 +226,7 @@ function cumulerVersementsTarif($versements) // et le dernier $totalPersonnes[$idPersonneCourant]->ajouterVersement( $_SESSION['tauxSelectionnes'][$idTarifCourant], - $totalVersements/100 + $totalVersements ); return $totalPersonnes; }