/[openfoncier]/branches/3.14.1/obj/instruction.class.php
ViewVC logotype

Contents of /branches/3.14.1/obj/instruction.class.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3158 - (show annotations)
Thu Oct 2 17:29:07 2014 UTC (10 years, 4 months ago) by vpihour
Original Path: trunk/obj/instruction.class.php
File size: 123679 byte(s)
L'administrateur a maintenant le droit de modifier les dates concernant le contrôle de légalité dans les événements d'instruction même si ce ne sont pas des arrêtés.

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

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26