/[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 1571 by nhaye, Thu Mar 28 12:22:00 2013 UTC revision 2604 by vpihour, Wed Dec 11 15:22:26 2013 UTC
# Line 32  class instruction extends instruction_ge Line 32  class instruction extends instruction_ge
32      var $archive_date_depot; // specific      var $archive_date_depot; // specific
33      var $retourformulaire;   // specific      var $retourformulaire;   // specific
34      var $idxformulaire;      // specific      var $idxformulaire;      // specific
35        var $valEvenement;
36        // Tableau contenant une partie des métadonnées arrêtés
37        var $metadonneesArrete;
38    
39        var $metadata = array(
40            "om_fichier_instruction" => array(
41                "dossier" => "getDossier",
42                "dossier_version" => "getDossierVersion",
43                "numDemandeAutor" => "getNumDemandeAutor",
44                "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
45                "typeInstruction" => "getTypeInstruction",
46                "statutAutorisation" => "getStatutAutorisation",
47                "typeAutorisation" => "getTypeAutorisation",
48                "dateEvenementDocument" => "getDateEvenementDocument",
49                "groupeInstruction" => 'getGroupeInstruction',
50                "title" => 'getTitle',
51            ),
52        );
53    
54      function instruction($id, &$db, $debug) {  
55        function __construct($id, &$db, $debug) {
56          $this->constructeur($id, $db, $debug);          $this->constructeur($id, $db, $debug);
57      }      }
58    
# Line 51  class instruction extends instruction_ge Line 70  class instruction extends instruction_ge
70              && isset($this->f->om_utilisateur["division"])              && isset($this->f->om_utilisateur["division"])
71              && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {              && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
72              //              //
73              $this->actions_sup = array();              //On cache les liens d'action
74              $this->setParameter("actions", array());              $this->parameters["actions"]["modifier"] = NULL;
75                $this->parameters["actions"]["supprimer"] = NULL;
76                $this->actions_sup["finalisation"] = NULL;
77          }          }
78          // Si une action 'lu' est présente et que le champ lu est à true          // Si une action 'lu' est présente et que le champ lu est à true
79          // on supprime l'action          // on supprime l'action
# Line 61  class instruction extends instruction_ge Line 82  class instruction extends instruction_ge
82              && $this->val[array_search("lu", $this->champs)]== "t") {              && $this->val[array_search("lu", $this->champs)]== "t") {
83              unset($this->actions_sup["lu"]);              unset($this->actions_sup["lu"]);
84          }          }
85                
86            //Si le document est déjà finalisé, on affiche uniquement le lien de
87            //dé-finalisation
88            $om_final_instruction = $this->getVal("om_final_instruction");
89            if ( isset($this->actions_sup["finalisation"]) &&
90                $om_final_instruction== "t" ){
91                    
92                //On cache les liens d'action
93                $this->parameters["actions"]["modifier"] = NULL;
94                $this->parameters["actions"]["supprimer"] = NULL;
95                //On cache le lien de finalisation et on affiche le bon lien pour l'édition
96                $this->actions_sup["finalisation"] = NULL;
97                $this->actions_sup["pdfetat"]["lien"] = "../spg/file.php?id=";
98                $this->actions_sup["pdfetat"]["id"] =
99                    "&obj=instruction&champ=om_fichier_instruction";
100            }
101            //Si le document n'est pas finalisé, on affiche uniquement le lien de
102            //finalisation
103            if ( isset($this->actions_sup["definalisation"]) &&
104                $om_final_instruction!= "t" ){
105                    
106                //On cache le lien de finalisation et on affiche le bon lien pour l'édition
107                $this->actions_sup["definalisation"] = NULL;
108                $this->actions_sup["pdfetat"]["lien"] = "../app/pdf_instruction.php?idx=";
109                $this->actions_sup["pdfetat"]["id"] = "";
110            }
111            
112            $idxformulaire = $this->getParameter("idxformulaire");
113            $retourformulaire = $this->getParameter("retourformulaire");
114            //Si le dossier d'instruction auquel est rattachée l'instruction est cloturé,
115            //on affiche pas les liens du portlet
116            if ( $idxformulaire != '' &&
117                (
118                    $retourformulaire == 'dossier' ||
119                    $retourformulaire == 'dossier_instruction' ||
120                    $retourformulaire == 'dossier_instruction_mes_encours' ||
121                    $retourformulaire == 'dossier_instruction_tous_encours' ||
122                    $retourformulaire == 'dossier_instruction_mes_clotures' ||
123                    $retourformulaire == 'dossier_instruction_tous_clotures'
124                )){
125    
126                //On récuppère le statut du dossier d'instruction        
127                $statut = $this->getStatutAutorisationDossier($idxformulaire);
128                if ( $this->f->isUserInstructeur() && $statut == "cloture" ){
129                    
130                    //On cache le lien de modification
131                    $this->parameters["actions"]["modifier"] = NULL;
132                    $this->actions_sup["finalisation"] = NULL;
133                    $this->actions_sup["definalisation"] = NULL;
134                }
135            }
136      }      }
137    
138      /**      /**
# Line 74  class instruction extends instruction_ge Line 146  class instruction extends instruction_ge
146              && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()              && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
147              && $this->getParameter("maj") != 3) {              && $this->getParameter("maj") != 3) {
148              //              //
149                $this->addToLog("canAccess(): utilisateur instructeur sur un dossier d'une autre division", EXTRA_VERBOSE_MODE);
150                return false;
151            }
152    
153            $retourformulaire = $this->getParameter("retourformulaire");
154            // Si l'utilisateur est un instructeur et que le dossier est cloturé
155            if ( $this->f->isUserInstructeur() &&
156                $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture" &&
157                (
158                    $retourformulaire == 'dossier' ||
159                    $retourformulaire == 'dossier_instruction' ||
160                    $retourformulaire == 'dossier_instruction_mes_encours' ||
161                    $retourformulaire == 'dossier_instruction_tous_encours' ||
162                    $retourformulaire == 'dossier_instruction_mes_clotures' ||
163                    $retourformulaire == 'dossier_instruction_tous_clotures'
164                )
165                && $this->getParameter("maj") != 3 && $this->getParameter("maj") != 0 ) {
166                
167              return false;              return false;
168          }          }
169          //          //
# Line 81  class instruction extends instruction_ge Line 171  class instruction extends instruction_ge
171      }      }
172    
173      /**      /**
174       * Cette méthode permet de récupérer la division d'un dossier       * Cette variable permet de stocker le résultat de la méthode
175         * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
176         * ces appels.
177         * @var string Code de la division du dossier en cours
178         */
179        var $_division_from_dossier = NULL;
180    
181        /**
182         * Cette méthode permet de récupérer le code de division correspondant
183         * au dossier sur lequel on se trouve.
184         *
185         * @return string Code de la division du dossier en cours
186       */       */
187      function getDivisionFromDossier() {      function getDivisionFromDossier() {
188    
189            // Cette méthode peut être appelée plusieurs fois lors d'une requête.
190            // Pour éviter de refaire le traitement de recherche de la division
191            // alors on vérifie si nous ne l'avons pas déjà calculé.
192            if ($this->_division_from_dossier != NULL) {
193                // Logger
194                $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
195                // On retourne la valeur déjà calculée
196                return $this->_division_from_dossier;
197            }
198    
199            // Par défaut, on définit la valeur du dossier à NULL
200            $dossier = NULL;
201            // Test sur le mode et le contexte du formulaire
202            if ($this->getParameter("maj") == 0
203                && ($this->getParameter("retourformulaire") == "dossier"
204                    || $this->getParameter("retourformulaire") == "dossier_instruction"
205                    || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
206                    || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
207                    || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
208                    || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures")) {
209                // Si on se trouve en mode AJOUT (seul mode où l'enregistrement
210                // n'existe pas en base de données) ET que nous nous trouvons
211                // dans le contexte d'un dossier d'instruction alors on récupère
212                // le numéro de dossier depuis le paramètre 'idxformulaire'
213                $dossier = $this->getParameter("idxformulaire");
214            } else {
215                // Sinon on récupère le numéro de dossier dans le champs dossier de
216                // l'enregistrement (en base de données)
217                $dossier = $this->getVal("dossier");
218            }
219    
220            // On appelle la méthode de la classe utils qui renvoi le code de la
221            // division d'un dossier, on la stocke pour ne pas refaire le calcul au
222            // prochain appel de cette méthode
223            $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
224            // Logger
225            $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
226            // On retourne la valeur retournée
227            return $this->_division_from_dossier;
228    
229        }
230    
231        /**
232         * Cette méthode permet de récupérer le dossier d'autorisation d'un dossier
233         */
234        function getNumDemandeAutorFromDossier($id) {
235          //          //
236          if (!isset($this->val[array_search("dossier", $this->champs)])) {          if (!isset($id)) {
237              return NULL;              return NULL;
238          }          }
239          //          //
240          $sql = "select division from ".DB_PREFIXE."dossier ";          $sql = "select dossier_autorisation from ".DB_PREFIXE."dossier ";
241          $sql .= " where dossier='".$this->val[array_search("dossier", $this->champs)]."'";          $sql .= " where dossier='".$id."'";
242          //          //
243          $division = $this->db->getOne($sql);          $dossier_autorisation = $this->db->getOne($sql);
244          $this->addToLog("getDivisionFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);          $this->addToLog("getNumDemandeAutorFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
245          database::isError($division);          database::isError($dossier_autorisation);
246          //          //
247          return $division;          return $dossier_autorisation;
248      }      }
249    
250      // }}}      // }}}
# Line 139  class instruction extends instruction_ge Line 287  class instruction extends instruction_ge
287          $form->setType('action', 'hidden');          $form->setType('action', 'hidden');
288          $form->setType('delai_notification', 'hidden');          $form->setType('delai_notification', 'hidden');
289          $form->setType('avis_decision', 'hidden');          $form->setType('avis_decision', 'hidden');
290            $form->setType('autorite_competente', 'hidden');
291          //          //
292          $form->setType('archive_delai', 'hidden');          $form->setType('archive_delai', 'hidden');
293          $form->setType('archive_etat', 'hidden');          $form->setType('archive_etat', 'hidden');
# Line 153  class instruction extends instruction_ge Line 302  class instruction extends instruction_ge
302          $form->setType('archive_date_validite', 'hidden');          $form->setType('archive_date_validite', 'hidden');
303          $form->setType('archive_date_achevement', 'hidden');          $form->setType('archive_date_achevement', 'hidden');
304          $form->setType('archive_date_conformite', 'hidden');          $form->setType('archive_date_conformite', 'hidden');
305          $form->setType('archive_date_chantier', 'hidden');            $form->setType('archive_date_chantier', 'hidden');
306            $form->setType('archive_autorite_competente','hidden');
307          //          //
308          $form->setType('numero_arrete', 'hidden');          $form->setType('numero_arrete', 'hidden');
309            //
310            $form->setType('code_barres', 'hidden');
311                    
312          //          //
313            $form->setType('archive_incompletude','hidden');
314            $form->setType('archive_evenement_suivant_tacite','hidden');
315            $form->setType('archive_evenement_suivant_tacite_incompletude','hidden');
316            $form->setType('archive_etat_pendant_incompletude','hidden');
317            $form->setType('archive_date_limite_incompletude','hidden');
318            $form->setType('archive_delai_incompletude','hidden');
319    
320            //
321            $form->setType('duree_validite','hidden');
322            $form->setType('duree_validite_parametrage','hidden');
323          if ($maj < 2) { //ajouter et modifier          if ($maj < 2) { //ajouter et modifier
324              $form->setType('destinataire', 'hidden');              $form->setType('destinataire', 'hidden');
325              $form->setType('lettretype', 'hiddenstatic');              $form->setType('lettretype', 'hiddenstatic');
# Line 175  class instruction extends instruction_ge Line 337  class instruction extends instruction_ge
337              $form->setType('date_retour_rar','datedisabled');              $form->setType('date_retour_rar','datedisabled');
338              $form->setType('date_envoi_controle_legalite','datedisabled');              $form->setType('date_envoi_controle_legalite','datedisabled');
339              $form->setType('date_retour_controle_legalite','datedisabled');              $form->setType('date_retour_controle_legalite','datedisabled');
340                $form->setType('date_finalisation_courrier','datedisabled');
341    
342                // l'administrateur peut modifier les champs de retour de date
343                if ($this->f->user_is_admin == true) {
344                    $form->setType('date_retour_signature','date');
345                    $form->setType('date_retour_rar','date');
346                    $form->setType('date_retour_controle_legalite','date');
347                }
348    
349              if($maj==0){ // add              if($maj==0){ // add
350                  $form->setType('instruction', 'hiddenstatic');                  $form->setType('instruction', 'hiddenstatic');
351                  $form->setType('evenement', 'select');                  $form->setType('evenement', 'select');
# Line 199  class instruction extends instruction_ge Line 370  class instruction extends instruction_ge
370              $form->setType('bible', 'hidden');              $form->setType('bible', 'hidden');
371              $form->setType('bible2', 'hidden');              $form->setType('bible2', 'hidden');
372          }          }
373    
374            //Cache les champs pour la finalisation
375            $form->setType('om_fichier_instruction', 'hidden');
376            $form->setType('om_final_instruction', 'hidden');
377            // Cache le document arrêté
378            $form->setType('document_numerise', 'hidden');
379            
380            //Masquer les champs date_envoi_controle_legalite et
381            //date_retour_controle_legalite si ce n'est pas un arrêté
382            if ( !is_numeric($this->getVal("avis_decision"))){
383                
384                $form->setType("date_envoi_controle_legalite", "hidden");
385                $form->setType("date_retour_controle_legalite", "hidden");
386            }
387      }      }
388    
389      function setSelect(&$form, $maj,&$db,$debug) {      function setSelect(&$form, $maj,&$db,$debug) {
# Line 251  class instruction extends instruction_ge Line 436  class instruction extends instruction_ge
436              // du dossier d'instruction en cours              // du dossier d'instruction en cours
437              $sql = "SELECT              $sql = "SELECT
438              evenement.evenement,              evenement.evenement,
439              (evenement.libelle||' ['||evenement.action||']') as lib              CONCAT(evenement.libelle, ' ['||evenement.action||']') as lib
440              FROM ".DB_PREFIXE."dossier              FROM ".DB_PREFIXE."dossier
441              INNER JOIN ".DB_PREFIXE."lien_dossier_instruction_type_evenement              INNER JOIN ".DB_PREFIXE."lien_dossier_instruction_type_evenement
442                  ON dossier.dossier_instruction_type=lien_dossier_instruction_type_evenement.dossier_instruction_type                  ON dossier.dossier_instruction_type=lien_dossier_instruction_type_evenement.dossier_instruction_type
# Line 279  class instruction extends instruction_ge Line 464  class instruction extends instruction_ge
464              $form->setSelect("evenement", $contenu);              $form->setSelect("evenement", $contenu);
465          } else {          } else {
466              $sql = "SELECT              $sql = "SELECT
467              (evenement.libelle||' ['||evenement.action||']') as lib              CONCAT(evenement.libelle, ' ['||evenement.action||']') as lib
468              FROM ".DB_PREFIXE."evenement              FROM ".DB_PREFIXE."evenement
469              WHERE evenement.evenement=".$this->getVal("evenement")."";              WHERE evenement.evenement=".$this->getVal("evenement")."";
470              $res = $db->getone($sql);              $res = $db->getone($sql);
# Line 312  class instruction extends instruction_ge Line 497  class instruction extends instruction_ge
497      function cleSecondaire($id, &$db, $val, $DEBUG) {      function cleSecondaire($id, &$db, $val, $DEBUG) {
498          //          //
499          parent::cleSecondaire($id, $db, $val, $DEBUG);          parent::cleSecondaire($id, $db, $val, $DEBUG);
500            
501            //verifie evt instr sans crea instr
502            $sql = "select demande_type.dossier_instruction_type
503             from ".DB_PREFIXE."demande_type
504             left join ".DB_PREFIXE."demande
505             on
506             demande.demande_type = demande_type.demande_type
507             where demande.instruction_recepisse = ".$id;
508    
509          /**           $res = $this->db->getOne($sql);
510           * Vérification que l'élément supprimé est le dernier pour pouvoir          
511           * remodifier les données de manière itérative.          // Aucune clé secondaire n'a été trouvée, || c'est un evt sans creation de DIl'instruction peut être supprimée
512           */          if ( $this->correct !== false || $res == null || $res == ""){
513          // Initialisation                  
514          $dernierevenement = "";              if ($res == null || $res == ""){
515          // Récupération du dernier élément de la table d'instruction qui                  
516          // concerne le dossier en cours                  //utiliser ftion modifier
517          $sql = "SELECT max(instruction)                  $sql = "update ".DB_PREFIXE."demande
518          FROM ".DB_PREFIXE."instruction                  set demande.instruction_recepisse = NULL
519          WHERE dossier ='".$this->idxformulaire."'";                   where demande.instruction_recepisse = ".$id;
520          $dernierevenement = $db->getOne($sql);                  
521          $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);           $res = $this->db->query($sql);
522          if (database::isError($dernierevenement)) {              }
523              die($dernierevenement->getMessage());                  
524          }              /**
525          // Si on se trouve effectivement sur le dernier evenement d'instruction               * Vérification que l'élément supprimé est le dernier pour pouvoir
526          if ($dernierevenement == $id) {               * remodifier les données de manière itérative.
527              // Alors on valide la suppression               */
528              $this->correct = true;              // Initialisation
529              $this->addToMessage(_('Destruction_chronologique'));              $dernierevenement = "";
530          } else {              // Récupération du dernier élément de la table d'instruction qui
531              // Alors on annule la suppression              // concerne le dossier en cours
532              $this->correct = false;              $sql = "SELECT max(instruction)
533              $this->addToMessage(_("Seul le dernier evenement d'instruction peut etre supprime."));              FROM ".DB_PREFIXE."instruction
534                WHERE dossier ='".$this->idxformulaire."'";
535                $dernierevenement = $db->getOne($sql);
536                $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
537                if (database::isError($dernierevenement)) {
538                    die($dernierevenement->getMessage());
539                }
540                // Si on se trouve effectivement sur le dernier evenement d'instruction
541                if ($dernierevenement == $id) {
542                    // Alors on valide la suppression
543                    $this->correct = true;
544                    $this->addToMessage(_('Destruction_chronologique'));
545                } else {
546                    // Alors on annule la suppression
547                    $this->correct = false;
548                    $this->addToMessage(_("Seul le dernier evenement d'instruction peut etre supprime."));
549                }
550          }          }
551      }      }
552    
553      // Vérification de la non modification des dates de suivi      /**
554         * Vérification de la possibilité ou non de modifier des dates de suivi
555         * @param  string $champ champ date à vérifier
556         */
557      function updateDate($champ) {      function updateDate($champ) {
558          if($this->valF[$champ] != "") {          
559              if($this->getVal($champ) != "" AND $this->getVal($champ) != $this->valF[$champ]) {          //Si le retourformulaire est "dossier_instruction"
560                  $this->correct = false;          if ($this->retourformulaire == "dossier_instruction") {
561                  $this->addToMessage(_("Les dates de suivis ne peuvent etre modifiees"));  
562                // Vérification de la possibilité de modifier les dates si déjà éditées
563                if($this->valF[$champ] != "" AND !$this->f->user_is_admin) {
564                    // si l'utilisateur n'est pas un admin
565                    if($this->getVal($champ) != "" AND $this->getVal($champ) != $this->valF[$champ]) {
566                        $this->correct = false;
567                        $this->addToMessage(_("Les dates de suivis ne peuvent etre modifiees"));
568                    }
569              }              }
570          }          }
571            
572            //
573            return true;
574      }      }
575    
576      // Sélectionne le signataire_arrete par défaut      // Sélectionne le signataire_arrete par défaut
# Line 363  class instruction extends instruction_ge Line 585  class instruction extends instruction_ge
585                      WHERE defaut IS TRUE";                      WHERE defaut IS TRUE";
586                            
587              // Exécution de la requête              // Exécution de la requête
             $this->f->addToLog("deleteAllLienDossierInstructionTypeEvenementEvenement(): db->query(\"".$sql."\");", VERBOSE_MODE);  
