/[openfoncier]/trunk/obj/instruction.class.php
ViewVC logotype

Diff of /trunk/obj/instruction.class.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 123 by fraynaud, Sun Sep 11 20:24:32 2011 UTC revision 1540 by fmichon, Thu Mar 21 06:50:50 2013 UTC
# Line 1  Line 1 
1  <?php  <?php
2  //$Id$  /**
3  //gen openMairie le 10/02/2011 20:34   *
4  /*   *
5  $Id: instruction.class.php,v 1.29 2010-10-27 10:52:20 fraynaud Exp $   * specific :
6  specific :   * - cle secondaire
7  - cle secondaire   *   destruction autorisée que pour le dernier evenement
8    destruction autorisée que pour le dernier evenement   *     [delete the last event ]
9    [delete the last event ]   * - variable globale [global variables]
10  - variable globale [global variables]   *     var $archive_date_depot;
11      var $archive_date_depot;   *     var $retourformulaire;
12      var $retourformulaire;   *     var $idxformulaire;
13      var $idxformulaire;   * - modification des données dans dossier trigger avant
14  - modification des données dans dossier trigger avant   * [modify dossier data with trigger function]
15    [modify dossier data with trigger function]   * - function moisdate : pour ajouter des mois a une date
16  - function moisdate : pour ajouter des mois a une date   *   [add months (delay) and calculation final date]
17    [add months (delay) and calculation final date]   * - voir script_lang.js : bible ...
18  - voir script_lang.js : bible ...   *
19  */   * @package openfoncier
20  require_once ("../gen/obj/instruction.class.php");   * @version SVN : $Id$
21     */
22    
23    //
24    require_once "../gen/obj/instruction.class.php";
25    
26    //
27    require_once "../services/outgoing/messageenqueuer.php";
28    
29    //
30  class instruction extends instruction_gen {  class instruction extends instruction_gen {
31    
32      var $archive_date_depot; // specific      var $archive_date_depot; // specific
33      var $retourformulaire;   // specific      var $retourformulaire;   // specific
34      var $idxformulaire;      // specific      var $idxformulaire;      // specific
35    
36      function instruction($id,&$db,$debug) {      function instruction($id, &$db, $debug) {
37          $this->constructeur($id,$db,$debug);          $this->constructeur($id, $db, $debug);
     }// fin constructeur  
   
     function setvalF($val){  
         $this->valF['instruction'] = $val['instruction'];  
         $this->valF['destinataire'] = $val['destinataire'];  
         $this->valF['lettretype'] = $val['lettretype'];  
         $this->valF['dossier'] = $val['dossier'];  
         if($val['datecourrier']!="")  
             $this->valF['datecourrier'] = $this->dateDB($val['datecourrier']);  
         $this->valF['complement'] = $val['complement'];  
         $this->valF['complement2'] = $val['complement2'];  
         $this->valF['evenement'] = $val['evenement'];  
38      }      }
39    
40        // {{{ Gestion de la confidentialité des données spécifiques
41    
42      function cleSecondaire($id,&$db,$val,$DEBUG) {      /**
43      // controle suppression cle secondaire [secondary key delete control]       * Surcharge pour gérer les actions disponibles dans le portlet
44      // ------------------------------------------------------------------------------------       */
45      // specifique detruire que le dernier   [specific instruction : delete the last event ]      function checkAccessibility() {
46      // ------------------------------------------------------------------------------------          //
47          $dernierevenement='';          parent::checkAccessibility();
48          $sql="select max(instruction) from instruction where dossier ='".          // Si l'utilisateur est un intructeur qui ne correspond pas à la
49          $this->idxformulaire."'";          // division du dossier
50          $dernierevenement = $db->getOne($sql);          if ($this->f->isUserInstructeur()
51           if($dernierevenement==$id){              && isset($this->f->om_utilisateur["division"])
52               $this->correct=true;              && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
53               $this->msg="<br>"._('destruction_chronologique')." ok <br>";              //
54            }else{              $this->actions_sup = array();
55               $this->msg="<br>"._('destruction_evenement')." : ".$dernierevenement.              $this->setParameter("actions", array());
              "<br>"._('destruction_chronologique');  
              $this->correct=false;  
           }  
     }  
   
     function verifier($val,&$db,$DEBUG){  
         $this->correct=True;  
         $imgv="";  
         $f="&nbsp!&nbsp;&nbsp;&nbsp;&nbsp;";  
         $imgv="<img src='../app/img/punaise.png' style='vertical-align:middle' hspace='2' border='0'>";  
         // obligatoire  
         if ($this->valF['destinataire']==""){  
            $this->correct=false;  
            $this->msg= $this->msg.$imgv." "._('instruction')." ".  
            _('obligatoire').$f;  
         }  
         if ($val['datecourrier']==""){  
            $this->correct=false;  
            $this->msg= $this->msg.$imgv." "._('datecourrier')." ".  
            _('obligatoire').$f;  
         }  
         if ($val['evenement']==""){  
            $this->correct=false;  
            $this->msg= $this->msg.$imgv." "._('evenement')." ".  
            _('obligatoire').$f;  
56          }          }
57      }//verifier          // Si une action 'lu' est présente et que le champ lu est à true
58            // on supprime l'action
59            if (isset($this->actions_sup["lu"])
60                && isset($this->val[array_search("lu", $this->champs)])
61                && $this->val[array_search("lu", $this->champs)]== "t") {
62                unset($this->actions_sup["lu"]);
63            }
64        }
65    
66      function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){      /**
67          if ($validation==0) {       * Cette methode est à surcharger elle permet de tester dans chaque classe
68              if ($maj == 0){       * des droits des droits spécifiques en fonction des données
69                  $form->setVal("destinataire", $idxformulaire);       */
70                  $form->setVal("dossier", $idxformulaire);      function canAccess() {
71                  $form->setVal("datecourrier", date('Y-m-d'));          // Si l'utilisateur est un intructeur qui ne correspond pas à la
72              }          // division du dossier
73              $form->setVal("bible_auto","bible_auto()");          if ($this->f->isUserInstructeur()
74              $form->setVal("bible","bible()");              && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
75              $form->setVal("bible2","bible2()");              && $this->getParameter("maj") != 3) {
76                //
77                return false;
78          }          }
79          $this->retourformulaire=$retourformulaire;          //
80          $this->idxformulaire=$idxformulaire;          return true;
81      }      }
82    
83      function setType(&$form,$maj) {      /**
84      if ($maj < 2) { //ajouter et modifier       * Cette méthode permet de récupérer la division d'un dossier
85          $form->setType('destinataire', 'hidden');       */
86          $form->setType('lettretype', 'hiddenstatic');      function getDivisionFromDossier() {
87          $form->setType('complement', 'textarea');          //
88          $form->setType('complement2', 'textarea');          if (!isset($this->val[array_search("dossier", $this->champs)])) {
89                return NULL;
90            }
91            //
92            $sql = "select division from ".DB_PREFIXE."dossier ";
93            $sql .= " where dossier='".$this->val[array_search("dossier", $this->champs)]."'";
94            //
95            $division = $this->db->getOne($sql);
96            $this->addToLog("getDivisionFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
97            database::isError($division);
98            //
99            return $division;
100        }
101    
102        // }}}
103    
104        function setType(&$form, $maj) {
105            //
106            parent::setType($form, $maj);
107            // On cache tous les champs
108            // XXX
109          $form->setType('complement3', 'hidden');          $form->setType('complement3', 'hidden');
110          $form->setType('bible3', 'hidden');          $form->setType('bible3', 'hidden');
111          $form->setType('complement4', 'hidden');          $form->setType('complement4', 'hidden');
# Line 131  class instruction extends instruction_ge Line 132  class instruction extends instruction_ge
132          $form->setType('bible14', 'hidden');          $form->setType('bible14', 'hidden');
133          $form->setType('complement15', 'hidden');          $form->setType('complement15', 'hidden');
134          $form->setType('bible15', 'hidden');          $form->setType('bible15', 'hidden');
135          $form->setType('bible_auto', 'httpclick');          //
         $form->setType('bible', 'httpclick');  
         $form->setType('bible2', 'httpclick');  
         $form->setType('dossier', 'hiddenstatic');  
136          $form->setType('delai', 'hidden');          $form->setType('delai', 'hidden');
137          $form->setType('etat', 'hidden');          $form->setType('etat', 'hidden');
138          $form->setType('accord_tacite', 'hidden');          $form->setType('accord_tacite', 'hidden');
139          $form->setType('action', 'hidden');          $form->setType('action', 'hidden');
140          $form->setType('delai_notification', 'hidden');          $form->setType('delai_notification', 'hidden');
141          $form->setType('avis', 'hidden');          $form->setType('avis_decision', 'hidden');
142            //
143          $form->setType('archive_delai', 'hidden');          $form->setType('archive_delai', 'hidden');
144          $form->setType('archive_etat', 'hidden');          $form->setType('archive_etat', 'hidden');
145          $form->setType('archive_accord_tacite', 'hidden');          $form->setType('archive_accord_tacite', 'hidden');
# Line 153  class instruction extends instruction_ge Line 152  class instruction extends instruction_ge
152          $form->setType('archive_date_validite', 'hidden');          $form->setType('archive_date_validite', 'hidden');
153          $form->setType('archive_date_achevement', 'hidden');          $form->setType('archive_date_achevement', 'hidden');
154          $form->setType('archive_date_conformite', 'hidden');          $form->setType('archive_date_conformite', 'hidden');
155          $form->setType('archive_date_chantier', 'hidden');              $form->setType('archive_date_chantier', 'hidden');  
156          $form->setType('libelle', 'hiddenstatic');          //
157          if($maj==0){ // add          $form->setType('numero_arrete', 'hidden');
158              $form->setType('instruction', 'hiddenstatic');          
159              $form->setType('evenement', 'select');          //
160              $form->setType('datecourrier', 'date2');          if ($maj < 2) { //ajouter et modifier
161          }else{ // modify              $form->setType('destinataire', 'hidden');
162              $form->setType('instruction', 'hiddenstatic');              $form->setType('lettretype', 'hiddenstatic');
163              $form->setType('evenement', 'hiddenstatic');              $form->setType('complement', 'textarea');
164              //$form->setType('datecourrier', 'hiddenstaticdate');              $form->setType('complement2', 'textarea');
165              $form->setType('datecourrier', 'date2');              $form->setType('bible_auto', 'httpclick');
166          }              $form->setType('bible', 'httpclick');
167      }else{ // supprimer  [delete]              $form->setType('bible2', 'httpclick');
168          $form->setType('instruction', 'hiddenstatic');              $form->setType('dossier', 'hidden');  
169          $form->setType('dossier', 'hiddenstatic');              $form->setType('libelle', 'hiddenstatic');
170          $form->setType('archive_delai', 'hiddenstatic');              $form->setType('signataire_arrete','select');
171          $form->setType('archive_etat', 'hiddenstatic');              if($maj==0){ // add
172          $form->setType('archive_accord_tacite', 'hiddenstatic');                  $form->setType('instruction', 'hiddenstatic');
173          $form->setType('archive_avis', 'hiddenstatic');                  $form->setType('evenement', 'select');
174          $form->setType('archive_date_complet', 'hiddenstatic');                  $form->setType('date_evenement', 'date2');
175          $form->setType('archive_date_rejet', 'hiddenstatic');              }else{ // modify
176          $form->setType('archive_date_limite', 'hiddenstatic');                  $form->setType('instruction', 'hiddenstatic');
177          $form->setType('archive_date_notification_delai', 'hiddenstatic');                  $form->setType('evenement', 'selecthiddenstatic');
178          $form->setType('archive_date_decision', 'hiddenstatic');                  //$form->setType('date_evenement', 'hiddenstaticdate');
179          $form->setType('archive_date_validite', 'hiddenstatic');                  $form->setType('date_evenement', 'date2');
180          $form->setType('archive_date_achevement', 'hiddenstatic');                  // necessaire pour calcul de date en modification
181      }                  //$form->setType('delai', 'hiddenstatic');
182                }
183            } elseif($maj==2){
184                $form->setType('dossier', 'hidden');
185                $form->setType('bible_auto', 'hidden');
186                $form->setType('bible', 'hidden');
187                $form->setType('bible2', 'hidden');
188            }else {
189                $form->setType('destinataire', 'hidden');
190                $form->setType('dossier', 'hidden');
191                $form->setType('bible_auto', 'hidden');
192                $form->setType('bible', 'hidden');
193                $form->setType('bible2', 'hidden');
194            }
195      }      }
196    
197      function setTaille(&$form,$maj){      function setSelect(&$form, $maj,&$db,$debug) {
198          $form->setTaille('complement', 120);          /**
199          $form->setTaille('complement2', 120);           * On ne surcharge pas la méthode parent car une requête sur la table
200          $form->setTaille('datecourrier', 12);           * dossier est mauvaise pour les performances, car la requête qui
201      }           * concerne evenement est plus complexe que celle générée et car les
202             * champs action, avis_decision et etat ne sont pas utilisés comme des
203      function setMax(&$form,$maj){           * select
204          $form->setMax('complement',12 );           */
205          $form->setMax('complement2',12 );          if(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc.php"))
206      }              include ("../sql/".$db->phptype."/".$this->table.".form.inc.php");
207            elseif(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc"))
     //function setSelect(&$form, $maj,&$db,$DEBUG,$idxformulaire) {  
     function setSelect(&$form, $maj,&$db,$DEBUG) {  
         if(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc"))  
208              include ("../sql/".$db->phptype."/".$this->table.".form.inc");              include ("../sql/".$db->phptype."/".$this->table.".form.inc");
209          if($maj<2){  
210              // *** evenement ***          //// action
211              $contenu=array();          //$this->init_select($form, $db, $maj, $debug, "action",
212              // etat du dossier          //                   $sql_action, $sql_action_by_id, false);
213              $sql="select etat from dossier where dossier ='".  
214                    $this->idxformulaire."'";          //// avis_decision
215              $etat_dossier = $db->getOne($sql);          //$this->init_select($form, $db, $maj, $debug, "avis_decision",
216              $nature_dossier= substr($this->idxformulaire,0,2);          //                   $sql_avis_decision, $sql_avis_decision_by_id, false);
217              // recherche des evenement de transition  
218              $sql= $sql_transition." where transition.etat ='".$etat_dossier."' and (evenement.nature ='".          //// dossier
219                    $nature_dossier."' or (nature ='T' and nature !='CU')) order by evenement.action";          //$this->init_select($form, $db, $maj, $debug, "dossier",
220              // *** attention en dur le CU          //                   $sql_dossier, $sql_dossier_by_id, false);
221                
222            //// etat
223            //$this->init_select($form, $db, $maj, $debug, "etat",
224            //                   $sql_etat, $sql_etat_by_id, false);
225    
226            //// evenement
227            //$this->init_select($form, $db, $maj, $debug, "evenement",
228            //                   $sql_evenement, $sql_evenement_by_id, false);
229    
230            // signataire_arrete
231            $this->init_select($form, $db, $maj, $debug, "signataire_arrete",
232                               $sql_signataire_arrete, $sql_signataire_arrete_by_id, true);
233    
234            /**
235             * Gestion du filtre sur les événements de workflow disponibles
236             * On récupère ici en fonction de l'état du dossier d'instruction en
237             * cours et du type du dossier d'instruction en cours la liste
238             * événements disponibles.
239             */
240            if ($maj == 0) {
241                // Récupération des événements par une jointure entre la table dossier
242                // et la table transition et la table evenement et la table
243                // lien_dossier_instruction_type_evenement en fonction de l'identifiant
244                // du dossier d'instruction en cours
245                $sql = "SELECT
246                evenement.evenement,
247                (evenement.libelle||' ['||evenement.action||']') as lib
248                FROM ".DB_PREFIXE."dossier
249                INNER JOIN ".DB_PREFIXE."lien_dossier_instruction_type_evenement
250                    ON dossier.dossier_instruction_type=lien_dossier_instruction_type_evenement.dossier_instruction_type
251                INNER JOIN ".DB_PREFIXE."evenement
252                    ON evenement.evenement=lien_dossier_instruction_type_evenement.evenement
253                INNER JOIN ".DB_PREFIXE."transition
254                    ON evenement.evenement = transition.evenement
255                    AND dossier.etat=transition.etat
256                WHERE dossier.dossier='".$this->idxformulaire."'
257                ORDER BY evenement.action";
258              $res = $db->query($sql);              $res = $db->query($sql);
259              if (database::isError($res))              $this->addToLog("setSelect(): db->query(\"".$sql."\");", VERBOSE_MODE);
260                if (database::isError($res)) {
261                  die($res->getMessage());                  die($res->getMessage());
             $contenu[0][0]="";  
             $contenu[1][0]=_('choisir')." "._('evenement');  
             $k=1;  
             while ($row=& $res->fetchRow()){  
                 if($maj==0){ // ajouter  
                     $contenu[0][$k]=$row[0];  
                     $contenu[1][$k]=$row[1];  
                     $k++;  
                 }else{  
                     // select hiddenstatic  
                     $contenu[0][$k]=$row[0];  
                     $contenu[1][$k]=$row[1];  
                     $k++;  
                 }  
262              }              }
263              $form->setSelect("evenement",$contenu);              // Remplissage du tableau du select
264              // lien bible_auto  [link]              $contenu = array(
265              $contenu=array();                  0 => array("",),
266              $contenu[0]=" automatique ";                  1 => array(_('choisir')." "._('evenement'),)
267              $form->setSelect("bible_auto",$contenu);              );
268              // lien bible1              while ($row=& $res->fetchRow()) {
269              $contenu=array();                  $contenu[0][] = $row[0];
270              $contenu[0]=" Bible ";                  $contenu[1][] = $row[1];
271              $form->setSelect("bible",$contenu);              }
272              // lien bible2              $form->setSelect("evenement", $contenu);
273              $contenu=array();          } else {
274              $contenu[0]=" Bible ";              $sql = "SELECT
275              $form->setSelect("bible2",$contenu);              (evenement.libelle||' ['||evenement.action||']') as lib
276          }              FROM ".DB_PREFIXE."evenement
277      } // function select              WHERE evenement.evenement=".$this->getVal("evenement")."";
278                $res = $db->getone($sql);
279      function setGroupe(&$form,$maj){              $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
280          $form->setGroupe('evenement','D');              if (database::isError($res)) {
281          $form->setGroupe('libelle','G');                  die($res->getMessage());
282          $form->setGroupe('datecourrier','G');              }
283          $form->setGroupe('lettretype','F');              //
284      }              $contenu = array(
285                    0 => array($this->getVal("evenement"),),
286      function setRegroupe(&$form,$maj){                        1 => array($res,)
287          $form->setRegroupe('evenement','D',_('evenement'), "collapsible");              );
288          $form->setRegroupe('libelle','G','');              $form->setSelect("evenement", $contenu);
289          $form->setRegroupe('datecourrier','G','');          }
290          $form->setRegroupe('lettretype','F','');  
291          $form->setRegroupe('complement','D',_('complement'), "startClosed");          /**
292          $form->setRegroupe('bible_auto','G','');           * Gesion des liens vers la bible
293          $form->setRegroupe('bible','F','');           */
294          $form->setRegroupe('complement2','D',_('complement2'), "startClosed");          // lien bible_auto
295          $form->setRegroupe('bible2','F','');          $contenu = array(_("automatique"));
296            $form->setSelect("bible_auto",$contenu);
297            // lien bible1
298            $contenu = array(_("bible"));
299            $form->setSelect("bible",$contenu);
300            // lien bible2
301            $contenu = array(_("bible"));
302            $form->setSelect("bible2",$contenu);
303        }
304    
305        function cleSecondaire($id, &$db, $val, $DEBUG) {
306            //
307            parent::cleSecondaire($id, $db, $val, $DEBUG);
308    
309            /**
310             * Vérification que l'élément supprimé est le dernier pour pouvoir
311             * remodifier les données de manière itérative.
312             */
313            // Initialisation
314            $dernierevenement = "";
315            // Récupération du dernier élément de la table d'instruction qui
316            // concerne le dossier en cours
317            $sql = "SELECT max(instruction)
318            FROM ".DB_PREFIXE."instruction
319            WHERE dossier ='".$this->idxformulaire."'";
320            $dernierevenement = $db->getOne($sql);
321            $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
322            if (database::isError($dernierevenement)) {
323                die($dernierevenement->getMessage());
324            }
325            // Si on se trouve effectivement sur le dernier evenement d'instruction
326            if ($dernierevenement == $id) {
327                // Alors on valide la suppression
328                $this->correct = true;
329                $this->addToMessage(_('Destruction_chronologique'));
330            } else {
331                // Alors on annule la suppression
332                $this->correct = false;
333                $this->addToMessage(_("Seul le dernier evenement d'instruction peut etre supprime."));
334            }
335        }
336    
337        // Sélectionne le signataire_arrete par défaut
338        function setVal(&$form,$maj,$validation){
339            
340            // Ajout
341            if($maj == 0) {
342                
343                // Création de la requête
344                $sql = "SELECT signataire_arrete
345                        FROM ".DB_PREFIXE."signataire_arrete
346                        WHERE defaut IS TRUE";
347                
348                // Exécution de la requête
349                $this->f->addToLog("deleteAllLienDossierInstructionTypeEvenementEvenement(): db->query(\"".$sql."\");", VERBOSE_MODE);
350                $res = $this->f->db->query($sql);
351                $this->f->isDatabaseError();
352            
353                $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
354                
355                if ( isset($row['signataire_arrete']) && is_numeric($row['signataire_arrete'])){
356                    
357                    $form->setVal("signataire_arrete",$row['signataire_arrete']);
358                }
359            }
360        }
361    
362        /*Met des valeurs par défaut dans certains des sous-formulaire*/
363        function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){
364            if ($validation==0 and $maj<2) {
365                if ($maj == 0){
366                    $form->setVal("destinataire", $idxformulaire);
367                    $form->setVal("dossier", $idxformulaire);
368                    $form->setVal("date_evenement", date('Y-m-d'));
369                }
370                $form->setVal("bible_auto","bible_auto()");
371                $form->setVal("bible","bible()");
372                $form->setVal("bible2","bible2()");
373            }
374            $this->retourformulaire=$retourformulaire;
375            $this->idxformulaire=$idxformulaire;
376        }
377    
378    
379        function setLayout(&$form, $maj){
380            if ( $maj < 2 OR $maj == 3 ) {
381                            /*Champ sur lequel s'ouvre le bloc 1 */
382                $form->setBloc('evenement','D',"","col_12");
383    
384                    $form->setFieldset('evenement','D',_('Evenement'));
385                    $form->setFieldset('lettretype','F','');
386                
387                $form->setBloc('lettretype','F');
388    
389                $form->setBloc('date_finalisation_courrier','D',"","col_12");
390    
391                    $form->setFieldset('date_finalisation_courrier','D',_('Dates'));
392                        $form->setBloc('date_finalisation_courrier','D',"","col_6");
393                        $form->setBloc('date_envoi_controle_legalite','F');
394    
395                        $form->setBloc('signataire_arrete','D',"","col_6");
396                        $form->setBloc('date_retour_controle_legalite','F');
397                    $form->setFieldset('date_retour_controle_legalite','F','');
398                
399                $form->setBloc('date_retour_controle_legalite','F');
400    
401                $form->setBloc('complement','D',"","col_12");
402                    $form->setFieldset('complement','D',_('Complement'));
403                    $form->setFieldset('bible','F','');
404                $form->setBloc('bible','F');
405    
406                $form->setBloc('complement2','D',"","col_12");
407                    $form->setFieldset('complement2','D',_('Complement 2'));
408                    $form->setFieldset('bible2','F','');
409                $form->setBloc('bible2','F');
410            }
411      }      }
412            
413      function setLib(&$form,$maj) {      function setLib(&$form, $maj) {
414          parent :: setLib($form,$maj);          //
415          $form->setLib('libelle',' ');          parent::setLib($form, $maj);
416          $form->setLib('bible_auto',"");          //
417          $form->setLib('bible',"");          $form->setLib('bible_auto', "");
418          $form->setLib('bible2',"");          $form->setLib('bible', "");
419          $form->setLib('lettretype',"->"._(" courrier "));          $form->setLib('bible2', "");
420          $form->setLib('datecourrier',_(" du "));      }
421      }  
422        function triggerajouter($id, &$db, $val, $DEBUG) {
423      function setOnchange(&$form,$maj){          /**
424          $form->setOnchange("datecourrier","fdate(this)");           * Le code suivant permet de récupérer des valeurs des tables evenement
425      }           * et dossier pour les stocker dans l'instruction :
426             * DEPUIS L'EVENEMENT
427      // ==================================================================           * - action
428      // trigger avant modification données    [trigger before modify data]           * - delai
429      // ==================================================================           * - accord_tacite
430      function triggerajouter($id,&$db,$val,$DEBUG) {           * - etat
431          // mise a jour instruction avec evenement           * - avis_decision
432          // [modify instruction with evenement]           * - delai_notification
433          $sql= "select * from evenement where evenement =".$this->valF['evenement'];           * - lettretype
434             * DEPUIS LE DOSSIER D'INSTRUCTION
435             * - archive_delai
436             * - archive_accord_tacite
437             * - archive_etat
438             * - archive_avis
439             * - date_complet
440             * - date_rejet
441             * - date_limite
442             * - date_notification_delai
443             * - date_decision
444             * - date_validite
445             * - date_achevement
446             * - date_chantier
447             * - date_conformite
448             * Il permet également de stocker la date_depot du dossier d'instruction
449             * dans l'attribut $this->archive_date_depot de la classe.
450             */
451            // Récupération de tous les paramètres de l'événement sélectionné
452            $sql = "SELECT * FROM ".DB_PREFIXE."evenement
453            WHERE evenement=".$this->valF['evenement'];
454          $res = $db->query($sql);          $res = $db->query($sql);
455          if (database::isError($res))          $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
456            if (database::isError($res)) {
457              die($res->getMessage());              die($res->getMessage());
458          if ($DEBUG == 1)          }
459              echo " la requete ".$sql." est exécutée<br>";          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
460          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){              // Récupération de l'identifiant de l'action
461              $this->valF['action']=$row['action'];              // si une action est paramétrée dans l'événement
462              $this->valF['delai']=$row['delai'];              $this->valF['action'] = NULL;
463              $this->valF['etat']=$row['etat'];              if (isset($row['action']) and !empty($row['action'])) {
464                    $this->valF['action']=$row['action'];
465                }
466                // Récupération de la valeur du délai
467                $this->valF['delai'] = $row['delai'];
468                // Récupération de l'identifiant de l'état
469                // si un état est paramétré dans l'événement
470                $this->valF['etat']=NULL;
471                if (isset($row['etat']) and !empty($row['etat'])) {
472                    $this->valF['etat']=$row['etat'];
473                }
474                // Récupération de la valeur d'accord tacite
475              $this->valF['accord_tacite']=$row['accord_tacite'];              $this->valF['accord_tacite']=$row['accord_tacite'];
476                // Récupération de la valeur du délai de notification
477              $this->valF['delai_notification']=$row['delai_notification'];              $this->valF['delai_notification']=$row['delai_notification'];
478              $this->valF['avis']=$row['avis'];              // Récupération de l'identifiant de l'avis
479              if($row['lettretype']!="")              // si un avis est paramétré dans l'événement
480                $this->valF['avis_decision'] = NULL;
481                if(isset($row['avis_decision']) and !empty($row['avis_decision'])) {
482                    $this->valF['avis_decision']=$row['avis_decision'];
483                }
484                // Récupération de la valeur de la lettre type
485                // Sinon on lui affecte lavaleur par défaut standard
486                if ($row['lettretype'] != "") {
487                  $this->valF['lettretype']=$row['lettretype'];                  $this->valF['lettretype']=$row['lettretype'];
488              else              } else {
489                  $this->valF['lettretype']="standard";                  $this->valF['lettretype'] = "standard"; // XXX
490                }
491          }          }
492          $sql= "select * from dossier where dossier = '".$this->valF['dossier']."'";          // Récupération de toutes les valeurs du dossier d'instruction en cours
493            $sql = "SELECT * FROM ".DB_PREFIXE."dossier
494            WHERE dossier='".$this->valF['dossier']."'";
495          $res = $db->query($sql);          $res = $db->query($sql);
496          if (database::isError($res))          $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
497            if (database::isError($res)) {
498              die($res->getMessage());              die($res->getMessage());
499          if ($DEBUG == 1)          }
500              echo " la requete ".$sql." est exécutée<br>";          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
501          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){              // XXX On stocke la date de dépôt actuelle du dossier d'instruction
502              //              // dans un attribut de la classe
503              $this->archive_date_depot = $row['date_depot'];              $this->archive_date_depot = $row['date_depot'];
504              // archive en instruction (si suppression)              // Récupération de la valeur actuelle du délai, de l'accord tacite,
505                // de l'état et de l'avis du dossier d'instruction
506              $this->valF['archive_delai']=$row['delai'];              $this->valF['archive_delai']=$row['delai'];
507              $this->valF['archive_accord_tacite']=$row['accord_tacite'];              $this->valF['archive_accord_tacite']=$row['accord_tacite'];
508              $this->valF['archive_etat']=$row['etat'];              $this->valF['archive_etat']=$row['etat'];
509              $this->valF['archive_avis']=$row['avis'];              $this->valF['archive_avis']=$row['avis_decision'];
510              // compatibilite pgsql              // Récupération de la valeur actuelle des 9 dates du dossier
511              if($row['date_complet']!='')              // d'instruction
512                 $this->valF['archive_date_complet']=$row['date_complet'];              if ($row['date_complet'] != '') {
513              if($row['date_rejet']!='')                  $this->valF['archive_date_complet']=$row['date_complet'];
514                 $this->valF['archive_date_rejet']= $row['date_rejet'];              }
515              if($row['date_limite']!='')              if ($row['date_rejet']!='') {
516                 $this->valF['archive_date_limite']= $row['date_limite'];                  $this->valF['archive_date_rejet']= $row['date_rejet'];
517              if($row['date_notification_delai']!='')              }
518                 $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];              if ($row['date_limite']!='') {
519              if($row['date_decision']!='')                  $this->valF['archive_date_limite']= $row['date_limite'];
520                 $this->valF['archive_date_decision']= $row['date_decision'];              }
521              if($row['date_validite']!='')              if ($row['date_notification_delai']!='') {
522                 $this->valF['archive_date_validite']= $row['date_validite'];                  $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];
523              if($row['date_achevement']!='')              }
524                 $this->valF['archive_date_achevement']= $row['date_achevement'];              if ($row['date_decision']!='') {
525              if($row['date_chantier']!='')                  $this->valF['archive_date_decision']= $row['date_decision'];
526                 $this->valF['archive_date_chantier']= $row['date_chantier'];              }
527              if($row['date_conformite']!='')              if ($row['date_validite']!='') {
528                 $this->valF['archive_date_conformite']= $row['date_conformite'];                    $this->valF['archive_date_validite']= $row['date_validite'];
529                }
530                if ($row['date_achevement']!='') {
531                    $this->valF['archive_date_achevement']= $row['date_achevement'];
532                }
533                if ($row['date_chantier']!='') {
534                    $this->valF['archive_date_chantier']= $row['date_chantier'];
535                }
536                if ($row['date_conformite']!='') {
537                    $this->valF['archive_date_conformite']= $row['date_conformite'];  
538                }
539          }          }
540      }      }
541            
542        // Test si une restriction est valide
543        // return boolean
544        function restrictionIsValid($restriction){
545            
546            /* Met des espace avant et après les opérateurs puis transforme la chaine en
547             * un tableau */
548            $tabRestriction = str_replace(">="," >= ",
549                              str_replace("<="," <= ",
550                              str_replace("-"," - ",
551                              str_replace("+"," + ",$restriction))));
552            $tabRestriction = explode( " ", $tabRestriction);
553            
554            //Variables de résultat
555            $res = array();
556            $i = 0;
557            $comp = "";
558            
559            
560            //Test que le tableau n'est pas vide
561            if ( count($tabRestriction) > 0 ){
562                
563                $res[0] = $this->getRestrictionValue($tabRestriction[0]);
564                
565                //Calcul des variables
566                for ( $j = 1 ; $j < count($tabRestriction) ; $j += 2 ) {
567                    
568                    //Variable de comparaison
569                    if ( strcmp( ">=", $tabRestriction[$j] ) == 0 ||
570                         strcmp( "<=", $tabRestriction[$j]) ==0 ){
571                        
572                        $comp = $tabRestriction[$j];
573                        $res[++$i] = $this->getRestrictionValue($tabRestriction[$j+1]);
574                    }
575                    // Fait l'addition
576                    elseif ( strcmp( "+", $tabRestriction[$j]) == 0 ){
577                        
578                       $res[$i] =  $this->moisdate( $res[$i], $this->getRestrictionValue($tabRestriction[$j+1]) );
579                    }
580                }
581            }
582                    
583            // Effectue le test
584            if ( strcmp($comp, ">=") == 0 ){
585                
586                if ( $res[0] >= $res[1] || $res[0] == "" ){
587                    
588                    return true;
589                }
590                else {
591                    
592                    return false;
593                }
594            }
595            elseif ( strcmp($comp, "<=") == 0 ){
596    
597                if ( $res[0] <= $res[1] || $res[1] == "" ){
598    
599                    return true;
600                }
601                else {
602    
603                    return false;
604                }
605            }
606            
607            return true;
608        }
609        
610        //Retourne la valeur de valF si $restrictionValue n'est pas un chiffre, le chiffre sinon
611        function getRestrictionValue($restrictionValue){
612            
613            return ( is_numeric($restrictionValue) ) ?
614                $restrictionValue :
615                $this->valF[$restrictionValue];
616        }
617        
618      function regle($regle){      function regle($regle){
619          $temp = explode ("+",$regle);          $temp = explode ("+",$regle);
620          echo '/'.$regle.sizeof($temp);          //echo '|'.$regle;
621          if(sizeof($temp)==1)          // cas rejet
622              if($temp[0]=="archive_date_depot")          if($regle=="null") // 1 dimension -> null
623                return null;
624            if(sizeof($temp)==1) // 1 dimension
625                if($temp[0]=="archive_date_depot") // initialisation avec le depot
626                  return $this->$regle;                  return $this->$regle;
627              else              else // cas general
628                  return $this->valF[$regle];                  return $this->valF[$regle];
629          else{          if(sizeof($temp)==2){ // 2 dimensions
630              if($temp[0]=="archive_date_depot")              if($temp[0]=="archive_date_depot") //initialisation avec le depot
631                  if(is_numeric($temp[1]))                  if(is_numeric($temp[1]))
632                      return  $this->moisdate($this->$temp[0], $temp[1]);                        return  $this->moisdate($this->$temp[0], $temp[1]);  
633                  else                  else
634                      return  $this->moisdate($this->$temp[0], $this->valF[$temp[1]]);                      return  $this->moisdate($this->$temp[0], $this->valF[$temp[1]]);
635                if($temp[0]=="archive_delai") // majoration de delai
636                    return  $this->valF[$temp[0]]+$this->valF[$temp[1]];
637                // cas general 2 dimensions
638              if(is_numeric($temp[1]))              if(is_numeric($temp[1]))
639                  return $this->moisdate($this->valF[$temp[0]], $temp[1]);                  return $this->moisdate($this->valF[$temp[0]], $temp[1]);
640              else                            else              
641                 return  $this->moisdate($this->valF[$temp[0]], $this->valF[$temp[1]]);                 return  $this->moisdate($this->valF[$temp[0]], $this->valF[$temp[1]]);
642          }          }
643            if(sizeof($temp)==3){ // 3 dimensions
644                // cas date de validite de sursis
645                if(is_numeric($temp[1]))
646                    $temp1 = $this->moisdate($this->valF[$temp[0]], $temp[1]);
647                else              
648                    $temp1 = $this->moisdate($this->valF[$temp[0]], $this->valF[$temp[1]]);
649                if(is_numeric($temp[2]))
650                    return $this->moisdate($temp1, $temp[2]);
651                else
652                    return $this->moisdate($temp1, $this->valF[$temp[2]]);
653            }
654      }      }
655            
656            
657        
     // ==================================================================  
     // valeur dossier  apres modification   [values dossier after action]  
     // ==================================================================  
