source: spip-zone/_plugins_/Associaspip/trunk/formulaires/editer_asso_plan.php @ 73400

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

revue de la compta : introduction du contrôle de la direction des comptes

File size: 6.1 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
14include_spip('inc/actions');
15include_spip('inc/editer');
16include_spip('inc/association_comptabilite');
17
18function formulaires_editer_asso_plan_charger_dist($id_plan=0) {
19        if ($id_plan) { // c'est une edition...
20                // le nom de table n'etant pas spip_asso_planS, on ne peut pas utiliser
21                // $contexte = formulaires_editer_objet_charger('asso_plan', $id_plan, '', '',  generer_url_ecrire('plan_comptable'), '');
22                $contexte = sql_fetsel('*', 'spip_asso_plan', "id_plan=$id_plan");
23                // on passe aussi le code originellement present pour detecter un
24                // changement de code a repercuter dans la table des comptes sans devoir refaire de requete
25                $contexte['_hidden'] = "<input type='hidden' name='code_initial' value='$contexte[code]' />";
26        } else { // c'est une creation
27                $contexte['code'] = _request('code');
28                if (!($contexte['classe'] = _request('classe')) )
29                  $contexte['classe'] = substr($contexte['code'], 0, 1);
30                $contexte['intitule'] = _request('intitule');
31                $contexte['commentaire'] = _request('commentaire');
32                $contexte['active'] = TRUE; // par defaut les nouveaux comptes sont actives
33                $contexte['type_op'] = 'multi'; // par defout les nouveau comptes sont multidirectionnels
34                $contexte['date_anterieure'] = date('Y-m-d'); // date du jour
35                $contexte['solde_anterieur'] = 0; // zero
36        }
37        $contexte['_action'] = array('editer_asso_plan', $id_plan); // pour passer securiser action
38        return $contexte;
39}
40
41function formulaires_editer_asso_plan_verifier_dist($id_plan=0) {
42        $erreurs = array();
43
44        $classe = _request('classe');
45        if ($erreur = comptabilite_verifier_classe($classe) )
46                $erreurs['classe'] = $erreur;
47        $code = _request('code');
48        if ($erreur = comptabilite_verifier_code($code, _request('type_op'), $classe) )
49                $erreurs['code'] = $erreur;
50        if ($erreur = association_verifier_montant('solde_anterieur') )
51                $erreurs['solde_anterieur'] = $erreur;
52        if ($erreur = association_verifier_date('date_anterieure') )
53                $erreurs['date_anterieure'] = $erreur;
54        // verifie la validite d'un changement
55        if (!array_key_exists('code', $erreurs)) { // si le code est valide
56                $code_initial = _request('code_initial'); // on recupere le code initial pour verifier si on l'a modifie ou pas
57                if ($code_initial && $code_initial[0]!=$classe && $GLOBALS['association_metas']['comptes']) { // on verifie que si on a change le code on n'a pas modifie la classe pour passer de la classe financiere a une autre classe quand des operations existent dans la base
58                        $colonne = '';
59                        if ($code_initial[0]==$GLOBALS['association_metas']['classe_banques']) { // le code original faisait partie de la classe financiere et par consequent le nouveau qui est different non
60                                $colonne = 'journal'; // si des operations avec ce compte existent, on trouve sa reference dans la colonne journal
61                        } else if ($classe==$GLOBALS['association_metas']['classe_banques']) { // le nouveau code fait partie de la classe financiere et par consequent l'ancien qui est different non
62                                $colonne = 'imputation'; // si des operations avec ce compte existent, on trouve sa reference dans la colonne imputation
63                        }
64                        if ($colonne) {
65                                if (sql_countsel('spip_asso_comptes', $colonne."='$code_initial'")) { // on a bien des operations avec les codes incrimines, on ne peut donc pas changer la classe du compte
66                                        $erreurs['code'] = _T('asso:erreur_plan_changement_classe_impossible');
67                                }
68                        }
69                }
70                // verifier si on modifie un code existant qu'on n'attribue pas a un pc_XX des metas un code de la classe financiere
71                if (!array_key_exists('code', $erreurs) && $code_initial && $GLOBALS['association_metas']['comptes'] && ($classe==$GLOBALS['association_metas']['classe_banques'])) { // on n'effectue ce controle que si la gestion comptable est activee, la classe est celle des comptes financiers, le code initial non nul (on modifie un compte existant et qu'il n'y a pas d'erreur precedente)
72                        if ($code_initial!=$code) {
73                                if (($GLOBALS['association_metas']['pc_cotisations']==$code_initial) ||
74                                        (($GLOBALS['association_metas']['pc_dons']==$code_initial) && ($GLOBALS['association_metas']['dons'])) ||
75                                        (($GLOBALS['association_metas']['pc_ventes']==$code_initial) && ($GLOBALS['association_metas']['ventes'])) ||
76                                        (($GLOBALS['association_metas']['pc_prets']==$code_initial) && ($GLOBALS['association_metas']['prets'])) ||
77                                        (($GLOBALS['association_metas']['pc_activites']==$code_initial) && ($GLOBALS['association_metas']['activites'])) ||
78                                        (($GLOBALS['association_metas']['pc_colis']==$code_initial) && ($GLOBALS['association_metas']['colis'])) ||
79                                        (($GLOBALS['association_metas']['pc_ressources']==$code_initial) && ($GLOBALS['association_metas']['ressources']))
80                                ) {
81                                        $erreurs['code'] = _T('asso:erreur_plan_code_modifie_utilise_classe_financiere');
82                                }
83                        }
84                }
85        }
86
87        if (count($erreurs)) {
88                $erreurs['message_erreur'] = _T('asso:erreur_titre');
89        }
90        return $erreurs;
91}
92
93/// Fonction grandement inspiree de formulaires_editer_objet_traiter
94/// dans ecrire/inc/editer.php
95function formulaires_editer_asso_plan_traiter_dist($id_plan=0) {
96        $res = array();
97        $action_plancomptable = charger_fonction('editer_asso_plan', 'action');
98        list($id_plan, $err) = $action_plancomptable($id_plan);
99        if ($err OR !$id_plan) {
100                $res['message_erreur'] = ($err ? $err : _T('erreur_traite'));
101        } else {
102                $res['message_ok'] = '';
103                if (!($retour = strval(_request('retour'))))
104                        $retour = 'plan_comptable';
105                if ($champ = strval(_request('champ')))
106                        $champ = "#$champ";
107                // on renvoit sur la page appelante...
108                // mais on perd a l'occasion d'eventuel filtres inseres
109                // avant d'arriver au formulaire d'edition de reference comptable...
110                $res['redirect'] = generer_url_ecrire($retour) . $champ;
111        }
112        return $res;
113}
114
115?>
Note: See TracBrowser for help on using the repository browser.