588              $res = $this->f->db->query($sql);              $res = $this->f->db->query($sql);
589              $this->f->isDatabaseError();              $this->f->addToLog("setVal(): db->query(\"".$sql."\");", VERBOSE_MODE);
590                if ( database::isError($res)){
591                    die();
592                }
593                    
594              $row = $res->fetchrow(DB_FETCHMODE_ASSOC);              $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
595                            
# Line 448  class instruction extends instruction_ge Line 672  class instruction extends instruction_ge
672           * - avis_decision           * - avis_decision
673           * - delai_notification           * - delai_notification
674           * - lettretype           * - lettretype
675             * - autorite_competente
676           * DEPUIS LE DOSSIER D'INSTRUCTION           * DEPUIS LE DOSSIER D'INSTRUCTION
677           * - archive_delai           * - archive_delai
678           * - archive_accord_tacite           * - archive_accord_tacite
# Line 462  class instruction extends instruction_ge Line 687  class instruction extends instruction_ge
687           * - date_achevement           * - date_achevement
688           * - date_chantier           * - date_chantier
689           * - date_conformite           * - date_conformite
690             * - avis_decision
691           * Il permet également de stocker la date_depot du dossier d'instruction           * Il permet également de stocker la date_depot du dossier d'instruction
692           * dans l'attribut $this->archive_date_depot de la classe.           * dans l'attribut $this->archive_date_depot de la classe.
693           */           */
# Line 498  class instruction extends instruction_ge Line 724  class instruction extends instruction_ge
724              if(isset($row['avis_decision']) and !empty($row['avis_decision'])) {              if(isset($row['avis_decision']) and !empty($row['avis_decision'])) {
725                  $this->valF['avis_decision']=$row['avis_decision'];                  $this->valF['avis_decision']=$row['avis_decision'];
726              }              }
727                // Récupération de la valeur de l'autorité compétente
728                // si l'autorité compétente est paramétré dans l'événement
729                $this->valF['autorite_competente'] = NULL;
730                if(isset($row['autorite_competente']) and !empty($row['autorite_competente'])) {
731                    $this->valF['autorite_competente']=$row['autorite_competente'];
732                }
733              // Récupération de la valeur de la lettre type              // Récupération de la valeur de la lettre type
734              // Sinon on lui affecte lavaleur par défaut standard              // Sinon on lui affecte lavaleur par défaut standard
735              if ($row['lettretype'] != "") {              if ($row['lettretype'] != "") {
# Line 556  class instruction extends instruction_ge Line 788  class instruction extends instruction_ge
788              if ($row['date_conformite']!='') {              if ($row['date_conformite']!='') {
789                  $this->valF['archive_date_conformite']= $row['date_conformite'];                    $this->valF['archive_date_conformite']= $row['date_conformite'];  
790              }              }
791          }              if ($row['incompletude']!='') {
792                    $this->valF['archive_incompletude']= $row['incompletude'];  
793                }
794                if ($row['evenement_suivant_tacite']!='') {
795                    $this->valF['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];  
796                }
797                if ($row['evenement_suivant_tacite_incompletude']!='') {
798                    $this->valF['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];  
799                }
800                if ($row['etat_pendant_incompletude']!='') {
801                    $this->valF['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];  
802                }
803                if ($row['date_limite_incompletude']!='') {
804                    $this->valF['archive_date_limite_incompletude']= $row['date_limite_incompletude'];  
805                }
806                if ($row['delai_incompletude']!='') {
807                    $this->valF['archive_delai_incompletude']= $row['delai_incompletude'];  
808                }
809                if ($row['autorite_competente']!='') {
810                    $this->valF['archive_autorite_competente']= $row['autorite_competente'];  
811                }
812                if ($row['duree_validite']!='') {
813                    $this->valF['duree_validite']= $row['duree_validite'];  
814                }
815            }
816            // Récupération de la duree de validite du dossier d'autorisation
817            $sql = "SELECT duree_validite_parametrage
818                    FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
819                    LEFT JOIN ".DB_PREFIXE."dossier_autorisation
820                        ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
821                    LEFT JOIN ".DB_PREFIXE."dossier
822                        ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
823            WHERE dossier.dossier='".$this->valF['dossier']."'";
824            $duree_validite_parametrage = $db->getOne($sql);
825            $this->addToLog("triggerajouter(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
826            database::isError($duree_validite_parametrage);
827            if ($duree_validite_parametrage != '') {
828                $this->valF['duree_validite_parametrage']= $duree_validite_parametrage;
829            }
830    
831            // Identifiant du type de courrier
832            $idTypeCourrier = '11';
833            $idCourrier = str_pad($this->valF["instruction"], 10, "0", STR_PAD_LEFT);
834            // Code barres
835            $this->valF["code_barres"] = $idTypeCourrier . $idCourrier;
836      }      }
837            
838      // Test si une restriction est valide      // Test si une restriction est valide
839      // return boolean      // return boolean
840      function restrictionIsValid($restriction){      function restrictionIsValid($restriction){
841    
842            // Liste des opérateurs possible
843            $operateurs = array(">=", "<=", "+", "-");
844            // Liste des opérateurs avec espace
845            $operateurs_blank = array(" >= ", " <= ", " + ", " - ");
846    
847            // Supprime tous les espaces de la chaîne de caractère
848            $restriction = str_replace(' ', '', $restriction);
849                    
850          /* Met des espace avant et après les opérateurs puis transforme la chaine en          // Met des espace avant et après les opérateurs puis transforme la
851           * un tableau */          // chaine en un tableau
852          $tabRestriction = str_replace(">="," >= ",          $tabRestriction = str_replace($operateurs, $operateurs_blank,
853                            str_replace("<="," <= ",              $restriction);
854                            str_replace("-"," - ",          $tabRestriction = explode(" ", $tabRestriction);
855                            str_replace("+"," + ",$restriction))));  
856          $tabRestriction = explode( " ", $tabRestriction);          // Tableau comprenant les résultat
           
         //Variables de résultat  
857          $res = array();          $res = array();
858          $i = 0;          // Compteur pour les résultat
859          $comp = "";          // commence à 1 car le 0 doit rester inchangé tout au long du traitement
860                    $j = 1;
861                    // Comparateur du calcul
862          //Test que le tableau n'est pas vide          $comparateur = '';
863          if ( count($tabRestriction) > 0 ){          // Booléen retourné
864                        $res_bool = true;
865              $res[0] = $this->getRestrictionValue($tabRestriction[0]);  
866                        // Si le tableau n'est pas vide
867              //Calcul des variables          if (count($tabRestriction) > 0) {
868              for ( $j = 1 ; $j < count($tabRestriction) ; $j += 2 ) {  
869                // Boucle dans le tableau pour récupérer seulement les valeurs
870                foreach ($tabRestriction as $key => $value) {
871                                    
872                  //Variable de comparaison                  //
873                  if ( strcmp( ">=", $tabRestriction[$j] ) == 0 ||                  if (!in_array($value, $operateurs)) {
874                       strcmp( "<=", $tabRestriction[$j]) ==0 ){                      if ($this->getRestrictionValue($value) != false) {
875                                                $res[] = $this->getRestrictionValue($value);
876                      $comp = $tabRestriction[$j];                      } else {
877                      $res[++$i] = $this->getRestrictionValue($tabRestriction[$j+1]);                          return false;
878                  }                      }
                 // Fait l'addition  
                 elseif ( strcmp( "+", $tabRestriction[$j]) == 0 ){  
                       
                    $res[$i] =  $this->moisdate( $res[$i], $this->getRestrictionValue($tabRestriction[$j+1]) );  
879                  }                  }
880              }              }
881          }  
882                                // Boucle dans le tableau
883          // Effectue le test              // commence à 1 car le 0 doit rester inchangé tout au long du
884          if ( strcmp($comp, ">=") == 0 ){              // traitement
885                            for ($i = 1; $i<count($tabRestriction); $i++) {
             if ( $res[0] >= $res[1] || $res[0] == "" ){  
                   
                 return true;  
             }  
             else {  
886                                    
887                  return false;                  // Récupère le comparateur
888                    if ($tabRestriction[$i] === ">="
889                        || $tabRestriction[$i] === "<=") {
890                        $comparateur = $tabRestriction[$i];
891                    }
892    
893                    // Si l'opérateur qui suit est un "+"
894                    if ($tabRestriction[$i] === "+") {
895                        $dateDep = strtotime($res[$j]);
896                        unset($res[$j]);$j++;
897                        $duree = $res[$j];
898                        unset($res[$j]);
899                        $res[$j] = date('Y-m-d',
900                            strtotime('+'.$duree.' month', $dateDep));
901                    }
902    
903                    // Si l'opérateur qui suit est un "-"
904                    if ($tabRestriction[$i] === "-") {
905                        $dateDep = strtotime($res[$j]);
906                        unset($res[$j]);$j++;
907                        $duree = $res[$j];
908                        unset($res[$j]);
909                        $res[$j] = date('Y-m-d',
910                            strtotime('-'.$duree.' month', $dateDep));
911                    }
912              }              }
913                
914          }          }
         elseif ( strcmp($comp, "<=") == 0 ){  
915    
916              if ( $res[0] <= $res[1] || $res[1] == "" ){          // Si les tableau des résultats n'est pas vide
917            if (count($res) > 0) {
918                  return true;              //
919                $res_bool = false;
920                // Effectue le test
921                if ($comparateur === ">=") {
922                    //
923                    if (strtotime($res[0]) >= strtotime($res[$j])) {
924                        $res_bool = true;
925                    }
926              }              }
927              else {              if ($comparateur === "<=") {
928    
929                  return false;                  if (strtotime($res[0]) <= strtotime($res[$j])) {
930                        $res_bool = true;
931                    }
932              }              }
933          }          }
934                    
935          return true;          return $res_bool;
936    
937      }      }
938        
939      //Retourne la valeur de valF si $restrictionValue n'est pas un chiffre, le chiffre sinon      /**
940         * Récupère la valeur du champ dans la restriction
941         * @param  string   $restrictionValue   Nom du champ
942         * @return mixed                        Valeur du champ
943         */
944      function getRestrictionValue($restrictionValue){      function getRestrictionValue($restrictionValue){
945            
946          return ( is_numeric($restrictionValue) ) ?          // Initialisation de la valeur de retour
947              $restrictionValue :          $return = false;
948              $this->valF[$restrictionValue];  
949            // Récupére les valeurs du dossier
950            $value_dossier = $this->get_dossier_actual();
951    
952            //
953            if (is_numeric($restrictionValue)) {
954                $return = $restrictionValue;
955            }elseif (isset($value_dossier[$restrictionValue])) {
956                $return = $value_dossier[$restrictionValue];
957            }elseif (isset($this->valF[$restrictionValue])) {
958                $return = $this->valF[$restrictionValue];
959            }
960    
961            // Retourne la valeur du champ
962            return $return;
963      }      }
964            
965      function regle($regle){      function regle($regle){
966            // Supprime tous les espaces de la chaîne de caractère
967            $regle = str_replace(' ', '', $regle);
968            // Coupe la chaîne au niveau des "+"
969          $temp = explode ("+",$regle);          $temp = explode ("+",$regle);
970          //echo '|'.$regle;          //echo '|'.$regle;
971          // cas rejet          // cas rejet
# Line 680  class instruction extends instruction_ge Line 1010  class instruction extends instruction_ge
1010           * Mise à jour des valeurs du dossier en fonction des valeurs calculées           * Mise à jour des valeurs du dossier en fonction des valeurs calculées
1011           * par l'action           * par l'action
1012           */           */
1013            $this->getValEvenement();
1014          // Initialisation          // Initialisation
1015          $valF = "";          $valF = "";
1016            // état de complétude actuel du dossier
1017            $incompletude =  $this->dossierIncomplet();
1018    
1019            if($incompletude === FALSE) {
1020                // Si l'événement d'instruction est de type incompletude
1021                if($this->valEvenement['type'] == "incompletude") {
1022                    // On marque le dossier en incomplétude pour application des actions
1023                    $incompletude = TRUE;
1024                    // Set du flag incomplétude de la table dossier
1025                    $valF['incompletude'] = TRUE;
1026                    // Enregistrement de l'état dans la variable provisoire
1027                    $valF['etat_pendant_incompletude'] = $this->valF['archive_etat'];
1028                }
1029            } else {
1030                // Si l'evenement d'instruction est de type retour ou contient une
1031                // decision, on sort d'incomplétude
1032                if($this->valEvenement['type'] == "retour" OR
1033                   $this->valEvenement['avis_decision'] != NULL) {
1034                    // On enlève la marque d'incomplétude pour application des actions
1035                    $incompletude = FALSE;
1036                    // On enlève le flag d'incomplétude sur l'enregistrement de la table dossier
1037                    $valF['incompletude'] = FALSE;
1038                     // Restauration de l'état depuis l'état provisoire
1039                    $valF['etat'] = $this->valF['archive_etat_pendant_incompletude'];
1040                    // On vide la variable provisoire ainsi que le délai de complétude
1041                    // et la date limite de complétude
1042                    $valF['etat_pendant_incompletude'] = NULL;
1043                    $valF['delai_incompletude'] = NULL;
1044                    $valF['date_limite_incompletude'] = NULL;
1045                }
1046            }
1047          // Récupération des paramètres de l'action          // Récupération des paramètres de l'action
1048          $sql = "SELECT * FROM ".DB_PREFIXE."action          $sql = "SELECT * FROM ".DB_PREFIXE."action
1049          WHERE action='".$this->valF['action']."'";          WHERE action='".$this->valF['action']."'";
# Line 691  class instruction extends instruction_ge Line 1053  class instruction extends instruction_ge
1053              die($res->getMessage());              die($res->getMessage());
1054          }          }
1055          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1056    
1057              // pour chacune des regles, on applique la regle              // pour chacune des regles, on applique la regle
             if($row['regle_etat']!=''){  
                 $valF['etat'] = $this->regle($row['regle_etat']);  
             }  
1058              if($row['regle_delai']!=''){              if($row['regle_delai']!=''){
1059                  $valF['delai'] = $this->regle($row['regle_delai']);                  $valF['delai'] = $this->regle($row['regle_delai']);
1060              }              }
# Line 734  class instruction extends instruction_ge Line 1094  class instruction extends instruction_ge
1094              if($row['regle_date_conformite']!=''){              if($row['regle_date_conformite']!=''){
1095                  $valF['date_conformite']= $this->regle($row['regle_date_conformite']);                  $valF['date_conformite']= $this->regle($row['regle_date_conformite']);
1096              }              }
1097              // Appel des méthode stockées dans le champ methode_trigger              if($row['regle_date_limite_incompletude']!=''){
1098              if ($row['methode_trigger'] != "") {                  $valF['date_limite_incompletude']= $this->regle($row['regle_date_limite_incompletude']);
1099                  foreach (explode(";", $row['methode_trigger']) as $methode) {              }
1100                      if (method_exists($this, $methode)) {              if($row['regle_delai_incompletude']!=''){
1101                          $this->$methode();                  $valF['delai_incompletude']= $this->regle($row['regle_delai_incompletude']);
1102                      }              }
1103                if($row['regle_autorite_competente']!=''){
1104                    $valF['autorite_competente']= $this->regle($row['regle_autorite_competente']);
1105                }
1106                if($row['regle_etat']!=''){
1107                    // Si on est dans le cas général ou qu'on est en incomplétude et
1108                    // qu'on a un événement de type incomplétude alors : on stocke
1109                    // l'état dans la variable courante
1110                    if ($incompletude == FALSE OR $this->valEvenement['type'] == "incompletude") {
1111                        $valF['etat'] = $this->regle($row['regle_etat']);
1112                    } else {
1113                        $valF['etat_pendant_incompletude'] = $this->regle($row['regle_etat']);
1114                    }
1115                }
1116                if($this->valEvenement['evenement_suivant_tacite'] != '') {
1117                    // Si on est pas en incomplétude on stocke l'événement tacite
1118                    //de l'événement dans la variable courante
1119                    if ($incompletude == FALSE) {
1120                        $valF['evenement_suivant_tacite'] = $this->valEvenement['evenement_suivant_tacite'];
1121                    } else {
1122                        $valF['evenement_suivant_tacite_incompletude'] = $this->valEvenement['evenement_suivant_tacite'];
1123                  }                  }
1124              }              }
1125          }          }
# Line 802  class instruction extends instruction_ge Line 1182  class instruction extends instruction_ge
1182                  }                  }
1183              }              }
1184          } // fin de if ($this->f->getParameter('option_erp') != "")          } // fin de if ($this->f->getParameter('option_erp') != "")
1185    
1186            // Mise à jour des données du dossier d'autorisation
1187            require_once "../obj/dossier_autorisation.class.php";
1188            $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($this->valF['dossier']), $this->db, DEBUG);
1189            $da->majDossierAutorisation();
1190      }          }    
1191    
1192      function triggermodifierapres($id,&$db,$val,$DEBUG) {      function triggermodifierapres($id,&$db,$val,$DEBUG) {
# Line 811  class instruction extends instruction_ge Line 1196  class instruction extends instruction_ge
1196           */           */
1197          // Initialisation          // Initialisation
1198          $valF = "";          $valF = "";
1199            // Initialisation du type d'événement
1200            $type_evmt = "";
1201          // Récupération de l'action correspondante à l'événement          // Récupération de l'action correspondante à l'événement
1202          $sql = "SELECT action          $sql = "SELECT action
1203          FROM ".DB_PREFIXE."evenement          FROM ".DB_PREFIXE."evenement
# Line 821  class instruction extends instruction_ge Line 1208  class instruction extends instruction_ge
1208              die($action->getMessage());              die($action->getMessage());
1209          }          }
1210    
         // Récupération de tous les paramètres de l'événement sélectionné  
         $sql = "SELECT * FROM ".DB_PREFIXE."evenement  
         WHERE evenement=".$this->valF['evenement'];  
         $res = $db->query($sql);  
         $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);  
         if (database::isError($res)) {  
             die($res->getMessage());  
         }  
         while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {  
             // Ajout d'un événement d'instruction  
   
             if ($this->getVal('date_retour_signature') == "" AND $this->valF['date_retour_signature'] != "") {  
                 $new_instruction = new instruction("]", $db, $DEBUG);  
                 foreach($new_instruction->champs as $champ) {  
                     $valNewInstr[$champ] = "";  
                 }  
   
                 $valNewInstr["evenement"] = $row['evenement_retour_signature'];  
                 $valNewInstr["destinataire"] = $this->valF['destinataire'];  
                 $valNewInstr["dossier"] = $this->valF['dossier'];  
                 $valNewInstr["date_evenement"] = date("d/m/Y");  
                 $new_instruction->ajouter($valNewInstr,$db, $DEBUG);  
             }  
         }  
   
