source: spip-zone/_plugins_/Association/Associaspip/exec/export_compteresultats_pdf.php @ 59760

Last change on this file since 59760 was 59760, checked in by gildas.cotomale@…, 9 years ago

revue de l'exportation des comptes de résultats (ensemble encore perfectible et modulable)

File size: 15.4 KB
Line 
1<?php
2
3/* * *************************************************************************\
4 *  Associaspip, extension de SPIP pour gestion d'associations             *
5 *                                                                         *
6 *  Copyright (c) 2007 Bernard Blazin & Fran�ois de Montlivault (V1)       *
7 *  Copyright (c) 2010-2011 Emmanuel Saint-James & Jeannot Lapin (V2)      *
8 *  Ecrit par Marcel BOLLA en 12/2011                                      *
9 *                                                                         *
10 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
11 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
12  \************************************************************************** */
13
14if (!defined('_ECRIRE_INC_VERSION'))
15        return;
16
17// Export du Compte de Resultat au format Pdf
18function exec_export_compteresultats_pdf()
19{
20        if (!autoriser('associer', 'export_compte_resultats')) {
21                include_spip('inc/minipres');
22                echo minipres();
23        } else {
24                $var = _request('var');
25                $pdf = new EXPORT_PDF();
26                $pdf->SetFont('Arial', '', 12);
27                $pdf->AddPage();
28                $pdf->init($var);
29                $pdf->enTete();
30                $pdf->lesCharges($GLOBALS['association_metas']['classe_charges']);
31                $pdf->lesProduits($GLOBALS['association_metas']['classe_produits']);
32                $pdf->leResultat();
33                $pdf->lesContributionsVolontaires($GLOBALS['association_metas']['classe_contributions_volontaires']);
34                $pdf->leFichier();
35        }
36}
37
38define('FPDF_FONTPATH', 'font/');
39include_spip('fpdf');
40include_spip('inc/charsets');
41include_spip('inc/association_plan_comptable');
42
43class EXPORT_PDF extends FPDF {
44
45        var $largeur = 210; // format A4
46        var $hauteur = 297;
47        var $xx = 0; // coin haut gauche 1ère boite
48        var $yy = 0;
49        var $marge_gauche = 10;
50        var $marge_droite = 10;
51        var $marge_haut = 10;
52        var $marge_bas = 10;
53        var $icone_h = 20;
54        var $icone_v = 20;
55        var $space_v = 2;
56        var $space_h = 2;
57        var $largeur_utile = 0; // largeur sans les marges droites et gauches
58        var $largeur_pour_titre = 0; // largeur utile sans icone
59        var $exercice;
60        var $join;
61        var $sel;
62        var $where;
63        var $having;
64        var $order;
65        var $total_charges;
66        var $total_produits;
67
68        function init($var) {
69                $tableau = unserialize(rawurldecode($var));
70                $this->exercice = $tableau[0];
71                $this->join = $tableau[1];
72                $this->sel = $tableau[2];
73                $this->where = $tableau[3];
74                $this->having = $tableau[4];
75                $this->order = $tableau[5];
76
77                $this->largeur_utile = $this->largeur-$this->marge_gauche-$this->marge_droite;
78                $this->largeur_pour_titre = $this->largeur_utile-$this->icone_h-3*$this->space_h;
79
80                $this->xx = $this->marge_gauche;
81                $this->yy = $this->marge_haut;
82
83                $this->total_charges = 0;
84                $this->total_produits = 0;
85
86                $this->SetAuthor('Marcel BOLLA');
87                $this->SetCreator('Associaspip & Fpdf');
88                $this->SetTitle('Module Comptabilite de Associaspip');
89                $this->SetSubject(_T('asso:cpte_resultat_titre_general'));
90        }
91
92        function Footer() {
93                //Positionnement a 2 fois la marge du bas
94                $this->SetY(-2*$this->marge_bas);
95                //Arial italique 8
96                $this->SetFont('Arial', 'I', 8);
97                //Couleur du texte en gris
98                $this->SetTextColor(128);
99                //Date et Numéro de page
100                $this->Cell(0, 10, html_entity_decode(_T('asso:cpte_resultat_pied_page_export_pdf') .' -- '. affdate(date('Y-m-d')) .' -- '. _T('Page') .' '. $this->PageNo()), 0, 0, 'C');
101        }
102
103        function enTete() {
104                // Les coordonnees courantes
105                $xc = $this->xx+$this->space_h;
106                $yc = $this->yy+$this->space_v;
107                $this->SetDrawColor(128);
108
109                // le logo du site
110                $logo = find_in_path('IMG/siteon0.jpg');
111//              $chercher_logo = charger_fonction('chercher_logo', 'inc');
112//              $logo = $chercher_logo(0, 'id_site');
113                if ($logo) {
114                        include_spip('/inc/filtres_images_mini');
115                        $this->Image(extraire_attribut(image_reduire($logo, $this->icone_h, $this->icone_v), 'src'), $xc, $yc, $this->icone_h);
116//                      $this->Image(extraire_attribut(image_reduire($logo[0], $this->icone_h, $this->icone_v), $xc, $yc, $this->icone_h), 'src'); // attention : que JPeG <http://forum.virtuemart.net/index.php?topic=75616.0>
117                }
118                //Arial gras 22
119                $this->SetFont('Arial', 'B', 22);
120                //Couleurs du cadre, du fond et du texte
121                $this->SetFillColor(235);
122                $this->SetTextColor(0);
123                //Titre centre
124                $xc += $this->space_h+($logo?$this->icone_h:0);
125                $this->SetXY($xc, $yc);
126                $this->Cell($logo?($this->largeur_pour_titre):($this->largeur_pour_titre+$this->icone_h-$this->space_h), 12, html_entity_decode(_T('asso:cpte_resultat_titre_general')), 0, 0, 'C', true);
127                $yc += 12;
128                //Saut de ligne
129                $this->Ln($this->space_v);
130                $yc += $this->space_v;
131
132                //Arial 12
133                $this->SetFont('Arial', '', 12);
134                //Couleur de fond
135                $this->SetFillColor(235);
136                //Sous titre Nom de l'association
137                $this->SetXY($xc, $yc);
138                $this->Cell($logo?$this->largeur_pour_titre:$this->largeur_pour_titre+$this->icone_h-$this->space_h, 6, utf8_decode(_T('Association').' : '. $GLOBALS['association_metas']['nom']), 0, 0, 'C', true);
139                $yc += 6;
140                //Saut de ligne
141                $this->Ln($this->space_v/2);
142                $yc += $this->space_v/2;
143
144                //Arial 12
145                $this->SetFont('Arial', '', 12);
146                //Couleur de fond
147                $this->SetFillColor(235);
148                //Sous titre Date début et fin de l'exercice
149                $this->SetXY($xc, $yc);
150                $this->Cell($logo?$this->largeur_pour_titre:$this->largeur_pour_titre+$this->icone_h-$this->space_h, 6, utf8_decode(_T('Exercice').' : ' . sql_getfetsel('intitule','spip_asso_exercices', 'id_exercice='.$this->exercice) ), 0, 0, 'C', true);
151                $yc += 6;
152                //Saut de ligne
153                $this->Ln($this->space_v);
154                $yc += $this->space_v;
155
156                // Rectangle tout autour de l'entete
157                $this->Rect($this->xx, $this->yy, $this->largeur_utile, $yc-$this->marge_haut);
158
159                // on sauve la position du curseur dans la page
160                $this->yy = $yc;
161        }
162
163        function lesCharges($classe) {
164                // Les coordonnees courantes
165                $xc = $this->xx+$this->space_h;
166                $y_orig = $this->yy+$this->space_v;
167                $yc = $y_orig+$this->space_v;
168
169                //Arial gras 14
170                $this->SetFont('Arial', 'B', 14);
171
172                //Couleurs du cadre, du fond et du texte
173                $this->SetFillColor(235);
174                $this->SetTextColor(0);
175
176                //Titre centre
177                $this->SetXY($xc, $yc);
178                $this->Cell($this->largeur_utile, 10, html_entity_decode(_T('asso:cpte_resultat_titre_charges')), 0, 0, 'C');
179                $yc += 10;
180
181                //Saut de ligne
182                $this->Ln($this->space_v);
183                $yc += $this->space_v;
184
185                $query = sql_select(
186                        "imputation, SUM(depense) AS valeurs, date_format(date, '%Y') AS annee".$this->sel, // select
187                        'spip_asso_comptes '.$this->join, // from
188                        $this->where, // where
189                        $this->order, // group by
190                        $this->order, // order by
191                        '', // limit
192                        $this->having.$classe // having
193                );
194                $chapitre = '';
195                $i = 0;
196
197                //Arial 12
198                $this->SetFont('Arial', '', 12);
199
200                while ($data = sql_fetch($query)) {
201                        // positionne le curseur
202                        $this->SetXY($xc, $yc);
203
204                        $new_chapitre = substr($data['code'], 0, 2);
205                        if ($chapitre!=$new_chapitre) {
206                                //Couleur de fond
207                                $this->SetFillColor(225);
208
209                                $this->Cell(20, 6, utf8_decode($new_chapitre), 0, 0, 'L', true);
210
211                                $this->Cell(($this->largeur_utile)-(2*$this->space_h+20), 6, utf8_decode(($GLOBALS['association_metas']['plan_comptable_prerenseigne']?association_plan_comptable_complet($new_chapitre):sql_getfetsel('intitule','spip_asso_plan',"code='$new_chapitre'"))), 0, 0, 'L', true);
212
213                                $chapitre = $new_chapitre;
214
215                                //Saut de ligne
216                                $this->Ln();
217                                $yc += 6;
218                        }
219
220                        //Couleur de fond
221                        $this->SetFillColor(245);
222
223                        // positionne le curseur
224                        $this->SetXY($xc, $yc);
225                        $this->Cell(20, 6, utf8_decode($data['code']), 0, 0, 'R', true);
226
227                        $this->Cell(($this->largeur_utile)-(2*$this->space_h+50), 6, utf8_decode($data['intitule']), 0, 0, 'L', true);
228                        $this->Cell(30, 6, association_nbrefr($data['valeurs']), 0, 0, 'R', true);
229
230                        $this->total_charges += $data['valeurs'];
231
232                        //Saut de ligne
233                        $this->Ln();
234                        $yc += 6;
235                }
236                // positionne le curseur
237                $this->SetXY($xc, $yc);
238
239                //Couleur de fond
240                $this->SetFillColor(215);
241
242                $this->Cell(($this->largeur_utile)-(2*$this->space_h+30), 6, html_entity_decode(_T('asso:cpte_resultat_total_charges')), 1, 0, 'R', true);
243                $this->Cell(30, 6, association_nbrefr($this->total_charges), 1, 0, 'R', true);
244                $yc += 6;
245
246                //Saut de ligne
247                $this->Ln($this->space_v);
248                $yc += $this->space_v;
249
250                // Rectangle tout autour
251                $this->Rect($this->xx, $y_orig, $this->largeur_utile, $yc-$y_orig);
252
253                // on sauve la position du curseur dans la page
254                $this->yy = $yc;
255        }
256
257        function lesProduits($classe) {
258                // Les coordonnees courantes
259                $xc = $this->xx+$this->space_h;
260                $y_orig = $this->yy+$this->space_v;
261                $yc = $y_orig+$this->space_v;
262
263                //Arial gras 14
264                $this->SetFont('Arial', 'B', 14);
265
266                //Couleurs du cadre, du fond et du texte
267                $this->SetFillColor(235);
268                $this->SetTextColor(0);
269
270                //Titre centre
271                $this->SetXY($xc, $yc);
272                $this->Cell($this->largeur_utile, 10, html_entity_decode(_T('asso:cpte_resultat_titre_produits')), 0, 0, 'C');
273                $yc += 10;
274
275                //Saut de ligne
276                $this->Ln($this->space_v);
277                $yc += $this->space_v;
278
279                $query = sql_select(
280                        "imputation, SUM(recette) AS valeurs, date_format(date, '%Y') AS annee".$this->sel, // select
281                        'spip_asso_comptes '.$this->join, // from
282                        $this->where, // where
283                        $this->order, // group by
284                        $this->order, // order by
285                        '', // limit
286                        $this->having.$classe // having
287                );
288                $chapitre = '';
289                $i = 0;
290
291                //Arial 12
292                $this->SetFont('Arial', '', 12);
293
294                while ($data = sql_fetch($query)) {
295                        // positionne le curseur
296                        $this->SetXY($xc, $yc);
297
298                        $new_chapitre = substr($data['code'], 0, 2);
299                        if ($chapitre!=$new_chapitre) {
300                                //Couleur de fond
301                                $this->SetFillColor(225);
302
303                                $this->Cell(20, 6, utf8_decode($new_chapitre), 0, 0, 'L', true);
304
305                                $this->Cell(($this->largeur_utile)-(2*$this->space_h+20), 6, utf8_decode(($GLOBALS['association_metas']['plan_comptable_prerenseigne']?association_plan_comptable_complet($new_chapitre):sql_getfetsel('intitule','spip_asso_plan',"code='$new_chapitre'"))), 0, 0, 'L', true);
306
307                                $chapitre = $new_chapitre;
308
309                                //Saut de ligne
310                                $this->Ln();
311                                $yc += 6;
312                        }
313
314                        //Couleur de fond
315                        $this->SetFillColor(245);
316
317                        // positionne le curseur
318                        $this->SetXY($xc, $yc);
319                        $this->Cell(20, 6, utf8_decode($data['code']), 0, 0, 'R', true);
320
321                        $this->Cell(($this->largeur_utile)-(2*$this->space_h+50), 6, utf8_decode($data['intitule']), 0, 0, 'L', true);
322                        $this->Cell(30, 6, association_nbrefr($data['valeurs']), 0, 0, 'R', true);
323
324                        $this->total_produits += $data['valeurs'];
325
326                        //Saut de ligne
327                        $this->Ln();
328                        $yc += 6;
329                }
330                // positionne le curseur
331                $this->SetXY($xc, $yc);
332
333                //Couleur de fond
334                $this->SetFillColor(215);
335
336                $this->Cell(($this->largeur_utile)-(2*$this->space_h+30), 6, html_entity_decode(_T('asso:cpte_resultat_total_produits')), 1, 0, 'R', true);
337                $this->Cell(30, 6, association_nbrefr($this->total_produits), 1, 0, 'R', true);
338                $yc += 6;
339
340                //Saut de ligne
341                $this->Ln($this->space_v);
342                $yc += $this->space_v;
343
344                // Rectangle tout autour
345                $this->Rect($this->xx, $y_orig, $this->largeur_utile, $yc-$y_orig);
346
347                // on sauve la position du curseur dans la page
348                $this->yy = $yc;
349        }
350
351        function leResultat() {
352                // Les coordonnees courantes
353                $xc = $this->xx+$this->space_h;
354                $y_orig = $this->yy+$this->space_v;
355                $yc = $y_orig+$this->space_v;
356
357                //Arial gras 14
358                $this->SetFont('Arial', 'B', 14);
359
360                //Couleurs du cadre, du fond et du texte
361                $this->SetFillColor(235);
362                $this->SetTextColor(0);
363
364                //Titre centre
365                $this->SetXY($xc, $yc);
366
367                $this->Cell($this->largeur_utile, 10, html_entity_decode(_T('asso:cpte_resultat_titre_resultat')), 0, 0, 'C');
368                $yc += 10;
369
370                //Saut de ligne
371                $this->Ln($this->space_v);
372                $yc += $this->space_v;
373
374                //Couleur de fond
375                $this->SetFillColor(215);
376
377                $res = $this->total_produits-$this->total_charges;
378                $this->SetXY($xc, $yc);
379                if ($res<0) {
380                        $this->Cell(($this->largeur_utile)-(2*$this->space_h+30), 6, html_entity_decode(_T('asso:cpte_resultat_perte')), 1, 0, 'R', true);
381                } else {
382                        $this->Cell(($this->largeur_utile)-(2*$this->space_h+30), 6, html_entity_decode(_T('asso:cpte_resultat_benefice')), 1, 0, 'R', true);
383                }
384                $this->Cell(30, 6, association_nbrefr($res), 1, 0, 'R', true);
385                $yc += 6;
386
387                //Saut de ligne
388                $this->Ln($this->space_v);
389                $yc += $this->space_v;
390
391                // Rectangle tout autour
392                $this->Rect($this->xx, $y_orig, $this->largeur_utile, $yc-$y_orig);
393
394                // on sauve la position du curseur dans la page
395                $this->yy = $yc;
396        }
397
398        function lesContributionsVolontaires($classe) {
399                // Les coordonnees courantes
400                $xc = $this->xx+$this->space_h;
401                $y_orig = $this->yy+$this->space_v;
402                $yc = $y_orig+$this->space_v;
403
404                //Arial gras 14
405                $this->SetFont('Arial', 'B', 14);
406
407                //Couleurs du cadre, du fond et du texte
408                $this->SetFillColor(235);
409                $this->SetTextColor(0);
410
411                //Titre centre
412                $this->SetXY($xc, $yc);
413
414                $this->Cell($this->largeur_utile, 10, html_entity_decode(_T('asso:cpte_resultat_titre_benevolat')), 0, 0, 'C');
415                $yc += 10;
416
417                //Saut de ligne
418                $this->Ln($this->space_v);
419                $yc += $this->space_v;
420
421                $charges_evaluees = $produits_evalues = 0;
422                $query = sql_select(
423                        "imputation, SUM(depense) AS charge_evaluee, SUM(recette) AS produit_evalue, date_format(date, '%Y') AS annee".$this->sel, // select
424                        'spip_asso_comptes '.$this->join, // from
425                        $this->where, // where
426                        $this->order, // group by
427                        $this->order, // order by
428                        '', // limit
429                        $this->having.$classe // having
430                );
431                $chapitre = '';
432                $i = 0;
433
434                //Arial 12
435                $this->SetFont('Arial', '', 12);
436
437                while ($data = sql_fetch($query)) {
438                        // positionne le curseur
439                        $this->SetXY($xc, $yc);
440
441                        $new_chapitre = substr($data['code'], 0, 2);
442                        if ($chapitre!=$new_chapitre) {
443                                //Couleur de fond
444                                $this->SetFillColor(225);
445                                $this->Cell(20, 6, utf8_decode($new_chapitre), 0, 0, 'L', true);
446                                $this->Cell(($this->largeur_utile)-(2*$this->space_h+20), 6, utf8_decode(($GLOBALS['association_metas']['plan_comptable_prerenseigne']?association_plan_comptable_complet($new_chapitre):sql_getfetsel('intitule','spip_asso_plan',"code='$new_chapitre'"))), 0, 0, 'L', true);
447                                $chapitre = $new_chapitre;
448                                //Saut de ligne
449                                $this->Ln();
450                                $yc += 6;
451                        }
452
453                        //Couleur de fond
454                        $this->SetFillColor(245);
455
456                        // positionne le curseur
457                        $this->SetXY($xc, $yc);
458                        $this->Cell(20, 6, utf8_decode($data['code']), 0, 0, 'R', true);
459                        $this->Cell(($this->largeur_utile)-(2*$this->space_h+50), 6, utf8_decode($data['intitule']), 0, 0, 'L', true);
460                        if ($data['charge_evaluee']>0) {
461                                $this->Cell(30, 6, association_nbrefr($data['charge_evaluee']), 0, 0, 'R', true);
462                                $charges_evaluees += $data['charge_evaluee'];
463                        } else {
464                                $this->Cell(30, 6, association_nbrefr($data['produit_evalue']), 0, 0, 'R', true);
465                                $produits_evalues += $data['produit_evalue'];
466                        }
467                        //Saut de ligne
468                        $this->Ln();
469                        $yc += 6;
470                }
471
472                //Couleur de fond
473                $this->SetFillColor(215);
474
475                // positionne le curseur
476                $this->SetXY($xc, $yc);
477
478                $this->Cell(($this->largeur_utile)/2-(2*$this->space_h+30), 6, html_entity_decode(_T('asso:cpte_resultat_total_charges_evaluees')), 1, 0, 'R', true);
479                $this->Cell(30, 6, association_nbrefr($charges_evaluees), 1, 0, 'R', true);
480
481                // positionne le curseur sur l'autre demi page
482                $xc += ( $this->largeur_utile)/2;
483                $this->SetXY($xc, $yc);
484                $this->Cell(($this->largeur_utile)/2-(2*$this->space_h+30), 6, html_entity_decode(_T('asso:cpte_resultat_total_produits_evalues')), 1, 0, 'R', true);
485                $this->Cell(30, 6, association_nbrefr($produits_evalues), 1, 0, 'R', true);
486
487                $yc += 6;
488                //Saut de ligne
489                $this->Ln($this->space_v);
490                $yc += $this->space_v;
491
492                // Rectangle tout autour
493                $this->Rect($this->xx, $y_orig, $this->largeur_utile, $yc-$y_orig);
494
495                // on sauve la position du curseur dans la page
496                $this->yy = $yc;
497        }
498
499        function leFichier() {
500                $this->Output('compte_resultats_'.$this->exercice.'.pdf', 'I');
501        }
502
503}
504
505
506?>
Note: See TracBrowser for help on using the repository browser.