658      function triggerajouterapres($id,&$db,$val,$DEBUG) {      function triggerajouterapres($id,&$db,$val,$DEBUG) {
659          // mise a null au lieu de "" / voir compatibilite mysql          /**
660          // voir parametrage CU en dur           * Mise à jour des valeurs du dossier en fonction des valeurs calculées
661          // voir parametrage des actions en dur           * par l'action
662          $param=1;           */
663                    // Initialisation
664          if($param==1){          $valF = "";
665          $sql="select * from action where action = '".$this->valF['action']."'";          // Récupération des paramètres de l'action
666            $sql = "SELECT * FROM ".DB_PREFIXE."action
667            WHERE action='".$this->valF['action']."'";
668          $res = $db->query($sql);          $res = $db->query($sql);
669          if (database::isError($res))          $this->addToLog("triggerajouterapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
670            if (database::isError($res)) {
671              die($res->getMessage());              die($res->getMessage());
672          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){          }
673            while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
674                // pour chacune des regles, on applique la regle
675              if($row['regle_etat']!=''){              if($row['regle_etat']!=''){
676                  $valF['etat']= $this->regle($row['regle_etat']);                  $valF['etat'] = $this->regle($row['regle_etat']);
677              }              }
678              if($row['regle_delai']!=''){              if($row['regle_delai']!=''){
679                  $valF['delai']= $this->regle($row['regle_delai']);                  $valF['delai'] = $this->regle($row['regle_delai']);
680              }              }
681              if($row['regle_accord_tacite']!=''){              if($row['regle_accord_tacite']!=''){
682                  $valF['accord_tacite']= $this->regle($row['regle_accord_tacite']);                  $valF['accord_tacite'] = $this->regle($row['regle_accord_tacite']);
683                }
684                if($row['regle_avis']!=''){
685                    $valF['avis_decision'] = $this->regle($row['regle_avis']);
686              }              }
687              if($row['regle_date_limite']!=''){              if($row['regle_date_limite']!=''){
688                  $valF['date_limite']= $this->regle($row['regle_date_limite']);                  $valF['date_limite']= $this->regle($row['regle_date_limite']);
# Line 394  class instruction extends instruction_ge Line 693  class instruction extends instruction_ge
693              if($row['regle_date_notification_delai']!=''){              if($row['regle_date_notification_delai']!=''){
694                  $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);                  $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);
695              }              }
696                if($row['regle_date_decision']!=''){
697                    $valF['date_decision']= $this->regle($row['regle_date_decision']);
698                }
699                if($row['regle_date_rejet']!=''){
700                    $valF['date_rejet']= $this->regle($row['regle_date_rejet']);
701                }
702                if($row['regle_date_validite']!=''){
703                    $valF['date_validite']= $this->regle($row['regle_date_validite']);
704                }
705                if($row['regle_date_chantier']!=''){
706                    $valF['date_chantier']= $this->regle($row['regle_date_chantier']);
707                }
708                if($row['regle_date_achevement']!=''){
709                    $valF['date_achevement']= $this->regle($row['regle_date_achevement']);
710                }
711                if($row['regle_date_conformite']!=''){
712                    $valF['date_conformite']= $this->regle($row['regle_date_conformite']);
713                }
714                // Appel des méthode stockées dans le champ methode_trigger
715                if ($row['methode_trigger'] != "") {
716                    foreach (explode(";", $row['methode_trigger']) as $methode) {
717                        if (method_exists($this, $methode)) {
718                            $this->$methode();
719                        }
720                    }
721                }
722          }          }
723          }else{          // Si des valeurs ont été calculées alors on met à jour l'enregistrement
724                    if ($valF != "") {
725          switch ($this->valF['action']) {              // On met à jour le dossier
726          case "initialisation" :              $cle = " dossier='".$this->valF['dossier']."'";
727              $valF['delai']= $this->valF['delai'];              $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
728              $valF['etat']= $this->valF['etat'];              $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
729              $valF['accord_tacite']= $this->valF['accord_tacite'];              if (database::isError($res1)) {
730              // la date_complet est la date de depot                  die($res->getMessage());
731              $valF['date_complet']= $this->archive_date_depot; // ****              }
732              $valF['date_limite'] =  $this->moisdate($valF['date_complet'],$valF['delai']);              // Affichage d'informations à l'utilisateur
733              $valF['date_notification_delai'] =  $this->moisdate($valF['date_complet'],1);              $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
734              break;          }
735          case "notification" :  
736              $valF['delai']= $this->valF['delai'];          /**
737              $valF['etat']= $this->valF['etat'];           * REFERENTIEL ERP
738              $valF['accord_tacite']= $this->valF['accord_tacite'];           */
739              // la date_complet est celle precedemment saisie          // verification si envoi vers ERP est active
740              $valF['date_complet']=$this->valF['archive_date_complet'];          if ($this->f->getParameter('option_erp') != "") {
741              $valF['date_limite'] =  $this->moisdate($valF['date_complet'],$valF['delai']);              // la nature du dossier
742              $valF['date_notification_delai'] =  $this->moisdate($valF['date_complet'],1);              $nature_dossier = substr($this->idxformulaire,0,2);
             // la date du courrier ne doit pas etre depasse par rapport au delai de  
             // notification    [verify notification date]  
             if($this->valF['archive_date_notification_delai']<$this->valF['datecourrier'])  
                 $this->msg=$this->msg."<br><img src='../img/erreur.gif'> "._("date_notification_delai")." ".  
                 $this->valF['archive_date_notification_delai']." < "._('datecourrier');  
743              //              //
744              break;              $sql = "SELECT erp
745          case "retour" :              FROM ".DB_PREFIXE."dossier
746              $valF['delai']= $this->valF['delai'];              WHERE dossier='".$this->valF['dossier']."'";
747              $valF['etat']= $this->valF['etat'];              $dossier_erp = $this->db->getone($sql);
748              $valF['accord_tacite']= $this->valF['accord_tacite'];              $this->addToLog("triggerajouterapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
749              // la date_complet est celle de l evenement              if (database::isError($res)) {
750              $valF['date_complet']= $this->valF['datecourrier'];                  die($res->getMessage());
751              $valF['date_limite'] =  $this->moisdate($valF['date_complet'],$valF['delai']);              }
752              $valF['date_notification_delai'] =  $this->moisdate($valF['date_complet'],1);              //
753              break;              $sql = "SELECT libelle
754          case "rejet" :              FROM ".DB_PREFIXE."evenement
755              //$valF['delai']=0;   // *** delai a garder pour etat dpc              WHERE evenement='".$this->valF['evenement']."'";
756              $valF['etat']= $this->valF['etat'];              $evenement_libelle = $this->db->getone($sql);
757              $valF['accord_tacite']= $this->valF['accord_tacite'];              $this->addToLog("triggerajouterapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
758              // la date rejet est initialisee              if (database::isError($res)) {
759              $valF['date_rejet']= $this->valF['datecourrier'];                  die($res->getMessage());
760              // les dates de depart et fin d instruction sont annulées              }
761              $valF['date_limite'] =null;              //
762              $valF['date_notification_delai'] =null;              if ($dossier_erp == 't') {
763              $valF['date_complet']=null;                  // envoi du message en cas d'un PC qui est ERP et sur lequel un evenement
764              break;                  // d'acceptation etait fait
765          case "majoration" :                  if ($nature_dossier ==
766              $valF['delai']= $this->valF['archive_delai']+$this->valF['delai'];                          $this->f->getParameter('erp_evenement_accepter_dossier_PC')
767              $valF['etat']= $this->valF['etat'];                      && $this->valF['evenement'] ==
768              $valF['accord_tacite']= $this->valF['accord_tacite'];                          $this->f->getParameter('erp_evenement_accepter_sans_reserve')) {
769              $valF['date_complet']=$this->valF['archive_date_complet'];                      $msgenque = new MessageEnqueuer();
770              // majoration de la date limite                      $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
771              $valF['date_limite'] =  $this->moisdate($valF['date_complet'],$valF['delai']);                      $msgenque->setDecision($evenement_libelle);
772              $valF['date_notification_delai'] =  $this->moisdate($valF['date_complet'],1);                      $msgenque->enqueueMessage($msgenque::$ERP_ARRETE_PC_EFFECTUE);
773              // la date du courrier ne doit pas etre depasse par rapport au delai de                  }
774              // notification                  if ($this->valF['evenement'] ==
775              if($this->valF['archive_date_notification_delai']<$this->valF['datecourrier'])                          $this->f->getParameter('erp_evenement_refuser_dossier')) {
776                  $this->msg=$this->msg."<br><img src='../img/erreur.gif'>"._("date_notification_delai").                      $msgenque = new MessageEnqueuer();
777              $this->valF['archive_date_notification_delai']." < "._('datecourrier');                      $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
778              break;                      $msgenque->enqueueMessage($msgenque::$ERP_DECISION_CONFORMITE_EFFECTUE);                
779          case "acceptation" :                  }
780              $valF['etat']= $this->valF['etat'];              }
781              $valF['date_decision']= $this->valF['datecourrier'];          } // fin de if ($this->f->getParameter('option_erp') != "")
782              $valF['avis']= $this->valF['avis'];      }    
             // date de validite = date de l evenement + delai  
             $valF['date_validite'] =  $this->moisdate($this->valF['datecourrier'],$this->valF['delai']);  
                break;  
         case "refus" :  
             $valF['etat']= $this->valF['etat'];  
             $valF['date_decision']= $this->valF['datecourrier'];  
             $valF['avis']= $this->valF['avis'];  
             break;  
         case "prolongation" :  
             $valF['date_validite'] =  $this->moisdate($this->valF['archive_date_validite'],$this->valF['delai']);  
             break;  
         case "sursis" :  
             $valF['date_limite'] =  $this->moisdate($this->valF['datecourrier'],$this->valF['delai']);  
             $valF['etat']= $this->valF['etat'];  
             $valF['accord_tacite']= $this->valF['accord_tacite'];  
             $valF['avis']= $this->valF['avis'];  
             $valF['date_decision']= $this->valF['datecourrier'];  
             $temp = $valF['date_limite'];  
             $valF['date_validite']= $this->moisdate($temp,2);  
             break;  
         case "execution" :  
             $valF['etat']= $this->valF['etat'];  
             $valF['date_chantier'] =  $this->valF['datecourrier'];  
             //echo $this->msg=$this->msg.$valF['date_chantier']."";  
             break;  
         case "achevement" :  
             $valF['etat']= $this->valF['etat'];  
             $valF['date_achevement'] = $this->valF['datecourrier'];  
             break;  
         case "archivage" :  
             $valF['etat']= $this->valF['etat'];  
             $valF['date_conformite'] = $this->valF['datecourrier'];  
             break;  
783    
784          default:      function triggermodifierapres($id,&$db,$val,$DEBUG) {
785          if ($this->valF['etat']!="")          /**
786             $valF['etat']= $this->valF['etat'];           * L'objectif ici est d'effectuer les recalculs de date dans le dossier
787          }// end switch           * si la date de l'evenement est modifiee
788          } // end param           */
789          // mise à jour dossier [modify dossier]          // Initialisation
790          print_r($valF);          $valF = "";
791          if($valF!=""){          // Récupération de l'action correspondante à l'événement
792              $cle= " dossier = '".$this->valF['dossier']."'";          $sql = "SELECT action
793              $res1= $db->autoExecute('dossier',$valF,DB_AUTOQUERY_UPDATE,$cle);          FROM ".DB_PREFIXE."evenement
794              if (database::isError($res1))          WHERE evenement=".$this->valF['evenement'];
795            $action = $db->getOne($sql);
796            $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
797            if (database::isError($action)) {
798                die($action->getMessage());
799            }
800            // Récupération des paramètres de l'action
801            $sql = "SELECT * FROM ".DB_PREFIXE."action
802            WHERE action='".$action."'";
803            $res = $db->query($sql);
804            $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
805            if (database::isError($res)) {
806                die($res->getMessage());
807            }
808            while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
809                // application des regles sur le courrier + delai
810                if(preg_match("/date_evenement/",$row['regle_date_limite'])){
811                    $valF['date_limite']= $this->regle($row['regle_date_limite']);
812                }
813                if(preg_match("/date_evenement/",$row['regle_date_complet'])){
814                    $valF['date_complet']= $this->regle($row['regle_date_complet']);
815                }
816                if(preg_match("/date_evenement/",$row['regle_date_notification_delai'])){
817                    $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);
818                }
819                if(preg_match("/date_evenement/",$row['regle_date_decision'])){
820                    $valF['date_decision']= $this->regle($row['regle_date_decision']);
821                }
822                if(preg_match("/date_evenement/",$row['regle_date_rejet'])){
823                    $valF['date_rejet']= $this->regle($row['regle_date_rejet']);
824                }
825                if(preg_match("/date_evenement/",$row['regle_date_validite'])){
826                    $valF['date_validite']= $this->regle($row['regle_date_validite']);
827                }
828                if(preg_match("/date_evenement/",$row['regle_date_chantier'])){
829                    $valF['date_chantier']= $this->regle($row['regle_date_chantier']);
830                }
831                if(preg_match("/date_evenement/",$row['regle_date_achevement'])){
832                    $valF['date_achevement']= $this->regle($row['regle_date_achevement']);
833                }
834                if(preg_match("/date_evenement/",$row['regle_date_conformite'])){
835                    $valF['date_conformite']= $this->regle($row['regle_date_conformite']);
836                }
837            }
838            // Si des valeurs ont été calculées alors on met à jour l'enregistrement
839            if ($valF != "") {
840                // On met à jour le dossier
841                $cle = " dossier='".$this->valF['dossier']."'";
842                $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
843                $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
844                if (database::isError($res1)) {
845                  die($res->getMessage());                  die($res->getMessage());
846              if ($DEBUG == 1)              }
847                echo "La requête de mise à jour est effectuée.<br>";              // Affichage d'informations à l'utilisateur
848              $this->msg=$this->msg."<br>"._('enregistrement')." ".              $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
             $this->valF['dossier']." "._('table')." dossier [".  
             $db->affectedRows()." "._('enregistrement').  
             " "._('mis_a_jour')."]" ;  
849          }          }
850      }  
851            /**
852             * REFERENTIEL ARRETE
853             */
854            if ($this->f->getParameter('option_referentiel_arrete') != "") {
855                if ($this->valF['date_retour_signature'] != $this->getVal('date_retour_signature')) {
856                    $msgenque = new MessageEnqueuer();
857                    $sqlArrete = "SELECT instruction.signataire_arrete as \"ws_DA_In_Signataire\",
858                                        signataire_arrete.nom as \"ws_DA_In_Sign_Nom\",
859                                        signataire_arrete.prenom as \"ws_DA_In_Sign_Prenom\",
860                                        signataire_arrete.qualite as \"ws_DA_In_Sign_Qualite\",
861                                        instruction.date_evenement as \"ws_DA_In_Dte_Redac\",
862                                        '' as \"ws_DA_In_lieu_Redac\",
863                                        instruction.dossier as \"ws_DA_In_N_Doss_DAS\",
864                                        '' as \"ws_DA_In_Sigle\",
865                                        instruction.etat as \"ws_DA_In_Decision\",
866                                        dossier.date_depot as \"ws_DA_In_Dte_Depot_Dem\",
867                                        dossier.terrain_numero as \"ws_DA_In_N_Voie\",
868                                        '' as \"ws_DA_In_Type_Voie\",
869                                        dossier.complement as \"ws_DA_In_Adresse1\",
870                                        dossier.terrain_adresse_lieu_dit as \"ws_DA_In_Adresse2\",
871                                        dossier.terrain_adresse_code_postal as \"ws_DA_In_CP\",
872                                        dossier.terrain_adresse_localite as \"ws_DA_In_Ville\",
873                                        dossier.terrain_references_cadastrales as \"ws_DA_In_Nb_Parcelle\",
874                                        '' as \"ws_DA_In_Detail_Parcelle\",
875                                        CONCAT(donnees_techniques.am_projet_desc,' ',donnees_techniques.co_projet_desc) as \"ws_DA_In_Nature_Trvx\",
876                                        '' as \"ws_DA_In_Destination_Trvx\",
877                                        dossier_autorisation_type_detaille.code as \"ws_DA_In_Type_Dos_Autoris\",
878                                        COALESCE(particulier_nom,personne_morale_raison_sociale) as \"ws_DA_In_Nom_Petition\",
879                                        COALESCE(particulier_prenom, personne_morale_denomination) as \"ws_DA_In_Prenom_Petition\",
880                                        '' as \"ws_DA_In_Piece_GED\",
881                                        instruction.date_retour_signature as \"ws_DA_In_Dte_Signature\"
882                                FROM ".DB_PREFIXE."instruction
883                                LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
884                                    instruction.signataire_arrete = signataire_arrete.signataire_arrete
885                                LEFT JOIN ".DB_PREFIXE."dossier ON
886                                    instruction.dossier = dossier.dossier
887                                LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur ON
888                                    lien_dossier_demandeur.dossier = dossier.dossier
889                                LEFT JOIN ".DB_PREFIXE."demandeur ON
890                                    lien_dossier_demandeur.demandeur = demandeur.demandeur
891                                LEFT JOIN ".DB_PREFIXE."dossier_instruction_type ON
892                                    dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
893                                LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille ON
894                                    dossier_instruction_type.dossier_autorisation_type_detaille =
895                                        dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
896                                LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
897                                        donnees_techniques.dossier_instruction = dossier.dossier
898                                WHERE instruction.instruction = ".$this->valF['instruction'];
899                    $resArrete = $this->db->query($sqlArrete);
900                    $this->f->addToLog("triggerModifierApres(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
901                    $this->f->isDatabaseError();
902            
903      // trigger before delete                  $rowArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
904                    $msgenque->setArreteInfo($rowArrete);
905                    $msgenque->enqueueMessage($msgenque::$ARRETE_ENVOI);                
906                }
907            }
908        }
909    
910      function triggersupprimer($id,&$db,$val,$DEBUG) {      function triggersupprimer($id,&$db,$val,$DEBUG) {
911            /**
912             * L'objectif ici est de repositionner les valeurs récupérées en
913             * archive dans le dossier d'instruction avant de supprimer l'événement
914             * d'instruction
915             */
916          // archive en instruction (si suppression) [archive if delete instruction]          // archive en instruction (si suppression) [archive if delete instruction]
917          $valF['delai']=$val['archive_delai'];          $valF['delai']=$val['archive_delai'];
918          $valF['accord_tacite']=$val['archive_accord_tacite'];          $valF['accord_tacite']=$val['archive_accord_tacite'];
919          $valF['etat']=$val['archive_etat'];          $valF['etat']=$val['archive_etat'];
920          if($val['archive_avis']=='')          if($val['archive_avis']=='')
921              $valF['avis']= null;              $valF['avis_decision']= null;
922          else          else
923              $valF['avis']=$val['archive_avis'];              $valF['avis_decision']=$val['archive_avis'];
         // if= compatibilite pgsql  
924          if($val['archive_date_complet']!='')          if($val['archive_date_complet']!='')
925              $valF['date_complet']=$val['archive_date_complet'];              $valF['date_complet']=$val['archive_date_complet'];
926          if($val['archive_date_rejet']!='')          if($val['archive_date_rejet']!='')
# Line 544  class instruction extends instruction_ge Line 939  class instruction extends instruction_ge
939              $valF['date_chantier']= $val['archive_date_chantier'];              $valF['date_chantier']= $val['archive_date_chantier'];
940          if($val['archive_date_conformite']!='')          if($val['archive_date_conformite']!='')
941              $valF['date_conformite']= $val['archive_date_conformite'];              $valF['date_conformite']= $val['archive_date_conformite'];
942                    // On met à jour le dossier
943          $cle= " dossier = '".$val['dossier']."'";          $cle = " dossier='".$val['dossier']."'";
944          $res= $db->autoExecute('dossier',$valF,DB_AUTOQUERY_UPDATE,$cle);          $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
945          if (database::isError($res))          $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
946            if (database::isError($res1)) {
947              die($res->getMessage());              die($res->getMessage());
         else{  
             if ($DEBUG == 1)  
                 echo "La requête de mise à jour est effectuée.<br>";  
948          }          }
949            // Affichage d'informations à l'utilisateur
950            $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
951      }      }
952    
953      // =============================================      // =============================================
954      // calcul de date avec ajout de mois (delais)      // calcul de date avec ajout de mois (delais)
955      // [add months (delay) and calculation final date]      // [add months (delay) and calculation final date]
# Line 605  class instruction extends instruction_ge Line 1001  class instruction extends instruction_ge
1001      return $annee."-".$mois."-".$jour ;      return $annee."-".$mois."-".$jour ;
1002      }      }
1003    
1004        // Vérifie la restriction sur l'événement
1005        function verifier($val = array(), &$db, $DEBUG){
1006            parent::verifier($val, $db, $DEBUG);
1007            //Récupère la restriction
1008            $sql= "SELECT
1009                      restriction
1010                  FROM
1011                      ".DB_PREFIXE."evenement
1012                  WHERE
1013                      evenement =".$this->valF['evenement'];
1014    
1015            $res = $db->query($sql);
1016            $this->f->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
1017            $this->f->isDatabaseError();
1018            
1019            $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
1020    
1021            //Test qu'une restriction est présente
1022            if ( isset($row['restriction']) && $row['restriction'] != "" ){
1023                
1024                //Test si la restriction est valide
1025                if ( !$this->restrictionIsValid($row['restriction']) ){
1026                    
1027                    $this->correct=false;
1028                    $this->addToMessage(_("Restriction non valide"));
1029                }
1030                else {
1031                    
1032                    $this->correct = true;
1033                }
1034            }
1035        }
1036        
1037        /**
1038         * Méthode permettant de mettre à jour l'état d'un DA
1039         */
1040        function majEtatDA() {
1041            if($this->valF['action'] == 'accepter' AND $this->valF['avis_decision'] == 8) {
1042                $val['etat_dossier_autorisation']=5;
1043            } elseif($this->valF['action'] == 'accepter' AND $this->valF['avis_decision'] == 15) {
1044                $val['etat_dossier_autorisation']=3;
1045            } elseif($this->valF['action'] == 'accepter') {
1046                $val['etat_dossier_autorisation']=2;
1047            } elseif($this->valF['action'] == 'rejeter') {
1048                $val['etat_dossier_autorisation']=4;
1049            } elseif($this->valF['action'] == 'terminer') {
1050                $val['etat_dossier_autorisation']=8;
1051            } elseif($this->valF['action'] == 'majorer') {
1052                $val['etat_dossier_autorisation']=6;
1053            } else {
1054                $val['etat_dossier_autorisation']=7;
1055            }
1056            
1057            //Récupération du numéro de dossier d'autorisation lié au dossier d'instruction
1058            $IDdossier_autorisation = $this->getDossierAutorisation($this->valF['dossier']);
1059          
1060            // Mis à jour de l'état du dossier d'autorisation
1061            require_once '../obj/dossier_autorisation.class.php';
1062            $dossier_autorisation = new dossier_autorisation($IDdossier_autorisation,$this->db,DEBUG);
1063            
1064            $dossier_autorisation->val[array_search("etat_dossier_autorisation", $dossier_autorisation->champs)] = $val['etat_dossier_autorisation'];
1065            
1066            //Récupération des données
1067            $valDossierAutorisation = array();
1068            for ( $i=0 ; $i<count($dossier_autorisation->champs); $i++){
1069                
1070                $valDossierAutorisation[$dossier_autorisation->champs[$i]]=
1071                    $dossier_autorisation->val[$i];
1072            }
1073    
1074            $dossier_autorisation->modifier($valDossierAutorisation, $this->db, DEBUG);
1075        }
1076        
1077       /**
1078        * Méthode permettant de mettre à jour les données d'un DA
1079        */
1080        function majDataDA() {
1081            
1082            //Récupération du numéro de dossier d'autorisation lié au dossier d'instruction
1083            $IDdossier_autorisation = $this->getDossierAutorisation($this->valF['dossier']);
1084            require_once '../obj/dossier_autorisation.class.php';
1085            $dossier_autorisation = new dossier_autorisation($IDdossier_autorisation,$this->db,DEBUG);
1086            
1087            require_once '../obj/dossier.class.php';
1088            $dossier = new dossier($this->valF['dossier'],$this->db,DEBUG);
1089            
1090            //Récupération des données
1091            $valDossierAutorisation = array();
1092            for ( $i=0 ; $i<count($dossier_autorisation->champs); $i++){
1093                
1094                if ( array_search($dossier_autorisation->champs[$i], $dossier->champs) ){
1095                    
1096                    $valDossierAutorisation[$dossier_autorisation->champs[$i]]=$dossier->getVal($dossier_autorisation->champs[$i]);
1097                }
1098                else {
1099                    $valDossierAutorisation[$dossier_autorisation->champs[$i]]=
1100                    $dossier_autorisation->val[$i];
1101                }
1102            }
1103    
1104            $dossier_autorisation->modifier($valDossierAutorisation, $this->db, DEBUG);
1105            
1106            // Suppression du liens entre les lots et le DA
1107            $valLot['dossier_autorisation'] = NULL;
1108            $this->db->autoExecute(DB_PREFIXE."lot", $valLot, DB_AUTOQUERY_UPDATE, "dossier_autorisation='".$IDdossier_autorisation."'");
1109            
1110            // Liaison des lots du DI avec le DA
1111            $sqlLot = "SELECT lot FROM ".DB_PREFIXE."lien_dossier_lot WHERE dossier='".$this->valF['dossier']."'";
1112            $res = $this->db->query($sqlLot);
1113            $this->addToLog($sqlLot);
1114            $this->f->isDatabaseError();
1115            while($rowLot = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1116                $valLot['dossier_autorisation'] = $IDdossier_autorisation;
1117                $this->db->autoExecute(DB_PREFIXE."lot", $valLot, DB_AUTOQUERY_UPDATE, "lot=".$rowLot['lot']);
1118            }
1119        }
1120        
1121        // Récupération de l'identifiant du dossier d'autorisation lié au dossier d'instruction
1122        function getDossierAutorisation($dossier_instruction){
1123            
1124            $sql = "SELECT
1125                        dossier_autorisation.dossier_autorisation
1126                    FROM
1127                        ".DB_PREFIXE."dossier_autorisation
1128                    LEFT JOIN
1129                        ".DB_PREFIXE."dossier
1130                        ON
1131                            dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
1132                    WHERE
1133                        dossier.dossier = '".$dossier_instruction."'";
1134          
1135            $IDdossier_autorisation = $this->db->getOne($sql);
1136            $this->addToLog("getDossierAutorisation(): db->getone(\"".$sql."\")", VERBOSE_MODE);
1137            database::isError($IDdossier_autorisation);
1138            
1139            return $IDdossier_autorisation;
1140        }
1141  }// fin classe  }// fin classe
 ?>  
1142    ?>

Legend:
Removed from v.123  
changed lines
  Added in v.1540

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26