/[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 1439 by nhaye, Fri Mar 15 14:45:21 2013 UTC revision 3050 by nhaye, Wed May 28 15:17:03 2014 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 mois_date : 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  require_once("../services/outgoing/messageenqueuer.php");   */
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        var $restriction_valid = null;
37        // Tableau contenant une partie des métadonnées arrêtés
38        var $metadonneesArrete;
39    
40        var $metadata = array(
41            "om_fichier_instruction" => array(
42                "dossier" => "getDossier",
43                "dossier_version" => "getDossierVersion",
44                "numDemandeAutor" => "getNumDemandeAutor",
45                "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
46                "typeInstruction" => "getTypeInstruction",
47                "statutAutorisation" => "getStatutAutorisation",
48                "typeAutorisation" => "getTypeAutorisation",
49                "dateEvenementDocument" => "getDateEvenementDocument",
50                "groupeInstruction" => 'getGroupeInstruction',
51                "title" => 'getTitle',
52            ),
53            "arrete" => array(
54                "numArrete" => "getNumArrete",
55                "ReglementaireArrete" => "getReglementaireArrete",
56                "NotificationArrete" => "getNotificationArrete",
57                "dateNotificationArrete" => "getDateNotificationArrete",
58                "controleLegalite" => "getControleLegalite",
59                "dateSignature" => "getDateSignature",
60                "nomSignataire" => "getNomSignataire",
61                "qualiteSignataire" => "getQualiteSignataire",
62                "ap_numRue" => "getAp_numRue",
63                "ap_nomDeLaVoie" => "getAp_nomDeLaVoie",
64                "ap_codePostal" => "getAp_codePostal",
65                "ap_ville" => "getAp_ville",
66                "activite" => "getActivite",
67                "dateControleLegalite" => "getDateControleLegalite",
68            ),
69        );
70    
71    
72      function instruction($id,&$db,$debug) {      function __construct($id, &$db, $debug) {
73          $this->constructeur($id,$db,$debug);          $this->constructeur($id, $db, $debug);
74      }// fin constructeur      }
75    
76      // {{{ Gestion de la confidentialité des données spécifiques      // {{{ Gestion de la confidentialité des données spécifiques
77    
# Line 38  class instruction extends instruction_ge Line 81  class instruction extends instruction_ge
81      function checkAccessibility() {      function checkAccessibility() {
82          //          //
83          parent::checkAccessibility();          parent::checkAccessibility();
84          // Si l'utilisateur est un intructeur qui en correspond pas à la          // Si l'utilisateur est un intructeur qui ne correspond pas à la
85          // division du dossier          // division du dossier
86          if ($this->f->isUserInstructeur()          if ($this->f->isUserInstructeur()
87              && isset($this->f->om_utilisateur["division"])              && isset($this->f->om_utilisateur["division"])
88              && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {              && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
89              //              //
90              $this->actions_sup = array();              //On cache les liens d'action
91              $this->setParameter("actions", array());              $this->parameters["actions"]["modifier"] = NULL;
92                $this->parameters["actions"]["supprimer"] = NULL;
93                $this->actions_sup["finalisation"] = NULL;
94          }          }
95          // Si une action 'lu' est présente et que le champ lu est à true          // Si une action 'lu' est présente et que le champ lu est à true
96          // on supprime l'action          // on supprime l'action
# Line 54  class instruction extends instruction_ge Line 99  class instruction extends instruction_ge
99              && $this->val[array_search("lu", $this->champs)]== "t") {              && $this->val[array_search("lu", $this->champs)]== "t") {
100              unset($this->actions_sup["lu"]);              unset($this->actions_sup["lu"]);
101          }          }
102    
103            //Si pas de lettretype associée
104            if($this->getVal("lettretype") == "") {
105                // Suppression des actions sur fichier dans le portlet actions
106                $this->actions_sup["pdfetat"] = NULL;
107                $this->actions_sup["finalisation"] = NULL;
108                $this->actions_sup["definalisation"] = NULL;
109            }
110                
111            //Si le document est déjà finalisé, on affiche uniquement le lien de
112            //dé-finalisation
113            $om_final_instruction = $this->getVal("om_final_instruction");
114            if ( isset($this->actions_sup["finalisation"]) &&
115                $om_final_instruction== "t" ){
116                    
117                //On cache les liens d'action
118                $this->parameters["actions"]["modifier"] = NULL;
119                $this->parameters["actions"]["supprimer"] = NULL;
120                //On cache le lien de finalisation et on affiche le bon lien pour l'édition
121                $this->actions_sup["finalisation"] = NULL;
122                $this->actions_sup["pdfetat"]["lien"] = "../spg/file.php?id=";
123                $this->actions_sup["pdfetat"]["id"] =
124                    "&amp;obj=instruction&amp;champ=om_fichier_instruction";
125            }
126            //Si le document n'est pas finalisé, on affiche uniquement le lien de
127            //finalisation
128            if ( isset($this->actions_sup["definalisation"]) &&
129                $om_final_instruction!= "t" ){
130                    
131                //On cache le lien de finalisation et on affiche le bon lien pour l'édition
132                $this->actions_sup["definalisation"] = NULL;
133                $this->actions_sup["pdfetat"]["lien"] = "../app/pdf_instruction.php?idx=";
134                $this->actions_sup["pdfetat"]["id"] = "";
135            }
136            
137            $idxformulaire = $this->getParameter("idxformulaire");
138            $retourformulaire = $this->getParameter("retourformulaire");
139            //Si le dossier d'instruction auquel est rattachée l'instruction est cloturé,
140            //on affiche pas les liens du portlet
141            if ( $idxformulaire != '' &&
142                (
143                    $retourformulaire == 'dossier' ||
144                    $retourformulaire == 'dossier_instruction' ||
145                    $retourformulaire == 'dossier_instruction_mes_encours' ||
146                    $retourformulaire == 'dossier_instruction_tous_encours' ||
147                    $retourformulaire == 'dossier_instruction_mes_clotures' ||
148                    $retourformulaire == 'dossier_instruction_tous_clotures'
149                )){
150    
151                //On récuppère le statut du dossier d'instruction        
152                $statut = $this->getStatutAutorisationDossier($idxformulaire);
153                // Si l'utilisateur est un instructeur, que le statut est clôturé
154                // et que l'événement n'est pas identifié comme non verrouillable
155                if ( $this->f->isUserInstructeur() && $statut == "cloture"
156                    && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false){
157                    
158                    //On cache les liens du portlet
159                    $this->parameters["actions"]["modifier"] = NULL;
160                    $this->actions_sup["finalisation"] = NULL;
161                    $this->actions_sup["definalisation"] = NULL;
162                }
163            }
164      }      }
165    
166      /**      /**
# Line 67  class instruction extends instruction_ge Line 174  class instruction extends instruction_ge
174              && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()              && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
175              && $this->getParameter("maj") != 3) {              && $this->getParameter("maj") != 3) {
176              //              //
177                $this->addToLog("canAccess(): utilisateur instructeur sur un dossier d'une autre division", EXTRA_VERBOSE_MODE);
178                return false;
179            }
180    
181            $retourformulaire = $this->getParameter("retourformulaire");
182            // Si l'utilisateur est un instructeur, que le dossier est cloturé,
183            // que l'utilisateur est dans un sous formulaire précis, que le
184            // formulaire n'est pas en mode consulter ou ajouter et que l'événement
185            // n'est pas identifié comme non verrouillable
186            if ( $this->f->isUserInstructeur() &&
187                $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
188                && (
189                    $retourformulaire == 'dossier' ||
190                    $retourformulaire == 'dossier_instruction' ||
191                    $retourformulaire == 'dossier_instruction_mes_encours' ||
192                    $retourformulaire == 'dossier_instruction_tous_encours' ||
193                    $retourformulaire == 'dossier_instruction_mes_clotures' ||
194                    $retourformulaire == 'dossier_instruction_tous_clotures'
195                )
196                && $this->getParameter("maj") != 3
197                && $this->getParameter("maj") != 0
198                && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
199    
200              return false;              return false;
201          }          }
202          //          //
# Line 74  class instruction extends instruction_ge Line 204  class instruction extends instruction_ge
204      }      }
205    
206      /**      /**
207       * Cette méthode permet de récupérer la division d'un dossier       * Cette variable permet de stocker le résultat de la méthode
208         * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
209         * ces appels.
210         * @var string Code de la division du dossier en cours
211         */
212        var $_division_from_dossier = NULL;
213    
214        /**
215         * Cette méthode permet de récupérer le code de division correspondant
216         * au dossier sur lequel on se trouve.
217         *
218         * @return string Code de la division du dossier en cours
219       */       */
220      function getDivisionFromDossier() {      function getDivisionFromDossier() {
221    
222            // Cette méthode peut être appelée plusieurs fois lors d'une requête.
223            // Pour éviter de refaire le traitement de recherche de la division
224            // alors on vérifie si nous ne l'avons pas déjà calculé.
225            if ($this->_division_from_dossier != NULL) {
226                // Logger
227                $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
228                // On retourne la valeur déjà calculée
229                return $this->_division_from_dossier;
230            }
231    
232            // Par défaut, on définit la valeur du dossier à NULL
233            $dossier = NULL;
234            // Test sur le mode et le contexte du formulaire
235            if ($this->getParameter("maj") == 0
236                && ($this->getParameter("retourformulaire") == "dossier"
237                    || $this->getParameter("retourformulaire") == "dossier_instruction"
238                    || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
239                    || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
240                    || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
241                    || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures")) {
242                // Si on se trouve en mode AJOUT (seul mode où l'enregistrement
243                // n'existe pas en base de données) ET que nous nous trouvons
244                // dans le contexte d'un dossier d'instruction alors on récupère
245                // le numéro de dossier depuis le paramètre 'idxformulaire'
246                $dossier = $this->getParameter("idxformulaire");
247            } else {
248                // Sinon on récupère le numéro de dossier dans le champs dossier de
249                // l'enregistrement (en base de données)
250                $dossier = $this->getVal("dossier");
251            }
252    
253            // On appelle la méthode de la classe utils qui renvoi le code de la
254            // division d'un dossier, on la stocke pour ne pas refaire le calcul au
255            // prochain appel de cette méthode
256            $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
257            // Logger
258            $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
259            // On retourne la valeur retournée
260            return $this->_division_from_dossier;
261    
262        }
263    
264        /**
265         * Cette méthode permet de récupérer le dossier d'autorisation d'un dossier
266         */
267        function getNumDemandeAutorFromDossier($id) {
268          //          //
269          if (!isset($this->val[array_search("dossier", $this->champs)])) {          if (!isset($id)) {
270              return NULL;              return NULL;
271          }          }
272          //          //
273          $sql = "select division from ".DB_PREFIXE."dossier ";          $sql = "select dossier_autorisation from ".DB_PREFIXE."dossier ";
274          $sql .= " where dossier='".$this->val[array_search("dossier", $this->champs)]."'";          $sql .= " where dossier='".$id."'";
275          //          //
276          $division = $this->db->getOne($sql);          $dossier_autorisation = $this->db->getOne($sql);
277          $this->addToLog("getDivisionFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);          $this->addToLog("getNumDemandeAutorFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
278          database::isError($division);          database::isError($dossier_autorisation);
279          //          //
280          return $division;          return $dossier_autorisation;
281      }      }
282    
283      // }}}      // }}}
284    
285      function cleSecondaire($id,&$db,$val,$DEBUG) {      function setType(&$form, $maj) {
286          parent::cleSecondaire($id,$db,$val,$DEBUG);          //
287          // controle suppression cle secondaire [secondary key delete control]          parent::setType($form, $maj);
288          // ------------------------------------------------------------------------------------          // On cache tous les champs
289          // specifique detruire que le dernier   [specific instruction : delete the last event ]          // XXX
290          // ------------------------------------------------------------------------------------          $form->setType('complement3_om_html', 'hidden');
291          $dernierevenement='';          $form->setType('bible3', 'hidden');
292          $sql="select max(instruction) from ".DB_PREFIXE."instruction where dossier ='".          $form->setType('complement4_om_html', 'hidden');
293          $this->idxformulaire."'";          $form->setType('bible4', 'hidden');
294          $dernierevenement = $db->getOne($sql);          $form->setType('complement5_om_html', 'hidden');
295           if($dernierevenement==$id){          $form->setType('bible5', 'hidden');
296               $this->correct=true;          $form->setType('complement6_om_html', 'hidden');
297               $this->addToMessage(_('Destruction_chronologique'));          $form->setType('bible6', 'hidden');
298            }else{          $form->setType('complement7_om_html', 'hidden');
299               $this->addToMessage(_('Destruction_evenement')." : ".$dernierevenement);          $form->setType('bible7', 'hidden');
300               $this->addToMessage(_('Destruction_chronologique'));          $form->setType('complement8_om_html', 'hidden');
301               $this->correct=false;          $form->setType('bible8', 'hidden');
302            }          $form->setType('complement9_om_html', 'hidden');
303      }          $form->setType('bible9', 'hidden');
304            $form->setType('complement10_om_html', 'hidden');
305      // Sélectionne le signataire_arrete par défaut          $form->setType('bible10', 'hidden');
306      function setVal(&$form,$maj,$validation){          $form->setType('complement11_om_html', 'hidden');
307                    $form->setType('bible11', 'hidden');
308          // Ajout          $form->setType('complement12_om_html', 'hidden');
309          if($maj == 0) {          $form->setType('bible12', 'hidden');
310                        $form->setType('complement13_om_html', 'hidden');
311              // Création de la requête          $form->setType('bible13', 'hidden');
312              $sql = "SELECT signataire_arrete          $form->setType('complement14_om_html', 'hidden');
313                      FROM ".DB_PREFIXE."signataire_arrete          $form->setType('bible14', 'hidden');
314                      WHERE defaut IS TRUE";          $form->setType('complement15_om_html', 'hidden');
315                        $form->setType('bible15', 'hidden');
316              // Exécution de la requête          //
317              $this->f->addToLog("deleteAllLienDossierInstructionTypeEvenementEvenement(): db->query(\"".$sql."\");", VERBOSE_MODE);          $form->setType('delai', 'hidden');
318              $res = $this->f->db->query($sql);          $form->setType('etat', 'hidden');
319              $this->f->isDatabaseError();          $form->setType('accord_tacite', 'hidden');
320            $form->setType('action', 'hidden');
321            $form->setType('delai_notification', 'hidden');
322            $form->setType('avis_decision', 'hidden');
323            $form->setType('autorite_competente', 'hidden');
324            //
325            $form->setType('archive_delai', 'hidden');
326            $form->setType('archive_etat', 'hidden');
327            $form->setType('archive_accord_tacite', 'hidden');
328            $form->setType('archive_avis', 'hidden');
329            $form->setType('archive_date_complet', 'hiddendate');
330            $form->setType('archive_date_dernier_depot', 'hiddendate');
331            $form->setType('archive_date_rejet', 'hiddendate');
332            $form->setType('archive_date_limite', 'hiddendate');
333            $form->setType('archive_date_notification_delai', 'hiddendate');
334            $form->setType('archive_date_decision', 'hiddendate');
335            $form->setType('archive_date_validite', 'hiddendate');
336            $form->setType('archive_date_achevement', 'hiddendate');
337            $form->setType('archive_date_conformite', 'hiddendate');
338            $form->setType('archive_date_chantier', 'hiddendate');
339            $form->setType('archive_autorite_competente','hidden');
340            //
341            $form->setType('numero_arrete', 'hidden');
342            //
343            $form->setType('code_barres', 'hidden');
344                    
345              $row = $res->fetchrow(DB_FETCHMODE_ASSOC);          //
346                        $form->setType('archive_incompletude','hidden');
347              if ( isset($row['signataire_arrete']) && is_numeric($row['signataire_arrete'])){          $form->setType('archive_evenement_suivant_tacite','hidden');
348                            $form->setType('archive_evenement_suivant_tacite_incompletude','hidden');
349                  $form->setVal("signataire_arrete",$row['signataire_arrete']);          $form->setType('archive_etat_pendant_incompletude','hidden');
350              }          $form->setType('archive_date_limite_incompletude','hiddendate');
351          }          $form->setType('archive_delai_incompletude','hidden');
     }  
   
     /*Met des valeurs par défaut dans certains des sous-formulaire*/  
     function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){  
         if ($validation==0 and $maj<2) {  
             if ($maj == 0){  
                 $form->setVal("destinataire", $idxformulaire);  
                 $form->setVal("dossier", $idxformulaire);  
                 $form->setVal("date_evenement", date('Y-m-d'));  
             }  
             $form->setVal("bible_auto","bible_auto()");  
             $form->setVal("bible","bible()");  
             $form->setVal("bible2","bible2()");  
         }  
         $this->retourformulaire=$retourformulaire;  
         $this->idxformulaire=$idxformulaire;  
     }  
352    
353      /*Affecte un type à certains champs*/          //
354      function setType(&$form,$maj) {          $form->setType('duree_validite','hidden');
355          parent::setType($form,$maj);          $form->setType('duree_validite_parametrage','hidden');
356          if ($maj < 2) { //ajouter et modifier          if ($maj < 2) { //ajouter et modifier
357              $form->setType('destinataire', 'hidden');              $form->setType('destinataire', 'hidden');
358              $form->setType('lettretype', 'hiddenstatic');              $form->setType('lettretype', 'hiddenstatic');
359              $form->setType('complement', 'textarea');              $form->setType('complement_om_html', 'html');
360              $form->setType('complement2', 'textarea');              $form->setType('complement2_om_html', 'html');
361              $form->setType('bible_auto', 'httpclick');              $form->setType('bible_auto', 'httpclick');
362              $form->setType('bible', 'httpclick');              $form->setType('bible', 'httpclick');
363              $form->setType('bible2', 'httpclick');              $form->setType('bible2', 'httpclick');
364              $form->setType('dossier', 'hidden');                $form->setType('dossier', 'hidden');  
365              $form->setType('libelle', 'hiddenstatic');              $form->setType('libelle', 'hiddenstatic');
366              $form->setType('signataire_arrete','select');              $form->setType('signataire_arrete','select');
367                $form->setType('date_envoi_signature','datedisabled');
368                $form->setType('date_retour_signature','datedisabled');
369                $form->setType('date_envoi_rar','datedisabled');
370                $form->setType('date_retour_rar','datedisabled');
371                $form->setType('date_envoi_controle_legalite','datedisabled');
372                $form->setType('date_retour_controle_legalite','datedisabled');
373                $form->setType('date_finalisation_courrier','datedisabled');
374    
375                
376    
377              if($maj==0){ // add              if($maj==0){ // add
378                  $form->setType('instruction', 'hiddenstatic');                  $form->setType('instruction', 'hidden');
379                    $form->setType('lettretype', 'hidden');
380                  $form->setType('evenement', 'select');                  $form->setType('evenement', 'select');
381                  $form->setType('date_evenement', 'date2');                  $form->setType('date_evenement', 'date2');
382              }else{ // modify              }else{ // modify
383                  $form->setType('instruction', 'hiddenstatic');                  $form->setType('instruction', 'hiddenstatic');
384                  $form->setType('evenement', 'hiddenstatic');                  $form->setType('evenement', 'selecthiddenstatic');
385                  //$form->setType('date_evenement', 'hiddenstaticdate');                  //$form->setType('date_evenement', 'hiddenstaticdate');
386                  $form->setType('date_evenement', 'date2');                  $form->setType('date_evenement', 'date2');
387                  // necessaire pour calcul de date en modification                  // necessaire pour calcul de date en modification
388                  $form->setType('delai', 'hiddenstatic');                  //$form->setType('delai', 'hiddenstatic');
389                    // les administrateurs technique et fonctionnel peuvent
390                    // modifier tous les champs de date
391                    if ($this->f->isAccredited("instruction_modification_dates")) {
392                        $form->setType('date_envoi_signature', 'date');
393                        $form->setType('date_retour_signature', 'date');
394                        $form->setType('date_envoi_rar', 'date');
395                        $form->setType('date_retour_rar', 'date');
396                        $form->setType('date_envoi_controle_legalite', 'date');
397                        $form->setType('date_retour_controle_legalite', 'date');
398                        $form->setType('date_finalisation_courrier', 'date');
399                    }
400              }              }
401          } elseif($maj==2){          } elseif($maj==2){
402              $form->setType('dossier', 'hidden');              $form->setType('dossier', 'hidden');
# Line 193  class instruction extends instruction_ge Line 410  class instruction extends instruction_ge
410              $form->setType('bible', 'hidden');              $form->setType('bible', 'hidden');
411              $form->setType('bible2', 'hidden');              $form->setType('bible2', 'hidden');
412          }          }
413          $form->setType('complement3', 'hidden');  
414          $form->setType('bible3', 'hidden');          //Cache les champs pour la finalisation
415          $form->setType('complement4', 'hidden');          $form->setType('om_fichier_instruction', 'hidden');
416          $form->setType('bible4', 'hidden');          $form->setType('om_final_instruction', 'hidden');
417          $form->setType('complement5', 'hidden');          // Cache le document arrêté
418          $form->setType('bible5', 'hidden');          $form->setType('document_numerise', 'hidden');
419          $form->setType('complement6', 'hidden');          
420          $form->setType('bible6', 'hidden');          //Masquer les champs date_envoi_controle_legalite et
421          $form->setType('complement7', 'hidden');          //date_retour_controle_legalite si ce n'est pas un arrêté
422          $form->setType('bible7', 'hidden');          if ( !is_numeric($this->getVal("avis_decision"))){
423          $form->setType('complement8', 'hidden');              
424          $form->setType('bible8', 'hidden');              $form->setType("date_envoi_controle_legalite", "hiddendate");
425          $form->setType('complement9', 'hidden');              $form->setType("date_retour_controle_legalite", "hiddendate");
426          $form->setType('bible9', 'hidden');          }
         $form->setType('complement10', 'hidden');  
         $form->setType('bible10', 'hidden');  
         $form->setType('complement11', 'hidden');  
         $form->setType('bible11', 'hidden');  
         $form->setType('complement12', 'hidden');  
         $form->setType('bible12', 'hidden');  
         $form->setType('complement13', 'hidden');  
         $form->setType('bible13', 'hidden');  
         $form->setType('complement14', 'hidden');  
         $form->setType('bible14', 'hidden');  
         $form->setType('complement15', 'hidden');  
         $form->setType('bible15', 'hidden');  
         $form->setType('delai', 'hidden');  
         $form->setType('etat', 'hidden');  
         $form->setType('accord_tacite', 'hidden');  
         $form->setType('action', 'hidden');  
         $form->setType('delai_notification', 'hidden');  
         $form->setType('avis_decision', 'hidden');  
         $form->setType('archive_delai', 'hidden');  
         $form->setType('archive_etat', 'hidden');  
         $form->setType('archive_accord_tacite', 'hidden');  
         $form->setType('archive_avis', 'hidden');  
         $form->setType('archive_date_complet', 'hidden');  
         $form->setType('archive_date_rejet', 'hidden');  
         $form->setType('archive_date_limite', 'hidden');  
         $form->setType('archive_date_notification_delai', 'hidden');  
         $form->setType('archive_date_decision', 'hidden');  
         $form->setType('archive_date_validite', 'hidden');  
         $form->setType('archive_date_achevement', 'hidden');  
         $form->setType('archive_date_conformite', 'hidden');  
         $form->setType('archive_date_chantier', 'hidden');    
         $form->setType('numero_arrete', 'hidden');  
427      }      }
428        
429      /*Met des valeurs choisies dans certains select du formulaire*/      function setSelect(&$form, $maj,&$db,$debug) {
430      function setSelect(&$form, $maj,&$db,$DEBUG) {          /**
431             * On ne surcharge pas la méthode parent car une requête sur la table
432             * dossier est mauvaise pour les performances, car la requête qui
433             * concerne evenement est plus complexe que celle générée et car les
434             * champs action, avis_decision et etat ne sont pas utilisés comme des
435             * select
436             */
437          if(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc.php"))          if(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc.php"))
438              include ("../sql/".$db->phptype."/".$this->table.".form.inc.php");              include ("../sql/".$db->phptype."/".$this->table.".form.inc.php");
439            elseif(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc"))
440                include ("../sql/".$db->phptype."/".$this->table.".form.inc");
441    
442          parent::setSelect($form, $maj, $db, $DEBUG);          //// action
443            //$this->init_select($form, $db, $maj, $debug, "action",
444          // *** evenement ***          //                   $sql_action, $sql_action_by_id, false);
445          $contenu=array();  
446          // etat du dossier          //// avis_decision
447          $sql="select etat from ".DB_PREFIXE."dossier where dossier ='".          //$this->init_select($form, $db, $maj, $debug, "avis_decision",
448                $this->idxformulaire."'";          //                   $sql_avis_decision, $sql_avis_decision_by_id, false);
449          $etat_dossier = $db->getOne($sql);  
450          // nature du dossier d'autorisation          //// dossier
451          $sql="select code from ".DB_PREFIXE."dossier          //$this->init_select($form, $db, $maj, $debug, "dossier",
452              INNER JOIN ".DB_PREFIXE."dossier_autorisation ON          //                   $sql_dossier, $sql_dossier_by_id, false);
453                  dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation  
454              INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille ON          //// etat
455                  dossier_autorisation.dossier_autorisation_type_detaille =          //$this->init_select($form, $db, $maj, $debug, "etat",
456                  dossier_autorisation_type_detaille.dossier_autorisation_type_detaille          //                   $sql_etat, $sql_etat_by_id, false);
457              WHERE dossier ='".  
458                $this->idxformulaire."'";          //// evenement
459          $nature_dossier = $db->getOne($sql);          //$this->init_select($form, $db, $maj, $debug, "evenement",
460            //                   $sql_evenement, $sql_evenement_by_id, false);
461          // recherche des evenement de transition  
462          // XXX modifier la requète après la modification de structure du workflow          // signataire_arrete
463          $sql= $sql_transition." where transition.etat ='".$etat_dossier."' and dossier='".          $this->init_select($form, $db, $maj, $debug, "signataire_arrete",
464                $this->idxformulaire."' order by evenement.action";                             $sql_signataire_arrete, $sql_signataire_arrete_by_id, true);
465            
466          // *** attention en dur le CU          /**
467          $this->addToLog("setSelect(): db->query(\"".$sql."\");", VERBOSE_MODE);           * Gestion du filtre sur les événements de workflow disponibles
468             * On récupère ici en fonction de l'état du dossier d'instruction en
469             * cours et du type du dossier d'instruction en cours la liste
470             * événements disponibles.
471             */
472            if ($maj == 0) {
473                // Récupération des événements par une jointure entre la table dossier
474                // et la table transition et la table evenement et la table
475                // lien_dossier_instruction_type_evenement en fonction de l'identifiant
476                // du dossier d'instruction en cours
477                $sql = "SELECT
478                evenement.evenement,
479                evenement.libelle as lib
480                FROM ".DB_PREFIXE."dossier
481                INNER JOIN ".DB_PREFIXE."lien_dossier_instruction_type_evenement
482                    ON dossier.dossier_instruction_type=lien_dossier_instruction_type_evenement.dossier_instruction_type
483                INNER JOIN ".DB_PREFIXE."evenement
484                    ON evenement.evenement=lien_dossier_instruction_type_evenement.evenement
485                INNER JOIN ".DB_PREFIXE."transition
486                    ON evenement.evenement = transition.evenement
487                    AND dossier.etat=transition.etat
488                WHERE dossier.dossier='".$this->idxformulaire."'
489                ORDER BY evenement.libelle, evenement.action";
490                $res = $db->query($sql);
491                $this->addToLog("setSelect(): db->query(\"".$sql."\");", VERBOSE_MODE);
492                if (database::isError($res)) {
493                    die($res->getMessage());
494                }
495                // Remplissage du tableau du select
496                $contenu = array(
497                    0 => array("",),
498                    1 => array(_('choisir')." "._('evenement'),)
499                );
500                while ($row=& $res->fetchRow()) {
501                    $contenu[0][] = $row[0];
502                    $contenu[1][] = $row[1];
503                }
504                $form->setSelect("evenement", $contenu);
505            } else {
506                $sql = "SELECT
507                evenement.libelle as lib
508                FROM ".DB_PREFIXE."evenement
509                WHERE evenement.evenement=".$this->getVal("evenement")."";
510                $res = $db->getone($sql);
511                $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
512                if (database::isError($res)) {
513                    die($res->getMessage());
514                }
515                //
516                $contenu = array(
517                    0 => array($this->getVal("evenement"),),
518                    1 => array($res,)
519                );
520                $form->setSelect("evenement", $contenu);
521            }
522    
523          $res = $db->query($sql);          /**
524          if (database::isError($res))           * Gesion des liens vers la bible
525              die($res->getMessage());           */
526          $contenu[0][0]="";          // lien bible_auto
527          $contenu[1][0]=_('choisir')." "._('evenement');          $contenu = array(_("automatique"));
         $k=1;  
         while ($row=& $res->fetchRow()){  
             if($maj==0){ // ajouter  
                 $contenu[0][$k]=$row[0];  
                 $contenu[1][$k]=$row[1];  
                 $k++;  
             }else{  
                 // select hiddenstatic  
                 $contenu[0][$k]=$row[0];  
                 $contenu[1][$k]=$row[1];  
                 $k++;  
             }  
         }  
         $form->setSelect("evenement",$contenu);  
         // lien bible_auto  [link]  
         $contenu=array();  
         $contenu[0]=" automatique ";  
528          $form->setSelect("bible_auto",$contenu);          $form->setSelect("bible_auto",$contenu);
529          // lien bible1          // lien bible1
530          $contenu=array();          $contenu = array(_("bible"));
         $contenu[0]=" Bible ";  
531          $form->setSelect("bible",$contenu);          $form->setSelect("bible",$contenu);
532          // lien bible2          // lien bible2
533          $contenu=array();          $contenu = array(_("bible"));
         $contenu[0]=" Bible ";  
534          $form->setSelect("bible2",$contenu);          $form->setSelect("bible2",$contenu);
535      } // function select      }
536    
537        function cleSecondaire($id, &$db, $val, $DEBUG) {
538            //
539            parent::cleSecondaire($id, $db, $val, $DEBUG);
540            
541            $id = $this->getVal($this->clePrimaire);
542    
543            
544            //Requête de vérification que cet événement d'instruction n'est pas lié
545            //à la création d'un dossier d'instruction
546            $sql = "SELECT demande_type.dossier_instruction_type
547                FROM ".DB_PREFIXE."demande_type
548                LEFT JOIN ".DB_PREFIXE."demande
549                ON demande.demande_type = demande_type.demande_type
550                WHERE demande.instruction_recepisse = ".$id;
551            $res = $this->db->getOne($sql);
552            $this->addToLog("cleSecondaire(): db->getone(\"".$sql."\");", VERBOSE_MODE);
553            if (database::isError($res)) {
554                die($res->getMessage());
555            }
556    
557            // Aucune clé secondaire n'a été trouvée ou c'est un événement sans
558            //création de dossier d'instruction, l'événement d'instruction peut être
559            //supprimé
560            if ( $this->correct !== false || $res == null || $res == ""){
561    
562                // Requête de vérification que cet événement d'instruction est lié
563                // à une demande
564                $sql = "SELECT demande
565                    FROM ".DB_PREFIXE."demande
566                    WHERE instruction_recepisse = ".$id;
567                $res = $this->db->getOne($sql);
568                $this->addToLog("cleSecondaire(): db->getone(\"".$sql."\");", VERBOSE_MODE);
569                if (database::isError($res)) {
570                    die($res->getMessage());
571                }
572    
573                //Si c'est un événement d'instruction lié à une demande
574                if ($res != null || $res != ""){
575                    
576                    require_once "../obj/demande.class.php";
577                    $demande = new demande($res, $this->db, DEBUG);
578    
579                    //On met à jour la demande en supprimant la liaison vers
580                    //l'événement d'instruction
581                    $demande->setParameter("maj", 1);
582                    $valF = array();
583                    foreach($demande->champs as $identifiant => $champ) {
584                        $valF[$champ] = $demande->val[$identifiant];
585                    }
586                    $valF['date_demande']=$demande->dateDBToForm($valF['date_demande']);
587                    $valF['instruction_recepisse']=NULL;
588                    $ret = $demande->modifier($valF, $this->db, DEBUG);
589                }
590                    
591                /**
592                 * Vérification que l'élément supprimé est le dernier pour pouvoir
593                 * remodifier les données de manière itérative.
594                 */
595                // Initialisation
596                $dernierevenement = "";
597                // Récupération du dernier élément de la table d'instruction qui
598                // concerne le dossier en cours
599                $sql = "SELECT max(instruction)
600                FROM ".DB_PREFIXE."instruction
601                WHERE dossier ='".$this->idxformulaire."'";
602                $dernierevenement = $db->getOne($sql);
603                $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
604                if (database::isError($dernierevenement)) {
605                    die($dernierevenement->getMessage());
606                }
607                // Si on se trouve effectivement sur le dernier evenement d'instruction
608                if ($dernierevenement == $id) {
609                    // Alors on valide la suppression
610                    $this->correct = true;
611                    $this->addToMessage(_('Destruction_chronologique'));
612                } else {
613                    // Alors on annule la suppression
614                    $this->correct = false;
615                    $this->addToMessage(_("Seul le dernier evenement d'instruction peut etre supprime."));
616                }
617            }
618        }
619    
620        /**
621         * Vérification de la possibilité ou non de modifier des dates de suivi
622         * @param  string $champ champ date à vérifier
623         */
624        function updateDate($champ) {
625            
626            //Si le retourformulaire est "dossier_instruction"
627            if ($this->retourformulaire == "dossier_instruction") {
628    
629                // Vérification de la possibilité de modifier les dates si déjà éditées
630                if($this->valF[$champ] != "" AND !$this->f->user_is_admin) {
631                    // si l'utilisateur n'est pas un admin
632                    if($this->getVal($champ) != "" AND $this->getVal($champ) != $this->valF[$champ]) {
633                        $this->correct = false;
634                        $this->addToMessage(_("Les dates de suivis ne peuvent etre modifiees"));
635                    }
636                }
637            }
638            
639            //
640            return true;
641        }
642    
643        // Sélectionne le signataire_arrete par défaut
644        function setVal(&$form,$maj,$validation){
645            
646            // Ajout
647            if($maj == 0) {
648                
649                // Création de la requête
650                $sql = "SELECT signataire_arrete
651                        FROM ".DB_PREFIXE."signataire_arrete
652                        WHERE defaut IS TRUE";
653                
654                // Exécution de la requête
655                $res = $this->f->db->query($sql);
656                $this->f->addToLog("setVal(): db->query(\"".$sql."\");", VERBOSE_MODE);
657                if ( database::isError($res)){
658                    die();
659                }
660            
661                $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
662                
663                if ( isset($row['signataire_arrete']) && is_numeric($row['signataire_arrete'])){
664                    
665                    $form->setVal("signataire_arrete",$row['signataire_arrete']);
666                }
667            }
668        }
669    
670        /*Met des valeurs par défaut dans certains des sous-formulaire*/
671        function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){
672            if ($validation==0 and $maj<2) {
673                if ($maj == 0){
674                    $form->setVal("destinataire", $idxformulaire);
675                    $form->setVal("dossier", $idxformulaire);
676                    $form->setVal("date_evenement", date('Y-m-d'));
677                }
678                $form->setVal("bible_auto","bible_auto()");
679                $form->setVal("bible","bible()");
680                $form->setVal("bible2","bible2()");
681            }
682            $this->retourformulaire=$retourformulaire;
683            $this->idxformulaire=$idxformulaire;
684        }
685    
686    
687      function setLayout(&$form, $maj){      function setLayout(&$form, $maj){
688          if ( $maj < 2 OR $maj == 3 ) {          if ( $maj < 2 OR $maj == 3 ) {
# Line 312  class instruction extends instruction_ge Line 690  class instruction extends instruction_ge
690              $form->setBloc('evenement','D',"","col_12");              $form->setBloc('evenement','D',"","col_12");
691    
692                  $form->setFieldset('evenement','D',_('Evenement'));                  $form->setFieldset('evenement','D',_('Evenement'));
                     $form->setBloc('evenement','D',"","group col_12");  
                     $form->setBloc('date_evenement','F');  
693                  $form->setFieldset('lettretype','F','');                  $form->setFieldset('lettretype','F','');
694                            
695              $form->setBloc('lettretype','F');              $form->setBloc('lettretype','F');
# Line 330  class instruction extends instruction_ge Line 706  class instruction extends instruction_ge
706                            
707              $form->setBloc('date_retour_controle_legalite','F');              $form->setBloc('date_retour_controle_legalite','F');
708    
709              $form->setBloc('complement','D',"","col_12");              $form->setBloc('complement_om_html','D',"","col_12");
710                  $form->setFieldset('complement','D',_('Complement'));                  $form->setFieldset('complement_om_html','D',_('Complement'));
711                  $form->setFieldset('bible','F','');                  $form->setFieldset('bible','F','');
712              $form->setBloc('bible','F');              $form->setBloc('bible','F');
713    
714              $form->setBloc('complement2','D',"","col_12");              $form->setBloc('complement2_om_html','D',"","col_12");
715                  $form->setFieldset('complement2','D',_('Complement 2'));                  $form->setFieldset('complement2_om_html','D',_('Complement 2'));
716                  $form->setFieldset('bible2','F','');                  $form->setFieldset('bible2','F','');
717              $form->setBloc('bible2','F');              $form->setBloc('bible2','F');
718          }          }
719      }      }
720            
721      /*Change le libellé de certains champs*/      function setLib(&$form, $maj) {
722      function setLib(&$form,$maj) {          //
723          parent :: setLib($form,$maj);          parent::setLib($form, $maj);
724          $form->setLib('libelle',' ');          //
725          $form->setLib('bible_auto',"");          $form->setLib('bible_auto', "");
726          $form->setLib('bible',"");          $form->setLib('bible', "");
727          $form->setLib('bible2',"");          $form->setLib('bible2', "");
728      }      }
729    
730      // ==================================================================      function triggerajouter($id, &$db, $val, $DEBUG) {
731      // trigger avant modification des données    [trigger before modify data]          /**
732      // ==================================================================           * Le code suivant permet de récupérer des valeurs des tables evenement
733      function triggerajouter($id,&$db,$val,$DEBUG) {           * et dossier pour les stocker dans l'instruction :
734          // mise a jour instruction avec evenement           * DEPUIS L'EVENEMENT
735          // [modify instruction with evenement]           * - action
736          $sql= "select * from ".DB_PREFIXE."evenement where evenement =".$this->valF['evenement'];           * - delai
737                     * - accord_tacite
738             * - etat
739             * - avis_decision
740             * - delai_notification
741             * - lettretype
742             * - autorite_competente
743             * DEPUIS LE DOSSIER D'INSTRUCTION
744             * - archive_delai
745             * - archive_accord_tacite
746             * - archive_etat
747             * - archive_avis
748             * - date_complet
749             * - date_rejet
750             * - date_limite
751             * - date_notification_delai
752             * - date_decision
753             * - date_validite
754             * - date_achevement
755             * - date_chantier
756             * - date_conformite
757             * - avis_decision
758             * Il permet également de stocker la date_depot du dossier d'instruction
759             * dans l'attribut $this->archive_date_depot de la classe.
760             */
761            // Récupération de tous les paramètres de l'événement sélectionné
762            $sql = "SELECT * FROM ".DB_PREFIXE."evenement
763            WHERE evenement=".$this->valF['evenement'];
764          $res = $db->query($sql);          $res = $db->query($sql);
765          if (database::isError($res)) die($res->getMessage());          $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
766                    if (database::isError($res)) {
767          if ($DEBUG == 1)              die($res->getMessage());
768              echo " la requete ".$sql." est exécutée<br>";          }
769                    while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
770          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){              // Récupération de l'identifiant de l'action
771                            // si une action est paramétrée dans l'événement
772              if(isset($row['action']) and !empty($row['action'])) {              $this->valF['action'] = NULL;
773                if (isset($row['action']) and !empty($row['action'])) {
774                  $this->valF['action']=$row['action'];                  $this->valF['action']=$row['action'];
             } else {  
                 $this->valF['action']=NULL;  
775              }              }
776              $this->valF['delai']=$row['delai'];              // Récupération de la valeur du délai
777              if(isset($row['etat']) and !empty($row['etat'])) {              $this->valF['delai'] = $row['delai'];
778                // Récupération de l'identifiant de l'état
779                // si un état est paramétré dans l'événement
780                $this->valF['etat']=NULL;
781                if (isset($row['etat']) and !empty($row['etat'])) {
782                  $this->valF['etat']=$row['etat'];                  $this->valF['etat']=$row['etat'];
             } else {  
                 $this->valF['etat']=NULL;  
783              }              }
784                // Récupération de la valeur d'accord tacite
785              $this->valF['accord_tacite']=$row['accord_tacite'];              $this->valF['accord_tacite']=$row['accord_tacite'];
786                // Récupération de la valeur du délai de notification
787              $this->valF['delai_notification']=$row['delai_notification'];              $this->valF['delai_notification']=$row['delai_notification'];
788                // Récupération de l'identifiant de l'avis
789                // si un avis est paramétré dans l'événement
790                $this->valF['avis_decision'] = NULL;
791              if(isset($row['avis_decision']) and !empty($row['avis_decision'])) {              if(isset($row['avis_decision']) and !empty($row['avis_decision'])) {
792                  $this->valF['avis_decision']=$row['avis_decision'];                  $this->valF['avis_decision']=$row['avis_decision'];
             } else {  
                 $this->valF['avis_decision']=NULL;  
793              }              }
794              if($row['lettretype']!="")              // Récupération de la valeur de l'autorité compétente
795                  $this->valF['lettretype']=$row['lettretype'];              // si l'autorité compétente est paramétré dans l'événement
796              else              $this->valF['autorite_competente'] = NULL;
797                  $this->valF['lettretype']="standard";              if(isset($row['autorite_competente']) and !empty($row['autorite_competente'])) {
798                                $this->valF['autorite_competente']=$row['autorite_competente'];
799          }              }
800          $sql= "select * from ".DB_PREFIXE."dossier where dossier = '".$this->valF['dossier']."'";              // Récupération de la valeur de la lettre type
801                $this->valF['lettretype']=$row['lettretype'];
802            }
803            // Récupération de toutes les valeurs du dossier d'instruction en cours
804            $sql = "SELECT * FROM ".DB_PREFIXE."dossier
805            WHERE dossier='".$this->valF['dossier']."'";
806          $res = $db->query($sql);          $res = $db->query($sql);
807          if (database::isError($res))          $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
808            if (database::isError($res)) {
809              die($res->getMessage());              die($res->getMessage());
         if ($DEBUG == 1)  
             echo " la requete ".$sql." est exécutée<br>";  
         while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){  
             //  
             $this->archive_date_depot = $row['date_depot'];  
             // archive en instruction (si suppression)  
             $this->valF['archive_delai']=$row['delai'];  
             $this->valF['archive_accord_tacite']=$row['accord_tacite'];  
             $this->valF['archive_etat']=$row['etat'];  
             $this->valF['archive_avis']=$row['avis_decision'];  
             // compatibilite pgsql  
             if($row['date_complet']!='')  
                $this->valF['archive_date_complet']=$row['date_complet'];  
             if($row['date_rejet']!='')  
                $this->valF['archive_date_rejet']= $row['date_rejet'];  
             if($row['date_limite']!='')  
                $this->valF['archive_date_limite']= $row['date_limite'];  
             if($row['date_notification_delai']!='')  
                $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];  
             if($row['date_decision']!='')  
                $this->valF['archive_date_decision']= $row['date_decision'];  
             if($row['date_validite']!='')  
                $this->valF['archive_date_validite']= $row['date_validite'];  
             if($row['date_achevement']!='')  
                $this->valF['archive_date_achevement']= $row['date_achevement'];  
             if($row['date_chantier']!='')  
                $this->valF['archive_date_chantier']= $row['date_chantier'];  
             if($row['date_conformite']!='')  
                $this->valF['archive_date_conformite']= $row['date_conformite'];    
