/[openfoncier]/branches/3.14.x/obj/instruction.class.php
ViewVC logotype

Diff of /branches/3.14.x/obj/instruction.class.php

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

revision 460 by nhaye, Thu Sep 27 10:19:42 2012 UTC revision 2002 by softime, Wed Jun 12 10:52:42 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        var $valEvenement;
36        // Tableau contenant une partie des métadonnées arrêtés
37        var $metadonneesArrete;
38    
39        var $metadata = array(
40            "om_fichier_instruction" => array(
41                "dossier" => "getDossier",
42                "dossier_autorisation" => "getDossierAutorisation",
43                "date_demande_initiale" => "getDateDemandeInitiale",
44                "dossier_instruction_type" => "getDossierInstructionType",
45                "statut" => "getStatut",
46                "dossier_autorisation_type" => "getDossierAutorisationType",
47                "date_creation" => "getDateEvenement",
48                "groupe_instruction" => 'getGroupeInstruction',
49                "type_doc" => 'getEvenementLibelle',
50            ),
51            "document_arrete" => array(
52                "numArrete" => "getNumArrete",
53                "specialiteArrete" => "getSpecialiteArrete",
54                "decisionArrete" => "getDecisionArrete",
55                "chketatReglementaire" => "getChketatReglementaire",
56                "chkNotification" => "getChkNotification",
57                "dateNotification" => "getDateNotification",
58                "chkCreationdroit" => "getChkCreationdroit",
59                "chkPublication" => "getChkPublication",
60                "datePublication" => "getDatePublication",
61                "chkControleLegalite" => "getChkControleLegalite",
62                "dateSignatureArrete" => "getDateSignatureArrete",
63                "nomSignataire" => "getNomSignataire",
64                "qualiteSignataire" => "getQualiteSignataire",
65                "chkDelegation" => "getChkDelegation",
66                "ap_numRue" => "getAp_numRue",
67                "ap_nomDeLaVoie" => "getAp_nomDeLaVoie",
68                "ap_codePostal" => "getAp_codePostal",
69                "ap_ville" => "getAp_ville",
70            ),
71        );
72    
73      function instruction($id,&$db,$debug) {  
74          $this->constructeur($id,$db,$debug);      function instruction($id, &$db, $debug) {
75      }// fin constructeur          $this->constructeur($id, $db, $debug);
   
     function cleSecondaire($id,&$db,$val,$DEBUG) {  
         parent::cleSecondaire($id,$db,$val,$DEBUG);  
         // controle suppression cle secondaire [secondary key delete control]  
         // ------------------------------------------------------------------------------------  
         // specifique detruire que le dernier   [specific instruction : delete the last event ]  
         // ------------------------------------------------------------------------------------  
         $dernierevenement='';  
         $sql="select max(instruction) from ".DB_PREFIXE."instruction where dossier ='".  
         $this->idxformulaire."'";  
         $dernierevenement = $db->getOne($sql);  
          if($dernierevenement==$id){  
              $this->correct=true;  
              $this->addToMessage(_('Destruction_chronologique'));  
           }else{  
              $this->addToMessage(_('Destruction_evenement')." : ".$dernierevenement);  
              $this->addToMessage(_('Destruction_chronologique'));  
              $this->correct=false;  
           }  
76      }      }
77    
78      function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){      // {{{ Gestion de la confidentialité des données spécifiques
79          if ($validation==0 and $maj<2) {  
80              if ($maj == 0){      /**
81                  $form->setVal("destinataire", $idxformulaire);       * Surcharge pour gérer les actions disponibles dans le portlet
82                  $form->setVal("dossier", $idxformulaire);       */
83                  $form->setVal("datecourrier", date('Y-m-d'));      function checkAccessibility() {
84            //
85            parent::checkAccessibility();
86            // Si l'utilisateur est un intructeur qui ne correspond pas à la
87            // division du dossier
88            if ($this->f->isUserInstructeur()
89                && isset($this->f->om_utilisateur["division"])
90                && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
91                //
92                $this->actions_sup = array();
93                $this->setParameter("actions", array());
94            }
95            // Si une action 'lu' est présente et que le champ lu est à true
96            // on supprime l'action
97            if (isset($this->actions_sup["lu"])
98                && isset($this->val[array_search("lu", $this->champs)])
99                && $this->val[array_search("lu", $this->champs)]== "t") {
100                unset($this->actions_sup["lu"]);
101            }
102                
103            //Si le document est déjà finalisé, on affiche uniquement le lien de
104            //dé-finalisation
105            $om_final_instruction = $this->getVal("om_final_instruction");
106            if ( isset($this->actions_sup["finalisation"]) &&
107                $om_final_instruction== "t" ){
108                    
109                //On cache les liens d'action
110                $this->parameters["actions"]["modifier"] = NULL;
111                $this->parameters["actions"]["supprimer"] = NULL;
112                //On cache le lien de finalisation et on affiche le bon lien pour l'édition
113                $this->actions_sup["finalisation"] = NULL;
114                $this->actions_sup["pdfetat"]["lien"] = "../spg/file.php?id=";
115                $this->actions_sup["pdfetat"]["id"] =
116                    "&amp;obj=instruction&amp;champ=om_fichier_instruction";
117            }
118            //Si le document n'est pas finalisé, on affiche uniquement le lien de
119            //finalisation
120            if ( isset($this->actions_sup["definalisation"]) &&
121                $om_final_instruction!= "t" ){
122                    
123                //On cache le lien de finalisation et on affiche le bon lien pour l'édition
124                $this->actions_sup["definalisation"] = NULL;
125                $this->actions_sup["pdfetat"]["lien"] = "../app/pdf_instruction.php?idx=";
126                $this->actions_sup["pdfetat"]["id"] = "";
127            }
128            
129            $idxformulaire = $this->getParameter("idxformulaire");
130            $retourformulaire = $this->getParameter("retourformulaire");
131            //Si le dossier d'instruction auquel est rattachée l'instruction est cloturé,
132            //on affiche pas les liens du portlet
133            if ( $idxformulaire != '' &&
134                (
135                    $retourformulaire == 'dossier' ||
136                    $retourformulaire == 'dossier_instruction' ||
137                    $retourformulaire == 'dossier_instruction_mes_encours' ||
138                    $retourformulaire == 'dossier_instruction_tous_encours' ||
139                    $retourformulaire == 'dossier_instruction_mes_clotures' ||
140                    $retourformulaire == 'dossier_instruction_tous_clotures'
141                )){
142    
143                //On récuppère le statut du dossier d'instruction        
144                $statut = $this->getStatutDossier($idxformulaire);
145                if ( $this->f->isUserInstructeur() && $statut == "cloture" ){
146                    
147                    //On cache le lien de modification
148                    $this->parameters["actions"]["modifier"] = NULL;
149                    $this->actions_sup["finalisation"] = NULL;
150                    $this->actions_sup["definalisation"] = NULL;
151              }              }
             $form->setVal("bible_auto","bible_auto()");  
             $form->setVal("bible","bible()");  
             $form->setVal("bible2","bible2()");  
152          }          }
         $this->retourformulaire=$retourformulaire;  
         $this->idxformulaire=$idxformulaire;  
153      }      }
154    
155      function setType(&$form,$maj) {      /**
156          parent::setType($form,$maj);       * Cette methode est à surcharger elle permet de tester dans chaque classe
157          if ($maj < 2) { //ajouter et modifier       * des droits des droits spécifiques en fonction des données
158              $form->setType('destinataire', 'hidden');       */
159              $form->setType('lettretype', 'hiddenstatic');      function canAccess() {
160              $form->setType('complement', 'textarea');          // Si l'utilisateur est un intructeur qui ne correspond pas à la
161              $form->setType('complement2', 'textarea');          // division du dossier
162              $form->setType('bible_auto', 'httpclick');          if ($this->f->isUserInstructeur()
163              $form->setType('bible', 'httpclick');              && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
164              $form->setType('bible2', 'httpclick');              && $this->getParameter("maj") != 3) {
165              $form->setType('dossier', 'hiddenstatic');                //
166              $form->setType('libelle', 'hiddenstatic');              $this->addToLog("canAccess(): utilisateur instructeur sur un dossier d'une autre division", EXTRA_VERBOSE_MODE);
167              if($maj==0){ // add              return false;
168                  $form->setType('instruction', 'hiddenstatic');          }
169                  $form->setType('evenement', 'select');  
170                  $form->setType('datecourrier', 'date2');          $retourformulaire = $this->getParameter("retourformulaire");
171              }else{ // modify          // Si l'utilisateur est un instructeur et que le dossier est cloturé
172                  $form->setType('instruction', 'hiddenstatic');          if ( $this->f->isUserInstructeur() &&
173                  $form->setType('evenement', 'hiddenstatic');              $this->getStatutDossier($this->getParameter("idxformulaire")) == "cloture" &&
174                  //$form->setType('datecourrier', 'hiddenstaticdate');              (
175                  $form->setType('datecourrier', 'date2');                  $retourformulaire == 'dossier' ||
176                  // necessaire pour calcul de date en modification                  $retourformulaire == 'dossier_instruction' ||
177                  $form->setType('delai', 'hiddenstatic');                  $retourformulaire == 'dossier_instruction_mes_encours' ||
178              }                  $retourformulaire == 'dossier_instruction_tous_encours' ||
179          } elseif($maj==2){                  $retourformulaire == 'dossier_instruction_mes_clotures' ||
180              $form->setType('dossier', 'hiddenstatic');                  $retourformulaire == 'dossier_instruction_tous_clotures'
181          }else {              )
182              $form->setType('destinataire', 'hidden');              && $this->getParameter("maj") != 3 && $this->getParameter("maj") != 0 ) {
183              $form->setType('dossier', 'static');              
184                return false;
185            }
186            //
187            return true;
188        }
189    
190        /**
191         * Cette variable permet de stocker le résultat de la méthode
192         * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
193         * ces appels.
194         * @var string Code de la division du dossier en cours
195         */
196        var $_division_from_dossier = NULL;
197    
198        /**
199         * Cette méthode permet de récupérer le code de division correspondant
200         * au dossier sur lequel on se trouve.
201         *
202         * @return string Code de la division du dossier en cours
203         */
204        function getDivisionFromDossier() {
205    
206            // Cette méthode peut être appelée plusieurs fois lors d'une requête.
207            // Pour éviter de refaire le traitement de recherche de la division
208            // alors on vérifie si nous ne l'avons pas déjà calculé.
209            if ($this->_division_from_dossier != NULL) {
210                // Logger
211                $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
212                // On retourne la valeur déjà calculée
213                return $this->_division_from_dossier;
214            }
215    
216            // Par défaut, on définit la valeur du dossier à NULL
217            $dossier = NULL;
218            // Test sur le mode et le contexte du formulaire
219            if ($this->getParameter("maj") == 0
220                && ($this->getParameter("retourformulaire") == "dossier"
221                    || $this->getParameter("retourformulaire") == "dossier_instruction"
222                    || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
223                    || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
224                    || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
225                    || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures")) {
226                // Si on se trouve en mode AJOUT (seul mode où l'enregistrement
227                // n'existe pas en base de données) ET que nous nous trouvons
228                // dans le contexte d'un dossier d'instruction alors on récupère
229                // le numéro de dossier depuis le paramètre 'idxformulaire'
230                $dossier = $this->getParameter("idxformulaire");
231            } else {
232                // Sinon on récupère le numéro de dossier dans le champs dossier de
233                // l'enregistrement (en base de données)
234                $dossier = $this->getVal("dossier");
235            }
236    
237            // On appelle la méthode de la classe utils qui renvoi le code de la
238            // division d'un dossier, on la stocke pour ne pas refaire le calcul au
239            // prochain appel de cette méthode
240            $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
241            // Logger
242            $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
243            // On retourne la valeur retournée
244            return $this->_division_from_dossier;
245    
246        }
247    
248        /**
249         * Cette méthode permet de récupérer le dossier d'autorisation d'un dossier
250         */
251        function getDossierAutorisationFromDossier($id) {
252            //
253            if (!isset($id)) {
254                return NULL;
255          }          }
256            //
257            $sql = "select dossier_autorisation from ".DB_PREFIXE."dossier ";
258            $sql .= " where dossier='".$id."'";
259            //
260            $dossier_autorisation = $this->db->getOne($sql);
261            $this->addToLog("getDossierAutorisationFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
262            database::isError($dossier_autorisation);
263            //
264            return $dossier_autorisation;
265        }
266    
267        // }}}
268    
269        function setType(&$form, $maj) {
270            //
271            parent::setType($form, $maj);
272            // On cache tous les champs
273            // XXX
274          $form->setType('complement3', 'hidden');          $form->setType('complement3', 'hidden');
         $form->setType('bible_auto', 'hidden');  
         $form->setType('bible', 'hidden');  
         $form->setType('bible2', 'hidden');  
275          $form->setType('bible3', 'hidden');          $form->setType('bible3', 'hidden');
276          $form->setType('complement4', 'hidden');          $form->setType('complement4', 'hidden');
277          $form->setType('bible4', 'hidden');          $form->setType('bible4', 'hidden');
# Line 123  class instruction extends instruction_ge Line 297  class instruction extends instruction_ge
297          $form->setType('bible14', 'hidden');          $form->setType('bible14', 'hidden');
298          $form->setType('complement15', 'hidden');          $form->setType('complement15', 'hidden');
299          $form->setType('bible15', 'hidden');          $form->setType('bible15', 'hidden');
300            //
301          $form->setType('delai', 'hidden');          $form->setType('delai', 'hidden');
302          $form->setType('etat', 'hidden');          $form->setType('etat', 'hidden');
303          $form->setType('accord_tacite', 'hidden');          $form->setType('accord_tacite', 'hidden');
304          $form->setType('action', 'hidden');          $form->setType('action', 'hidden');
305          $form->setType('delai_notification', 'hidden');          $form->setType('delai_notification', 'hidden');
306          $form->setType('avis', 'hidden');          $form->setType('avis_decision', 'hidden');
307            //
308          $form->setType('archive_delai', 'hidden');          $form->setType('archive_delai', 'hidden');
309          $form->setType('archive_etat', 'hidden');          $form->setType('archive_etat', 'hidden');
310          $form->setType('archive_accord_tacite', 'hidden');          $form->setType('archive_accord_tacite', 'hidden');
311          $form->setType('archive_avis', 'hidden');          $form->setType('archive_avis', 'hidden');
312          $form->setType('archive_date_complet', 'hidden');          $form->setType('archive_date_complet', 'hidden');
313            $form->setType('archive_date_dernier_depot', 'hidden');
314          $form->setType('archive_date_rejet', 'hidden');          $form->setType('archive_date_rejet', 'hidden');
315          $form->setType('archive_date_limite', 'hidden');          $form->setType('archive_date_limite', 'hidden');
316          $form->setType('archive_date_notification_delai', 'hidden');          $form->setType('archive_date_notification_delai', 'hidden');
# Line 142  class instruction extends instruction_ge Line 319  class instruction extends instruction_ge
319          $form->setType('archive_date_achevement', 'hidden');          $form->setType('archive_date_achevement', 'hidden');
320          $form->setType('archive_date_conformite', 'hidden');          $form->setType('archive_date_conformite', 'hidden');
321          $form->setType('archive_date_chantier', 'hidden');            $form->setType('archive_date_chantier', 'hidden');  
322            //
323            $form->setType('numero_arrete', 'hidden');
324            //
325            $form->setType('code_barres', 'hidden');
326            
327            //
328            $form->setType('archive_incompletude','hidden');
329            $form->setType('archive_evenement_suivant_tacite','hidden');
330            $form->setType('archive_evenement_suivant_tacite_incompletude','hidden');
331            $form->setType('archive_etat_pendant_incompletude','hidden');
332            $form->setType('archive_date_limite_incompletude','hidden');
333            $form->setType('archive_delai_incompletude','hidden');
334            if ($maj < 2) { //ajouter et modifier
335                $form->setType('destinataire', 'hidden');
336                $form->setType('lettretype', 'hiddenstatic');
337                $form->setType('complement', 'textarea');
338                $form->setType('complement2', 'textarea');
339                $form->setType('bible_auto', 'httpclick');
340                $form->setType('bible', 'httpclick');
341                $form->setType('bible2', 'httpclick');
342                $form->setType('dossier', 'hidden');  
343                $form->setType('libelle', 'hiddenstatic');
344                $form->setType('signataire_arrete','select');
345                $form->setType('date_envoi_signature','datedisabled');
346                $form->setType('date_retour_signature','datedisabled');
347                $form->setType('date_envoi_rar','datedisabled');
348                $form->setType('date_retour_rar','datedisabled');
349                $form->setType('date_envoi_controle_legalite','datedisabled');
350                $form->setType('date_retour_controle_legalite','datedisabled');
351                $form->setType('date_finalisation_courrier','datedisabled');
352                if($maj==0){ // add
353                    $form->setType('instruction', 'hiddenstatic');
354                    $form->setType('evenement', 'select');
355                    $form->setType('date_evenement', 'date2');
356                }else{ // modify
357                    $form->setType('instruction', 'hiddenstatic');
358                    $form->setType('evenement', 'selecthiddenstatic');
359                    //$form->setType('date_evenement', 'hiddenstaticdate');
360                    $form->setType('date_evenement', 'date2');
361                    // necessaire pour calcul de date en modification
362                    //$form->setType('delai', 'hiddenstatic');
363                }
364            } elseif($maj==2){
365                $form->setType('dossier', 'hidden');
366                $form->setType('bible_auto', 'hidden');
367                $form->setType('bible', 'hidden');
368                $form->setType('bible2', 'hidden');
369            }else {
370                $form->setType('destinataire', 'hidden');
371                $form->setType('dossier', 'hidden');
372                $form->setType('bible_auto', 'hidden');
373                $form->setType('bible', 'hidden');
374                $form->setType('bible2', 'hidden');
375            }
376    
377            //Cache les champs pour la finalisation
378            $form->setType('om_fichier_instruction', 'hidden');
379            $form->setType('om_final_instruction', 'hidden');
380            // Cache le document arrêté
381            $form->setType('document_arrete', 'hidden');
382      }      }
383        
384      function setSelect(&$form, $maj,&$db,$DEBUG) {      function setSelect(&$form, $maj,&$db,$debug) {
385            /**
386             * On ne surcharge pas la méthode parent car une requête sur la table
387             * dossier est mauvaise pour les performances, car la requête qui
388             * concerne evenement est plus complexe que celle générée et car les
389             * champs action, avis_decision et etat ne sont pas utilisés comme des
390             * select
391             */
392          if(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc.php"))          if(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc.php"))
393              include ("../sql/".$db->phptype."/".$this->table.".form.inc.php");              include ("../sql/".$db->phptype."/".$this->table.".form.inc.php");
394            elseif(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc"))
395                include ("../sql/".$db->phptype."/".$this->table.".form.inc");
396    
397          // *** evenement ***          //// action
398          $contenu=array();          //$this->init_select($form, $db, $maj, $debug, "action",
399          // etat du dossier          //                   $sql_action, $sql_action_by_id, false);
         $sql="select etat from ".DB_PREFIXE."dossier where dossier ='".  
               $this->idxformulaire."'";  
         $etat_dossier = $db->getOne($sql);  
         $nature_dossier= substr($this->idxformulaire,0,2);  
         // recherche des evenement de transition  
         $sql= $sql_transition." where transition.etat ='".$etat_dossier."' and (evenement.nature ='".  
               $nature_dossier."' or (nature ='T' and nature !='CU')) order by evenement.action";  
           
         // *** attention en dur le CU  
           
400    
401          $res = $db->query($sql);          //// avis_decision
402          if (database::isError($res))          //$this->init_select($form, $db, $maj, $debug, "avis_decision",
403              die($res->getMessage());          //                   $sql_avis_decision, $sql_avis_decision_by_id, false);
404          $contenu[0][0]="";  
405          $contenu[1][0]=_('choisir')." "._('evenement');          //// dossier
406          $k=1;          //$this->init_select($form, $db, $maj, $debug, "dossier",
407          while ($row=& $res->fetchRow()){          //                   $sql_dossier, $sql_dossier_by_id, false);
408              if($maj==0){ // ajouter  
409                  $contenu[0][$k]=$row[0];          //// etat
410                  $contenu[1][$k]=$row[1];          //$this->init_select($form, $db, $maj, $debug, "etat",
411                  $k++;          //                   $sql_etat, $sql_etat_by_id, false);
412              }else{  
413                  // select hiddenstatic          //// evenement
414                  $contenu[0][$k]=$row[0];          //$this->init_select($form, $db, $maj, $debug, "evenement",
415                  $contenu[1][$k]=$row[1];          //                   $sql_evenement, $sql_evenement_by_id, false);
416                  $k++;  
417              }          // signataire_arrete
418          }          $this->init_select($form, $db, $maj, $debug, "signataire_arrete",
419          $form->setSelect("evenement",$contenu);                             $sql_signataire_arrete, $sql_signataire_arrete_by_id, true);
420          // lien bible_auto  [link]  
421          $contenu=array();          /**
422          $contenu[0]=" automatique ";           * Gestion du filtre sur les événements de workflow disponibles
423             * On récupère ici en fonction de l'état du dossier d'instruction en
424             * cours et du type du dossier d'instruction en cours la liste
425             * événements disponibles.
426             */
427            if ($maj == 0) {
428                // Récupération des événements par une jointure entre la table dossier
429                // et la table transition et la table evenement et la table
430                // lien_dossier_instruction_type_evenement en fonction de l'identifiant
431                // du dossier d'instruction en cours
432                $sql = "SELECT
433                evenement.evenement,
434                (evenement.libelle||' ['||evenement.action||']') as lib
435                FROM ".DB_PREFIXE."dossier
436                INNER JOIN ".DB_PREFIXE."lien_dossier_instruction_type_evenement
437                    ON dossier.dossier_instruction_type=lien_dossier_instruction_type_evenement.dossier_instruction_type
438                INNER JOIN ".DB_PREFIXE."evenement
439                    ON evenement.evenement=lien_dossier_instruction_type_evenement.evenement
440                INNER JOIN ".DB_PREFIXE."transition
441                    ON evenement.evenement = transition.evenement
442                    AND dossier.etat=transition.etat
443                WHERE dossier.dossier='".$this->idxformulaire."'
444                ORDER BY evenement.action";
445                $res = $db->query($sql);
446                $this->addToLog("setSelect(): db->query(\"".$sql."\");", VERBOSE_MODE);
447                if (database::isError($res)) {
448                    die($res->getMessage());
449                }
450                // Remplissage du tableau du select
451                $contenu = array(
452                    0 => array("",),
453                    1 => array(_('choisir')." "._('evenement'),)
454                );
455                while ($row=& $res->fetchRow()) {
456                    $contenu[0][] = $row[0];
457                    $contenu[1][] = $row[1];
458                }
459                $form->setSelect("evenement", $contenu);
460            } else {
461                $sql = "SELECT
462                (evenement.libelle||' ['||evenement.action||']') as lib
463                FROM ".DB_PREFIXE."evenement
464                WHERE evenement.evenement=".$this->getVal("evenement")."";
465                $res = $db->getone($sql);
466                $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
467                if (database::isError($res)) {
468                    die($res->getMessage());
469                }
470                //
471                $contenu = array(
472                    0 => array($this->getVal("evenement"),),
473                    1 => array($res,)
474                );
475                $form->setSelect("evenement", $contenu);
476            }
477    
478            /**
479             * Gesion des liens vers la bible
480             */
481            // lien bible_auto
482            $contenu = array(_("automatique"));
483          $form->setSelect("bible_auto",$contenu);          $form->setSelect("bible_auto",$contenu);
484          // lien bible1          // lien bible1
485          $contenu=array();          $contenu = array(_("bible"));
         $contenu[0]=" Bible ";  
486          $form->setSelect("bible",$contenu);          $form->setSelect("bible",$contenu);
487          // lien bible2          // lien bible2
488          $contenu=array();          $contenu = array(_("bible"));
         $contenu[0]=" Bible ";  
489          $form->setSelect("bible2",$contenu);          $form->setSelect("bible2",$contenu);
490      } // function select      }
491    
492        function cleSecondaire($id, &$db, $val, $DEBUG) {
493            //
494            parent::cleSecondaire($id, $db, $val, $DEBUG);
495            
496            // Aucune clé secondaire n'a été trouvée, l'instruction peut être supprimée
497            if ( $this->correct !== false ){
498                        
499                /**
500                 * Vérification que l'élément supprimé est le dernier pour pouvoir
501                 * remodifier les données de manière itérative.
502                 */
503                // Initialisation
504                $dernierevenement = "";
505                // Récupération du dernier élément de la table d'instruction qui
506                // concerne le dossier en cours
507                $sql = "SELECT max(instruction)
508                FROM ".DB_PREFIXE."instruction
509                WHERE dossier ='".$this->idxformulaire."'";
510                $dernierevenement = $db->getOne($sql);
511                $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
512                if (database::isError($dernierevenement)) {
513                    die($dernierevenement->getMessage());
514                }
515                // Si on se trouve effectivement sur le dernier evenement d'instruction
516                if ($dernierevenement == $id) {
517                    // Alors on valide la suppression
518                    $this->correct = true;
519                    $this->addToMessage(_('Destruction_chronologique'));
520                } else {
521                    // Alors on annule la suppression
522                    $this->correct = false;
523                    $this->addToMessage(_("Seul le dernier evenement d'instruction peut etre supprime."));
524                }
525            }
526        }
527    
528      function setGroupe(&$form,$maj){      // Vérification de la non modification des dates de suivi
529          $form->setGroupe('evenement','D');      function updateDate($champ) {
530          $form->setGroupe('libelle','G');          if($this->valF[$champ] != "") {
531          $form->setGroupe('datecourrier','G');              if($this->getVal($champ) != "" AND $this->getVal($champ) != $this->valF[$champ]) {
532          $form->setGroupe('lettretype','F');                  $this->correct = false;
533      }                  $this->addToMessage(_("Les dates de suivis ne peuvent etre modifiees"));
534                }
535      function setRegroupe(&$form,$maj){                }
536          $form->setRegroupe('evenement','D',_('evenement'), "collapsible");      }
537          $form->setRegroupe('libelle','G','');  
538          $form->setRegroupe('datecourrier','G','');      // Sélectionne le signataire_arrete par défaut
539          $form->setRegroupe('lettretype','F','');      function setVal(&$form,$maj,$validation){
540          $form->setRegroupe('complement','D',_('complement'), "collapsible");          
541          $form->setRegroupe('bible_auto','G','');          // Ajout
542          $form->setRegroupe('bible','F','');          if($maj == 0) {
543          $form->setRegroupe('complement2','D',_('complement2'), "startClosed");              
544          $form->setRegroupe('bible2','F','');              // Création de la requête
545      }              $sql = "SELECT signataire_arrete
546                            FROM ".DB_PREFIXE."signataire_arrete
547      function setLib(&$form,$maj) {                      WHERE defaut IS TRUE";
548          parent :: setLib($form,$maj);              
549          $form->setLib('libelle',' ');              // Exécution de la requête
550          $form->setLib('bible_auto',"");              $res = $this->f->db->query($sql);
551          $form->setLib('bible',"");              $this->f->addToLog("deleteAllLienDossierInstructionTypeEvenementEvenement(): db->query(\"".$sql."\");", VERBOSE_MODE);
552          $form->setLib('bible2',"");              if ( database::isError($res)){
553          $form->setLib('lettretype',"->"._(" courrier "));                  die();
554          $form->setLib('datecourrier',_(" du "));              }
555      }          
556                $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
557      // ==================================================================              
558      // trigger avant modification données    [trigger before modify data]              if ( isset($row['signataire_arrete']) && is_numeric($row['signataire_arrete'])){
559      // ==================================================================                  
560      function triggerajouter($id,&$db,$val,$DEBUG) {                  $form->setVal("signataire_arrete",$row['signataire_arrete']);
561          // mise a jour instruction avec evenement              }
562          // [modify instruction with evenement]          }
563          $sql= "select * from ".DB_PREFIXE."evenement where evenement =".$this->valF['evenement'];      }
564    
565        /*Met des valeurs par défaut dans certains des sous-formulaire*/
566        function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){
567            if ($validation==0 and $maj<2) {
568                if ($maj == 0){
569                    $form->setVal("destinataire", $idxformulaire);
570                    $form->setVal("dossier", $idxformulaire);
571                    $form->setVal("date_evenement", date('Y-m-d'));
572                }
573                $form->setVal("bible_auto","bible_auto()");
574                $form->setVal("bible","bible()");
575                $form->setVal("bible2","bible2()");
576            }
577            $this->retourformulaire=$retourformulaire;
578            $this->idxformulaire=$idxformulaire;
579        }
580    
581    
582        function setLayout(&$form, $maj){
583            if ( $maj < 2 OR $maj == 3 ) {
584                            /*Champ sur lequel s'ouvre le bloc 1 */
585                $form->setBloc('evenement','D',"","col_12");
586    
587                    $form->setFieldset('evenement','D',_('Evenement'));
588                    $form->setFieldset('lettretype','F','');
589                
590                $form->setBloc('lettretype','F');
591    
592                $form->setBloc('date_finalisation_courrier','D',"","col_12");
593    
594                    $form->setFieldset('date_finalisation_courrier','D',_('Dates'));
595                        $form->setBloc('date_finalisation_courrier','D',"","col_6");
596                        $form->setBloc('date_envoi_controle_legalite','F');
597    
598                        $form->setBloc('signataire_arrete','D',"","col_6");
599                        $form->setBloc('date_retour_controle_legalite','F');
600                    $form->setFieldset('date_retour_controle_legalite','F','');
601                
602                $form->setBloc('date_retour_controle_legalite','F');
603    
604                $form->setBloc('complement','D',"","col_12");
605                    $form->setFieldset('complement','D',_('Complement'));
606                    $form->setFieldset('bible','F','');
607                $form->setBloc('bible','F');
608    
609                $form->setBloc('complement2','D',"","col_12");
610                    $form->setFieldset('complement2','D',_('Complement 2'));
611                    $form->setFieldset('bible2','F','');
612                $form->setBloc('bible2','F');
613            }
614        }
615        
616        function setLib(&$form, $maj) {
617            //
618            parent::setLib($form, $maj);
619            //
620            $form->setLib('bible_auto', "");
621            $form->setLib('bible', "");
622            $form->setLib('bible2', "");
623        }
624    
625        function triggerajouter($id, &$db, $val, $DEBUG) {
626            /**
627             * Le code suivant permet de récupérer des valeurs des tables evenement
628             * et dossier pour les stocker dans l'instruction :
629             * DEPUIS L'EVENEMENT
630             * - action
631             * - delai
632             * - accord_tacite
633             * - etat
634             * - avis_decision
635             * - delai_notification
636             * - lettretype
637             * DEPUIS LE DOSSIER D'INSTRUCTION
638             * - archive_delai
639             * - archive_accord_tacite
640             * - archive_etat
641             * - archive_avis
642             * - date_complet
643             * - date_rejet
644             * - date_limite
645             * - date_notification_delai
646             * - date_decision
647             * - date_validite
648             * - date_achevement
649             * - date_chantier
650             * - date_conformite
651             * Il permet également de stocker la date_depot du dossier d'instruction
652             * dans l'attribut $this->archive_date_depot de la classe.
653             */
654            // Récupération de tous les paramètres de l'événement sélectionné
655            $sql = "SELECT * FROM ".DB_PREFIXE."evenement
656            WHERE evenement=".$this->valF['evenement'];
657          $res = $db->query($sql);          $res = $db->query($sql);
658          if (database::isError($res)) die($res->getMessage());          $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
659          if ($DEBUG == 1)          if (database::isError($res)) {
660              echo " la requete ".$sql." est exécutée<br>";              die($res->getMessage());
661          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){          }
662              if(isset($row['action']) and !empty($row['action'])) {          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
663                // Récupération de l'identifiant de l'action
664                // si une action est paramétrée dans l'événement
665                $this->valF['action'] = NULL;
666                if (isset($row['action']) and !empty($row['action'])) {
667                  $this->valF['action']=$row['action'];                  $this->valF['action']=$row['action'];
             } else {  
                 $this->valF['action']=NULL;  
668              }              }
669              $this->valF['delai']=$row['delai'];              // Récupération de la valeur du délai
670              if(isset($row['etat']) and !empty($row['etat'])) {              $this->valF['delai'] = $row['delai'];
671                // Récupération de l'identifiant de l'état
672                // si un état est paramétré dans l'événement
673                $this->valF['etat']=NULL;
674                if (isset($row['etat']) and !empty($row['etat'])) {
675                  $this->valF['etat']=$row['etat'];                  $this->valF['etat']=$row['etat'];
             } else {  
                 $this->valF['etat']=NULL;  
676              }              }
677                // Récupération de la valeur d'accord tacite
678              $this->valF['accord_tacite']=$row['accord_tacite'];              $this->valF['accord_tacite']=$row['accord_tacite'];
679                // Récupération de la valeur du délai de notification
680              $this->valF['delai_notification']=$row['delai_notification'];              $this->valF['delai_notification']=$row['delai_notification'];
681              if(isset($row['avis']) and !empty($row['avis'])) {              // Récupération de l'identifiant de l'avis
682                  $this->valF['avis']=$row['avis'];              // si un avis est paramétré dans l'événement
683                $this->valF['avis_decision'] = NULL;
684                if(isset($row['avis_decision']) and !empty($row['avis_decision'])) {
685                    $this->valF['avis_decision']=$row['avis_decision'];
686                }
687                // Récupération de la valeur de la lettre type
688                // Sinon on lui affecte lavaleur par défaut standard
689                if ($row['lettretype'] != "") {
690                    $this->valF['lettretype']=$row['lettretype'];
691              } else {              } else {
692                  $this->valF['avis']=NULL;                  $this->valF['lettretype'] = "standard"; // XXX
693              }              }
             if($row['lettretype']!="")  
                 $this->valF['lettretype']=$row['lettretype'];  
             else  
                 $this->valF['lettretype']="standard";  
694          }          }
695          $sql= "select * from ".DB_PREFIXE."dossier where dossier = '".$this->valF['dossier']."'";          // Récupération de toutes les valeurs du dossier d'instruction en cours
696            $sql = "SELECT * FROM ".DB_PREFIXE."dossier
697            WHERE dossier='".$this->valF['dossier']."'";
698          $res = $db->query($sql);          $res = $db->query($sql);
699          if (database::isError($res))          $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
700            if (database::isError($res)) {
701              die($res->getMessage());              die($res->getMessage());
702          if ($DEBUG == 1)          }
703              echo " la requete ".$sql." est exécutée<br>";          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
704          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){              // XXX On stocke la date de dépôt actuelle du dossier d'instruction
705              //              // dans un attribut de la classe
706              $this->archive_date_depot = $row['date_depot'];              $this->archive_date_depot = $row['date_depot'];
707              // archive en instruction (si suppression)              // Récupération de la valeur actuelle du délai, de l'accord tacite,
708                // de l'état et de l'avis du dossier d'instruction
709              $this->valF['archive_delai']=$row['delai'];              $this->valF['archive_delai']=$row['delai'];
710              $this->valF['archive_accord_tacite']=$row['accord_tacite'];              $this->valF['archive_accord_tacite']=$row['accord_tacite'];
711              $this->valF['archive_etat']=$row['etat'];              $this->valF['archive_etat']=$row['etat'];
712              $this->valF['archive_avis']=$row['avis'];              $this->valF['archive_avis']=$row['avis_decision'];
713              // compatibilite pgsql              // Récupération de la valeur actuelle des 9 dates du dossier
714              if($row['date_complet']!='')              // d'instruction
715                 $this->valF['archive_date_complet']=$row['date_complet'];              if ($row['date_complet'] != '') {
716              if($row['date_rejet']!='')                  $this->valF['archive_date_complet']=$row['date_complet'];
717                 $this->valF['archive_date_rejet']= $row['date_rejet'];              }
718              if($row['date_limite']!='')              if ($row['date_dernier_depot'] != '') {
719                 $this->valF['archive_date_limite']= $row['date_limite'];                  $this->valF['archive_date_dernier_depot']=$row['date_dernier_depot'];
720              if($row['date_notification_delai']!='')              }
721                 $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];              if ($row['date_rejet']!='') {
722              if($row['date_decision']!='')                  $this->valF['archive_date_rejet']= $row['date_rejet'];
723                 $this->valF['archive_date_decision']= $row['date_decision'];              }
724              if($row['date_validite']!='')              if ($row['date_limite']!='') {
725                 $this->valF['archive_date_validite']= $row['date_validite'];                  $this->valF['archive_date_limite']= $row['date_limite'];
726              if($row['date_achevement']!='')              }
727                 $this->valF['archive_date_achevement']= $row['date_achevement'];              if ($row['date_notification_delai']!='') {
728              if($row['date_chantier']!='')                  $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];
729                 $this->valF['archive_date_chantier']= $row['date_chantier'];              }
730              if($row['date_conformite']!='')              if ($row['date_decision']!='') {
731                 $this->valF['archive_date_conformite']= $row['date_conformite'];                    $this->valF['archive_date_decision']= $row['date_decision'];
732                }
733                if ($row['date_validite']!='') {
734                    $this->valF['archive_date_validite']= $row['date_validite'];
735                }
736                if ($row['date_achevement']!='') {
737                    $this->valF['archive_date_achevement']= $row['date_achevement'];
738                }
739                if ($row['date_chantier']!='') {
740                    $this->valF['archive_date_chantier']= $row['date_chantier'];
741                }
742                if ($row['date_conformite']!='') {
743                    $this->valF['archive_date_conformite']= $row['date_conformite'];  
744                }
745                if ($row['incompletude']!='') {
746                    $this->valF['archive_incompletude']= $row['incompletude'];  
747                }
748                if ($row['evenement_suivant_tacite']!='') {
749                    $this->valF['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];  
750                }
751                if ($row['evenement_suivant_tacite_incompletude']!='') {
752                    $this->valF['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];  
753                }
754                if ($row['etat_pendant_incompletude']!='') {
755                    $this->valF['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];  
756                }
757                if ($row['date_limite_incompletude']!='') {
758                    $this->valF['archive_date_limite_incompletude']= $row['date_limite_incompletude'];  
759                }
760                if ($row['delai_incompletude']!='') {
761                    $this->valF['archive_delai_incompletude']= $row['delai_incompletude'];  
762                }
763          }          }
764    
765            // Identifiant du type de courrier
766            $idTypeCourrier = '11';
767            $idCourrier = str_pad($this->valF["instruction"], 10, "0", STR_PAD_LEFT);
768            // Code barres
769            $this->valF["code_barres"] = $idTypeCourrier . $idCourrier;
770        }
771        
772        // Test si une restriction est valide
773        // return boolean
774        function restrictionIsValid($restriction){
775            
776            /* Met des espace avant et après les opérateurs puis transforme la chaine en
777             * un tableau */
778            $tabRestriction = str_replace(">="," >= ",
779                              str_replace("<="," <= ",
780                              str_replace("-"," - ",
781                              str_replace("+"," + ",$restriction))));
782            $tabRestriction = explode( " ", $tabRestriction);
783            
784            //Variables de résultat
785            $res = array();
786            $i = 0;
787            $comp = "";
788            
789            
790            //Test que le tableau n'est pas vide
791            if ( count($tabRestriction) > 0 ){
792                
793                $res[0] = $this->getRestrictionValue($tabRestriction[0]);
794                
795                //Calcul des variables
796                for ( $j = 1 ; $j < count($tabRestriction) ; $j += 2 ) {
797                    
798                    //Variable de comparaison
799                    if ( strcmp( ">=", $tabRestriction[$j] ) == 0 ||
800                         strcmp( "<=", $tabRestriction[$j]) ==0 ){
801                        
802                        $comp = $tabRestriction[$j];
803                        $res[++$i] = $this->getRestrictionValue($tabRestriction[$j+1]);
804                    }
805                    // Fait l'addition
806                    elseif ( strcmp( "+", $tabRestriction[$j]) == 0 ){
807                        
808                       $res[$i] =  $this->moisdate( $res[$i], $this->getRestrictionValue($tabRestriction[$j+1]) );
809                    }
810                }
811            }
812                    
813            // Effectue le test
814            if ( strcmp($comp, ">=") == 0 ){
815                
816                if ( $res[0] >= $res[1] || $res[0] == "" ){
817                    
818                    return true;
819                }
820                else {
821                    
822                    return false;
823                }
824            }
825            elseif ( strcmp($comp, "<=") == 0 ){
826    
827                if ( $res[0] <= $res[1] || $res[1] == "" ){
828    
829                    return true;
830                }
831                else {
832    
833                    return false;
834                }
835            }
836            
837            return true;
838        }
839        
840        //Retourne la valeur de valF si $restrictionValue n'est pas un chiffre, le chiffre sinon
841        function getRestrictionValue($restrictionValue){
842            
843            return ( is_numeric($restrictionValue) ) ?
844                $restrictionValue :
845                $this->valF[$restrictionValue];
846      }      }
847            
848      function regle($regle){      function regle($regle){
# Line 334  class instruction extends instruction_ge Line 884  class instruction extends instruction_ge
884      }      }
885            
886            
887        
     // ==================================================================  
     // valeur dossier  apres modification   [values dossier after action]  
     // ==================================================================  