1211          // Récupération des paramètres de l'action          // Récupération des paramètres de l'action
1212          $sql = "SELECT * FROM ".DB_PREFIXE."action          $sql = "SELECT * FROM ".DB_PREFIXE."action
1213          WHERE action='".$action."'";          WHERE action='".$action."'";
# Line 892  class instruction extends instruction_ge Line 1254  class instruction extends instruction_ge
1254              // On met à jour le dossier              // On met à jour le dossier
1255              $cle = " dossier='".$this->valF['dossier']."'";              $cle = " dossier='".$this->valF['dossier']."'";
1256              $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);              $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1257              $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);              $this->addToLog("triggermodifierapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1258              if (database::isError($res1)) {              if (database::isError($res1)) {
1259                  die($res->getMessage());                  die($res->getMessage());
1260              }              }
# Line 900  class instruction extends instruction_ge Line 1262  class instruction extends instruction_ge
1262              $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");              $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1263          }          }
1264    
1265            // Récupération de tous les paramètres de l'événement sélectionné
1266            $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1267            WHERE evenement=".$this->valF['evenement'];
1268            $res = $db->query($sql);
1269            $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1270            if (database::isError($res)) {
1271                die($res->getMessage());
1272            }
1273            while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1274                // Si la date de retour signature est éditée on vérifie si il existe un événement automatique
1275                if ($this->getVal('date_retour_signature') == "" AND
1276                    $this->valF['date_retour_signature'] != "" AND
1277                    $row['evenement_retour_signature'] != "") {
1278                    $new_instruction = new instruction("]", $db, $DEBUG);
1279                    // Création d'un tableau avec la liste des champs de l'instruction
1280                    foreach($new_instruction->champs as $champ) {
1281                        $valNewInstr[$champ] = "";
1282                    }
1283                    // Définition des valeurs de la nouvelle instruction
1284                    $valNewInstr["evenement"] = $row['evenement_retour_signature'];
1285                    $valNewInstr["destinataire"] = $this->valF['destinataire'];
1286                    $valNewInstr["dossier"] = $this->valF['dossier'];
1287                    $valNewInstr["date_evenement"] = date("d/m/Y");
1288                    $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
1289                    $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
1290                    $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
1291                    $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
1292                    $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
1293                    $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
1294                    $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1295                }
1296                // Si la date de retour AR est éditée on vérifie si il existe un événement automatique
1297                if ($this->getVal('date_retour_rar') == "" AND
1298                    $this->valF['date_retour_rar'] != "" AND
1299                    $row['evenement_retour_ar'] != "" ) {
1300                    $new_instruction = new instruction("]", $db, $DEBUG);
1301                    // Création d'un tableau avec la liste des champs de l'instruction
1302                    foreach($new_instruction->champs as $champ) {
1303                        $valNewInstr[$champ] = "";
1304                    }
1305                    // Définition des valeurs de la nouvelle instruction
1306                    $valNewInstr["evenement"] = $row['evenement_retour_ar'];
1307                    $valNewInstr["destinataire"] = $this->valF['destinataire'];
1308                    $valNewInstr["dossier"] = $this->valF['dossier'];
1309                    $valNewInstr["date_evenement"] = date("d/m/Y");
1310                    $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
1311                    $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
1312                    $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
1313                    $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
1314                    $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
1315                    $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
1316                    $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1317                }
1318            }
1319    
1320          /**          /**
1321           * REFERENTIEL ARRETE           * REFERENTIEL ARRETE
1322           */           */
1323          if ($this->f->getParameter('option_referentiel_arrete') != "") {          // Si l'option référentiel arrêté est activé et l'événement est de type
1324            // arrêté
1325            if ($this->f->getParameter('option_referentiel_arrete') != "" AND
1326                $type_evmt == "arrete") {
1327              if ($this->valF['date_retour_signature'] != $this->getVal('date_retour_signature')) {              if ($this->valF['date_retour_signature'] != $this->getVal('date_retour_signature')) {
1328                  $msgenque = new MessageEnqueuer();                  $msgenque = new MessageEnqueuer();
1329                  $sqlArrete = "SELECT instruction.signataire_arrete as \"ws_DA_In_Signataire\",                  $sqlArrete = "SELECT instruction.signataire_arrete as \"ws_DA_In_Signataire\",
# Line 916  class instruction extends instruction_ge Line 1336  class instruction extends instruction_ge
1336                                      '' as \"ws_DA_In_Sigle\",                                      '' as \"ws_DA_In_Sigle\",
1337                                      instruction.etat as \"ws_DA_In_Decision\",                                      instruction.etat as \"ws_DA_In_Decision\",
1338                                      dossier.date_depot as \"ws_DA_In_Dte_Depot_Dem\",                                      dossier.date_depot as \"ws_DA_In_Dte_Depot_Dem\",
1339                                      dossier.terrain_numero as \"ws_DA_In_N_Voie\",                                      dossier.terrain_adresse_voie_numero as \"ws_DA_In_N_Voie\",
1340                                      '' as \"ws_DA_In_Type_Voie\",                                      '' as \"ws_DA_In_Type_Voie\",
1341                                      dossier.complement as \"ws_DA_In_Adresse1\",                                      dossier.terrain_adresse_voie as \"ws_DA_In_Adresse1\",
1342                                      dossier.terrain_adresse_lieu_dit as \"ws_DA_In_Adresse2\",                                      dossier.terrain_adresse_lieu_dit as \"ws_DA_In_Adresse2\",
1343                                      dossier.terrain_adresse_code_postal as \"ws_DA_In_CP\",                                      dossier.terrain_adresse_code_postal as \"ws_DA_In_CP\",
1344                                      dossier.terrain_adresse_localite as \"ws_DA_In_Ville\",                                      dossier.terrain_adresse_localite as \"ws_DA_In_Ville\",
# Line 949  class instruction extends instruction_ge Line 1369  class instruction extends instruction_ge
1369                                      donnees_techniques.dossier_instruction = dossier.dossier                                      donnees_techniques.dossier_instruction = dossier.dossier
1370                              WHERE instruction.instruction = ".$this->valF['instruction'];                              WHERE instruction.instruction = ".$this->valF['instruction'];
1371                  $resArrete = $this->db->query($sqlArrete);                  $resArrete = $this->db->query($sqlArrete);
1372                  $this->f->addToLog("triggerModifierApres(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);                  $this->f->addToLog("triggermodifierapres(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
1373                  $this->f->isDatabaseError();                  if ( database::isError($resArrete)){
1374                        die();
1375                    }
1376            
1377                  $rowArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);                  $rowArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
1378                  $msgenque->setArreteInfo($rowArrete);                  $msgenque->setArreteInfo($rowArrete);
1379                  $msgenque->enqueueMessage($msgenque::$ARRETE_ENVOI);                                  $msgenque->enqueueMessage($msgenque::$ARRETE_ENVOI);                
1380              }              }
1381          }          }
1382    
1383            // Mise à jour des données du dossier d'autorisation
1384            require_once "../obj/dossier_autorisation.class.php";
1385            $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($this->valF['dossier']), $this->db, DEBUG);
1386            $da->majDossierAutorisation();
1387      }      }
1388    
1389      function triggersupprimer($id,&$db,$val,$DEBUG) {      function triggersupprimer($id,&$db,$val,$DEBUG) {
# Line 965  class instruction extends instruction_ge Line 1392  class instruction extends instruction_ge
1392           * archive dans le dossier d'instruction avant de supprimer l'événement           * archive dans le dossier d'instruction avant de supprimer l'événement
1393           * d'instruction           * d'instruction
1394           */           */
1395          // archive en instruction (si suppression) [archive if delete instruction]          
1396          $valF['delai']=$val['archive_delai'];              // Mise à jour des 4 valeurs modifiées par l'action
1397          $valF['accord_tacite']=$val['archive_accord_tacite'];              $valF['delai'] = $val['archive_delai'];
1398          $valF['etat']=$val['archive_etat'];              $valF['accord_tacite'] = $val['archive_accord_tacite'];
1399          if($val['archive_avis']=='')              $valF['etat'] = $val['archive_etat'];
1400              $valF['avis_decision']= null;              if ($val['archive_avis'] != '') {
1401          else                  $valF['avis_decision'] = $val['archive_avis'];
1402              $valF['avis_decision']=$val['archive_avis'];              } else {
1403          if($val['archive_date_complet']!='')                  $valF['avis_decision'] = NULL;
1404              $valF['date_complet']=$val['archive_date_complet'];              }
1405          if($val['archive_date_dernier_depot']!='')              // Mise à jour des 10 dates avec la valeur présente dans le formulaire
1406              $valF['date_dernier_depot']=$val['archive_date_dernier_depot'];              // de suppression. Si la valeur de la date est vide alors on fixe
1407          if($val['archive_date_rejet']!='')              // à la valeur NULL
1408              $valF['date_rejet']= $val['archive_date_rejet'];              //
1409          if($val['archive_date_limite']!='')              if ($val['archive_date_complet'] != '') {
1410              $valF['date_limite']= $val['archive_date_limite'];                  $valF['date_complet'] = $val['archive_date_complet'];
1411          if($val['archive_date_notification_delai']!='')              } else {
1412              $valF['date_notification_delai']= $val['archive_date_notification_delai'];                  $valF['date_complet'] = NULL;
1413          if($val['archive_date_decision']!='')              }
1414              $valF['date_decision']= $val['archive_date_decision'];              if ($val['archive_date_dernier_depot'] != '') {
1415          if($val['archive_date_validite']!='')                  $valF['date_dernier_depot'] = $val['archive_date_dernier_depot'];
1416              $valF['date_validite']= $val['archive_date_validite'];              } else {
1417          if($val['archive_date_achevement']!='')                  $valF['date_dernier_depot'] = NULL;
1418              $valF['date_achevement']= $val['archive_date_achevement'];              }
1419          if($val['archive_date_chantier']!='')              if ($val['archive_date_rejet'] != '') {
1420              $valF['date_chantier']= $val['archive_date_chantier'];                  $valF['date_rejet'] = $val['archive_date_rejet'];
1421          if($val['archive_date_conformite']!='')              } else {
1422              $valF['date_conformite']= $val['archive_date_conformite'];                  $valF['date_rejet'] = NULL;
1423          // On met à jour le dossier              }
1424          $cle = " dossier='".$val['dossier']."'";              if ($val['archive_date_limite'] != '') {
1425          $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);                  $valF['date_limite'] = $val['archive_date_limite'];
1426          $this->addToLog("triggersupprimer(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);              } else {
1427          if (database::isError($res1)) {                  $valF['date_limite'] = NULL;
1428              die($res->getMessage());              }
1429          }              if ($val['archive_date_notification_delai'] != '') {
1430          // Affichage d'informations à l'utilisateur                  $valF['date_notification_delai'] = $val['archive_date_notification_delai'];
1431          $this->addToMessage(_("Suppression de l'instruction")." [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");              } else {
1432                    $valF['date_notification_delai'] = NULL;
1433                }
1434                if ($val['archive_date_decision'] != '') {
1435                    $valF['date_decision'] = $val['archive_date_decision'];
1436                } else {
1437                    $valF['date_decision'] = NULL;
1438                }
1439                if ($val['archive_date_validite'] != '') {
1440                    $valF['date_validite'] = $val['archive_date_validite'];
1441                } else {
1442                    $valF['date_validite'] = NULL;
1443                }
1444                if ($val['archive_date_achevement'] != '') {
1445                    $valF['date_achevement'] = $val['archive_date_achevement'];
1446                } else {
1447                    $valF['date_achevement'] = NULL;
1448                }
1449                if ($val['archive_date_chantier'] != '') {
1450                    $valF['date_chantier'] = $val['archive_date_chantier'];
1451                } else {
1452                    $valF['date_chantier'] = NULL;
1453                }
1454                if ($val['archive_date_conformite'] != '') {
1455                    $valF['date_conformite'] = $val['archive_date_conformite'];
1456                } else {
1457                    $valF['date_conformite'] = NULL;
1458                }
1459                if ($val['archive_incompletude'] != '') {
1460                    $valF['incompletude'] = $val['archive_incompletude'];
1461                } else {
1462                    $valF['incompletude'] = NULL;
1463                }
1464                if ($val['archive_evenement_suivant_tacite'] != '') {
1465                    $valF['evenement_suivant_tacite'] = $val['archive_evenement_suivant_tacite'];
1466                } else {
1467                    $valF['evenement_suivant_tacite'] = NULL;
1468                }
1469                if ($val['archive_evenement_suivant_tacite_incompletude'] != '') {
1470                    $valF['evenement_suivant_tacite_incompletude'] = $val['archive_evenement_suivant_tacite_incompletude'];
1471                } else {
1472                    $valF['evenement_suivant_tacite_incompletude'] = NULL;
1473                }
1474                if ($val['archive_etat_pendant_incompletude'] != '') {
1475                    $valF['etat_pendant_incompletude'] = $val['archive_etat_pendant_incompletude'];
1476                } else {
1477                    $valF['etat_pendant_incompletude'] = NULL;
1478                }
1479                if ($val['archive_date_limite_incompletude'] != '') {
1480                    $valF['date_limite_incompletude'] = $val['archive_date_limite_incompletude'];
1481                } else {
1482                    $valF['date_limite_incompletude'] = NULL;
1483                }
1484                if ($val['archive_delai_incompletude'] != '') {
1485                    $valF['delai_incompletude'] = $val['archive_delai_incompletude'];
1486                } else {
1487                    $valF['delai_incompletude'] = NULL;
1488                }
1489                if ($val['archive_autorite_competente'] != '') {
1490                    $valF['autorite_competente'] = $val['archive_autorite_competente'];
1491                } else {
1492                    $valF['autorite_competente'] = NULL;
1493                }
1494                // On met à jour le dossier
1495                $cle = " dossier='".$val['dossier']."'";
1496                $res = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1497                $this->addToLog("triggersupprimer(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1498                if (database::isError($res)) {
1499                    die($res->getMessage());
1500                }
1501                // Affichage d'informations à l'utilisateur
1502                $this->addToMessage(_("Suppression de l'instruction")." [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1503        
1504                // Mise à jour de la demande si un récépissé d'instruction correspond à l'instruction à supprimer
1505        }
1506    
1507        function triggersupprimerapres($id,&$db,$val,$DEBUG) {
1508    
1509            // Mise à jour des données du dossier d'autorisation
1510            require_once "../obj/dossier_autorisation.class.php";
1511            $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($val["dossier"]), $this->db, DEBUG);
1512            $da->majDossierAutorisation();
1513      }      }
1514    
1515      // =============================================      // =============================================
# Line 1058  class instruction extends instruction_ge Line 1566  class instruction extends instruction_ge
1566      // Vérifie la restriction sur l'événement      // Vérifie la restriction sur l'événement
1567      function verifier($val = array(), &$db, $DEBUG){      function verifier($val = array(), &$db, $DEBUG){
1568          parent::verifier($val, $db, $DEBUG);          parent::verifier($val, $db, $DEBUG);
         //Récupère la restriction  
         $sql= "SELECT  
                   restriction  
               FROM  
                   ".DB_PREFIXE."evenement  
               WHERE  
                   evenement =".$this->valF['evenement'];  
1569    
1570          $res = $db->query($sql);          if ( isset($val['evenement']) && is_numeric($val['evenement'])){
1571          $this->f->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);              //Récupère la restriction
1572          $this->f->isDatabaseError();              $sql= "SELECT
1573                                  restriction
1574          $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);                    FROM
1575                          ".DB_PREFIXE."evenement
1576                      WHERE
1577                          evenement =".$val['evenement'];
1578        
1579                $res = $db->query($sql);
1580                $this->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
1581                if (database::isError($res)) {
1582                    die($res->getMessage());
1583                }        
1584                $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
1585        
1586                //Test qu'une restriction est présente
1587                if ( isset($row['restriction']) && $row['restriction'] != "" ){
1588    
1589          //Test qu'une restriction est présente                  $restriction = $row['restriction'];
         if ( isset($row['restriction']) && $row['restriction'] != "" ){  
               
             //Test si la restriction est valide  
             if ( !$this->restrictionIsValid($row['restriction']) ){  
1590                                    
1591                  $this->correct=false;                  //Test si la restriction est valide
1592                  $this->addToMessage(_("Restriction non valide"));                  if ( !$this->restrictionIsValid($restriction) ){
1593              }                      
1594              else {                      $this->correct=false;
1595                        $this->addToMessage(_("Restriction non valide"));
1596                    }
1597                    else {
1598                        
1599                        $this->correct = true;
1600                    }
1601    
1602                    // Liste des opérateurs possible
1603                    $operateurs = array(">=", "<=", "+", "-");
1604    
1605                    // Supprime tous les espaces de la chaîne de caractère
1606                    $restriction = str_replace(' ', '', $restriction);
1607                                    
1608                  $this->correct = true;                  // Met des espace avant et après les opérateurs puis transforme la
1609                    // chaine en un tableau
1610                    $tabRestriction = str_replace($operateurs, " ", $restriction);
1611                    // Tableau des champ
1612                    $tabRestriction = explode(" ", $tabRestriction);
1613                    // Supprime les numériques du tableau
1614                    foreach ($tabRestriction as $key => $value) {
1615                        if (is_numeric($value)) {
1616                            unset($tabRestriction[$key]);
1617                        }
1618                    }
1619    
1620                    // Vérifie les champs utilisés pour la restriction
1621                    $check_field_exist = $this->f->check_field_exist($tabRestriction, 'instruction');
1622                    if ($check_field_exist !== true) {
1623    
1624                        // Liste des champs en erreur
1625                        $string_error_fields = implode(", ", $check_field_exist);
1626    
1627                        // Message d'erreur
1628                        $error_message = _("Le champ %s n'est pas utilisable pour le champ %s");
1629                        if (count($check_field_exist) > 1) {
1630                            $error_message = _("Les champs %s ne sont pas utilisable pour le champ %s");
1631                        }
1632    
1633                        // Affiche l'erreur
1634                        $this->correct=false;
1635                        $this->addToMessage(sprintf($error_message, $string_error_fields, _("restriction")));
1636                        $this->addToMessage(_("Veuillez contacter votre administrateur."));
1637                    }
1638              }              }
1639    
1640            }
1641            if(!$this->updateDate("date_envoi_signature")) {
1642                return false;
1643            }
1644            if(!$this->updateDate("date_retour_signature")) {
1645                return false;
1646            }
1647            if(!$this->updateDate("date_envoi_rar")) {
1648                return false;
1649            }
1650            if(!$this->updateDate("date_retour_rar")) {
1651                return false;
1652            }
1653            if(!$this->updateDate("date_envoi_controle_legalite")) {
1654                return false;
1655            }
1656            if(!$this->updateDate("date_retour_controle_legalite")) {
1657                return false;
1658          }          }
1659    
         $this->updateDate("date_envoi_signature");  
         $this->updateDate("date_retour_signature");  
         $this->updateDate("date_envoi_rar");  
         $this->updateDate("date_retour_rar");  
         $this->updateDate("date_envoi_controle_legalite");  
         $this->updateDate("date_retour_controle_legalite");  
1660      }      }
1661        
1662        /**
1663         * Méthode permettant de récupérer toutes les valeurs de l'événement
1664         * sélectionné après validation du formulaire d'instruction
1665         *
1666         * @return array() veleurs de l'événement lié
1667         */
1668    
1669        private function getValEvenement() {
1670            if(!empty($this->valEvenement)) {
1671                return $this->valEvenement;
1672            } else {
1673                $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1674                    WHERE evenement=".$this->valF['evenement'];
1675                $res = $this->db->query($sql);
1676                $this->addToLog("getValEvenement(): db->query(\"".$sql."\");", VERBOSE_MODE);
1677                if (database::isError($res)) {
1678                    die($res->getMessage());
1679                }
1680                $this->valEvenement = $res->fetchRow(DB_FETCHMODE_ASSOC);
1681                return $this->valEvenement;
1682            }
1683        }
1684    
1685      /**      /**
1686       * Méthode permettant de mettre à jour l'état d'un DA       * Méthode permettant de savoir si le dossier lié à l'instruction à le flag
1687         * incompletude à true après validation du formulaire d'instruction
1688         *
1689         * @return boolean
1690       */       */
1691      function majEtatDA() {      private function dossierIncomplet() {
1692          if($this->valF['action'] == 'accepter' AND $this->valF['avis_decision'] == 8) {          $sql = "SELECT incompletude FROM ".DB_PREFIXE."dossier
1693              $val['etat_dossier_autorisation']=5;                  WHERE dossier='".$this->valF['dossier']."'";
1694          } elseif($this->valF['action'] == 'accepter' AND $this->valF['avis_decision'] == 15) {          $incompletude = $this->db->getOne($sql);
1695              $val['etat_dossier_autorisation']=3;          $this->addToLog("dossierIncomplet(): db->query(\"".$sql."\");", VERBOSE_MODE);
1696          } elseif($this->valF['action'] == 'accepter') {          if (database::isError($incompletude)) {
1697              $val['etat_dossier_autorisation']=2;              die($incompletude->getMessage());
1698          } elseif($this->valF['action'] == 'rejeter') {          }
1699              $val['etat_dossier_autorisation']=4;          if ($incompletude == 't') {
1700          } elseif($this->valF['action'] == 'terminer') {              return true;
             $val['etat_dossier_autorisation']=8;  
         } elseif($this->valF['action'] == 'majorer') {  
             $val['etat_dossier_autorisation']=6;  
1701          } else {          } else {
1702              $val['etat_dossier_autorisation']=7;              return false;
1703          }          }
1704                }
1705          //Récupération du numéro de dossier d'autorisation lié au dossier d'instruction      
1706          $IDdossier_autorisation = $this->getDossierAutorisation($this->valF['dossier']);      /**
1707               * Finalisation des documents.
1708          // Mis à jour de l'état du dossier d'autorisation       * @param  string $champ    champ du fichier à finaliser
1709          require_once '../obj/dossier_autorisation.class.php';       * @param  booleen $status  permet de définir si on finalise ou définalise
1710          $dossier_autorisation = new dossier_autorisation($IDdossier_autorisation,$this->db,DEBUG);       * @param  string $sousform permet de savoir si se trouve dans un sousformulaire (passé au javascript)
1711                 */
1712          $dossier_autorisation->val[array_search("etat_dossier_autorisation", $dossier_autorisation->champs)] = $val['etat_dossier_autorisation'];      function finaliser( $champ = '', $status, $sousform, $retourformulaire){
1713            
1714          //Récupération des données          //Si on finalise le document
1715          $valDossierAutorisation = array();          if ( $status == 1 ){
         for ( $i=0 ; $i<count($dossier_autorisation->champs); $i++){  
1716                            
1717              $valDossierAutorisation[$dossier_autorisation->champs[$i]]=              //Génération du PDF
1718                  $dossier_autorisation->val[$i];              $_GET['output'] = "string";
1719                $f = $this->f;
1720                include '../app/pdf_instruction.php';
1721                
1722                //Métadonnées du document
1723                $metadata = array(
1724                    'filename' => 'instruction_'.$idx.'.pdf',
1725                    'mimetype' => 'application/pdf',
1726                    'size' => strlen($pdf_output)
1727                );
1728    
1729                // Récupération des métadonnées calculées après validation
1730                $spe_metadata = $this->getMetadata("om_fichier_instruction");
1731    
1732                $metadata = array_merge($metadata, $spe_metadata);
1733                //Si le document a déjà été finalisé
1734                //on met à jour le document mais pas son uid
1735                if ( $this->getVal("om_fichier_instruction") != '' ){
1736                    $uid = $this->f->storage->update(
1737                        $this->getVal("om_fichier_instruction"), $pdf_output, $metadata);
1738                }
1739                //Sinon, on joute le document et on récupère son uid
1740                else {
1741                    //Stockage du PDF
1742                    $uid = $this->f->storage->create($pdf_output, $metadata);
1743                }
1744            }
1745            else {
1746                //Récupération de l'uid du document finalisé
1747                $uid = $this->getVal("om_fichier_instruction");
1748                
1749                //On dé-finalise avant de finaliser
1750                if ( $uid == '' || $uid == 'OP_FAILURE' ){
1751                    return -1;
1752                }
1753          }          }
1754    
1755          $dossier_autorisation->modifier($valDossierAutorisation, $this->db, DEBUG);          //Mise à jour des données
1756      }          if ( $uid != '' || $uid == 'OP_FAILURE' ){
1757                    // Logger
1758     /**              $this->addToLog("finaliser() - begin", EXTRA_VERBOSE_MODE);
1759      * Méthode permettant de mettre à jour les données d'un DA              // Recuperation de la valeur de la cle primaire de l'objet
1760      */              if($this->getVal($this->clePrimaire) != '')
1761      function majDataDA() {                  $id = $this->getVal($this->clePrimaire);
1762                        else
1763          //Récupération du numéro de dossier d'autorisation lié au dossier d'instruction                  $id=$this->id;
         $IDdossier_autorisation = $this->getDossierAutorisation($this->valF['dossier']);  
         require_once '../obj/dossier_autorisation.class.php';  
         $dossier_autorisation = new dossier_autorisation($IDdossier_autorisation,$this->db,DEBUG);  
           
         require_once '../obj/dossier.class.php';  
         $dossier = new dossier($this->valF['dossier'],$this->db,DEBUG);  
           
         //Récupération des données  
         $valDossierAutorisation = array();  
         for ( $i=0 ; $i<count($dossier_autorisation->champs); $i++){  
1764                            
1765              if ( array_search($dossier_autorisation->champs[$i], $dossier->champs) ){              $actions = array();
1766                //Tableau contenant le lien vers le PDF et lien du portlet pour la mise
1767                //à jour de l'interface
1768                if ( $status == 0 ){
1769                    $lien = '../app/pdf_instruction.php?idx='.$id;
1770                                    
1771                  $valDossierAutorisation[$dossier_autorisation->champs[$i]]=$dossier->getVal($dossier_autorisation->champs[$i]);                  //Ajout des actions
1772                    //Si l'utilisateur a le droit de modifier l'objet
1773                    if ( $this->f->isAccredited('instruction') ||
1774                        $this->f->isAccredited('instruction_modifier') ){
1775                            
1776                        $actions["modifier"] = ($sousform!='')?
1777                            '<li><a href="#" onclick="ajaxIt(\'instruction\',
1778                            \'../scr/sousform.php?obj=instruction&amp;action=1&amp;idx='.
1779                            $this->getVal($this->clePrimaire).
1780                            '&amp;premiersf=0&amp;trisf=&amp;retourformulaire='.$retourformulaire.'&amp;idxformulaire='.
1781                            $this->getVal("dossier").
1782                            '&amp;retour=form\');">
1783                            <span class="om-prev-icon om-icon-16 edit-16" title="'.
1784                            _('Modifier').'">'.
1785                            _('Modifier').
1786                            '</span></a></li>':
1787                            '<li>
1788                            <a href="form.php?obj=instruction&amp;action=1'.'&amp;idx='.
1789                            $this->getVal($this->clePrimaire).
1790                            '&amp;premier=&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=form">
1791                            <span class="om-prev-icon om-icon-16 edit-16" title="'.
1792                            _('Modifier').'">'.
1793                            _('Modifier').
1794                            '</span></a></li>';
1795                    }
1796                    //Si l'utilisateur a le droit de supprimer l'objet
1797                    if ( $this->f->isAccredited('instruction') ||
1798                        $this->f->isAccredited('instruction_supprimer') ){
1799                            
1800                        $actions["supprimer"] = ($sousform!='')?
1801                            '<li><a href="#" onclick="ajaxIt(\'instruction\',
1802                            \'../scr/sousform.php?obj=instruction&amp;action=2&amp;idx='.
1803                            $this->getVal($this->clePrimaire).
1804                            '&amp;premiersf=0&amp;trisf=&amp;retourformulaire='.$retourformulaire.'&amp;idxformulaire='.
1805                            $this->getVal("dossier").
1806                            '&amp;retour=form\');">
1807                            <span class="om-prev-icon om-icon-16 delete-16" title="'.
1808                            _('Supprimer').'">'.
1809                            _('Supprimer').
1810                            '</span></a></li>':
1811                            '<li>
1812                            <a href="form.php?obj=instruction&amp;action=1'.'&amp;idx='.
1813                            $this->getVal($this->clePrimaire).
1814                            '&amp;premier=&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=form">
1815                            <span class="om-prev-icon om-icon-16 delete-16" title="'.
1816                            _('Supprimer').'">'.
1817                            _('Supprimer').
1818                            '</span></a></li>';
1819                    }
1820              }              }
1821              else {              else {
1822                  $valDossierAutorisation[$dossier_autorisation->champs[$i]]=                  $lien = '../spg/file.php?obj=instruction&'.
1823                  $dossier_autorisation->val[$i];                      'champ=om_fichier_instruction&id='.$id;
1824                }
1825    
1826               $retour = array(
1827                    "portlet"=> "<a href=\"#\" onclick=\"finalizeDocument(".
1828                        $id.", 'instruction', '".$sousform."', ".(($status==0)?1:0).")\">
1829                        <span class=\"om-prev-icon om-icon-16 om-icon-fix "
1830                        .(($status==1)?"de":"")."finalise\" title=\"".
1831                        (($status==1)?_("Reprendre la redaction du document"):_("Finaliser le document"))."\">".
1832                        (($status==1)?_("Reprendre la redaction du document"):_("Finaliser le document"))."</span>
1833                        </a>",
1834                    "pdf" => $lien,
1835                    "actions" => $actions
1836                );
1837    
1838                foreach ( $this->champs as $key=>$value )
1839                    $val[$value] = $this->val[$key];
1840                $val['date_evenement']=$this->dateDBToForm($val['date_evenement']);
1841                $val['archive_date_complet']=$this->dateDBToForm($val['archive_date_complet']);
1842                $val['archive_date_rejet']=$this->dateDBToForm($val['archive_date_rejet']);
1843                $val['archive_date_limite']=$this->dateDBToForm($val['archive_date_limite']);
1844                $val['archive_date_notification_delai']=$this->dateDBToForm($val['archive_date_notification_delai']);
1845                $val['archive_date_decision']=$this->dateDBToForm($val['archive_date_decision']);
1846                $val['archive_date_validite']=$this->dateDBToForm($val['archive_date_validite']);
1847                $val['archive_date_achevement']=$this->dateDBToForm($val['archive_date_achevement']);
1848                $val['archive_date_chantier']=$this->dateDBToForm($val['archive_date_chantier']);
1849                $val['archive_date_conformite']=$this->dateDBToForm($val['archive_date_conformite']);
1850                $val['archive_date_dernier_depot']=$this->dateDBToForm($val['archive_date_dernier_depot']);
1851                $val['archive_date_limite_incompletude']=$this->dateDBToForm($val['archive_date_limite_incompletude']);
1852                $val['date_finalisation_courrier']=$this->dateDBToForm($val['date_finalisation_courrier']);
1853                $val['date_envoi_signature']=$this->dateDBToForm($val['date_envoi_signature']);
1854                $val['date_retour_signature']=$this->dateDBToForm($val['date_retour_signature']);
1855                $val['date_envoi_rar']=$this->dateDBToForm($val['date_envoi_rar']);
1856                $val['date_retour_rar']=$this->dateDBToForm($val['date_retour_rar']);
1857                $val['date_envoi_controle_legalite']=$this->dateDBToForm($val['date_envoi_controle_legalite']);
1858                $val['date_retour_controle_legalite']=$this->dateDBToForm($val['date_retour_controle_legalite']);
1859                
1860                $this->setvalF($val);
1861    
1862                // Verification de la validite des donnees
1863                $this->verifier($this->val, $this->db, DEBUG);
1864                // Verification du verrou
1865                $this->testverrou();
1866                // Si les verifications precedentes sont correctes, on procede a
1867                // la modification, sinon on ne fait rien et on retourne une erreur
1868                if ($this->correct) {
1869                    // Execution du trigger 'before' specifique au MODE 'update'
1870                    $this->triggermodifier( $id, $this->db, $this->val, DEBUG);
1871                    $valF = array(
1872                            "om_final_instruction"=> ($status==1)?TRUE:FALSE,
1873                            "om_fichier_instruction"=>$uid,
1874                            "date_finalisation_courrier"=>date('Y-m-d'));
1875                    // Execution de la requête de modification des donnees de l'attribut
1876                    // valF de l'objet dans l'attribut table de l'objet
1877                    $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF,
1878                        DB_AUTOQUERY_UPDATE, $this->getCle($id));
1879                     $this->addToLog("finaliser() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id)."\")", VERBOSE_MODE);
1880                    // Si une erreur survient
1881                    if (database::isError($res)) {
1882                        // Appel de la methode de recuperation des erreurs
1883                        $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
1884                    } else {
1885                        // Log
1886                        $this->addToLog(_("Requete executee"), VERBOSE_MODE);
1887                        // Log
1888                        $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
1889                        $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
1890                        $message .= "[&nbsp;".$this->db->affectedRows()."&nbsp;";
1891                        $message .= _("enregistrement(s) mis a jour")."&nbsp;]";
1892                        $this->addToLog($message, VERBOSE_MODE);
1893                        // Mise en place du verrou pour ne pas finaliser plusieurs fois
1894                        // le meme document
1895                        $this->verrouille();
1896                        // Execution du trigger 'after' specifique au MODE 'update'
1897                        //$this->triggermodifierapres($id, $this->db, $val, DEBUG);
1898    
1899                        return $retour;
1900                    }
1901                } else {
1902                    // Message d'echec (saut d'une ligne supplementaire avant le
1903                    // message pour qu'il soit mis en evidence)
1904                    $this->addToLog(_("Finalisation non enregistree"));
1905                    return -1;
1906              }              }
1907          }          }
1908            // Si le document n'a pas été stocké
1909            else{
1910                return -1;
1911            }
1912        }
1913    
1914          $dossier_autorisation->modifier($valDossierAutorisation, $this->db, DEBUG);      /**
1915                 * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
1916          // Suppression du liens entre les lots et le DA       * @return string numéro de dossier d'instruction
1917          $valLot['dossier_autorisation'] = NULL;       */
1918          $this->db->autoExecute(DB_PREFIXE."lot", $valLot, DB_AUTOQUERY_UPDATE, "dossier_autorisation='".$IDdossier_autorisation."'");      protected function getDossier() {
1919                    if(empty($this->specificMetadata)) {
1920          // Liaison des lots du DI avec le DA              $this->getSpecificMetadata();
         $sqlLot = "SELECT lot FROM ".DB_PREFIXE."lien_dossier_lot WHERE dossier='".$this->valF['dossier']."'";  
         $res = $this->db->query($sqlLot);  
         $this->addToLog($sqlLot);  
         $this->f->isDatabaseError();  
         while($rowLot = $res->fetchRow(DB_FETCHMODE_ASSOC)) {  
             $valLot['dossier_autorisation'] = $IDdossier_autorisation;  
             $this->db->autoExecute(DB_PREFIXE."lot", $valLot, DB_AUTOQUERY_UPDATE, "lot=".$rowLot['lot']);  
1921          }          }
1922            return $this->specificMetadata->dossier;
1923      }      }
1924            /**
1925      // Récupération de l'identifiant du dossier d'autorisation lié au dossier d'instruction       * Récupération la version du dossier d'instruction à ajouter aux métadonnées
1926      function getDossierAutorisation($dossier_instruction){       * @return int Version
1927         */
1928        protected function getDossierVersion() {
1929            if(empty($this->specificMetadata)) {
1930                $this->getSpecificMetadata();
1931            }
1932            return $this->specificMetadata->version;
1933        }
1934        /**
1935         * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
1936         * @return string numéro de dossier d'autorisation
1937         */
1938        protected function getNumDemandeAutor() {
1939            if(empty($this->specificMetadata)) {
1940                $this->getSpecificMetadata();
1941            }
1942            return $this->specificMetadata->dossier_autorisation;
1943        }
1944        /**
1945         * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
1946         * @return date de la demande initiale
1947         */
1948        protected function getAnneemoisDemandeAutor() {
1949            if(empty($this->specificMetadata)) {
1950                $this->getSpecificMetadata();
1951            }
1952            return $this->specificMetadata->date_demande_initiale;
1953        }
1954        /**
1955         * Récupération du type de dossier d'instruction à ajouter aux métadonnées
1956         * @return string type du dossier d'instruction
1957         */
1958        protected function getTypeInstruction() {
1959            if(empty($this->specificMetadata)) {
1960                $this->getSpecificMetadata();
1961            }
1962            return $this->specificMetadata->dossier_instruction_type;
1963        }
1964        /**
1965         * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
1966         * @return string avis
1967         */
1968        protected function getStatutAutorisation() {
1969            if(empty($this->specificMetadata)) {
1970                $this->getSpecificMetadata();
1971            }
1972            return $this->specificMetadata->statut;
1973        }
1974        /**
1975         * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
1976         * @return string type du dossier d'autorisation
1977         */
1978        protected function getTypeAutorisation() {
1979            if(empty($this->specificMetadata)) {
1980                $this->getSpecificMetadata();
1981            }
1982            return $this->specificMetadata->dossier_autorisation_type;
1983        }
1984        /**
1985         * Récupération de la date d'ajout de document à ajouter aux métadonnées
1986         * @return date de l'évènement
1987         */
1988        protected function getDateEvenementDocument() {
1989            return date("Y-m-d");
1990        }
1991        /**
1992         * Récupération du groupe d'instruction à ajouter aux métadonnées
1993         * @return string Groupe d'instruction
1994         */
1995        protected function getGroupeInstruction() {
1996            if(empty($this->specificMetadata)) {
1997                $this->getSpecificMetadata();
1998            }
1999            return $this->specificMetadata->groupe_instruction;
2000        }
2001        /**
2002         * Récupération du libellé du type du document à ajouter aux métadonnées
2003         * @return string Groupe d'instruction
2004         */
2005        protected function getTitle() {
2006    
2007            // Récupère le champ événement
2008            if (isset($this->valF["evenement"]) AND $this->valF["evenement"] != "") {
2009                $evenement = $this->valF["evenement"];
2010            } else {
2011                $evenement = $this->getVal("evenement");
2012            }
2013    
2014            // Requête sql
2015            $sql = "SELECT libelle FROM ".DB_PREFIXE."evenement
2016                    WHERE evenement=".$evenement;
2017            $evenement_libelle = $this->db->getOne($sql);
2018            $this->addToLog("getTitle(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2019            if (database::isError($evenement_libelle)) {
2020                die();
2021            }
2022    
2023            // Retourne le libelle de l'événement
2024            return $evenement_libelle;
2025        }
2026    
2027        /**
2028         * Cette méthode permet de stocker en attribut toutes les métadonnées
2029         * nécessaire à l'ajout d'un document.
2030         */
2031        public function getSpecificMetadata() {
2032            if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
2033                $dossier = $this->valF["dossier"];
2034            } else {
2035                $dossier = $this->getVal("dossier");
2036            }
2037            //Requête pour récupérer les informations essentiels sur le dossier d'instruction
2038            $sql = "SELECT dossier.dossier as dossier,
2039                            dossier_autorisation.dossier_autorisation as dossier_autorisation,
2040                            to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
2041                            dossier_instruction_type.code as dossier_instruction_type,
2042                            etat_dossier_autorisation.libelle as statut,
2043                            dossier_autorisation_type.code as dossier_autorisation_type,
2044                            groupe.code as groupe_instruction
2045                    FROM ".DB_PREFIXE."dossier
2046                        LEFT JOIN ".DB_PREFIXE."dossier_instruction_type  
2047                            ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2048                        LEFT JOIN ".DB_PREFIXE."dossier_autorisation
2049                            ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
2050                        LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
2051                            ON  dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
2052                        LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
2053                            ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2054                        LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
2055                            ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
2056                        LEFT JOIN ".DB_PREFIXE."groupe
2057                            ON dossier_autorisation_type.groupe = groupe.groupe
2058                    WHERE dossier.dossier = '".$dossier."'";
2059            $res = $this->db->query($sql);
2060            $this->f->addToLog("getSpecificMetadata() : db->query(".$sql.")", VERBOSE_MODE);
2061            if ( database::isError($res)){
2062                die();
2063            }
2064                    
2065          $sql = "SELECT          //Le résultat est récupéré dans un objet
2066                      dossier_autorisation.dossier_autorisation          $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
2067                  FROM  
2068                      ".DB_PREFIXE."dossier_autorisation          //Si il y a un résultat
2069                  LEFT JOIN          if ($row !== null) {
2070                    
2071                //Génération du numéro de version
2072                $sql = "SELECT
2073                            count(*)
2074                    FROM
2075                      ".DB_PREFIXE."dossier                      ".DB_PREFIXE."dossier
2076                    LEFT JOIN
2077                        ".DB_PREFIXE."dossier_autorisation
2078                      ON                      ON
2079                          dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation                          dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
2080                    LEFT JOIN
2081                        ".DB_PREFIXE."dossier_instruction_type
2082                        ON
2083                            dossier_instruction_type.dossier_instruction_type = dossier.dossier_instruction_type
2084                  WHERE                  WHERE
2085                      dossier.dossier = '".$dossier_instruction."'";                      dossier_autorisation.dossier_autorisation = '".$row->dossier_autorisation."'
2086                              AND
2087          $IDdossier_autorisation = $this->db->getOne($sql);                      dossier_instruction_type.code = '".$row->dossier_instruction_type."'";
2088          $this->addToLog("getDossierAutorisation(): db->getone(\"".$sql."\")", VERBOSE_MODE);              $row->version = $this->db->getOne($sql);
2089          database::isError($IDdossier_autorisation);              $this->f->addToLog("getSpecificMetadata(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
2090                if ( database::isError($row->version)){
2091                    $this->f->addToError("", $row->version, $row->version);
2092                    return false;
2093                }
2094                
2095                //Formatage du numéro de version
2096                $row->version = str_pad($row->version, 2, "0", STR_PAD_LEFT);
2097    
2098                //Alors on créé l'objet dossier_instruction
2099                $this->specificMetadata = $row;
2100    
2101            }
2102        }
2103        
2104        /**
2105         * Retourne le statut du dossier d'instruction
2106         * @param string $idx Identifiant du dossier d'instruction
2107         * @return string Le statut du dossier d'instruction
2108         */
2109        function getStatutAutorisationDossier($idx){
2110            
2111            $statut = '';
2112                    
2113          return $IDdossier_autorisation;          //Si l'identifiant du dossier d'instruction fourni est correct
2114            if ( $idx != '' ){
2115                
2116                //On récupère le statut de l'état du dossier à partir de l'identifiant du
2117                //dossier
2118                $sql = "SELECT etat.statut
2119                    FROM ".DB_PREFIXE."dossier
2120                    LEFT JOIN
2121                        ".DB_PREFIXE."etat
2122                        ON
2123                            dossier.etat = etat.etat
2124                    WHERE dossier ='".$idx."'";
2125                $statut = $this->db->getOne($sql);
2126                $this->f->addToLog("getStatutAutorisationDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
2127                if ( database::isError($statut)){
2128                    die();
2129                }
2130            }
2131            return $statut;
2132      }      }
2133    
2134        /**
2135         * Récupère les données du dossier
2136         * @return array
2137         */
2138        function get_dossier_actual() {
2139    
2140            // Initialisation de la valeur de retour
2141            $return = array();
2142    
2143            // Récupération de toutes les valeurs du dossier d'instruction en cours
2144            $sql = "SELECT * FROM ".DB_PREFIXE."dossier
2145            WHERE dossier='".$this->valF['dossier']."'";
2146            $res = $this->db->query($sql);
2147            $this->addToLog("get_dossier_actual(): db->query(\"".$sql."\");", VERBOSE_MODE);
2148            $this->f->isDatabaseError($res);
2149    
2150            //
2151            while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
2152    
2153                // Récupération de la valeur actuelle du délai, de l'accord tacite,
2154                // de l'état et de l'avis du dossier d'instruction
2155                $return['archive_delai']=$row['delai'];
2156                $return['archive_accord_tacite']=$row['accord_tacite'];
2157                $return['archive_etat']=$row['etat'];
2158                $return['archive_avis']=$row['avis_decision'];
2159                // Récupération de la valeur actuelle des 9 dates du dossier
2160                // d'instruction
2161                $return['archive_date_complet']=$row['date_complet'];
2162                $return['archive_date_dernier_depot']=$row['date_dernier_depot'];
2163                $return['archive_date_rejet']= $row['date_rejet'];
2164                $return['archive_date_limite']= $row['date_limite'];
2165                $return['archive_date_notification_delai']= $row['date_notification_delai'];
2166                $return['archive_date_decision']= $row['date_decision'];
2167                $return['archive_date_validite']= $row['date_validite'];
2168                $return['archive_date_achevement']= $row['date_achevement'];
2169                $return['archive_date_chantier']= $row['date_chantier'];
2170                $return['archive_date_conformite']= $row['date_conformite'];  
2171                $return['archive_incompletude']= $row['incompletude'];  
2172                $return['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];  
2173                $return['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];  
2174                $return['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];  
2175                $return['archive_date_limite_incompletude']= $row['date_limite_incompletude'];  
2176                $return['archive_delai_incompletude']= $row['delai_incompletude'];  
2177                $return['archive_autorite_competente']= $row['autorite_competente'];  
2178                $return['duree_validite']= $row['duree_validite'];  
2179            }
2180    
2181            // Retour de la fonction
2182            return $return;
2183    
2184        }
2185    
2186  }// fin classe  }// fin classe
2187  ?>  ?>

Legend:
Removed from v.1571  
changed lines
  Added in v.2604

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26