810          }          }
811            $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
812            $this->updateArchiveData($row);
813            $this->archive_date_depot = $row['date_depot'];
814                    
815            // Récupération de la duree de validite du dossier d'autorisation
816            $sql = "SELECT duree_validite_parametrage
817                    FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
818                    LEFT JOIN ".DB_PREFIXE."dossier_autorisation
819                        ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
820                    LEFT JOIN ".DB_PREFIXE."dossier
821                        ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
822            WHERE dossier.dossier='".$this->valF['dossier']."'";
823            $duree_validite_parametrage = $db->getOne($sql);
824            $this->addToLog("triggerajouter(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
825            database::isError($duree_validite_parametrage);
826            if ($duree_validite_parametrage != '') {
827                $this->valF['duree_validite_parametrage']= $duree_validite_parametrage;
828            }
829    
830            // Identifiant du type de courrier
831            $idTypeCourrier = '11';
832            $idCourrier = str_pad($this->valF["instruction"], 10, "0", STR_PAD_LEFT);
833            // Code barres
834            $this->valF["code_barres"] = $idTypeCourrier . $idCourrier;
835      }      }
836            
837      // Test si une restriction est valide      // Test si une restriction est valide
838      // return boolean      // return boolean
839      function restrictionIsValid($restriction){      function restrictionIsValid($restriction){
840                    if($this->restriction_valid != null) {
841          /* Met des espace avant et après les opérateurs puis transforme la chaine en              return $this->restriction_valid;
842           * un tableau */          }
843          $tabRestriction = str_replace(">="," >= ",          if(empty($restriction)) {
844                            str_replace("<="," <= ",              $this->restriction_valid = true;
845                            str_replace("-"," - ",              return $this->restriction_valid;
846                            str_replace("+"," + ",$restriction))));          }
847          $tabRestriction = explode( " ", $tabRestriction);          // Liste des opérateurs possible
848                    $operateurs = array(">=", "<=", "+", "-");
849          //Variables de résultat          // Liste des opérateurs avec espace
850            $operateurs_blank = array(" >= ", " <= ", " + ", " - ");
851    
852            // Supprime tous les espaces de la chaîne de caractère
853            $restriction = str_replace(' ', '', $restriction);
854            
855            // Met des espace avant et après les opérateurs puis transforme la
856            // chaine en un tableau
857            $tabRestriction = str_replace($operateurs, $operateurs_blank,
858                $restriction);
859            $tabRestriction = explode(" ", $tabRestriction);
860    
861            // Tableau comprenant les résultat
862          $res = array();          $res = array();
863          $i = 0;          // Compteur pour les résultat
864          $comp = "";          // commence à 1 car le 0 doit rester inchangé tout au long du traitement
865                    $j = 1;
866                    // Comparateur du calcul
867          //Test que le tableau n'est pas vide          $comparateur = '';
868          if ( count($tabRestriction) > 0 ){          // Booléen retourné
869                        $res_bool = true;
870              $res[0] = $this->getRestrictionValue($tabRestriction[0]);  
871                        // S'il y a un comparateur
872              //Calcul des variables          if (in_array(">=", $tabRestriction)
873              for ( $j = 1 ; $j < count($tabRestriction) ; $j += 2 ) {              || in_array("<=", $tabRestriction)) {
874                    
875                  //Variable de comparaison              // Si le tableau n'est pas vide
876                  if ( strcmp( ">=", $tabRestriction[$j] ) == 0 ||              if (count($tabRestriction) > 0) {
877                       strcmp( "<=", $tabRestriction[$j]) ==0 ){  
878                    // Boucle dans le tableau pour récupérer seulement les valeurs
879                    foreach ($tabRestriction as $key => $value) {
880                                            
881                      $comp = $tabRestriction[$j];                      //
882                      $res[++$i] = $this->getRestrictionValue($tabRestriction[$j+1]);                      if (!in_array($value, $operateurs)) {
883                            if ($this->getRestrictionValue($value) != false) {
884                                $res[] = $this->getRestrictionValue($value);
885                            } else {
886                                // Message d'erreur
887                                $error_message = sprintf(_("Le champ %s de l'instruction %s est vide"), "<span class='bold'>".$value."</span>", "<span class='bold'>".$this->valF["instruction"]."</span>");
888                                $this->addToMessage($error_message);
889                                // Arrête le traitement
890                                return false;
891                            }
892                        }
893                  }                  }
894                  // Fait l'addition  
895                  elseif ( strcmp( "+", $tabRestriction[$j]) == 0 ){                  // Boucle dans le tableau
896                    // commence à 1 car le 0 doit rester inchangé tout au long du
897                    // traitement
898                    for ($i = 1; $i<count($tabRestriction); $i++) {
899                                            
900                     $res[$i] =  $this->moisdate( $res[$i], $this->getRestrictionValue($tabRestriction[$j+1]) );                      // Récupère le comparateur
901                        if ($tabRestriction[$i] === ">="
902                            || $tabRestriction[$i] === "<=") {
903                            $comparateur = $tabRestriction[$i];
904                        }
905    
906                        // Si l'opérateur qui suit est un "+"
907                        if ($tabRestriction[$i] === "+") {
908                            $dateDep = $res[$j];
909                            unset($res[$j]);$j++;
910                            $duree = $res[$j];
911                            unset($res[$j]);
912                            $res[$j] = $this->f->mois_date($dateDep, $duree, "+");
913                        }
914    
915                        // Si l'opérateur qui suit est un "-"
916                        if ($tabRestriction[$i] === "-") {
917                            $dateDep = $res[$j];
918                            unset($res[$j]);$j++;
919                            $duree = $res[$j];
920                            unset($res[$j]);
921                            $res[$j] = $this->f->mois_date($dateDep, $duree, "-");
922                        }
923                  }                  }
             }  
         }  
                   
         // Effectue le test  
         if ( strcmp($comp, ">=") == 0 ){  
               
             if ( $res[0] >= $res[1] || $res[0] == "" ){  
                   
                 return true;  
             }  
             else {  
924                                    
                 return false;  
925              }              }
         }  
         elseif ( strcmp($comp, "<=") == 0 ){  
926    
927              if ( $res[0] <= $res[1] || $res[1] == "" ){              // Si les tableau des résultats n'est pas vide
928                if (count($res) > 0) {
929                    //
930                    $res_bool = false;
931                    // Effectue le test
932                    if ($comparateur === ">=") {
933                        //
934                        if (strtotime($res[0]) >= strtotime($res[$j])) {
935                            $res_bool = true;
936                        }
937                    }
938                    if ($comparateur === "<=") {
939    
940                  return true;                      if (strtotime($res[0]) <= strtotime($res[$j])) {
941                            $res_bool = true;
942                        }
943                    }
944              }              }
945              else {          // Sinon une erreur s'affiche
946            } else {
947    
948                  return false;              // Message d'erreur
949              }              $error_message = _("Mauvais parametrage de la restriction.")." ".
950                    _("Contactez votre administrateur");
951                $this->addToMessage($error_message);
952                // Arrête le traitement
953                return false;
954          }          }
955                    
956          return true;          return $res_bool;
957    
958      }      }
959        
960      //Retourne la valeur de valF si $restrictionValue n'est pas un chiffre, le chiffre sinon      /**
961         * Permet de définir si l'événement passé en paramètre est un événement retour.
962         * @param integer $evenement événement à tester
963         *
964         * @return boolean retourne true si événement retour sinon false
965         */
966        function is_evenement_retour($evenement) {
967            if(empty($evenement) || !is_numeric($evenement)) {
968                return "";
969            }
970            $sql = "SELECT retour
971                FROM ".DB_PREFIXE."evenement
972                WHERE evenement = ".$evenement;
973            $retour = $this->db->getOne($sql);
974            $this->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
975            if (database::isError($retour)) {
976                die($retour->getMessage());
977            }
978            if ($retour == 't') {
979                return true;
980            } else {
981                return false;
982            }
983        }
984    
985        /**
986         * Retourne le champ restriction de l'événement passé en paramètre.
987         *
988         * @param integer $evenement id de l'événement sur lequel récupérer la restriction
989         *
990         * @return string             contenu du champ restriction
991         */
992        function get_restriction($evenement) {
993            if(empty($evenement) || !is_numeric($evenement)) {
994                return "";
995            }
996            //Récupère la restriction
997            $sql= "SELECT
998                      restriction
999                  FROM
1000                      ".DB_PREFIXE."evenement
1001                  WHERE
1002                      evenement =".$evenement;
1003    
1004            $restriction = $this->db->getOne($sql);
1005            $this->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
1006            if (database::isError($restriction)) {
1007                die($restriction->getMessage());
1008            }        
1009            return $restriction;
1010        }
1011    
1012        /**
1013         * Récupère la valeur du champ dans la restriction
1014         * @param  string   $restrictionValue   Nom du champ
1015         * @return mixed                        Valeur du champ
1016         */
1017      function getRestrictionValue($restrictionValue){      function getRestrictionValue($restrictionValue){
1018            
1019          return ( is_numeric($restrictionValue) ) ?          // Initialisation de la valeur de retour
1020              $restrictionValue :          $return = false;
1021              $this->valF[$restrictionValue];  
1022            // Récupére les valeurs du dossier
1023            $value_dossier = $this->get_dossier_actual();
1024    
1025            //
1026            if (is_numeric($restrictionValue)) {
1027                $return = $restrictionValue;
1028            }elseif (isset($value_dossier[$restrictionValue])) {
1029                $return = $value_dossier[$restrictionValue];
1030            }elseif (isset($this->valF[$restrictionValue])) {
1031                $return = $this->valF[$restrictionValue];
1032            }
1033    
1034            // Retourne la valeur du champ
1035            return $return;
1036      }      }
1037        
1038      function regle($regle){      /**
1039          $temp = explode ("+",$regle);       * Calcul des règle d'action.
1040          //echo '|'.$regle;       * @param string $rule      Règle d'action
1041          // cas rejet       * @param string $rule_name Nom de la règle
1042          if($regle=="null") // 1 dimension -> null       * @param string $type      Type de la règle
1043         *
1044         * @return mixed            Résultat de la règle
1045         */
1046        function regle($rule, $rule_name, $type = null) {
1047    
1048            // Supprime tous les espaces de la chaîne de caractère
1049            $rule = str_replace(' ', '', $rule);
1050            // Coupe la chaîne au niveau de l'opérateur
1051            $operands = explode ("+", $rule);
1052            // Nombre d'opérande
1053            $nb_operands = count($operands);
1054    
1055            // Règle à null
1056            if ($rule == "null") {
1057              return null;              return null;
         if(sizeof($temp)==1) // 1 dimension  
             if($temp[0]=="archive_date_depot") // initialisation avec le depot  
                 return $this->$regle;  
             else // cas general  
                 return $this->valF[$regle];  
         if(sizeof($temp)==2){ // 2 dimensions  
             if($temp[0]=="archive_date_depot") //initialisation avec le depot  
                 if(is_numeric($temp[1]))  
                     return  $this->moisdate($this->$temp[0], $temp[1]);    
                 else  
                     return  $this->moisdate($this->$temp[0], $this->valF[$temp[1]]);  
             if($temp[0]=="archive_delai") // majoration de delai  
                 return  $this->valF[$temp[0]]+$this->valF[$temp[1]];  
             // cas general 2 dimensions  
             if(is_numeric($temp[1]))  
                 return $this->moisdate($this->valF[$temp[0]], $temp[1]);  
             else                
                return  $this->moisdate($this->valF[$temp[0]], $this->valF[$temp[1]]);  
         }  
         if(sizeof($temp)==3){ // 3 dimensions  
             // cas date de validite de sursis  
             if(is_numeric($temp[1]))  
                 $temp1 = $this->moisdate($this->valF[$temp[0]], $temp[1]);  
             else                
                 $temp1 = $this->moisdate($this->valF[$temp[0]], $this->valF[$temp[1]]);  
             if(is_numeric($temp[2]))  
                 return $this->moisdate($temp1, $temp[2]);  
             else  
                 return $this->moisdate($temp1, $this->valF[$temp[2]]);  
1058          }          }
1059    
1060            // Si c'est une règle spécifique
1061            if ($rule_name == "regle_autorite_competente"
1062                || $rule_name == "regle_etat"
1063                || $rule_name == "regle_accord_tacite"
1064                || $rule_name == "regle_avis") {
1065                //
1066                return $this->valF[$rule];
1067            }
1068    
1069            // Tableau des champs de type date
1070            $rule_type_date = array(
1071                "regle_date_limite",
1072                "regle_date_notification_delai",
1073                "regle_date_complet",
1074                "regle_date_validite",
1075                "regle_date_decision",
1076                "regle_date_chantier",
1077                "regle_date_achevement",
1078                "regle_date_conformite",
1079                "regle_date_rejet",
1080                "regle_date_dernier_depot",
1081                "regle_date_limite_incompletude",
1082            );
1083            // Tableau des champs de type numérique
1084            $rule_type_numeric = array(
1085                "regle_delai",
1086                "regle_delai_incompletude",
1087            );
1088    
1089            // Définit le type du champ
1090            if (in_array($rule_name, $rule_type_date) == true) {
1091                $type = "date";
1092            }
1093            if (in_array($rule_name, $rule_type_numeric) == true) {
1094                $type = "numeric";
1095            }
1096    
1097            // Initialisation des variables
1098            $key_date = 0;
1099            $total_numeric = 0;
1100    
1101            // Pour chaque opérande
1102            foreach ($operands as $key => $operand) {
1103    
1104                // Si c'est une règle de type date
1105                if ($type == 'date') {
1106                    // Vérifie si au moins une des opérandes est une date
1107                    if (!is_numeric($operand)
1108                        && isset($this->valF[$operand])
1109                        && $this->f->check_date($this->valF[$operand]) == true) {
1110                        // Récupère la position de la date
1111                        $key_date = $key;
1112                    }
1113                    // Les autres opérandes doivent être que des numériques
1114                    if (is_numeric($operand) == true) {
1115                        // Ajoute l'opérande au total
1116                        $total_numeric += $operand;
1117                    }
1118                    if (!is_numeric($operand)
1119                        && isset($this->valF[$operand])
1120                        && is_numeric($this->valF[$operand]) == true) {
1121                        // Ajoute l'opérande au total
1122                        $total_numeric += $this->valF[$operand];
1123                    }
1124                }
1125    
1126                // Si c'est une règle de type numérique
1127                if ($type == 'numeric') {
1128                    // Les opérandes doivent être que des numériques
1129                    if (is_numeric($operand) == true) {
1130                        // Ajoute l'opérande au total
1131                        $total_numeric += $operand;
1132                    }
1133                    if (!is_numeric($operand)
1134                        && isset($this->valF[$operand])
1135                        && is_numeric($this->valF[$operand]) == true) {
1136                        // Ajoute l'opérande au total
1137                        $total_numeric += $this->valF[$operand];
1138                    }
1139                }
1140            }
1141    
1142            // Résultat pour une règle de type date
1143            if ($type == 'date') {
1144                // Retourne le calcul de la date
1145                return $this->f->mois_date($this->valF[$operands[$key_date]],
1146                    $total_numeric, "+");
1147            }
1148    
1149            // Résultat pour une règle de type numérique
1150            if ($type == 'numeric') {
1151                // Retourne le calcul
1152                return $total_numeric;
1153            }
1154            
1155      }      }
1156        
       
       
     // ==================================================================  
     // valeur dossier  apres modification   [values dossier after action]  
     // ==================================================================  
