Changeset 43909 in spip-zone


Ignore:
Timestamp:
Jan 27, 2011, 3:03:06 PM (9 years ago)
Author:
jeannolapin@…
Message:

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.
Location:
_plugins_/Association/Association_2.0
Files:
8 added
14 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/Association/Association_2.0/action/ajouter_comptes.php

    r37742 r43909  
    1212if (!defined("_ECRIRE_INC_VERSION")) return;
    1313
     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
    1421function action_ajouter_comptes() {
    1522               
     
    1724        $securiser_action();
    1825
     26
    1927        $date= _request('date');
    2028        $imputation= _request('imputation');
    21         $recette= _request('recette');
    22         $depense= _request('depense');
     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        }
    2354        $justification= _request('justification');
    2455        $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
    2566        include_spip('base/association');               
    26         sql_insertq('spip_asso_comptes', array(
     67
     68        $id_compte = sql_insertq('spip_asso_comptes', array(
    2769                    'date' => $date,
    2870                    'imputation' => $imputation,
     
    3173                    'journal' => $journal,
    3274                    '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        }
    33123}
    34124?>
  • _plugins_/Association/Association_2.0/action/ajouter_plans.php

    r37847 r43909  
    2525        $commentaire = _request('commentaire');
    2626        $date_anterieure = _request('date_anterieure');
    27         plan_insert($actif, $intitule, $reference, $code, $solde_anterieur, $date_anterieure, $classe, $commentaire);
     27        if ($GLOBALS['association_metas']['comptes_stricts']=="on") {
     28                $direction = _request('direction');
     29        }
     30        else {
     31                $direction = '';
     32        }
     33
     34        /* on verifie que le code n'est pas deja attribue a une ligne du plan */
     35        if (sql_fetsel('code', 'spip_asso_plan', "code=$code")) {
     36                include_spip('inc/minipres');
     37                $url_retour = generer_url_ecrire('edit_plan');
     38                echo minipres(_T('asso:erreur_titre'),_T('asso:erreur_code_plan').'<br/><h1><a href="'.$url_retour.'">Retour</a><h1>');
     39                exit;
     40        }
     41
     42        plan_insert($actif, $intitule, $reference, $code, $solde_anterieur, $date_anterieure, $classe, $commentaire, $direction);
     43
    2844}
    2945
    3046
    31 function plan_insert($actif, $intitule, $reference, $code, $solde_anterieur, $date_anterieure, $classe, $commentaire)
     47function plan_insert($actif, $intitule, $reference, $code, $solde_anterieur, $date_anterieure, $classe, $commentaire, $direction)
    3248{
    3349        include_spip('base/association');               
     
    4157                                'reference' => $reference,
    4258                                'solde_anterieur' => $solde_anterieur,
    43                                 'commentaire' => $commentaire));
     59                                'commentaire' => $commentaire,
     60                                'direction' => $direction));
    4461}
    4562?>
  • _plugins_/Association/Association_2.0/action/modifier_comptes.php

    r37742 r43909  
    1212if (!defined("_ECRIRE_INC_VERSION")) return;
    1313
     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
    1421function action_modifier_comptes() {
    1522               
     
    1825
    1926        $date= _request('date');
    20         $recette= _request('recette');
    21         $depense= _request('depense');
     27        $imputation= _request('imputation');
     28        if ($GLOBALS['association_metas']['comptes_stricts']=="on") {
     29                if ($montant_req = _request('montant')){
     30                        $montant = intval($montant_req);
     31                }
     32                $r = sql_fetsel('direction', 'spip_asso_plan', "code=$imputation");
     33                if ($r['direction'] == "credit")
     34                {
     35                        $recette = $montant;
     36                        $depense = 0;
     37                }
     38                else
     39                {
     40                        $recette = 0;
     41                        $depense = $montant;
     42                }
     43        }
     44        else
     45        {
     46                if ($recette_req = _request('recette')){
     47                        $recette = intval($recette_req);
     48                }
     49                if ($depense_req = _request('depense')){
     50                        $depense = intval($depense_req);
     51                }
     52        }
    2253        $justification= _request('justification');
    2354        $journal= _request('journal');
    24         include_spip('base/association');
     55
     56        /* on verifie les valeurs de recette et depense: positif et pas d'entree recette et depense simultanees */
     57        if (($recette<0) || ($depense<0) || ($recette>0 && $depense>0))
     58        {
     59                include_spip('inc/minipres');
     60                $url_retour = generer_url_ecrire('edit_compte','id='.$id_compte);
     61                echo minipres(_T('asso:erreur_titre'),_T('asso:erreur_recette_depense').'<br/><h1><a href="'.$url_retour.'">Retour</a><h1>');
     62                exit;
     63        }
     64
     65        include_spip('base/association');               
     66
    2567        sql_updateq('spip_asso_comptes', array(
    2668                    'date' => $date,
     69                    'imputation' => $imputation,
    2770                    'recette' => $recette,
    2871                    'depense' => $depense,
     
    3073                    'justification' => $justification),
    3174                    "id_compte=$id_compte");
     75
     76        /* Si on doit gerer les destinations */
     77        if ($GLOBALS['association_metas']['destinations']=="on")
     78        {
     79                /* on efface de la table destination_op toutes les entrees correspondant a cette operation */
     80                sql_delete("spip_asso_destination_op", "id_compte=$id_compte");
     81
     82                /* et on reentre les nouvelles entrees */
     83                if ($recette>0) {
     84                        $attribution_montant = "recette";
     85                }
     86                else
     87                {
     88                        $attribution_montant = "depense";
     89                }
     90
     91                /* on recupere dans $_POST toutes les keys des entrees commencant par destination_id */
     92                $toutesDestinationsPOST = array_filter(array_keys($_POST), "destination_post_filter");
     93               
     94                /* on boucle sur toutes les cles trouvees, les montant ont des noms de champs identiques mais prefixes par montant_ */
     95                $total_destination = 0;
     96                $id_inserted = array();
     97                foreach ($toutesDestinationsPOST as $destination_id)
     98                {
     99                        $id_destination = _request($destination_id);
     100                        /* on verifie qu'on n'a pas deja inserer une destination avec cette id */
     101                        if (!array_key_exists($id_destination,$id_inserted)) {
     102                                $id_inserted[$id_destination]=0;
     103                        }
     104                        else {/* on a deja insere cette destination: erreur */
     105                                include_spip('inc/minipres');
     106                                $url_retour = generer_url_ecrire('edit_compte','id='.$id_compte);
     107                                echo minipres(_T('asso:erreur_titre'),_T('asso:erreur_destination_dupliquee').'<br/><h1><a href="'.$url_retour.'">Retour</a><h1>');
     108                                exit;
     109                        }
     110                        $montant = intval(_request('montant_'.$destination_id));
     111                        $total_destination += $montant;
     112                        sql_insertq('spip_asso_destination_op', array(
     113                            'id_compte' => $id_compte,
     114                            'id_destination' => $id_destination,
     115                            $attribution_montant => $montant));
     116                }
     117
     118                /* on verifie que la somme des montants des destinations correspond au montant de l'operation */
     119                if (($recette>0 && $total_destination != $recette) || ($depense>0 && $total_destination != $depense))
     120                {
     121                        include_spip('inc/minipres');
     122                        $url_retour = generer_url_ecrire('edit_compte','id='.$id_compte);
     123                        echo minipres(_T('asso:erreur_titre'),_T('asso:erreur_montant_destination').'<br/><h1><a href="'.$url_retour.'">Retour</a><h1>');
     124                        exit;
     125                }
     126        }
    32127}
    33128?>
  • _plugins_/Association/Association_2.0/action/modifier_plans.php

    r37847 r43909  
    2525        $commentaire = _request('commentaire');
    2626        $date_anterieure = _request('date_anterieure');
     27        if ($GLOBALS['association_metas']['comptes_stricts']=="on") {
     28                $direction = _request('direction');
     29        }
     30        else {
     31                $direction = '';
     32        }
     33        /* on verifie que le code n'est pas deja attribue a une ligne du plan ou si il l'est que c'est a celle qu'on edite*/
     34        if ($r = sql_fetsel('code,id_plan', 'spip_asso_plan', "code=$code"))    {
     35                if ($r['id_plan']!=$id_plan)
     36                {
     37                        include_spip('inc/minipres');
     38                        $url_retour = generer_url_ecrire('edit_plan', "id=$id_plan");
     39                        echo minipres(_T('asso:erreur_titre'),_T('asso:erreur_code_plan').'<br/><h1><a href="'.$url_retour.'">Retour</a><h1>');
     40                        exit;
     41                }
     42        }
    2743
    2844        include_spip('base/association');
     
    3551                                'reference' => $reference,
    3652                                'solde_anterieur' => $solde_anterieur,
    37                                 'commentaire' => $commentaire),
     53                                'commentaire' => $commentaire,
     54                                'direction' => $direction),
    3855                    "id_plan=$id_plan");
    3956}
  • _plugins_/Association/Association_2.0/action/supprimer_comptes.php

    r37736 r43909  
    1515               
    1616        $securiser_action = charger_fonction('securiser_action', 'inc');
    17         sql_delete('spip_asso_comptes', 'id_compte=' . $securiser_action());
     17        $id_compte = $securiser_action();
     18        sql_delete('spip_asso_comptes', 'id_compte=' . $id_compte);
     19        /* on efface de la table destination_op toutes les entrees correspondant a cette operation */
     20        sql_delete('spip_asso_destination_op', 'id_compte=' . $id_compte);
    1821}
    1922?>
  • _plugins_/Association/Association_2.0/base/association.php

    r42024 r43909  
    110110        "classe"                        =>"text NOT NULL",
    111111        "reference"             => "text NOT NULL",
     112        "direction"             => "ENUM('credit','debit') NOT NULL default 'credit'",
    112113        "solde_anterieur"       => "float NOT NULL default '0'",
    113114        "date_anterieure"       => "date NOT NULL default '0000-00-00'",
     
    124125);
    125126
     127//-- Tables DESTINATION ----------------------------------------
     128$spip_asso_destination = array(
     129        "id_destination"        => "int(11) NOT NULL auto_increment",
     130        "intitule"              => "text NOT NULL",     
     131        "commentaire"           => "text NOT NULL",
     132);
     133$spip_asso_destination_key = array(
     134        "PRIMARY KEY" => "id_destination"
     135);
     136$association_tables_principales['spip_asso_destination'] = array(
     137        'field' => &$spip_asso_destination,
     138        'key' => &$spip_asso_destination_key
     139);
     140
     141$spip_asso_destination_op = array(
     142        "id_dest_op"    => "int(11) NOT NULL auto_increment",
     143        "id_compte"             => "int(11) NOT NULL", 
     144        "id_destination"        => "int(11) NOT NULL",
     145        "recette"       => "float NOT NULL default '0'",
     146        "depense"       => "float NOT NULL default '0'",
     147);
     148$spip_asso_destination_op_key = array(
     149        "PRIMARY KEY" => "id_dest_op"
     150);
     151$association_tables_principales['spip_asso_destination_op'] = array(
     152        'field' => &$spip_asso_destination_op,
     153        'key' => &$spip_asso_destination_op_key
     154);
    126155//-- Table RESSOURCES ------------------------------------------
    127156$spip_asso_ressources = array(
  • _plugins_/Association/Association_2.0/base/association_gestion.php

    r42024 r43909  
    169169
    170170$GLOBALS['association_maj'][42024] = array(array('association_maj_42024'));
     171
     172function association_maj_43909()
     173{
     174        sql_alter("TABLE spip_asso_plan ADD destination ENUM('credit','debit') NOT NULL default 'credit'");
     175        sql_create('spip_asso_destination',
     176                $association_tables_principales['spip_asso_destination']['field'],
     177                $association_tables_principales['spip_asso_destination']['key']);
     178        sql_create('spip_asso_destination_op',
     179                $association_tables_principales['spip_asso_destination_op']['field'],
     180                $association_tables_principales['spip_asso_destination_op']['key']);
     181}
     182
     183$GLOBALS['association_maj'][43909] = array(array('association_maj_43909'));
     184
    171185?>
  • _plugins_/Association/Association_2.0/exec/association.php

    r43254 r43909  
    3434                $res=association_icone(_T('asso:profil_de_lassociation'),  '?exec=configurer_association', 'assoc_qui.png');
    3535                $res.=association_icone(_T('asso:categories_de_cotisations'),  generer_url_ecrire("categories"), 'cotisation.png',  '');
    36                 $res.=association_icone(_T('asso:plan_comptable'),  generer_url_ecrire("plan"), 'plan_compte.png',  '');       
     36                $res.=association_icone(_T('asso:plan_comptable'),  generer_url_ecrire("plan"), 'plan_compte.png',  '');
     37                if ($GLOBALS['association_metas']['destinations']=="on") $res.=association_icone(_T('asso:destination_comptable'),  generer_url_ecrire("destination"), 'plan_compte.png',  '');
    3738
    3839                echo bloc_des_raccourcis($res);
  • _plugins_/Association/Association_2.0/exec/bilan.php

    r43254 r43909  
    2222                echo minipres();
    2323        } else {
    24                
    25                 $total_recettes=$total_depenses=$total_soldes=0;
    2624                $plan = sql_countsel('spip_asso_plan');
     25
     26                if (!($annee = _request('annee')))
     27                {
     28                        $annee = date('Y');
     29                        $url_bilan = generer_url_ecrire('bilan');
     30                }
     31                else
     32                {
     33                        $url_bilan = generer_url_ecrire('bilan', "annee=$annee");
     34                }
     35               
     36                // recupere l'id_destination de la ou des destinations dans POST ou cree une entree a 0 dans le tableau
     37                if (!($ids_destination_bilan = _request('destination'))) $ids_destination_bilan = array(0);
    2738
    2839                $commencer_page = charger_fonction('commencer_page', 'inc');
    2940                echo $commencer_page(propre(_T('asso:titre_gestion_pour_association')), "", _DIR_PLUGIN_ASSOCIATION_ICONES.'finances.jpg','rien.gif');
    30                 association_onglets();
    31                
     41                association_onglets();         
     42
    3243                echo debut_gauche("",true);
    3344               
    3445                echo debut_boite_info(true);
    35                 echo association_date_du_jour();       
     46                echo association_date_du_jour();
     47
     48                if ($GLOBALS['association_metas']['destinations']=="on")
     49                {
     50                        // cree un menu a choix multiple des destinations a inserer dans la boite info et recupere les intitule de toutes les destinations dans un tableau
     51                        $select_destination = '';
     52                        $intitule_destinations = array();
     53                        $query = sql_select("id_destination, intitule", 'spip_asso_destination', "", "",  "intitule" );
     54                        while ($data = sql_fetch($query)) {
     55                                $select_destination .= "<option value='".$data['id_destination']."'";
     56                                if (!(array_search($data['id_destination'], $ids_destination_bilan) === FALSE)) $select_destination .= " selected='selected'";
     57                                $select_destination .=">".$data['intitule']."</option>";
     58                                $intitule_destinations[$data['id_destination']] = $data['intitule'];
     59                        }
     60
     61                        echo '<form method="post" action="'.$url_bilan.'"><div>';
     62                        echo '<select name ="destination[]" class="fondl" multiple>';
     63                        echo '<option value="0"';
     64                        if (!(array_search(0, $ids_destination_bilan) === FALSE)) echo ' selected="selected"';
     65                        echo '>Total</option><option disabled="disabled">--------</option>'.$select_destination;
     66                        echo '</select>';
     67                        echo '<input type="submit" value="Bilan" />';
     68                        echo '</div></form>';
     69                }
    3670                echo fin_boite_info(true);
    37                
    3871                echo debut_droite("",true);
    3972               
    4073                debut_cadre_relief(_DIR_PLUGIN_ASSOCIATION_ICONES."finances.jpg", false, "", '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' .propre( _T('asso:bilans_comptables')));
    4174               
    42                 if (!($annee = _request('annee'))) $annee = date('Y');
    43                 $class= "impair";
    44                
    45                 //TABLEAU EXPLOITATION
    46                 echo "\n<fieldset>";
    47                 echo '<legend><strong>', _T('asso:resultat_courant') . ' ' . $annee.'</strong></legend>';
    48                 echo "\n<table border='0' cellpadding='2' cellspacing='0' width='100%' class='arial2' style='border: 1px solid #aaaaaa;'>\n";
    49                 echo "<tr style='background-color: #DBE1C5;'>\n";
    50                 echo '<td><strong>&nbsp;</strong></td>';
    51                 echo "<td style='text-align:center;'><strong>\n" . 'Recettes</strong></td>';
    52                 echo "<td style='text-align:center;'><strong>\n" . _T('asso:depenses') . '</strong></td>';
    53                 echo "<td style='text-align:center;'><strong>\n" . 'Solde</strong></td>';
    54                 echo "</tr>\n";
     75               
     76
     77                $clas=$GLOBALS['association_metas']['classe_banques'];
     78               
    5579                if ($plan) {
    5680                        $join = " RIGHT JOIN spip_asso_plan ON imputation=code";
    5781                        $sel = ", code, intitule, classe";
    58                         $having =  " AND classe <> $annee";
     82                        $having =  " AND classe <> $clas";
    5983                        $order = "code,";
    60                 } else $join = $sel = $having = $order = '';
    61                 $query = sql_select("imputation, sum( recette ) AS recettes, sum( depense ) AS depenses, date_format( date, '%Y' ) AS annee$sel", "spip_asso_comptes$join", '', "${order}annee", "annee DESC", '',  "annee=$annee$having");
    62                
    63                 while ($data = sql_fetch($query)) {
    64                         $recettes=$data['recettes'];
    65                         $depenses=$data['depenses'];
    66                         $soldes=$recettes - $depenses;
     84                } else $join = $sel = $having = $order = '';           
     85               
     86               
     87
     88                // on boucle sur le tableau des destinations en refaisant le fetch a chaque iteration
     89                foreach ($ids_destination_bilan as $id_destination) {
     90
     91                        $total_recettes=$total_depenses=$total_soldes=0;
     92                        //TABLEAU EXPLOITATION
     93                        if ($id_destination != 0) {
     94                                $intutile_destination_bilan = $intitule_destinations[$id_destination];
     95                        }
     96                        else {
     97                                if ($GLOBALS['association_metas']['destinations']=="on") $intutile_destination_bilan = _T('asso:toutes_destination');
     98                        }
     99
     100                        echo "\n<fieldset>";
     101                        echo '<legend><strong>', _T('asso:resultat_courant') . ' ' . $annee. ' ' .$intutile_destination_bilan. '</strong></legend>';
     102                        echo "\n<table border='0' cellpadding='2' cellspacing='0' width='100%' class='arial2' style='border: 1px solid #aaaaaa;'>\n";
     103                        echo "<tr style='background-color: #DBE1C5;'>\n";
     104                        echo '<td><strong>&nbsp;</strong></td>';
     105                        echo "<td style='text-align:center;'><strong>\n" . 'Recettes</strong></td>';
     106                        echo "<td style='text-align:center;'><strong>\n" . _T('asso:depenses') . '</strong></td>';
     107                        echo "<td style='text-align:center;'><strong>\n" . 'Solde</strong></td>';
     108                        echo "</tr>\n";
     109                       
     110                        // si on fait le bilan sur toutes les destinations (ou que destination n'est pas on)
     111                        if ($id_destination == 0) {
     112                                $query = sql_select("imputation, sum( recette ) AS recettes, sum( depense ) AS depenses, date_format( date, '%Y' ) AS annee$sel", "spip_asso_comptes$join", "", "${order}annee", "annee DESC", '',  "annee=$annee$having");
     113                                while ($data = sql_fetch($query)) {
     114                                        $recettes=$data['recettes'];
     115                                        $depenses=$data['depenses'];
     116                                        $soldes=$recettes - $depenses;
     117                                        echo '<tr style="background-color: #EEEEEE;">';
     118                                        echo "<td class='arial11 border1'>\n".$data['intitule'].'</td>';
     119                                        echo '<td class="arial11 border1" style="text-align:right;">'.number_format($recettes, 2, ',', ' ').'</td>';
     120                                        echo '<td class="arial11 border1" style="text-align:right;">'.number_format($depenses, 2, ',', ' ').'</td>';
     121                                        echo '<td class="arial11 border1" style="text-align:right;">'.number_format($soldes, 2, ',', ' ').'</td>';
     122                                        echo '</tr>';
     123                                        $total_recettes += $recettes;   
     124                                        $total_depenses += $depenses;   
     125                                        $total_soldes += $soldes;       
     126                                }
     127                        }
     128                        else // on fait le bilan d'une seule destination
     129                        {
     130                                $query = sql_select("imputation, date_format( date, '%Y' ) AS annee, sum( spip_asso_destination_op.recette ) AS recettes, sum( spip_asso_destination_op.depense ) AS depenses, spip_asso_destination_op.id_destination$sel", "spip_asso_comptes LEFT JOIN spip_asso_destination_op ON spip_asso_destination_op.id_compte=spip_asso_comptes.id_compte$join", "spip_asso_destination_op.id_destination=$id_destination", "${order}annee", "annee DESC", '',  "annee=$annee$having");
     131                                while ($data = sql_fetch($query)) {
     132                                        $recettes=$data['recettes'];
     133                                        $depenses=$data['depenses'];
     134                                        $soldes=$recettes - $depenses;
     135                                        echo '<tr style="background-color: #EEEEEE;">';
     136                                        echo "<td class='arial11 border1'>\n".$data['intitule'].'</td>';
     137                                        echo '<td class="arial11 border1" style="text-align:right;">'.number_format($recettes, 2, ',', ' ').'</td>';
     138                                        echo '<td class="arial11 border1" style="text-align:right;">'.number_format($depenses, 2, ',', ' ').'</td>';
     139                                        echo '<td class="arial11 border1" style="text-align:right;">'.number_format($soldes, 2, ',', ' ').'</td>';
     140                                        echo '</tr>';
     141                                        $total_recettes += $recettes;   
     142                                        $total_depenses += $depenses;   
     143                                        $total_soldes += $soldes;       
     144                                }
     145                        }
     146                        $total_recettes=number_format($total_recettes, 2, ',', ' ');
     147                        $total_depenses=number_format($total_depenses, 2, ',', ' ');
     148                        $total_soldes=number_format($total_soldes, 2, ',', ' ');
    67149                        echo '<tr style="background-color: #EEEEEE;">';
    68                         echo "<td class='arial11 border1'>\n".$data['intitule'].'</td>';
    69                         echo '<td class="arial11 border1" style="text-align:right;">'.number_format($recettes, 2, ',', ' ').'</td>';
    70                         echo '<td class="arial11 border1" style="text-align:right;">'.number_format($depenses, 2, ',', ' ').'</td>';
    71                         echo '<td class="arial11 border1" style="text-align:right;">'.number_format($soldes, 2, ',', ' ').'</td>';
    72                         echo '</tr>';
    73                         $total_recettes += $recettes;   
    74                         $total_depenses += $depenses;   
    75                 $total_soldes += $soldes;       
    76                 }
    77                 $total_recettes=number_format($total_recettes, 2, ',', ' ');
    78                 $total_depenses=number_format($total_depenses, 2, ',', ' ');
    79                 $total_soldes=number_format($total_soldes, 2, ',', ' ');
    80                 echo '<tr style="background-color: #EEEEEE;">';
    81                 echo "\n<td class='arial11 border1' style='color: #9F1C30;'><strong>" . _T('asso:resultat_courant') . '</strong></td>';
    82                 echo "\n<td class='arial11 border1' style='text-align:right;color: #9F1C30;'><strong>".$total_recettes.'</strong></td>';
    83                 echo "\n<td class='arial11 border1' style='text-align:right;color: #9F1C30;'><strong>".$total_depenses.'</strong></td>';
    84                 echo "\n<td class='arial11 border1' style='text-align:right;color: #9F1C30;'><strong>".$total_soldes.'</strong></td></tr>';
    85                 echo '</table>';
    86                 echo '</fieldset>';
     150                        echo "\n<td class='arial11 border1' style='color: #9F1C30;'><strong>" . _T('asso:resultat_courant') . '</strong></td>';
     151                        echo "\n<td class='arial11 border1' style='text-align:right;color: #9F1C30;'><strong>".$total_recettes.'</strong></td>';
     152                        echo "\n<td class='arial11 border1' style='text-align:right;color: #9F1C30;'><strong>".$total_depenses.'</strong></td>';
     153                        echo "\n<td class='arial11 border1' style='text-align:right;color: #9F1C30;'><strong>".$total_soldes.'</strong></td></tr>';
     154                        echo '</table>';
     155                        echo '</fieldset>';
     156                }
    87157               
    88158                if ($plan) bilan_encaisse($annee);
     
    116186                echo "\n<td class='arial11 border1' style='text-align:right;'>".number_format($solde, 2, ',', ' ').'</td>';
    117187                       
    118                 $compte = sql_fetsel("sum( recette ) AS recettes, sum( depense ) AS depenses, date", "spip_asso_comptes", "date > '$date_solde' AND journal = '$journal'", $journal);
     188                $compte = sql_fetsel("sum( recette ) AS recettes, sum( depense ) AS depenses, date", "spip_asso_comptes", "date >= '$date_solde' AND journal = '$journal'", 'journal');
    119189                       
    120190                if ($compte)
  • _plugins_/Association/Association_2.0/exec/edit_compte.php

    r43254 r43909  
    1515include_spip('inc/autoriser');
    1616
     17function prefixPlugin_insert_head($flux){
     18          $flux .= "<!-- un commentaire pour rien ! -->\n";
     19          return $flux;
     20      }
     21
     22
    1723function exec_edit_compte() {
    1824               
     
    2632                $commencer_page = charger_fonction('commencer_page', 'inc');
    2733                echo $commencer_page(_T('asso:titre_gestion_pour_association')) ;
    28                
     34       
     35                echo "<script type='text/javascript' src='".find_in_path("javascript/jquery.destinations_form.js")."'></script>";
    2936                association_onglets();
    3037               
     
    4148                $data = !$id_compte ? '' :sql_fetsel('*', 'spip_asso_comptes', "id_compte=$id_compte") ;
    4249                if ($data) {
    43                 $imputation=$data['imputation'];
    44                 $date=$data['date'];
    45                 $recette=$data['recette'];
    46                 $depense=$data['depense'];
    47                 $journal=$data['journal'];
    48                 $justification=$data['justification'];
     50                        $imputation=$data['imputation'];
     51                        $date=$data['date'];
     52                        $recette=$data['recette'];
     53                        $depense=$data['depense'];
     54                        $journal=$data['journal'];
     55                        $justification=$data['justification'];
     56                        if ($GLOBALS['association_metas']['destinations']=="on")
     57                        {
     58                                if ($destination_query = sql_select('spip_asso_destination_op.id_destination, spip_asso_destination_op.recette, spip_asso_destination_op.depense, spip_asso_destination.intitule', 'spip_asso_destination_op RIGHT JOIN spip_asso_destination ON spip_asso_destination.id_destination=spip_asso_destination_op.id_destination', "id_compte=$id_compte", '', 'spip_asso_destination.intitule'))
     59                                {
     60                                        $destination = array();
     61                                        while ($destination_op = sql_fetch($destination_query))
     62                                        {       /* soit recette soit depense est egal a 0, donc pour l'affichage du montant on se contente les additionner */
     63                                                $destination[$destination_op[id_destination]] = $destination_op[recette]+$destination_op[depense];
     64                                       
     65                                        }
     66                                }
     67                                else
     68                                {
     69                                        $destination='';
     70                                }
     71                        }
    4972                } else {
    50                 $imputation=$recette=$depense=$journal=$justification='';
    51                 $date = date('Y-m-d');
     73                        $imputation=$recette=$depense=$journal=$justification=$destination='';
     74                        $date = date('Y-m-d');
    5275                }
    5376
    5477                debut_cadre_relief(  "", false, "", $titre = _T('asso:modification_des_comptes'));
    5578               
    56                 $sql = sql_select('code,intitule', 'spip_asso_plan', "classe<>". sql_quote($GLOBALS['association_metas']['classe_banques']), "", "code") ;
     79                $sql = sql_select('code,intitule,direction', 'spip_asso_plan', "classe<>". sql_quote($GLOBALS['association_metas']['classe_banques']), "", "code") ;
    5780                $res = '';
    5881                while ($banque = sql_fetch($sql)) {
    5982                        $code = $banque['code'];
    6083                        $s = ($imputation==$code) ? ' selected="selected"' : '';
    61                         $res .= "\n<option value='$code'$s>".$banque['intitule'].'</option>';
     84                        if  ($GLOBALS['association_metas']['comptes_stricts']=="on") {
     85                                if ($banque['direction'] == "credit") {
     86                                        $d = '&nbsp;-&nbsp;'._T('asso:crediteur');
     87                                }
     88                                else {
     89                                        $d = '&nbsp;-&nbsp;'._T('asso:debiteur');
     90                                }
     91                        }
     92                        else {
     93                                $d = '';
     94                        }
     95                        $res .= "\n<option value='$code'$s>".$banque['intitule'].$d.'</option>';
    6296                }
    6397                if ($res)
     
    6599                        . _T('asso:imputation')
    66100                        . '</strong></label>'
    67                         . '<select name="imputation" id="date" class="formo">'
     101                        . '<select name="imputation" id="imputation" class="formo">'
    68102                        . $res
    69103                        . '</select>';
     
    72106                . _T('asso:date_aaaa_mm_jj') . '</strong></label>'
    73107                . '<input name="date" value="'
    74                 . $date.'" type="text" id="date" class="formo" />'
    75                 . '<label for="recette"><strong>'
    76                 . _T('asso:recette') . '</strong></label>'
    77                 . '<input name="recette" value="'
    78                 . $recette.'" type="text" id="recette" class="formo" />'
    79                 . '<label for="depense"><strong>'
    80                 . _T('asso:depense') . '</strong></label>'
    81                 . '<input name="depense" value="'
    82                 . $depense.'"  type="text" id="depense" class="formo" />'
    83                 . association_mode_de_paiement($journal, _T('asso:prets_libelle_mode_paiement'));
     108                . $date.'" type="text" id="date" class="formo" />';
     109                if ($GLOBALS['association_metas']['comptes_stricts']=="on") {
     110                        $res .= '<label for="montant"><strong>'
     111                        . _T('asso:montant') . '</strong></label>'
     112                        . '<input name="montant" value="'
     113                        . ($recette+$depense).'" type="text" id="montant" class="formo" />'; // on a soit recette soit depense egal a 0, on fait la somme pour avoir toujours celui qui nous
     114                }
     115                else
     116                {
     117                        $res .= '<label for="recette"><strong>'
     118                        . _T('asso:recette') . '</strong></label>'
     119                        . '<input name="recette" value="'
     120                        . $recette.'" type="text" id="recette" class="formo" />'
     121                        . '<label for="depense"><strong>'
     122                        . _T('asso:depense') . '</strong></label>'
     123                        . '<input name="depense" value="'
     124                        . $depense.'"  type="text" id="depense" class="formo" />';
     125                }
     126                $res .= association_mode_de_paiement($journal, _T('asso:prets_libelle_mode_paiement'));
    84127
    85128                $action = ($id_compte ? 'modifier' : 'ajouter');
     
    90133                . '<input name="justification" value="'
    91134                . $justification
    92                 . '" type="text" id="justification" class="formo" />'
    93                 . '<div style="float:right;"><input type="submit" value="'
     135                . '" type="text" id="justification" class="formo" />';
     136
     137                if ($GLOBALS['association_metas']['destinations']=="on")
     138                {
     139                        // recupere la liste de toutes les destination
     140                        $liste_destination = '';
     141                        $sql = sql_select('id_destination,intitule', 'spip_asso_destination', "", "", "intitule");
     142                        while ($destination_info = sql_fetch($sql)) {
     143                                $id_destination = $destination_info['id_destination'];
     144                                $liste_destination .= "<option value='$id_destination'>".$destination_info['intitule'].'</option>';
     145                        }
     146
     147                        if ($liste_destination)
     148                        {
     149                               
     150                                $res .= '<label for="destination"><strong>'
     151                                . _T('asso:destination')
     152                                . '&nbsp;:</strong></label>'
     153                                . '<div id="divTxtDestination">';
     154
     155                                $idIndex=1;
     156                                if ($destination != '') /* si on a une liste de destinations (on edite une operation) */
     157                                {
     158                                        foreach ($destination as $destId => $destMontant)
     159                                        {                                               
     160                                                $liste_destination_selected = preg_replace('/(value=\''.$destId.'\')/', '$1 selected="selected"', $liste_destination);
     161                                                $res .= '<p class="formo" id="row'.$idIndex.'"><select name="destination_id'.$idIndex.'" id="destination_id'.$idIndex.'" >'
     162                                                . $liste_destination_selected
     163                                                . '</select><input name="montant_destination_id'.$idIndex.'" value="'
     164                                                . $destMontant
     165                                                . '" type="text" id="montant_destination_id'.$idIndex.'" />';
     166                                                $res .= "<button class='destButton' type='button' onClick='addFormField(); return false;'>+</button>";
     167                                                if ($idIndex>1)
     168                                                {
     169                                                        $res .= "<button class='destButton' type='button' onClick='removeFormField(\"#row".$idIndex."\"); return false;'>-</button>";
     170                                                }
     171                                                $res .= '</p>';
     172                                                $idIndex++;
     173                                        }
     174                                }
     175                                else /* pas de destination deja definies pour cette operation */
     176                                {
     177                                        $res .= '<p id="row1" class="formo"><select name="destination_id1" id="destination_id1" >'
     178                                        . $liste_destination
     179                                        . '</select><input name="montant_destination_id1" value="'
     180                                        . ''
     181                                        . '" type="text" id="montant_destination_id1"/>'
     182                                        . "<button class='destButton' type='button' onClick='addFormField(); return false;'>+</button></p>";
     183                                }
     184
     185                                $res .= '<input type="hidden" id="idNextDestination" value="'.($idIndex+1).'"></div>';
     186                        }
     187                }
     188
     189                $res .= '<div style="float:right;"><input type="submit" value="'
    94190                . _T('asso:bouton_'. $action)
    95191                . '" class="fondo" /></div>';
  • _plugins_/Association/Association_2.0/exec/edit_plan.php

    r43254 r43909  
    5050                        $solde_anterieur=$data['solde_anterieur'];
    5151                        $date_anterieure=$data['date_anterieure'];
     52                        $direction=$data['direction'];
    5253                        $action = 'modifier';
    5354                } else {
    5455                        $code=$classe=$intitule=$reference=$actif=$commentaire=$solde_anterieur='';
    5556                        $date_anterieure= date('Y-m-d');
     57                        $direction = 'credit';
    5658                        $action = 'ajouter';
    5759                }
     
    6668                . $classe
    6769                . '" id="classe" class="formo" />'
    68                 . '<label for="intitule"><strong>' . _T('asso:intitule') . '&nbsp;;</strong></label>'
     70                . '<label for="intitule"><strong>' . _T('asso:intitule') . '&nbsp;:</strong></label>'
    6971                . '<input name="intitule" type="text" value="'
    7072                . $intitule
     
    7375                . '<input name="reference" type="text" value="'
    7476                . $reference
    75                 . '" id="reference" class="formo" />'
    76                 . '<label for="solde_anterieur"><strong>' . _T('asso:solde_reporte_en_euros') . '</strong></label>'
     77                . '" id="reference" class="formo" />';
     78                if ($GLOBALS['association_metas']['comptes_stricts']=="on") {
     79                        if ($direction == "credit") {
     80                                $select_credit = 'selected="selected"';
     81                                $select_debit = '';
     82                        }
     83                        else
     84                        {
     85                                $select_credit = '';
     86                                $select_debit = 'selected="selected"';
     87                        }
     88                        $res .= '<label for="direction"><strong>' . _T('asso:direction_plan'). '</strong></label>'
     89                        . '<select name="direction" id="direction" class="formo">'
     90                        . '<option value="credit"'.$select_credit.'>credit</option>'
     91                        . '<option value="debit"'.$select_debit.'>debit</option>'
     92                        . '</select>';
     93                }
     94                $res .= '<label for="solde_anterieur"><strong>' . _T('asso:solde_reporte_en_euros') . '</strong></label>'
    7795                . '<input name="solde_anterieur" type="text" value="'
    7896                . $solde_anterieur
  • _plugins_/Association/Association_2.0/formulaires/configurer_association.html

    r42633 r43909  
    3838                <span class="spip_form_erreur">Aucune classe définie au plan comptable !</span>
    3939                <//B_classe_banques>
     40                <p>
     41                <input type="checkbox" name="destinations" [(#ENV{destinations}|?{checked="checked"})] id="destinations" />
     42                <label><strong><:asso:config_libelle_destinations:></strong></label><br />
     43                </p>
     44                <p>
     45                <input type="checkbox" name="comptes_stricts" [(#ENV{comptes_stricts}|?{checked="checked"})] id="comptes_stricts" />
     46                <label><strong><:asso:config_libelle_comptes_stricts:></strong></label><br />
     47                </p>
    4048                <p>
    4149                <label><strong><:asso:config_libelle_num_pc:></strong> </label>
  • _plugins_/Association/Association_2.0/lang/asso_fr.php

    r41003 r43909  
    3939                        'config_libelle_ventes'=> 'Gestion des ventes associatives',
    4040                        'config_libelle_comptes'=> 'Gestion comptable',
     41                        'config_libelle_destinations'=> 'Gestion des destinations comptables',
     42                        'config_libelle_comptes_stricts'=> 'Activer le mode strict de comptabilit&eacute;(comptes unidirectionnels dans le plan comptable)',
    4143                        'config_libelle_activites'=> 'Gestion des inscriptions aux activit&eacute;s (n&eacute;cessite le plugin Agenda)',
    4244                        'config_libelle_prets'=> 'Gestion des pr&egrave;ts et ressources',
     
    400402                        'plan_libelle_oui' => 'oui',
    401403                        'plan_libelle_non' => 'non',
    402 
     404                        'direction_plan' => 'Type d\'op&eacute;rations',
     405        # Destination comptable
     406                        'ajouter_destination' => 'ajouter une destination',
     407                        'supprimer_destination' => 'supprimer',
     408                # Titres
     409                        'destination_comptable' => 'Destination comptable',
     410               
     411                # Navigation
     412                        'destination_nav_ajouter' => 'Ajouter une destination comptable',
     413                # Bilan
     414                        'toutes_destination' => 'toutes destinations',
     415
     416        # Verifications
     417                        'erreur_titre' => 'Erreur',
     418                        'erreur_recette_depense' => 'Une op&eacute;ration ne peut contenir simultan&eacute;ment des d&eacute;penses et recettes. Par ailleurs les d&eacute;penses ou recettes ne peuvent pas etre n&eacute;gatives',
     419                        'erreur_montant_destination' => 'La somme des montants affect&eacute;s aux diff&eacute;rentes destinations ne correspond pas au montant global de l\'op&eacute;ration',
     420                        'erreur_destination_dupliquee' => 'Une meme destination a &eacute;t&eacute; s&eacute;lectionn&eacute;e plusieurs fois',
     421                        'erreur_code_plan' => 'Ce code est d&eacute;j&agrave; utilis&eacute; pour une autre r&eacute;f&eacute;rence comptable(peut-etre d&eacute;sactiv&eacute;e)',
    403422                        // chaines collectee automatiquement
    404423
     
    426445'contre_valeur_en_e__' => 'Contre-valeur (en &euro;) :',
    427446'contrepartie' => 'Contrepartie',
     447'crediteur' => 'compte cr&eacute;diteur',
     448'debiteur' => 'compte d&eacute;biteur',
    428449'depense' => 'D&eacute;pense :',
    429450'depenses' => 'D&eacute;penses',
     451'destination' => "Destinations",
    430452'date_aaaa_mm_jj' => 'Date (AAAA-MM-JJ) :',
    431453'date_report_aaa_mm_jj' => 'Date report (AAA-MM-JJ) :',
     
    489511'vous_vous_appretez_a_effacer_le_categorie' => 'Vous vous appr&ecirc;tez &agrave; effacer le cat&eacute;gorie',
    490512'vous_vous_appretez_a_effacer_le_compte' => 'Vous vous appr&ecirc;tez &agrave; effacer le compte',
     513'vous_vous_appretez_a_effacer_la_destination' => 'Vous vous appr&ecirc;tez &agrave; effacer la destination',
    491514'vous_vous_appretez_a_effacer_le_don' => 'Vous vous appr&ecirc;tez &agrave; effacer le don',
    492515'vous_vous_appretez_a_envoyer' => 'Vous vous appr&ecirc;tez &agrave; envoyer',
     
    508531'relance_de_cotisations' => 'Relance de cotisations',
    509532'suppression_de_compte' => 'Suppression de compte',
     533'suppression_de_destination' => 'Suppression de destination',
    510534'tous_les_dons' => 'Tous les dons',
    511535'toutes_les_ventes' => 'Toutes les ventes',
  • _plugins_/Association/Association_2.0/plugin.xml

    r42957 r43909  
    55        </auteur>
    66        <version>0.65</version>
    7         <version_base>42024</version_base>
     7        <version_base>43909</version_base>
    88        <meta>association_metas</meta>
    99        <etat>test</etat>
Note: See TracChangeset for help on using the changeset viewer.