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

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

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

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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26