1157      function triggerajouterapres($id,&$db,$val,$DEBUG) {      function triggerajouterapres($id,&$db,$val,$DEBUG) {
1158          // mise a null au lieu de "" / voir compatibilite mysql          /**
1159          // voir parametrage CU en dur           * Mise à jour des valeurs du dossier en fonction des valeurs calculées
1160          // voir parametrage des actions en dur           * par l'action
1161          $param=1;           */
1162          if($param==1){          $this->getValEvenement();
1163              $sql="select * from ".DB_PREFIXE."action where action = '".$this->valF['action']."'";          // Initialisation
1164              $res = $db->query($sql);          $valF = "";
1165              if (database::isError($res))          // état de complétude actuel du dossier
1166                  die($res->getMessage());          $incompletude =  $this->dossierIncomplet();
1167              while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){  
1168                  if($row['regle_etat']!=''){          if($incompletude === FALSE) {
1169                      $valF['etat']= $this->regle($row['regle_etat']);              // Si l'événement d'instruction est de type incompletude
1170                  }              if($this->valEvenement['type'] == "incompletude") {
1171                  if($row['regle_delai']!=''){                  // On marque le dossier en incomplétude pour application des actions
1172                      $valF['delai']= $this->regle($row['regle_delai']);                  $incompletude = TRUE;
1173                  }                  // Set du flag incomplétude de la table dossier
1174                  if($row['regle_accord_tacite']!=''){                  $valF['incompletude'] = TRUE;
1175                      $valF['accord_tacite']= $this->regle($row['regle_accord_tacite']);                  // Enregistrement de l'état dans la variable provisoire
1176                  }                  $valF['etat_pendant_incompletude'] = $this->valF['archive_etat'];
1177                  if($row['regle_avis']!=''){              }
1178                      $valF['avis_decision']= $this->regle($row['regle_avis']);          } else {
1179                  }              // Si l'evenement d'instruction est de type retour ou contient une
1180                  if($row['regle_date_limite']!=''){              // decision, on sort d'incomplétude
1181                      $valF['date_limite']= $this->regle($row['regle_date_limite']);              if($this->valEvenement['type'] == "retour" OR
1182                  }                 $this->valEvenement['avis_decision'] != NULL) {
1183                  if($row['regle_date_complet']!=''){                  // On enlève la marque d'incomplétude pour application des actions
1184                      $valF['date_complet']= $this->regle($row['regle_date_complet']);                  $incompletude = FALSE;
1185                  }                  // On enlève le flag d'incomplétude sur l'enregistrement de la table dossier
1186                  if($row['regle_date_notification_delai']!=''){                  $valF['incompletude'] = FALSE;
1187                      $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);                   // Restauration de l'état depuis l'état provisoire
1188                  }                  $valF['etat'] = $this->valF['archive_etat_pendant_incompletude'];
1189                  if($row['regle_date_decision']!=''){                  // On vide la variable provisoire ainsi que le délai de complétude
1190                      $valF['date_decision']= $this->regle($row['regle_date_decision']);                  // et la date limite de complétude
1191                  }                  $valF['etat_pendant_incompletude'] = NULL;
1192                  if($row['regle_date_rejet']!=''){                  $valF['delai_incompletude'] = NULL;
1193                      $valF['date_rejet']= $this->regle($row['regle_date_rejet']);                  $valF['date_limite_incompletude'] = NULL;
1194                  }                  $valF['evenement_suivant_tacite_incompletude'] = NULL;
1195                 if($row['regle_date_validite']!=''){              }
1196                      $valF['date_validite']= $this->regle($row['regle_date_validite']);          }
1197                  }          // Récupération des paramètres de l'action
1198                 if($row['regle_date_chantier']!=''){          $sql = "SELECT * FROM ".DB_PREFIXE."action
1199                      $valF['date_chantier']= $this->regle($row['regle_date_chantier']);          WHERE action='".$this->valF['action']."'";
1200                  }          $res = $db->query($sql);
1201                 if($row['regle_date_achevement']!=''){          $this->addToLog("triggerajouterapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1202                      $valF['date_achevement']= $this->regle($row['regle_date_achevement']);          if (database::isError($res)) {
1203                  }              die($res->getMessage());
1204                 if($row['regle_date_conformite']!=''){          }
1205                      $valF['date_conformite']= $this->regle($row['regle_date_conformite']);          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1206                  }  
1207                              // pour chacune des regles, on applique la regle
1208                 // Appel des méthode stockées dans le champ methode_trigger              if($row['regle_delai']!=''){
1209                 if($row['methode_trigger'] != "") {                  $valF['delai'] = $this->regle($row['regle_delai'], 'regle_delai');
1210                     foreach (explode(";", $row['methode_trigger']) as $methode) {              }
1211                         if(method_exists($this, $methode)) {              if($row['regle_accord_tacite']!=''){
1212                             $this->$methode();                  $valF['accord_tacite'] = $this->regle($row['regle_accord_tacite'], 'regle_accord_tacite');
1213                         }              }
1214                                      if($row['regle_avis']!=''){
1215                     }                  $valF['avis_decision'] = $this->regle($row['regle_avis'], 'regle_avis');
1216                 }              }
1217              }              if($row['regle_date_limite']!=''){
1218          }else{                  $valF['date_limite']= $this->regle($row['regle_date_limite'], 'regle_date_limite');
1219              switch ($this->valF['action']) {              }
1220              case "initialisation" :              if($row['regle_date_complet']!=''){
1221                  $valF['delai']= $this->valF['delai'];                  $valF['date_complet']= $this->regle($row['regle_date_complet'], 'regle_date_complet');
1222                  $valF['etat']= $this->valF['etat'];              }
1223                  $valF['accord_tacite']= $this->valF['accord_tacite'];              if($row['regle_date_dernier_depot']!=''){
1224                  // la date_complet est la date de depot                  $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot'], 'regle_date_dernier_depot');
1225                  $valF['date_complet']= $this->archive_date_depot; // ****              }
1226                  $valF['date_limite'] =  $this->moisdate($valF['date_complet'],$valF['delai']);              if($row['regle_date_notification_delai']!=''){
1227                  $valF['date_notification_delai'] =  $this->moisdate($valF['date_complet'],1);                  $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai'], 'regle_date_notification_delai');
1228                  break;              }
1229              case "notification" :              if($row['regle_date_decision']!=''){
1230                  $valF['delai']= $this->valF['delai'];                  $valF['date_decision']= $this->regle($row['regle_date_decision'], 'regle_date_decision');
1231                  $valF['etat']= $this->valF['etat'];              }
1232                  $valF['accord_tacite']= $this->valF['accord_tacite'];              if($row['regle_date_rejet']!=''){
1233                  // la date_complet est celle precedemment saisie                  $valF['date_rejet']= $this->regle($row['regle_date_rejet'], 'regle_date_rejet');
1234                  $valF['date_complet']=$this->valF['archive_date_complet'];              }
1235                  $valF['date_limite'] =  $this->moisdate($valF['date_complet'],$valF['delai']);              if($row['regle_date_validite']!=''){
1236                  $valF['date_notification_delai'] =  $this->moisdate($valF['date_complet'],1);                  $valF['date_validite']= $this->regle($row['regle_date_validite'], 'regle_date_validite');
1237                  // la date du courrier ne doit pas etre depasse par rapport au delai de              }
1238                  // notification    [verify notification date]              if($row['regle_date_chantier']!=''){
1239                  if($this->valF['archive_date_notification_delai']<$this->valF['date_evenement'])                  $valF['date_chantier']= $this->regle($row['regle_date_chantier'], 'regle_date_chantier');
1240                      $this->msg=$this->msg."<br><img src='../img/erreur.gif'> "._("date_notification_delai")." ".              }
1241                      $this->valF['archive_date_notification_delai']." < "._('date_evenement');              if($row['regle_date_achevement']!=''){
1242                  //                  $valF['date_achevement']= $this->regle($row['regle_date_achevement'], 'regle_date_achevement');
1243                  break;              }
1244              case "retour" :              if($row['regle_date_conformite']!=''){
1245                  $valF['delai']= $this->valF['delai'];                  $valF['date_conformite']= $this->regle($row['regle_date_conformite'], 'regle_date_conformite');
1246                  $valF['etat']= $this->valF['etat'];              }
1247                  $valF['accord_tacite']= $this->valF['accord_tacite'];              if($row['regle_date_limite_incompletude']!=''){
1248                  // la date_complet est celle de l evenement                  $valF['date_limite_incompletude']= $this->regle($row['regle_date_limite_incompletude'], 'regle_date_limite_incompletude');
1249                  $valF['date_complet']= $this->valF['date_evenement'];              }
1250                  $valF['date_limite'] =  $this->moisdate($valF['date_complet'],$valF['delai']);              if($row['regle_delai_incompletude']!=''){
1251                  $valF['date_notification_delai'] =  $this->moisdate($valF['date_complet'],1);                  $valF['delai_incompletude']= $this->regle($row['regle_delai_incompletude'], 'regle_delai_incompletude');
1252                  break;              }
1253              case "rejet" :              if($row['regle_autorite_competente']!=''){
1254                  //$valF['delai']=0;   // *** delai a garder pour etat dpc                  $valF['autorite_competente']= $this->regle($row['regle_autorite_competente'], 'regle_autorite_competente');
1255                  $valF['etat']= $this->valF['etat'];              }
1256                  $valF['accord_tacite']= $this->valF['accord_tacite'];              if($row['regle_etat']!=''){
1257                  // la date rejet est initialisee                  // Si on est dans le cas général ou qu'on est en incomplétude et
1258                  $valF['date_rejet']= $this->valF['date_evenement'];                  // qu'on a un événement de type incomplétude alors : on stocke
1259                  // les dates de depart et fin d instruction sont annulées                  // l'état dans la variable courante
1260                  $valF['date_limite'] =null;                  if ($incompletude == FALSE OR $this->valEvenement['type'] == "incompletude") {
1261                  $valF['date_notification_delai'] =null;                      $valF['etat'] = $this->regle($row['regle_etat'], 'regle_etat');
1262                  $valF['date_complet']=null;                  } else {
1263                  break;                      $valF['etat_pendant_incompletude'] = $this->regle($row['regle_etat'], 'regle_etat');
1264              case "majoration" :                  }
1265                  $valF['delai']= $this->valF['archive_delai']+$this->valF['delai'];              }
1266                  $valF['etat']= $this->valF['etat'];          }
1267                  $valF['accord_tacite']= $this->valF['accord_tacite'];          if($this->valEvenement['evenement_suivant_tacite'] != '') {
1268                  $valF['date_complet']=$this->valF['archive_date_complet'];              // Si on est pas en incomplétude on stocke l'événement tacite
1269                  // majoration de la date limite                  //de l'événement dans la variable courante
1270                  $valF['date_limite'] =  $this->moisdate($valF['date_complet'],$valF['delai']);                  
1271                  $valF['date_notification_delai'] =  $this->moisdate($valF['date_complet'],1);                  if ($incompletude == FALSE OR $this->valEvenement['type'] != "incompletude") {
1272                  // la date du courrier ne doit pas etre depasse par rapport au delai de                      $valF['evenement_suivant_tacite'] = $this->valEvenement['evenement_suivant_tacite'];
1273                  // notification                  } else {
1274                  if($this->valF['archive_date_notification_delai']<$this->valF['date_evenement'])                      $valF['evenement_suivant_tacite_incompletude'] = $this->valEvenement['evenement_suivant_tacite'];
1275                      $this->msg=$this->msg."<br><img src='../img/erreur.gif'>"._("date_notification_delai").                  }
1276                  $this->valF['archive_date_notification_delai']." < "._('date_evenement');          }
1277                  break;          // Si des valeurs ont été calculées alors on met à jour l'enregistrement
1278              case "acceptation" :          if ($valF != "") {
1279                  $valF['etat']= $this->valF['etat'];              // On met à jour le dossier
1280                  $valF['date_decision']= $this->valF['date_evenement'];              $cle = " dossier='".$this->valF['dossier']."'";
1281                  $valF['avis_decision']= $this->valF['avis_decision'];              $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1282                  // date de validite = date de l evenement + delai              $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1283                  $valF['date_validite'] =  $this->moisdate($this->valF['date_evenement'],$this->valF['delai']);              if (database::isError($res1)) {
                    break;  
             case "refus" :  
                 $valF['etat']= $this->valF['etat'];  
                 $valF['date_decision']= $this->valF['date_evenement'];  
                 $valF['avis_decision']= $this->valF['avis_decision'];  
                 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['date_evenement'],$this->valF['delai']);  
                 $valF['etat']= $this->valF['etat'];  
                 $valF['accord_tacite']= $this->valF['accord_tacite'];  
                 $valF['avis_decision']= $this->valF['avis_decision'];  
                 $valF['date_decision']= $this->valF['date_evenement'];  
                 $temp = $valF['date_limite'];  
                 $valF['date_validite']= $this->moisdate($temp,2);  
                 break;  
             case "execution" :  
                 $valF['etat']= $this->valF['etat'];  
                 $valF['date_chantier'] =  $this->valF['date_evenement'];  
                 //echo $this->msg=$this->msg.$valF['date_chantier']."";  
                 break;  
             case "achevement" :  
                 $valF['etat']= $this->valF['etat'];  
                 $valF['date_achevement'] = $this->valF['date_evenement'];  
                 break;  
             case "archivage" :  
                 $valF['etat']= $this->valF['etat'];  
                 $valF['date_conformite'] = $this->valF['date_evenement'];  
                 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))  
