source: spip-zone/_plugins_/Association/Association_2.0/action/ajouter_comptes.php @ 43909

Last change on this file since 43909 was 43909, checked in by jeannolapin@…, 9 years ago

Modifications de la partie Comptabilité du plugin:

  • Ajout de destinations comptables qui permettent de ventiler les operation sur une ou plusieurs destinations et d'avoir le bilan par destination (l'idee serait donc pour l'association ayant de multiples activites de pouvoir faire le bilan d'une seule de ses activite).
  • Ajout d'un mode strict de compta qui force les references du plan comptable a etre soit creditrice soit debitrice mais pas les deux a la fois.
  • Verification au moment d'entrer/editer une operation qu'on n'entre pas a la fois une recette et une depense(meme si le mode compta strict n'est pas on).
  • Verification au moment d'entrer/editer une reference comptable dans le plan que le code est bien libre.

D'un point de vue plus technique:

  • Ajout de la gestion/edition des destination sur le modele du plan (ajout d'une table spip_asso_destination).
  • Modification de la table spip_asso_plan pour assurer la fonctionalite compta mode strict (un champ en plus).
  • Ajout d'une table spip_asso_destination_op qui sert uniquement en jointure avec spip_asso_comptes et stockes les ventilations en destinations des operations.
  • Ajout d'un repertoire javascript contenant un script qui permet d'avoir un nombre de champs dynamique(les destinations) dans le formulaire d'entree d'une operation comptable.
  • Grosse modifs de bilan.php pour pouvoir effectuer le bilan par destinations.
File size: 3.8 KB
Line 
1<?php
2        /**
3        * Plugin Association
4        *
5        * Copyright (c) 2007
6        * Bernard Blazin & François de Montlivault
7        * http://www.plugandspip.com
8        * Ce programme est un logiciel libre distribue sous licence GNU/GPL.
9        * Pour plus de details voir le fichier COPYING.txt.
10        * 
11        **/
12if (!defined("_ECRIRE_INC_VERSION")) return;
13
14/* callback pour filtrer tout $_POST et ne recuperer que les destinations */
15function destination_post_filter($var)
16{
17        if (preg_match ('/^destination_id/', $var)>0) return TRUE;
18        return FALSE;
19}
20
21function action_ajouter_comptes() {
22               
23        $securiser_action = charger_fonction('securiser_action', 'inc');
24        $securiser_action();
25
26
27        $date= _request('date');
28        $imputation= _request('imputation');
29        if ($GLOBALS['association_metas']['comptes_stricts']=="on") {
30                if ($montant_req = _request('montant')){
31                        $montant = intval($montant_req);
32                }
33                $r = sql_fetsel('direction', 'spip_asso_plan', "code=$imputation");
34                if ($r['direction'] == "credit")
35                {
36                        $recette = $montant;
37                        $depense = 0;
38                }
39                else
40                {
41                        $recette = 0;
42                        $depense = $montant;
43                }
44        }
45        else
46        {
47                if ($recette_req = _request('recette')){
48                        $recette = intval($recette_req);
49                }
50                if ($depense_req = _request('depense')){
51                        $depense = intval($depense_req);
52                }
53        }
54        $justification= _request('justification');
55        $journal= _request('journal');
56
57        /* on verifie les valeurs de recette et depense: positif et pas d'entree recette et depense simultanees */
58        if (($recette<0) || ($depense<0) || ($recette>0 && $depense>0))
59        {
60                include_spip('inc/minipres');
61                $url_retour = generer_url_ecrire('edit_compte');
62                echo minipres(_T('asso:erreur_titre'),_T('asso:erreur_recette_depense').'<br/><h1><a href="'.$url_retour.'">Retour</a><h1>');
63                exit;
64        }
65
66        include_spip('base/association');               
67
68        $id_compte = sql_insertq('spip_asso_comptes', array(
69                    'date' => $date,
70                    'imputation' => $imputation,
71                    'recette' => $recette,
72                    'depense' => $depense,
73                    'journal' => $journal,
74                    'justification' => $justification));
75
76        /* Si on doit gerer les destinations */
77        if ($GLOBALS['association_metas']['destinations']=="on")
78        {
79                if ($recette>0) {
80                        $attribution_montant = "recette";
81                }
82                else
83                {
84                        $attribution_montant = "depense";
85                }
86
87                /* on recupere dans $_POST toutes les keys des entrees commencant par destination_id */
88                $toutesDestinationsPOST = array_filter(array_keys($_POST), "destination_post_filter");
89               
90                /* on boucle sur toutes les cles trouvees, les montant ont des noms de champs identiques mais prefixes par montant_ */
91                $total_destination = 0;
92                $id_inserted = array();
93                foreach ($toutesDestinationsPOST as $destination_id)
94                {
95                        $id_destination = _request($destination_id);
96                        /* on verifie qu'on n'a pas deja inserer une destination avec cette id */
97                        if (!array_key_exists($id_destination,$id_inserted)) {
98                                $id_inserted[$id_destination]=0;
99                        }
100                        else {/* on a deja insere cette destination: erreur */
101                                include_spip('inc/minipres');
102                                $url_retour = generer_url_ecrire('edit_compte','id='.$id_compte);
103                                echo minipres(_T('asso:erreur_titre'),_T('asso:erreur_destination_dupliquee').'<br/><h1><a href="'.$url_retour.'">Retour</a><h1>');
104                                exit;
105                        }
106                        $montant = intval(_request('montant_'.$destination_id));
107                        $total_destination += $montant;
108                        sql_insertq('spip_asso_destination_op', array(
109                            'id_compte' => $id_compte,
110                            'id_destination' => $id_destination,
111                            $attribution_montant => $montant));
112                }
113               
114                /* on verifie que la somme des montants des destinations correspond au montant de l'operation */
115                if (($recette>0 && $total_destination != $recette) || ($depense>0 && $total_destination != $depense))
116                {
117                        include_spip('inc/minipres');
118                        $url_retour = generer_url_ecrire('edit_compte','id='.$id_compte);
119                        echo minipres(_T('asso:erreur_titre'),_T('asso:erreur_montant_destination').'<br/><h1><a href="'.$url_retour.'">Retour</a><h1>');
120                        exit;
121                }
122        }
123}
124?>
Note: See TracBrowser for help on using the repository browser.