source: spip-zone/_plugins_/Association/Associaspip/exec/compte_bilan.php @ 60835

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

harmonisation d'interface et quelques corrections en passant

File size: 13.5 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 *  ajouté en 08/2011 par Marcel BOLLA ... à partir de bilan.php           *
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
14
15if (!defined('_ECRIRE_INC_VERSION'))
16        return;
17
18include_spip('inc/navigation_modules');
19
20function exec_compte_bilan()
21{
22        if (!autoriser('associer', 'comptes')) {
23                include_spip('inc/minipres');
24                echo minipres();
25        } else {
26// initialisations
27                $plan = sql_countsel('spip_asso_plan','active=1');
28                $id_exercice = intval(_request('exercice'));
29                if(!$id_exercice){
30                        /* on recupere l'id_exercice dont la date "fin" est "la plus grande" */
31                        $id_exercice = sql_getfetsel('id_exercice', 'spip_asso_exercices', '', '', 'fin DESC');
32                }
33                $destination = intval(_request('destination'));
34                $exercice_data = sql_asso1ligne('exercice', $id_exercice);
35                include_spip('inc/association_comptabilite');
36// traitements
37                onglets_association('titre_onglet_comptes');
38                // INTRO : rappel de l'exercicee affichee
39                $infos['exercice_entete_debut'] = association_datefr($exercice_data['debut'], 'dtstart');
40                $infos['exercice_entete_fin'] = association_datefr($exercice_data['fin'], 'dtend');
41                echo totauxinfos_intro($exercice_data['intitule'], 'exercice', $id_exercice, $infos);
42                // pas de sommes de synthes puisque tous les totaux sont dans la zone centrale ;-
43                // datation et raccourcis
44                icones_association(array('comptes', "exercice=$id_exercice"), array(
45                        'encaisse_titre_general' => array('finances-24.png', 'encaisse', "exercice=$id_exercice".($destination?"&destination=$id_destination":'')),
46                        'cpte_resultat_titre_general' => array('finances-24.png', 'compte_resultat', "exercice=$id_exercice".($destination?"&destination=$id_destination":'')),
47#                       'annexe_titre_general' => array('finances-24.png', 'annexe', "exercice=$id_exercice".($destination?"&destination=$id_destination":'')),
48                ));
49                $var = association_passe_parametres_comptables();
50/*
51                if(autoriser('associer', 'export_comptes') && $plan){ // on peut exporter : pdf, csv, xml, ...
52                        echo debut_cadre_enfonce('',true);
53                        echo '<h3>'. _T('asso:cpte_bilan_mode_exportation') .'</h3>';
54                        if (test_plugin_actif('FPDF')) { // impression en PDF : _T('asso:bouton_impression')
55                                echo icone1_association('PDF', generer_url_ecrire('export_comptebilans_pdf').'&var='.rawurlencode($var), 'print-24.png'); //!\ generer_url_ecrire() utilise url_enconde() or il est preferable avec les grosses variables serialisees d'utiliser rawurlencode()
56                        }
57                        foreach(array('csv','ctx','dbk','json','tex','tsv','xml','yaml') as $type) { // autres exports (donnees brutes) possibles
58                                echo icone1_association(strtoupper($type), generer_url_ecrire("export_comptebilans_$type").'&var='.rawurlencode($var), 'export-24.png'); //!\ generer_url_ecrire($exec, $param) equivaut a generer_url_ecrire($exec).'&'.urlencode($param) or il faut utiliser rawurlencode($param) ici...
59                        }
60                        echo fin_cadre_enfonce(true);
61                }
62*/
63                debut_cadre_association('finances-24.jpg', 'cpte_bilan_titre_general', $exercice_data['intitule']);
64                echo "\n<form method='get' action=''>\n<input type='hidden' name='exec' value='compte_bilan' />\n<table width='100%'><tr>";
65                echo '<td width="40%">'. association_selectionner_exercice($id_exercice, '') .'</td>';
66                echo '<td width="40%">'. association_selectionner_destination($id_destination, '') .'</td>';
67                echo '<td width="20%" class="boutons"><noscript><input type="submit" value="'._T('asso:bouton_lister').'" /></noscript></td>';
68                echo "</tr>\n</table>\n</form>\n";
69                // les autres classes a prendre en compte ici
70                $classes_bilan = array();
71                $query = sql_select(
72                        'classe', // select
73                        'spip_asso_plan', // from
74                        sql_in('classe', array($GLOBALS['association_metas']['classe_charges'],$GLOBALS['association_metas']['classe_produits'],$GLOBALS['association_metas']['classe_contributions_volontaires']), 'NOT'), // where http://programmer.spip.org/sql_in,642
75                        'classe', // group by
76                        'classe' // order by
77                );
78                while ($data = sql_fetch($query)) {
79                        $classes_bilan[] = $data['classe'];
80                }
81                // liste des actifs (les dettes) cumulees par comptes
82                $actifs = association_liste_totaux_comptes_classes($classes_bilan, 'cpte_bilan', '-1', $id_exercice, $id_destination);
83                // liste des passifs (le patrimoine/avoir) cumulees par comptes
84                $passifs = association_liste_totaux_comptes_classes($classes_bilan, 'cpte_bilan', '+1', $id_exercice, $id_destination);
85                // resultat comptable courant : en comptabilite francaise, la somme les actifs et les passifs doivent s'egaler, ce qui se fait en incorporant le resultat comptable (perte en actif et benefice en passif)
86                association_liste_resultat_net($passifs, $actifs);
87                // liste des bilans (actifs et passifs) par comptes
88                fin_page_association();
89        }
90}
91
92
93
94        include_spip('inc/charsets');
95        include_spip('inc/association_plan_comptable');
96
97// Brique commune aux classes d'exportation des donnees du compte de bilan
98class ExportCompteBilans {
99
100        var $exercice;
101        var $join;
102        var $sel;
103        var $where;
104        var $having;
105        var $order;
106        var $out;
107
108        function  __construct($var) {
109                $tableau = unserialize(rawurldecode($var));
110                $this->exercice = $tableau[0];
111                $this->join = $tableau[1];
112                $this->sel = $tableau[2];
113                $this->where = $tableau[3];
114                $this->having = $tableau[4];
115                $this->order = $tableau[5];
116                $this->out = '';
117        }
118
119        // de type CSV,INI,TSV, etc.
120        function LignesSimplesEntete($champsSeparateur, $lignesSeparateur, $echappements=array(), $champDebut='', $champFin='') {
121                $this->out .= $champDebut. str_replace(array_keys($echappements), array_values($echappements), utf8_decode(html_entity_decode(_T('asso:entete_code')))) .$champFin.$champsSeparateur;
122                $this->out .= $champDebut. str_replace(array_keys($echappements), array_values($echappements), utf8_decode(html_entity_decode(_T('asso:entete_intitule')))) .$champFin.$champsSeparateur;
123                $this->out .= $champDebut. str_replace(array_keys($echappements), array_values($echappements), utf8_decode(html_entity_decode(_T('asso:entete_montant')))) .$champFin.$lignesSeparateur;
124        }
125
126        // de type CSV,INI,TSV, etc.
127        function LignesSimplesCorps($key, $champsSeparateur, $lignesSeparateur, $echappements=array(), $champDebut='', $champFin='') {
128                switch ($key) {
129                        case 'charges' :
130                                $quoi = "SUM(depense) AS valeurs";
131                                break;
132                        case 'produits' :
133                                $quoi = "SUM(recette) AS valeurs";
134                                break;
135                        case 'contributions_volontaires' :
136                                $quoi = "SUM(depense) AS charge_evaluee, SUM(recette) AS produit_evalue";
137                                break;
138                }
139                $query = sql_select(
140                        "imputation, $quoi ".$this->sel, // select
141                        'spip_asso_comptes '.$this->join, // from
142                        $this->where, // where
143                        $this->order, // group by
144                        $this->order, // order by
145                        '', // limit
146                        $this->having .$GLOBALS['association_metas']['classe_'.$key] // having
147                );
148                $chapitre = '';
149                $i = 0;
150                while ($data = sql_fetch($query)) {
151                        if ($key==='contributions_volontaires') {
152                                if ($data['charge_evaluee']>0) {
153                                        $valeurs = $data['charge_evaluee'];
154                                } else {
155                                        $valeurs = $data['produit_evalue'];
156                                }
157                        } else {
158                                $valeurs = $data['valeurs'];
159                        }
160                        $new_chapitre = substr($data['code'], 0, 2);
161                        if ($chapitre!=$new_chapitre) {
162                                $this->out .= $champDebut. str_replace(array_keys($echappements), array_values($echappements), $new_chapitre) .$champFin.$champsSeparateur;
163                                $this->out .= $champDebut. str_replace(array_keys($echappements), array_values($echappements), ($GLOBALS['association_metas']['plan_comptable_prerenseigne']?association_plan_comptable_complet($new_chapitre):sql_getfetsel('intitule','spip_asso_plan',"code='$new_chapitre'"))) .$champFin.$champsSeparateur;
164                                $this->out .= $champsSeparateur.' '.$champsSeparateur;
165                                $this->out .= $lignesSeparateur;
166                                $chapitre = $new_chapitre;
167                        }
168                        $this->out .= $champDebut. str_replace(array_keys($echappements), array_values($echappements), $data['code']) .$champFin.$champsSeparateur;
169                        $this->out .= $champDebut. str_replace(array_keys($echappements), array_values($echappements), $data['intitule']) .$champFin.$champsSeparateur;
170                        $this->out .= $champDebut.$valeurs.$champFin.$lignesSeparateur;
171                }
172        }
173
174        // export texte de type tableau (lignes*colonnes) simple : CSV,CTX,HTML*SPIP,INI*,TSV,etc.
175        // de par la simplicite recherchee il n'y a pas de types ou autres : CSV et CTX dans une certaine mesure pouvant distinguer "nombres", "chaines alphanumeriques" et "chaine binaires encodees"
176        function exportLignesUniques($champsSeparateur, $lignesSeparateur, $echappements=array(), $champDebut='', $champFin='', $entete=true) {
177                if ($entete) {
178                        LignesSimplesEntete($champsSeparateur, $lignesSeparateur, $echappements=array(), $champDebut='', $champFin='');
179                }
180                foreach (array('charges', 'produits', 'contributions_volontaires') as $nomClasse) {
181                        LignesSimplesCorps($nomClasse, $champsSeparateur, $lignesSeparateur, $echappements=array(), $champDebut='', $champFin='');
182                }
183        }
184
185        // export texte de type s-expression / properties-list / balisage (conteneurs*conteneurs*donnees) simple : JSON, XML (utilisable avec ASN.1), YAML, etc.
186        // de par la simplicite recherchee il n'y a pas de types ou d'attributs : BSON, Bencode, JSON, pList, XML, etc.
187        function exportLignesMultiples($balises, $echappements=array(), $champDebut='', $champFin='', $indent="\t", $entetesPerso='') {
188                $this->out .= "$balises[compteresultat1]\n";
189                if (!$entetesPerso) {
190                        $this->out .= "$indent$balises[entete1]\n";
191                        $this->out .= "$indent$indent$balises[titre1] $champDebut". utf8_decode(html_entity_decode(_T('asso:cpte_resultat_titre_general'))) ."$champFin $balises[titre0]\n";
192                        $this->out .= "$indent$indent$balises[nom1] $champDebut". $GLOBALS['association_metas']['nom'] ."$champFin $balises[nom0]\n";
193                        $this->out .= "$indent$indent$balises[exercice1] $champDebut". sql_asso1champ('exercice', $this->exercice, 'intitule') ."$champFin $balises[exercice0]\n";
194                        $this->out .= "$indent$balises[entete0]\n";
195                }
196                foreach (array('charges', 'produits', 'contributions_volontaires') as $nomClasse) {
197                        switch ($nomClasse) {
198                                case 'charges' :
199                                        $quoi = "SUM(depense) AS valeurs";
200                                        break;
201                                case 'produits' :
202                                        $quoi = "SUM(recette) AS valeurs";
203                                        break;
204                                case 'contributions_volontaires' :
205                                        $quoi = "SUM(depense) AS charge_evaluee, SUM(recette) AS produit_evalue";
206                                        break;
207                        }
208                        $baliseClasse = $nomClasse.'1';
209                        $this->out .= "$indent$balises[$baliseClasse]\n";
210                        $query = sql_select(
211                                "imputation, $quoi ".$this->sel, // select
212                        'spip_asso_comptes'.$this->join, // from
213                                $this->where, // where
214                                $this->order, // group by
215                                $this->order, // order by
216                        '', // limit
217                                $this->having .$GLOBALS['association_metas']['classe_'.$nomClasse] // having
218                        );
219                        $chapitre = '';
220                        $i = 0;
221                        while ($data = sql_fetch($query)) {
222                                if ($key==='contributions_volontaires') {
223                                        if ($data['charge_evaluee']>0) {
224                                                $valeurs = $data['charge_evaluee'];
225                                        } else {
226                                                $valeurs = $data['produit_evalue'];
227                                        }
228                                } else {
229                                        $valeurs = $data['valeurs'];
230                                }
231                                $new_chapitre = substr($data['code'], 0, 2);
232                                if ($chapitre!=$new_chapitre) {
233                                        if ($chapitre!='') {
234                                                $this->out .= "$indent$indent$balises[chapitre0]\n";
235                                        }
236                                        $this->out .= "$indent$indent$balises[chapitre1]\n";
237                                        $this->out .= "$indent$indent$indent$balises[code1] $champDebut". str_replace(array_keys($echappements), array_values($echappements), $new_chapitre) ."$champFin $balises[code0]\n";;
238                                        $this->out .= "$indent$indent$indent$balises[libelle1] $champDebut". str_replace(array_keys($echappements), array_values($echappements), ($GLOBALS['association_metas']['plan_comptable_prerenseigne']?association_plan_comptable_complet($new_chapitre):sql_getfetsel('intitule','spip_asso_plan',"code='$new_chapitre'"))) ."$champFin $balises[libelle0]\n";
239                                        $chapitre = $new_chapitre;
240                                }
241                                $this->out .= "$indent$indent$indent$balises[categorie1]\n";
242                                $this->out .= "$indent$indent$indent$indent$balises[code1] $champDebut". str_replace(array_keys($echappements), array_values($echappements), $data['code']) ."$champFin $balises[code0]\n";
243                                $this->out .= "$indent$indent$indent$indent$balises[intitule1] $champDebut". str_replace(array_keys($echappements), array_values($echappements), $data['intitule']) ."$champFin $balises[intitule0]\n";
244                                $this->out .= "$indent$indent$indent$indent$balises[montant1] $champDebut".$valeurs."$champFin $balises[montant0]\n";
245                                $this->out .= "$indent$indent$indent$balises[categorie0]\n";
246                        }
247                        if ($chapitre!='') {
248                                $this->out .= "$indent$indent$balises[chapitre0]\n";
249                        }
250                        $baliseClasse = $nomClasse.'0';
251                        $this->out .= "$indent$balises[$baliseClasse]\n";
252                }
253                $this->out .= "$balises[compteresultat0]\n";
254        }
255
256        // fichier texte final a afficher/telecharger
257        function leFichier($ext) {
258                $fichier = _DIR_RACINE.'/'._NOM_TEMPORAIRES_ACCESSIBLES.'compte_bilans_'.$this->exercice.".$ext"; // on essaye de creer le fichier dans le cache local/ http://www.spip.net/fr_article4637.html
259                $f = fopen($fichier, 'w');
260                fputs($f, $this->out);
261                fclose($f);
262                header('Content-type: application/'.$ext);
263                header('Content-Disposition: attachment; filename="'.$fichier.'"');
264                readfile($fichier);
265        }
266
267}
268
269?>
Note: See TracBrowser for help on using the repository browser.