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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2920 - (show annotations)
Mon Apr 7 14:14:30 2014 UTC (10 years, 10 months ago) by vpihour
File size: 113388 byte(s)
Correction de l'événement retour qui s'ajoutait même si la restriction n'était pas valide


1 <?php
2 /**
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 * - function mois_date : pour ajouter des mois a une date
16 * [add months (delay) and calculation final date]
17 * - voir script_lang.js : bible ...
18 *
19 * @package openfoncier
20 * @version SVN : $Id$
21 */
22
23 //
24 require_once "../gen/obj/instruction.class.php";
25
26 //
27 require_once "../services/outgoing/messageenqueuer.php";
28
29 //
30 class instruction extends instruction_gen {
31
32 var $archive_date_depot; // specific
33 var $retourformulaire; // specific
34 var $idxformulaire; // specific
35 var $valEvenement;
36 var $restriction_valid = null;
37 // Tableau contenant une partie des métadonnées arrêtés
38 var $metadonneesArrete;
39
40 var $metadata = array(
41 "om_fichier_instruction" => array(
42 "dossier" => "getDossier",
43 "dossier_version" => "getDossierVersion",
44 "numDemandeAutor" => "getNumDemandeAutor",
45 "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
46 "typeInstruction" => "getTypeInstruction",
47 "statutAutorisation" => "getStatutAutorisation",
48 "typeAutorisation" => "getTypeAutorisation",
49 "dateEvenementDocument" => "getDateEvenementDocument",
50 "groupeInstruction" => 'getGroupeInstruction',
51 "title" => 'getTitle',
52 ),
53 );
54
55
56 function __construct($id, &$db, $debug) {
57 $this->constructeur($id, $db, $debug);
58 }
59
60 // {{{ 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 // Si l'utilisateur est un intructeur qui ne correspond pas à la
69 // 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 //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 }
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
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
95 //Si le document est déjà finalisé, on affiche uniquement le lien de
96 //dé-finalisation
97 $om_final_instruction = $this->getVal("om_final_instruction");
98 if ( isset($this->actions_sup["finalisation"]) &&
99 $om_final_instruction== "t" ){
100
101 //On cache les liens d'action
102 $this->parameters["actions"]["modifier"] = NULL;
103 $this->parameters["actions"]["supprimer"] = NULL;
104 //On cache le lien de finalisation et on affiche le bon lien pour l'édition
105 $this->actions_sup["finalisation"] = NULL;
106 $this->actions_sup["pdfetat"]["lien"] = "../spg/file.php?id=";
107 $this->actions_sup["pdfetat"]["id"] =
108 "&amp;obj=instruction&amp;champ=om_fichier_instruction";
109 }
110 //Si le document n'est pas finalisé, on affiche uniquement le lien de
111 //finalisation
112 if ( isset($this->actions_sup["definalisation"]) &&
113 $om_final_instruction!= "t" ){
114
115 //On cache le lien de finalisation et on affiche le bon lien pour l'édition
116 $this->actions_sup["definalisation"] = NULL;
117 $this->actions_sup["pdfetat"]["lien"] = "../app/pdf_instruction.php?idx=";
118 $this->actions_sup["pdfetat"]["id"] = "";
119 }
120
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 $statut = $this->getStatutAutorisationDossier($idxformulaire);
137 // 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
142 //On cache les liens du portlet
143 $this->parameters["actions"]["modifier"] = NULL;
144 $this->actions_sup["finalisation"] = NULL;
145 $this->actions_sup["definalisation"] = NULL;
146 }
147 }
148 }
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 $this->addToLog("canAccess(): utilisateur instructeur sur un dossier d'une autre division", EXTRA_VERBOSE_MODE);
162 return false;
163 }
164
165 $retourformulaire = $this->getParameter("retourformulaire");
166 // 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 if ( $this->f->isUserInstructeur() &&
171 $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
172 && (
173 $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 && $this->getParameter("maj") != 3
181 && $this->getParameter("maj") != 0
182 && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
183
184 return false;
185 }
186 //
187 return true;
188 }
189
190 /**
191 * Cette variable permet de stocker le résultat de la méthode
192 * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
193 * ces appels.
194 * @var string Code de la division du dossier en cours
195 */
196 var $_division_from_dossier = NULL;
197
198 /**
199 * Cette méthode permet de récupérer le code de division correspondant
200 * au dossier sur lequel on se trouve.
201 *
202 * @return string Code de la division du dossier en cours
203 */
204 function getDivisionFromDossier() {
205
206 // Cette méthode peut être appelée plusieurs fois lors d'une requête.
207 // Pour éviter de refaire le traitement de recherche de la division
208 // alors on vérifie si nous ne l'avons pas déjà calculé.
209 if ($this->_division_from_dossier != NULL) {
210 // Logger
211 $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
212 // On retourne la valeur déjà calculée
213 return $this->_division_from_dossier;
214 }
215
216 // Par défaut, on définit la valeur du dossier à NULL
217 $dossier = NULL;
218 // Test sur le mode et le contexte du formulaire
219 if ($this->getParameter("maj") == 0
220 && ($this->getParameter("retourformulaire") == "dossier"
221 || $this->getParameter("retourformulaire") == "dossier_instruction"
222 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
223 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
224 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
225 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures")) {
226 // Si on se trouve en mode AJOUT (seul mode où l'enregistrement
227 // n'existe pas en base de données) ET que nous nous trouvons
228 // dans le contexte d'un dossier d'instruction alors on récupère
229 // le numéro de dossier depuis le paramètre 'idxformulaire'
230 $dossier = $this->getParameter("idxformulaire");
231 } else {
232 // Sinon on récupère le numéro de dossier dans le champs dossier de
233 // l'enregistrement (en base de données)
234 $dossier = $this->getVal("dossier");
235 }
236
237 // On appelle la méthode de la classe utils qui renvoi le code de la
238 // division d'un dossier, on la stocke pour ne pas refaire le calcul au
239 // prochain appel de cette méthode
240 $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
241 // Logger
242 $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
243 // On retourne la valeur retournée
244 return $this->_division_from_dossier;
245
246 }
247
248 /**
249 * Cette méthode permet de récupérer le dossier d'autorisation d'un dossier
250 */
251 function getNumDemandeAutorFromDossier($id) {
252 //
253 if (!isset($id)) {
254 return NULL;
255 }
256 //
257 $sql = "select dossier_autorisation from ".DB_PREFIXE."dossier ";
258 $sql .= " where dossier='".$id."'";
259 //
260 $dossier_autorisation = $this->db->getOne($sql);
261 $this->addToLog("getNumDemandeAutorFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
262 database::isError($dossier_autorisation);
263 //
264 return $dossier_autorisation;
265 }
266
267 // }}}
268
269 function setType(&$form, $maj) {
270 //
271 parent::setType($form, $maj);
272 // On cache tous les champs
273 // XXX
274 $form->setType('complement3_om_html', 'hidden');
275 $form->setType('bible3', 'hidden');
276 $form->setType('complement4_om_html', 'hidden');
277 $form->setType('bible4', 'hidden');
278 $form->setType('complement5_om_html', 'hidden');
279 $form->setType('bible5', 'hidden');
280 $form->setType('complement6_om_html', 'hidden');
281 $form->setType('bible6', 'hidden');
282 $form->setType('complement7_om_html', 'hidden');
283 $form->setType('bible7', 'hidden');
284 $form->setType('complement8_om_html', 'hidden');
285 $form->setType('bible8', 'hidden');
286 $form->setType('complement9_om_html', 'hidden');
287 $form->setType('bible9', 'hidden');
288 $form->setType('complement10_om_html', 'hidden');
289 $form->setType('bible10', 'hidden');
290 $form->setType('complement11_om_html', 'hidden');
291 $form->setType('bible11', 'hidden');
292 $form->setType('complement12_om_html', 'hidden');
293 $form->setType('bible12', 'hidden');
294 $form->setType('complement13_om_html', 'hidden');
295 $form->setType('bible13', 'hidden');
296 $form->setType('complement14_om_html', 'hidden');
297 $form->setType('bible14', 'hidden');
298 $form->setType('complement15_om_html', 'hidden');
299 $form->setType('bible15', 'hidden');
300 //
301 $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 $form->setType('avis_decision', 'hidden');
307 $form->setType('autorite_competente', 'hidden');
308 //
309 $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 $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 $form->setType('archive_autorite_competente','hidden');
324 //
325 $form->setType('numero_arrete', 'hidden');
326 //
327 $form->setType('code_barres', 'hidden');
328
329 //
330 $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 $form->setType('archive_date_limite_incompletude','hiddendate');
335 $form->setType('archive_delai_incompletude','hidden');
336
337 //
338 $form->setType('duree_validite','hidden');
339 $form->setType('duree_validite_parametrage','hidden');
340 if ($maj < 2) { //ajouter et modifier
341 $form->setType('destinataire', 'hidden');
342 $form->setType('lettretype', 'hiddenstatic');
343 $form->setType('complement_om_html', 'html');
344 $form->setType('complement2_om_html', 'html');
345 $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 $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 $form->setType('date_finalisation_courrier','datedisabled');
358
359
360
361 if($maj==0){ // add
362 $form->setType('instruction', 'hidden');
363 $form->setType('lettretype', 'hidden');
364 $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 // 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 }
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
393 //Cache les champs pour la finalisation
394 $form->setType('om_fichier_instruction', 'hidden');
395 $form->setType('om_final_instruction', 'hidden');
396 // Cache le document arrêté
397 $form->setType('document_numerise', 'hidden');
398
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 $form->setType("date_envoi_controle_legalite", "hiddendate");
404 $form->setType("date_retour_controle_legalite", "hiddendate");
405 }
406 }
407
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 if(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc.php"))
417 include ("../sql/".$db->phptype."/".$this->table.".form.inc.php");
418 elseif(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc"))
419 include ("../sql/".$db->phptype."/".$this->table.".form.inc");
420
421 //// action
422 //$this->init_select($form, $db, $maj, $debug, "action",
423 // $sql_action, $sql_action_by_id, false);
424
425 //// avis_decision
426 //$this->init_select($form, $db, $maj, $debug, "avis_decision",
427 // $sql_avis_decision, $sql_avis_decision_by_id, false);
428
429 //// dossier
430 //$this->init_select($form, $db, $maj, $debug, "dossier",
431 // $sql_dossier, $sql_dossier_by_id, false);
432
433 //// 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 evenement.libelle as lib
459 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 ORDER BY evenement.libelle, evenement.action";
469 $res = $db->query($sql);
470 $this->addToLog("setSelect(): db->query(\"".$sql."\");", VERBOSE_MODE);
471 if (database::isError($res)) {
472 die($res->getMessage());
473 }
474 // 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 evenement.libelle as lib
487 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 }
501
502 /**
503 * Gesion des liens vers la bible
504 */
505 // lien bible_auto
506 $contenu = array(_("automatique"));
507 $form->setSelect("bible_auto",$contenu);
508 // lien bible1
509 $contenu = array(_("bible"));
510 $form->setSelect("bible",$contenu);
511 // lien bible2
512 $contenu = array(_("bible"));
513 $form->setSelect("bible2",$contenu);
514 }
515
516 function cleSecondaire($id, &$db, $val, $DEBUG) {
517 //
518 parent::cleSecondaire($id, $db, $val, $DEBUG);
519
520 $id = $this->getVal($this->clePrimaire);
521
522
523 //Requête de vérification que cet événement d'instruction n'est pas lié
524 //à 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 if ( $this->correct !== false || $res == null || $res == ""){
540
541 // 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 //Si c'est un événement d'instruction lié à une demande
553 if ($res != null || $res != ""){
554
555 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 }
569
570 /**
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 }
597 }
598
599 /**
600 * Vérification de la possibilité ou non de modifier des dates de suivi
601 * @param string $champ champ date à vérifier
602 */
603 function updateDate($champ) {
604
605 //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 }
616 }
617
618 //
619 return true;
620 }
621
622 // 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 $res = $this->f->db->query($sql);
635 $this->f->addToLog("setVal(): db->query(\"".$sql."\");", VERBOSE_MODE);
636 if ( database::isError($res)){
637 die();
638 }
639
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 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
671 $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 $form->setBloc('complement_om_html','D',"","col_12");
689 $form->setFieldset('complement_om_html','D',_('Complement'));
690 $form->setFieldset('bible','F','');
691 $form->setBloc('bible','F');
692
693 $form->setBloc('complement2_om_html','D',"","col_12");
694 $form->setFieldset('complement2_om_html','D',_('Complement 2'));
695 $form->setFieldset('bible2','F','');
696 $form->setBloc('bible2','F');
697 }
698 }
699
700 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 }
708
709 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 * - autorite_competente
722 * 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 * - avis_decision
737 * 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 $res = $db->query($sql);
744 $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 $this->valF['action']=$row['action'];
754 }
755 // 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 $this->valF['etat']=$row['etat'];
762 }
763 // Récupération de la valeur d'accord tacite
764 $this->valF['accord_tacite']=$row['accord_tacite'];
765 // Récupération de la valeur du délai de notification
766 $this->valF['delai_notification']=$row['delai_notification'];
767 // 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 if(isset($row['avis_decision']) and !empty($row['avis_decision'])) {
771 $this->valF['avis_decision']=$row['avis_decision'];
772 }
773 // 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 // Récupération de la valeur de la lettre type
780 $this->valF['lettretype']=$row['lettretype'];
781 }
782 // 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 $res = $db->query($sql);
786 $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
787 if (database::isError($res)) {
788 die($res->getMessage());
789 }
790 $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
791 $this->updateArchiveData($row);
792 $this->archive_date_depot = $row['date_depot'];
793
794 // 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
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 }
815
816 // Test si une restriction est valide
817 // return boolean
818 function restrictionIsValid($restriction){
819 if($this->restriction_valid != null) {
820 return $this->restriction_valid;
821 }
822 // 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
830 // 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 $res = array();
838 // 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 // S'il y a un comparateur
847 if (in_array(">=", $tabRestriction)
848 || in_array("<=", $tabRestriction)) {
849
850 // 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 }
868 }
869
870 // 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
881 // Si l'opérateur qui suit est un "+"
882 if ($tabRestriction[$i] === "+") {
883 $dateDep = $res[$j];
884 unset($res[$j]);$j++;
885 $duree = $res[$j];
886 unset($res[$j]);
887 $res[$j] = $this->f->mois_date($dateDep, $duree, "+");
888 }
889
890 // Si l'opérateur qui suit est un "-"
891 if ($tabRestriction[$i] === "-") {
892 $dateDep = $res[$j];
893 unset($res[$j]);$j++;
894 $duree = $res[$j];
895 unset($res[$j]);
896 $res[$j] = $this->f->mois_date($dateDep, $duree, "-");
897 }
898 }
899
900 }
901
902 // Si les tableau des résultats n'est pas vide
903 if (count($res) > 0) {
904 //
905 $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 }
913 if ($comparateur === "<=") {
914
915 if (strtotime($res[0]) <= strtotime($res[$j])) {
916 $res_bool = true;
917 }
918 }
919 }
920 // 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 }
929
930 return $res_bool;
931
932 }
933
934 /**
935 * 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 * 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 * 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 */
1020 function regle($rule, $rule_name, $type = null) {
1021
1022 // 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
1029 // Règle à null
1030 if ($rule == "null") {
1031 return null;
1032 }
1033
1034 // 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 }
1042
1043 // 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 }
1067 if (in_array($rule_name, $rule_type_numeric) == true) {
1068 $type = "numeric";
1069 }
1070
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 }
1130
1131 function triggerajouterapres($id,&$db,$val,$DEBUG) {
1132 /**
1133 * Mise à jour des valeurs du dossier en fonction des valeurs calculées
1134 * par l'action
1135 */
1136 $this->getValEvenement();
1137 // Initialisation
1138 $valF = "";
1139 // é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 // 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
1180 // pour chacune des regles, on applique la regle
1181 if($row['regle_delai']!=''){
1182 $valF['delai'] = $this->regle($row['regle_delai'], 'regle_delai');
1183 }
1184 if($row['regle_accord_tacite']!=''){
1185 $valF['accord_tacite'] = $this->regle($row['regle_accord_tacite'], 'regle_accord_tacite');
1186 }
1187 if($row['regle_avis']!=''){
1188 $valF['avis_decision'] = $this->regle($row['regle_avis'], 'regle_avis');
1189 }
1190 if($row['regle_date_limite']!=''){
1191 $valF['date_limite']= $this->regle($row['regle_date_limite'], 'regle_date_limite');
1192 }
1193 if($row['regle_date_complet']!=''){
1194 $valF['date_complet']= $this->regle($row['regle_date_complet'], 'regle_date_complet');
1195 }
1196 if($row['regle_date_dernier_depot']!=''){
1197 $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot'], 'regle_date_dernier_depot');
1198 }
1199 if($row['regle_date_notification_delai']!=''){
1200 $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai'], 'regle_date_notification_delai');
1201 }
1202 if($row['regle_date_decision']!=''){
1203 $valF['date_decision']= $this->regle($row['regle_date_decision'], 'regle_date_decision');
1204 }
1205 if($row['regle_date_rejet']!=''){
1206 $valF['date_rejet']= $this->regle($row['regle_date_rejet'], 'regle_date_rejet');
1207 }
1208 if($row['regle_date_validite']!=''){
1209 $valF['date_validite']= $this->regle($row['regle_date_validite'], 'regle_date_validite');
1210 }
1211 if($row['regle_date_chantier']!=''){
1212 $valF['date_chantier']= $this->regle($row['regle_date_chantier'], 'regle_date_chantier');
1213 }
1214 if($row['regle_date_achevement']!=''){
1215 $valF['date_achevement']= $this->regle($row['regle_date_achevement'], 'regle_date_achevement');
1216 }
1217 if($row['regle_date_conformite']!=''){
1218 $valF['date_conformite']= $this->regle($row['regle_date_conformite'], 'regle_date_conformite');
1219 }
1220 if($row['regle_date_limite_incompletude']!=''){
1221 $valF['date_limite_incompletude']= $this->regle($row['regle_date_limite_incompletude'], 'regle_date_limite_incompletude');
1222 }
1223 if($row['regle_delai_incompletude']!=''){
1224 $valF['delai_incompletude']= $this->regle($row['regle_delai_incompletude'], 'regle_delai_incompletude');
1225 }
1226 if($row['regle_autorite_competente']!=''){
1227 $valF['autorite_competente']= $this->regle($row['regle_autorite_competente'], 'regle_autorite_competente');
1228 }
1229 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 $valF['etat'] = $this->regle($row['regle_etat'], 'regle_etat');
1235 } else {
1236 $valF['etat_pendant_incompletude'] = $this->regle($row['regle_etat'], 'regle_etat');
1237 }
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 }
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 die($res->getMessage());
1257 }
1258 // Affichage d'informations à l'utilisateur
1259 $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1260 }
1261
1262 /**
1263 * REFERENTIEL ERP
1264 */
1265 // 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 //
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 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 $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 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1308 $this->correct = false;
1309 return false;
1310 }
1311 else {
1312 $this->addToMessage(_("Le message a ete transmis au ".
1313 "referentiel ERP."));
1314 }
1315 }
1316 if ($this->valF['evenement'] ==
1317 $this->f->getParameter('erp_evenement_refuser_dossier')) {
1318 $msgenque = new MessageEnqueuer();
1319 $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
1320 $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 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1330 $this->correct = false;
1331 return false;
1332 }
1333 else {
1334 $this->addToMessage(_("Le message a ete transmis au ".
1335 "referentiel ERP."));
1336 }
1337 }
1338 }
1339 } // fin de if ($this->f->getParameter('option_erp') != "")
1340
1341 // Mise à jour des données du dossier d'autorisation
1342 require_once "../obj/dossier_autorisation.class.php";
1343 $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($this->valF['dossier']), $this->db, DEBUG);
1344 if($da->majDossierAutorisation() === false) {
1345 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
1346 $this->correct = false;
1347 return false;
1348 }
1349 }
1350
1351 function triggermodifierapres($id,&$db,$val,$DEBUG) {
1352 /**
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 // Initialisation du type d'événement
1359 $type_evmt = "";
1360 // 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 $action = $db->getOne($sql);
1365 $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1366 if (database::isError($action)) {
1367 die($action->getMessage());
1368 }
1369
1370 // Récupération des paramètres de l'action
1371 $sql = "SELECT * FROM ".DB_PREFIXE."action
1372 WHERE action='".$action."'";
1373 $res = $db->query($sql);
1374 $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1375 if (database::isError($res)) {
1376 die($res->getMessage());
1377 }
1378 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
1379 // application des regles sur le courrier + delai
1380 if(preg_match("/date_evenement/",$row['regle_date_limite'])){
1381 $valF['date_limite']= $this->regle($row['regle_date_limite'], 'regle_date_limite');
1382 }
1383 if(preg_match("/date_evenement/",$row['regle_date_complet'])){
1384 $valF['date_complet']= $this->regle($row['regle_date_complet'], 'regle_date_complet');
1385 }
1386 if(preg_match("/date_evenement/",$row['regle_date_dernier_depot'])){
1387 $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot'], 'regle_date_dernier_depot');
1388 }
1389 if(preg_match("/date_evenement/",$row['regle_date_notification_delai'])){
1390 $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai'], 'regle_date_notification_delai');
1391 }
1392 if(preg_match("/date_evenement/",$row['regle_date_decision'])){
1393 $valF['date_decision']= $this->regle($row['regle_date_decision'], 'regle_date_decision');
1394 }
1395 if(preg_match("/date_evenement/",$row['regle_date_rejet'])){
1396 $valF['date_rejet']= $this->regle($row['regle_date_rejet'], 'regle_date_rejet');
1397 }
1398 if(preg_match("/date_evenement/",$row['regle_date_validite'])){
1399 $valF['date_validite']= $this->regle($row['regle_date_validite'], 'regle_date_validite');
1400 }
1401 if(preg_match("/date_evenement/",$row['regle_date_chantier'])){
1402 $valF['date_chantier']= $this->regle($row['regle_date_chantier'], 'regle_date_chantier');
1403 }
1404 if(preg_match("/date_evenement/",$row['regle_date_achevement'])){
1405 $valF['date_achevement']= $this->regle($row['regle_date_achevement'], 'regle_date_achevement');
1406 }
1407 if(preg_match("/date_evenement/",$row['regle_date_conformite'])){
1408 $valF['date_conformite']= $this->regle($row['regle_date_conformite'], 'regle_date_conformite');
1409 }
1410 }
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 $this->addToLog("triggermodifierapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1417 if (database::isError($res1)) {
1418 die($res->getMessage());
1419 }
1420 // Affichage d'informations à l'utilisateur
1421 $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1422 }
1423
1424 $restriction = $this->get_restriction($val['evenement']);
1425 $this->restriction_valid = $this->restrictionIsValid($restriction);
1426
1427 if($restriction == "" || $this->restriction_valid ){
1428 // Récupération de tous les paramètres de l'événement sélectionné
1429 $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1430 WHERE evenement=".$this->valF['evenement'];
1431 $res = $db->query($sql);
1432 $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1433 if (database::isError($res)) {
1434 die($res->getMessage());
1435 }
1436 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1437 // Si la date de retour signature est éditée on vérifie si il existe un événement automatique
1438 if ($this->getVal('date_retour_signature') == "" AND
1439 $this->valF['date_retour_signature'] != "" AND
1440 $row['evenement_retour_signature'] != "") {
1441 $new_instruction = new instruction("]", $db, $DEBUG);
1442 // Création d'un tableau avec la liste des champs de l'instruction
1443 foreach($new_instruction->champs as $champ) {
1444 $valNewInstr[$champ] = "";
1445 }
1446 // Définition des valeurs de la nouvelle instruction
1447 $valNewInstr["evenement"] = $row['evenement_retour_signature'];
1448 $valNewInstr["destinataire"] = $this->valF['destinataire'];
1449 $valNewInstr["dossier"] = $this->valF['dossier'];
1450 $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_signature']);
1451 $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
1452 $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
1453 $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
1454 $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
1455 $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
1456 $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
1457 $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1458
1459 //Si une erreur s'est produite et qu'il s'agit d'un problème
1460 //de restriction
1461 if ($retour == false && !$new_instruction->restriction_valid){
1462 $this->msg .= $new_instruction->msg;
1463 $this->addToLog("triggermodifierapres() : evenement retour ".
1464 "instruction ".$this->valF[$this->clePrimaire]." : ".
1465 $new_instruction->msg);
1466 }
1467 //Si une erreur s'est produite après le test de la restriction
1468 elseif ($retour == false && $new_instruction->restriction_valid){
1469 $this->correct = false ;
1470 $this->msg .= $new_instruction->msg;
1471 return false;
1472 }
1473 }
1474 // Si la date de retour AR est éditée on vérifie si il existe un événement automatique
1475 if ($this->getVal('date_retour_rar') == "" AND
1476 $this->valF['date_retour_rar'] != "" AND
1477 $row['evenement_retour_ar'] != "" ) {
1478 $new_instruction = new instruction("]", $db, $DEBUG);
1479 // Création d'un tableau avec la liste des champs de l'instruction
1480 foreach($new_instruction->champs as $champ) {
1481 $valNewInstr[$champ] = "";
1482 }
1483 // Définition des valeurs de la nouvelle instruction
1484 $valNewInstr["evenement"] = $row['evenement_retour_ar'];
1485 $valNewInstr["destinataire"] = $this->valF['destinataire'];
1486 $valNewInstr["dossier"] = $this->valF['dossier'];
1487 $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_rar']);
1488 $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
1489 $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
1490 $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
1491 $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
1492 $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
1493 $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
1494 $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1495
1496 //Si une erreur s'est produite et qu'il s'agit d'un problème
1497 //de restriction
1498 if ($retour == false && !$new_instruction->restriction_valid){
1499 $this->msg .= $new_instruction->msg;
1500 $this->addToLog("triggermodifierapres() : evenement retour ".
1501 "instruction ".$this->valF[$this->clePrimaire]." : ".
1502 $new_instruction->msg);
1503 }
1504 //Si une erreur s'est produite après le test de la restriction
1505 elseif ($retour == false && $new_instruction->restriction_valid){
1506 $this->correct = false ;
1507 $this->msg .= $new_instruction->msg;
1508 return false;
1509 }
1510 }
1511 }
1512 }
1513
1514 //Récupération du type de l'événement
1515 $sql = "SELECT type
1516 FROM ".DB_PREFIXE."evenement
1517 WHERE evenement=".$this->valF['evenement'];
1518 $type_evmt = $db->getOne($sql);
1519 $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1520 if (database::isError($type_evmt)) {
1521 die($type_evmt->getMessage());
1522 }
1523
1524 /**
1525 * REFERENTIEL ARRETE
1526 */
1527 // Si l'option référentiel arrêté est activé et l'événement est de type
1528 // arrêté
1529
1530 if ($this->f->getParameter('option_referentiel_arrete') != "" AND
1531 $type_evmt == "arrete") {
1532 if ($this->valF['date_retour_signature'] != $this->getVal('date_retour_signature')) {
1533 $msgenque = new MessageEnqueuer();
1534 $sqlArrete = "SELECT instruction.signataire_arrete as \"ws_DA_In_Signataire\",
1535 signataire_arrete.nom as \"ws_DA_In_Sign_Nom\",
1536 signataire_arrete.prenom as \"ws_DA_In_Sign_Prenom\",
1537 signataire_arrete.qualite as \"ws_DA_In_Sign_Qualite\",
1538 instruction.date_evenement as \"ws_DA_In_Dte_Redac\",
1539 '' as \"ws_DA_In_lieu_Redac\",
1540 instruction.dossier as \"ws_DA_In_N_Doss_DAS\",
1541 '' as \"ws_DA_In_Sigle\",
1542 instruction.etat as \"ws_DA_In_Decision\",
1543 dossier.date_depot as \"ws_DA_In_Dte_Depot_Dem\",
1544 dossier.terrain_adresse_voie_numero as \"ws_DA_In_N_Voie\",
1545 '' as \"ws_DA_In_Type_Voie\",
1546 dossier.terrain_adresse_voie as \"ws_DA_In_Adresse1\",
1547 dossier.terrain_adresse_lieu_dit as \"ws_DA_In_Adresse2\",
1548 dossier.terrain_adresse_code_postal as \"ws_DA_In_CP\",
1549 dossier.terrain_adresse_localite as \"ws_DA_In_Ville\",
1550 dossier.terrain_references_cadastrales as \"ws_DA_In_Nb_Parcelle\",
1551 '' as \"ws_DA_In_Detail_Parcelle\",
1552 CONCAT(donnees_techniques.am_projet_desc,' ',donnees_techniques.co_projet_desc) as \"ws_DA_In_Nature_Trvx\",
1553 '' as \"ws_DA_In_Destination_Trvx\",
1554 dossier_autorisation_type_detaille.code as \"ws_DA_In_Type_Dos_Autoris\",
1555 COALESCE(particulier_nom,personne_morale_raison_sociale) as \"ws_DA_In_Nom_Petition\",
1556 COALESCE(particulier_prenom, personne_morale_denomination) as \"ws_DA_In_Prenom_Petition\",
1557 '' as \"ws_DA_In_Piece_GED\",
1558 instruction.date_retour_signature as \"ws_DA_In_Dte_Signature\"
1559 FROM ".DB_PREFIXE."instruction
1560 LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
1561 instruction.signataire_arrete = signataire_arrete.signataire_arrete
1562 LEFT JOIN ".DB_PREFIXE."dossier ON
1563 instruction.dossier = dossier.dossier
1564 LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur ON
1565 lien_dossier_demandeur.dossier = dossier.dossier
1566 LEFT JOIN ".DB_PREFIXE."demandeur ON
1567 lien_dossier_demandeur.demandeur = demandeur.demandeur
1568 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type ON
1569 dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1570 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille ON
1571 dossier_instruction_type.dossier_autorisation_type_detaille =
1572 dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1573 LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
1574 donnees_techniques.dossier_instruction = dossier.dossier
1575 WHERE instruction.instruction = ".$this->valF['instruction'];
1576 $resArrete = $this->db->query($sqlArrete);
1577 $this->f->addToLog("triggermodifierapres(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
1578 if ( database::isError($resArrete)){
1579 die();
1580 }
1581
1582 $rowArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
1583 $msgenque->setArreteInfo($rowArrete);
1584 $return = $msgenque->enqueueMessage($msgenque::$ARRETE_ENVOI);
1585 //Si une erreur s'est produite on arrête le traitement et on
1586 //retourne une erreur
1587 if ($return !== 0){
1588
1589 //On supprime les messages précédents
1590 $this->msg = '';
1591 $this->addToMessage(_("Une erreur s'est produite lors de ".
1592 "l'envoi du message au referentiel arrêté. Merci de ".
1593 "contacter votre administrateur."));
1594 //On ne valide pas le formulaire
1595 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1596 $this->correct = false;
1597 return false;
1598 }
1599 else {
1600 $this->addToMessage(_("Le message a ete transmis au ".
1601 "referentiel arrêté."));
1602 }
1603 }
1604 }
1605
1606 // Mise à jour des données du dossier d'autorisation
1607 require_once "../obj/dossier_autorisation.class.php";
1608 $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($this->valF['dossier']), $this->db, DEBUG);
1609 if($da->majDossierAutorisation() === false) {
1610 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
1611 $this->correct = false;
1612 return false;
1613 }
1614 }
1615
1616 function triggersupprimer($id,&$db,$val,$DEBUG) {
1617 /**
1618 * L'objectif ici est de repositionner les valeurs récupérées en
1619 * archive dans le dossier d'instruction avant de supprimer l'événement
1620 * d'instruction
1621 */
1622
1623 // Mise à jour des 4 valeurs modifiées par l'action
1624 $valF['delai'] = $val['archive_delai'];
1625 $valF['accord_tacite'] = $val['archive_accord_tacite'];
1626 $valF['etat'] = $val['archive_etat'];
1627 if ($val['archive_avis'] != '') {
1628 $valF['avis_decision'] = $val['archive_avis'];
1629 } else {
1630 $valF['avis_decision'] = NULL;
1631 }
1632 // Mise à jour des 10 dates avec la valeur présente dans le formulaire
1633 // de suppression. Si la valeur de la date est vide alors on fixe
1634 // à la valeur NULL
1635 //
1636 if ($val['archive_date_complet'] != '') {
1637 $valF['date_complet'] = $val['archive_date_complet'];
1638 } else {
1639 $valF['date_complet'] = NULL;
1640 }
1641 if ($val['archive_date_dernier_depot'] != '') {
1642 $valF['date_dernier_depot'] = $val['archive_date_dernier_depot'];
1643 } else {
1644 $valF['date_dernier_depot'] = NULL;
1645 }
1646 if ($val['archive_date_rejet'] != '') {
1647 $valF['date_rejet'] = $val['archive_date_rejet'];
1648 } else {
1649 $valF['date_rejet'] = NULL;
1650 }
1651 if ($val['archive_date_limite'] != '') {
1652 $valF['date_limite'] = $val['archive_date_limite'];
1653 } else {
1654 $valF['date_limite'] = NULL;
1655 }
1656 if ($val['archive_date_notification_delai'] != '') {
1657 $valF['date_notification_delai'] = $val['archive_date_notification_delai'];
1658 } else {
1659 $valF['date_notification_delai'] = NULL;
1660 }
1661 if ($val['archive_date_decision'] != '') {
1662 $valF['date_decision'] = $val['archive_date_decision'];
1663 } else {
1664 $valF['date_decision'] = NULL;
1665 }
1666 if ($val['archive_date_validite'] != '') {
1667 $valF['date_validite'] = $val['archive_date_validite'];
1668 } else {
1669 $valF['date_validite'] = NULL;
1670 }
1671 if ($val['archive_date_achevement'] != '') {
1672 $valF['date_achevement'] = $val['archive_date_achevement'];
1673 } else {
1674 $valF['date_achevement'] = NULL;
1675 }
1676 if ($val['archive_date_chantier'] != '') {
1677 $valF['date_chantier'] = $val['archive_date_chantier'];
1678 } else {
1679 $valF['date_chantier'] = NULL;
1680 }
1681 if ($val['archive_date_conformite'] != '') {
1682 $valF['date_conformite'] = $val['archive_date_conformite'];
1683 } else {
1684 $valF['date_conformite'] = NULL;
1685 }
1686 if ($val['archive_incompletude'] != '') {
1687 $valF['incompletude'] = $val['archive_incompletude'];
1688 } else {
1689 $valF['incompletude'] = NULL;
1690 }
1691 if ($val['archive_evenement_suivant_tacite'] != '') {
1692 $valF['evenement_suivant_tacite'] = $val['archive_evenement_suivant_tacite'];
1693 } else {
1694 $valF['evenement_suivant_tacite'] = NULL;
1695 }
1696 if ($val['archive_evenement_suivant_tacite_incompletude'] != '') {
1697 $valF['evenement_suivant_tacite_incompletude'] = $val['archive_evenement_suivant_tacite_incompletude'];
1698 } else {
1699 $valF['evenement_suivant_tacite_incompletude'] = NULL;
1700 }
1701 if ($val['archive_etat_pendant_incompletude'] != '') {
1702 $valF['etat_pendant_incompletude'] = $val['archive_etat_pendant_incompletude'];
1703 } else {
1704 $valF['etat_pendant_incompletude'] = NULL;
1705 }
1706 if ($val['archive_date_limite_incompletude'] != '') {
1707 $valF['date_limite_incompletude'] = $val['archive_date_limite_incompletude'];
1708 } else {
1709 $valF['date_limite_incompletude'] = NULL;
1710 }
1711 if ($val['archive_delai_incompletude'] != '') {
1712 $valF['delai_incompletude'] = $val['archive_delai_incompletude'];
1713 } else {
1714 $valF['delai_incompletude'] = NULL;
1715 }
1716 if ($val['archive_autorite_competente'] != '') {
1717 $valF['autorite_competente'] = $val['archive_autorite_competente'];
1718 } else {
1719 $valF['autorite_competente'] = NULL;
1720 }
1721 // On met à jour le dossier
1722 $cle = " dossier='".$val['dossier']."'";
1723 $res = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1724 $this->addToLog("triggersupprimer(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1725 if (database::isError($res)) {
1726 die($res->getMessage());
1727 }
1728 // Affichage d'informations à l'utilisateur
1729 $this->addToMessage(_("Suppression de l'instruction")." [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1730
1731 // Mise à jour de la demande si un récépissé d'instruction correspond à l'instruction à supprimer
1732 }
1733
1734 function triggersupprimerapres($id,&$db,$val,$DEBUG) {
1735
1736 // Mise à jour des données du dossier d'autorisation
1737 require_once "../obj/dossier_autorisation.class.php";
1738 $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($val["dossier"]), $this->db, DEBUG);
1739 if($da->majDossierAutorisation() === false) {
1740 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
1741 $this->correct = false;
1742 return false;
1743 }
1744 }
1745
1746 // Vérifie la restriction sur l'événement
1747 function verifier($val = array(), &$db, $DEBUG){
1748 parent::verifier($val, $db, $DEBUG);
1749
1750 if ( isset($val['evenement']) && is_numeric($val['evenement'])){
1751 $restriction = $this->get_restriction($val['evenement']);
1752
1753 //Test qu'une restriction est présente
1754 if ($restriction != "" ){
1755
1756 //Test si la restriction est valide
1757 $this->restriction_valid = $this->restrictionIsValid($restriction);
1758 if ( !$this->restriction_valid ){
1759
1760 $this->addToMessage(_("Restriction non valide"));
1761 $this->correct = false;
1762 return false;
1763 }
1764
1765 // Liste des opérateurs possible
1766 $operateurs = array(">=", "<=", "+", "-");
1767
1768 // Supprime tous les espaces de la chaîne de caractère
1769 $restriction = str_replace(' ', '', $restriction);
1770
1771 // Met des espace avant et après les opérateurs puis transforme la
1772 // chaine en un tableau
1773 $tabRestriction = str_replace($operateurs, " ", $restriction);
1774 // Tableau des champ
1775 $tabRestriction = explode(" ", $tabRestriction);
1776 // Supprime les numériques du tableau
1777 foreach ($tabRestriction as $key => $value) {
1778 if (is_numeric($value)) {
1779 unset($tabRestriction[$key]);
1780 }
1781 }
1782
1783 // Vérifie les champs utilisés pour la restriction
1784 $check_field_exist = $this->f->check_field_exist($tabRestriction, 'instruction');
1785 if ($check_field_exist !== true) {
1786
1787 // Liste des champs en erreur
1788 $string_error_fields = implode(", ", $check_field_exist);
1789
1790 // Message d'erreur
1791 $error_message = _("Le champ %s n'est pas utilisable pour le champ %s");
1792 if (count($check_field_exist) > 1) {
1793 $error_message = _("Les champs %s ne sont pas utilisable pour le champ %s");
1794 }
1795
1796 // Affiche l'erreur
1797 $this->correct=false;
1798 $this->addToMessage(sprintf($error_message, $string_error_fields, _("restriction")));
1799 $this->addToMessage(_("Veuillez contacter votre administrateur."));
1800 }
1801 }
1802
1803 }
1804 if(!$this->updateDate("date_envoi_signature")) {
1805 return false;
1806 }
1807 if(!$this->updateDate("date_retour_signature")) {
1808 return false;
1809 }
1810 if(!$this->updateDate("date_envoi_rar")) {
1811 return false;
1812 }
1813 if(!$this->updateDate("date_retour_rar")) {
1814 return false;
1815 }
1816 if(!$this->updateDate("date_envoi_controle_legalite")) {
1817 return false;
1818 }
1819 if(!$this->updateDate("date_retour_controle_legalite")) {
1820 return false;
1821 }
1822
1823 }
1824
1825 /**
1826 * Méthode permettant de récupérer toutes les valeurs de l'événement
1827 * sélectionné après validation du formulaire d'instruction
1828 *
1829 * @return array() veleurs de l'événement lié
1830 */
1831
1832 private function getValEvenement() {
1833 if(!empty($this->valEvenement)) {
1834 return $this->valEvenement;
1835 } else {
1836 $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1837 WHERE evenement=".$this->valF['evenement'];
1838 $res = $this->db->query($sql);
1839 $this->addToLog("getValEvenement(): db->query(\"".$sql."\");", VERBOSE_MODE);
1840 if (database::isError($res)) {
1841 die($res->getMessage());
1842 }
1843 $this->valEvenement = $res->fetchRow(DB_FETCHMODE_ASSOC);
1844 return $this->valEvenement;
1845 }
1846 }
1847
1848 /**
1849 * Méthode permettant de savoir si le dossier lié à l'instruction à le flag
1850 * incompletude à true après validation du formulaire d'instruction
1851 *
1852 * @return boolean
1853 */
1854 private function dossierIncomplet() {
1855 $sql = "SELECT incompletude FROM ".DB_PREFIXE."dossier
1856 WHERE dossier='".$this->valF['dossier']."'";
1857 $incompletude = $this->db->getOne($sql);
1858 $this->addToLog("dossierIncomplet(): db->query(\"".$sql."\");", VERBOSE_MODE);
1859 if (database::isError($incompletude)) {
1860 die($incompletude->getMessage());
1861 }
1862 if ($incompletude == 't') {
1863 return true;
1864 } else {
1865 return false;
1866 }
1867 }
1868
1869 /**
1870 * Finalisation des documents.
1871 * @param string $champ champ du fichier à finaliser
1872 * @param booleen $status permet de définir si on finalise ou définalise
1873 * @param string $sousform permet de savoir si se trouve dans un sousformulaire (passé au javascript)
1874 */
1875 function finaliser( $champ = '', $status, $sousform, $retourformulaire){
1876
1877 //Si on finalise le document
1878 if ( $status == 1 ){
1879
1880 //Génération du PDF
1881 $_GET['output'] = "string";
1882 $f = $this->f;
1883 include '../app/pdf_instruction.php';
1884
1885 //Métadonnées du document
1886 $metadata = array(
1887 'filename' => 'instruction_'.$idx.'.pdf',
1888 'mimetype' => 'application/pdf',
1889 'size' => strlen($pdf_output)
1890 );
1891
1892 // Récupération des métadonnées calculées après validation
1893 $spe_metadata = $this->getMetadata("om_fichier_instruction");
1894
1895 $metadata = array_merge($metadata, $spe_metadata);
1896 //Si le document a déjà été finalisé
1897 //on met à jour le document mais pas son uid
1898 if ( $this->getVal("om_fichier_instruction") != '' ){
1899 $uid = $this->f->storage->update(
1900 $this->getVal("om_fichier_instruction"), $pdf_output, $metadata);
1901 }
1902 //Sinon, on joute le document et on récupère son uid
1903 else {
1904 //Stockage du PDF
1905 $uid = $this->f->storage->create($pdf_output, $metadata);
1906 }
1907 }
1908 else {
1909 //Récupération de l'uid du document finalisé
1910 $uid = $this->getVal("om_fichier_instruction");
1911
1912 //On dé-finalise avant de finaliser
1913 if ( $uid == '' || $uid == 'OP_FAILURE' ){
1914 return -1;
1915 }
1916 }
1917 //Mise à jour des données
1918 if ( $uid != '' && $uid != 'OP_FAILURE' ){
1919 // Logger
1920 $this->addToLog("finaliser() - begin", EXTRA_VERBOSE_MODE);
1921 // Recuperation de la valeur de la cle primaire de l'objet
1922 if($this->getVal($this->clePrimaire) != '')
1923 $id = $this->getVal($this->clePrimaire);
1924 else
1925 $id=$this->id;
1926
1927 $actions = array();
1928 //Tableau contenant le lien vers le PDF et lien du portlet pour la mise
1929 //à jour de l'interface
1930 if ( $status == 0 ){
1931 $lien = '../app/pdf_instruction.php?idx='.$id;
1932
1933 //Ajout des actions
1934 //Si l'utilisateur a le droit de modifier l'objet
1935 if ( $this->f->isAccredited('instruction') ||
1936 $this->f->isAccredited('instruction_modifier') ){
1937
1938 $actions["modifier"] = ($sousform!='')?
1939 '<li><a href="#" onclick="ajaxIt(\'instruction\',
1940 \'../scr/sousform.php?obj=instruction&amp;action=1&amp;idx='.
1941 $this->getVal($this->clePrimaire).
1942 '&amp;premiersf=0&amp;trisf=&amp;retourformulaire='.$retourformulaire.'&amp;idxformulaire='.
1943 $this->getVal("dossier").
1944 '&amp;retour=form\');">
1945 <span class="om-prev-icon om-icon-16 edit-16" title="'.
1946 _('Modifier').'">'.
1947 _('Modifier').
1948 '</span></a></li>':
1949 '<li>
1950 <a href="form.php?obj=instruction&amp;action=1'.'&amp;idx='.
1951 $this->getVal($this->clePrimaire).
1952 '&amp;premier=&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=form">
1953 <span class="om-prev-icon om-icon-16 edit-16" title="'.
1954 _('Modifier').'">'.
1955 _('Modifier').
1956 '</span></a></li>';
1957 }
1958 //Si l'utilisateur a le droit de supprimer l'objet
1959 if ( $this->f->isAccredited('instruction') ||
1960 $this->f->isAccredited('instruction_supprimer') ){
1961
1962 $actions["supprimer"] = ($sousform!='')?
1963 '<li><a href="#" onclick="ajaxIt(\'instruction\',
1964 \'../scr/sousform.php?obj=instruction&amp;action=2&amp;idx='.
1965 $this->getVal($this->clePrimaire).
1966 '&amp;premiersf=0&amp;trisf=&amp;retourformulaire='.$retourformulaire.'&amp;idxformulaire='.
1967 $this->getVal("dossier").
1968 '&amp;retour=form\');">
1969 <span class="om-prev-icon om-icon-16 delete-16" title="'.
1970 _('Supprimer').'">'.
1971 _('Supprimer').
1972 '</span></a></li>':
1973 '<li>
1974 <a href="form.php?obj=instruction&amp;action=1'.'&amp;idx='.
1975 $this->getVal($this->clePrimaire).
1976 '&amp;premier=&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=form">
1977 <span class="om-prev-icon om-icon-16 delete-16" title="'.
1978 _('Supprimer').'">'.
1979 _('Supprimer').
1980 '</span></a></li>';
1981 }
1982 }
1983 else {
1984 $lien = '../spg/file.php?obj=instruction&'.
1985 'champ=om_fichier_instruction&id='.$id;
1986 }
1987
1988 $retour = array(
1989 "portlet"=> "<a href=\"#\" onclick=\"finalizeDocument(".
1990 $id.", 'instruction', '".$sousform."', ".(($status==0)?1:0).")\">
1991 <span class=\"om-prev-icon om-icon-16 om-icon-fix "
1992 .(($status==1)?"de":"")."finalise\" title=\"".
1993 (($status==1)?_("Reprendre la redaction du document"):_("Finaliser le document"))."\">".
1994 (($status==1)?_("Reprendre la redaction du document"):_("Finaliser le document"))."</span>
1995 </a>",
1996 "pdf" => $lien,
1997 "actions" => $actions
1998 );
1999
2000 foreach ( $this->champs as $key=>$value )
2001 $val[$value] = $this->val[$key];
2002 $val['date_evenement']=$this->dateDBToForm($val['date_evenement']);
2003 $val['archive_date_complet']=$this->dateDBToForm($val['archive_date_complet']);
2004 $val['archive_date_rejet']=$this->dateDBToForm($val['archive_date_rejet']);
2005 $val['archive_date_limite']=$this->dateDBToForm($val['archive_date_limite']);
2006 $val['archive_date_notification_delai']=$this->dateDBToForm($val['archive_date_notification_delai']);
2007 $val['archive_date_decision']=$this->dateDBToForm($val['archive_date_decision']);
2008 $val['archive_date_validite']=$this->dateDBToForm($val['archive_date_validite']);
2009 $val['archive_date_achevement']=$this->dateDBToForm($val['archive_date_achevement']);
2010 $val['archive_date_chantier']=$this->dateDBToForm($val['archive_date_chantier']);
2011 $val['archive_date_conformite']=$this->dateDBToForm($val['archive_date_conformite']);
2012 $val['archive_date_dernier_depot']=$this->dateDBToForm($val['archive_date_dernier_depot']);
2013 $val['archive_date_limite_incompletude']=$this->dateDBToForm($val['archive_date_limite_incompletude']);
2014 $val['date_finalisation_courrier']=$this->dateDBToForm($val['date_finalisation_courrier']);
2015 $val['date_envoi_signature']=$this->dateDBToForm($val['date_envoi_signature']);
2016 $val['date_retour_signature']=$this->dateDBToForm($val['date_retour_signature']);
2017 $val['date_envoi_rar']=$this->dateDBToForm($val['date_envoi_rar']);
2018 $val['date_retour_rar']=$this->dateDBToForm($val['date_retour_rar']);
2019 $val['date_envoi_controle_legalite']=$this->dateDBToForm($val['date_envoi_controle_legalite']);
2020 $val['date_retour_controle_legalite']=$this->dateDBToForm($val['date_retour_controle_legalite']);
2021
2022 $this->setvalF($val);
2023
2024 // Verification de la validite des donnees
2025 $this->verifier($this->val, $this->db, DEBUG);
2026 // Verification du verrou
2027 $this->testverrou();
2028 // Si les verifications precedentes sont correctes, on procede a
2029 // la modification, sinon on ne fait rien et on retourne une erreur
2030 if ($this->correct) {
2031 // Execution du trigger 'before' specifique au MODE 'update'
2032 $this->triggermodifier( $id, $this->db, $this->val, DEBUG);
2033 $valF = array(
2034 "om_final_instruction"=> ($status==1)?TRUE:FALSE,
2035 "om_fichier_instruction"=>$uid,
2036 "date_finalisation_courrier"=>date('Y-m-d'));
2037 // Execution de la requête de modification des donnees de l'attribut
2038 // valF de l'objet dans l'attribut table de l'objet
2039 $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF,
2040 DB_AUTOQUERY_UPDATE, $this->getCle($id));
2041 $this->addToLog("finaliser() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id)."\")", VERBOSE_MODE);
2042 // Si une erreur survient
2043 if (database::isError($res)) {
2044 // Appel de la methode de recuperation des erreurs
2045 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
2046 } else {
2047 // Log
2048 $this->addToLog(_("Requete executee"), VERBOSE_MODE);
2049 // Log
2050 $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
2051 $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
2052 $message .= "[&nbsp;".$this->db->affectedRows()."&nbsp;";
2053 $message .= _("enregistrement(s) mis a jour")."&nbsp;]";
2054 $this->addToLog($message, VERBOSE_MODE);
2055 // Mise en place du verrou pour ne pas finaliser plusieurs fois
2056 // le meme document
2057 $this->verrouille();
2058 // Execution du trigger 'after' specifique au MODE 'update'
2059 //$this->triggermodifierapres($id, $this->db, $val, DEBUG);
2060
2061 return $retour;
2062 }
2063 } else {
2064 // Message d'echec (saut d'une ligne supplementaire avant le
2065 // message pour qu'il soit mis en evidence)
2066 $this->addToLog(_("Finalisation non enregistree"));
2067 return -1;
2068 }
2069 }
2070 // Si le document n'a pas été stocké
2071 else{
2072 return -1;
2073 }
2074 }
2075
2076 /**
2077 * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
2078 * @return string numéro de dossier d'instruction
2079 */
2080 protected function getDossier() {
2081 if(empty($this->specificMetadata)) {
2082 $this->getSpecificMetadata();
2083 }
2084 return $this->specificMetadata->dossier;
2085 }
2086 /**
2087 * Récupération la version du dossier d'instruction à ajouter aux métadonnées
2088 * @return int Version
2089 */
2090 protected function getDossierVersion() {
2091 if(empty($this->specificMetadata)) {
2092 $this->getSpecificMetadata();
2093 }
2094 return $this->specificMetadata->version;
2095 }
2096 /**
2097 * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
2098 * @return string numéro de dossier d'autorisation
2099 */
2100 protected function getNumDemandeAutor() {
2101 if(empty($this->specificMetadata)) {
2102 $this->getSpecificMetadata();
2103 }
2104 return $this->specificMetadata->dossier_autorisation;
2105 }
2106 /**
2107 * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
2108 * @return date de la demande initiale
2109 */
2110 protected function getAnneemoisDemandeAutor() {
2111 if(empty($this->specificMetadata)) {
2112 $this->getSpecificMetadata();
2113 }
2114 return $this->specificMetadata->date_demande_initiale;
2115 }
2116 /**
2117 * Récupération du type de dossier d'instruction à ajouter aux métadonnées
2118 * @return string type du dossier d'instruction
2119 */
2120 protected function getTypeInstruction() {
2121 if(empty($this->specificMetadata)) {
2122 $this->getSpecificMetadata();
2123 }
2124 return $this->specificMetadata->dossier_instruction_type;
2125 }
2126 /**
2127 * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
2128 * @return string avis
2129 */
2130 protected function getStatutAutorisation() {
2131 if(empty($this->specificMetadata)) {
2132 $this->getSpecificMetadata();
2133 }
2134 return $this->specificMetadata->statut;
2135 }
2136 /**
2137 * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
2138 * @return string type du dossier d'autorisation
2139 */
2140 protected function getTypeAutorisation() {
2141 if(empty($this->specificMetadata)) {
2142 $this->getSpecificMetadata();
2143 }
2144 return $this->specificMetadata->dossier_autorisation_type;
2145 }
2146 /**
2147 * Récupération de la date d'ajout de document à ajouter aux métadonnées
2148 * @return date de l'évènement
2149 */
2150 protected function getDateEvenementDocument() {
2151 return date("Y-m-d");
2152 }
2153 /**
2154 * Récupération du groupe d'instruction à ajouter aux métadonnées
2155 * @return string Groupe d'instruction
2156 */
2157 protected function getGroupeInstruction() {
2158 if(empty($this->specificMetadata)) {
2159 $this->getSpecificMetadata();
2160 }
2161 return $this->specificMetadata->groupe_instruction;
2162 }
2163 /**
2164 * Récupération du libellé du type du document à ajouter aux métadonnées
2165 * @return string Groupe d'instruction
2166 */
2167 protected function getTitle() {
2168
2169 // Récupère le champ événement
2170 if (isset($this->valF["evenement"]) AND $this->valF["evenement"] != "") {
2171 $evenement = $this->valF["evenement"];
2172 } else {
2173 $evenement = $this->getVal("evenement");
2174 }
2175
2176 // Requête sql
2177 $sql = "SELECT libelle FROM ".DB_PREFIXE."evenement
2178 WHERE evenement=".$evenement;
2179 $evenement_libelle = $this->db->getOne($sql);
2180 $this->addToLog("getTitle(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2181 if (database::isError($evenement_libelle)) {
2182 die();
2183 }
2184
2185 // Retourne le libelle de l'événement
2186 return $evenement_libelle;
2187 }
2188
2189 /**
2190 * Cette méthode permet de stocker en attribut toutes les métadonnées
2191 * nécessaire à l'ajout d'un document.
2192 */
2193 public function getSpecificMetadata() {
2194 if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
2195 $dossier = $this->valF["dossier"];
2196 } else {
2197 $dossier = $this->getVal("dossier");
2198 }
2199 //Requête pour récupérer les informations essentiels sur le dossier d'instruction
2200 $sql = "SELECT dossier.dossier as dossier,
2201 dossier_autorisation.dossier_autorisation as dossier_autorisation,
2202 to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
2203 dossier_instruction_type.code as dossier_instruction_type,
2204 etat_dossier_autorisation.libelle as statut,
2205 dossier_autorisation_type.code as dossier_autorisation_type,
2206 groupe.code as groupe_instruction
2207 FROM ".DB_PREFIXE."dossier
2208 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
2209 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2210 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
2211 ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
2212 LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
2213 ON dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
2214 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
2215 ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2216 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
2217 ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
2218 LEFT JOIN ".DB_PREFIXE."groupe
2219 ON dossier_autorisation_type.groupe = groupe.groupe
2220 WHERE dossier.dossier = '".$dossier."'";
2221 $res = $this->db->query($sql);
2222 $this->f->addToLog("getSpecificMetadata() : db->query(".$sql.")", VERBOSE_MODE);
2223 if ( database::isError($res)){
2224 die();
2225 }
2226
2227 //Le résultat est récupéré dans un objet
2228 $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
2229
2230 //Si il y a un résultat
2231 if ($row !== null) {
2232
2233 //Génération du numéro de version
2234 $sql = "SELECT
2235 count(*)
2236 FROM
2237 ".DB_PREFIXE."dossier
2238 LEFT JOIN
2239 ".DB_PREFIXE."dossier_autorisation
2240 ON
2241 dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
2242 LEFT JOIN
2243 ".DB_PREFIXE."dossier_instruction_type
2244 ON
2245 dossier_instruction_type.dossier_instruction_type = dossier.dossier_instruction_type
2246 WHERE
2247 dossier_autorisation.dossier_autorisation = '".$row->dossier_autorisation."'
2248 AND
2249 dossier_instruction_type.code = '".$row->dossier_instruction_type."'";
2250 $row->version = $this->db->getOne($sql);
2251 $this->f->addToLog("getSpecificMetadata(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
2252 if ( database::isError($row->version)){
2253 $this->f->addToError("", $row->version, $row->version);
2254 return false;
2255 }
2256
2257 //Formatage du numéro de version
2258 $row->version = str_pad($row->version, 2, "0", STR_PAD_LEFT);
2259
2260 //Alors on créé l'objet dossier_instruction
2261 $this->specificMetadata = $row;
2262
2263 }
2264 }
2265
2266 /**
2267 * Retourne le statut du dossier d'instruction
2268 * @param string $idx Identifiant du dossier d'instruction
2269 * @return string Le statut du dossier d'instruction
2270 */
2271 function getStatutAutorisationDossier($idx){
2272
2273 $statut = '';
2274
2275 //Si l'identifiant du dossier d'instruction fourni est correct
2276 if ( $idx != '' ){
2277
2278 //On récupère le statut de l'état du dossier à partir de l'identifiant du
2279 //dossier
2280 $sql = "SELECT etat.statut
2281 FROM ".DB_PREFIXE."dossier
2282 LEFT JOIN
2283 ".DB_PREFIXE."etat
2284 ON
2285 dossier.etat = etat.etat
2286 WHERE dossier ='".$idx."'";
2287 $statut = $this->db->getOne($sql);
2288 $this->f->addToLog("getStatutAutorisationDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
2289 if ( database::isError($statut)){
2290 die();
2291 }
2292 }
2293 return $statut;
2294 }
2295
2296 /**
2297 * Récupère les données du dossier
2298 * @return array
2299 */
2300 function get_dossier_actual() {
2301
2302 // Initialisation de la valeur de retour
2303 $return = array();
2304
2305 // Récupération de toutes les valeurs du dossier d'instruction en cours
2306 $sql = "SELECT * FROM ".DB_PREFIXE."dossier
2307 WHERE dossier='".$this->valF['dossier']."'";
2308 $res = $this->db->query($sql);
2309 $this->addToLog("get_dossier_actual(): db->query(\"".$sql."\");", VERBOSE_MODE);
2310 $this->f->isDatabaseError($res);
2311
2312 //
2313 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
2314
2315 // Récupération de la valeur actuelle du délai, de l'accord tacite,
2316 // de l'état et de l'avis du dossier d'instruction
2317 $return['archive_delai']=$row['delai'];
2318 $return['archive_accord_tacite']=$row['accord_tacite'];
2319 $return['archive_etat']=$row['etat'];
2320 $return['archive_avis']=$row['avis_decision'];
2321 // Récupération de la valeur actuelle des 9 dates du dossier
2322 // d'instruction
2323 $return['archive_date_complet']=$row['date_complet'];
2324 $return['archive_date_dernier_depot']=$row['date_dernier_depot'];
2325 $return['archive_date_rejet']= $row['date_rejet'];
2326 $return['archive_date_limite']= $row['date_limite'];
2327 $return['archive_date_notification_delai']= $row['date_notification_delai'];
2328 $return['archive_date_decision']= $row['date_decision'];
2329 $return['archive_date_validite']= $row['date_validite'];
2330 $return['archive_date_achevement']= $row['date_achevement'];
2331 $return['archive_date_chantier']= $row['date_chantier'];
2332 $return['archive_date_conformite']= $row['date_conformite'];
2333 $return['archive_incompletude']= $row['incompletude'];
2334 $return['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];
2335 $return['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];
2336 $return['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];
2337 $return['archive_date_limite_incompletude']= $row['date_limite_incompletude'];
2338 $return['archive_delai_incompletude']= $row['delai_incompletude'];
2339 $return['archive_autorite_competente']= $row['autorite_competente'];
2340 $return['duree_validite']= $row['duree_validite'];
2341 }
2342
2343 // Retour de la fonction
2344 return $return;
2345
2346 }
2347
2348 /**
2349 * Permet de vérifier qu'un événement est verrouillable
2350 * @param integer $idx Identifiant de l'instruction
2351 * @return boolean
2352 */
2353 function checkEvenementNonVerrouillable($idx) {
2354
2355 // Initialisation du résultat
2356 $non_verrouillable = false;
2357
2358 // Si la condition n'est pas vide
2359 if ($idx != "") {
2360
2361 // Requête SQL
2362 $sql = "SELECT evenement.non_verrouillable
2363 FROM ".DB_PREFIXE."evenement
2364 LEFT JOIN ".DB_PREFIXE."instruction
2365 ON instruction.evenement = evenement.evenement
2366 WHERE instruction.instruction = $idx";
2367 $this->f->addToLog("checkEvenementNonVerrouillable() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
2368 $res = $this->db->getOne($sql);
2369 $this->f->isDatabaseError($res);
2370
2371 // Si le retour de la requête est true
2372 if ($res == 't') {
2373 //
2374 $non_verrouillable = true;
2375 }
2376 }
2377
2378 // Retourne résultat
2379 return $non_verrouillable;
2380 }
2381
2382 /**
2383 * Mise à jour des champs archive_*
2384 * @param mixed $row La ligne de données
2385 */
2386 public function updateArchiveData($row){
2387
2388 // Récupération de la valeur actuelle du délai, de l'accord tacite,
2389 // de l'état et de l'avis du dossier d'instruction
2390 $this->valF['archive_delai']=$row['delai'];
2391 $this->valF['archive_accord_tacite']=$row['accord_tacite'];
2392 $this->valF['archive_etat']=$row['etat'];
2393 $this->valF['archive_avis']=$row['avis_decision'];
2394 // Récupération de la valeur actuelle des 9 dates du dossier
2395 // d'instruction
2396 if ($row['date_complet'] != '') {
2397 $this->valF['archive_date_complet']=$row['date_complet'];
2398 }
2399 if ($row['date_dernier_depot'] != '') {
2400 $this->valF['archive_date_dernier_depot']=$row['date_dernier_depot'];
2401 }
2402 if ($row['date_rejet']!='') {
2403 $this->valF['archive_date_rejet']= $row['date_rejet'];
2404 }
2405 if ($row['date_limite']!='') {
2406 $this->valF['archive_date_limite']= $row['date_limite'];
2407 }
2408 if ($row['date_notification_delai']!='') {
2409 $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];
2410 }
2411 if ($row['date_decision']!='') {
2412 $this->valF['archive_date_decision']= $row['date_decision'];
2413 }
2414 if ($row['date_validite']!='') {
2415 $this->valF['archive_date_validite']= $row['date_validite'];
2416 }
2417 if ($row['date_achevement']!='') {
2418 $this->valF['archive_date_achevement']= $row['date_achevement'];
2419 }
2420 if ($row['date_chantier']!='') {
2421 $this->valF['archive_date_chantier']= $row['date_chantier'];
2422 }
2423 if ($row['date_conformite']!='') {
2424 $this->valF['archive_date_conformite']= $row['date_conformite'];
2425 }
2426 if ($row['incompletude']!='') {
2427 $this->valF['archive_incompletude']= $row['incompletude'];
2428 }
2429 if ($row['evenement_suivant_tacite']!='') {
2430 $this->valF['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];
2431 }
2432 if ($row['evenement_suivant_tacite_incompletude']!='') {
2433 $this->valF['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];
2434 }
2435 if ($row['etat_pendant_incompletude']!='') {
2436 $this->valF['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];
2437 }
2438 if ($row['date_limite_incompletude']!='') {
2439 $this->valF['archive_date_limite_incompletude']= $row['date_limite_incompletude'];
2440 }
2441 if ($row['delai_incompletude']!='') {
2442 $this->valF['archive_delai_incompletude']= $row['delai_incompletude'];
2443 }
2444 if ($row['autorite_competente']!='') {
2445 $this->valF['archive_autorite_competente']= $row['autorite_competente'];
2446 }
2447 if ($row['duree_validite']!='') {
2448 $this->valF['duree_validite']= $row['duree_validite'];
2449 }
2450 }
2451 }// fin classe
2452 ?>

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26