1284                  die($res->getMessage());                  die($res->getMessage());
1285              if ($DEBUG == 1)              }
1286                echo "La requête de mise à jour est effectuée.<br>";              // Affichage d'informations à l'utilisateur
1287              $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')."]" ;  
1288          }          }
1289    
1290            /**
1291             * REFERENTIEL ERP
1292             */
1293          // verification si envoi vers ERP est active          // verification si envoi vers ERP est active
1294          if ($this->f->getParameter('option_erp') != "") {          if ($this->f->getParameter('option_erp') != "") {
1295              // la nature du dossier              // la nature du dossier
1296              $nature_dossier = substr($this->idxformulaire,0,2);              $nature_dossier = substr($this->idxformulaire,0,2);
1297              $dossier_erp = $this->getFromDB("SELECT erp FROM ".DB_PREFIXE."dossier WHERE dossier = '" .              //
1298                                          $this->valF['dossier'] . "'");              $sql = "SELECT erp
1299              $evenement_libelle = $this->getFromDB(              FROM ".DB_PREFIXE."dossier
1300                      "SELECT libelle FROM ".DB_PREFIXE."evenement WHERE evenement = '" .              WHERE dossier='".$this->valF['dossier']."'";
1301                      $this->valF['evenement'] . "'");              $dossier_erp = $this->db->getone($sql);
1302                $this->addToLog("triggerajouterapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1303                if (database::isError($res)) {
1304                    die($res->getMessage());
1305                }
1306                //
1307                $sql = "SELECT libelle
1308                FROM ".DB_PREFIXE."evenement
1309                WHERE evenement='".$this->valF['evenement']."'";
1310                $evenement_libelle = $this->db->getone($sql);
1311                $this->addToLog("triggerajouterapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1312                if (database::isError($res)) {
1313                    die($res->getMessage());
1314                }
1315                //
1316              if ($dossier_erp == 't') {              if ($dossier_erp == 't') {
1317                  // envoi du message en cas d'un PC qui est ERP et sur lequel un evenement                  // envoi du message en cas d'un PC qui est ERP et sur lequel un evenement
1318                  // d'acceptation etait fait                  // d'acceptation etait fait
# Line 741  class instruction extends instruction_ge Line 1323  class instruction extends instruction_ge
1323                      $msgenque = new MessageEnqueuer();                      $msgenque = new MessageEnqueuer();
1324                      $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);                      $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
1325                      $msgenque->setDecision($evenement_libelle);                      $msgenque->setDecision($evenement_libelle);
1326                      $msgenque->enqueueMessage($msgenque::$ERP_ARRETE_PC_EFFECTUE);                      $return = $msgenque->enqueueMessage($msgenque::$ERP_ARRETE_PC_EFFECTUE);
1327                        //Si une erreur s'est produite on arrête le traitement et on
1328                        //retourne une erreur
1329                        if ($return !== 0){
1330                            
1331                            $this->addToMessage(_("Une erreur s'est produite lors de ".
1332                                "l'envoi du message au referentiel ERP. Merci de ".
1333                                "contacter votre administrateur"));
1334                            //On ne valide pas le formulaire
1335                            $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1336                            $this->correct = false;
1337                            return false;
1338                        }
1339                        else {
1340                            $this->addToMessage(_("Le message a ete transmis au ".
1341                                "referentiel ERP."));
1342                        }
1343                  }                  }
1344                  if ($this->valF['evenement'] ==                  if ($this->valF['evenement'] ==
1345                          $this->f->getParameter('erp_evenement_refuser_dossier')) {                          $this->f->getParameter('erp_evenement_refuser_dossier')) {
1346                      $msgenque = new MessageEnqueuer();                      $msgenque = new MessageEnqueuer();
1347                      $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);                      $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
1348                      $msgenque->enqueueMessage($msgenque::$ERP_DECISION_CONFORMITE_EFFECTUE);                                      $return = $msgenque->enqueueMessage($msgenque::$ERP_DECISION_CONFORMITE_EFFECTUE);
1349                        //Si une erreur s'est produite on arrête le traitement et on
1350                        //retourne une erreur
1351                        if ($return !== 0){
1352                            
1353                            $this->addToMessage(_("Une erreur s'est produite lors de ".
1354                                "l'envoi du message au referentiel ERP. Merci de ".
1355                                "contacter votre administrateur"));
1356                            //On ne valide pas le formulaire
1357                            $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1358                            $this->correct = false;
1359                            return false;
1360                        }
1361                        else {
1362                            $this->addToMessage(_("Le message a ete transmis au ".
1363                                "referentiel ERP."));
1364                        }                
1365                  }                  }
1366              }              }
1367          } // fin de if ($this->f->getParameter('option_erp') != "")          } // fin de if ($this->f->getParameter('option_erp') != "")
     }  
       
       
     /**  
      * Fait une requette sql pour extraire la valeur d'un champ, et retourne  
      * cette valeur  
      * @param string $sql La requete sql a executer  
      * @return La valeur du champs cherche, sinon NULL. En cas d'erreur de la BD  
      * l'execution s'arrete.  
      */  
     function getFromDB($sql) {  
         //$sql = "SELECT libelle FROM ".DB_PREFIXE."dossier WHERE dossier = '" . $dossier . "'";  
         $res = $this->db->limitquery($sql, 0, 1);  
         $this->addToLog("getDossierERPSpecification(): db->limitquery(\"".  
                         str_replace(",",", ",$sql)."\", 0, 1);", VERBOSE_MODE);  
         // Si une erreur survient on die  
         if (database::isError($res, true)) {  
             // Appel de la methode de recuperation des erreurs  
             $this->erreur_db($res->getDebugInfo(), $res->getMessage(), 'instruction');  
         }  
         // retourne la nature du dossier  
         while ($row =& $res->fetchRow()) {  
             return $row[0];  
         }  
         // la nature n'etait pas trouve, ce qui ne devrait pas se passer  
         return NULL;  
1368    
1369      }          // Mise à jour des données du dossier d'autorisation
1370                require_once "../obj/dossier_autorisation.class.php";
1371            $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($this->valF['dossier']), $this->db, DEBUG);
1372            if($da->majDossierAutorisation() === false) {
1373                $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
1374                $this->correct = false;
1375                return false;
1376            }
1377        }    
1378    
1379      function triggermodifierapres($id,&$db,$val,$DEBUG) {      function triggermodifierapres($id,&$db,$val,$DEBUG) {
1380          /*          /**
1381           * cette fonction a pour objet de permettre de modifier la date courrier           * L'objectif ici est d'effectuer les recalculs de date dans le dossier
1382          */           * si la date de l'evenement est modifiee
1383          $valF=array();           */
1384          $sql= "select action from ".DB_PREFIXE."evenement where evenement =".$this->valF['evenement'];          // Initialisation
1385            $valF = "";
1386            // Initialisation du type d'événement
1387            $type_evmt = "";
1388            // Récupération de l'action correspondante à l'événement
1389            $sql = "SELECT action
1390            FROM ".DB_PREFIXE."evenement
1391            WHERE evenement=".$this->valF['evenement'];
1392          $action = $db->getOne($sql);          $action = $db->getOne($sql);
1393          if (database::isError($action)) die($action->getMessage().$sql);          $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1394          $sql="select * from ".DB_PREFIXE."action where action = '".$action."'";          if (database::isError($action)) {
1395                die($action->getMessage());
1396            }
1397    
1398            // Récupération des paramètres de l'action
1399            $sql = "SELECT * FROM ".DB_PREFIXE."action
1400            WHERE action='".$action."'";
1401          $res = $db->query($sql);          $res = $db->query($sql);
1402          if (database::isError($res)) die($res->getMessage().$sql);          $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1403            if (database::isError($res)) {
1404                die($res->getMessage());
1405            }
1406          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
1407              // application des regles sur le courrier + delai              // application des regles sur le courrier + delai
1408              if(preg_match("/date_evenement/",$row['regle_date_limite'])){              if(preg_match("/date_evenement/",$row['regle_date_limite'])){
1409                  $valF['date_limite']= $this->regle($row['regle_date_limite']);                  $valF['date_limite']= $this->regle($row['regle_date_limite'], 'regle_date_limite');
1410              }              }
1411              if(preg_match("/date_evenement/",$row['regle_date_complet'])){              if(preg_match("/date_evenement/",$row['regle_date_complet'])){
1412                  $valF['date_complet']= $this->regle($row['regle_date_complet']);                  $valF['date_complet']= $this->regle($row['regle_date_complet'], 'regle_date_complet');
1413                }
1414                if(preg_match("/date_evenement/",$row['regle_date_dernier_depot'])){
1415                    $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot'], 'regle_date_dernier_depot');
1416              }              }
1417              if(preg_match("/date_evenement/",$row['regle_date_notification_delai'])){              if(preg_match("/date_evenement/",$row['regle_date_notification_delai'])){
1418                  $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);                  $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai'], 'regle_date_notification_delai');
1419              }              }
1420              if(preg_match("/date_evenement/",$row['regle_date_decision'])){              if(preg_match("/date_evenement/",$row['regle_date_decision'])){
1421                  $valF['date_decision']= $this->regle($row['regle_date_decision']);                  $valF['date_decision']= $this->regle($row['regle_date_decision'], 'regle_date_decision');
1422              }              }
1423              if(preg_match("/date_evenement/",$row['regle_date_rejet'])){              if(preg_match("/date_evenement/",$row['regle_date_rejet'])){
1424                  $valF['date_rejet']= $this->regle($row['regle_date_rejet']);                  $valF['date_rejet']= $this->regle($row['regle_date_rejet'], 'regle_date_rejet');
1425              }              }
1426              if(preg_match("/date_evenement/",$row['regle_date_validite'])){              if(preg_match("/date_evenement/",$row['regle_date_validite'])){
1427                  $valF['date_validite']= $this->regle($row['regle_date_validite']);                  $valF['date_validite']= $this->regle($row['regle_date_validite'], 'regle_date_validite');
1428              }              }
1429              if(preg_match("/date_evenement/",$row['regle_date_chantier'])){              if(preg_match("/date_evenement/",$row['regle_date_chantier'])){
1430                  $valF['date_chantier']= $this->regle($row['regle_date_chantier']);                  $valF['date_chantier']= $this->regle($row['regle_date_chantier'], 'regle_date_chantier');
1431              }              }
1432              if(preg_match("/date_evenement/",$row['regle_date_achevement'])){              if(preg_match("/date_evenement/",$row['regle_date_achevement'])){
1433                  $valF['date_achevement']= $this->regle($row['regle_date_achevement']);                  $valF['date_achevement']= $this->regle($row['regle_date_achevement'], 'regle_date_achevement');
1434              }              }
1435              if(preg_match("/date_evenement/",$row['regle_date_conformite'])){              if(preg_match("/date_evenement/",$row['regle_date_conformite'])){
1436                  $valF['date_conformite']= $this->regle($row['regle_date_conformite']);                  $valF['date_conformite']= $this->regle($row['regle_date_conformite'], 'regle_date_conformite');
1437              }              }
1438          } // while          }
1439          if($valF!=array()){          // Si des valeurs ont été calculées alors on met à jour l'enregistrement
1440              $cle= " dossier = '".$this->valF['dossier']."'";          if ($valF != "") {
1441              $res1= $db->autoExecute(DB_PREFIXE.'dossier',$valF,DB_AUTOQUERY_UPDATE,$cle);              // On met à jour le dossier
1442              if (database::isError($res1))              $cle = " dossier='".$this->valF['dossier']."'";
1443                $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1444                $this->addToLog("triggermodifierapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1445                if (database::isError($res1)) {
1446                  die($res->getMessage());                  die($res->getMessage());
1447              if ($DEBUG == 1)              }
1448                echo "La requête de mise à jour est effectuée.<br>";              // Affichage d'informations à l'utilisateur
1449              $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')."]" ;  
         }  
   
         // Envoi des infos au  
         if ($this->valF['date_retour_signature'] != $this->getVal('date_retour_signature')) {  
             $msgenque = new MessageEnqueuer();  
             $sqlArrete = "SELECT instruction.signataire_arrete as \"ws_DA_In_Signataire\",  
                                 signataire_arrete.nom as \"ws_DA_In_Sign_Nom\",  
                                 signataire_arrete.prenom as \"ws_DA_In_Sign_Prenom\",  
                                 signataire_arrete.qualite as \"ws_DA_In_Sign_Qualite\",  
                                 instruction.date_evenement as \"ws_DA_In_Dte_Redac\",  
                                 '' as \"ws_DA_In_lieu_Redac\",  
                                 instruction.dossier as \"ws_DA_In_N_Doss_DAS\",  
                                 '' as \"ws_DA_In_Sigle\",  
                                 instruction.etat as \"ws_DA_In_Decision\",  
                                 dossier.date_depot as \"ws_DA_In_Dte_Depot_Dem\",  
                                 dossier.terrain_numero as \"ws_DA_In_N_Voie\",  
                                 '' as \"ws_DA_In_Type_Voie\",  
                                 dossier.complement as \"ws_DA_In_Adresse1\",  
                                 dossier.terrain_adresse_lieu_dit as \"ws_DA_In_Adresse2\",  
                                 dossier.terrain_adresse_code_postal as \"ws_DA_In_CP\",  
                                 dossier.terrain_adresse_localite as \"ws_DA_In_Ville\",  
                                 dossier.terrain_references_cadastrales as \"ws_DA_In_Nb_Parcelle\",  
                                 '' as \"ws_DA_In_Detail_Parcelle\",  
                                 CONCAT(donnees_techniques.am_projet_desc,' ',donnees_techniques.co_projet_desc) as \"ws_DA_In_Nature_Trvx\",  
                                 '' as \"ws_DA_In_Destination_Trvx\",  
                                 dossier_autorisation_type_detaille.code as \"ws_DA_In_Type_Dos_Autoris\",  
                                 COALESCE(particulier_nom,personne_morale_raison_sociale) as \"ws_DA_In_Nom_Petition\",  
                                 COALESCE(particulier_prenom, personne_morale_denomination) as \"ws_DA_In_Prenom_Petition\",  
                                 '' as \"ws_DA_In_Piece_GED\",  
                                 instruction.date_retour_signature as \"ws_DA_In_Dte_Signature\"  
                         FROM ".DB_PREFIXE."instruction  
                         LEFT JOIN ".DB_PREFIXE."signataire_arrete ON  
                             instruction.signataire_arrete = signataire_arrete.signataire_arrete  
                         LEFT JOIN ".DB_PREFIXE."dossier ON  
                             instruction.dossier = dossier.dossier  
                         LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur ON  
                             lien_dossier_demandeur.dossier = dossier.dossier  
                         LEFT JOIN ".DB_PREFIXE."demandeur ON  
                             lien_dossier_demandeur.demandeur = demandeur.demandeur  
                         LEFT JOIN ".DB_PREFIXE."dossier_instruction_type ON  
                             dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type  
                         LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille ON  
                             dossier_instruction_type.dossier_autorisation_type_detaille =  
                                 dossier_autorisation_type_detaille.dossier_autorisation_type_detaille  
                         LEFT JOIN ".DB_PREFIXE."donnees_techniques ON  
                                 donnees_techniques.dossier_instruction = dossier.dossier  
                         WHERE instruction.instruction = ".$this->valF['instruction'];  
             $resArrete = $this->db->query($sqlArrete);  
             $this->f->addToLog("triggerModifierApres(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);  
             $this->f->isDatabaseError();  
   
             $rowArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);  
             $msgenque->setArreteInfo($rowArrete);  
             $msgenque->enqueueMessage($msgenque::$ARRETE_ENVOI);                  
1450          }          }
     }  
