source: spip-zone/_plugins_/Association/Associaspip/base/association_gestion.php @ 52476

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

On allege la config des numeros de SIRET et TVA quand ce n'est pas utile

File size: 20.5 KB
Line 
1<?php
2/***************************************************************************\
3 *  Associaspip, extension de SPIP pour gestion d'associations             *
4 *                                                                         *
5 *  Copyright (c) 2007 Bernard Blazin & Fran�ois de Montlivault (V1)       *
6 *  Copyright (c) 2010-2011 Emmanuel Saint-James & Jeannot Lapin (V2)       *
7 *                                                                         *
8 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
9 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
10\***************************************************************************/
11
12if (!defined("_ECRIRE_INC_VERSION")) return;
13
14
15include_spip('base/association');
16include_spip('base/abstract_sql');
17
18// A chaque modif de la base SQL ou ses conventions (raccourcis etc)
19// le fichier plugin.xml doit indiquer le numero de depot qui l'implemente sur
20// http://zone.spip.org/trac/spip-zone/timeline
21// Ce numero est fourni automatiquement par la fonction spip_plugin_install
22// lors de l'appel des fonctions de ce fichier.
23
24// desinstatllation
25
26function association_vider_tables($nom_meta, $table){
27
28$tables_a_supprimer=array(     
29                'spip_asso_activites',
30                'spip_asso_categories',
31                'spip_asso_comptes',
32                'spip_asso_destination',
33                'spip_asso_destination_op',
34                'spip_asso_dons',
35                'spip_asso_plan',
36                'spip_asso_prets',
37                'spip_asso_ressources',
38                'spip_asso_ventes',
39                'spip_association_metas');
40       
41        foreach($tables_a_supprimer as $table);
42                {
43                sql_drop_table($table);
44                spip_log("$table $nom_meta desinstalle");
45                }
46        effacer_meta($nom_meta_base_version);
47        spip_log("$table $nom_meta desinstalle");
48}
49
50// MAJ des tables de la base SQL
51// Retourne 0 si ok, le dernier numero de MAJ ok sinon
52
53function association_upgrade($meta, $courante, $table='meta')
54{
55  // Compatibilite: le nom de la meta donnant le numero de version
56  // n'etait pas std puis est parti dans une autre table puis encore une autre
57        if (!isset($GLOBALS['association_metas']['base_version'])) {
58                lire_metas('asso_metas');
59                if (isset($GLOBALS['asso_metas']['base_version'])) {
60                        $n = $GLOBALS['asso_metas']['base_version'];
61                } elseif (isset($GLOBALS['meta']['association_base_version'])) {
62                        $n = $GLOBALS['meta']['association_base_version'];
63                } else $n = 0;
64                $GLOBALS['association_metas']['base_version'] = $n;
65        } else $n = $GLOBALS['association_metas']['base_version'];
66        effacer_meta('association_base_version');
67        spip_log("association upgrade: $table $meta = $n =>> $courante");
68        if (!$n) {
69                include_spip('base/create');
70                alterer_base($GLOBALS['tables_principales'],
71                             $GLOBALS['tables_auxiliaires']);
72                ecrire_meta($meta, $courante, NULL, $table);
73                return 0; // Reussite (supposee !)
74        } else {
75        // compatibilite avec les numeros de version non entiers
76                $installee = ($n > 1) ? $n : ($n * 100);
77                $GLOBALS['association_maj_erreur'] = 0;
78                if ($courante > $installee) {
79                        include_spip('base/upgrade');
80                        $n = maj_while($installee, $courante, $GLOBALS['association_maj'], $meta, $table);
81                        $n = $n ? $n[0] : $GLOBALS['association_maj_erreur'];
82                        // signaler que les dernieres MAJ sont a refaire
83                        if ($n) ecrire_meta($meta, $n-1, '', $table);
84                }
85                return $GLOBALS['association_maj_erreur'];
86        }
87}
88
89$GLOBALS['association_maj'][21] = array(array('sql_alter',"TABLE spip_asso_membres ADD publication text NOT NULL AFTER secteur"));
90
91$GLOBALS['association_maj'][30] = array(
92        array('sql_drop_table', "spip_asso_bienfaiteurs"),
93        array('sql_drop_table', "spip_asso_financiers")
94                                        );
95
96$GLOBALS['association_maj'][40] = array(
97        array('sql_alter',"TABLE `spip_asso_comptes` ADD `valide` TEXT NOT NULL AFTER `id_journal` "));
98               
99$GLOBALS['association_maj'][50] = array(
100        array('sql_alter',"TABLE spip_asso_activites ADD membres TEXT NOT NULL AFTER accompagne, ADD non_membres TEXT NOT NULL AFTER membres "));
101               
102$GLOBALS['association_maj'][60] = array(array('sql_drop_table', "spip_asso_profil"));
103               
104$GLOBALS['association_maj'][61] = array(
105        array('spip_query',"RENAME TABLE spip_asso_banques TO spip_asso_plan"),
106        array('sql_drop_table',"spip_asso_livres")
107                                        );
108$GLOBALS['association_maj'][62] = array(array('sql_alter',"TABLE spip_asso_plan ADD actif TEXT NOT NULL AFTER commentaires"));
109
110$GLOBALS['association_maj'][63] = array(array('sql_alter',"TABLE spip_asso_ventes ADD id_acheteur BIGINT(20) NOT NULL AFTER acheteur"));
111               
112function association_maj_64(){
113
114        if (_ASSOCIATION_AUTEURS_ELARGIS == 'spip_auteurs_elargis') {
115                sql_alter("TABLE spip_auteurs_elargis ADD validite date NOT NULL default '0000-00-00'");
116                sql_alter("TABLE spip_auteurs_elargis ADD montant float NOT NULL default '0'");
117                sql_alter("TABLE spip_auteurs_elargis ADD date date NOT NULL default '0000-00-00' ");
118        } else {
119                if (_ASSOCIATION_INSCRIPTION2) {
120                        if (!$GLOBALS['association_maj_erreur']) $GLOBALS['association_maj_erreur'] = 64;
121                        return;
122                }
123                // Simulation provisoire
124                @sql_alter("TABLE spip_asso_membres ADD commentaire text NOT NULL default ''");
125                @sql_alter("TABLE spip_asso_membres ADD statut_interne text NOT NULL default '' ");
126                @sql_alter("TABLE spip_asso_membres CHANGE COLUMN nom nom_famille text DEFAULT '' NOT NULL");
127        }
128}
129
130$GLOBALS['association_maj'][64] = array(array('association_maj_64'));
131
132// Recopie des metas geree par CFG dans la table asso_meta
133// Il faut charger a la main ses fichiers puisque plugin.xml ne le demande plus
134
135function association_maj_38192()
136{
137
138
139        if (sql_create('spip_asso_metas', 
140                $GLOBALS['tables_auxiliaires']['spip_asso_metas']['field'],
141                $GLOBALS['tables_auxiliaires']['spip_asso_metas']['key'],
142                false, false)) {
143                include _DIR_PLUGINS . 'cfg/inc/cfg.php';
144                if (is_array($c = lire_config('association'))) {
145                        foreach($c as $k => $v) {
146                                ecrire_meta($k, $v, 'oui', 'association_metas');
147                        }
148                        // effacer les vieilles meta
149                        effacer_meta('association');
150                        effacer_meta('asso_base_version');
151                        effacer_meta('association_base_version');
152                }
153        } else spip_log("maj_38190: echec de  la creation de spip_asso_metas");
154}
155
156$GLOBALS['association_maj'][38192] = array(array('association_maj_38192'));
157
158$GLOBALS['association_maj'][38258] = array(array('sql_create','spip_asso_membres',
159                $GLOBALS['tables_principales']['spip_asso_membres']['field'],
160              $GLOBALS['tables_principales']['spip_asso_membres']['key'])
161                                        );
162$GLOBALS['association_maj'][38578] = array(
163        array('spip_query', 'rename table spip_asso_metas TO spip_association_metas'));
164
165function association_maj_42024()
166{
167        sql_alter("TABLE spip_asso_comptes ADD vu BOOLEAN default 0");
168        sql_update('spip_asso_comptes', array('vu' => 1), "valide='oui'");
169        sql_alter("TABLE spip_asso_comptes DROP valide");
170}
171
172$GLOBALS['association_maj'][42024] = array(array('association_maj_42024'));
173
174/* cette mise a jour comporte une erreur: sql_alter("TABLE spip_asso_plan ADD destination ENUM('credit','debit') NOT NULL default 'credit'"); le champ doit etre nomme direction et non destination */
175function association_maj_43909()
176{
177       
178
179        sql_alter("TABLE spip_asso_plan ADD destination ENUM('credit','debit') NOT NULL default 'credit'");
180        sql_create('spip_asso_destination', 
181                $GLOBALS['tables_principales']['spip_asso_destination']['field'],
182                $GLOBALS['tables_principales']['spip_asso_destination']['key']);
183        sql_create('spip_asso_destination_op', 
184                $GLOBALS['tables_principales']['spip_asso_destination_op']['field'],
185                $GLOBALS['tables_principales']['spip_asso_destination_op']['key']);
186}
187
188$GLOBALS['association_maj'][43909] = array(array('association_maj_43909'));
189
190unset($GLOBALS['association_maj'][43909]); /* pour empecher l'execution de code fautif tout en gardant trace */
191
192function association_maj_46392() /* repare l'erreur commise sur la maj 43909 */
193{
194
195
196        /* on elimine le champ mal nomme */
197        sql_alter("TABLE spip_asso_plan DROP destination");
198
199        /* et on refait la modif correctement: ca risque d'entrainer des erreurs SQL mais c'est pas grave */
200        sql_alter("TABLE spip_asso_plan ADD direction ENUM('credit','debit') NOT NULL default 'credit'");
201        sql_create('spip_asso_destination', 
202                $GLOBALS['tables_principales']['spip_asso_destination']['field'],
203                $GLOBALS['tables_principales']['spip_asso_destination']['key']);
204        sql_create('spip_asso_destination_op', 
205                $GLOBALS['tables_principales']['spip_asso_destination_op']['field'],
206                $GLOBALS['tables_principales']['spip_asso_destination_op']['key']);
207}
208
209$GLOBALS['association_maj'][46392] = array(array('association_maj_46392'));
210
211function association_maj_46779()
212{
213        /* avant d'eliminer reference de la table spip_asso_plan, on recopie sa valeur(si non null) dans le champ commentaires */
214        $rows = sql_select("id_plan, reference, commentaire", 'spip_asso_plan', "reference <> ''");
215        while ($row = sql_fetch($rows)) {
216                $commentaire = $row['commentaire']?$row['commentaire']." - ".$row['reference']:$row['reference'];
217                sql_updateq('spip_asso_plan',
218                        array('commentaire' => $commentaire),
219                        "id_plan=".$row['id_plan']);
220        }
221        sql_alter("TABLE spip_asso_plan DROP reference");
222
223        /* modification du type de direction, on ajoute une troisieme valeur a l'enumeration, on renomme direction en type_op essentiellement
224        pour des raisons de compatibilite avec les differentes bases de donnees supportees par SPIP (impossible d'utiliser ALTER COLUMN ou MODIFY)*/
225        sql_alter("TABLE spip_asso_plan ADD type_op ENUM('credit','debit','multi') NOT NULL default 'multi'"); 
226        sql_update('spip_asso_plan', array('type_op' => 'direction'));
227        sql_alter("TABLE spip_asso_plan DROP direction");
228
229        /* transforme actif en booleen plutot que texte oui/non, et renomme pour la meme raison en active */
230        sql_alter("TABLE spip_asso_plan ADD active BOOLEAN default 1");
231        sql_update('spip_asso_plan', array('active' => 0), "actif='non'");
232        sql_alter("TABLE spip_asso_plan DROP actif");
233
234        /* avant d'eliminer don de la table spip_asso_ventes, on recopie sa valeur(si non null) dans le champ commentaires */
235        $rows = sql_select("id_vente, don, commentaire", 'spip_asso_ventes', "don <> ''");
236        while ($row = sql_fetch($rows)) {
237                $commentaire = $row['commentaire']?$row['commentaire']." - ".$row['don']:$row['don'];
238                sql_updateq('spip_asso_ventes',
239                        array('commentaire' => $commentaire),
240                        "id_vente=".$row['id_vente']);
241        }
242        sql_alter("TABLE spip_asso_ventes DROP don");
243       
244}
245
246$GLOBALS['association_maj'][46779] = array(array('association_maj_46779'));
247
248function association_maj_47144()
249{
250        /* avant d'eliminer id_asso de la table spip_asso_membres, on recopie sa valeur(si non null et non egal a 0) dans le champ commentaires */
251        $rows = sql_select("id_auteur, id_asso, commentaire", 'spip_asso_membres', "id_asso <> '' AND id_asso <> 0");
252        while ($row = sql_fetch($rows)) {
253                $commentaire = $row['commentaire']?$row['commentaire']." - Ref. Int. ".$row['id_asso']:"Ref. Int. ".$row['id_asso'];
254                sql_updateq('spip_asso_membres',
255                        array('commentaire' => $commentaire),
256                        "id_auteur=".$row['id_auteur']);
257        }
258        sql_alter("TABLE spip_asso_membres DROP id_asso");
259}
260
261$GLOBALS['association_maj'][47144] = array(array('association_maj_47144'));
262
263unset($GLOBALS['association_maj'][47144]); /* finalement on garde le champ id_asso, on n'effectue donc pas la maj_47144 */
264
265function association_maj_47501() /* revert de la 47144 pour ceux qui l'aurait effectue avant qu'elle ne soit supprimee */
266{
267        /* on verifie si le champ id_asso existe dans la table spip_asso_membre, si oui, rien a faire, la 47144 n'a pas ete effectuee */
268        $trouver_table = charger_fonction('trouver_table', 'base');
269        $table_membres = $trouver_table('spip_asso_membres');
270        if (!$table_membres['field']['id_asso']) { /* pas de champ id_asso, il faut le restaurer */
271                sql_alter("TABLE spip_asso_membres ADD id_asso TEXT NOT NULL AFTER id_auteur");
272
273                /* on va voir dans commentaire si on trouve un champ qui ressemble a ce que la 47144 a sauvegarde */
274                $rows = sql_select("id_auteur, commentaire", 'spip_asso_membres', "commentaire LIKE '% - Ref. Int. %' OR commentaire LIKE 'Ref. Int. %'");
275                while ($row = sql_fetch($rows)) {
276                        if (preg_match('/^(.*?)( - )?Ref\. Int\. (.*)$/', $row['commentaire'], $matches)) {
277                                $commentaire = $matches[1];
278                                $id_asso = $matches[3];
279                                sql_updateq('spip_asso_membres',
280                                        array('commentaire' => $commentaire, 'id_asso' => $id_asso),
281                                        "id_auteur=".$row['id_auteur']);
282                        }
283                }               
284        }
285}
286$GLOBALS['association_maj'][47501] = array(array('association_maj_47501'));
287
288function association_maj_47731() /* eliminer le champ id_achat de la table ressources car il est inutile et non utilise, rien a sauvegarder */
289{
290        sql_alter("TABLE spip_asso_ressources DROP id_achat");
291}
292
293$GLOBALS['association_maj'][47731] = array(array('association_maj_47731'));
294
295/* mise a jour integrant l'utilisation du plugin Coordonnees */
296function association_maj_48001() 
297{
298        $effectuer_maj = false;
299
300        /* cette partie du code s'execute au premier chargement, on n'a pas encore interroge l'utilisateur sur ce qu'il veut faire de ses donnees si il en a  ou il n'a pas voulu faire la maj */
301        if (!_request('valider_association_maj_coordonnees')) {
302                /* on commence par verifier si des informations de la table spip_asso_membres sont potentiellement transferable vers les tables de coordonnees */
303                $adresse = sql_countsel('spip_asso_membres', "adresse <> '' OR code_postal <> '' OR ville <> ''");
304                $telephone = sql_countsel('spip_asso_membres', "telephone <> '' OR mobile <> ''");
305
306                /* si on n'a pas de donnees a sauvegarder, on fait la mise a jour sans poser de question */
307                if (! ($adresse OR $telephone)) {
308                        $effectuer_maj = true;
309                } else { /* on a des donnees, demander a l'utilisateur ce qu'il veut en faire */
310                        echo '<form method="post" action="">';
311                        echo '<fieldset><p>'._T('asso:maj_coordonnees_intro').'</p>';
312                        /* on commence par determiner si le plugin Coordonnees est installe */
313                        include_spip('inc/plugin');
314                        $liste_plugins = liste_plugin_actifs();
315                        $plugin_coordonnees_actif = isset($liste_plugins['COORDONNEES']);
316
317                        if (!$plugin_coordonnees_actif) {/* Le plugin coordonnees n'est pas actif */
318                                echo '<p>'._T('asso:maj_coordonnees_plugin_inactif').'</p>';
319                        } else { /* le plugin coordonnees est actif */
320                                echo '<input type="radio" name="association_maj_coordonnees_traitement_data" value="ignorer">'._T('asso:maj_coordonnees_ignorer').'</input><br/>';
321                                echo '<input type="radio" name="association_maj_coordonnees_traitement_data" value="merge" checked="checked">'._T('asso:maj_coordonnees_merge').'</input>';
322                                echo "\n<input type='hidden' name='association_maj_adresses' value='$adresse' />";
323                                echo "\n<input type='hidden' name='association_maj_telephones' value='$telephone' />";
324                        }
325                        echo '<p><input type="submit" name="valider_association_maj_coordonnees" value="'._T('asso:effectuer_la_maj').'"/></p>';
326                        echo '<p>'._T('asso:maj_coordonnees_notes').'</p></fieldset>';
327                        echo '</form>';
328                }
329        } else { /* l'utilisateur veut effectuer la maj, on controle si il y a des precision quand a l'ecrasement de donnees existentes */
330                        $choix_donnees = _request('association_maj_coordonnees_traitement_data');
331                        if ($choix_donnees == "merge") { /* on integre les donnees d'association dans Coordonnees */
332                                include_spip('action/editer_numero');
333                                include_spip('action/editer_adresse');
334                                include_spip('inc/modifier');
335
336                                /* pre-remplissage pour les fonctions insert_numero et insert_adresse de Coordonnees */
337                                $liens = array('objet' => 'auteur'); 
338                                $telephone = array('titre' => 'telephone');
339                                $mobile = array('titre' => 'mobile');
340                                $invalideur = array('invalideur' => 0);
341
342                                /* On recupere les coordonnees utiles */
343                                $coordonnees_membres = sql_select('id_auteur, adresse AS voie, code_postal, ville, telephone, mobile', 'spip_asso_membres', "adresse <> '' OR mobile <> '' OR code_postal <> '' OR ville <> '' OR telephone <> ''");
344                                while ($data = sql_fetch($coordonnees_membres)) {
345                                        $liens['id_objet'] = $data['id_auteur'];
346                                        unset($data['id_auteur']); 
347
348                                        /* si on a un numero de telephone */
349                                        if ($telephone['numero'] = $data['telephone']) {
350                                                if ($id_numero =  insert_numero($liens)) {
351                                                        $invalideur['invalideur'] = "id='id_numero/$id_numero'";
352                                                        modifier_contenu('numero', $id_numero, $invalideur, $telephone);
353                                                }
354                                        }
355                                        unset($data['telephone']); 
356
357                                        /* si on a un numero de mobile */
358                                        if ($mobile['numero'] = $data['mobile']) {
359                                                if ($id_numero = insert_numero($liens)) {
360                                                        $invalideur['invalideur'] = "id='id_numero/$id_numero'";
361                                                        modifier_contenu('numero', $id_numero, $invalideur, $mobile);
362                                                }
363                                        }
364                                        unset($data['mobile']); 
365
366                                        /* si on a une adresse, meme partielle */
367                                        if ($data['voie'] OR $data['code_postal'] OR $data['ville']) {
368                                                if ($id_adresse = insert_adresse($liens)) {
369                                                        $invalideur['invalideur'] = "id='id_adresse/$id_adresse'";
370                                                        modifier_contenu('adresse', $id_adresse, $invalideur, $data);
371                                                }
372                                        }
373                                }
374                                echo "\n<fieldset>", intval(_request('association_maj_adresses')), _T('asso:maj_coordonnees_adresses_inserees'),
375                                  '<br/>', intval(_request('association_maj_telephones')), _T('asso:maj_coordonnees_numeros_inseres'), "\n</fieldset>";
376                        }
377
378                        $effectuer_maj = true;
379        }
380
381        /* on effectue si besoin la mise a jour */
382        if ($effectuer_maj) {
383                /* on supprime les champs de la table spip_asso_membres, ils ont deja ete sauvegarde dans les tables de Coordonnees si besoin */
384                sql_alter("TABLE spip_asso_membres DROP telephone");
385                sql_alter("TABLE spip_asso_membres DROP mobile");
386                sql_alter("TABLE spip_asso_membres DROP adresse");
387                sql_alter("TABLE spip_asso_membres DROP code_postal");
388                sql_alter("TABLE spip_asso_membres DROP ville");
389                sql_alter("TABLE spip_asso_membres DROP email");
390        } else { /* la mise a jour n'est pas effectuee : on le signale dans les maj_erreur pour y revenir au prochain chargement de la page de gestion des plugins */
391                if (!$GLOBALS['association_maj_erreur']) $GLOBALS['association_maj_erreur'] = 48001; 
392        }
393}
394
395$GLOBALS['association_maj'][48001] = array(array('association_maj_48001'));
396
397$GLOBALS['association_maj'][48225] = array(
398
399        array ('sql_alter', "TABLE spip_asso_categories change maj maj timestamp"),
400        array ('sql_alter', "TABLE spip_asso_dons change maj maj timestamp"),
401        array ('sql_alter', "TABLE spip_asso_ventes change maj maj timestamp"),
402        array ('sql_alter', "TABLE spip_asso_comptes change maj maj timestamp"),
403        array ('sql_alter', "TABLE spip_asso_plan change maj maj timestamp"),
404        array ('sql_alter', "TABLE spip_asso_ressources change maj maj timestamp"),
405        array ('sql_alter', "TABLE spip_asso_prets change maj maj timestamp"),
406        array ('sql_alter', "TABLE spip_asso_activites change maj maj timestamp"),
407                                           );
408
409/* cette mise a jour introduit un controle sur l'activation des modules de gestions des dons, */
410/* ventes, prets, activit�s subordonnes a l'activation de la gestion comptable.               */
411/* la fonction de mise a jour desactive donc d'eventuels modules actives si la gestion        */
412/* comptable n'est pas activee                                                               */
413function association_maj_48466()
414{
415        include_spip('inc/association_comptabilite');
416        /* on verifie la validite du plan comptable existant */
417        if ($GLOBALS['association_metas']['comptes'] && !association_valider_plan_comptable()) {
418                ecrire_meta('comptes', '', 'oui', 'association_metas');
419                echo '<p>'._T('asso:maj_desactive_gestion_comptable').'</p>';
420        }
421
422        $desactivation = false;
423        if (!$GLOBALS['association_metas']['comptes']) {
424                if ($GLOBALS['association_metas']['dons']) { ecrire_meta('dons', '', 'oui', 'association_metas'); $desactivation = true; }
425                if ($GLOBALS['association_metas']['ventes']) { ecrire_meta('ventes', '', 'oui', 'association_metas'); $desactivation = true; }
426                if ($GLOBALS['association_metas']['prets']) { ecrire_meta('prets', '', 'oui', 'association_metas'); $desactivation = true; }
427                if ($GLOBALS['association_metas']['activites']) { ecrire_meta('activites', '', 'oui', 'association_metas'); $desactivation = true; }
428        }
429
430        /* si on a desactive des modules, on le signale par un message */
431        if ($desactivation) echo '<p>'._T('asso:maj_desactive_modules').'</p>';
432
433        /* on en profite pour effacer des metas qui ne servent plus */
434        effacer_meta('comptes_stricts', 'association_metas');
435        effacer_meta('indexation', 'association_metas');
436}
437$GLOBALS['association_maj'][48466] = array(array('association_maj_48466'));
438
439function association_maj_51602()
440{
441        sql_alter("TABLE spip_asso_membres ADD date_adhesion DATE AFTER id_asso");
442}
443$GLOBALS['association_maj'][51602] = array(array('association_maj_51602'));
444
445/* Ces champs de configuration n'etant plus geres par defaut, les passer en personalises pour ceux qui les utilisent */
446$GLOBALS['association_maj'][52476] = array(
447        array('sql_update', 'spip_association_metas', array('nom' => "'meta_utilisateur_n_siret'" ), "nom='siret' AND valeur<>''" ),
448        array('sql_update', 'spip_association_metas', array('nom' => "'meta_utilisateur_n_tva'" ), "nom='tva' AND valeur<>''" ),
449        );
450
451
452?>
Note: See TracBrowser for help on using the repository browser.