Changeset 45740 in spip-zone


Ignore:
Timestamp:
Mar 22, 2011, 10:54:25 PM (10 years ago)
Author:
jeannolapin@…
Message:

Associaspip Comptabilité: correction de bugs et meilleure prise en charge du retour d'erreurs dans le formulaire CVT des comptes.

Location:
_plugins_/Association/Associaspip
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/Association/Associaspip/association_options.php

    r45562 r45740  
    161161$table_des_tables['asso_membres'] = 'asso_membres';
    162162$table_des_tables['association_metas'] = 'association_metas';
    163 $table_Des_tables['asso_destinations'] = 'asso_destinations';
    164 $table_Des_tables['asso_destinations_op'] = 'asso_destinations_op';
     163$table_des_tables['asso_destination'] = 'asso_destination';
     164$table_des_tables['asso_destination_op'] = 'asso_destination_op';
    165165
    166166// Pour que les raccourcis ci-dessous heritent d'une zone de clic pertinente
  • _plugins_/Association/Associaspip/balise/editeur_destinations.php

    r45562 r45740  
    66
    77function balise_EDITEUR_DESTINATIONS_dist ($p) {
    8       return calculer_balise_dynamique($p, 'EDITEUR_DESTINATIONS', array('id_compte'));
     8      return calculer_balise_dynamique($p, 'EDITEUR_DESTINATIONS', array('id_dest', 'montant_dest'));
    99}
    1010
    11 function balise_EDITEUR_DESTINATIONS_dyn($id_compte) {
    12         return association_editeur_destinations(association_liste_destinations_associees($id_compte));
     11function balise_EDITEUR_DESTINATIONS_dyn($id_dest, $montant_dest) {
     12        if (($id_dest) && ($montant_dest)) {
     13                $destinations_id_montant = array();
     14                foreach ($id_dest as $k => $v) {
     15                        $destinations_id_montant[$v] = $montant_dest[$k];
     16                }
     17        } else {
     18                $destinations_id_montant = '';
     19        }
     20       
     21        return association_editeur_destinations($destinations_id_montant);
    1322}
    1423
  • _plugins_/Association/Associaspip/formulaires/editer_asso_comptes.html

    r45562 r45740  
    6666                [<li [ class="(#GET{erreurs}|oui)erreur"]>
    6767                        [<span class='erreur_message'>(#GET{erreurs})</span>]
    68                         (#ENV{destinations}|oui)#EDITEUR_DESTINATIONS{id_compte}
     68                        (#ENV{destinations_on}|oui)#EDITEUR_DESTINATIONS{id_dest,montant_dest}
    6969                </li>]
    7070               
  • _plugins_/Association/Associaspip/formulaires/editer_asso_comptes.php

    r45562 r45740  
    1919
    2020        /* si c'est une nouvelle operation, on charge la date d'aujourd'hui */
    21         if ($id_compte=='new') $contexte['date'] = date('Y-m-d');
     21        if (!$id_compte) $contexte['date'] = date('Y-m-d');
    2222
    2323        // on ajoute les metas de classe_banques, destinations et comptes stricts
    2424        $contexte['classe_banques'] = $GLOBALS['association_metas']['classe_banques'];
    25         if ($GLOBALS['association_metas']['destinations']) $contexte['destinations'] = true;
     25        if ($GLOBALS['association_metas']['destinations']) {
     26                include_spip('inc/association_comptabilite');
     27                $contexte['destinations_on'] = true;
     28                $dest_id_montant = association_liste_destinations_associees($id_compte);
     29                if (is_array($dest_id_montant)) {
     30                        $contexte['id_dest'] = array_keys($dest_id_montant);
     31                        $contexte['montant_dest'] = array_values($dest_id_montant);
     32                } else {
     33                        $contexte['id_dest'] = '';
     34                        $contexte['montant_dest'] = '';
     35                }
     36        }
    2637        if  ($GLOBALS['association_metas']['comptes_stricts']) {
    2738                $contexte['montant'] = association_nbrefr($contexte['depense']+$contexte['recette']);
     
    7889
    7990function formulaires_editer_asso_comptes_traiter($id_compte) {
    80         if (!$_POST['destination_id1']) return "Erreur";
    8191        return formulaires_editer_objet_traiter('asso_comptes', $id_compte, '', '',  generer_url_ecrire('comptes'), '');
    8292}
  • _plugins_/Association/Associaspip/inc/association_comptabilite.php

    r45562 r45740  
    5454function association_editeur_destinations($destination, $unique=false, $defaut='')
    5555{
    56         // recupere la liste de toutes les destination dans un code HTML <option value="destinatio_id">destination</option>
     56        // recupere la liste de toutes les destination dans un code HTML <option value="destination_id">destination</option>
    5757        $liste_destination = association_toutes_destination_option_list();
    5858
     
    7171                                $liste_destination_selected = preg_replace('/(value=\''.$destId.'\')/', '$1 selected="selected"', $liste_destination);
    7272                                $res .= '<div class="formo" id="row'.$idIndex.'">';
    73                                 $res .= '<li class="editer_destination_id'.$idIndex.'">'
    74                                 . '<select name="destination_id'.$idIndex.'" id="destination_id'.$idIndex.'" >'
     73                                $res .= '<li class="editer_id_dest['.$idIndex.']">'
     74                                . '<select name="id_dest['.$idIndex.']" id="id_dest['.$idIndex.']" >'
    7575                                . $liste_destination_selected
    7676                                . '</select></li>';
    7777                                if ($unique==false) {
    78                                         $res .= '<li class="editer_montant_destination_id'.$idIndex.'"><input name="montant_destination_id'.$idIndex.'" value="'
     78                                        $res .= '<li class="editer_montant_dest['.$idIndex.']"><input name="montant_dest['.$idIndex.']" value="'
    7979                                        . association_nbrefr($destMontant)
    80                                         . '" type="text" id="montant_destination_id'.$idIndex.'" /></li>'
     80                                        . '" type="text" id="montant_dest['.$idIndex.']" /></li>'
    8181                                        . "<button class='destButton' type='button' onClick='addFormField(); return false;'>+</button>";
    8282                                        if ($idIndex>1) {
     
    9292                                $liste_destination = preg_replace('/(value=\''.$defaut.'\')/', '$1 selected="selected"', $liste_destination);
    9393                        }
    94                         $res .= '<div id="row1" class="formo"><li class="editer_destination_id1"><select name="destination_id1" id="destination_id1" >'
     94                        $res .= '<div id="row1" class="formo"><li class="editer_id_dest[1]"><select name="id_dest[1]" id="id_dest[1]" >'
    9595                        . $liste_destination
    9696                        . '</select></li>';
    9797                        if ($unique==false) {
    98                                 $res .= '<li class="editer_montant_destination_id1"><input name="montant_destination_id1" value="'
     98                                $res .= '<li class="editer_montant_dest[1]"><input name="montant_dest[1]" value="'
    9999                                . ''
    100                                 . '" type="text" id="montant_destination_id1"/></li>'
     100                                . '" type="text" id="montant_dest[1]"/></li>'
    101101                                . "<button class='destButton' type='button' onClick='addFormField(); return false;'>+</button>";
    102102                        }
     
    122122        include_spip('base/association');               
    123123
     124        /* TODO: enlever ces verif quand dons et ventes seront passes en CVT */
    124125        /* on verifie les valeurs de recette et depense: positif et pas d'entree recette et depense simultanees */
    125126        if (($recette<0) || ($depense<0) || ($recette>0 && $depense>0))
     
    201202{
    202203        $err = '';
    203         /* on recupere dans $_POST toutes les keys des entrees commencant par destination_id */
    204         $toutesDestinationsPOST = array_filter(array_keys($_POST), "destination_post_filter");
     204
     205        $toutesDestinations = _request('id_dest');
     206        $toutesDestinationsMontants = _request('montant_dest');
    205207
    206208        /* on verifie que le montant des destinations correspond au montant global et qu'il n'y a pas deux fois la meme destination (uniquement si on a plusieurs destinations) */
     
    208210        $id_inserted = array();
    209211
    210         if (count($toutesDestinationsPOST) > 1) {
    211                 foreach ($toutesDestinationsPOST as $destination_id)
    212                 {
    213                         $id_destination = _request($destination_id);
    214                                
     212        if (count($toutesDestinations) > 1) {
     213                foreach ($toutesDestinations as $id => $id_destination)
     214                {               
    215215                        /* on verifie qu'on n'a pas deja insere une destination avec cette id */
    216216                        if (!array_key_exists($id_destination,$id_inserted)) {
     
    221221                        }
    222222
    223                         $total_destination += floatval(preg_replace("/,/",".",_request('montant_'.$destination_id)));
     223                        $total_destination += floatval(preg_replace("/,/",".",$toutesDestinationsMontants[$id])); /* les montants sont dans un autre tableau aux meme cles */
    224224                }
    225225       
    226226                /* on verifie que la somme des montants des destinations correspond au montant attendu */
    227227                if ($montant_attendu != $total_destination) {
    228                         $err .= ' '._T('asso:erreur_montant_destination');
     228                        $err .= _T('asso:erreur_montant_destination');
    229229                }
    230230
    231231        } else { /* une seule destination, le montant peut ne pas avoir ete precise, dans ce cas pas de verif, c'est le montant attendu qui sera entre dans la base */
    232                 $toutesDestinationsPOST_val = array_values($toutesDestinationsPOST);
    233                 $destination_id = $toutesDestinationsPOST_val[0];
    234                 if ($montant_req=_request('montant_'.$destination_id)) {
    235                         $montant = floatval(preg_replace("/,/",".",$montant_req));
     232                /* quand on a une seule destination, l'id dans les tableaux est forcement 1 par contruction de l'editeur */
     233                if ($toutesDestinationsMontants[1]) {
     234                        $montant = floatval(preg_replace("/,/",".",$toutesDestinationsMontants[1]));
    236235                        /* on verifie que le montant indique correspond au montant de l'operation($recette+$depense) dont l'un des deux est egal a 0 */
    237236                        if ($montant_attendu != $montant) {
     
    258257        }
    259258
    260         /* on recupere dans $_POST toutes les keys des entrees commencant par destination_id */
    261         $toutesDestinationsPOST = array_filter(array_keys($_POST), "destination_post_filter");
    262        
    263         /* on boucle sur toutes les cles trouvees, les montants ont des noms de champs identiques mais prefixes par montant_ */
     259        $toutesDestinations = _request('id_dest');
     260        $toutesDestinationsMontants = _request('montant_dest');
    264261
    265262        /* TODO: enlever ces verif quand dons et ventes seront passes en CVT */
     
    268265        $id_inserted = array();
    269266
    270         if (count($toutesDestinationsPOST) > 1) {
    271                 foreach ($toutesDestinationsPOST as $destination_id)
    272                 {
    273                         $id_destination = _request($destination_id);
    274                                
     267        if (count($toutesDestinations) > 1) {
     268                foreach ($toutesDestinations as $id => $id_destination)
     269                {               
    275270                        /* on verifie qu'on n'a pas deja insere une destination avec cette id */
    276271                        if (!array_key_exists($id_destination,$id_inserted)) {
     
    283278                        }
    284279
    285                         $total_destination += floatval(preg_replace("/,/",".",_request('montant_'.$destination_id)));
     280                        $total_destination += floatval(preg_replace("/,/",".",$toutesDestinationsMontants[$id])); /* le tableau des montants a des cles indentique a celui des id */
    286281                }
    287282       
     
    294289
    295290                /* Pas d'erreur, on insere dans la base */
    296                 foreach ($toutesDestinationsPOST as $destination_id)
     291                foreach ($toutesDestinations as $id => $id_destination)
    297292                {
    298                         $id_destination = _request($destination_id);
    299                         $montant = floatval(preg_replace("/,/",".",_request('montant_'.$destination_id)));             
     293                        $montant = floatval(preg_replace("/,/",".",$toutesDestinationsMontants[$id]));  /* le tableau des montants a des cles indentique a celui des id */
    300294                        sql_insertq('spip_asso_destination_op', array(
    301295                            'id_compte' => $id_compte,
     
    304298                }
    305299        } else { /* une seule destination, le montant peut ne pas avoir ete precise, dans ce cas on entre directement le total recette+depense */
    306                 $toutesDestinationsPOST_val = array_values($toutesDestinationsPOST);
    307                 $destination_id = $toutesDestinationsPOST_val[0];
    308                 if ($montant_req=_request('montant_'.$destination_id)) {
    309                         $montant = floatval(preg_replace("/,/",".",$montant_req));
     300                /* par construction de l'editeur, si il y a une seule destination, l'id dans les tableaux destination_id et montant_destination_id est egal a 1 */
     301                if ($toutesDestinationsMontants[1]) {
     302                        $montant = floatval(preg_replace("/,/",".",$toutesDestinationsMontants[1]));
    310303                        /* TODO: enlever ces verif quand dons et ventes seront passes en CVT */
    311304                        /* on verifie que le montant indique correspond au montant de l'operation($recette+$depense) dont l'un des deux est egal a 0 */
     
    319312                        $montant = $depense+$recette;
    320313                }
    321                 $id_destination = _request($destination_id);
     314               
    322315                sql_insertq('spip_asso_destination_op', array(
    323316                    'id_compte' => $id_compte,
    324                     'id_destination' => $id_destination,
     317                    'id_destination' => $toutesDestinations[1],
    325318                    $attribution_montant => $montant));
    326319        }
  • _plugins_/Association/Associaspip/javascript/jquery.destinations_form.js

    r45562 r45740  
    11function addFormField() {
    22var id = document.getElementById("idNextDestination").value;
    3 var DestinationSelect = $("#destination_id1").clone().attr("id","destination_id"+id).attr("name","destination_id"+id);
    4 var DestinationList = $("<li class='editer_destination_id"+id+"'></li>").append(DestinationSelect);
     3var DestinationSelect = $("#id_dest\\[1\\]").clone().attr("id","id_dest["+id+"]").attr("name","id_dest["+id+"]");
     4var DestinationList = $("<li class='editer_id_dest["+id+"]'></li>").append(DestinationSelect);
    55var newRow = $("<div class='formo' id='row" + id + "'></div>")
    66        .append(DestinationList);
    7 newRow.append($("<li class='editer_montant_destination_id"+id+"'><input name='montant_destination_id"+id+"' type='text' id='montant_destination_id"+id+"' /></li><button type='button' class='destButton' onClick='addFormField(); return false;'>+</button><button type='button' class='destButton' onClick='removeFormField(\"#row" + id + "\"); return false;'>-</button>"));
     7newRow.append($("<li class='editer_montant_dest["+id+"]'><input name='montant_dest["+id+"]' type='text' id='montant_dest["+id+"]' /></li><button type='button' class='destButton' onClick='addFormField(); return false;'>+</button><button type='button' class='destButton' onClick='removeFormField(\"#row" + id + "\"); return false;'>-</button>"));
    88
    99newRow.appendTo($("#divTxtDestination"));
Note: See TracChangeset for help on using the changeset viewer.