Changeset 71884 in spip-zone


Ignore:
Timestamp:
Apr 10, 2013, 7:23:04 AM (6 years ago)
Author:
gildas.cotomale@…
Message:

Prise en compte des nouveaux champs... On profite de l'harmonisation du nommage pour factoriser le code et rendre certaines parties générique (par rappor à cette branche s'entend). Plus quelques corrections ci et là (j'espère au passage que ça résoud tous les bogues résiduels qui se découvrent peu à peu)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/Associaspip/trunk/formulaires/configurer_association.php

    r66942 r71884  
    1414function formulaires_configurer_association_verifier_dist() {
    1515        $erreurs = array();
     16        $erreurs['message_erreur'] = _T('asso:erreur_titre'); // on insere directement un titre de message d'erreurs, si on n'a que lui a la fin on renvoie un tableau vide
    1617
    17         $erreurs['message_erreur'] = _T('asso:erreur_titre'); // on insere directement un titre de message d'erreurs, si on n'a que lui a la fin on renvoie un tableau vide
    18         $dons = _request('dons');
    19         $ventes = _request('ventes');
    20         $prets = _request('prets');
    21         $activites = _request('activites');
    22         $comptes = _request('comptes');
    23         $pc_cotisations = _request('pc_cotisations');
    24         $pc_dons = _request('pc_dons');
    25         $pc_ventes = _request('pc_ventes');
    26         $pc_frais_envoi = _request('pc_frais_envoi');
    27         $pc_prets = _request('pc_prets');
    28         $pc_activites = _request('pc_activites');
    29         $nom = _request('nom'); // nom de l'association ne doit pas etre vide
    30         if (!$nom or strlen(trim($nom))==0) {
     18        if ( !strlen(trim(_request('nom'))) ) { // nom de l'association ne doit pas etre vide
    3119                $erreurs['nom'] = _T('asso:erreur_configurer_association_nom_association_vide');
    3220        }
    33         $ref_attribuee = array();
    34         $classe_attribuee = array();
    35         if ($comptes) { // si la gestion comptable est activee, on valide le plan comptable
     21
     22        $comptes = _request('comptes');
     23        if ($comptes) { // si la gestion comptable est activee
    3624                include_spip('inc/association_comptabilite');
    37                 if (!association_valider_plan_comptable()) {
     25                if (!association_valider_plan_comptable()) { // on (re)valide le plan comptable
    3826                        $erreurs['comptes'] = _T('asso:erreur_configurer_association_plan_comptable_non_valide');
    3927                        return $erreurs;
    4028                }
    41                 // on verifie qu'il n'a pas deux fois la meme reference comptable en incluant celle des cotisations ou qu'on n'a pas attribue aux cotisations ou modules de gestion une reference comptable de la classe des comptes financiers
    42                 $classe_financier = _request('classe_banques');
    43                 $classe_attribuee[$classe_financier] = 'classe_banques';
    44                 $ref_attribuee[$pc_cotisations] = 'pc_cotisations';
    45                 if ($pc_cotisations[0]==$classe_financier) // le premier caractere du code de la reference comptable est sa classe
    46                         $erreurs['pc_cotisations'] = _T('asso:erreur_configurer_association_reference_financier');
    47                 foreach( array('classe_charges','classe_produits','classe_contributions_volontaires') as $index=>$classe_testee) { // on verifie que les classes sont uniques
    48                         $$classe_testee = _request($classe_testee);
    49                         if (array_key_exists($$classe_testee, $classe_attribuee)) {
     29                $classe_attribuee = array();
     30                foreach( array('banques', 'charges','produits','contributions_volontaires') as $index=>$exigee) { // on verifie que les classes obligatoires sont distincts
     31                        $classe_testee = _request("classe_$exigee");
     32                        if (array_key_exists($classe_testee, $classe_attribuee)) { // classe dupliquee
    5033                                $erreurs[$classe_testee] = _T('asso:erreur_configurer_association_classe_identique');
    51                                 $erreurs[$ref_attribuee[$$classe_testee]] = _T('asso:erreur_configurer_association_classe_identique');
     34                                $erreurs[$ref_attribuee[$classe_testee]] = _T('asso:erreur_configurer_association_classe_identique');
    5235                        }
    53                         $classe_attribuee[$$classe_testee] = $classe_testee;
     36                        $classe_attribuee[$classe_testee] = $classe_testee;
    5437                }
     38                $classe_financier = $classe_attribuee['classe_banques'];
    5539        }
    56         if ($dons=='on') {
    57                 if (!$comptes) {
    58                         $erreurs['dons'] = _T('asso:erreur_configurer_association_gestion_comptable_non_activee');
    59                 } else {
    60                         if (!array_key_exists($pc_dons,$ref_attribuee)) { // le premier caractere du code de la reference comptable est sa classe
    61                                 if ($pc_dons[0]==$classe_financier)
    62                                         $erreurs['dons'] = _T('asso:erreur_configurer_association_reference_financier');
     40        $ref_attribuee = array();
     41        foreach (array(
     42                'comptes' => array('cotisations'), // pour inclure les cotisations
     43                'activites' => array('activites'),
     44                'dons' => array('dons'),
     45                'prets' => array('cautions','prets','ressources'),
     46                'ventes' => array('frais_envoi','ventes'),
     47        ) as $module=>$refs) {
     48                if (_request($module)) { // module actif
     49                        if (!$comptes) { // compta non activee :-S
     50                                $erreurs[$module] = _T('asso:erreur_configurer_association_gestion_comptable_non_activee');
    6351                        } else {
    64                                 $erreurs['dons'] = _T('asso:erreur_configurer_association_reference_multiple');
    65                                 $erreurs[$ref_attribuee[$pc_dons]] = _T('asso:erreur_configurer_association_reference_multiple');
     52                                foreach ($refs as $champ) {
     53                                        $val = _request("pc_$champ");
     54                                        if (!array_key_exists($val,$ref_attribuee)) { // reference unique
     55                                                if ($val[0]==$classe_financier) // le 1er caractere de la reference comptable est sa classe : elle ne doit pas etre financiere
     56                                                        $erreurs["pc_$champ"] = _T('asso:erreur_configurer_association_reference_financier');
     57                                        } elseif($val==_request('pc_ventes') && $champ=='frais_envoi') { // exception : vente et frais_envoi peuvent etre associes a la meme reference comptable meme si c'est deconseille d'un point de vue comptable
     58                                        } elseif($val=='' && $champ=='cautions') { // exception : la reference peut ne pas etre attribuee si on ne veut pas utiliser de systeme de cautionnement
     59                                        } else { // references multiples...
     60                                                $erreurs[$module] = _T('asso:erreur_configurer_association_reference_multiple');
     61                                                $erreurs[$ref_attribuee[$val]] = _T('asso:erreur_configurer_association_reference_multiple');
     62                                        }
     63                                        $ref_attribuee[$val] = "pc_$champ";
     64                                }
    6665                        }
    67                         $ref_attribuee[$pc_dons]='dons';
    68                 }
    69         }
    70         if ($ventes=='on') {
    71                 if (!$comptes) {
    72                         $erreurs['ventes'] = _T('asso:erreur_configurer_association_gestion_comptable_non_activee');
    73                 } else {
    74                         if (!array_key_exists($pc_ventes,$ref_attribuee)) {
    75                                 if ($pc_ventes[0]==$classe_financier) // le premier caractere du code de la reference comptable est sa classe
    76                                         $erreurs['ventes'] = _T('asso:erreur_configurer_association_reference_financier');
    77                         } else {
    78                                 $erreurs['ventes'] = _T('asso:erreur_configurer_association_reference_multiple');
    79                                 $erreurs[$ref_attribuee[$pc_ventes]] = _T('asso:erreur_configurer_association_reference_multiple');
    80                         }
    81                         $ref_attribuee[$pc_ventes]='ventes';
    82                         if ($pc_ventes!=$pc_frais_envoi) { // vente et frais_envoi peuvent etre associes a la meme reference comptable meme si c'est deconseille d'un point de vue comptable
    83                                 if (!array_key_exists($pc_frais_envoi,$ref_attribuee)) {
    84                                         if ($pc_frais_envoi[0]==$classe_financier) // le premier caractere du code de la reference comptable est sa classe
    85                                                 $erreurs['frais_envoi'] = _T('asso:erreur_configurer_association_reference_financier');
    86                                 } else {
    87                                         $erreurs['frais_envoi'] = _T('asso:erreur_configurer_association_reference_multiple');
    88                                         $erreurs[$ref_attribuee[$pc_frais_envoi]] = _T('asso:erreur_configurer_association_reference_multiple');
    89                                 }
    90                                 $ref_attribuee[$pc_frais_envoi]='frais_envoi';
    91                         }
    92                 }
    93         }
    94         if ($prets=='on') {
    95                 if (!$comptes) {
    96                         $erreurs['prets'] = _T('asso:erreur_configurer_association_gestion_comptable_non_activee');
    97                 } else {
    98                         if (!array_key_exists($pc_prets,$ref_attribuee)) {
    99                                 if ($pc_prets[0]==$classe_financier) // le premier caractere du code de la reference comptable est sa classe
    100                                         $erreurs['prets'] = _T('asso:erreur_configurer_association_reference_financier');
    101                         } else {
    102                                 $erreurs['prets'] = _T('asso:erreur_configurer_association_reference_multiple');
    103                                 $erreurs[$ref_attribuee[$pc_prets]] = _T('asso:erreur_configurer_association_reference_multiple');
    104                         }
    105                         $ref_attribuee[$pc_prets] = 'prets';
    106                 }
    107         }
    108         if ($activites=='on') {
    109                 if (!$comptes) {
    110                         $erreurs['activites'] = _T('asso:erreur_configurer_association_gestion_comptable_non_activee');
    111                 } else {
    112                         if (!array_key_exists($pc_activites,$ref_attribuee)) {
    113                                 if ($pc_activites[0]==$classe_financier) // le premier caractere du code de la reference comptable est sa classe
    114                                         $erreurs['activites'] = _T('asso:erreur_configurer_association_reference_financier');
    115                         } else {
    116                                 $erreurs['activites'] = _T('asso:erreur_configurer_association_reference_multiple');
    117                                 $erreurs[$ref_attribuee[$pc_activites]] = _T('asso:erreur_configurer_association_reference_multiple');
    118                         }
    119                         $ref_attribuee[$pc_activites]='activites';
    12066                }
    12167        }
     
    12470                return array();
    12571        }
    126         // on a des erreurs, pour conserver l'etat des checkbox vides, il faut faire un set_request en mettant une valeur differente de 'on' sinon le retour de verif mange les eventuelles modifs
    127         if (!$comptes)
    128                 set_request('comptes', 'off');
    129         if (!$dons)
    130                 set_request('dons', 'off');
    131         if (!$ventes)
    132                 set_request ('ventes', 'off');
    133         if (!$prets)
    134                 set_request ('prets', 'off');
    135         if (!$activites)
    136                 set_request ('activites', 'off');
    137         if (!_request('$destinations'))
    138                 set_request ('destinations', 'off');
    139         if (!_request('civilite'))
    140                 set_request ('civilite', 'off');
    141         if (!_request('prenom'))
    142                 set_request ('prenom', 'off');
    143         if (!_request('id_asso'))
    144                 set_request ('id_asso', 'off');
     72        foreach (array(
     73                'activites', 'comptes', 'dons', 'prets', 'ventes', // compta (destinations, exercices)
     74                'civilite', 'id_asso', 'prenom', // fichemembres
     75        ) as $checkbox) { // on a des erreurs, pour conserver l'etat des checkbox vides, il faut faire un set_request en mettant une valeur differente de 'on' sinon le retour de verif mange les eventuelles modifs
     76                if (!_request($checkbox))
     77                        set_request($checkbox, 'off');
     78        }
     79
    14580        return $erreurs;
    14681}
    14782
    148 // reprise en grande partie du code de la fonction traiter de configurer_metas
    14983function formulaires_configurer_association_traiter_dist($form) {
    15084        include_spip('formulaires/configurer_metas');
     
    16195                $metas_list[$row['nom']]=0;
    16296        }
    163         // ignorer les changements fait dans un module non active
    164         $dons = _request('dons');
    165         $ventes = _request('ventes');
    166         $prets = _request('prets');
    167         $activites = _request('activites');
    168         $comptes = _request('comptes');
    169         if (!$comptes) {
    170                 unset($metas_list['pc_cotisations']);
    171                 unset($metas_list['dc_cotisations']);
    172                 unset($metas_list['destinations']);
     97
     98        foreach ( array(
     99                'activites' => array('dc_activites', 'pc_activites'),
     100                'comptes' => array('destinations','dc_cotisations', 'pc_cotisations',),
     101                'dons' => array('dc_colis','pc_colis','pc_dons','dc_dons'), //no dc_colis
     102                'prets' => array('dc_cautions','pc_cautions','dc_prets','pc_prets','dc_ressources','pc_ressources',), //no dc_cautions
     103                'ventes' => array('dc_frais_envoi','pc_frais_envoi','dc_ventes','pc_ventes'), //no dc_frais_envoi
     104        ) as $module=>$metas) { // ignorer les changements fait dans un module non active
     105                if (!_request($module)) { // module desactive...
     106                        foreach ($metas as $meta) { // ...ignorer les changements faits
     107                                unset($metas_list[$meta]);
     108                        }
     109                }
    173110        }
    174         if (!$dons) {
    175                 unset($metas_list['pc_dons']);
    176                 unset($metas_list['dc_dons']);
     111        foreach ( array('cotisations', 'dons', 'colis', 'ressources', 'cautions', 'prets', 'activites',) as $pc ) { // A-t-on modifie les metas pc_XXX si oui il faut faire suivre dans la table des comptes la modif, sinon on perd toutes les operations deja enregistrees
     112                $nrc = _request("pc_$pc"); // Nouvelle Reference
     113                if ($comptes && $GLOBALS['association_metas']["pc_$pc"] && ($nrc!=$GLOBALS['association_metas']["pc_$pc"])) { // condition pour modifier dans la table des comptes : module actif (peut-etre aussi juste active par cet envoi) ET meta pre-existente ET meta modifiee
     114                        sql_updateq('spip_asso_comptes', array('imputation' => $nrc), 'imputation='.$GLOBALS['association_metas']["pc_$pc"]);
     115                }
    177116        }
    178         if (!$ventes) {
    179                 unset($metas_list['pc_ventes']);
    180                 unset($metas_list['pc_frais_envoi']);
    181                 unset($metas_list['dc_ventes']);
    182         }
    183         if (!$prets) {
    184                 unset($metas_list['pc_prets']);
    185         }
    186         if (!$activites) {
    187                 unset($metas_list['pc_activites']);
    188         }
    189         // A-t-on modifie les metas pc_XXX si oui il faut faire suivre dans la table des comptes la modif, sinon on perd toutes les operations deja enregistrees
    190         $pc_cotisations = _request('pc_cotisations');
    191         $pc_dons = _request('pc_dons');
    192         $pc_ventes = _request('pc_ventes');
    193117        $pc_frais_envoi = _request('pc_frais_envoi');
    194         $pc_prets = _request('pc_prets');
    195         $pc_activites = _request('pc_activites');
    196         // condition pour modifier dans la table des comptes : module actif (peut-etre aussi juste active par cet envoi) ET meta pre-existente ET meta modifiee
    197         if ($comptes && $GLOBALS['association_metas']['pc_cotisations'] && ($pc_cotisations!=$GLOBALS['association_metas']['pc_cotisations'])) {
    198                 sql_updateq('spip_asso_comptes', array('imputation' => $pc_cotisations), 'imputation='.$GLOBALS['association_metas']['pc_cotisations']);
    199         }
    200         if ($dons && $GLOBALS['association_metas']['pc_dons'] && ($pc_dons!=$GLOBALS['association_metas']['pc_dons'])) {
    201                 sql_updateq('spip_asso_comptes', array('imputation' => $pc_dons), 'imputation='.$GLOBALS['association_metas']['pc_dons']);
    202         }
    203         if ($ventes && $GLOBALS['association_metas']['pc_ventes'] && ($pc_ventes!=$GLOBALS['association_metas']['pc_ventes'])) {
    204                 sql_updateq('spip_asso_comptes', array('imputation' => $pc_ventes), 'imputation='.$GLOBALS['association_metas']['pc_ventes']);
    205         }
    206         if ($ventes &&
     118        if (_request('ventes') &&
    207119                $GLOBALS['association_metas']['pc_frais_envoi'] &&
    208120                ($pc_frais_envoi!=$GLOBALS['association_metas']['pc_frais_envoi']) &&
    209121                ($GLOBALS['association_metas']['pc_frais_envoi']!=$GLOBALS['association_metas']['pc_ventes']) &&
    210                 $pc_ventes!=$pc_frais_envoi) { // pour celui la on controle aussi que le pc_vente et pc_frais_envoi etaient differents avant et apres la modif
     122                _request('pc_ventes')!=$pc_frais_envoi) { // pour celle-la on controle aussi que le pc_vente et pc_frais_envoi etaient differents avant et apres la modif
    211123                        // - si ils etaient egaux, on ne peux pas faire migrer les frais d'envoi vu qu'ils etaient inseres dans la meme operation comptable
    212124                        // - si ils sont maintenant egaux mais ne l'etaient pas avant, toutes les ventes vont apparaitre en double: la vente elle meme et les frais d'envoi.
    213125                        sql_updateq('spip_asso_comptes', array('imputation' => $pc_frais_envoi), 'imputation='.$GLOBALS['association_metas']['pc_frais_envoi']);
    214         }
    215         if ($prets && $GLOBALS['association_metas']['pc_prets'] && ($pc_prets!=$GLOBALS['association_metas']['pc_prets'])) {
    216                 sql_updateq('spip_asso_comptes', array('imputation' => $pc_prets), 'imputation='.$GLOBALS['association_metas']['pc_prets']);
    217         }
    218         if ($activites && $GLOBALS['association_metas']['pc_activites'] && ($pc!=$GLOBALS['association_metas']['pc_activites'])) {
    219                 sql_updateq('spip_asso_comptes', array('imputation' => $pc_activites), 'imputation='.$GLOBALS['association_metas']['pc_activites']);
    220126        }
    221127        // code repris sur formulaires_configurer_metas_traiter_dist
Note: See TracChangeset for help on using the changeset viewer.