source: spip-zone/_plugins_/Association/Associaspip/formulaires/configurer_association.php @ 66942

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

suite de la revue de la compta et corrections sur les commits du mois

File size: 11.4 KB
Line 
1<?php
2/***************************************************************************\
3 *  Associaspip, extension de SPIP pour gestion d'associations
4 *
5 * @copyright Copyright (c) 2007 Bernard Blazin & Francois de Montlivault
6 * @copyright Copyright (c) 2010 Emmanuel Saint-James
7 *
8 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
9\***************************************************************************/
10
11if (!defined('_ECRIRE_INC_VERSION'))
12        return;
13
14function formulaires_configurer_association_verifier_dist() {
15        $erreurs = array();
16
17        $erreurs['message_erreur'] = _T('asso:erreur_titre'); // on insere directement un titre de message d'erreurs, si on n'a que lui a la fin on renvoie un tableau vide
18        $dons = _request('dons');
19        $ventes = _request('ventes');
20        $prets = _request('prets');
21        $activites = _request('activites');
22        $comptes = _request('comptes');
23        $pc_cotisations = _request('pc_cotisations');
24        $pc_dons = _request('pc_dons');
25        $pc_ventes = _request('pc_ventes');
26        $pc_frais_envoi = _request('pc_frais_envoi');
27        $pc_prets = _request('pc_prets');
28        $pc_activites = _request('pc_activites');
29        $nom = _request('nom'); // nom de l'association ne doit pas etre vide
30        if (!$nom or strlen(trim($nom))==0) {
31                $erreurs['nom'] = _T('asso:erreur_configurer_association_nom_association_vide');
32        }
33        $ref_attribuee = array();
34        $classe_attribuee = array();
35        if ($comptes) { // si la gestion comptable est activee, on valide le plan comptable
36                include_spip('inc/association_comptabilite');
37                if (!association_valider_plan_comptable()) {
38                        $erreurs['comptes'] = _T('asso:erreur_configurer_association_plan_comptable_non_valide');
39                        return $erreurs;
40                }
41                // on verifie qu'il n'a pas deux fois la meme reference comptable en incluant celle des cotisations ou qu'on n'a pas attribue aux cotisations ou modules de gestion une reference comptable de la classe des comptes financiers
42                $classe_financier = _request('classe_banques');
43                $classe_attribuee[$classe_financier] = 'classe_banques';
44                $ref_attribuee[$pc_cotisations] = 'pc_cotisations';
45                if ($pc_cotisations[0]==$classe_financier) // le premier caractere du code de la reference comptable est sa classe
46                        $erreurs['pc_cotisations'] = _T('asso:erreur_configurer_association_reference_financier');
47                foreach( array('classe_charges','classe_produits','classe_contributions_volontaires') as $index=>$classe_testee) { // on verifie que les classes sont uniques
48                        $$classe_testee = _request($classe_testee);
49                        if (array_key_exists($$classe_testee, $classe_attribuee)) {
50                                $erreurs[$classe_testee] = _T('asso:erreur_configurer_association_classe_identique');
51                                $erreurs[$ref_attribuee[$$classe_testee]] = _T('asso:erreur_configurer_association_classe_identique');
52                        }
53                        $classe_attribuee[$$classe_testee] = $classe_testee;
54                }
55        }
56        if ($dons=='on') {
57                if (!$comptes) {
58                        $erreurs['dons'] = _T('asso:erreur_configurer_association_gestion_comptable_non_activee');
59                } else {
60                        if (!array_key_exists($pc_dons,$ref_attribuee)) { // le premier caractere du code de la reference comptable est sa classe
61                                if ($pc_dons[0]==$classe_financier)
62                                        $erreurs['dons'] = _T('asso:erreur_configurer_association_reference_financier');
63                        } else {
64                                $erreurs['dons'] = _T('asso:erreur_configurer_association_reference_multiple');
65                                $erreurs[$ref_attribuee[$pc_dons]] = _T('asso:erreur_configurer_association_reference_multiple');
66                        }
67                        $ref_attribuee[$pc_dons]='dons';
68                }
69        }
70        if ($ventes=='on') {
71                if (!$comptes) {
72                        $erreurs['ventes'] = _T('asso:erreur_configurer_association_gestion_comptable_non_activee');
73                } else {
74                        if (!array_key_exists($pc_ventes,$ref_attribuee)) {
75                                if ($pc_ventes[0]==$classe_financier) // le premier caractere du code de la reference comptable est sa classe
76                                        $erreurs['ventes'] = _T('asso:erreur_configurer_association_reference_financier');
77                        } else {
78                                $erreurs['ventes'] = _T('asso:erreur_configurer_association_reference_multiple');
79                                $erreurs[$ref_attribuee[$pc_ventes]] = _T('asso:erreur_configurer_association_reference_multiple');
80                        }
81                        $ref_attribuee[$pc_ventes]='ventes';
82                        if ($pc_ventes!=$pc_frais_envoi) { // vente et frais_envoi peuvent etre associes a la meme reference comptable meme si c'est deconseille d'un point de vue comptable
83                                if (!array_key_exists($pc_frais_envoi,$ref_attribuee)) {
84                                        if ($pc_frais_envoi[0]==$classe_financier) // le premier caractere du code de la reference comptable est sa classe
85                                                $erreurs['frais_envoi'] = _T('asso:erreur_configurer_association_reference_financier');
86                                } else {
87                                        $erreurs['frais_envoi'] = _T('asso:erreur_configurer_association_reference_multiple');
88                                        $erreurs[$ref_attribuee[$pc_frais_envoi]] = _T('asso:erreur_configurer_association_reference_multiple');
89                                }
90                                $ref_attribuee[$pc_frais_envoi]='frais_envoi';
91                        }
92                }
93        }
94        if ($prets=='on') {
95                if (!$comptes) {
96                        $erreurs['prets'] = _T('asso:erreur_configurer_association_gestion_comptable_non_activee');
97                } else {
98                        if (!array_key_exists($pc_prets,$ref_attribuee)) {
99                                if ($pc_prets[0]==$classe_financier) // le premier caractere du code de la reference comptable est sa classe
100                                        $erreurs['prets'] = _T('asso:erreur_configurer_association_reference_financier');
101                        } else {
102                                $erreurs['prets'] = _T('asso:erreur_configurer_association_reference_multiple');
103                                $erreurs[$ref_attribuee[$pc_prets]] = _T('asso:erreur_configurer_association_reference_multiple');
104                        }
105                        $ref_attribuee[$pc_prets] = 'prets';
106                }
107        }
108        if ($activites=='on') {
109                if (!$comptes) {
110                        $erreurs['activites'] = _T('asso:erreur_configurer_association_gestion_comptable_non_activee');
111                } else {
112                        if (!array_key_exists($pc_activites,$ref_attribuee)) {
113                                if ($pc_activites[0]==$classe_financier) // le premier caractere du code de la reference comptable est sa classe
114                                        $erreurs['activites'] = _T('asso:erreur_configurer_association_reference_financier');
115                        } else {
116                                $erreurs['activites'] = _T('asso:erreur_configurer_association_reference_multiple');
117                                $erreurs[$ref_attribuee[$pc_activites]] = _T('asso:erreur_configurer_association_reference_multiple');
118                        }
119                        $ref_attribuee[$pc_activites]='activites';
120                }
121        }
122
123        if (count($erreurs)==1) { // si on n'a qu'un entree dans la table des erreurs, c'est le titre qu'on a mis au debut, on n'a pas d'erreur, on renvoie un tableau vide
124                return array();
125        }
126        // on a des erreurs, pour conserver l'etat des checkbox vides, il faut faire un set_request en mettant une valeur differente de 'on' sinon le retour de verif mange les eventuelles modifs
127        if (!$comptes)
128                set_request('comptes', 'off');
129        if (!$dons)
130                set_request('dons', 'off');
131        if (!$ventes)
132                set_request ('ventes', 'off');
133        if (!$prets)
134                set_request ('prets', 'off');
135        if (!$activites)
136                set_request ('activites', 'off');
137        if (!_request('$destinations'))
138                set_request ('destinations', 'off');
139        if (!_request('civilite'))
140                set_request ('civilite', 'off');
141        if (!_request('prenom'))
142                set_request ('prenom', 'off');
143        if (!_request('id_asso'))
144                set_request ('id_asso', 'off');
145        return $erreurs;
146}
147
148// reprise en grande partie du code de la fonction traiter de configurer_metas
149function formulaires_configurer_association_traiter_dist($form) {
150        include_spip('formulaires/configurer_metas');
151// debut du code directement copie depuis formulaires_configurer_metas_traiter_dist
152        $infos = formulaires_configurer_metas_infos($form);
153        if (!is_array($infos))
154                return $infos;
155        $vars = formulaires_configurer_metas_recense($infos['path'], PREG_PATTERN_ORDER);
156        $meta = $infos['meta'];
157// fin du code directement copie depuis formulaires_configurer_metas_traiter_dist
158        $metas_list = array_flip(array_unique($vars[2])); // on recupere tous les noms des metas comme cles d'un tableau
159        $query = sql_select('nom', 'spip_association_metas', "nom LIKE 'meta_utilisateur_%'");
160        while ($row = sql_fetch($query)) { // on ajoute toutes les metas utilisateurs : presentes avec le prefixe meta_utilisateur_ dans la table spip_association_metas
161                $metas_list[$row['nom']]=0;
162        }
163        // ignorer les changements fait dans un module non active
164        $dons = _request('dons');
165        $ventes = _request('ventes');
166        $prets = _request('prets');
167        $activites = _request('activites');
168        $comptes = _request('comptes');
169        if (!$comptes) {
170                unset($metas_list['pc_cotisations']);
171                unset($metas_list['dc_cotisations']);
172                unset($metas_list['destinations']);
173        }
174        if (!$dons) {
175                unset($metas_list['pc_dons']);
176                unset($metas_list['dc_dons']);
177        }
178        if (!$ventes) {
179                unset($metas_list['pc_ventes']);
180                unset($metas_list['pc_frais_envoi']);
181                unset($metas_list['dc_ventes']);
182        }
183        if (!$prets) {
184                unset($metas_list['pc_prets']);
185        }
186        if (!$activites) {
187                unset($metas_list['pc_activites']);
188        }
189        // A-t-on modifie les metas pc_XXX si oui il faut faire suivre dans la table des comptes la modif, sinon on perd toutes les operations deja enregistrees
190        $pc_cotisations = _request('pc_cotisations');
191        $pc_dons = _request('pc_dons');
192        $pc_ventes = _request('pc_ventes');
193        $pc_frais_envoi = _request('pc_frais_envoi');
194        $pc_prets = _request('pc_prets');
195        $pc_activites = _request('pc_activites');
196        // condition pour modifier dans la table des comptes : module actif (peut-etre aussi juste active par cet envoi) ET meta pre-existente ET meta modifiee
197        if ($comptes && $GLOBALS['association_metas']['pc_cotisations'] && ($pc_cotisations!=$GLOBALS['association_metas']['pc_cotisations'])) {
198                sql_updateq('spip_asso_comptes', array('imputation' => $pc_cotisations), 'imputation='.$GLOBALS['association_metas']['pc_cotisations']);
199        }
200        if ($dons && $GLOBALS['association_metas']['pc_dons'] && ($pc_dons!=$GLOBALS['association_metas']['pc_dons'])) {
201                sql_updateq('spip_asso_comptes', array('imputation' => $pc_dons), 'imputation='.$GLOBALS['association_metas']['pc_dons']);
202        }
203        if ($ventes && $GLOBALS['association_metas']['pc_ventes'] && ($pc_ventes!=$GLOBALS['association_metas']['pc_ventes'])) {
204                sql_updateq('spip_asso_comptes', array('imputation' => $pc_ventes), 'imputation='.$GLOBALS['association_metas']['pc_ventes']);
205        }
206        if ($ventes &&
207                $GLOBALS['association_metas']['pc_frais_envoi'] &&
208                ($pc_frais_envoi!=$GLOBALS['association_metas']['pc_frais_envoi']) &&
209                ($GLOBALS['association_metas']['pc_frais_envoi']!=$GLOBALS['association_metas']['pc_ventes']) &&
210                $pc_ventes!=$pc_frais_envoi) { // pour celui la on controle aussi que le pc_vente et pc_frais_envoi etaient differents avant et apres la modif
211                        // - si ils etaient egaux, on ne peux pas faire migrer les frais d'envoi vu qu'ils etaient inseres dans la meme operation comptable
212                        // - si ils sont maintenant egaux mais ne l'etaient pas avant, toutes les ventes vont apparaitre en double: la vente elle meme et les frais d'envoi.
213                        sql_updateq('spip_asso_comptes', array('imputation' => $pc_frais_envoi), 'imputation='.$GLOBALS['association_metas']['pc_frais_envoi']);
214        }
215        if ($prets && $GLOBALS['association_metas']['pc_prets'] && ($pc_prets!=$GLOBALS['association_metas']['pc_prets'])) {
216                sql_updateq('spip_asso_comptes', array('imputation' => $pc_prets), 'imputation='.$GLOBALS['association_metas']['pc_prets']);
217        }
218        if ($activites && $GLOBALS['association_metas']['pc_activites'] && ($pc!=$GLOBALS['association_metas']['pc_activites'])) {
219                sql_updateq('spip_asso_comptes', array('imputation' => $pc_activites), 'imputation='.$GLOBALS['association_metas']['pc_activites']);
220        }
221        // code repris sur formulaires_configurer_metas_traiter_dist
222        foreach (array_keys($metas_list) as $k) {
223                $v = _request($k);
224                ecrire_meta($k, is_array($v) ? serialize($v) : $v, 'oui', $meta);
225        }
226        return !isset($infos['prefix']) ? array()
227                : array('redirect' => generer_url_ecrire($infos['prefix']));
228}
229
230?>
Note: See TracBrowser for help on using the repository browser.