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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2905 - (hide annotations)
Wed Apr 2 10:27:34 2014 UTC (10 years, 10 months ago) by nhaye
File size: 112325 byte(s)
Modification de la vérification des restrictions lors de l'ajout d'un événement d'instruction afin qu'elles ne soient pas bloquante lors de l'ajout d'un événement retour

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

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26