888      function triggerajouterapres($id,&$db,$val,$DEBUG) {      function triggerajouterapres($id,&$db,$val,$DEBUG) {
889          // mise a null au lieu de "" / voir compatibilite mysql          /**
890          // voir parametrage CU en dur           * Mise à jour des valeurs du dossier en fonction des valeurs calculées
891          // voir parametrage des actions en dur           * par l'action
892          $param=1;           */
893          if($param==1){          $this->getValEvenement();
894          $sql="select * from ".DB_PREFIXE."action where action = '".$this->valF['action']."'";          // Initialisation
895            $valF = "";
896            // état de complétude actuel du dossier
897            $incompletude =  $this->dossierIncomplet();
898    
899            if($incompletude === FALSE) {
900                // Si l'événement d'instruction est de type incompletude
901                if($this->valEvenement['type'] == "incompletude") {
902                    // On marque le dossier en incomplétude pour application des actions
903                    $incompletude = TRUE;
904                    // Set du flag incomplétude de la table dossier
905                    $valF['incompletude'] = TRUE;
906                    // Enregistrement de l'état dans la variable provisoire
907                    $valF['etat_pendant_incompletude'] = $this->valF['archive_etat'];
908                }
909            } else {
910                // Si l'evenement d'instruction est de type retour ou contient une
911                // decision, on sort d'incomplétude
912                if($this->valEvenement['type'] == "retour" OR
913                   $this->valEvenement['avis_decision'] != NULL) {
914                    // On enlève la marque d'incomplétude pour application des actions
915                    $incompletude = FALSE;
916                    // On enlève le flag d'incomplétude sur l'enregistrement de la table dossier
917                    $valF['incompletude'] = FALSE;
918                     // Restauration de l'état depuis l'état provisoire
919                    $valF['etat'] = $this->valF['archive_etat_pendant_incompletude'];
920                    // On vide la variable provisoire ainsi que le délai de complétude
921                    // et la date limite de complétude
922                    $valF['etat_pendant_incompletude'] = NULL;
923                    $valF['delai_incompletude'] = NULL;
924                    $valF['date_limite_incompletude'] = NULL;
925                }
926            }
927            // Récupération des paramètres de l'action
928            $sql = "SELECT * FROM ".DB_PREFIXE."action
929            WHERE action='".$this->valF['action']."'";
930          $res = $db->query($sql);          $res = $db->query($sql);
931          if (database::isError($res))          $this->addToLog("triggerajouterapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
932            if (database::isError($res)) {
933              die($res->getMessage());              die($res->getMessage());
934          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){          }
935              if($row['regle_etat']!=''){          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
936                  $valF['etat']= $this->regle($row['regle_etat']);  
937              }              // pour chacune des regles, on applique la regle
938              if($row['regle_delai']!=''){              if($row['regle_delai']!=''){
939                  $valF['delai']= $this->regle($row['regle_delai']);                  $valF['delai'] = $this->regle($row['regle_delai']);
940              }              }
941              if($row['regle_accord_tacite']!=''){              if($row['regle_accord_tacite']!=''){
942                  $valF['accord_tacite']= $this->regle($row['regle_accord_tacite']);                  $valF['accord_tacite'] = $this->regle($row['regle_accord_tacite']);
943              }              }
944              if($row['regle_avis']!=''){              if($row['regle_avis']!=''){
945                  $valF['avis']= $this->regle($row['regle_avis']);                  $valF['avis_decision'] = $this->regle($row['regle_avis']);
946              }              }
947              if($row['regle_date_limite']!=''){              if($row['regle_date_limite']!=''){
948                  $valF['date_limite']= $this->regle($row['regle_date_limite']);                  $valF['date_limite']= $this->regle($row['regle_date_limite']);
# Line 367  class instruction extends instruction_ge Line 950  class instruction extends instruction_ge
950              if($row['regle_date_complet']!=''){              if($row['regle_date_complet']!=''){
951                  $valF['date_complet']= $this->regle($row['regle_date_complet']);                  $valF['date_complet']= $this->regle($row['regle_date_complet']);
952              }              }
953                if($row['regle_date_dernier_depot']!=''){
954                    $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot']);
955                }
956              if($row['regle_date_notification_delai']!=''){              if($row['regle_date_notification_delai']!=''){
957                  $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);                  $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);
958              }              }
# Line 376  class instruction extends instruction_ge Line 962  class instruction extends instruction_ge
962              if($row['regle_date_rejet']!=''){              if($row['regle_date_rejet']!=''){
963                  $valF['date_rejet']= $this->regle($row['regle_date_rejet']);                  $valF['date_rejet']= $this->regle($row['regle_date_rejet']);
964              }              }
965             if($row['regle_date_validite']!=''){              if($row['regle_date_validite']!=''){
966                  $valF['date_validite']= $this->regle($row['regle_date_validite']);                  $valF['date_validite']= $this->regle($row['regle_date_validite']);
967              }              }
968             if($row['regle_date_chantier']!=''){              if($row['regle_date_chantier']!=''){
969                  $valF['date_chantier']= $this->regle($row['regle_date_chantier']);                  $valF['date_chantier']= $this->regle($row['regle_date_chantier']);
970              }              }
971             if($row['regle_date_achevement']!=''){              if($row['regle_date_achevement']!=''){
972                  $valF['date_achevement']= $this->regle($row['regle_date_achevement']);                  $valF['date_achevement']= $this->regle($row['regle_date_achevement']);
973              }              }
974             if($row['regle_date_conformite']!=''){              if($row['regle_date_conformite']!=''){
975                  $valF['date_conformite']= $this->regle($row['regle_date_conformite']);                  $valF['date_conformite']= $this->regle($row['regle_date_conformite']);
976              }              }
977                if($row['regle_date_limite_incompletude']!=''){
978                    $valF['date_limite_incompletude']= $this->regle($row['regle_date_limite_incompletude']);
979                }
980                if($row['regle_delai_incompletude']!=''){
981                    $valF['delai_incompletude']= $this->regle($row['regle_delai_incompletude']);
982                }
983                if($row['regle_etat']!=''){
984                    // Si on est dans le cas général ou qu'on est en incomplétude et
985                    // qu'on a un événement de type incomplétude alors : on stocke
986                    // l'état dans la variable courante
987                    if ($incompletude == FALSE OR $this->valEvenement['type'] == "incompletude") {
988                        $valF['etat'] = $this->regle($row['regle_etat']);
989                    } else {
990                        $valF['etat_pendant_incompletude'] = $this->regle($row['regle_etat']);
991                    }
992                }
993    
994                if($this->valEvenement['evenement_suivant_tacite'] != '') {
995                    // Si on est pas en incomplétude on stocke l'événement tacite
996                    //de l'événement dans la variable courante
997                    if ($incompletude == FALSE) {
998                        $valF['evenement_suivant_tacite'] = $this->valEvenement['evenement_suivant_tacite'];
999                    } else {
1000                        $valF['evenement_suivant_tacite_incompletude'] = $this->valEvenement['evenement_suivant_tacite'];
1001                    }
1002                }
1003          }          }
1004          }else{          // Si des valeurs ont été calculées alors on met à jour l'enregistrement
1005              switch ($this->valF['action']) {          if ($valF != "") {
1006              case "initialisation" :              // On met à jour le dossier
1007                  $valF['delai']= $this->valF['delai'];              $cle = " dossier='".$this->valF['dossier']."'";
1008                  $valF['etat']= $this->valF['etat'];              $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1009                  $valF['accord_tacite']= $this->valF['accord_tacite'];              $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1010                  // la date_complet est la date de depot              if (database::isError($res1)) {
                 $valF['date_complet']= $this->archive_date_depot; // ****  
                 $valF['date_limite'] =  $this->moisdate($valF['date_complet'],$valF['delai']);  
                 $valF['date_notification_delai'] =  $this->moisdate($valF['date_complet'],1);  
                 break;  
             case "notification" :  
                 $valF['delai']= $this->valF['delai'];  
                 $valF['etat']= $this->valF['etat'];  
                 $valF['accord_tacite']= $this->valF['accord_tacite'];  
                 // la date_complet est celle precedemment saisie  
                 $valF['date_complet']=$this->valF['archive_date_complet'];  
                 $valF['date_limite'] =  $this->moisdate($valF['date_complet'],$valF['delai']);  
                 $valF['date_notification_delai'] =  $this->moisdate($valF['date_complet'],1);  
                 // 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');  
                 //  
                 break;  
             case "retour" :  
                 $valF['delai']= $this->valF['delai'];  
                 $valF['etat']= $this->valF['etat'];  
                 $valF['accord_tacite']= $this->valF['accord_tacite'];  
                 // la date_complet est celle de l evenement  
                 $valF['date_complet']= $this->valF['datecourrier'];  
                 $valF['date_limite'] =  $this->moisdate($valF['date_complet'],$valF['delai']);  
                 $valF['date_notification_delai'] =  $this->moisdate($valF['date_complet'],1);  
                 break;  
             case "rejet" :  
                 //$valF['delai']=0;   // *** delai a garder pour etat dpc  
                 $valF['etat']= $this->valF['etat'];  
                 $valF['accord_tacite']= $this->valF['accord_tacite'];  
                 // la date rejet est initialisee  
                 $valF['date_rejet']= $this->valF['datecourrier'];  
                 // les dates de depart et fin d instruction sont annulées  
                 $valF['date_limite'] =null;  
                 $valF['date_notification_delai'] =null;  
                 $valF['date_complet']=null;  
                 break;  
             case "majoration" :  
                 $valF['delai']= $this->valF['archive_delai']+$this->valF['delai'];  
                 $valF['etat']= $this->valF['etat'];  
                 $valF['accord_tacite']= $this->valF['accord_tacite'];  
                 $valF['date_complet']=$this->valF['archive_date_complet'];  
                 // majoration de la date limite  
                 $valF['date_limite'] =  $this->moisdate($valF['date_complet'],$valF['delai']);  
                 $valF['date_notification_delai'] =  $this->moisdate($valF['date_complet'],1);  
                 // la date du courrier ne doit pas etre depasse par rapport au delai de  
                 // notification  
                 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');  
                 break;  
             case "acceptation" :  
                 $valF['etat']= $this->valF['etat'];  
                 $valF['date_decision']= $this->valF['datecourrier'];  
                 $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;  
       
             default:  
             if ($this->valF['etat']!="")  
                $valF['etat']= $this->valF['etat'];  
             }// end switch  
         } // end param  
         if($valF!=""){  
             $cle= " dossier = '".$this->valF['dossier']."'";  
             $res1= $db->autoExecute(DB_PREFIXE.'dossier',$valF,DB_AUTOQUERY_UPDATE,$cle);  
             if (database::isError($res1))  
1011                  die($res->getMessage());                  die($res->getMessage());
1012              if ($DEBUG == 1)              }
1013                echo "La requête de mise à jour est effectuée.<br>";              // Affichage d'informations à l'utilisateur
1014              $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')."]" ;  
1015          }          }
     }  
