Changeset 48464 in spip-zone


Ignore:
Timestamp:
Jun 3, 2011, 4:36:21 PM (10 years ago)
Author:
jeannolapin@…
Message:

Associaspip Verifications quand on modifie le plan comptable(validation du plan) + Les entrées existantes du livre des comptes suivent les modifications effectuées sur le plan.

Location:
_plugins_/Association/Associaspip
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/Association/Associaspip/action/editer_asso_plan.php

    r46893 r48464  
    5656                        'type_op' => $type_op),
    5757                    "id_plan=$id_plan");
     58
     59                $code_initial = _request('code_initial'); /* la fonction charger insere aussi le code initial dans une variable, on le recupere pour verifier si le code a ete modifie */
     60                       
     61                if (($code_initial != '') && ($code_initial != $code)) {/* le code a ete modifie, il faut repercuter la modification dans la table des comptes */
     62                        if ($code_initial[0]==$GLOBALS['association_metas']['classe_banques']) {
     63                                $colonne = 'journal'; /* pour les comptes financiers, le code du compte est stocke dans la colonne journal */
     64                        } else {
     65                                $colonne = 'imputation'; /* sinon le code du compte est stocke dans la colonne imputation */
     66                        }
     67                        sql_updateq('spip_asso_comptes', array($colonne => $code), $colonne."=".$code_initial);
     68                        /* il faut aussi verifier si ce code initial est utilise par un pc_XXX de la configuration afin de modifier la meta si besoin */
     69                        switch ($code_initial) {
     70                                case $GLOBALS['association_metas']['pc_cotisations']:
     71                                        ecrire_meta('pc_cotisations', $code, 'oui', 'association_metas');
     72                                        break;
     73
     74                                case $GLOBALS['association_metas']['pc_dons']:
     75                                        ecrire_meta('pc_dons', $code, 'oui', 'association_metas');
     76                                        break;
     77
     78                                case $GLOBALS['association_metas']['pc_ventes']:
     79                                        ecrire_meta('pc_ventes', $code, 'oui', 'association_metas');
     80                                        break;
     81
     82                                case $GLOBALS['association_metas']['pc_prets']:
     83                                        ecrire_meta('pc_prets', $code, 'oui', 'association_metas');
     84                                        break;
     85
     86                                case $GLOBALS['association_metas']['pc_activites']:
     87                                        ecrire_meta('pc_activites', $code, 'oui', 'association_metas');
     88                                        break;
     89                        }
     90                }
     91        }
     92
     93        /* si la gestion comptable est activee, on verifie que le plan comptable modifie est valide. Si il ne l'est pas, on desactive la gestion comptable */
     94        if ($GLOBALS['association_metas']['comptes']) {
     95                include_spip('inc/association_comptabilite');
     96                if (!association_valider_plan_comptable()) {
     97                        ecrire_meta('comptes', '', 'oui', 'association_metas');
     98                        /* on desactive les autres modules si ils sont actives */
     99                        if ($GLOBALS['association_metas']['dons']) ecrire_meta('dons', '', 'oui', 'association_metas');
     100                        if ($GLOBALS['association_metas']['ventes']) ecrire_meta('ventes', '', 'oui', 'association_metas');
     101                        if ($GLOBALS['association_metas']['prets']) ecrire_meta('prets', '', 'oui', 'association_metas');
     102                        if ($GLOBALS['association_metas']['activites']) ecrire_meta('activites', '', 'oui', 'association_metas');
     103                }
    58104        }
    59105       
  • _plugins_/Association/Associaspip/formulaires/editer_asso_plan.php

    r46893 r48464  
    2222                $contexte['classe'] = $plans['classe'];
    2323                $contexte['code'] = $plans['code'];
     24                /* on passe aussi le code originellement present pour detecter sans avoir a refaire de requete un changement de code qu'il faut repercuter dans la table des comptes */
     25                $contexte['_hidden'] = "<input type='hidden' name='code_initial' value='".$plans['code']."' />";
    2426                $contexte['intitule'] = $plans['intitule'];
    2527                $contexte['reference'] = $plans['reference']; // ce champ la est appele a disparaitre
     
    6062       
    6163        if (!array_key_exists("code",$erreurs)) { /* si le code est valide */
    62                 /* verifier 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 */
    63                 if ($r = sql_fetsel('code,id_plan', 'spip_asso_plan', "code=$code")) {
    64                         if ($r['id_plan']!=$id_plan) {
    65                                 $erreurs['code'] = _T('asso:erreur_plan_code_duplique');
     64                $code_initial = _request('code_initial'); /* on recupere le code initial pour verifier si on l'a modifie ou pas  */
     65                /* verifier que le code n'est pas deja attribue a une autre ligne du plan */
     66                if ($r = sql_fetsel('code,id_plan', 'spip_asso_plan', "code=$code AND id_plan<>$id_plan")) {
     67                        $erreurs['code'] = _T('asso:erreur_plan_code_duplique');
     68                } elseif ($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 */
     69                        $colonne = '';
     70                        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 */
     71                                $colonne = "journal"; /* si des operations avec ce compte existent, on trouve sa reference dans la colonne journal */
     72                        } 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*/
     73                                $colonne = "imputation"; /* si des operations avec ce compte existent, on trouve sa reference dans la colonne imputation */
     74                        }
     75                        if ($colonne) {
     76                                if (sql_countsel('spip_asso_comptes', $colonne."=".$code_initial)) {
     77                                        /* on a bien des operations avec les codes incrimines, on ne peut donc pas changer la classe du compte */
     78                                        $erreurs['code'] = _T('asso:erreur_plan_changement_classe_impossible');
     79                                }
     80                        }
     81                }
     82
     83                /* verifier si on modifie un code existant qu'on n'attribue pas a un pc_XX des metas un code de la classe financiere */
     84                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 null(on modifie un compte existant et qu'il n'y a pas d'erreur precedente) */
     85                        if ($code_initial != $code) {
     86                                if (($GLOBALS['association_metas']['pc_cotisations'] == $code_initial) ||
     87                                        (($GLOBALS['association_metas']['pc_dons'] == $code_initial) && ($GLOBALS['association_metas']['dons'] == 'on')) ||
     88                                        (($GLOBALS['association_metas']['pc_ventes'] == $code_initial) && ($GLOBALS['association_metas']['ventes'] == 'on')) ||
     89                                        (($GLOBALS['association_metas']['pc_prets'] == $code_initial) && ($GLOBALS['association_metas']['prets'] == 'on')) ||
     90                                        (($GLOBALS['association_metas']['pc_activites'] == $code_initial) && ($GLOBALS['association_metas']['activites'] == 'on'))) {
     91                                                $erreurs['code'] =  _T('asso:erreur_plan_code_modifie_utilise_classe_financiere');
     92                                        }
    6693                        }
    6794                }
  • _plugins_/Association/Associaspip/inc/association_comptabilite.php

    r48247 r48464  
    264264}
    265265
     266/* valide le plan comptable: on doit avoir au moins deux classes de comptes differentes */
     267/* le code du compte doit etre unique */
     268/* le code du compte doit commencer par un chiffre egal a sa classe */
     269function association_valider_plan_comptable()
     270{
     271        $classes = array();
     272        $codes = array();
     273        /* recupere le code et la classe de tous les comptes du plan comptable */
     274        $query = sql_select("code, classe", "spip_asso_plan");
     275        while ($data = sql_fetch($query)) {
     276                $classe = $data['classe'];
     277                $code = $data['code'];
     278                $classes[$classe] = 0; /* on comptes les classes differentes */
     279                if(array_key_exists($code, $codes)) {
     280                        return false; /* on a deux fois le meme code */
     281                } else {
     282                        $codes[$code] = 0;
     283                }
     284                /* on verifie que le code est bien de la forme chiffre-chiffre-caracteres alphanumeriques et que le premier digit correspond a la classe */
     285                if ((!preg_match("/^[0-9]{2}\w*$/", $code)) || ($code[0] != $classe)) return false;
     286        }
     287        if (count($classes)<2) return false; /* on doit avoir au moins deux classes differentes */
     288
     289        return true;
     290}
    266291?>
Note: See TracChangeset for help on using the changeset viewer.