1451    
1452            $restriction = $this->get_restriction($val['evenement']);
1453            $this->restriction_valid = $this->restrictionIsValid($restriction);
1454    
1455            if($restriction == "" || $this->restriction_valid ){
1456                // Récupération de tous les paramètres de l'événement sélectionné
1457                $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1458                WHERE evenement=".$this->valF['evenement'];
1459                $res = $db->query($sql);
1460                $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1461                if (database::isError($res)) {
1462                    die($res->getMessage());
1463                }
1464                while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1465                    // Si la date de retour signature est éditée on vérifie si il existe un événement automatique
1466                    if ($this->getVal('date_retour_signature') == "" AND
1467                        $this->valF['date_retour_signature'] != "" AND
1468                        $row['evenement_retour_signature'] != "") {
1469                        $new_instruction = new instruction("]", $db, $DEBUG);
1470                        // Création d'un tableau avec la liste des champs de l'instruction
1471                        foreach($new_instruction->champs as $champ) {
1472                            $valNewInstr[$champ] = "";
1473                        }
1474                        // Définition des valeurs de la nouvelle instruction
1475                        $valNewInstr["evenement"] = $row['evenement_retour_signature'];
1476                        $valNewInstr["destinataire"] = $this->valF['destinataire'];
1477                        $valNewInstr["dossier"] = $this->valF['dossier'];
1478                        $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_signature']);
1479                        $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
1480                        $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
1481                        $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
1482                        $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
1483                        $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
1484                        $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
1485                        $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1486                        
1487                        //Si une erreur s'est produite et qu'il s'agit d'un problème
1488                        //de restriction
1489                        if ($retour == false && !$new_instruction->restriction_valid){
1490                            $this->msg .= $new_instruction->msg;
1491                            $this->addToLog("triggermodifierapres() : evenement retour ".
1492                                "instruction ".$this->valF[$this->clePrimaire]." : ".
1493                                $new_instruction->msg);
1494                        }
1495                        //Si une erreur s'est produite après le test de la restriction
1496                        elseif ($retour == false && $new_instruction->restriction_valid){
1497                            $this->correct = false ;
1498                            $this->msg .= $new_instruction->msg;
1499                            return false;
1500                        }
1501                    }
1502                    // Si la date de retour AR est éditée on vérifie si il existe un événement automatique
1503                    if ($this->getVal('date_retour_rar') == "" AND
1504                        $this->valF['date_retour_rar'] != "" AND
1505                        $row['evenement_retour_ar'] != "" ) {
1506                        $new_instruction = new instruction("]", $db, $DEBUG);
1507                        // Création d'un tableau avec la liste des champs de l'instruction
1508                        foreach($new_instruction->champs as $champ) {
1509                            $valNewInstr[$champ] = "";
1510                        }
1511                        // Définition des valeurs de la nouvelle instruction
1512                        $valNewInstr["evenement"] = $row['evenement_retour_ar'];
1513                        $valNewInstr["destinataire"] = $this->valF['destinataire'];
1514                        $valNewInstr["dossier"] = $this->valF['dossier'];
1515                        $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_rar']);
1516                        $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
1517                        $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
1518                        $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
1519                        $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
1520                        $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
1521                        $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
1522                        $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1523                        
1524                                            //Si une erreur s'est produite et qu'il s'agit d'un problème
1525                        //de restriction
1526                        if ($retour == false && !$new_instruction->restriction_valid){
1527                            $this->msg .= $new_instruction->msg;
1528                            $this->addToLog("triggermodifierapres() : evenement retour ".
1529                                "instruction ".$this->valF[$this->clePrimaire]." : ".
1530                                $new_instruction->msg);
1531                        }
1532                        //Si une erreur s'est produite après le test de la restriction
1533                        elseif ($retour == false && $new_instruction->restriction_valid){
1534                            $this->correct = false ;
1535                            $this->msg .= $new_instruction->msg;
1536                            return false;
1537                        }
1538                    }
1539                }
1540            }
1541    
1542            //Récupération du type de l'événement
1543            $sql = "SELECT type
1544            FROM ".DB_PREFIXE."evenement
1545            WHERE evenement=".$this->valF['evenement'];
1546            $type_evmt = $db->getOne($sql);
1547            $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1548            if (database::isError($type_evmt)) {
1549                die($type_evmt->getMessage());
1550            }
1551    
1552            /**
1553             * REFERENTIEL ARRETE
1554             */
1555            // Si l'option référentiel arrêté est activé et l'événement est de type
1556            // arrêté
1557            
1558            if ($this->f->getParameter('option_referentiel_arrete') != "" AND
1559                $type_evmt == "arrete") {
1560                if ($this->valF['date_retour_signature'] != $this->getVal('date_retour_signature')) {
1561                    $msgenque = new MessageEnqueuer();
1562                    $sqlArrete = "SELECT instruction.signataire_arrete as \"ws_DA_In_Signataire\",
1563                                        signataire_arrete.nom as \"ws_DA_In_Sign_Nom\",
1564                                        signataire_arrete.prenom as \"ws_DA_In_Sign_Prenom\",
1565                                        signataire_arrete.qualite as \"ws_DA_In_Sign_Qualite\",
1566                                        instruction.date_evenement as \"ws_DA_In_Dte_Redac\",
1567                                        '' as \"ws_DA_In_lieu_Redac\",
1568                                        instruction.dossier as \"ws_DA_In_N_Doss_DAS\",
1569                                        '' as \"ws_DA_In_Sigle\",
1570                                        instruction.etat as \"ws_DA_In_Decision\",
1571                                        dossier.date_depot as \"ws_DA_In_Dte_Depot_Dem\",
1572                                        dossier.terrain_adresse_voie_numero as \"ws_DA_In_N_Voie\",
1573                                        '' as \"ws_DA_In_Type_Voie\",
1574                                        dossier.terrain_adresse_voie as \"ws_DA_In_Adresse1\",
1575                                        dossier.terrain_adresse_lieu_dit as \"ws_DA_In_Adresse2\",
1576                                        dossier.terrain_adresse_code_postal as \"ws_DA_In_CP\",
1577                                        dossier.terrain_adresse_localite as \"ws_DA_In_Ville\",
1578                                        dossier.terrain_references_cadastrales as \"ws_DA_In_Nb_Parcelle\",
1579                                        '' as \"ws_DA_In_Detail_Parcelle\",
1580                                        CONCAT(donnees_techniques.am_projet_desc,' ',donnees_techniques.co_projet_desc) as \"ws_DA_In_Nature_Trvx\",
1581                                        '' as \"ws_DA_In_Destination_Trvx\",
1582                                        dossier_autorisation_type_detaille.code as \"ws_DA_In_Type_Dos_Autoris\",
1583                                        COALESCE(particulier_nom,personne_morale_raison_sociale) as \"ws_DA_In_Nom_Petition\",
1584                                        COALESCE(particulier_prenom, personne_morale_denomination) as \"ws_DA_In_Prenom_Petition\",
1585                                        '' as \"ws_DA_In_Piece_GED\",
1586                                        instruction.date_retour_signature as \"ws_DA_In_Dte_Signature\"
1587                                FROM ".DB_PREFIXE."instruction
1588                                LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
1589                                    instruction.signataire_arrete = signataire_arrete.signataire_arrete
1590                                LEFT JOIN ".DB_PREFIXE."dossier ON
1591                                    instruction.dossier = dossier.dossier
1592                                LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur ON
1593                                    lien_dossier_demandeur.dossier = dossier.dossier
1594                                LEFT JOIN ".DB_PREFIXE."demandeur ON
1595                                    lien_dossier_demandeur.demandeur = demandeur.demandeur
1596                                LEFT JOIN ".DB_PREFIXE."dossier_instruction_type ON
1597                                    dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1598                                LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille ON
1599                                    dossier_instruction_type.dossier_autorisation_type_detaille =
1600                                        dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1601                                LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
1602                                        donnees_techniques.dossier_instruction = dossier.dossier
1603                                WHERE instruction.instruction = ".$this->valF['instruction'];
1604                    $resArrete = $this->db->query($sqlArrete);
1605                    $this->f->addToLog("triggermodifierapres(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
1606                    if ( database::isError($resArrete)){
1607                        die();
1608                    }
1609            
1610      // trigger before delete                  $rowArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
1611      function triggersupprimer($id,&$db,$val,$DEBUG) {                  $msgenque->setArreteInfo($rowArrete);
1612          // archive en instruction (si suppression) [archive if delete instruction]                  $return = $msgenque->enqueueMessage($msgenque::$ARRETE_ENVOI);
1613          $valF['delai']=$val['archive_delai'];                  //Si une erreur s'est produite on arrête le traitement et on
1614          $valF['accord_tacite']=$val['archive_accord_tacite'];                  //retourne une erreur
1615          $valF['etat']=$val['archive_etat'];                  if ($return !== 0){
1616          if($val['archive_avis']=='')                      
1617              $valF['avis_decision']= null;                      //On supprime les messages précédents
1618          else                      $this->msg = '';
1619              $valF['avis_decision']=$val['archive_avis'];                      $this->addToMessage(_("Une erreur s'est produite lors de ".
1620          // if= compatibilite pgsql                          "l'envoi du message au referentiel arrêté. Merci de ".
1621          if($val['archive_date_complet']!='')                          "contacter votre administrateur."));
1622              $valF['date_complet']=$val['archive_date_complet'];                      //On ne valide pas le formulaire
1623          if($val['archive_date_rejet']!='')                      $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1624              $valF['date_rejet']= $val['archive_date_rejet'];                      $this->correct = false;
1625          if($val['archive_date_limite']!='')                      return false;
1626              $valF['date_limite']= $val['archive_date_limite'];                  }
1627          if($val['archive_date_notification_delai']!='')                  else {
1628              $valF['date_notification_delai']= $val['archive_date_notification_delai'];                      $this->addToMessage(_("Le message a ete transmis au ".
1629          if($val['archive_date_decision']!='')                          "referentiel arrêté."));
1630              $valF['date_decision']= $val['archive_date_decision'];                  }
1631          if($val['archive_date_validite']!='')              }
1632              $valF['date_validite']= $val['archive_date_validite'];          }
1633          if($val['archive_date_achevement']!='')  
1634              $valF['date_achevement']= $val['archive_date_achevement'];          // Mise à jour des données du dossier d'autorisation
1635          if($val['archive_date_chantier']!='')          require_once "../obj/dossier_autorisation.class.php";
1636              $valF['date_chantier']= $val['archive_date_chantier'];          $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($this->valF['dossier']), $this->db, DEBUG);
1637          if($val['archive_date_conformite']!='')          if($da->majDossierAutorisation() === false) {
1638              $valF['date_conformite']= $val['archive_date_conformite'];              $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
1639                        $this->correct = false;
1640          $cle= " dossier = '".$val['dossier']."'";              return false;
         $res= $db->autoExecute(DB_PREFIXE.'dossier',$valF,DB_AUTOQUERY_UPDATE,$cle);  
         if (database::isError($res))  
             die($res->getMessage());  
         else{  
             if ($DEBUG == 1)  
                 echo "La requête de mise à jour est effectuée.<br>";  
1641          }          }
1642        }
1643    
1644        function triggersupprimer($id,&$db,$val,$DEBUG) {
1645            /**
1646             * L'objectif ici est de repositionner les valeurs récupérées en
1647             * archive dans le dossier d'instruction avant de supprimer l'événement
1648             * d'instruction
1649             */
1650            
1651                // Mise à jour des 4 valeurs modifiées par l'action
1652                $valF['delai'] = $val['archive_delai'];
1653                $valF['accord_tacite'] = $val['archive_accord_tacite'];
1654                $valF['etat'] = $val['archive_etat'];
1655                if ($val['archive_avis'] != '') {
1656                    $valF['avis_decision'] = $val['archive_avis'];
1657                } else {
1658                    $valF['avis_decision'] = NULL;
1659                }
1660                // Mise à jour des 10 dates avec la valeur présente dans le formulaire
1661                // de suppression. Si la valeur de la date est vide alors on fixe
1662                // à la valeur NULL
1663                //
1664                if ($val['archive_date_complet'] != '') {
1665                    $valF['date_complet'] = $val['archive_date_complet'];
1666                } else {
1667                    $valF['date_complet'] = NULL;
1668                }
1669                if ($val['archive_date_dernier_depot'] != '') {
1670                    $valF['date_dernier_depot'] = $val['archive_date_dernier_depot'];
1671                } else {
1672                    $valF['date_dernier_depot'] = NULL;
1673                }
1674                if ($val['archive_date_rejet'] != '') {
1675                    $valF['date_rejet'] = $val['archive_date_rejet'];
1676                } else {
1677                    $valF['date_rejet'] = NULL;
1678                }
1679                if ($val['archive_date_limite'] != '') {
1680                    $valF['date_limite'] = $val['archive_date_limite'];
1681                } else {
1682                    $valF['date_limite'] = NULL;
1683                }
1684                if ($val['archive_date_notification_delai'] != '') {
1685                    $valF['date_notification_delai'] = $val['archive_date_notification_delai'];
1686                } else {
1687                    $valF['date_notification_delai'] = NULL;
1688                }
1689                if ($val['archive_date_decision'] != '') {
1690                    $valF['date_decision'] = $val['archive_date_decision'];
1691                } else {
1692                    $valF['date_decision'] = NULL;
1693                }
1694                if ($val['archive_date_validite'] != '') {
1695                    $valF['date_validite'] = $val['archive_date_validite'];
1696                } else {
1697                    $valF['date_validite'] = NULL;
1698                }
1699                if ($val['archive_date_achevement'] != '') {
1700                    $valF['date_achevement'] = $val['archive_date_achevement'];
1701                } else {
1702                    $valF['date_achevement'] = NULL;
1703                }
1704                if ($val['archive_date_chantier'] != '') {
1705                    $valF['date_chantier'] = $val['archive_date_chantier'];
1706                } else {
1707                    $valF['date_chantier'] = NULL;
1708                }
1709                if ($val['archive_date_conformite'] != '') {
1710                    $valF['date_conformite'] = $val['archive_date_conformite'];
1711                } else {
1712                    $valF['date_conformite'] = NULL;
1713                }
1714                if ($val['archive_incompletude'] != '') {
1715                    $valF['incompletude'] = $val['archive_incompletude'];
1716                } else {
1717                    $valF['incompletude'] = NULL;
1718                }
1719                if ($val['archive_evenement_suivant_tacite'] != '') {
1720                    $valF['evenement_suivant_tacite'] = $val['archive_evenement_suivant_tacite'];
1721                } else {
1722                    $valF['evenement_suivant_tacite'] = NULL;
1723                }
1724                if ($val['archive_evenement_suivant_tacite_incompletude'] != '') {
1725                    $valF['evenement_suivant_tacite_incompletude'] = $val['archive_evenement_suivant_tacite_incompletude'];
1726                } else {
1727                    $valF['evenement_suivant_tacite_incompletude'] = NULL;
1728                }
1729                if ($val['archive_etat_pendant_incompletude'] != '') {
1730                    $valF['etat_pendant_incompletude'] = $val['archive_etat_pendant_incompletude'];
1731                } else {
1732                    $valF['etat_pendant_incompletude'] = NULL;
1733                }
1734                if ($val['archive_date_limite_incompletude'] != '') {
1735                    $valF['date_limite_incompletude'] = $val['archive_date_limite_incompletude'];
1736                } else {
1737                    $valF['date_limite_incompletude'] = NULL;
1738                }
1739                if ($val['archive_delai_incompletude'] != '') {
1740                    $valF['delai_incompletude'] = $val['archive_delai_incompletude'];
1741                } else {
1742                    $valF['delai_incompletude'] = NULL;
1743                }
1744                if ($val['archive_autorite_competente'] != '') {
1745                    $valF['autorite_competente'] = $val['archive_autorite_competente'];
1746                } else {
1747                    $valF['autorite_competente'] = NULL;
1748                }
1749                // On met à jour le dossier
1750                $cle = " dossier='".$val['dossier']."'";
1751                $res = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1752                $this->addToLog("triggersupprimer(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1753                if (database::isError($res)) {
1754                    die($res->getMessage());
1755                }
1756                // Affichage d'informations à l'utilisateur
1757                $this->addToMessage(_("Suppression de l'instruction")." [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1758        
1759                // Mise à jour de la demande si un récépissé d'instruction correspond à l'instruction à supprimer
1760      }      }
1761      // =============================================  
1762      // calcul de date avec ajout de mois (delais)      function triggersupprimerapres($id,&$db,$val,$DEBUG) {
1763      // [add months (delay) and calculation final date]  
1764      // LIMITE DE LA FONCTION si delai >24 MOIS          // Mise à jour des données du dossier d'autorisation
1765      // [limit : delay < 24 month]          require_once "../obj/dossier_autorisation.class.php";
1766      // =============================================          $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($val["dossier"]), $this->db, DEBUG);
1767      function moisdate($date,$delaimois) {          if($da->majDossierAutorisation() === false) {
1768         $temp = explode("-" , $date);              $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
1769         $jour = (int) $temp[2];              $this->correct = false;
1770         $mois = (int) $temp[1];              return false;
1771         $annee = (int) $temp[0];          }
        // calcul si delai superieur à 12 (limite 24) [delay > 24 month]  
        if($delaimois>=12){  
            $delaimois=$delaimois-12;  
            $annee=$annee+1;  
        }  
        if($delaimois>=12){  
            $delaimois=$delaimois-12;  
            $annee=$annee+1;  
        }  
        // mois  
        $mois=$mois+$delaimois;  
        // calcul mois annee  [calculation number of years if > 12 month]  
        // nb de mois > à 12  
        if ($mois>12){  
            $mois=$mois-12;  
            $annee=$annee+1;  
        }  
        // Calcul du nombre de jours dans le mois sélectionné [calculation number of days]  
         switch($mois) {  
             case "2":  
               if ($annee % 4 == 0 && $annee % 100 != 0 || $annee % 400 == 0)  
                   $jourmax = 29;  
               else  
                   $jourmax = 28;  
             break;  
             case "4":  
             case "6":  
             case "9":  
             case "11":  
              $jourmax = 30;  
              break;  
             default:  
              $jourmax = 31;  
         }  
         if ($jour > $jourmax)  
            $jour = $jourmax;  
     //$dateretour=$annee."-".$mois."-".$jour;  
     return $annee."-".$mois."-".$jour ;  
1772      }      }
1773    
1774      // Vérifie la restriction sur l'événement      // Vérifie la restriction sur l'événement
1775      function verifier($val = array(), &$db, $DEBUG){      function verifier($val = array(), &$db, $DEBUG){
1776          parent::verifier($val, $db, $DEBUG);          parent::verifier($val, $db, $DEBUG);
         //Récupère la restriction  
         $sql= "SELECT  
                   restriction  
               FROM  
                   ".DB_PREFIXE."evenement  
               WHERE  
                   evenement =".$this->valF['evenement'];  
1777    
1778          $res = $db->query($sql);          if ( isset($val['evenement']) && is_numeric($val['evenement'])){
1779          $this->f->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);              $restriction = $this->get_restriction($val['evenement']);
1780          $this->f->isDatabaseError();      
1781                        //Test qu'une restriction est présente
1782          $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);              if ($restriction != "" ){
1783                    
1784                    //Test si la restriction est valide
1785                    $this->restriction_valid = $this->restrictionIsValid($restriction);
1786                    if ( !$this->restriction_valid ){
1787                        
1788                        $this->addToMessage(_("Restriction non valide"));
1789                        $this->correct = false;
1790                        return false;
1791                    }
1792    
1793          //Test qu'une restriction est présente                  // Liste des opérateurs possible
1794          if ( isset($row['restriction']) && $row['restriction'] != "" ){                  $operateurs = array(">=", "<=", "+", "-");
1795                
1796              //Test si la restriction est valide                  // Supprime tous les espaces de la chaîne de caractère
1797              if ( !$this->restrictionIsValid($row['restriction']) ){                  $restriction = str_replace(' ', '', $restriction);
1798                                    
1799                  $this->correct=false;                  // Met des espace avant et après les opérateurs puis transforme la
1800                  $this->addToMessage(_("Restriction non valide"));                  // chaine en un tableau
1801                    $tabRestriction = str_replace($operateurs, " ", $restriction);
1802                    // Tableau des champ
1803                    $tabRestriction = explode(" ", $tabRestriction);
1804                    // Supprime les numériques du tableau
1805                    foreach ($tabRestriction as $key => $value) {
1806                        if (is_numeric($value)) {
1807                            unset($tabRestriction[$key]);
1808                        }
1809                    }
1810    
1811                    // Vérifie les champs utilisés pour la restriction
1812                    $check_field_exist = $this->f->check_field_exist($tabRestriction, 'instruction');
1813                    if ($check_field_exist !== true) {
1814    
1815                        // Liste des champs en erreur
1816                        $string_error_fields = implode(", ", $check_field_exist);
1817    
1818                        // Message d'erreur
1819                        $error_message = _("Le champ %s n'est pas utilisable pour le champ %s");
1820                        if (count($check_field_exist) > 1) {
1821                            $error_message = _("Les champs %s ne sont pas utilisable pour le champ %s");
1822                        }
1823    
1824                        // Affiche l'erreur
1825                        $this->correct=false;
1826                        $this->addToMessage(sprintf($error_message, $string_error_fields, _("restriction")));
1827                        $this->addToMessage(_("Veuillez contacter votre administrateur."));
1828                    }
1829              }              }
1830              else {  
1831                            }
1832                  $this->correct = true;          if(!$this->updateDate("date_envoi_signature")) {
1833                return false;
1834            }
1835            if(!$this->updateDate("date_retour_signature")) {
1836                return false;
1837            }
1838            if(!$this->updateDate("date_envoi_rar")) {
1839                return false;
1840            }
1841            if(!$this->updateDate("date_retour_rar")) {
1842                return false;
1843            }
1844            if(!$this->updateDate("date_envoi_controle_legalite")) {
1845                return false;
1846            }
1847            if(!$this->updateDate("date_retour_controle_legalite")) {
1848                return false;
1849            }
1850    
1851        }
1852    
1853        /**
1854         * Méthode permettant de récupérer toutes les valeurs de l'événement
1855         * sélectionné après validation du formulaire d'instruction
1856         *
1857         * @return array() veleurs de l'événement lié
1858         */
1859    
1860        private function getValEvenement() {
1861            if(!empty($this->valEvenement)) {
1862                return $this->valEvenement;
1863            } else {
1864                $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1865                    WHERE evenement=".$this->valF['evenement'];
1866                $res = $this->db->query($sql);
1867                $this->addToLog("getValEvenement(): db->query(\"".$sql."\");", VERBOSE_MODE);
1868                if (database::isError($res)) {
1869                    die($res->getMessage());
1870              }              }
1871                $this->valEvenement = $res->fetchRow(DB_FETCHMODE_ASSOC);
1872                return $this->valEvenement;
1873          }          }
1874      }      }
1875        
1876      /**      /**
1877       * Méthode permettant de mettre à jour l'état d'un DA       * Méthode permettant de savoir si le dossier lié à l'instruction à le flag
1878         * incompletude à true après validation du formulaire d'instruction
1879         *
1880         * @return boolean
1881       */       */
1882      function majEtatDA() {      private function dossierIncomplet() {
1883          if($this->valF['action'] == 'accepter' AND $this->valF['avis_decision'] == 8) {          $sql = "SELECT incompletude FROM ".DB_PREFIXE."dossier
1884              $val['etat_dossier_autorisation']=5;                  WHERE dossier='".$this->valF['dossier']."'";
1885          } elseif($this->valF['action'] == 'accepter' AND $this->valF['avis_decision'] == 15) {          $incompletude = $this->db->getOne($sql);
1886              $val['etat_dossier_autorisation']=3;          $this->addToLog("dossierIncomplet(): db->query(\"".$sql."\");", VERBOSE_MODE);
1887          } elseif($this->valF['action'] == 'accepter') {          if (database::isError($incompletude)) {
1888              $val['etat_dossier_autorisation']=2;              die($incompletude->getMessage());
1889          } elseif($this->valF['action'] == 'rejeter') {          }
1890              $val['etat_dossier_autorisation']=4;          if ($incompletude == 't') {
1891          } elseif($this->valF['action'] == 'terminer') {              return true;
             $val['etat_dossier_autorisation']=8;  
         } elseif($this->valF['action'] == 'majorer') {  
             $val['etat_dossier_autorisation']=6;  
1892          } else {          } else {
1893              $val['etat_dossier_autorisation']=7;              return false;
1894          }          }
1895                }
1896          //Récupération du numéro de dossier d'autorisation lié au dossier d'instruction      
1897          $IDdossier_autorisation = $this->getDossierAutorisation($this->valF['dossier']);      /**
1898               * Finalisation des documents.
1899          // Mis à jour de l'état du dossier d'autorisation       * @param  string $champ    champ du fichier à finaliser
1900          require_once '../obj/dossier_autorisation.class.php';       * @param  booleen $status  permet de définir si on finalise ou définalise
1901          $dossier_autorisation = new dossier_autorisation($IDdossier_autorisation,$this->db,DEBUG);       * @param  string $sousform permet de savoir si se trouve dans un sousformulaire (passé au javascript)
1902                 */
1903          $dossier_autorisation->val[array_search("etat_dossier_autorisation", $dossier_autorisation->champs)] = $val['etat_dossier_autorisation'];      function finaliser( $champ = '', $status, $sousform, $retourformulaire){
1904                            
1905          //Récupération des données                  
1906          $valDossierAutorisation = array();          // Recuperation de la valeur de la cle primaire de l'objet
1907          for ( $i=0 ; $i<count($dossier_autorisation->champs); $i++){          if($this->getVal($this->clePrimaire) != '')
1908                $id = $this->getVal($this->clePrimaire);
1909            else
1910                $id=$this->id;
1911                    
1912            //Si on finalise le document
1913            if ( $status == 1 ){
1914                
1915                //Génération du PDF
1916                $_GET['output'] = "string";
1917                $f = $this->f;
1918                include '../app/pdf_instruction.php';
1919                            
1920              $valDossierAutorisation[$dossier_autorisation->champs[$i]]=              //Métadonnées du document
1921                  $dossier_autorisation->val[$i];              $metadata = array(
1922                    'filename' => 'instruction_'.$idx.'.pdf',
1923                    'mimetype' => 'application/pdf',
1924                    'size' => strlen($pdf_output)
1925                );
1926    
1927                // Récupération des métadonnées calculées après validation
1928                $spe_metadata = $this->getMetadata("om_fichier_instruction");
1929    
1930                //On vérifie si l'instruction à finaliser a un événement de type arrete
1931                $sql = "SELECT type
1932                    FROM ".DB_PREFIXE."evenement
1933                    WHERE evenement = ".$this->getVal("evenement");
1934                $typeEvenement = $this->db->getOne($sql);
1935                $this->addToLog("getTitle(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
1936                if (database::isError($typeEvenement)) {
1937                    die();
1938                }
1939    
1940                //Initialisation de la variable
1941                $arrete_metadata = array();
1942                // Si l'événement est de type arrete, on ajoute les métadonnées spécifiques
1943                if ( $typeEvenement === 'arrete' ){
1944                    $arrete_metadata = $this->getMetadata("arrete");
1945                }
1946    
1947                $metadata = array_merge($metadata, $spe_metadata, $arrete_metadata);
1948                //Si le document a déjà été finalisé
1949                //on met à jour le document mais pas son uid
1950                if ( $this->getVal("om_fichier_instruction") != '' ){
1951                    $uid = $this->f->storage->update(
1952                        $this->getVal("om_fichier_instruction"), $pdf_output, $metadata);
1953                }
1954                //Sinon, on joute le document et on récupère son uid
1955                else {
1956                    //Stockage du PDF
1957                    $uid = $this->f->storage->create($pdf_output, $metadata);
1958                }
1959          }          }
1960            else {
1961          $dossier_autorisation->modifier($valDossierAutorisation, $this->db, DEBUG);              //Récupération de l'uid du document finalisé
1962      }              $uid = $this->getVal("om_fichier_instruction");
1963                    
1964     /**              //On dé-finalise avant de finaliser
1965      * Méthode permettant de mettre à jour les données d'un DA              if ( $uid == '' || $uid == 'OP_FAILURE' ){
1966      */                  
1967      function majDataDA() {                                  // Message d'echec (saut d'une ligne supplementaire avant le
1968                            // message pour qu'il soit mis en evidence)
1969          //Récupération du numéro de dossier d'autorisation lié au dossier d'instruction                  $this->addToLog(
1970          $IDdossier_autorisation = $this->getDossierAutorisation($this->valF['dossier']);                      _("Finalisation non enregistree")." - ".
1971          require_once '../obj/dossier_autorisation.class.php';                      _("id instruction")." = ".$id." - ".
1972          $dossier_autorisation = new dossier_autorisation($IDdossier_autorisation,$this->db,DEBUG);                      _("uid fichier")." = ".$uid
1973                            );
1974          require_once '../obj/dossier.class.php';                  return -1;
1975          $dossier = new dossier($this->valF['dossier'],$this->db,DEBUG);              }
1976                    }
1977          //Récupération des données                  
1978          $valDossierAutorisation = array();          //Mise à jour des données
1979          for ( $i=0 ; $i<count($dossier_autorisation->champs); $i++){          if ( $uid != '' && $uid != 'OP_FAILURE' ){
1980                // Logger
1981                $this->addToLog("finaliser() - begin", EXTRA_VERBOSE_MODE);
1982                            
1983              if ( array_search($dossier_autorisation->champs[$i], $dossier->champs) ){              $actions = array();
1984                //Tableau contenant le lien vers le PDF et lien du portlet pour la mise
1985                //à jour de l'interface
1986                if ( $status == 0 ){
1987                    $lien = '../app/pdf_instruction.php?idx='.$id;
1988                                    
1989                  $valDossierAutorisation[$dossier_autorisation->champs[$i]]=$dossier->getVal($dossier_autorisation->champs[$i]);                  //Ajout des actions
1990                    //Si l'utilisateur a le droit de modifier l'objet
1991                    if ( $this->f->isAccredited('instruction') ||
1992                        $this->f->isAccredited('instruction_modifier') ){
1993                            
1994                        $actions["modifier"] = ($sousform!='')?
1995                            '<li><a href="#" onclick="ajaxIt(\'instruction\',
1996                            \'../scr/sousform.php?obj=instruction&amp;action=1&amp;idx='.
1997                            $this->getVal($this->clePrimaire).
1998                            '&amp;premiersf=0&amp;trisf=&amp;retourformulaire='.$retourformulaire.'&amp;idxformulaire='.
1999                            $this->getVal("dossier").
2000                            '&amp;retour=form\');">
2001                            <span class="om-prev-icon om-icon-16 edit-16" title="'.
2002                            _('Modifier').'">'.
2003                            _('Modifier').
2004                            '</span></a></li>':
2005                            '<li>
2006                            <a href="form.php?obj=instruction&amp;action=1'.'&amp;idx='.
2007                            $this->getVal($this->clePrimaire).
2008                            '&amp;premier=&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=form">
2009                            <span class="om-prev-icon om-icon-16 edit-16" title="'.
2010                            _('Modifier').'">'.
2011                            _('Modifier').
2012                            '</span></a></li>';
2013                    }
2014                    //Si l'utilisateur a le droit de supprimer l'objet
2015                    if ( $this->f->isAccredited('instruction') ||
2016                        $this->f->isAccredited('instruction_supprimer') ){
2017                            
2018                        $actions["supprimer"] = ($sousform!='')?
2019                            '<li><a href="#" onclick="ajaxIt(\'instruction\',
2020                            \'../scr/sousform.php?obj=instruction&amp;action=2&amp;idx='.
2021                            $this->getVal($this->clePrimaire).
2022                            '&amp;premiersf=0&amp;trisf=&amp;retourformulaire='.$retourformulaire.'&amp;idxformulaire='.
2023                            $this->getVal("dossier").
2024                            '&amp;retour=form\');">
2025                            <span class="om-prev-icon om-icon-16 delete-16" title="'.
2026                            _('Supprimer').'">'.
2027                            _('Supprimer').
2028                            '</span></a></li>':
2029                            '<li>
2030                            <a href="form.php?obj=instruction&amp;action=1'.'&amp;idx='.
2031                            $this->getVal($this->clePrimaire).
2032                            '&amp;premier=&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=form">
2033                            <span class="om-prev-icon om-icon-16 delete-16" title="'.
2034                            _('Supprimer').'">'.
2035                            _('Supprimer').
2036                            '</span></a></li>';
2037                    }
2038              }              }
2039              else {              else {
2040                  $valDossierAutorisation[$dossier_autorisation->champs[$i]]=                  $lien = '../spg/file.php?obj=instruction&'.
2041                  $dossier_autorisation->val[$i];                      'champ=om_fichier_instruction&id='.$id;
2042                }
2043    
2044               $retour = array(
2045                    "portlet"=> "<a href=\"#\" onclick=\"finalizeDocument(".
2046                        $id.", 'instruction', '".$sousform."', ".(($status==0)?1:0).")\">
2047                        <span class=\"om-prev-icon om-icon-16 om-icon-fix "
2048                        .(($status==1)?"de":"")."finalise\" title=\"".
2049                        (($status==1)?_("Reprendre la redaction du document"):_("Finaliser le document"))."\">".
2050                        (($status==1)?_("Reprendre la redaction du document"):_("Finaliser le document"))."</span>
2051                        </a>",
2052                    "pdf" => $lien,
2053                    "actions" => $actions
2054                );
2055    
2056                foreach ( $this->champs as $key=>$value )
2057                    $val[$value] = $this->val[$key];
2058                $val['date_evenement']=$this->dateDBToForm($val['date_evenement']);
2059                $val['archive_date_complet']=$this->dateDBToForm($val['archive_date_complet']);
2060                $val['archive_date_rejet']=$this->dateDBToForm($val['archive_date_rejet']);
2061                $val['archive_date_limite']=$this->dateDBToForm($val['archive_date_limite']);
2062                $val['archive_date_notification_delai']=$this->dateDBToForm($val['archive_date_notification_delai']);
2063                $val['archive_date_decision']=$this->dateDBToForm($val['archive_date_decision']);
2064                $val['archive_date_validite']=$this->dateDBToForm($val['archive_date_validite']);
2065                $val['archive_date_achevement']=$this->dateDBToForm($val['archive_date_achevement']);
2066                $val['archive_date_chantier']=$this->dateDBToForm($val['archive_date_chantier']);
2067                $val['archive_date_conformite']=$this->dateDBToForm($val['archive_date_conformite']);
2068                $val['archive_date_dernier_depot']=$this->dateDBToForm($val['archive_date_dernier_depot']);
2069                $val['archive_date_limite_incompletude']=$this->dateDBToForm($val['archive_date_limite_incompletude']);
2070                $val['date_finalisation_courrier']=$this->dateDBToForm($val['date_finalisation_courrier']);
2071                $val['date_envoi_signature']=$this->dateDBToForm($val['date_envoi_signature']);
2072                $val['date_retour_signature']=$this->dateDBToForm($val['date_retour_signature']);
2073                $val['date_envoi_rar']=$this->dateDBToForm($val['date_envoi_rar']);
2074                $val['date_retour_rar']=$this->dateDBToForm($val['date_retour_rar']);
2075                $val['date_envoi_controle_legalite']=$this->dateDBToForm($val['date_envoi_controle_legalite']);
2076                $val['date_retour_controle_legalite']=$this->dateDBToForm($val['date_retour_controle_legalite']);
2077                
2078                $this->setvalF($val);
2079    
2080                // Verification de la validite des donnees
2081                $this->verifier($this->val, $this->db, DEBUG);
2082                // Verification du verrou
2083                $this->testverrou();
2084                // Si les verifications precedentes sont correctes, on procede a
2085                // la modification, sinon on ne fait rien et on retourne une erreur
2086                if ($this->correct) {
2087                    // Execution du trigger 'before' specifique au MODE 'update'
2088                    $this->triggermodifier( $id, $this->db, $this->val, DEBUG);
2089                    $valF = array(
2090                            "om_final_instruction"=> ($status==1)?TRUE:FALSE,
2091                            "om_fichier_instruction"=>$uid,
2092                            "date_finalisation_courrier"=>date('Y-m-d'));
2093                    // Execution de la requête de modification des donnees de l'attribut
2094                    // valF de l'objet dans l'attribut table de l'objet
2095                    $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF,
2096                        DB_AUTOQUERY_UPDATE, $this->getCle($id));
2097                     $this->addToLog("finaliser() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id)."\")", VERBOSE_MODE);
2098                    // Si une erreur survient
2099                    if (database::isError($res)) {
2100                        // Appel de la methode de recuperation des erreurs
2101                        $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
2102                    } else {
2103                        // Log
2104                        $this->addToLog(_("Requete executee"), VERBOSE_MODE);
2105                        // Log
2106                        $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
2107                        $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
2108                        $message .= "[&nbsp;".$this->db->affectedRows()."&nbsp;";
2109                        $message .= _("enregistrement(s) mis a jour")."&nbsp;]";
2110                        $this->addToLog($message, VERBOSE_MODE);
2111                        // Mise en place du verrou pour ne pas finaliser plusieurs fois
2112                        // le meme document
2113                        $this->verrouille();
2114                        // Execution du trigger 'after' specifique au MODE 'update'
2115                        //$this->triggermodifierapres($id, $this->db, $val, DEBUG);
2116    
2117                        return $retour;
2118                    }
2119                } else {
2120                    // Message d'echec (saut d'une ligne supplementaire avant le
2121                    // message pour qu'il soit mis en evidence)
2122                    $this->addToLog(
2123                        _("Finalisation non enregistree")." - ".
2124                        _("id instruction")." = ".$id." - ".
2125                        _("uid fichier")." = ".$uid
2126                    );
2127                    return -1;
2128              }              }
2129          }          }
2130            // Si le document n'a pas été stocké
2131            else{
2132                $this->addToLog(
2133                    _("Finalisation non enregistree")." - ".
2134                    _("id instruction")." = ".$id." - ".
2135                    _("uid fichier")." = ".$uid
2136                );
2137                return -1;
2138            }
2139        }
2140    
2141          $dossier_autorisation->modifier($valDossierAutorisation, $this->db, DEBUG);      /**
2142                 * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
2143          // Suppression du liens entre les lots et le DA       * @return string numéro de dossier d'instruction
2144          $valLot['dossier_autorisation'] = NULL;       */
2145          $this->db->autoExecute(DB_PREFIXE."lot", $valLot, DB_AUTOQUERY_UPDATE, "dossier_autorisation='".$IDdossier_autorisation."'");      protected function getDossier() {
2146                    if(empty($this->specificMetadata)) {
2147          // Liaison des lots du DI avec le DA              $this->getSpecificMetadata();
         $sqlLot = "SELECT lot FROM ".DB_PREFIXE."lien_dossier_lot WHERE dossier='".$this->valF['dossier']."'";  
         $res = $this->db->query($sqlLot);  
         $this->addToLog($sqlLot);  
         $this->f->isDatabaseError();  
         while($rowLot = $res->fetchRow(DB_FETCHMODE_ASSOC)) {  
             $valLot['dossier_autorisation'] = $IDdossier_autorisation;  
             $this->db->autoExecute(DB_PREFIXE."lot", $valLot, DB_AUTOQUERY_UPDATE, "lot=".$rowLot['lot']);  
2148          }          }
2149            return $this->specificMetadata->dossier;
2150      }      }
2151            /**
2152      // Récupération de l'identifiant du dossier d'autorisation lié au dossier d'instruction       * Récupération la version du dossier d'instruction à ajouter aux métadonnées
2153      function getDossierAutorisation($dossier_instruction){       * @return int Version
2154         */
2155        protected function getDossierVersion() {
2156            if(empty($this->specificMetadata)) {
2157                $this->getSpecificMetadata();
2158            }
2159            return $this->specificMetadata->version;
2160        }
2161        /**
2162         * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
2163         * @return string numéro de dossier d'autorisation
2164         */
2165        protected function getNumDemandeAutor() {
2166            if(empty($this->specificMetadata)) {
2167                $this->getSpecificMetadata();
2168            }
2169            return $this->specificMetadata->dossier_autorisation;
2170        }
2171        /**
2172         * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
2173         * @return date de la demande initiale
2174         */
2175        protected function getAnneemoisDemandeAutor() {
2176            if(empty($this->specificMetadata)) {
2177                $this->getSpecificMetadata();
2178            }
2179            return $this->specificMetadata->date_demande_initiale;
2180        }
2181        /**
2182         * Récupération du type de dossier d'instruction à ajouter aux métadonnées
2183         * @return string type du dossier d'instruction
2184         */
2185        protected function getTypeInstruction() {
2186            if(empty($this->specificMetadata)) {
2187                $this->getSpecificMetadata();
2188            }
2189            return $this->specificMetadata->dossier_instruction_type;
2190        }
2191        /**
2192         * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
2193         * @return string avis
2194         */
2195        protected function getStatutAutorisation() {
2196            if(empty($this->specificMetadata)) {
2197                $this->getSpecificMetadata();
2198            }
2199            return $this->specificMetadata->statut;
2200        }
2201        /**
2202         * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
2203         * @return string type du dossier d'autorisation
2204         */
2205        protected function getTypeAutorisation() {
2206            if(empty($this->specificMetadata)) {
2207                $this->getSpecificMetadata();
2208            }
2209            return $this->specificMetadata->dossier_autorisation_type;
2210        }
2211        /**
2212         * Récupération de la date d'ajout de document à ajouter aux métadonnées
2213         * @return date de l'évènement
2214         */
2215        protected function getDateEvenementDocument() {
2216            return date("Y-m-d");
2217        }
2218        /**
2219         * Récupération du groupe d'instruction à ajouter aux métadonnées
2220         * @return string Groupe d'instruction
2221         */
2222        protected function getGroupeInstruction() {
2223            if(empty($this->specificMetadata)) {
2224                $this->getSpecificMetadata();
2225            }
2226            return $this->specificMetadata->groupe_instruction;
2227        }
2228        /**
2229         * Récupération du libellé du type du document à ajouter aux métadonnées
2230         * @return string Groupe d'instruction
2231         */
2232        protected function getTitle() {
2233    
2234            // Récupère le champ événement
2235            if (isset($this->valF["evenement"]) AND $this->valF["evenement"] != "") {
2236                $evenement = $this->valF["evenement"];
2237            } else {
2238                $evenement = $this->getVal("evenement");
2239            }
2240    
2241            // Requête sql
2242            $sql = "SELECT libelle FROM ".DB_PREFIXE."evenement
2243                    WHERE evenement=".$evenement;
2244            $evenement_libelle = $this->db->getOne($sql);
2245            $this->addToLog("getTitle(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2246            if (database::isError($evenement_libelle)) {
2247                die();
2248            }
2249    
2250            // Retourne le libelle de l'événement
2251            return $evenement_libelle;
2252        }
2253    
2254        /**
2255         * Cette méthode permet de stocker en attribut toutes les métadonnées
2256         * nécessaire à l'ajout d'un document.
2257         */
2258        public function getSpecificMetadata() {
2259            if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
2260                $dossier = $this->valF["dossier"];
2261            } else {
2262                $dossier = $this->getVal("dossier");
2263            }
2264            //Requête pour récupérer les informations essentiels sur le dossier d'instruction
2265            $sql = "SELECT dossier.dossier as dossier,
2266                            dossier_autorisation.dossier_autorisation as dossier_autorisation,
2267                            to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
2268                            dossier_instruction_type.code as dossier_instruction_type,
2269                            etat_dossier_autorisation.libelle as statut,
2270                            dossier_autorisation_type.code as dossier_autorisation_type,
2271                            groupe.code as groupe_instruction
2272                    FROM ".DB_PREFIXE."dossier
2273                        LEFT JOIN ".DB_PREFIXE."dossier_instruction_type  
2274                            ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2275                        LEFT JOIN ".DB_PREFIXE."dossier_autorisation
2276                            ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
2277                        LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
2278                            ON  dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
2279                        LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
2280                            ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2281                        LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
2282                            ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
2283                        LEFT JOIN ".DB_PREFIXE."groupe
2284                            ON dossier_autorisation_type.groupe = groupe.groupe
2285                    WHERE dossier.dossier = '".$dossier."'";
2286            $res = $this->db->query($sql);
2287            $this->f->addToLog("getSpecificMetadata() : db->query(".$sql.")", VERBOSE_MODE);
2288            if ( database::isError($res)){
2289                die();
2290            }
2291                    
2292          $sql = "SELECT          //Le résultat est récupéré dans un objet
2293                      dossier_autorisation.dossier_autorisation          $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
2294                  FROM  
2295                      ".DB_PREFIXE."dossier_autorisation          //Si il y a un résultat
2296                  LEFT JOIN          if ($row !== null) {
2297                    
2298                //Génération du numéro de version
2299                $sql = "SELECT
2300                            count(*)
2301                    FROM
2302                      ".DB_PREFIXE."dossier                      ".DB_PREFIXE."dossier
2303                    LEFT JOIN
2304                        ".DB_PREFIXE."dossier_autorisation
2305                      ON                      ON
2306                          dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation                          dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
2307                    LEFT JOIN
2308                        ".DB_PREFIXE."dossier_instruction_type
2309                        ON
2310                            dossier_instruction_type.dossier_instruction_type = dossier.dossier_instruction_type
2311                  WHERE                  WHERE
2312                      dossier.dossier = '".$dossier_instruction."'";                      dossier_autorisation.dossier_autorisation = '".$row->dossier_autorisation."'
2313                              AND
2314          $IDdossier_autorisation = $this->db->getOne($sql);                      dossier_instruction_type.code = '".$row->dossier_instruction_type."'";
2315          $this->addToLog("getDossierAutorisation(): db->getone(\"".$sql."\")", VERBOSE_MODE);              $row->version = $this->db->getOne($sql);
2316          database::isError($IDdossier_autorisation);              $this->f->addToLog("getSpecificMetadata(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
2317                if ( database::isError($row->version)){
2318                    $this->f->addToError("", $row->version, $row->version);
2319                    return false;
2320                }
2321                
2322                //Formatage du numéro de version
2323                $row->version = str_pad($row->version, 2, "0", STR_PAD_LEFT);
2324    
2325                //Alors on créé l'objet dossier_instruction
2326                $this->specificMetadata = $row;
2327    
2328            }
2329        }
2330        
2331        /**
2332         * Retourne le statut du dossier d'instruction
2333         * @param string $idx Identifiant du dossier d'instruction
2334         * @return string Le statut du dossier d'instruction
2335         */
2336        function getStatutAutorisationDossier($idx){
2337            
2338            $statut = '';
2339                    
2340          return $IDdossier_autorisation;          //Si l'identifiant du dossier d'instruction fourni est correct
2341            if ( $idx != '' ){
2342                
2343                //On récupère le statut de l'état du dossier à partir de l'identifiant du
2344                //dossier
2345                $sql = "SELECT etat.statut
2346                    FROM ".DB_PREFIXE."dossier
2347                    LEFT JOIN
2348                        ".DB_PREFIXE."etat
2349                        ON
2350                            dossier.etat = etat.etat
2351                    WHERE dossier ='".$idx."'";
2352                $statut = $this->db->getOne($sql);
2353                $this->f->addToLog("getStatutAutorisationDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
2354                if ( database::isError($statut)){
2355                    die();
2356                }
2357            }
2358            return $statut;
2359        }
2360    
2361        /**
2362         * Récupère les données du dossier
2363         * @return array
2364         */
2365        function get_dossier_actual() {
2366    
2367            // Initialisation de la valeur de retour
2368            $return = array();
2369    
2370            // Récupération de toutes les valeurs du dossier d'instruction en cours
2371            $sql = "SELECT * FROM ".DB_PREFIXE."dossier
2372            WHERE dossier='".$this->valF['dossier']."'";
2373            $res = $this->db->query($sql);
2374            $this->addToLog("get_dossier_actual(): db->query(\"".$sql."\");", VERBOSE_MODE);
2375            $this->f->isDatabaseError($res);
2376    
2377            //
2378            while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
2379    
2380                // Récupération de la valeur actuelle du délai, de l'accord tacite,
2381                // de l'état et de l'avis du dossier d'instruction
2382                $return['archive_delai']=$row['delai'];
2383                $return['archive_accord_tacite']=$row['accord_tacite'];
2384                $return['archive_etat']=$row['etat'];
2385                $return['archive_avis']=$row['avis_decision'];
2386                // Récupération de la valeur actuelle des 9 dates du dossier
2387                // d'instruction
2388                $return['archive_date_complet']=$row['date_complet'];
2389                $return['archive_date_dernier_depot']=$row['date_dernier_depot'];
2390                $return['archive_date_rejet']= $row['date_rejet'];
2391                $return['archive_date_limite']= $row['date_limite'];
2392                $return['archive_date_notification_delai']= $row['date_notification_delai'];
2393                $return['archive_date_decision']= $row['date_decision'];
2394                $return['archive_date_validite']= $row['date_validite'];
2395                $return['archive_date_achevement']= $row['date_achevement'];
2396                $return['archive_date_chantier']= $row['date_chantier'];
2397                $return['archive_date_conformite']= $row['date_conformite'];  
2398                $return['archive_incompletude']= $row['incompletude'];  
2399                $return['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];  
2400                $return['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];  
2401                $return['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];  
2402                $return['archive_date_limite_incompletude']= $row['date_limite_incompletude'];  
2403                $return['archive_delai_incompletude']= $row['delai_incompletude'];  
2404                $return['archive_autorite_competente']= $row['autorite_competente'];  
2405                $return['duree_validite']= $row['duree_validite'];  
2406            }
2407    
2408            // Retour de la fonction
2409            return $return;
2410    
2411      }      }
2412    
2413        /**
2414         * Permet de vérifier qu'un événement est verrouillable
2415         * @param  integer $idx     Identifiant de l'instruction
2416         * @return boolean          
2417         */
2418        function checkEvenementNonVerrouillable($idx) {
2419    
2420            // Initialisation du résultat
2421            $non_verrouillable = false;
2422    
2423            // Si la condition n'est pas vide
2424            if ($idx != "") {
2425    
2426                // Requête SQL
2427                $sql = "SELECT evenement.non_verrouillable
2428                        FROM ".DB_PREFIXE."evenement
2429                        LEFT JOIN ".DB_PREFIXE."instruction
2430                            ON instruction.evenement = evenement.evenement
2431                        WHERE instruction.instruction = $idx";
2432                $this->f->addToLog("checkEvenementNonVerrouillable() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
2433                $res = $this->db->getOne($sql);
2434                $this->f->isDatabaseError($res);
2435    
2436                // Si le retour de la requête est true
2437                if ($res == 't') {
2438                    //
2439                    $non_verrouillable = true;
2440                }
2441            }
2442    
2443            // Retourne résultat
2444            return $non_verrouillable;
2445        }
2446        
2447        /**
2448         * Mise à jour des champs archive_*
2449         * @param mixed $row La ligne de données
2450         */
2451        public function updateArchiveData($row){
2452            
2453            // Récupération de la valeur actuelle du délai, de l'accord tacite,
2454            // de l'état et de l'avis du dossier d'instruction
2455            $this->valF['archive_delai']=$row['delai'];
2456            $this->valF['archive_accord_tacite']=$row['accord_tacite'];
2457            $this->valF['archive_etat']=$row['etat'];
2458            $this->valF['archive_avis']=$row['avis_decision'];
2459            // Récupération de la valeur actuelle des 9 dates du dossier
2460            // d'instruction
2461            if ($row['date_complet'] != '') {
2462                $this->valF['archive_date_complet']=$row['date_complet'];
2463            }
2464            if ($row['date_dernier_depot'] != '') {
2465                $this->valF['archive_date_dernier_depot']=$row['date_dernier_depot'];
2466            }
2467            if ($row['date_rejet']!='') {
2468                $this->valF['archive_date_rejet']= $row['date_rejet'];
2469            }
2470            if ($row['date_limite']!='') {
2471                $this->valF['archive_date_limite']= $row['date_limite'];
2472            }
2473            if ($row['date_notification_delai']!='') {
2474                $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];
2475            }
2476            if ($row['date_decision']!='') {
2477                $this->valF['archive_date_decision']= $row['date_decision'];
2478            }
2479            if ($row['date_validite']!='') {
2480                $this->valF['archive_date_validite']= $row['date_validite'];
2481            }
2482            if ($row['date_achevement']!='') {
2483                $this->valF['archive_date_achevement']= $row['date_achevement'];
2484            }
2485            if ($row['date_chantier']!='') {
2486                $this->valF['archive_date_chantier']= $row['date_chantier'];
2487            }
2488            if ($row['date_conformite']!='') {
2489                $this->valF['archive_date_conformite']= $row['date_conformite'];  
2490            }
2491            if ($row['incompletude']!='') {
2492                $this->valF['archive_incompletude']= $row['incompletude'];  
2493            }
2494            if ($row['evenement_suivant_tacite']!='') {
2495                $this->valF['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];  
2496            }
2497            if ($row['evenement_suivant_tacite_incompletude']!='') {
2498                $this->valF['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];  
2499            }
2500            if ($row['etat_pendant_incompletude']!='') {
2501                $this->valF['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];  
2502            }
2503            if ($row['date_limite_incompletude']!='') {
2504                $this->valF['archive_date_limite_incompletude']= $row['date_limite_incompletude'];  
2505            }
2506            if ($row['delai_incompletude']!='') {
2507                $this->valF['archive_delai_incompletude']= $row['delai_incompletude'];  
2508            }
2509            if ($row['autorite_competente']!='') {
2510                $this->valF['archive_autorite_competente']= $row['autorite_competente'];  
2511            }
2512            if ($row['duree_validite']!='') {
2513                $this->valF['duree_validite']= $row['duree_validite'];  
2514            }
2515        }
2516    
2517        // {{{
2518        // Méthodes de récupération des métadonnées arrêté
2519        /**
2520         * @return string Retourne le numéro d'arrêté
2521         */
2522        function getNumArrete() {
2523            return $this->getVal("numero_arrete");
2524        }
2525        /**
2526         * @return chaîne vide
2527         */
2528        function getReglementaireArrete() {
2529            return 'true';
2530        }
2531        /**
2532         * @return boolean de notification au pétitionnaire
2533         */
2534        function getNotificationArrete() {
2535            return 'true';
2536        }
2537        /**
2538         * @return date de notification au pétitionnaire
2539         */
2540        function getDateNotificationArrete() {
2541            if (empty($this->metadonneesArrete)) {
2542                $this->getArreteMetadata();
2543            }
2544            return $this->metadonneesArrete["datenotification"];
2545        }
2546        /**
2547         * @return boolean check si le document est passé au contrôle de légalité
2548         */
2549        function getControleLegalite() {
2550            return 'true';
2551        }
2552        /**
2553         * @return date de signature de l'arrêté
2554         */
2555        function getDateSignature() {
2556            if (empty($this->metadonneesArrete)) {
2557                $this->getArreteMetadata();
2558            }
2559            return $this->metadonneesArrete["datesignaturearrete"];
2560        }
2561        /**
2562         * @return string nom du signataire
2563         */
2564        function getNomSignataire() {
2565            if (empty($this->metadonneesArrete)) {
2566                $this->getArreteMetadata();
2567            }
2568            return $this->metadonneesArrete["nomsignataire"];
2569        }
2570        /**
2571         * @return string qualité du signataire
2572         */
2573        function getQualiteSignataire() {
2574            if (empty($this->metadonneesArrete)) {
2575                $this->getArreteMetadata();
2576            }
2577            return $this->metadonneesArrete["qualitesignataire"];
2578        }
2579        /**
2580         * @return string numéro du terrain
2581         */
2582        function getAp_numRue() {
2583            if (empty($this->metadonneesArrete)) {
2584                $this->getArreteMetadata();
2585            }
2586            return $this->metadonneesArrete["ap_numrue"];
2587        }
2588        /**
2589         * @return string nom de la rue du terrain
2590         */
2591        function getAp_nomDeLaVoie() {
2592            if (empty($this->metadonneesArrete)) {
2593                $this->getArreteMetadata();
2594            }
2595            return $this->metadonneesArrete["ap_nomdelavoie"];
2596        }
2597        /**
2598         * @return string code postal du terrain
2599         */
2600        function getAp_codePostal() {
2601            if (empty($this->metadonneesArrete)) {
2602                $this->getArreteMetadata();
2603            }
2604            return $this->metadonneesArrete["ap_codepostal"];
2605        }
2606        /**
2607         * @return string ville du terrain
2608         */
2609        function getAp_ville() {
2610            if (empty($this->metadonneesArrete)) {
2611                $this->getArreteMetadata();
2612            }
2613            return $this->metadonneesArrete["ap_ville"];
2614        }
2615        /**
2616         * @return string activité
2617         */
2618        function getActivite() {
2619            return "Droit du sol";
2620        }
2621        /**
2622         * @return string date du retour de controle légalité
2623         */
2624        function getDateControleLegalite() {
2625            if (empty($this->metadonneesArrete)) {
2626                $this->getArreteMetadata();
2627            }
2628            return $this->metadonneesArrete["datecontrolelegalite"];
2629        }
2630    
2631        // Fin des méthodes de récupération des métadonnées
2632        // }}}
2633    
2634        /**
2635         * Méthode de récupération des métadonnées arrêtés dans la base de données,
2636         * les données sont stockés dans l'attribut $this->metadonneesArrete
2637         */
2638        function getArreteMetadata() {
2639    
2640        //Récupération de la dernière instruction dont l'événement est de type 'arrete'
2641        $this->metadonneesArrete = array("nomsignataire"=>"", "qualitesignataire"=>"",
2642            "decisionarrete"=>"", "datenotification"=>"", "datesignaturearrete"=>"",
2643            "datecontrolelegalite"=>"", "ap_numrue"=>"", "ap_nomdelavoie"=>"",
2644            "ap_codepostal"=>"", "ap_ville"=>"");
2645    
2646            $sqlArrete = "SELECT    signataire_arrete.nom as \"nomsignataire\",
2647                    signataire_arrete.qualite as \"qualitesignataire\",
2648                    instruction.etat as \"decisionarrete\",
2649                    instruction.date_retour_rar as \"datenotification\",
2650                    instruction.date_retour_signature as \"datesignaturearrete\",
2651                    instruction.date_retour_controle_legalite as \"datecontrolelegalite\",
2652                    dossier.terrain_adresse_voie_numero as \"ap_numrue\",
2653                    dossier.terrain_adresse_voie as \"ap_nomdelavoie\",
2654                    dossier.terrain_adresse_code_postal as \"ap_codepostal\",
2655                    dossier.terrain_adresse_localite as \"ap_ville\"
2656                FROM ".DB_PREFIXE."instruction
2657                LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
2658                    instruction.signataire_arrete = signataire_arrete.signataire_arrete
2659                LEFT JOIN ".DB_PREFIXE."dossier ON
2660                    instruction.dossier = dossier.dossier
2661                LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
2662                        donnees_techniques.dossier_instruction = dossier.dossier
2663                WHERE instruction.instruction = ".$this->getVal("instruction");
2664            $resArrete = $this->db->query($sqlArrete);
2665            $this->f->addToLog("getArreteMetadata(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
2666            if ( database::isError($resArrete)){
2667                die();
2668            }
2669    
2670            $this->metadonneesArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
2671        }
2672    
2673  }// fin classe  }// fin classe
2674  ?>  ?>

Legend:
Removed from v.1439  
changed lines
  Added in v.3050

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26