1016    
1017            /**
1018             * REFERENTIEL ERP
1019             */
1020            // verification si envoi vers ERP est active
1021            if ($this->f->getParameter('option_erp') != "") {
1022                // la nature du dossier
1023                $nature_dossier = substr($this->idxformulaire,0,2);
1024                //
1025                $sql = "SELECT erp
1026                FROM ".DB_PREFIXE."dossier
1027                WHERE dossier='".$this->valF['dossier']."'";
1028                $dossier_erp = $this->db->getone($sql);
1029                $this->addToLog("triggerajouterapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1030                if (database::isError($res)) {
1031                    die($res->getMessage());
1032                }
1033                //
1034                $sql = "SELECT libelle
1035                FROM ".DB_PREFIXE."evenement
1036                WHERE evenement='".$this->valF['evenement']."'";
1037                $evenement_libelle = $this->db->getone($sql);
1038                $this->addToLog("triggerajouterapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1039                if (database::isError($res)) {
1040                    die($res->getMessage());
1041                }
1042                //
1043                if ($dossier_erp == 't') {
1044                    // envoi du message en cas d'un PC qui est ERP et sur lequel un evenement
1045                    // d'acceptation etait fait
1046                    if ($nature_dossier ==
1047                            $this->f->getParameter('erp_evenement_accepter_dossier_PC')
1048                        && $this->valF['evenement'] ==
1049                            $this->f->getParameter('erp_evenement_accepter_sans_reserve')) {
1050                        $msgenque = new MessageEnqueuer();
1051                        $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
1052                        $msgenque->setDecision($evenement_libelle);
1053                        $msgenque->enqueueMessage($msgenque::$ERP_ARRETE_PC_EFFECTUE);
1054                    }
1055                    if ($this->valF['evenement'] ==
1056                            $this->f->getParameter('erp_evenement_refuser_dossier')) {
1057                        $msgenque = new MessageEnqueuer();
1058                        $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
1059                        $msgenque->enqueueMessage($msgenque::$ERP_DECISION_CONFORMITE_EFFECTUE);                
1060                    }
1061                }
1062            } // fin de if ($this->f->getParameter('option_erp') != "")
1063    
1064            // Mise à jour des données du dossier d'autorisation
1065            require_once "../obj/dossier_autorisation.class.php";
1066            $da = new dossier_autorisation($this->getDossierAutorisationFromDossier($this->valF['dossier']), $this->db, DEBUG);
1067            $da->majDossierAutorisation();
1068        }    
1069        function triggermodifier($id,&$db,$val,$DEBUG) {
1070            // Ajout de l'arrêté dans la GED
1071            if ($this->valF['numero_arrete'] != $this->getVal('numero_arrete')
1072                AND $this->valF["om_fichier_instruction"] != "") {
1073                $file = $this->f->storage->get($this->valF["om_fichier_instruction"]);
1074                if(isset($file) and $file != null) {
1075                    // Récupération des métadonnées calculées après validation
1076                    $spe_metadata = $this->getMetadata("document_arrete");
1077                    $pdf_output = $file["file_content"];
1078                    //Métadonnées du document
1079                    $metadata = array(
1080                        'filename' => 'instruction_'.$this->valF[$this->clePrimaire].'.pdf',
1081                        'mimetype' => 'application/pdf',
1082                        'size' => strlen($pdf_output)
1083                    );
1084                    $metadata = array_merge($metadata, $spe_metadata);
1085                    
1086                    //Si le document a déjà été finalisé
1087                    //on met à jour le document mais pas son uid
1088                    if ( $this->getVal("document_arrete") != '' ){
1089                        $uid = $this->f->storage->update(
1090                            $this->getVal("document_arrete"), $pdf_output, $metadata);
1091                    }
1092                    //Sinon, on joute le document et on récupère son uid
1093                    else {
1094                        //Stockage du PDF
1095                        $uid = $this->f->storage->create($pdf_output, $metadata);
1096                    }
1097                    if($uid != OP_FAILURE) {
1098                        $this->valF["document_arrete"] = $uid;
1099                    }
1100                }
1101                
1102            }
1103        }
1104      function triggermodifierapres($id,&$db,$val,$DEBUG) {      function triggermodifierapres($id,&$db,$val,$DEBUG) {
1105          /*          /**
1106           * cette fonction apour objet de permettre de modifier la date courrier           * L'objectif ici est d'effectuer les recalculs de date dans le dossier
1107          */           * si la date de l'evenement est modifiee
1108          $valF=array();           */
1109          $sql= "select action from ".DB_PREFIXE."evenement where evenement =".$this->valF['evenement'];          // Initialisation
1110            $valF = "";
1111            // Récupération de l'action correspondante à l'événement
1112            $sql = "SELECT action
1113            FROM ".DB_PREFIXE."evenement
1114            WHERE evenement=".$this->valF['evenement'];
1115          $action = $db->getOne($sql);          $action = $db->getOne($sql);
1116          if (database::isError($action)) die($action->getMessage().$sql);          $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1117          $sql="select * from ".DB_PREFIXE."action where action = '".$action."'";          if (database::isError($action)) {
1118                die($action->getMessage());
1119            }
1120    
1121            // Récupération de tous les paramètres de l'événement sélectionné
1122            $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1123            WHERE evenement=".$this->valF['evenement'];
1124          $res = $db->query($sql);          $res = $db->query($sql);
1125          if (database::isError($res)) die($res->getMessage().$sql);          $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
1126            if (database::isError($res)) {
1127                die($res->getMessage());
1128            }
1129            while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1130                // Si la date de retour signature est éditée on vérifie si il existe un événement automatique
1131                if ($this->getVal('date_retour_signature') == "" AND
1132                    $this->valF['date_retour_signature'] != "" AND
1133                    $row['evenement_retour_signature'] != "") {
1134                    $new_instruction = new instruction("]", $db, $DEBUG);
1135                    // Création d'un tableau avec la liste des champs de l'instruction
1136                    foreach($new_instruction->champs as $champ) {
1137                        $valNewInstr[$champ] = "";
1138                    }
1139                    // Définition des valeurs de la nouvelle instruction
1140                    $valNewInstr["evenement"] = $row['evenement_retour_signature'];
1141                    $valNewInstr["destinataire"] = $this->valF['destinataire'];
1142                    $valNewInstr["dossier"] = $this->valF['dossier'];
1143                    $valNewInstr["date_evenement"] = date("d/m/Y");
1144                    $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1145                }
1146                // Si la date de retour AR est éditée on vérifie si il existe un événement automatique
1147                if ($this->getVal('date_retour_rar') == "" AND
1148                    $this->valF['date_retour_rar'] != "" AND
1149                    $row['evenement_retour_ar'] != "" ) {
1150                    $new_instruction = new instruction("]", $db, $DEBUG);
1151                    // Création d'un tableau avec la liste des champs de l'instruction
1152                    foreach($new_instruction->champs as $champ) {
1153                        $valNewInstr[$champ] = "";
1154                    }
1155                    // Définition des valeurs de la nouvelle instruction
1156                    $valNewInstr["evenement"] = $row['evenement_retour_ar'];
1157                    $valNewInstr["destinataire"] = $this->valF['destinataire'];
1158                    $valNewInstr["dossier"] = $this->valF['dossier'];
1159                    $valNewInstr["date_evenement"] = date("d/m/Y");
1160                    $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1161                }
1162            }
1163    
1164            // Récupération des paramètres de l'action
1165            $sql = "SELECT * FROM ".DB_PREFIXE."action
1166            WHERE action='".$action."'";
1167            $res = $db->query($sql);
1168            $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1169            if (database::isError($res)) {
1170                die($res->getMessage());
1171            }
1172          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
1173              // application des regles sur le courrier + delai              // application des regles sur le courrier + delai
1174              if(preg_match("/datecourrier/",$row['regle_date_limite'])){              if(preg_match("/date_evenement/",$row['regle_date_limite'])){
1175                  $valF['date_limite']= $this->regle($row['regle_date_limite']);                  $valF['date_limite']= $this->regle($row['regle_date_limite']);
1176              }              }
1177              if(preg_match("/datecourrier/",$row['regle_date_complet'])){              if(preg_match("/date_evenement/",$row['regle_date_complet'])){
1178                  $valF['date_complet']= $this->regle($row['regle_date_complet']);                  $valF['date_complet']= $this->regle($row['regle_date_complet']);
1179              }              }
1180              if(preg_match("/datecourrier/",$row['regle_date_notification_delai'])){              if(preg_match("/date_evenement/",$row['regle_date_dernier_depot'])){
1181                    $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot']);
1182                }
1183                if(preg_match("/date_evenement/",$row['regle_date_notification_delai'])){
1184                  $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);                  $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);
1185              }              }
1186              if(preg_match("/datecourrier/",$row['regle_date_decision'])){              if(preg_match("/date_evenement/",$row['regle_date_decision'])){
1187                  $valF['date_decision']= $this->regle($row['regle_date_decision']);                  $valF['date_decision']= $this->regle($row['regle_date_decision']);
1188              }              }
1189              if(preg_match("/datecourrier/",$row['regle_date_rejet'])){              if(preg_match("/date_evenement/",$row['regle_date_rejet'])){
1190                  $valF['date_rejet']= $this->regle($row['regle_date_rejet']);                  $valF['date_rejet']= $this->regle($row['regle_date_rejet']);
1191              }              }
1192              if(preg_match("/datecourrier/",$row['regle_date_validite'])){              if(preg_match("/date_evenement/",$row['regle_date_validite'])){
1193                  $valF['date_validite']= $this->regle($row['regle_date_validite']);                  $valF['date_validite']= $this->regle($row['regle_date_validite']);
1194              }              }
1195              if(preg_match("/datecourrier/",$row['regle_date_chantier'])){              if(preg_match("/date_evenement/",$row['regle_date_chantier'])){
1196                  $valF['date_chantier']= $this->regle($row['regle_date_chantier']);                  $valF['date_chantier']= $this->regle($row['regle_date_chantier']);
1197              }              }
1198              if(preg_match("/datecourrier/",$row['regle_date_achevement'])){              if(preg_match("/date_evenement/",$row['regle_date_achevement'])){
1199                  $valF['date_achevement']= $this->regle($row['regle_date_achevement']);                  $valF['date_achevement']= $this->regle($row['regle_date_achevement']);
1200              }              }
1201              if(preg_match("/datecourrier/",$row['regle_date_conformite'])){              if(preg_match("/date_evenement/",$row['regle_date_conformite'])){
1202                  $valF['date_conformite']= $this->regle($row['regle_date_conformite']);                  $valF['date_conformite']= $this->regle($row['regle_date_conformite']);
1203              }              }
1204          } // while          }
1205          if($valF!=array()){          // Si des valeurs ont été calculées alors on met à jour l'enregistrement
1206              $cle= " dossier = '".$this->valF['dossier']."'";          if ($valF != "") {
1207              $res1= $db->autoExecute(DB_PREFIXE.'dossier',$valF,DB_AUTOQUERY_UPDATE,$cle);              // On met à jour le dossier
1208              if (database::isError($res1))              $cle = " dossier='".$this->valF['dossier']."'";
1209                $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1210                $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1211                if (database::isError($res1)) {
1212                  die($res->getMessage());                  die($res->getMessage());
1213              if ($DEBUG == 1)              }
1214                echo "La requête de mise à jour est effectuée.<br>";              // Affichage d'informations à l'utilisateur
1215              $this->msg=$this->msg."<br>"._('enregistrement')." ".              $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1216              $this->valF['dossier']." "._('table')." dossier [".          }
1217              $db->affectedRows()." "._('enregistrement').  
1218              " "._('mis_a_jour')."]" ;          /**
1219             * REFERENTIEL ARRETE
1220             */
1221            if ($this->f->getParameter('option_referentiel_arrete') != "") {
1222                if ($this->valF['date_retour_signature'] != $this->getVal('date_retour_signature')) {
1223                    $msgenque = new MessageEnqueuer();
1224                    $sqlArrete = "SELECT instruction.signataire_arrete as \"ws_DA_In_Signataire\",
1225                                        signataire_arrete.nom as \"ws_DA_In_Sign_Nom\",
1226                                        signataire_arrete.prenom as \"ws_DA_In_Sign_Prenom\",
1227                                        signataire_arrete.qualite as \"ws_DA_In_Sign_Qualite\",
1228                                        instruction.date_evenement as \"ws_DA_In_Dte_Redac\",
1229                                        '' as \"ws_DA_In_lieu_Redac\",
1230                                        instruction.dossier as \"ws_DA_In_N_Doss_DAS\",
1231                                        '' as \"ws_DA_In_Sigle\",
1232                                        instruction.etat as \"ws_DA_In_Decision\",
1233                                        dossier.date_depot as \"ws_DA_In_Dte_Depot_Dem\",
1234                                        dossier.terrain_numero as \"ws_DA_In_N_Voie\",
1235                                        '' as \"ws_DA_In_Type_Voie\",
1236                                        dossier.complement as \"ws_DA_In_Adresse1\",
1237                                        dossier.terrain_adresse_lieu_dit as \"ws_DA_In_Adresse2\",
1238                                        dossier.terrain_adresse_code_postal as \"ws_DA_In_CP\",
1239                                        dossier.terrain_adresse_localite as \"ws_DA_In_Ville\",
1240                                        dossier.terrain_references_cadastrales as \"ws_DA_In_Nb_Parcelle\",
1241                                        '' as \"ws_DA_In_Detail_Parcelle\",
1242                                        CONCAT(donnees_techniques.am_projet_desc,' ',donnees_techniques.co_projet_desc) as \"ws_DA_In_Nature_Trvx\",
1243                                        '' as \"ws_DA_In_Destination_Trvx\",
1244                                        dossier_autorisation_type_detaille.code as \"ws_DA_In_Type_Dos_Autoris\",
1245                                        COALESCE(particulier_nom,personne_morale_raison_sociale) as \"ws_DA_In_Nom_Petition\",
1246                                        COALESCE(particulier_prenom, personne_morale_denomination) as \"ws_DA_In_Prenom_Petition\",
1247                                        '' as \"ws_DA_In_Piece_GED\",
1248                                        instruction.date_retour_signature as \"ws_DA_In_Dte_Signature\"
1249                                FROM ".DB_PREFIXE."instruction
1250                                LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
1251                                    instruction.signataire_arrete = signataire_arrete.signataire_arrete
1252                                LEFT JOIN ".DB_PREFIXE."dossier ON
1253                                    instruction.dossier = dossier.dossier
1254                                LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur ON
1255                                    lien_dossier_demandeur.dossier = dossier.dossier
1256                                LEFT JOIN ".DB_PREFIXE."demandeur ON
1257                                    lien_dossier_demandeur.demandeur = demandeur.demandeur
1258                                LEFT JOIN ".DB_PREFIXE."dossier_instruction_type ON
1259                                    dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1260                                LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille ON
1261                                    dossier_instruction_type.dossier_autorisation_type_detaille =
1262                                        dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1263                                LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
1264                                        donnees_techniques.dossier_instruction = dossier.dossier
1265                                WHERE instruction.instruction = ".$this->valF['instruction'];
1266                    $resArrete = $this->db->query($sqlArrete);
1267                    $this->f->addToLog("triggerModifierApres(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
1268                    if ( database::isError($resArrete)){
1269                        die();
1270                    }
1271        
1272                    $rowArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
1273                    $msgenque->setArreteInfo($rowArrete);
1274                    $msgenque->enqueueMessage($msgenque::$ARRETE_ENVOI);                
1275                }
1276          }          }
1277    
1278            // Mise à jour des données du dossier d'autorisation
1279            require_once "../obj/dossier_autorisation.class.php";
1280            $da = new dossier_autorisation($this->getDossierAutorisationFromDossier($this->valF['dossier']), $this->db, DEBUG);
1281            $da->majDossierAutorisation();
1282      }      }
1283    
1284        /**
1285         * Méthode de récupération des métadonnées arrêtés dans la base de données,
1286         * les données sont stockés dans l'attribut $this->metadonneesArrete
1287         */
1288        function getArreteMetadata() {
1289            $sqlArrete = "SELECT    signataire_arrete.nom as \"nomsignataire\",
1290                                    signataire_arrete.qualite as \"qualitesignataire\",
1291                                    instruction.date_evenement as \"datesignaturearrete\",
1292                                    instruction.etat as \"decisionarrete\",
1293                                    dossier.terrain_adresse_voie_numero as \"ap_numrue\",
1294                                    dossier.complement as \"ap_nomdelavoie\",
1295                                    dossier.terrain_adresse_code_postal as \"ap_codepostal\",
1296                                    dossier.terrain_adresse_localite as \"ap_ville\"
1297                                FROM ".DB_PREFIXE."instruction
1298                                LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
1299                                    instruction.signataire_arrete = signataire_arrete.signataire_arrete
1300                                LEFT JOIN ".DB_PREFIXE."dossier ON
1301                                    instruction.dossier = dossier.dossier
1302                                LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
1303                                        donnees_techniques.dossier_instruction = dossier.dossier
1304                                WHERE instruction.instruction = ".$this->valF['instruction'];
1305            $resArrete = $this->db->query($sqlArrete);
1306            $this->f->addToLog("triggerModifierApres(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
1307            if ( database::isError($resArrete)){
1308                die();
1309            }
1310    
1311            $this->metadonneesArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
1312        }
1313    
1314        // {{{
1315        // Méthodes de récupération des métadonnées arrêté
1316        /**
1317         * @return string Retourne le numéro d'arrêté
1318         */
1319        function getNumArrete() {
1320            return $this->valF['numero_arrete'];
1321        }
1322        /**
1323         * @return string ads
1324         */
1325        function getSpecialiteArrete() {
1326            return "ADS";
1327        }
1328        /**
1329         * @return string decision
1330         */
1331        function getDecisionArrete() {
1332            if (empty($this->metadonneesArrete)) {
1333                $this->getArreteMetadata();
1334            }
1335            return $this->metadonneesArrete["decisionarrete"];
1336        }
1337        /**
1338         * @return chaîne vide
1339         */
1340        function getChketatReglementaire() {
1341            return "";
1342        }
1343        /**
1344         * @return boolean de notification au pétitionnaire
1345         */
1346        function getChkNotification() {
1347            if( isset($this->valF["date_retour_rar"]) ) {
1348                return true;
1349            } else {
1350                return false;
1351            }
1352        }
1353        /**
1354         * @return date de notification au pétitionnaire
1355         */
1356        function getDateNotification() {
1357            return date("d/m/Y", strtotime($this->valF["date_retour_rar"]));
1358        }
1359        /**
1360         * @return chaîne vide
1361         */
1362        function getChkCreationdroit() {
1363            return "";
1364        }
1365        /**
1366         * @return chaîne vide
1367         */
1368        function getChkPublication() {
1369            return "";
1370        }
1371        /**
1372         * @return chaîne vide
1373         */
1374        function getDatePublication() {
1375            return "";
1376        }
1377        /**
1378         * @return boolean check si le document est passé au contrôle de légalité
1379         */
1380        function getChkControleLegalite() {
1381            if( isset($this->valF["date_retour_controle_legalite"]) ) {
1382                return true;
1383            } else {
1384                return false;
1385            }
1386        }
1387        /**
1388         * @return date de signature de l'arrêté
1389         */
1390        function getDateSignatureArrete() {
1391            return date("d/m/Y", strtotime($this->valF['date_retour_signature']));
1392        }
1393        /**
1394         * @return string nom du signataire
1395         */
1396        function getNomSignataire() {
1397            if (empty($this->metadonneesArrete)) {
1398                $this->getArreteMetadata();
1399            }
1400            return $this->metadonneesArrete["nomsignataire"];
1401        }
1402        /**
1403         * @return string qualité du signataire
1404         */
1405        function getQualiteSignataire() {
1406            if (empty($this->metadonneesArrete)) {
1407                $this->getArreteMetadata();
1408            }
1409            return $this->metadonneesArrete["qualitesignataire"];
1410        }
1411        /**
1412         * @return string chaîne vide
1413         */
1414        function getChkDelegation() {
1415            return "";
1416        }
1417        /**
1418         * @return string numéro du terrain
1419         */
1420        function getAp_numRue() {
1421            if (empty($this->metadonneesArrete)) {
1422                $this->getArreteMetadata();
1423            }
1424            return $this->metadonneesArrete["ap_numrue"];
1425        }
1426        /**
1427         * @return string nom de la rue du terrain
1428         */
1429        function getAp_nomDeLaVoie() {
1430            if (empty($this->metadonneesArrete)) {
1431                $this->getArreteMetadata();
1432            }
1433            return $this->metadonneesArrete["ap_nomdelavoie"];
1434        }
1435        /**
1436         * @return string code postal du terrain
1437         */
1438        function getAp_codePostal() {
1439            if (empty($this->metadonneesArrete)) {
1440                $this->getArreteMetadata();
1441            }
1442            return $this->metadonneesArrete["ap_codepostal"];
1443        }
1444        /**
1445         * @return string ville du terrain
1446         */
1447        function getAp_ville() {
1448            if (empty($this->metadonneesArrete)) {
1449                $this->getArreteMetadata();
1450            }
1451            return $this->metadonneesArrete["ap_ville"];
1452        }
1453    
1454        // Fin des méthodes de récupération des métadonnées
1455        // }}}
1456    
       
     // trigger before delete  
1457      function triggersupprimer($id,&$db,$val,$DEBUG) {      function triggersupprimer($id,&$db,$val,$DEBUG) {
1458          // archive en instruction (si suppression) [archive if delete instruction]          /**
1459          $valF['delai']=$val['archive_delai'];           * L'objectif ici est de repositionner les valeurs récupérées en
1460          $valF['accord_tacite']=$val['archive_accord_tacite'];           * archive dans le dossier d'instruction avant de supprimer l'événement
1461          $valF['etat']=$val['archive_etat'];           * d'instruction
1462          if($val['archive_avis']=='')           */
1463              $valF['avis']= null;          // Mise à jour des 4 valeurs modifiées par l'action
1464          else          $valF['delai'] = $val['archive_delai'];
1465              $valF['avis']=$val['archive_avis'];          $valF['accord_tacite'] = $val['archive_accord_tacite'];
1466          // if= compatibilite pgsql          $valF['etat'] = $val['archive_etat'];
1467          if($val['archive_date_complet']!='')          if ($val['archive_avis'] != '') {
1468              $valF['date_complet']=$val['archive_date_complet'];              $valF['avis_decision'] = $val['archive_avis'];
1469          if($val['archive_date_rejet']!='')          } else {
1470              $valF['date_rejet']= $val['archive_date_rejet'];              $valF['avis_decision'] = NULL;
1471          if($val['archive_date_limite']!='')          }
1472              $valF['date_limite']= $val['archive_date_limite'];          // Mise à jour des 10 dates avec la valeur présente dans le formulaire
1473          if($val['archive_date_notification_delai']!='')          // de suppression. Si la valeur de la date est vide alors on fixe
1474              $valF['date_notification_delai']= $val['archive_date_notification_delai'];          // à la valeur NULL
1475          if($val['archive_date_decision']!='')          //
1476              $valF['date_decision']= $val['archive_date_decision'];          if ($val['archive_date_complet'] != '') {
1477          if($val['archive_date_validite']!='')              $valF['date_complet'] = $val['archive_date_complet'];
1478              $valF['date_validite']= $val['archive_date_validite'];          } else {
1479          if($val['archive_date_achevement']!='')              $valF['date_complet'] = NULL;
1480              $valF['date_achevement']= $val['archive_date_achevement'];          }
1481          if($val['archive_date_chantier']!='')          if ($val['archive_date_dernier_depot'] != '') {
1482              $valF['date_chantier']= $val['archive_date_chantier'];              $valF['date_dernier_depot'] = $val['archive_date_dernier_depot'];
1483          if($val['archive_date_conformite']!='')          } else {
1484              $valF['date_conformite']= $val['archive_date_conformite'];              $valF['date_dernier_depot'] = NULL;
1485                    }
1486          $cle= " dossier = '".$val['dossier']."'";          if ($val['archive_date_rejet'] != '') {
1487          $res= $db->autoExecute(DB_PREFIXE.'dossier',$valF,DB_AUTOQUERY_UPDATE,$cle);              $valF['date_rejet'] = $val['archive_date_rejet'];
1488          if (database::isError($res))          } else {
1489                $valF['date_rejet'] = NULL;
1490            }
1491            if ($val['archive_date_limite'] != '') {
1492                $valF['date_limite'] = $val['archive_date_limite'];
1493            } else {
1494                $valF['date_limite'] = NULL;
1495            }
1496            if ($val['archive_date_notification_delai'] != '') {
1497                $valF['date_notification_delai'] = $val['archive_date_notification_delai'];
1498            } else {
1499                $valF['date_notification_delai'] = NULL;
1500            }
1501            if ($val['archive_date_decision'] != '') {
1502                $valF['date_decision'] = $val['archive_date_decision'];
1503            } else {
1504                $valF['date_decision'] = NULL;
1505            }
1506            if ($val['archive_date_validite'] != '') {
1507                $valF['date_validite'] = $val['archive_date_validite'];
1508            } else {
1509                $valF['date_validite'] = NULL;
1510            }
1511            if ($val['archive_date_achevement'] != '') {
1512                $valF['date_achevement'] = $val['archive_date_achevement'];
1513            } else {
1514                $valF['date_achevement'] = NULL;
1515            }
1516            if ($val['archive_date_chantier'] != '') {
1517                $valF['date_chantier'] = $val['archive_date_chantier'];
1518            } else {
1519                $valF['date_chantier'] = NULL;
1520            }
1521            if ($val['archive_date_conformite'] != '') {
1522                $valF['date_conformite'] = $val['archive_date_conformite'];
1523            } else {
1524                $valF['date_conformite'] = NULL;
1525            }
1526            if ($val['archive_incompletude'] != '') {
1527                $valF['incompletude'] = $val['archive_incompletude'];
1528            } else {
1529                $valF['incompletude'] = NULL;
1530            }
1531            if ($val['archive_evenement_suivant_tacite'] != '') {
1532                $valF['evenement_suivant_tacite'] = $val['archive_evenement_suivant_tacite'];
1533            } else {
1534                $valF['evenement_suivant_tacite'] = NULL;
1535            }
1536            if ($val['archive_evenement_suivant_tacite_incompletude'] != '') {
1537                $valF['evenement_suivant_tacite_incompletude'] = $val['archive_evenement_suivant_tacite_incompletude'];
1538            } else {
1539                $valF['evenement_suivant_tacite_incompletude'] = NULL;
1540            }
1541            if ($val['archive_etat_pendant_incompletude'] != '') {
1542                $valF['etat_pendant_incompletude'] = $val['archive_etat_pendant_incompletude'];
1543            } else {
1544                $valF['etat_pendant_incompletude'] = NULL;
1545            }
1546            if ($val['archive_date_limite_incompletude'] != '') {
1547                $valF['date_limite_incompletude'] = $val['archive_date_limite_incompletude'];
1548            } else {
1549                $valF['date_limite_incompletude'] = NULL;
1550            }
1551            if ($val['archive_delai_incompletude'] != '') {
1552                $valF['delai_incompletude'] = $val['archive_delai_incompletude'];
1553            } else {
1554                $valF['delai_incompletude'] = NULL;
1555            }
1556            // On met à jour le dossier
1557            $cle = " dossier='".$val['dossier']."'";
1558            $res = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1559            $this->addToLog("triggersupprimer(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1560            if (database::isError($res)) {
1561              die($res->getMessage());              die($res->getMessage());
         else{  
             if ($DEBUG == 1)  
                 echo "La requête de mise à jour est effectuée.<br>";  
1562          }          }
1563            // Affichage d'informations à l'utilisateur
1564            $this->addToMessage(_("Suppression de l'instruction")." [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1565    
1566            // Mise à jour de la demande si un récépissé d'instruction correspond à l'instruction à supprimer
1567        }
1568    
1569        function triggersupprimerapres($id,&$db,$val,$DEBUG) {
1570    
1571            // Mise à jour des données du dossier d'autorisation
1572            require_once "../obj/dossier_autorisation.class.php";
1573            $da = new dossier_autorisation($this->getDossierAutorisationFromDossier($val["dossier"]), $this->db, DEBUG);
1574            $da->majDossierAutorisation();
1575      }      }
1576    
1577      // =============================================      // =============================================
1578      // calcul de date avec ajout de mois (delais)      // calcul de date avec ajout de mois (delais)
1579      // [add months (delay) and calculation final date]      // [add months (delay) and calculation final date]
# Line 653  class instruction extends instruction_ge Line 1625  class instruction extends instruction_ge
1625      return $annee."-".$mois."-".$jour ;      return $annee."-".$mois."-".$jour ;
1626      }      }
1627    
1628        // Vérifie la restriction sur l'événement
1629        function verifier($val = array(), &$db, $DEBUG){
1630            parent::verifier($val, $db, $DEBUG);
1631    
1632            if ( isset($val['evenement']) && is_numeric($val['evenement'])){
1633            //Récupère la restriction
1634                $sql= "SELECT
1635                          restriction
1636                      FROM
1637                          ".DB_PREFIXE."evenement
1638                      WHERE
1639                          evenement =".$val['evenement'];
1640        
1641                $res = $db->query($sql);
1642                $this->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
1643                if (database::isError($res)) {
1644                    die($res->getMessage());
1645                }        
1646                $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
1647        
1648                //Test qu'une restriction est présente
1649                if ( isset($row['restriction']) && $row['restriction'] != "" ){
1650                    
1651                    //Test si la restriction est valide
1652                    if ( !$this->restrictionIsValid($row['restriction']) ){
1653                        
1654                        $this->correct=false;
1655                        $this->addToMessage(_("Restriction non valide"));
1656                    }
1657                    else {
1658                        
1659                        $this->correct = true;
1660                    }
1661                }
1662            }
1663    
1664            $this->updateDate("date_envoi_signature");
1665            $this->updateDate("date_retour_signature");
1666            $this->updateDate("date_envoi_rar");
1667            $this->updateDate("date_retour_rar");
1668            $this->updateDate("date_envoi_controle_legalite");
1669            $this->updateDate("date_retour_controle_legalite");
1670        }
1671    
1672        /**
1673         * Méthode permettant de récupérer toutes les valeurs de l'événement
1674         * sélectionné après validation du formulaire d'instruction
1675         *
1676         * @return array() veleurs de l'événement lié
1677         */
1678    
1679        private function getValEvenement() {
1680            if(!empty($this->valEvenement)) {
1681                return $this->valEvenement;
1682            } else {
1683                $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1684                    WHERE evenement=".$this->valF['evenement'];
1685                $res = $this->db->query($sql);
1686                $this->addToLog("getValEvenement(): db->query(\"".$sql."\");", VERBOSE_MODE);
1687                if (database::isError($res)) {
1688                    die($res->getMessage());
1689                }
1690                $this->valEvenement = $res->fetchRow(DB_FETCHMODE_ASSOC);
1691                return $this->valEvenement;
1692            }
1693        }
1694    
1695        /**
1696         * Méthode permettant de savoir si le dossier lié à l'instruction à le flag
1697         * incompletude à true après validation du formulaire d'instruction
1698         *
1699         * @return boolean
1700         */
1701        private function dossierIncomplet() {
1702            $sql = "SELECT incompletude FROM ".DB_PREFIXE."dossier
1703                    WHERE dossier='".$this->valF['dossier']."'";
1704            $incompletude = $this->db->getOne($sql);
1705            $this->addToLog("dossierIncomplet(): db->query(\"".$sql."\");", VERBOSE_MODE);
1706            if (database::isError($incompletude)) {
1707                die($incompletude->getMessage());
1708            }
1709            if ($incompletude == 't') {
1710                return true;
1711            } else {
1712                return false;
1713            }
1714        }
1715        
1716        /**
1717         * Finalisation des documents.
1718         * @param  string $champ    champ du fichier à finaliser
1719         * @param  booleen $status  permet de définir si on finalise ou définalise
1720         * @param  string $sousform permet de savoir si se trouve dans un sousformulaire (passé au javascript)
1721         */
1722        function finaliser( $champ = '', $status, $sousform, $retourformulaire){
1723    
1724            //Si on finalise le document
1725            if ( $status == 1 ){
1726                
1727                //Génération du PDF
1728                $_GET['output'] = "string";
1729                $f = $this->f;
1730                include '../app/pdf_instruction.php';
1731                
1732                //Métadonnées du document
1733                $metadata = array(
1734                    'filename' => 'instruction_'.$idx.'.pdf',
1735                    'mimetype' => 'application/pdf',
1736                    'size' => strlen($pdf_output)
1737                );
1738    
1739                // Récupération des métadonnées calculées après validation
1740                $spe_metadata = $this->getMetadata("om_fichier_instruction");
1741    
1742                $metadata = array_merge($metadata, $spe_metadata);
1743                //Si le document a déjà été finalisé
1744                //on met à jour le document mais pas son uid
1745                if ( $this->getVal("om_fichier_instruction") != '' ){
1746                    $uid = $this->f->storage->update(
1747                        $this->getVal("om_fichier_instruction"), $pdf_output, $metadata);
1748                }
1749                //Sinon, on joute le document et on récupère son uid
1750                else {
1751                    //Stockage du PDF
1752                    $uid = $this->f->storage->create($pdf_output, $metadata);
1753                }
1754            }
1755            else {
1756                //Récupération de l'uid du document finalisé
1757                $uid = $this->getVal("om_fichier_instruction");
1758                
1759                //On dé-finalise avant de finaliser
1760                if ( $uid == '' ){
1761                    return -1;
1762                }
1763            }
1764    
1765            //Mise à jour des données
1766            if ( $uid != '' ){
1767                // Logger
1768                $this->addToLog("finaliser() - begin", EXTRA_VERBOSE_MODE);
1769                // Recuperation de la valeur de la cle primaire de l'objet
1770                if($this->getVal($this->clePrimaire) != '')
1771                    $id = $this->getVal($this->clePrimaire);
1772                else
1773                    $id=$this->id;
1774                
1775                $actions = array();
1776                //Tableau contenant le lien vers le PDF et lien du portlet pour la mise
1777                //à jour de l'interface
1778                if ( $status == 0 ){
1779                    $lien = '../app/pdf_instruction.php?idx='.$id;
1780                    
1781                    //Ajout des actions
1782                    //Si l'utilisateur a le droit de modifier l'objet
1783                    if ( $this->f->isAccredited('instruction') ||
1784                        $this->f->isAccredited('instruction_modifier') ){
1785                            
1786                        $actions["modifier"] = ($sousform!='')?
1787                            '<li><a href="#" onclick="ajaxIt(\'instruction\',
1788                            \'../scr/sousform.php?obj=instruction&amp;action=1&amp;idx='.
1789                            $this->getVal($this->clePrimaire).
1790                            '&amp;premiersf=0&amp;trisf=&amp;retourformulaire='.$retourformulaire.'&amp;idxformulaire='.
1791                            $this->getVal("dossier").
1792                            '&amp;retour=form\');">
1793                            <span class="om-prev-icon om-icon-16 edit-16" title="'.
1794                            _('Modifier').'">'.
1795                            _('Modifier').
1796                            '</span></a></li>':
1797                            '<li>
1798                            <a href="form.php?obj=instruction&amp;action=1'.'&amp;idx='.
1799                            $this->getVal($this->clePrimaire).
1800                            '&amp;premier=&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=form">
1801                            <span class="om-prev-icon om-icon-16 edit-16" title="'.
1802                            _('Modifier').'">'.
1803                            _('Modifier').
1804                            '</span></a></li>';
1805                    }
1806                    //Si l'utilisateur a le droit de supprimer l'objet
1807                    if ( $this->f->isAccredited('instruction') ||
1808                        $this->f->isAccredited('instruction_supprimer') ){
1809                            
1810                        $actions["supprimer"] = ($sousform!='')?
1811                            '<li><a href="#" onclick="ajaxIt(\'instruction\',
1812                            \'../scr/sousform.php?obj=instruction&amp;action=2&amp;idx='.
1813                            $this->getVal($this->clePrimaire).
1814                            '&amp;premiersf=0&amp;trisf=&amp;retourformulaire='.$retourformulaire.'&amp;idxformulaire='.
1815                            $this->getVal("dossier").
1816                            '&amp;retour=form\');">
1817                            <span class="om-prev-icon om-icon-16 delete-16" title="'.
1818                            _('Supprimer').'">'.
1819                            _('Supprimer').
1820                            '</span></a></li>':
1821                            '<li>
1822                            <a href="form.php?obj=instruction&amp;action=1'.'&amp;idx='.
1823                            $this->getVal($this->clePrimaire).
1824                            '&amp;premier=&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=form">
1825                            <span class="om-prev-icon om-icon-16 delete-16" title="'.
1826                            _('Supprimer').'">'.
1827                            _('Supprimer').
1828                            '</span></a></li>';
1829                    }
1830                }
1831                else {
1832                    $lien = '../spg/file.php?obj=instruction&'.
1833                        'champ=om_fichier_instruction&id='.$id;
1834                }
1835    
1836               $retour = array(
1837                    "portlet"=> "<a href=\"#\" onclick=\"finalizeDocument(".
1838                        $id.", 'instruction', '".$sousform."', ".(($status==0)?1:0).")\">
1839                        <span class=\"om-prev-icon om-icon-16 om-icon-fix "
1840                        .(($status==1)?"de":"")."finalise\" title=\"".
1841                        (($status==1)?_("Reprendre la redaction du document"):_("Finaliser le document"))."\">".
1842                        (($status==1)?_("Reprendre la redaction du document"):_("Finaliser le document"))."</span>
1843                        </a>",
1844                    "pdf" => $lien,
1845                    "actions" => $actions
1846                );
1847    
1848                foreach ( $this->champs as $key=>$value )
1849                    $val[$value] = $this->val[$key];
1850                $val['date_evenement']=$this->dateDBToForm($val['date_evenement']);
1851                $val['archive_date_complet']=$this->dateDBToForm($val['archive_date_complet']);
1852                $val['archive_date_rejet']=$this->dateDBToForm($val['archive_date_rejet']);
1853                $val['archive_date_limite']=$this->dateDBToForm($val['archive_date_limite']);
1854                $val['archive_date_notification_delai']=$this->dateDBToForm($val['archive_date_notification_delai']);
1855                $val['archive_date_decision']=$this->dateDBToForm($val['archive_date_decision']);
1856                $val['archive_date_validite']=$this->dateDBToForm($val['archive_date_validite']);
1857                $val['archive_date_achevement']=$this->dateDBToForm($val['archive_date_achevement']);
1858                $val['archive_date_chantier']=$this->dateDBToForm($val['archive_date_chantier']);
1859                $val['archive_date_conformite']=$this->dateDBToForm($val['archive_date_conformite']);
1860                $val['archive_date_dernier_depot']=$this->dateDBToForm($val['archive_date_dernier_depot']);
1861                $val['archive_date_limite_incompletude']=$this->dateDBToForm($val['archive_date_limite_incompletude']);
1862                $val['date_finalisation_courrier']=$this->dateDBToForm($val['date_finalisation_courrier']);
1863                $val['date_envoi_signature']=$this->dateDBToForm($val['date_envoi_signature']);
1864                $val['date_retour_signature']=$this->dateDBToForm($val['date_retour_signature']);
1865                $val['date_envoi_rar']=$this->dateDBToForm($val['date_envoi_rar']);
1866                $val['date_retour_rar']=$this->dateDBToForm($val['date_retour_rar']);
1867                $val['date_envoi_controle_legalite']=$this->dateDBToForm($val['date_envoi_controle_legalite']);
1868                $val['date_retour_controle_legalite']=$this->dateDBToForm($val['date_retour_controle_legalite']);
1869                
1870                $this->setvalF($val);
1871    
1872                // Verification de la validite des donnees
1873                $this->verifier($this->val, $this->db, DEBUG);
1874                // Verification du verrou
1875                $this->testverrou();
1876                // Si les verifications precedentes sont correctes, on procede a
1877                // la modification, sinon on ne fait rien et on retourne une erreur
1878                if ($this->correct) {
1879                    // Execution du trigger 'before' specifique au MODE 'update'
1880                    $this->triggermodifier( $id, $this->db, $this->val, DEBUG);
1881                    $valF = array(
1882                            "om_final_instruction"=> ($status==1)?TRUE:FALSE,
1883                            "om_fichier_instruction"=>$uid,
1884                            "date_finalisation_courrier"=>date('Y-m-d'));
1885                    // Execution de la requête de modification des donnees de l'attribut
1886                    // valF de l'objet dans l'attribut table de l'objet
1887                    $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF,
1888                        DB_AUTOQUERY_UPDATE, $this->getCle($id));
1889                     $this->addToLog("finaliser() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id)."\")", VERBOSE_MODE);
1890                    // Si une erreur survient
1891                    if (database::isError($res)) {
1892                        // Appel de la methode de recuperation des erreurs
1893                        $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
1894                    } else {
1895                        // Log
1896                        $this->addToLog(_("Requete executee"), VERBOSE_MODE);
1897                        // Log
1898                        $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
1899                        $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
1900                        $message .= "[&nbsp;".$this->db->affectedRows()."&nbsp;";
1901                        $message .= _("enregistrement(s) mis a jour")."&nbsp;]";
1902                        $this->addToLog($message, VERBOSE_MODE);
1903                        // Mise en place du verrou pour ne pas finaliser plusieurs fois
1904                        // le meme document
1905                        $this->verrouille();
1906                        // Execution du trigger 'after' specifique au MODE 'update'
1907                        //$this->triggermodifierapres($id, $this->db, $val, DEBUG);
1908    
1909                        return $retour;
1910                    }
1911                } else {
1912                    // Message d'echec (saut d'une ligne supplementaire avant le
1913                    // message pour qu'il soit mis en evidence)
1914                    $this->addToLog("Finalisation non enregistree");
1915                    return -1;
1916                }
1917            }
1918            // Si le document n'a pas été stocké
1919            else{
1920                return -1;
1921            }
1922        }
1923    
1924        /**
1925         * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
1926         * @return string numéro de dossier d'instruction
1927         */
1928        protected function getDossier() {
1929            if(empty($this->specificMetadata)) {
1930                $this->getSpecificMetadata();
1931            }
1932            return $this->specificMetadata->dossier;
1933        }
1934        /**
1935         * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
1936         * @return string numéro de dossier d'autorisation
1937         */
1938        protected function getDossierAutorisation() {
1939            if(empty($this->specificMetadata)) {
1940                $this->getSpecificMetadata();
1941            }
1942            return $this->specificMetadata->dossier_autorisation;
1943        }
1944        /**
1945         * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
1946         * @return date de la demande initiale
1947         */
1948        protected function getDateDemandeInitiale() {
1949            if(empty($this->specificMetadata)) {
1950                $this->getSpecificMetadata();
1951            }
1952            return $this->specificMetadata->date_demande_initiale;
1953        }
1954        /**
1955         * Récupération du type de dossier d'instruction à ajouter aux métadonnées
1956         * @return string type du dossier d'instruction
1957         */
1958        protected function getDossierInstructionType() {
1959            if(empty($this->specificMetadata)) {
1960                $this->getSpecificMetadata();
1961            }
1962            return $this->specificMetadata->dossier_instruction_type;
1963        }
1964        /**
1965         * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
1966         * @return string avis
1967         */
1968        protected function getStatut() {
1969            if(empty($this->specificMetadata)) {
1970                $this->getSpecificMetadata();
1971            }
1972            return $this->specificMetadata->statut;
1973        }
1974        /**
1975         * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
1976         * @return string type du dossier d'autorisation
1977         */
1978        protected function getDossierAutorisationType() {
1979            if(empty($this->specificMetadata)) {
1980                $this->getSpecificMetadata();
1981            }
1982            return $this->specificMetadata->dossier_autorisation_type;
1983        }
1984        /**
1985         * Récupération de la date d'ajout de document à ajouter aux métadonnées
1986         * @return date de l'évènement
1987         */
1988        protected function getDateEvenement() {
1989            return date("d/m/Y");
1990        }
1991        /**
1992         * Récupération du groupe d'instruction à ajouter aux métadonnées
1993         * @return string Groupe d'instruction
1994         */
1995        protected function getGroupeInstruction() {
1996            if(empty($this->specificMetadata)) {
1997                $this->getSpecificMetadata();
1998            }
1999            return $this->specificMetadata->groupe_instruction;
2000        }
2001        /**
2002         * Récupération du libellé du type du document à ajouter aux métadonnées
2003         * @return string Groupe d'instruction
2004         */
2005        protected function getEvenementLibelle() {
2006    
2007            // Récupère le champ événement
2008            if (isset($this->valF["evenement"]) AND $this->valF["evenement"] != "") {
2009                $evenement = $this->valF["evenement"];
2010            } else {
2011                $evenement = $this->getVal("evenement");
2012            }
2013    
2014            // Requête sql
2015            $sql = "SELECT libelle FROM ".DB_PREFIXE."evenement
2016                    WHERE evenement=".$evenement;
2017            $evenement_libelle = $this->db->getOne($sql);
2018            $this->addToLog("getEvenementLibelle(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2019            if (database::isError($evenement_libelle)) {
2020                die();
2021            }
2022    
2023            // Retourne le libelle de l'événement
2024            return $evenement_libelle;
2025        }
2026    
2027        /**
2028         * Cette méthode permet de stocker en attribut toutes les métadonnées
2029         * nécessaire à l'ajout d'un document.
2030         */
2031        public function getSpecificMetadata() {
2032            if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
2033                $dossier = $this->valF["dossier"];
2034            } else {
2035                $dossier = $this->getVal("dossier");
2036            }
2037            //Requête pour récupérer les informations essentiels sur le dossier d'instruction
2038            $sql = "SELECT dossier.dossier as dossier,
2039                            dossier_autorisation.dossier_autorisation as dossier_autorisation,
2040                            to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
2041                            dossier_instruction_type.code as dossier_instruction_type,
2042                            etat_dossier_autorisation.libelle as statut,
2043                            dossier_autorisation_type.code as dossier_autorisation_type,
2044                            groupe.code as groupe_instruction
2045                    FROM ".DB_PREFIXE."dossier
2046                        LEFT JOIN ".DB_PREFIXE."dossier_instruction_type  
2047                            ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2048                        LEFT JOIN ".DB_PREFIXE."dossier_autorisation
2049                            ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
2050                        LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
2051                            ON  dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
2052                        LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
2053                            ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2054                        LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
2055                            ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
2056                        LEFT JOIN ".DB_PREFIXE."groupe
2057                            ON dossier_autorisation_type.groupe = groupe.groupe
2058                    WHERE dossier.dossier = '".$dossier."'";
2059            $res = $this->db->query($sql);
2060            $this->f->addToLog("obj/document_numerise.class.php : db->query(".$sql.")", VERBOSE_MODE);
2061            if ( database::isError($res)){
2062                die();
2063            }
2064            
2065            //Le résultat est récupéré dans un objet
2066            $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
2067    
2068            //Si il y a un résultat
2069            if ($row !== null) {
2070    
2071                //Alors on créé l'objet dossier_instruction
2072                $this->specificMetadata = $row;
2073    
2074            }
2075        }
2076        
2077        /**
2078         * Retourne le statut du dossier d'instruction
2079         * @param string $idx Identifiant du dossier d'instruction
2080         * @return string Le statut du dossier d'instruction
2081         */
2082        function getStatutDossier($idx){
2083            
2084            $statut = '';
2085            
2086            //Si l'identifiant du dossier d'instruction fourni est correct
2087            if ( $idx != '' ){
2088                
2089                //On récupère le statut de l'état du dossier à partir de l'identifiant du
2090                //dossier
2091                $sql = "SELECT etat.statut
2092                    FROM ".DB_PREFIXE."dossier
2093                    LEFT JOIN
2094                        ".DB_PREFIXE."etat
2095                        ON
2096                            dossier.etat = etat.etat
2097                    WHERE dossier ='".$idx."'";
2098                $statut = $this->db->getOne($sql);
2099                $this->f->addToLog("getStatutDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
2100                if ( database::isError($statut)){
2101                    die();
2102                }
2103            }
2104            return $statut;
2105        }
2106  }// fin classe  }// fin classe
2107  ?>  ?>

Legend:
Removed from v.460  
changed lines
  Added in v.2002

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26