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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 8593 - (show annotations)
Wed Feb 27 16:39:17 2019 UTC (5 years, 9 months ago) by softime
File size: 278617 byte(s)
Error occurred while calculating annotation data.
* Merge de la branche d'intégration 4.10.0-develop dans le trunk

1 <?php
2 /**
3 * DBFORM - 'instruction' - Surcharge gen.
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 $retourformulaire;
11 * var $idxformulaire;
12 * - modification des données dans dossier trigger avant
13 * [modify dossier data with trigger function]
14 * - function mois_date : pour ajouter des mois a une date
15 * [add months (delay) and calculation final date]
16 * - voir script_lang.js : bible ...
17 *
18 * @package openfoncier
19 * @version SVN : $Id$
20 */
21
22 //
23 require_once "../gen/obj/instruction.class.php";
24
25 //
26 class instruction extends instruction_gen {
27
28 // Champs contenant les UID des fichiers
29 var $abstract_type = array(
30 "om_fichier_instruction" => "file",
31 );
32
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 /**
41 * Instance de la classe dossier
42 *
43 * @var mixed
44 */
45 var $inst_dossier = null;
46
47 /**
48 * Instance de la classe instructeur
49 *
50 * @var mixed
51 */
52 var $inst_instructeur = null;
53
54 /**
55 * Instance de la classe om_utilisateur
56 *
57 * @var mixed
58 */
59 var $inst_om_utilisateur = null;
60
61 var $metadata = array(
62 "om_fichier_instruction" => array(
63 "dossier" => "getDossier",
64 "dossier_version" => "getDossierVersion",
65 "numDemandeAutor" => "getNumDemandeAutor",
66 "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
67 "typeInstruction" => "getTypeInstruction",
68 "statutAutorisation" => "getStatutAutorisation",
69 "typeAutorisation" => "getTypeAutorisation",
70 "dateEvenementDocument" => "getDateEvenementDocument",
71 "groupeInstruction" => 'getGroupeInstruction',
72 "title" => 'getTitle',
73 'concerneERP' => 'get_concerne_erp',
74 ),
75 "arrete" => array(
76 "numArrete" => "getNumArrete",
77 "ReglementaireArrete" => "getReglementaireArrete",
78 "NotificationArrete" => "getNotificationArrete",
79 "dateNotificationArrete" => "getDateNotificationArrete",
80 "controleLegalite" => "getControleLegalite",
81 "dateSignature" => "getDateSignature",
82 "nomSignataire" => "getNomSignataire",
83 "qualiteSignataire" => "getQualiteSignataire",
84 "ap_numRue" => "getAp_numRue",
85 "ap_nomDeLaVoie" => "getAp_nomDeLaVoie",
86 "ap_codePostal" => "getAp_codePostal",
87 "ap_ville" => "getAp_ville",
88 "activite" => "getActivite",
89 "dateControleLegalite" => "getDateControleLegalite",
90 ),
91 );
92
93 // {{{ Gestion de la confidentialité des données spécifiques
94
95 /**
96 * Définition des actions disponibles sur la classe.
97 *
98 * @return void
99 */
100 function init_class_actions() {
101
102 parent::init_class_actions();
103
104 // ACTION - 000 - ajouter
105 // Modifie la condition d'affichage du bouton ajouter
106 $this->class_actions[0]["condition"] = array("is_addable", "can_user_access_dossier_contexte_ajout");
107
108 // ACTION - 001 - modifier
109 // Modifie la condition et le libellé du bouton modifier
110 $this->class_actions[1]["condition"] = array(
111 "is_editable",
112 "is_finalizable_without_bypass",
113 "can_user_access_dossier_contexte_modification",
114 );
115 $this->class_actions[1]["portlet"]["libelle"] = _("Modifier");
116
117 // ACTION - 002 - supprimer
118 // Modifie la condition et le libellé du bouton supprimer
119 $this->class_actions[2]["condition"] = array(
120 "is_deletable",
121 "is_finalizable_without_bypass",
122 "can_user_access_dossier_contexte_modification"
123 );
124 $this->class_actions[2]["portlet"]["libelle"] = _("Supprimer");
125
126 // ACTION - 003 - consulter
127 //
128 $this->class_actions[3]["condition"] = "can_user_access_dossier_contexte_modification";
129
130 // ACTION - 100 - finaliser
131 // Finalise l'enregistrement
132 $this->class_actions[100] = array(
133 "identifier" => "finaliser",
134 "portlet" => array(
135 "type" => "action-direct",
136 "libelle" => _("Finaliser le document"),
137 "order" => 110,
138 "class" => "finalise",
139 ),
140 "view" => "formulaire",
141 "method" => "finalize",
142 "button" => "finaliser",
143 "permission_suffix" => "finaliser",
144 "condition" => array(
145 "is_finalizable",
146 "is_finalizable_without_bypass",
147 "has_an_edition",
148 "can_user_access_dossier_contexte_modification",
149 ),
150 );
151
152 // ACTION - 110 - definaliser
153 // Finalise l'enregistrement
154 $this->class_actions[110] = array(
155 "identifier" => "definaliser",
156 "portlet" => array(
157 "type" => "action-direct",
158 "libelle" => _("Reprendre la redaction du document"),
159 "order" => 110,
160 "class" => "definalise",
161 ),
162 "view" => "formulaire",
163 "method" => "unfinalize",
164 "button" => "definaliser",
165 "permission_suffix" => "definaliser",
166 "condition" => array(
167 "is_unfinalizable",
168 "is_unfinalizable_without_bypass",
169 "can_user_access_dossier_contexte_modification",
170 ),
171 );
172
173 // ACTION - 120 - edition
174 // Affiche l'édition
175 $this->class_actions[120] = array(
176 "identifier" => "edition",
177 "portlet" => array(
178 "type" => "action-blank",
179 "libelle" => _("Edition"),
180 "order" => 100,
181 "class" => "pdf-16",
182 ),
183 "view" => "view_edition",
184 "condition" => array("has_an_edition", "can_user_access_dossier_contexte_modification"),
185 "permission_suffix" => "om_fichier_instruction_telecharger",
186 );
187
188 // ACTION - 125 - modifier_suivi
189 // Suivi des dates
190 $this->class_actions[125] = array(
191 "identifier" => "modifier_suivi",
192 "portlet" => array(
193 "type" => "action-self",
194 "libelle" => _("Suivi des dates"),
195 "order" => 125,
196 "class" => "suivi-dates-16",
197 ),
198 "crud" => "update",
199 "condition" => array("can_monitoring_dates", "can_user_access_dossier_contexte_modification"),
200 "permission_suffix" => "modification_dates",
201 );
202
203 // ACTION - 130 - bible
204 // Affiche la bible
205 $this->class_actions[130] = array(
206 "identifier" => "bible",
207 "view" => "view_bible",
208 "permission_suffix" => "modifier",
209 );
210
211 // ACTION - 140 - bible_auto
212 // Active la bible automatique
213 $this->class_actions[140] = array(
214 "identifier" => "bible_auto",
215 "view" => "view_bible_auto",
216 "permission_suffix" => "modifier",
217 );
218
219 // ACTION - 150 - suivi_bordereaux
220 // Imprimer un bordereau d'envoi
221 $this->class_actions[150] = array(
222 "identifier" => "suivi_bordereaux",
223 "view" => "view_suivi_bordereaux",
224 "permission_suffix" => "consulter",
225 );
226
227 // ACTION - 160 - suivi_envoi_lettre_rar
228 // Imprimer un bordereau d'envoi
229 $this->class_actions[160] = array(
230 "identifier" => "suivi_envoi_lettre_rar",
231 "view" => "view_suivi_envoi_lettre_rar",
232 "permission_suffix" => "consulter",
233 );
234
235 // ACTION - 170 - suivi_mise_a_jour_des_dates
236 // Mettre à jour les dates de l'instruction
237 $this->class_actions[170] = array(
238 "identifier" => "suivi_mise_a_jour_des_dates",
239 "view" => "view_suivi_mise_a_jour_des_dates",
240 "permission_suffix" => "consulter",
241 );
242
243 // ACTION - 180 - pdf_lettre_rar
244 // Génère PDF sur bordereaux de lettres RAR
245 $this->class_actions[180] = array(
246 "identifier" => "pdf_lettre_rar",
247 "view" => "view_pdf_lettre_rar",
248 "permission_suffix" => "consulter",
249 );
250
251 // ACTION - 190 - bordereau_envoi_maire
252 // Formulaire pour générer le bordereau d'envoi au maire
253 // Met à jour la date d'envoi à signature du maire
254 $this->class_actions[190] = array(
255 "identifier" => "bordereau_envoi_maire",
256 "view" => "view_bordereau_envoi_maire",
257 "permission_suffix" => "bordereau_envoi_maire",
258 );
259
260 // ACTION - 200 - generate_bordereau_envoi_maire
261 // Génère PDF bordereau d'envoi au maire
262 $this->class_actions[200] = array(
263 "identifier" => "generate_bordereau_envoi_maire",
264 "view" => "view_generate_bordereau_envoi_maire",
265 "permission_suffix" => "bordereau_envoi_maire",
266 );
267
268 // ACTION - 210 - notifier_commune
269 // Notifie la commune par mail d'un évément d'instruction finalisé
270 $this->class_actions[210] = array(
271 "identifier" => "notifier_commune",
272 "portlet" => array(
273 "type" => "action-direct-with-confirmation",
274 "libelle" => _("Notifier la commune par courriel"),
275 "order" => 210,
276 "class" => "notifier_commune-16",
277 ),
278 "view" => "formulaire",
279 "method" => "notifier_commune",
280 "permission_suffix" => "notifier_commune",
281 "condition" => array("is_notifiable", "can_user_access_dossier_contexte_modification"),
282 );
283
284 // ACTION - 220 - generate_suivi_bordereaux
285 // GénÚre PDF bordereaux
286 $this->class_actions[220] = array(
287 "identifier" => "generate_suivi_bordereaux",
288 "view" => "view_generate_suivi_bordereaux",
289 "permission_suffix" => "consulter",
290 );
291
292 // ACTION - 777 - pdf_temp
293 // Crée un PDF temporaire et affiche son contenu en base64
294 $this->class_actions[777] = array(
295 "identifier" => "pdf_temp",
296 "view" => "view_pdf_temp",
297 "permission_suffix" => "modifier",
298 "condition" => array("can_user_access_dossier_contexte_modification"),
299 );
300
301 // ACTION - 701
302 $this->class_actions[701] = array(
303 "identifier" => "enable-edition-integrale",
304 "portlet" => array(
305 "type" => "action-direct-with-confirmation",
306 "libelle" => _("Rédaction libre"),
307 "order" => 50,
308 "class" => "redac-libre-16",
309 ),
310 "view" => "formulaire",
311 "method" => "enable_edition_integrale",
312 "permission_suffix" => "modifier",
313 "condition" => array(
314 "is_editable",
315 "is_finalizable_without_bypass",
316 "can_user_access_dossier_contexte_modification",
317 "is_edition_integrale_not_enabled",
318 "is_option_redaction_libre_enabled",
319 "has_an_edition",
320 ),
321 );
322 // ACTION - 702
323 $this->class_actions[702] = array(
324 "identifier" => "disable-edition-integrale",
325 "portlet" => array(
326 "type" => "action-direct-with-confirmation",
327 "libelle" => _("Rédaction par compléments"),
328 "order" => 50,
329 "class" => "redac-complement-16",
330 ),
331 "view" => "formulaire",
332 "method" => "disable_edition_integrale",
333 "permission_suffix" => "modifier",
334 "condition" => array(
335 "is_editable",
336 "is_finalizable_without_bypass",
337 "can_user_access_dossier_contexte_modification",
338 "is_edition_integrale_enabled",
339 "is_option_redaction_libre_enabled",
340 "has_an_edition",
341 ),
342 );
343 // ACTION - 300 - evenement_has_an_edition_json
344 //
345 $this->class_actions[300] = array(
346 "identifier" => "evenement_has_an_edition_json",
347 "view" => "view_evenement_has_an_edition_json",
348 "permission_suffix" => "consulter",
349 );
350 }
351
352 /**
353 * CONDITION - is_edition_integrale_enabled
354 *
355 * Vérifie que la rédaction libre est activée sur l'instruction en cours.
356 *
357 * @return boolean
358 */
359 function is_edition_integrale_enabled() {
360 if ($this->getVal("flag_edition_integrale") == 't') {
361 return true;
362 }
363 return false;
364 }
365
366 /**
367 * CONDITION - is_edition_integrale_not_enabled
368 *
369 * Vérifie que la rédaction libre est désactivée sur l'instruction en cours.
370 *
371 * @return boolean
372 */
373 function is_edition_integrale_not_enabled() {
374 return !$this->is_edition_integrale_enabled();
375 }
376
377 /**
378 * CONDITION - is_option_redaction_libre_enabled
379 *
380 * Vérifie que l'option de rédaction libre est activée.
381 *
382 * @return boolean
383 */
384 function is_option_redaction_libre_enabled() {
385 $collectivite_di = $this->get_dossier_instruction_om_collectivite();
386 return $this->f->is_option_redaction_libre_enabled($collectivite_di);
387 }
388
389 /**
390 * TREATMENT - disable_edition_integrale.
391 *
392 * Cette methode permet de passer la consultation en "lu"
393 *
394 * @return boolean true si maj effectué false sinon
395 */
396 function disable_edition_integrale() {
397 // Cette méthode permet d'exécuter une routine en début des méthodes
398 // dites de TREATMENT.
399 $this->begin_treatment(__METHOD__);
400 $this->correct = true;
401 $valF = array(
402 "flag_edition_integrale" => false,
403 "titre_om_htmletat" => null,
404 "corps_om_htmletatex" => null,
405 );
406 $res = $this->f->db->autoExecute(
407 DB_PREFIXE.$this->table,
408 $valF,
409 DB_AUTOQUERY_UPDATE,
410 $this->clePrimaire."=".$this->getVal($this->clePrimaire)
411 );
412 if ($this->f->isDatabaseError($res, true)) {
413 // Appel de la methode de recuperation des erreurs
414 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
415 $this->correct = false;
416 // Termine le traitement
417 return $this->end_treatment(__METHOD__, false);
418 } else {
419 $this->addToMessage(_("Rédaction par compléments activé."));
420 return $this->end_treatment(__METHOD__, true);
421 }
422
423 // Termine le traitement
424 return $this->end_treatment(__METHOD__, false);
425 }
426
427 /**
428 * TREATMENT - enable_edition_integrale.
429 *
430 * Cette methode permet de passer la consultation en "lu"
431 *
432 * @return boolean true si maj effectué false sinon
433 */
434 function enable_edition_integrale() {
435 // Cette méthode permet d'exécuter une routine en début des méthodes
436 // dites de TREATMENT.
437 $this->begin_treatment(__METHOD__);
438 $this->correct = true;
439
440 // Récupère la collectivite du dossier d'instruction
441 $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
442 $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
443 //
444 $params = array(
445 "specific" => array(
446 "corps" => array(
447 "mode" => "get",
448 )
449 ),
450 );
451 $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'), $collectivite, null, $params);
452 $corps = $result['pdf_output'];
453 //
454 $params = array(
455 "specific" => array(
456 "titre" => array(
457 "mode" => "get",
458 )
459 ),
460 );
461 $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'), $collectivite, null, $params);
462 $titre = $result['pdf_output'];
463 //
464 $valF = array(
465 "flag_edition_integrale" => true,
466 "titre_om_htmletat" => $titre,
467 "corps_om_htmletatex" => $corps,
468 );
469 $res = $this->f->db->autoExecute(
470 DB_PREFIXE.$this->table,
471 $valF,
472 DB_AUTOQUERY_UPDATE,
473 $this->clePrimaire."=".$this->getVal($this->clePrimaire)
474 );
475 if ($this->f->isDatabaseError($res, true)) {
476 // Appel de la methode de recuperation des erreurs
477 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
478 $this->correct = false;
479 // Termine le traitement
480 return $this->end_treatment(__METHOD__, false);
481 } else {
482 $this->addToMessage(_("Rédaction libre activé."));
483 return $this->end_treatment(__METHOD__, true);
484 }
485
486 // Termine le traitement
487 return $this->end_treatment(__METHOD__, false);
488 }
489
490 /**
491 * Cette méthode permet de récupérer le dossier d'autorisation d'un dossier
492 */
493 function getNumDemandeAutorFromDossier($id) {
494 //
495 if (!isset($id)) {
496 return NULL;
497 }
498 //
499 $sql = "select dossier_autorisation from ".DB_PREFIXE."dossier ";
500 $sql .= " where dossier='".$id."'";
501 //
502 $dossier_autorisation = $this->db->getOne($sql);
503 $this->addToLog("getNumDemandeAutorFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
504 database::isError($dossier_autorisation);
505 //
506 return $dossier_autorisation;
507 }
508
509 // }}}
510
511 function setType(&$form, $maj) {
512 // Récupération du mode de l'action
513 $crud = $this->get_action_crud($maj);
514 // Récupère la collectivité du dossier d'instruction
515 $collectivite_di = $this->get_dossier_instruction_om_collectivite();
516
517 // Cache tous les champs
518 foreach ($this->champs as $value) {
519 $form->setType($value, 'hidden');
520 }
521
522 // MODE AJOUTER
523 if ($this->getParameter('maj') == 0) {
524 $form->setType("date_evenement", "date");
525 if ($this->is_in_context_of_foreign_key("evenement", $this->retourformulaire)) {
526 $form->setType("evenement", "selecthiddenstatic");
527 } else {
528 $form->setType("evenement", "select");
529 }
530 if ($this->is_in_context_of_foreign_key("signataire_arrete", $this->retourformulaire)) {
531 $form->setType("signataire_arrete", "selecthiddenstatic");
532 } else {
533 $form->setType("signataire_arrete", "select");
534 }
535 if ($this->is_option_redaction_libre_enabled() === true) {
536 $form->setType("flag_edition_integrale", "select");
537 }
538 }
539
540 // MODE MODIFIER
541 if ($this->getParameter('maj') == 1) {
542 $form->setType("date_evenement", "date");
543 $form->setType("evenement", "selecthiddenstatic");
544 if ($this->has_an_edition() === true) {
545 $form->setType('lettretype', 'hiddenstatic');
546 if ($this->is_in_context_of_foreign_key("signataire_arrete", $this->retourformulaire)) {
547 $form->setType("signataire_arrete", "selecthiddenstatic");
548 } else {
549 $form->setType("signataire_arrete", "select");
550 }
551 if ($this->getVal("flag_edition_integrale") == "t") {
552 $form->setType("titre_om_htmletat", "htmlEtat");
553 $form->setType("corps_om_htmletatex", "htmlEtatEx");
554 } else {
555 $form->setType("complement_om_html", "html");
556 $form->setType("complement2_om_html", "html");
557 $form->setType("complement3_om_html", "html");
558 $form->setType("complement4_om_html", "html");
559 $form->setType('bible_auto', 'httpclick');
560 $form->setType('bible', 'httpclick');
561 $form->setType('bible2', 'httpclick');
562 $form->setType('bible3', 'httpclick');
563 $form->setType('bible4', 'httpclick');
564 }
565 if ($this->f->is_option_preview_pdf_enabled($collectivite_di) === true) {
566 //
567 $form->setType('btn_refresh', 'httpclickbutton');
568 $form->setType('btn_preview', 'httpclickbutton');
569 $form->setType('btn_redaction', 'httpclickbutton');
570 $form->setType('live_preview', 'pdf');
571 }
572
573 // necessaire pour calcul de date en modification
574 //$form->setType('delai', 'hiddenstatic');
575 // les administrateurs technique et fonctionnel peuvent
576 // modifier tous les champs de date
577 // si l'instruction a déjà été finalisée au moins une fois
578 if (($this->f->isAccredited(array($this->get_absolute_class_name(), $this->get_absolute_class_name()."modification_dates"), "OR")
579 || $this->f->isAccredited(array('instruction', 'instruction_modification_dates'), "OR"))
580 && $this->getVal("date_finalisation_courrier") != '') {
581 //
582 $form->setType('date_envoi_signature', 'date');
583 $form->setType('date_retour_signature', 'date');
584 $form->setType('date_envoi_rar', 'date');
585 $form->setType('date_retour_rar', 'date');
586 $form->setType('date_envoi_controle_legalite', 'date');
587 $form->setType('date_retour_controle_legalite', 'date');
588 $form->setType('date_finalisation_courrier', 'date');
589 }
590 }
591 }
592
593 // MODE CONSULTER + SUPPRIMER + SUIVI DES DATES 125
594 if ($this->getParameter('maj') == 3
595 || $this->getParameter('maj') == 2
596 || $this->getParameter('maj') == 125) {
597 //
598 $form->setType("date_evenement", "datestatic");
599 $form->setType("evenement", "selecthiddenstatic");
600 if ($this->has_an_edition() === true) {
601 $form->setType('lettretype', 'hiddenstatic');
602 $form->setType("signataire_arrete", "selecthiddenstatic");
603 if ($this->getVal("om_final_instruction") == 't') {
604 $form->setType('om_final_instruction_utilisateur', 'textareastatic');
605 } else {
606 $form->setType('om_final_instruction_utilisateur', 'hidden');
607 }
608 }
609 }
610
611 // MODE CONSULTER + SUPPRIMER
612 if ($this->getParameter('maj') == 3 || $this->getParameter('maj') == 2) {
613 if ($this->has_an_edition() === true) {
614 if ($this->getVal("flag_edition_integrale") == "t") {
615 $form->setType("titre_om_htmletat", "htmlstatic");
616 $form->setType("corps_om_htmletatex", "htmlstatic");
617 } else {
618 $form->setType("complement_om_html", "htmlstatic");
619 $form->setType("complement2_om_html", "htmlstatic");
620 $form->setType("complement3_om_html", "htmlstatic");
621 $form->setType("complement4_om_html", "htmlstatic");
622 }
623 }
624 $form->setType('date_envoi_signature', 'datestatic');
625 $form->setType('date_retour_signature', 'datestatic');
626 $form->setType('date_envoi_rar', 'datestatic');
627 $form->setType('date_retour_rar', 'datestatic');
628 $form->setType('date_envoi_controle_legalite', 'datestatic');
629 $form->setType('date_retour_controle_legalite', 'datestatic');
630 $form->setType('date_finalisation_courrier', 'datestatic');
631 }
632
633 // MODE SUIVI DES DATES 125
634 if ($this->getParameter('maj') == 125) {
635 $form->setType("date_evenement", "hiddenstaticdate");
636 $form->setType('om_final_instruction_utilisateur', 'hiddenstatic');
637 $form->setType('date_envoi_signature', 'date');
638 $form->setType('date_retour_signature', 'date');
639 $form->setType('date_envoi_rar', 'date');
640 $form->setType('date_retour_rar', 'date');
641 $form->setType('date_envoi_controle_legalite', 'date');
642 $form->setType('date_retour_controle_legalite', 'date');
643 $form->setType('date_finalisation_courrier', 'date');
644 }
645 }
646
647 function setOnchange(&$form,$maj){
648 parent::setOnchange($form,$maj);
649
650 // MODE AJOUTER
651 if ($this->getParameter('maj') == 0) {
652 $form->setOnchange("evenement", "manage_instruction_evenement_lettretype(this.value, '".addslashes($this->getParameter('idxformulaire'))."');");
653 }
654 }
655
656 function evenement_has_an_edition($evenement_id) {
657 $evenement = $this->get_inst_evenement($evenement_id);
658 $lettretype = $evenement->getVal('lettretype');
659 if ($lettretype !== '' && $lettretype !== null) {
660 return true;
661 }
662 return false;
663 }
664
665 function view_evenement_has_an_edition_json() {
666 $json_return = array(
667 "lettretype" => $this->evenement_has_an_edition($this->f->get_submitted_get_value('evenement_id')),
668 "option_redaction_libre_enabled" => $this->is_option_redaction_libre_enabled(),
669 );
670 echo json_encode($json_return);
671 }
672
673 function setSelect(&$form, $maj, &$db = null, $debug = null) {
674 /**
675 * On ne surcharge pas la méthode parent car une requête sur la table
676 * dossier est mauvaise pour les performances, car la requête qui
677 * concerne evenement est plus complexe que celle générée et car les
678 * champs action, avis_decision et etat ne sont pas utilisés comme des
679 * select
680 */
681 if(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php"))
682 include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php");
683 elseif(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc"))
684 include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc");
685
686 //// action
687 //$this->init_select($form, $db, $maj, $debug, "action",
688 // $sql_action, $sql_action_by_id, false);
689
690 //// avis_decision
691 //$this->init_select($form, $db, $maj, $debug, "avis_decision",
692 // $sql_avis_decision, $sql_avis_decision_by_id, false);
693
694 //// dossier
695 //$this->init_select($form, $db, $maj, $debug, "dossier",
696 // $sql_dossier, $sql_dossier_by_id, false);
697
698 //// etat
699 //$this->init_select($form, $db, $maj, $debug, "etat",
700 // $sql_etat, $sql_etat_by_id, false);
701
702 //// evenement
703 //$this->init_select($form, $db, $maj, $debug, "evenement",
704 // $sql_evenement, $sql_evenement_by_id, false);
705
706 // signataire_arrete
707 // si contexte DI
708 if ($this->getParameter("retourformulaire") == "dossier"
709 || $this->getParameter("retourformulaire") == "dossier_instruction"
710 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
711 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
712 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
713 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures"
714 || $this->getParameter("retourformulaire") == "dossier_contentieux_mes_infractions"
715 || $this->getParameter("retourformulaire") == "dossier_contentieux_toutes_infractions"
716 || $this->getParameter("retourformulaire") == "dossier_contentieux_mes_recours"
717 || $this->getParameter("retourformulaire") == "dossier_contentieux_tous_recours") {
718 // on recupère les signataires de la multicollectivité et de celle du DI
719 $di = $this->f->get_inst__om_dbform(array(
720 "obj" => "dossier_instruction",
721 "idx" => $this->getParameter('idxformulaire'),
722 ));
723 $sql_signataire_arrete_by_di = str_replace('<collectivite_di>', $di->getVal("om_collectivite"), $sql_signataire_arrete_by_di);
724 $this->init_select($form, $db, $maj, $debug, "signataire_arrete",
725 $sql_signataire_arrete_by_di, $sql_signataire_arrete_by_id, true);
726 } else {
727 $this->init_select($form, $db, $maj, $debug, "signataire_arrete",
728 $sql_signataire_arrete, $sql_signataire_arrete_by_id, true);
729 }
730
731 /**
732 * Gestion du filtre sur les événements de workflow disponibles
733 * On récupère ici en fonction de l'état du dossier d'instruction en
734 * cours et du type du dossier d'instruction en cours la liste
735 * événements disponibles.
736 */
737 if ($maj == 0) {
738 // Récupération des événements par une jointure entre la table dossier
739 // et la table transition et la table evenement et la table
740 // lien_dossier_instruction_type_evenement en fonction de l'identifiant
741 // du dossier d'instruction en cours
742 $sql = "SELECT
743 evenement.evenement,
744 evenement.libelle as lib
745 FROM ".DB_PREFIXE."dossier
746 INNER JOIN ".DB_PREFIXE."lien_dossier_instruction_type_evenement
747 ON dossier.dossier_instruction_type=lien_dossier_instruction_type_evenement.dossier_instruction_type
748 INNER JOIN ".DB_PREFIXE."evenement
749 ON evenement.evenement=lien_dossier_instruction_type_evenement.evenement
750 INNER JOIN ".DB_PREFIXE."transition
751 ON evenement.evenement = transition.evenement
752 AND dossier.etat=transition.etat
753 WHERE dossier.dossier='".$this->idxformulaire."' ";
754
755 // Si changement de décision par instructeur commune
756 if($this->f->isUserInstructeur() === true
757 && $this->getDivisionFromDossier($this->idxformulaire) != $_SESSION["division"]
758 && $this->isInstrCanChangeDecision($this->idxformulaire) === true) {
759 $sql .= "AND evenement.type IN ('arrete', 'changement_decision') ";
760 }
761 $sql .= "ORDER BY evenement.libelle, evenement.action";
762 $res = $db->query($sql);
763 $this->addToLog("setSelect(): db->query(\"".$sql."\");", VERBOSE_MODE);
764 if (database::isError($res)) {
765 die($res->getMessage());
766 }
767 // Remplissage du tableau du select
768 $contenu = array(
769 0 => array("",),
770 1 => array(_('choisir')." "._('evenement'),)
771 );
772 while ($row=& $res->fetchRow()) {
773 $contenu[0][] = $row[0];
774 $contenu[1][] = $row[1];
775 }
776 $form->setSelect("evenement", $contenu);
777
778 } else {
779 $sql = "SELECT
780 evenement.libelle as lib
781 FROM ".DB_PREFIXE."evenement
782 WHERE evenement.evenement=".$this->getVal("evenement")."";
783 $res = $db->getone($sql);
784 $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
785 if (database::isError($res)) {
786 die($res->getMessage());
787 }
788 //
789 $contenu = array(
790 0 => array($this->getVal("evenement"),),
791 1 => array($res,)
792 );
793 $form->setSelect("evenement", $contenu);
794 }
795
796 /**
797 * Gesion des liens vers la bible
798 */
799 // lien bible_auto
800 $contenu = array(_("automatique"));
801 $form->setSelect("bible_auto",$contenu);
802 // lien bible1
803 $contenu = array(_("bible"));
804 $form->setSelect("bible",$contenu);
805 // lien bible2
806 $contenu = array(_("bible"));
807 $form->setSelect("bible2",$contenu);
808 // lien bible3
809 $contenu = array(_("bible"));
810 $form->setSelect("bible3",$contenu);
811 // lien bible4
812 $contenu = array(_("bible"));
813 $form->setSelect("bible4",$contenu);
814
815 if ($maj == 1) {
816 $base64 = $this->init_pdf_temp();
817 $form->setSelect('live_preview', array('base64'=>$base64));
818 $form->setSelect("btn_refresh", array(_('Prévisualiser')));
819 $form->setSelect("btn_preview", array(_('Prévisualiser >>')));
820 $form->setSelect("btn_redaction", array(_('<< Rédiger')));
821 }
822
823 // Selection du type de rédaction à l'ajout
824 $content = array(
825 0 => array('f', 't', ),
826 1 => array(_('Rédaction par compléments'), _('Rédaction libre'), ),
827 );
828 $form->setSelect('flag_edition_integrale', $content);
829 }
830
831 function cleSecondaire($id, &$db = null, $val = array(), $DEBUG = null) {
832 //
833 parent::cleSecondaire($id, $db, $val, $DEBUG);
834
835 $id = $this->getVal($this->clePrimaire);
836
837
838 //Requête de vérification que cet événement d'instruction n'est pas lié
839 //à la création d'un dossier d'instruction
840 $sql = "SELECT demande_type.dossier_instruction_type
841 FROM ".DB_PREFIXE."demande_type
842 LEFT JOIN ".DB_PREFIXE."demande
843 ON demande.demande_type = demande_type.demande_type
844 WHERE demande.instruction_recepisse = ".$id;
845 $res = $this->db->getOne($sql);
846 $this->addToLog("cleSecondaire(): db->getone(\"".$sql."\");", VERBOSE_MODE);
847 if (database::isError($res)) {
848 die($res->getMessage());
849 }
850
851 // Aucune clé secondaire n'a été trouvée ou c'est un événement sans
852 //création de dossier d'instruction, l'événement d'instruction peut être
853 //supprimé
854 if ( $this->correct !== false || $res == null || $res == ""){
855
856 // Requête de vérification que cet événement d'instruction est lié
857 // à une demande
858 $sql = "SELECT demande
859 FROM ".DB_PREFIXE."demande
860 WHERE instruction_recepisse = ".$id;
861 $res = $this->db->getOne($sql);
862 $this->addToLog("cleSecondaire(): db->getone(\"".$sql."\");", VERBOSE_MODE);
863 if (database::isError($res)) {
864 die($res->getMessage());
865 }
866
867 //Si c'est un événement d'instruction lié à une demande
868 if ($res != null || $res != ""){
869 $demande = $this->f->get_inst__om_dbform(array(
870 "obj" => "demande",
871 "idx" => $res,
872 ));
873
874 //On met à jour la demande en supprimant la liaison vers
875 //l'événement d'instruction
876 $demande->setParameter("maj", 1);
877 $valF = array();
878 foreach($demande->champs as $identifiant => $champ) {
879 $valF[$champ] = $demande->val[$identifiant];
880 }
881 $valF['date_demande']=$demande->dateDBToForm($valF['date_demande']);
882 $valF['instruction_recepisse']=NULL;
883 $ret = $demande->modifier($valF, $this->db, DEBUG);
884 }
885
886 /**
887 * Vérification que l'élément supprimé est le dernier pour pouvoir
888 * remodifier les données de manière itérative.
889 */
890 // Initialisation
891 $dernierevenement = "";
892 // Récupération du dernier élément de la table d'instruction qui
893 // concerne le dossier en cours
894 $sql = "SELECT max(instruction)
895 FROM ".DB_PREFIXE."instruction
896 WHERE dossier ='".$this->idxformulaire."'";
897 $dernierevenement = $db->getOne($sql);
898 $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
899 if (database::isError($dernierevenement)) {
900 die($dernierevenement->getMessage());
901 }
902 // Si on se trouve effectivement sur le dernier evenement d'instruction
903 if ($dernierevenement == $id) {
904 // Alors on valide la suppression
905 $this->correct = true;
906 $this->addToMessage(_('Destruction_chronologique'));
907 } else {
908 // Alors on annule la suppression
909 $this->correct = false;
910 $this->addToMessage(_("Seul le dernier evenement d'instruction peut etre supprime."));
911 }
912 }
913 }
914
915 /**
916 * Vérification de la possibilité ou non de modifier des dates de suivi
917 * @param string $champ champ date à vérifier
918 */
919 function updateDate($champ) {
920
921 //Si le retourformulaire est "dossier_instruction"
922 if ($this->getParameter("retourformulaire") == "dossier"
923 || $this->getParameter("retourformulaire") == "dossier_instruction"
924 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
925 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
926 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
927 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures"
928 || $this->getParameter("retourformulaire") == "dossier_contentieux_mes_infractions"
929 || $this->getParameter("retourformulaire") == "dossier_contentieux_toutes_infractions"
930 || $this->getParameter("retourformulaire") == "dossier_contentieux_mes_recours"
931 || $this->getParameter("retourformulaire") == "dossier_contentieux_tous_recours") {
932
933 // Vérification de la possibilité de modifier les dates si déjà éditées
934 if($this->valF[$champ] != "" AND !$this->f->user_is_admin) {
935 // si l'utilisateur n'est pas un admin
936 if($this->getVal($champ) != "" AND $this->getVal($champ) != $this->valF[$champ]) {
937 $this->correct = false;
938 $this->addToMessage(_("Les dates de suivis ne peuvent etre modifiees"));
939 }
940 }
941 }
942
943 //
944 return true;
945 }
946
947 /*Met des valeurs par défaut dans certains des sous-formulaire*/
948 function setValsousformulaire(&$form, $maj, $validation, $idxformulaire, $retourformulaire, $typeformulaire, &$db = null, $DEBUG = null) {
949
950 //
951 $this->retourformulaire=$retourformulaire;
952 $this->idxformulaire=$idxformulaire;
953 // Ajout
954 if ($maj == 0) {
955 $form->setVal("destinataire", $idxformulaire);
956 $form->setVal("dossier", $idxformulaire);
957 }
958 //
959 $this->set_form_default_values($form, $maj, $validation);
960 }
961
962 /**
963 * Permet de pré-remplir les valeurs des formulaires.
964 *
965 * @param [object] $form formulaire
966 * @param [integer] $maj mode
967 * @param [integer] $validation validation
968 */
969 function set_form_default_values(&$form, $maj, $validation) {
970
971 // Ajout
972 if ($maj == 0) {
973 if(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php"))
974 include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php");
975 elseif(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc"))
976 include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc");
977 // si contexte DI
978 if ($this->getParameter("retourformulaire") == "dossier"
979 || $this->getParameter("retourformulaire") == "dossier_instruction"
980 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
981 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
982 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
983 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures"
984 || $this->getParameter("retourformulaire") == "dossier_contentieux_mes_infractions"
985 || $this->getParameter("retourformulaire") == "dossier_contentieux_toutes_infractions"
986 || $this->getParameter("retourformulaire") == "dossier_contentieux_mes_recours"
987 || $this->getParameter("retourformulaire") == "dossier_contentieux_tous_recours") {
988 // on recupère les signataires de la multicollectivité et de celle du DI
989 $di = $this->f->get_inst__om_dbform(array(
990 "obj" => "dossier_instruction",
991 "idx" => $this->getParameter('idxformulaire'),
992 ));
993 $sql = str_replace('<collectivite_di>', $di->getVal("om_collectivite"), $sql_signataire_arrete_defaut_by_di);
994 } else {
995 $sql = $sql_signataire_arrete_defaut;
996 }
997 // Date du jour
998 $form->setVal("date_evenement", date('Y-m-d'));
999
1000 // Exécution de la requête
1001 $res = $this->f->db->query($sql);
1002 $this->f->addToLog("setVal(): db->query(\"".$sql."\");", VERBOSE_MODE);
1003 if ( database::isError($res)){
1004 die();
1005 }
1006
1007 $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
1008
1009 if (isset($row['signataire_arrete']) && is_numeric($row['signataire_arrete'])){
1010 $form->setVal("signataire_arrete",$row['signataire_arrete']);
1011 }
1012 }
1013
1014 // Ajout et modification
1015 if ($maj == 0 || $maj == 1 || $maj == 125) {
1016 $form->setVal("bible_auto","bible_auto()");
1017 $form->setVal("bible","bible(1)");
1018 $form->setVal("bible2","bible(2)");
1019 $form->setVal("bible3","bible(3)");
1020 $form->setVal("bible4","bible(4)");
1021 }
1022
1023 // Récupère la collectivité du dossier d'instruction
1024 $collectivite_di = $this->get_dossier_instruction_om_collectivite();
1025
1026 // Modification
1027 if ($maj == 1 && $this->f->is_option_preview_pdf_enabled($collectivite_di) === true
1028 && $this->has_an_edition() === true) {
1029 $form->setVal("live_preview",$this->getVal($this->clePrimaire));
1030 $form->setVal("btn_refresh","reload_pdf_viewer()");
1031 $form->setVal("btn_preview","show_instr_preview()");
1032 $form->setVal("btn_redaction","show_instr_redaction()");
1033 }
1034 }
1035
1036
1037 function setLayout(&$form, $maj){
1038 $form->setBloc('evenement','D',"","sousform-instruction-action-".$maj);
1039
1040 $form->setFieldset('evenement','D',_('Evenement'));
1041 $form->setFieldset('om_final_instruction_utilisateur','F','');
1042
1043 $form->setBloc('om_final_instruction_utilisateur','F');
1044
1045 $form->setBloc('date_finalisation_courrier','D',"","");
1046
1047 $form->setFieldset('date_finalisation_courrier','D',_('Dates'));
1048 $form->setBloc('date_finalisation_courrier','D',"","col_6");
1049 $form->setBloc('date_envoi_controle_legalite','F');
1050
1051 $form->setBloc('date_retour_signature','D',"","col_6");
1052 $form->setBloc('date_retour_controle_legalite','F');
1053 $form->setFieldset('date_retour_controle_legalite','F','');
1054
1055 $form->setBloc('date_retour_controle_legalite','F');
1056
1057 if ($maj == 1) {
1058 // Récupère la collectivité du dossier d'instruction
1059 $collectivite_di = $this->get_dossier_instruction_om_collectivite();
1060
1061 //
1062 if ($this->f->is_option_preview_pdf_enabled($collectivite_di) === true
1063 && $this->has_an_edition() === true) {
1064 //
1065 $form->setBloc('complement_om_html','D',"","container_instr_edition");
1066 $form->setBloc('complement_om_html','D',"","hidelabel box_instr_edition redaction_instr_edition");
1067 $form->setBloc('complement_om_html','D',"","box_instr_edition_main");
1068 $form->setFieldset('complement_om_html','D',_('Complement'));
1069 $form->setFieldset('bible','F','');
1070 $form->setFieldset('complement2_om_html','D',_('Complement 2'));
1071 $form->setFieldset('bible2','F','');
1072 $form->setFieldset('complement3_om_html','D',_('Complement 3'));
1073 $form->setFieldset('bible3','F','');
1074 $form->setFieldset('complement4_om_html','D',_('Complement 4'));
1075 $form->setFieldset('bible4','F','');
1076 $form->setFieldset('titre_om_htmletat','DF',_('Titre'), 'startClosed');
1077 $form->setFieldset('corps_om_htmletatex','DF',_('Corps'));
1078 $form->setBloc('corps_om_htmletatex','F');
1079 $form->setBloc('btn_preview','DF',"","box_instr_edition_btn");
1080 $form->setBloc('btn_preview','F');
1081 $form->setBloc('btn_redaction','D', '',"hidelabel box_instr_edition preview_instr_edition");
1082 $form->setBloc('btn_redaction','DF',"","box_instr_edition_btn");
1083 $form->setFieldset('btn_refresh','D',_('Prévisualisation'), "box_instr_edition_main");
1084 $form->setFieldset('live_preview','F');
1085 $form->setBloc('live_preview','F');
1086 $form->setBloc('live_preview','F');
1087 } else {
1088 $form->setBloc('complement_om_html','D',"","hidelabel");
1089 $form->setFieldset('complement_om_html','D',_('Complement'));
1090 $form->setFieldset('bible','F','');
1091 $form->setFieldset('complement2_om_html','D',_('Complement 2'));
1092 $form->setFieldset('bible2','F','');
1093 $form->setFieldset('complement3_om_html','D',_('Complement 3'));
1094 $form->setFieldset('bible3','F','');
1095 $form->setFieldset('complement4_om_html','D',_('Complement 4'));
1096 $form->setFieldset('bible4','F','');
1097 $form->setFieldset('titre_om_htmletat','DF',_('Titre'), 'startClosed');
1098 $form->setFieldset('corps_om_htmletatex','DF',_('Corps'));
1099 $form->setBloc('corps_om_htmletatex','F');
1100 }
1101 } else {
1102 $form->setBloc('complement_om_html','D',"","hidelabel");
1103 $form->setFieldset('complement_om_html','D',_('Complement'));
1104 $form->setFieldset('bible','F','');
1105 $form->setFieldset('complement2_om_html','D',_('Complement 2'));
1106 $form->setFieldset('bible2','F','');
1107 $form->setFieldset('complement3_om_html','D',_('Complement 3'));
1108 $form->setFieldset('bible3','F','');
1109 $form->setFieldset('complement4_om_html','D',_('Complement 4'));
1110 $form->setFieldset('bible4','F','');
1111 $form->setFieldset('titre_om_htmletat','DF',_('Titre'), 'startClosed');
1112 $form->setFieldset('corps_om_htmletatex','DF',_('Corps'));
1113 $form->setBloc('corps_om_htmletatex','F');
1114 }
1115 }
1116
1117 function setLib(&$form, $maj) {
1118 //
1119 parent::setLib($form, $maj);
1120 //
1121 $form->setLib('bible_auto', "");
1122 $form->setLib('bible', "");
1123 $form->setLib('bible2', "");
1124 $form->setLib('bible3', "");
1125 $form->setLib('bible4', "");
1126 $form->setLib('btn_refresh', "");
1127 $form->setLib('btn_preview', "");
1128 $form->setLib('btn_redaction', "");
1129 $form->setLib('live_preview', "");
1130 $form->setLib('om_final_instruction_utilisateur', _("finalise par"));
1131
1132 // Ajout d'une infobulle d'aide lorsque le formulaire est en mode
1133 // ajout et que l'option de rédaction libre est activée sur la
1134 // collectivité du dossier
1135 if ($maj === '0' && $this->is_option_redaction_libre_enabled() === true) {
1136 //
1137 $help_text_template = '%s <span class="info-16" title="%s"></span>';
1138 $help_text = _("Attention: le passage du mode 'Rédaction libre' à celui de 'Rédaction par compléments' fait perdre toute la rédaction manuelle effectuée.");
1139 $form->setLib('flag_edition_integrale', sprintf($help_text_template, _("Type de rédaction"), $help_text));
1140 }
1141 else {
1142 $form->setLib('flag_edition_integrale', _("Type de rédaction"));
1143 }
1144
1145 // Ajout d'une infobulle d'aide lorsque le formulaire est en mode
1146 // modification et que l'option de prévisualisation de l'édition est
1147 // activée sur la collectivité du dossier
1148 if ($maj === '1'
1149 && $this->f->is_option_preview_pdf_enabled($this->get_dossier_instruction_om_collectivite()) === true) {
1150 //
1151 $help_text_template = '%s <span class="info-16" title="%s"></span>';
1152 $help_text = _("Attention la modification de la valeur de ce champ n'est pas prise en compte dans la prévisualisation. Pour que cette valeur soit mise à jour, il suffit de valider le formulaire.");
1153 $form->setLib('date_evenement', sprintf($help_text_template, _('date_evenement'), $help_text));
1154 $form->setLib('signataire_arrete', sprintf($help_text_template, _('signataire_arrete'), $help_text));
1155 }
1156 }
1157
1158 function triggerajouter($id, &$db = null, $val = array(), $DEBUG = null) {
1159 /**
1160 * Le code suivant permet de récupérer des valeurs des tables evenement
1161 * et dossier pour les stocker dans l'instruction :
1162 * DEPUIS L'EVENEMENT
1163 * - action
1164 * - delai
1165 * - accord_tacite
1166 * - etat
1167 * - avis_decision
1168 * - delai_notification
1169 * - lettretype
1170 * - autorite_competente
1171 * - complement_om_html
1172 * - complement2_om_html
1173 * - complement3_om_html
1174 * - complement4_om_html
1175 * - complement5_om_html
1176 * DEPUIS LE DOSSIER D'INSTRUCTION
1177 * - archive_delai
1178 * - archive_accord_tacite
1179 * - archive_etat
1180 * - archive_avis
1181 * - date_complet
1182 * - date_rejet
1183 * - date_limite
1184 * - date_notification_delai
1185 * - date_decision
1186 * - date_validite
1187 * - date_achevement
1188 * - date_chantier
1189 * - date_conformite
1190 * - avis_decision
1191 */
1192 // Récupération de tous les paramètres de l'événement sélectionné
1193 $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1194 WHERE evenement=".$this->valF['evenement'];
1195 $res = $db->query($sql);
1196 $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
1197 if (database::isError($res)) {
1198 die($res->getMessage());
1199 }
1200 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1201 // Récupération de l'identifiant de l'action
1202 // si une action est paramétrée dans l'événement
1203 $this->valF['action'] = NULL;
1204 if (isset($row['action']) and !empty($row['action'])) {
1205 $this->valF['action']=$row['action'];
1206 }
1207 // Récupération de la valeur du délai
1208 $this->valF['delai'] = $row['delai'];
1209 // Récupération de l'identifiant de l'état
1210 // si un état est paramétré dans l'événement
1211 $this->valF['etat']=NULL;
1212 if (isset($row['etat']) and !empty($row['etat'])) {
1213 $this->valF['etat']=$row['etat'];
1214 }
1215 // Récupération de la valeur d'accord tacite
1216 $this->valF['accord_tacite']=$row['accord_tacite'];
1217 // Récupération de la valeur du délai de notification
1218 $this->valF['delai_notification']=$row['delai_notification'];
1219 // Récupération de l'identifiant de l'avis
1220 // si un avis est paramétré dans l'événement
1221 $this->valF['avis_decision'] = NULL;
1222 if(isset($row['avis_decision']) and !empty($row['avis_decision'])) {
1223 $this->valF['avis_decision']=$row['avis_decision'];
1224 }
1225 // Récupération de la valeur de l'autorité compétente
1226 // si l'autorité compétente est paramétré dans l'événement
1227 $this->valF['autorite_competente'] = NULL;
1228 if(isset($row['autorite_competente']) and !empty($row['autorite_competente'])) {
1229 $this->valF['autorite_competente']=$row['autorite_competente'];
1230 }
1231 // Récupération de la valeur de la lettre type
1232 $this->valF['lettretype']=$row['lettretype'];
1233 }
1234 // Récupération de toutes les valeurs du dossier d'instruction en cours
1235 $sql = "SELECT * FROM ".DB_PREFIXE."dossier
1236 WHERE dossier='".$this->valF['dossier']."'";
1237 $res = $db->query($sql);
1238 $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
1239 if (database::isError($res)) {
1240 die($res->getMessage());
1241 }
1242 $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
1243 $this->updateArchiveData($row);
1244
1245 // Récupération de la duree de validite du dossier d'autorisation
1246 $sql = "SELECT duree_validite_parametrage
1247 FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
1248 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
1249 ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1250 LEFT JOIN ".DB_PREFIXE."dossier
1251 ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
1252 WHERE dossier.dossier='".$this->valF['dossier']."'";
1253 $duree_validite_parametrage = $db->getOne($sql);
1254 $this->addToLog("triggerajouter(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
1255 database::isError($duree_validite_parametrage);
1256 if ($duree_validite_parametrage != '') {
1257 $this->valF['duree_validite_parametrage']= $duree_validite_parametrage;
1258 }
1259
1260 // Identifiant du type de courrier
1261 $idTypeCourrier = '11';
1262 $idCourrier = str_pad($this->valF["instruction"], 10, "0", STR_PAD_LEFT);
1263 // Code barres
1264 $this->valF["code_barres"] = $idTypeCourrier . $idCourrier;
1265
1266 // Si le mode en rédaction intégrale est activé
1267 if (isset($this->valF['flag_edition_integrale']) === true
1268 && $this->valF['flag_edition_integrale'] === true) {
1269
1270 // Récupère la collectivite du dossier d'instruction
1271 $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
1272 $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
1273 // Récupère le corps de la lettre type
1274 $params = array(
1275 "specific" => array(
1276 "corps" => array(
1277 "mode" => "get",
1278 )
1279 ),
1280 );
1281 $result = $this->compute_pdf_output('lettretype', $this->valF['lettretype'], $collectivite, null, $params);
1282 $this->valF['corps_om_htmletatex'] = $result['pdf_output'];
1283 // Récupère le titre de la lettre type
1284 $params = array(
1285 "specific" => array(
1286 "titre" => array(
1287 "mode" => "get",
1288 )
1289 ),
1290 );
1291 $result = $this->compute_pdf_output('lettretype', $this->valF['lettretype'], $collectivite, null, $params);
1292 $this->valF['titre_om_htmletat'] = $result['pdf_output'];
1293 }
1294 }
1295
1296 // Test si une restriction est valide
1297 // return boolean
1298 function restrictionIsValid($restriction){
1299 if($this->restriction_valid != null) {
1300 return $this->restriction_valid;
1301 }
1302 if(empty($restriction)) {
1303 $this->restriction_valid = true;
1304 return $this->restriction_valid;
1305 }
1306 // Liste des opérateurs possibles sans espace
1307 $operateurs = array(">=", "<=", "+", "-", "&&", "||", "==", "!=");
1308 // Liste identique mais avec le marqueur §
1309 $mark = "§";
1310 $operateurs_marked = array();
1311 foreach ($operateurs as $operateur) {
1312 $operateurs_marked[] = $mark.$operateur.$mark;
1313 }
1314
1315 // Supprime tous les espaces de la chaîne de caractère
1316 $restriction = preg_replace('/\s+/', '', $restriction);
1317
1318 // Met un marqueur avant et après les opérateurs
1319 // puis transforme la chaine en un tableau
1320 $restriction = str_replace($operateurs, $operateurs_marked,
1321 $restriction);
1322
1323 // Pour chaque opérateur logique
1324 foreach (array('&&', '||') as $operator) {
1325
1326 // S'il est absent on ne fait aucun traitement
1327 if (strpos($restriction, $mark.$operator.$mark) === false) {
1328 continue;
1329 }
1330 // Sinon on vérifie les deux conditions avec le OU/ET logique
1331 $restrictions = explode($mark.$operator.$mark, $restriction);
1332 $restrictions[0] = explode($mark, $restrictions[0]);
1333 $restrictions[1] = explode($mark, $restrictions[1]);
1334 $res_bool = false;
1335 if ($operator == '&&') {
1336 if ($this->is_restriction_satisfied($restrictions[0], $operateurs)
1337 && $this->is_restriction_satisfied($restrictions[1], $operateurs)) {
1338 $res_bool = true;
1339 }
1340 }
1341 if ($operator == '||') {
1342 if ($this->is_restriction_satisfied($restrictions[0], $operateurs)
1343 || $this->is_restriction_satisfied($restrictions[1], $operateurs)) {
1344 $res_bool = true;
1345 }
1346 }
1347 return $res_bool;
1348 }
1349 $tabRestriction = explode($mark, $restriction);
1350 return $this->is_restriction_satisfied($tabRestriction, $operateurs);
1351
1352 }
1353
1354 function is_restriction_satisfied($restriction, $operateurs) {
1355 // Tableau comprenant les résultat
1356 $res = array();
1357 // Compteur pour les résultat
1358 // commence à 1 car le 0 doit rester inchangé tout au long du traitement
1359 $j = 1;
1360 // Comparateur du calcul
1361 $comparateur = '';
1362 // Booléen retourné
1363 $res_bool = true;
1364
1365 // S'il y a un comparateur
1366 if (in_array(">=", $restriction)
1367 || in_array("<=", $restriction)
1368 || in_array("==", $restriction)
1369 || in_array("!=", $restriction)) {
1370
1371 // Si le tableau n'est pas vide
1372 if (count($restriction) > 0) {
1373
1374 // Boucle dans le tableau pour récupérer seulement les valeurs
1375 foreach ($restriction as $key => $value) {
1376 //
1377 if (!in_array($value, $operateurs)) {
1378 if ($this->getRestrictionValue($value) != false) {
1379 $res[] = $this->getRestrictionValue($value);
1380 } else {
1381 // Message d'erreur
1382 $error_message = sprintf(_("Le champ %s de l'instruction %s est vide"), "<span class='bold'>".$value."</span>", "<span class='bold'>".$this->valF["instruction"]."</span>");
1383 $this->addToMessage($error_message);
1384 // Arrête le traitement
1385 return false;
1386 }
1387 }
1388 }
1389
1390 // Boucle dans le tableau
1391 // commence à 1 car le 0 doit rester inchangé tout au long du
1392 // traitement
1393 for ($i = 1; $i<count($restriction); $i++) {
1394
1395 // Récupère le comparateur
1396 if ($restriction[$i] === ">="
1397 || $restriction[$i] === "<="
1398 || $restriction[$i] === "=="
1399 || $restriction[$i] === "!=") {
1400 $comparateur = $restriction[$i];
1401 }
1402
1403 // Si l'opérateur qui suit est un "+"
1404 if ($restriction[$i] === "+") {
1405 $dateDep = $res[$j];
1406 unset($res[$j]);$j++;
1407 $duree = $res[$j];
1408 unset($res[$j]);
1409 $res[$j] = $this->f->mois_date($dateDep, $duree, "+");
1410 }
1411
1412 // Si l'opérateur qui suit est un "-"
1413 if ($restriction[$i] === "-") {
1414 $dateDep = $res[$j];
1415 unset($res[$j]);$j++;
1416 $duree = $res[$j];
1417 unset($res[$j]);
1418 $res[$j] = $this->f->mois_date($dateDep, $duree, "-");
1419 }
1420 }
1421
1422 }
1423
1424 // Si les tableau des résultats n'est pas vide
1425 if (count($res) > 0) {
1426 //
1427 $res_bool = false;
1428 // Effectue le test
1429 if ($comparateur === ">=") {
1430 //
1431 if (strtotime($res[0]) >= strtotime($res[$j])) {
1432 $res_bool = true;
1433 }
1434 }
1435 if ($comparateur === "<=") {
1436 //
1437 if (strtotime($res[0]) <= strtotime($res[$j])) {
1438 $res_bool = true;
1439 }
1440 }
1441 if ($comparateur === "==") {
1442 //
1443 if (strtotime($res[0]) == strtotime($res[$j])) {
1444 $res_bool = true;
1445 }
1446 }
1447 if ($comparateur === "!=") {
1448 //
1449 if (strtotime($res[0]) != strtotime($res[$j])) {
1450 $res_bool = true;
1451 }
1452 }
1453 }
1454 // Sinon une erreur s'affiche
1455 } else {
1456
1457 // Message d'erreur
1458 $error_message = _("Mauvais parametrage de la restriction.")." ".
1459 _("Contactez votre administrateur");
1460 $this->addToMessage($error_message);
1461 // Arrête le traitement
1462 return false;
1463 }
1464
1465 return $res_bool;
1466
1467 }
1468
1469 /**
1470 * Permet de définir si l'événement passé en paramètre est un événement retour.
1471 * @param integer $evenement événement à tester
1472 *
1473 * @return boolean retourne true si événement retour sinon false
1474 */
1475 function is_evenement_retour($evenement) {
1476 if(empty($evenement) || !is_numeric($evenement)) {
1477 return "";
1478 }
1479 $sql = "SELECT retour
1480 FROM ".DB_PREFIXE."evenement
1481 WHERE evenement = ".$evenement;
1482 $retour = $this->db->getOne($sql);
1483 $this->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
1484 if (database::isError($retour)) {
1485 die($retour->getMessage());
1486 }
1487 if ($retour == 't') {
1488 return true;
1489 } else {
1490 return false;
1491 }
1492 }
1493
1494 /**
1495 * Retourne le champ restriction de l'événement passé en paramètre.
1496 *
1497 * @param integer $evenement id de l'événement sur lequel récupérer la restriction
1498 *
1499 * @return string contenu du champ restriction
1500 */
1501 function get_restriction($evenement) {
1502 if(empty($evenement) || !is_numeric($evenement)) {
1503 return "";
1504 }
1505 //Récupère la restriction
1506 $sql= "SELECT
1507 restriction
1508 FROM
1509 ".DB_PREFIXE."evenement
1510 WHERE
1511 evenement =".$evenement;
1512
1513 $restriction = $this->db->getOne($sql);
1514 $this->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
1515 if (database::isError($restriction)) {
1516 die($restriction->getMessage());
1517 }
1518 return $restriction;
1519 }
1520
1521 /**
1522 * Récupère la valeur du champ dans la restriction
1523 * @param string $restrictionValue Nom du champ
1524 * @return mixed Valeur du champ
1525 */
1526 function getRestrictionValue($restrictionValue){
1527
1528 // Initialisation de la valeur de retour
1529 $return = false;
1530
1531 // Récupére les valeurs du dossier
1532 $value_dossier = $this->get_dossier_actual();
1533
1534 //
1535 if (is_numeric($restrictionValue)) {
1536 $return = $restrictionValue;
1537 }elseif (isset($value_dossier[$restrictionValue])) {
1538 $return = $value_dossier[$restrictionValue];
1539 }elseif (isset($this->valF[$restrictionValue])) {
1540 $return = $this->valF[$restrictionValue];
1541 }
1542
1543 // Retourne la valeur du champ
1544 return $return;
1545 }
1546
1547
1548 /**
1549 * Calcul des règle d'action selon leur type.
1550 *
1551 * Types de règle :
1552 * - date
1553 * - numeric
1554 * - text
1555 * - bool
1556 * - specific
1557 * - technical_data
1558 *
1559 * @param string $rule Règle d'action.
1560 * @param string $rule_name Nom de la règle.
1561 * @param string $type Type de la règle.
1562 *
1563 * @return mixed Résultat de la règle
1564 */
1565 public function regle($rule, $rule_name, $type = null) {
1566
1567 // Supprime tous les espaces de la chaîne de caractère
1568 $rule = str_replace(' ', '', $rule);
1569 // Coupe la chaîne au niveau de l'opérateur
1570 $operands = explode ("+", $rule);
1571 // Nombre d'opérande
1572 $nb_operands = count($operands);
1573
1574 // Règle à null
1575 if ($rule == "null") {
1576 return null;
1577 }
1578
1579 // Tableau des champs de type date
1580 $rule_type_date = array(
1581 "regle_date_limite",
1582 "regle_date_notification_delai",
1583 "regle_date_complet",
1584 "regle_date_validite",
1585 "regle_date_decision",
1586 "regle_date_chantier",
1587 "regle_date_achevement",
1588 "regle_date_conformite",
1589 "regle_date_rejet",
1590 "regle_date_dernier_depot",
1591 "regle_date_limite_incompletude",
1592 "regle_date_cloture_instruction",
1593 "regle_date_premiere_visite",
1594 "regle_date_derniere_visite",
1595 "regle_date_contradictoire",
1596 "regle_date_retour_contradictoire",
1597 "regle_date_ait",
1598 "regle_date_transmission_parquet",
1599 );
1600 // Tableau des champs de type numérique
1601 $rule_type_numeric = array(
1602 "regle_delai",
1603 "regle_delai_incompletude",
1604 );
1605 // Tableau des champs de type text
1606 $rule_type_text = array(
1607 );
1608 // Tableau des champs de type booléen
1609 $rule_type_bool = array(
1610 );
1611 // Tableau des champs spécifiques
1612 $rule_type_specific = array(
1613 "regle_autorite_competente",
1614 "regle_etat",
1615 "regle_accord_tacite",
1616 "regle_avis",
1617 );
1618 // Tableau des champs de données techniques
1619 $rule_type_technical_data = array(
1620 'regle_donnees_techniques1',
1621 'regle_donnees_techniques2',
1622 'regle_donnees_techniques3',
1623 'regle_donnees_techniques4',
1624 'regle_donnees_techniques5',
1625 );
1626 // Tableau des champs simple
1627 $rule_type_simple = array(
1628 "regle_dossier_instruction_type",
1629 );
1630
1631 // Définit le type du champ
1632 if (in_array($rule_name, $rule_type_date) == true) {
1633 $type = "date";
1634 }
1635 if (in_array($rule_name, $rule_type_numeric) == true) {
1636 $type = "numeric";
1637 }
1638 if (in_array($rule_name, $rule_type_text) === true) {
1639 $type = "text";
1640 }
1641 if (in_array($rule_name, $rule_type_bool) === true) {
1642 $type = "bool";
1643 }
1644 if (in_array($rule_name, $rule_type_specific) === true) {
1645 $type = "specific";
1646 }
1647 if (in_array($rule_name, $rule_type_technical_data) === true) {
1648 $type = 'text';
1649 }
1650 if (in_array($rule_name, $rule_type_simple) === true) {
1651 $type = 'simple';
1652 }
1653
1654 // Si c'est un type spécifique ou booléen alors il n'a qu'un opérande
1655 // Récupère directement la valeur de l'opérande
1656 if ($type === 'specific' || $type === 'bool') {
1657 //
1658 return $this->get_value_for_rule($rule);
1659 }
1660
1661 // Initialisation des variables
1662 $key_date = 0;
1663 $total_numeric = 0;
1664 $res_text = '';
1665
1666 // Pour chaque opérande
1667 foreach ($operands as $key => $operand) {
1668
1669 // Si c'est une règle de type date
1670 if ($type == 'date') {
1671 // Vérifie si au moins une des opérandes est une date
1672 if (is_numeric($operand) === false
1673 && $this->get_value_for_rule($operand) !== null
1674 && $this->f->check_date($this->get_value_for_rule($operand)) == true) {
1675 // Récupère la position de la date
1676 $key_date = $key;
1677 }
1678 // Les autres opérandes doivent être que des numériques
1679 if (is_numeric($operand) == true) {
1680 // Ajoute l'opérande au total
1681 $total_numeric += $operand;
1682 }
1683 if (is_numeric($operand) === false
1684 && $this->get_value_for_rule($operand) !== null
1685 && is_numeric($this->get_value_for_rule($operand)) == true) {
1686 // Ajoute l'opérande au total
1687 $total_numeric += $this->get_value_for_rule($operand);
1688 }
1689 }
1690
1691 // Si c'est une règle de type numérique
1692 if ($type == 'numeric') {
1693 // Les opérandes doivent être que des numériques
1694 if (is_numeric($operand) == true) {
1695 // Ajoute l'opérande au total
1696 $total_numeric += $operand;
1697 }
1698 if (is_numeric($operand) === false
1699 && $this->get_value_for_rule($operand) !== null
1700 && is_numeric($this->get_value_for_rule($operand)) == true) {
1701 // Ajoute l'opérande au total
1702 $total_numeric += $this->get_value_for_rule($operand);
1703 }
1704 }
1705
1706 // Si c'est une règle de type text
1707 if ($type === 'text') {
1708 // Concatène toutes les chaînes de caractère
1709 $res_text .= $this->get_value_for_rule($operand);
1710 }
1711 }
1712
1713 // Résultat pour une règle de type date
1714 if ($type == 'date') {
1715 // Retourne le calcul de la date
1716 return $this->f->mois_date($this->valF[$operands[$key_date]],
1717 $total_numeric, "+");
1718 }
1719
1720 // Résultat pour une règle de type numérique
1721 if ($type == 'numeric') {
1722 // Retourne le calcul
1723 return $total_numeric;
1724 }
1725
1726 // Résultat pour une règle de type text
1727 if ($type === 'text') {
1728 // Retourne la chaîne de caractère
1729 return $res_text;
1730 }
1731 if ($type === 'simple') {
1732 // Retourne la valeur du champs rule
1733 return $rule;
1734 }
1735 }
1736
1737
1738 /**
1739 * Récupère la valeur du champs dans l'instruction ou dans les données
1740 * techniques.
1741 * Spécifique au calcul des règles.
1742 *
1743 * @param string $field Champ
1744 *
1745 * @return mixed Valeur du champ
1746 */
1747 private function get_value_for_rule($field) {
1748 // Si le champ n'existe pas dans la table instruction
1749 if (array_key_exists($field, $this->valF) === false) {
1750 // Récupère l'instance de la classe donnees_techniques
1751 $inst_donnees_techniques = $this->get_inst_donnees_techniques();
1752 // Retourne la valeur de la donnée technique
1753 return $inst_donnees_techniques->getVal($field);
1754 }
1755
1756 //
1757 return $this->valF[$field];
1758 }
1759
1760
1761 /**
1762 * [get_inst_donnees_techniques description]
1763 *
1764 * @param [type] $donnees_techniques [description]
1765 *
1766 * @return [type] [description]
1767 */
1768 function get_inst_donnees_techniques($donnees_techniques = null) {
1769 //
1770 if (isset($this->inst_donnees_techniques) === false or
1771 $this->inst_donnees_techniques === null) {
1772 //
1773 if (is_null($donnees_techniques)) {
1774 $donnees_techniques = $this->getDonneesTechniques();
1775 }
1776 //
1777 $this->inst_donnees_techniques = $this->f->get_inst__om_dbform(array(
1778 "obj" => "donnees_techniques",
1779 "idx" => $donnees_techniques,
1780 ));
1781 }
1782 //
1783 return $this->inst_donnees_techniques;
1784 }
1785
1786
1787 /**
1788 * Retourne l'identifiant des données techniques liées du dossier
1789 * @return string L'identifiant des données techniques liées du dossier
1790 */
1791 function getDonneesTechniques() {
1792
1793 $donnees_techniques = '';
1794
1795 $sql = "SELECT donnees_techniques
1796 FROM ".DB_PREFIXE."donnees_techniques
1797 WHERE dossier_instruction ='".$this->valF["dossier"]."'";
1798 $donnees_techniques = $this->db->getOne($sql);
1799 $this->f->addToLog("getStatut() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
1800 if ( database::isError($donnees_techniques)){
1801 die();
1802 }
1803
1804 return $donnees_techniques;
1805 }
1806
1807
1808 /**
1809 * TRIGGER - triggerajouterapres.
1810 *
1811 * - Mise à jour des informations liées au workflow sur le dossier
1812 * - Interface avec le référentiel ERP [105][111]
1813 * - Mise à jour du DA
1814 * - Historisation de la vie du DI
1815 *
1816 * @return boolean
1817 */
1818 function triggerajouterapres($id, &$db = null, $val = array(), $DEBUG = null) {
1819
1820 // On a besoin de l'instance du dossier lié à l'événement d'instruction
1821 $inst_di = $this->get_inst_dossier($this->valF['dossier']);
1822
1823 // Instance de la classe evenement
1824 $inst_evenement = $this->get_inst_evenement($this->valF['evenement']);
1825
1826 /**
1827 * Mise à jour des valeurs du dossier en fonction des valeurs calculées
1828 * par l'action
1829 */
1830 // état de complétude actuel du dossier
1831 $incompletude = ($inst_di->getVal('incompletude') == 't' ? true : false);
1832 // Initialisation
1833 $valF = "";
1834 $valF_dt = "";
1835 //
1836 if($incompletude === FALSE) {
1837 // Si l'événement d'instruction est de type incompletude
1838 if($inst_evenement->getVal('type') == "incompletude") {
1839 // On marque le dossier en incomplétude pour application des actions
1840 $incompletude = TRUE;
1841 // Set du flag incomplétude de la table dossier
1842 $valF['incompletude'] = TRUE;
1843 // Enregistrement de l'état dans la variable provisoire
1844 $valF['etat_pendant_incompletude'] = $this->valF['archive_etat'];
1845 }
1846 } else {
1847 // Si l'evenement d'instruction est de type retour ou contient une
1848 // decision, on sort d'incomplétude
1849 if($inst_evenement->getVal('type') == "retour" OR
1850 $inst_evenement->getVal('avis_decision') != NULL) {
1851 // On enlève la marque d'incomplétude pour application des actions
1852 $incompletude = FALSE;
1853 // On enlève le flag d'incomplétude sur l'enregistrement de la table dossier
1854 $valF['incompletude'] = FALSE;
1855 $valF['incomplet_notifie'] = FALSE;
1856 // Restauration de l'état depuis l'état provisoire
1857 $valF['etat'] = $this->valF['archive_etat_pendant_incompletude'];
1858 // On vide la variable provisoire ainsi que le délai de complétude
1859 // et la date limite de complétude
1860 $valF['etat_pendant_incompletude'] = NULL;
1861 $valF['delai_incompletude'] = NULL;
1862 $valF['date_limite_incompletude'] = NULL;
1863 $valF['evenement_suivant_tacite_incompletude'] = NULL;
1864 }
1865 }
1866 // Récupération des paramètres de l'action
1867 $sql = "SELECT * FROM ".DB_PREFIXE."action
1868 WHERE action='".$this->valF['action']."'";
1869 $res = $db->query($sql);
1870 $this->addToLog("triggerajouterapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1871 if (database::isError($res)) {
1872 die($res->getMessage());
1873 }
1874 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1875
1876 // pour chacune des regles, on applique la regle
1877 if ($row['regle_delai'] != '') {
1878 $valF['delai'] = $this->regle($row['regle_delai'], 'regle_delai');
1879 }
1880 if ($row['regle_accord_tacite'] != '') {
1881 $valF['accord_tacite'] = $this->regle($row['regle_accord_tacite'], 'regle_accord_tacite');
1882 }
1883 if ($row['regle_avis'] != '') {
1884 $valF['avis_decision'] = $this->regle($row['regle_avis'], 'regle_avis');
1885 }
1886 if ($row['regle_date_limite'] != '') {
1887 $valF['date_limite'] = $this->regle($row['regle_date_limite'], 'regle_date_limite');
1888 }
1889 if ($row['regle_date_complet'] != '') {
1890 $valF['date_complet'] = $this->regle($row['regle_date_complet'], 'regle_date_complet');
1891 }
1892 if ($row['regle_date_dernier_depot'] != '') {
1893 $valF['date_dernier_depot'] = $this->regle($row['regle_date_dernier_depot'], 'regle_date_dernier_depot');
1894 }
1895 if ($row['regle_date_notification_delai'] != '') {
1896 $valF['date_notification_delai'] = $this->regle($row['regle_date_notification_delai'], 'regle_date_notification_delai');
1897 }
1898 if ($row['regle_date_decision'] != '') {
1899 $valF['date_decision'] = $this->regle($row['regle_date_decision'], 'regle_date_decision');
1900 }
1901 if ($row['regle_date_rejet'] != '') {
1902 $valF['date_rejet'] = $this->regle($row['regle_date_rejet'], 'regle_date_rejet');
1903 }
1904 if ($row['regle_date_validite'] != '') {
1905 $valF['date_validite'] = $this->regle($row['regle_date_validite'], 'regle_date_validite');
1906 }
1907 if ($row['regle_date_chantier'] != '') {
1908 $valF['date_chantier'] = $this->regle($row['regle_date_chantier'], 'regle_date_chantier');
1909 }
1910 if ($row['regle_date_achevement'] != '') {
1911 $valF['date_achevement'] = $this->regle($row['regle_date_achevement'], 'regle_date_achevement');
1912 }
1913 if ($row['regle_date_conformite'] != '') {
1914 $valF['date_conformite'] = $this->regle($row['regle_date_conformite'], 'regle_date_conformite');
1915 }
1916 if ($row['regle_date_limite_incompletude'] != '') {
1917 $valF['date_limite_incompletude'] = $this->regle($row['regle_date_limite_incompletude'], 'regle_date_limite_incompletude');
1918 }
1919 if ($row['regle_delai_incompletude'] != '') {
1920 $valF['delai_incompletude'] = $this->regle($row['regle_delai_incompletude'], 'regle_delai_incompletude');
1921 }
1922 if ($row['regle_autorite_competente'] != '') {
1923 $valF['autorite_competente'] = $this->regle($row['regle_autorite_competente'], 'regle_autorite_competente');
1924 }
1925 if ($row['regle_etat'] != '') {
1926 // Si on est dans le cas général ou qu'on est en incomplétude et
1927 // qu'on a un événement de type incomplétude alors : on stocke
1928 // l'état dans la variable courante
1929 if ($incompletude == FALSE OR $inst_evenement->getVal('type') == "incompletude") {
1930 $valF['etat'] = $this->regle($row['regle_etat'], 'regle_etat');
1931 } else {
1932 $valF['etat_pendant_incompletude'] = $this->regle($row['regle_etat'], 'regle_etat');
1933 }
1934 }
1935 if ($row['regle_date_cloture_instruction'] !== '') {
1936 $valF['date_cloture_instruction'] = $this->regle($row['regle_date_cloture_instruction'], 'regle_date_cloture_instruction');
1937 }
1938 if ($row['regle_date_premiere_visite'] !== '') {
1939 $valF['date_premiere_visite'] = $this->regle($row['regle_date_premiere_visite'], 'regle_date_premiere_visite');
1940 }
1941 if ($row['regle_date_derniere_visite'] !== '') {
1942 $valF['date_derniere_visite'] = $this->regle($row['regle_date_derniere_visite'], 'regle_date_derniere_visite');
1943 }
1944 if ($row['regle_date_contradictoire'] !== '') {
1945 $valF['date_contradictoire'] = $this->regle($row['regle_date_contradictoire'], 'regle_date_contradictoire');
1946 }
1947 if ($row['regle_date_retour_contradictoire'] !== '') {
1948 $valF['date_retour_contradictoire'] = $this->regle($row['regle_date_retour_contradictoire'], 'regle_date_retour_contradictoire');
1949 }
1950 if ($row['regle_date_ait'] !== '') {
1951 $valF['date_ait'] = $this->regle($row['regle_date_ait'], 'regle_date_ait');
1952 }
1953 if ($row['regle_donnees_techniques1'] !== '') {
1954 $valF_dt[$row['cible_regle_donnees_techniques1']] = $this->regle($row['regle_donnees_techniques1'], 'regle_donnees_techniques1');
1955 }
1956 if ($row['regle_donnees_techniques2'] !== '') {
1957 $valF_dt[$row['cible_regle_donnees_techniques2']] = $this->regle($row['regle_donnees_techniques2'], 'regle_donnees_techniques2');
1958 }
1959 if ($row['regle_donnees_techniques3'] !== '') {
1960 $valF_dt[$row['cible_regle_donnees_techniques3']] = $this->regle($row['regle_donnees_techniques3'], 'regle_donnees_techniques3');
1961 }
1962 if ($row['regle_donnees_techniques4'] !== '') {
1963 $valF_dt[$row['cible_regle_donnees_techniques4']] = $this->regle($row['regle_donnees_techniques4'], 'regle_donnees_techniques4');
1964 }
1965 if ($row['regle_donnees_techniques5'] !== '') {
1966 $valF_dt[$row['cible_regle_donnees_techniques5']] = $this->regle($row['regle_donnees_techniques5'], 'regle_donnees_techniques5');
1967 }
1968 if ($row['regle_date_transmission_parquet'] !== '') {
1969 $valF['date_transmission_parquet'] = $this->regle($row['regle_date_transmission_parquet'], 'regle_date_transmission_parquet');
1970 }
1971 if ($row['regle_dossier_instruction_type'] !== '') {
1972 $valF['dossier_instruction_type'] = $this->regle($row['regle_dossier_instruction_type'], 'regle_dossier_instruction_type');
1973 }
1974 }
1975
1976 // Si l'événement a un événement suivant tacite
1977 if($inst_evenement->getVal('evenement_suivant_tacite') != '') {
1978 // Si le DI n'est pas en incomplétude, l'événement tacite est stocké
1979 // dans le champ evenement_suivant_tacite du dossier
1980 if ($incompletude == false OR $inst_evenement->getVal('type') != "incompletude") {
1981 //
1982 $valF['evenement_suivant_tacite'] = $inst_evenement->getVal('evenement_suivant_tacite');
1983 } else {
1984 // Sinon l'événement tacite est stocké dans le champ
1985 // evenement_suivant_tacite_incompletude du dossier
1986 $valF['evenement_suivant_tacite_incompletude'] = $inst_evenement->getVal('evenement_suivant_tacite');
1987 }
1988 }
1989 // Si des valeurs de données techniques ont été calculées alors on met à jour l'enregistrement
1990 if ($valF_dt != "") {
1991 $dt_id = $this->getDonneesTechniques();
1992 // On met à jour le dossier
1993 $cle = " donnees_techniques='".$dt_id."'";
1994 $res1 = $db->autoExecute(DB_PREFIXE.'donnees_techniques', $valF_dt, DB_AUTOQUERY_UPDATE, $cle);
1995 $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."donnees_techniques\", ".print_r($valF_dt, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1996 if (database::isError($res1)) {
1997 die($res->getMessage());
1998 }
1999 // Affichage d'informations à l'utilisateur
2000 $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
2001 }
2002 // Si des valeurs ont été calculées alors on met à jour l'enregistrement
2003 if ($valF != "") {
2004 // On met à jour le dossier
2005 $cle = " dossier='".$this->valF['dossier']."'";
2006 $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
2007 $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
2008 if (database::isError($res1)) {
2009 die($res->getMessage());
2010 }
2011 // Affichage d'informations à l'utilisateur
2012 $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
2013 }
2014
2015 /**
2016 * Interface avec le référentiel ERP.
2017 *
2018 * (WS->ERP)[105] Arrêté d'un dossier PC effectué -> PC qui concerne un ERP
2019 * (WS->ERP)[111] Décision de conformité effectuée -> PC qui concerne un ERP
2020 * Déclencheur :
2021 * - L'option ERP est activée
2022 * - Le dossier est marqué comme "connecté au référentiel ERP"
2023 * - Le dossier est de type PC
2024 * - Le formulaire d'ajout d'un événement d'instruction est validé
2025 * avec un événement pour lequel les services ERP doivent être
2026 * informé
2027 */
2028 //
2029 if ($this->f->is_option_referentiel_erp_enabled() === true
2030 && $inst_di->is_connected_to_referentiel_erp() === true
2031 && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
2032 && in_array($inst_evenement->getVal($inst_evenement->clePrimaire), explode(";", $this->f->getParameter('erp__evenements__decision__pc')))) {
2033 //
2034 $infos = array(
2035 "dossier_instruction" => $this->valF['dossier'],
2036 "decision" => $inst_evenement->getVal("libelle"),
2037 );
2038 //
2039 $ret = $this->f->send_message_to_referentiel_erp(105, $infos);
2040 if ($ret !== true) {
2041 $this->cleanMessage();
2042 $this->addToMessage(_("Une erreur s'est produite lors de la notification (105) du référentiel ERP. Contactez votre administrateur."));
2043 return false;
2044 }
2045 $this->addToMessage(_("Notification (105) du référentiel ERP OK."));
2046 }
2047
2048 /**
2049 * Mise à jour des données du DA.
2050 */
2051 //
2052 $inst_da = $inst_di->get_inst_dossier_autorisation();
2053 //
2054 if ($inst_da->majDossierAutorisation() === false) {
2055 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
2056 $this->correct = false;
2057 return false;
2058 }
2059
2060 /**
2061 * Finalisation automatique de l'instruction si le paramétrage de l'événement l'autorise
2062 */
2063 // Si la finalisation automatique de l'événement est activée
2064 // ET si l'instruction n'a pas déjà été finalisée
2065 // ET s'il existe une lettre type associée
2066 if ($inst_evenement->getVal('finaliser_automatiquement') === 't'
2067 && $inst_evenement->getVal('om_final_instruction') !== 't'
2068 && $inst_evenement->getVal('lettretype') !== ''
2069 && $inst_evenement->getVal('lettretype') !== null) {
2070
2071 // On instancie l'instruction
2072 $inst_instruction = $this->f->get_inst__om_dbform(array(
2073 "obj" => "instruction",
2074 "idx" => $this->valF[$this->clePrimaire],
2075 ));
2076
2077 // On finalise l'instruction dans le contexte de finalisation : action 100
2078 $inst_instruction->setParameter('maj', 100);
2079 $finalize = $inst_instruction->finalize($inst_instruction->valF);
2080
2081 // Une erreur de finalisation renvoie 'false' : ajout dans les logs
2082 // et dans le message d'erreur
2083 if ($finalize === false) {
2084 $this->f->addToLog(__METHOD__."() : ERROR - Impossible de finaliser l'instruction.", DEBUG_MODE);
2085 $this->addToMessage(_("Erreur lors de la finalisation de l'instruction. Contactez votre administrateur."));
2086 return false;
2087 }
2088 }
2089
2090 /**
2091 * Finalisation automatique des instructions tacites ou retours.
2092 */
2093 // Si l'option de finalisation automatique des instructions tacites ou
2094 // retours est activée et l'événement d'instruction a une lettre type
2095 // associée
2096 $collectivite_di = $this->get_dossier_instruction_om_collectivite($val['dossier']);
2097 if ($this->f->is_option_finalisation_auto_enabled($collectivite_di) === true
2098 && $inst_evenement->getVal('lettretype') !== ''
2099 && $inst_evenement->getVal('lettretype') !== null) {
2100
2101 // Rècupère l'identifiant de l'événement
2102 $evenement_id = $inst_evenement->getVal($inst_evenement->clePrimaire);
2103
2104 // Si l'événement d'instruction est identifié comme un événement
2105 // retour
2106 // OU l'événement d'instruction est l'événement suivant tacite du
2107 // dossier d'instruction (incomplétude prise en compte)
2108 // ET l'événement d'instruction n'a pas déjà été finalisé
2109 if (($inst_evenement->getVal("retour") === 't'
2110 || ($inst_di->getVal('evenement_suivant_tacite_incompletude') === $evenement_id
2111 || $inst_di->getVal('evenement_suivant_tacite') === $evenement_id))
2112 && ($inst_evenement->getVal('om_final_instruction') !== 't')) {
2113
2114 // Finalise l'instruction
2115 $inst_instruction = $this->f->get_inst__om_dbform(array(
2116 "obj" => "instruction",
2117 "idx" => $this->valF[$this->clePrimaire],
2118 ));
2119 $inst_instruction->setParameter('maj', 100);
2120 $finalize = $inst_instruction->finalize($inst_instruction->valF);
2121 if ($finalize === false) {
2122 //
2123 return false;
2124 }
2125 }
2126 }
2127
2128 /**
2129 * Mise à jour de la date de dernière modification du dossier
2130 */
2131 $inst_di->update_last_modification_date();
2132
2133 /**
2134 * Historisation de la vie du DI.
2135 */
2136 //
2137 return $this->add_log_to_dossier($id, array_merge($val, $this->valF));
2138 }
2139
2140 function triggermodifierapres($id, &$db = null, $val = array(), $DEBUG = null) {
2141 /**
2142 * L'objectif ici est d'effectuer les recalculs de date dans le dossier
2143 * si la date de l'evenement est modifiee
2144 */
2145 // Initialisation
2146 $valF = "";
2147 $valF_dt = "";
2148 // Initialisation du type d'événement
2149 $type_evmt = "";
2150 // Récupération de l'action correspondante à l'événement
2151 $sql = "SELECT action
2152 FROM ".DB_PREFIXE."evenement
2153 WHERE evenement=".$this->valF['evenement'];
2154 $action = $db->getOne($sql);
2155 $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
2156 if (database::isError($action)) {
2157 die($action->getMessage());
2158 }
2159
2160 // Récupération des paramètres de l'action
2161 $sql = "SELECT * FROM ".DB_PREFIXE."action
2162 WHERE action='".$action."'";
2163 $res = $db->query($sql);
2164 $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
2165 if (database::isError($res)) {
2166 die($res->getMessage());
2167 }
2168 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
2169 // application des regles sur le courrier + delai
2170 if(preg_match("/date_evenement/",$row['regle_date_limite'])){
2171 $valF['date_limite']= $this->regle($row['regle_date_limite'], 'regle_date_limite');
2172 }
2173 if(preg_match("/date_evenement/",$row['regle_date_complet'])){
2174 $valF['date_complet']= $this->regle($row['regle_date_complet'], 'regle_date_complet');
2175 }
2176 if(preg_match("/date_evenement/",$row['regle_date_dernier_depot'])){
2177 $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot'], 'regle_date_dernier_depot');
2178 }
2179 if(preg_match("/date_evenement/",$row['regle_date_notification_delai'])){
2180 $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai'], 'regle_date_notification_delai');
2181 }
2182 if(preg_match("/date_evenement/",$row['regle_date_decision'])){
2183 $valF['date_decision']= $this->regle($row['regle_date_decision'], 'regle_date_decision');
2184 }
2185 if(preg_match("/date_evenement/",$row['regle_date_rejet'])){
2186 $valF['date_rejet']= $this->regle($row['regle_date_rejet'], 'regle_date_rejet');
2187 }
2188 if(preg_match("/date_evenement/",$row['regle_date_validite'])){
2189 $valF['date_validite']= $this->regle($row['regle_date_validite'], 'regle_date_validite');
2190 }
2191 if(preg_match("/date_evenement/",$row['regle_date_chantier'])){
2192 $valF['date_chantier']= $this->regle($row['regle_date_chantier'], 'regle_date_chantier');
2193 }
2194 if(preg_match("/date_evenement/",$row['regle_date_achevement'])){
2195 $valF['date_achevement']= $this->regle($row['regle_date_achevement'], 'regle_date_achevement');
2196 }
2197 if(preg_match("/date_evenement/",$row['regle_date_conformite'])){
2198 $valF['date_conformite']= $this->regle($row['regle_date_conformite'], 'regle_date_conformite');
2199 }
2200 if(preg_match("/date_evenement/",$row['regle_date_cloture_instruction'])){
2201 $valF['date_cloture_instruction']= $this->regle($row['regle_date_cloture_instruction'], 'regle_date_cloture_instruction');
2202 }
2203 if(preg_match("/date_evenement/",$row['regle_date_premiere_visite'])){
2204 $valF['date_premiere_visite']= $this->regle($row['regle_date_premiere_visite'], 'regle_date_premiere_visite');
2205 }
2206 if(preg_match("/date_evenement/",$row['regle_date_derniere_visite'])){
2207 $valF['date_derniere_visite']= $this->regle($row['regle_date_derniere_visite'], 'regle_date_derniere_visite');
2208 }
2209 if(preg_match("/date_evenement/",$row['regle_date_contradictoire'])){
2210 $valF['date_contradictoire']= $this->regle($row['regle_date_contradictoire'], 'regle_date_contradictoire');
2211 }
2212 if(preg_match("/date_evenement/",$row['regle_date_retour_contradictoire'])){
2213 $valF['date_retour_contradictoire']= $this->regle($row['regle_date_retour_contradictoire'], 'regle_date_retour_contradictoire');
2214 }
2215 if(preg_match("/date_evenement/",$row['regle_date_ait'])){
2216 $valF['date_ait']= $this->regle($row['regle_date_ait'], 'regle_date_ait');
2217 }
2218 if(preg_match("/date_evenement/",$row['regle_date_transmission_parquet'])){
2219 $valF['date_transmission_parquet']= $this->regle($row['regle_date_transmission_parquet'], 'regle_date_transmission_parquet');
2220 }
2221 if ($row['regle_donnees_techniques1'] !== '') {
2222 $valF_dt[$row['cible_regle_donnees_techniques1']] = $this->regle($row['regle_donnees_techniques1'], 'regle_donnees_techniques1');
2223 }
2224 if ($row['regle_donnees_techniques2'] !== '') {
2225 $valF_dt[$row['cible_regle_donnees_techniques2']] = $this->regle($row['regle_donnees_techniques2'], 'regle_donnees_techniques2');
2226 }
2227 if ($row['regle_donnees_techniques3'] !== '') {
2228 $valF_dt[$row['cible_regle_donnees_techniques3']] = $this->regle($row['regle_donnees_techniques3'], 'regle_donnees_techniques3');
2229 }
2230 if ($row['regle_donnees_techniques4'] !== '') {
2231 $valF_dt[$row['cible_regle_donnees_techniques4']] = $this->regle($row['regle_donnees_techniques4'], 'regle_donnees_techniques4');
2232 }
2233 if ($row['regle_donnees_techniques5'] !== '') {
2234 $valF_dt[$row['cible_regle_donnees_techniques5']] = $this->regle($row['regle_donnees_techniques5'], 'regle_donnees_techniques5');
2235 }
2236 if ($row['regle_dossier_instruction_type'] !== '') {
2237 $valF['dossier_instruction_type'] = $this->regle($row['regle_dossier_instruction_type'], 'regle_dossier_instruction_type');
2238 }
2239 }
2240 // Si des valeurs de données techniques ont été calculées alors on met à jour l'enregistrement
2241 if ($valF_dt != "") {
2242 $dt_id = $this->getDonneesTechniques();
2243 // On met à jour le dossier
2244 $cle = " donnees_techniques='".$dt_id."'";
2245 $res1 = $db->autoExecute(DB_PREFIXE.'donnees_techniques', $valF_dt, DB_AUTOQUERY_UPDATE, $cle);
2246 $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."donnees_techniques\", ".print_r($valF_dt, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
2247 if (database::isError($res1)) {
2248 die($res->getMessage());
2249 }
2250 // Affichage d'informations à l'utilisateur
2251 $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
2252 }
2253 // Si des valeurs ont été calculées alors on met à jour l'enregistrement
2254 if ($valF != "") {
2255 // On met à jour le dossier
2256 $cle = " dossier='".$this->valF['dossier']."'";
2257 $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
2258 $this->addToLog("triggermodifierapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
2259 if (database::isError($res1)) {
2260 die($res->getMessage());
2261 }
2262 // Affichage d'informations à l'utilisateur
2263 $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
2264 }
2265
2266 $restriction = $this->get_restriction($val['evenement']);
2267 $this->restriction_valid = $this->restrictionIsValid($restriction);
2268
2269 if($restriction == "" || $this->restriction_valid ){
2270 // Récupération de tous les paramètres de l'événement sélectionné
2271 $sql = "SELECT * FROM ".DB_PREFIXE."evenement
2272 WHERE evenement=".$this->valF['evenement'];
2273 $res = $db->query($sql);
2274 $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
2275 if (database::isError($res)) {
2276 die($res->getMessage());
2277 }
2278 $current_id = $this->getVal($this->clePrimaire);
2279 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
2280 // Si la date de retour signature est éditée on vérifie si il existe un événement automatique
2281 if ($this->getVal('date_retour_signature') == "" AND
2282 $this->valF['date_retour_signature'] != "" AND
2283 $row['evenement_retour_signature'] != "") {
2284 $new_instruction = $this->f->get_inst__om_dbform(array(
2285 "obj" => "instruction",
2286 "idx" => "]",
2287 ));
2288 // Création d'un tableau avec la liste des champs de l'instruction
2289 foreach($new_instruction->champs as $champ) {
2290 $valNewInstr[$champ] = "";
2291 }
2292 // Définition des valeurs de la nouvelle instruction
2293 $valNewInstr["evenement"] = $row['evenement_retour_signature'];
2294 $valNewInstr["destinataire"] = $this->valF['destinataire'];
2295 $valNewInstr["dossier"] = $this->valF['dossier'];
2296 $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_signature']);
2297 $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
2298 $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
2299 $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
2300 $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
2301 $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
2302 $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
2303 $new_instruction->setParameter("maj", 0);
2304 $new_instruction->class_actions[0]["identifier"] =
2305 "retour signature de l'instruction $current_id";
2306 $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
2307
2308 //Si une erreur s'est produite et qu'il s'agit d'un problème
2309 //de restriction
2310 if ($retour == false && !$new_instruction->restriction_valid){
2311 $error_message = $this->get_restriction_error_message($restriction);
2312 $this->f->displayMessage("error", $error_message);
2313 $this->addToLog("triggermodifierapres() : evenement retour ".
2314 "instruction ".$this->valF[$this->clePrimaire]." : ".
2315 $new_instruction->msg);
2316 }
2317 //Si une erreur s'est produite après le test de la restriction
2318 elseif ($retour == false && $new_instruction->restriction_valid){
2319 $this->correct = false ;
2320 $this->msg .= $new_instruction->msg;
2321 return false;
2322 }
2323 }
2324 // Si la date de retour AR est éditée on vérifie si il existe un événement automatique
2325 if ($this->getVal('date_retour_rar') == "" AND
2326 $this->valF['date_retour_rar'] != "") {
2327
2328 if($row['evenement_retour_ar'] != "") {
2329 $new_instruction = $this->f->get_inst__om_dbform(array(
2330 "obj" => "instruction",
2331 "idx" => "]",
2332 ));
2333 // Création d'un tableau avec la liste des champs de l'instruction
2334 foreach($new_instruction->champs as $champ) {
2335 $valNewInstr[$champ] = "";
2336 }
2337 // Définition des valeurs de la nouvelle instruction
2338 $valNewInstr["evenement"] = $row['evenement_retour_ar'];
2339 $valNewInstr["destinataire"] = $this->valF['destinataire'];
2340 $valNewInstr["dossier"] = $this->valF['dossier'];
2341 $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_rar']);
2342 $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
2343 $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
2344 $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
2345 $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
2346 $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
2347 $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
2348 $new_instruction->setParameter("maj", 0);
2349 $new_instruction->class_actions[0]["identifier"] =
2350 "retour RAR de l'instruction $current_id";
2351 $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
2352
2353 //Si une erreur s'est produite et qu'il s'agit d'un problème
2354 //de restriction
2355 if ($retour == false && !$new_instruction->restriction_valid) {
2356 $error_message = $this->get_restriction_error_message($restriction);
2357 $this->f->displayMessage("error", $error_message);
2358 $this->addToLog(
2359 "triggermodifierapres() : evenement retour instruction ".
2360 $this->valF[$this->clePrimaire]." : ".
2361 $new_instruction->msg
2362 );
2363 }
2364 //Si une erreur s'est produite après le test de la restriction
2365 elseif ($retour == false && $new_instruction->restriction_valid){
2366 $this->correct = false ;
2367 $this->msg .= $new_instruction->msg;
2368 return false;
2369 }
2370 }
2371 // Mise à jour du flag incomplet_notifie dans dossier si la
2372 // date limite d'instruction n'est pas dépassée
2373 if($row['type']=='incompletude' &&
2374 ($this->valF['archive_date_notification_delai'] >= $this->valF['date_retour_rar'] ||
2375 $this->valF['archive_date_notification_delai'] == "")) {
2376 $valFIncomp['incomplet_notifie'] = true;
2377 $cle = " dossier='".$val['dossier']."'";
2378 $resIncomp = $db->autoExecute(
2379 DB_PREFIXE.'dossier',
2380 $valFIncomp,
2381 DB_AUTOQUERY_UPDATE,
2382 $cle
2383 );
2384 $this->addToLog(
2385 "triggersupprimer(): db->autoexecute(\"".
2386 DB_PREFIXE."dossier\", ".print_r($valFIncomp, true).
2387 ", DB_AUTOQUERY_UPDATE, \"".$cle."\");",
2388 VERBOSE_MODE
2389 );
2390 if (database::isError($resIncomp)) {
2391 die($resIncomp->getMessage());
2392 }
2393 }
2394 }
2395 }
2396 }
2397
2398 // Mise à jour des données du dossier d'autorisation
2399 $da = $this->f->get_inst__om_dbform(array(
2400 "obj" => "dossier_autorisation",
2401 "idx" => $this->getNumDemandeAutorFromDossier($this->valF['dossier']),
2402 ));
2403 if($da->majDossierAutorisation() === false) {
2404 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
2405 $this->correct = false;
2406 return false;
2407 }
2408
2409 /**
2410 * Mise à jour de la date de dernière modification du dossier
2411 * d'instruction
2412 */
2413 $inst_di = $this->get_inst_dossier($this->getVal('dossier'));
2414 $inst_di->update_last_modification_date();
2415
2416 return $this->add_log_to_dossier($id, $val);
2417 }
2418
2419 function triggersupprimer($id, &$db = null, $val = array(), $DEBUG = null) {
2420 /**
2421 * L'objectif ici est de repositionner les valeurs récupérées en
2422 * archive dans le dossier d'instruction avant de supprimer l'événement
2423 * d'instruction
2424 */
2425
2426 // Mise à jour des 4 valeurs modifiées par l'action
2427 $valF['delai'] = $val['archive_delai'];
2428 $valF['accord_tacite'] = $val['archive_accord_tacite'];
2429 $valF['etat'] = $val['archive_etat'];
2430 if ($val['archive_avis'] != '') {
2431 $valF['avis_decision'] = $val['archive_avis'];
2432 } else {
2433 $valF['avis_decision'] = null;
2434 }
2435 // Mise à jour des dates avec la valeur présente dans le formulaire
2436 // de suppression. Si la valeur de la date est vide alors on fixe
2437 // à la valeur null
2438 if ($val['archive_date_complet'] != '') {
2439 $valF['date_complet'] = $val['archive_date_complet'];
2440 } else {
2441 $valF['date_complet'] = null;
2442 }
2443 if ($val['archive_date_dernier_depot'] != '') {
2444 $valF['date_dernier_depot'] = $val['archive_date_dernier_depot'];
2445 } else {
2446 $valF['date_dernier_depot'] = null;
2447 }
2448 if ($val['archive_date_rejet'] != '') {
2449 $valF['date_rejet'] = $val['archive_date_rejet'];
2450 } else {
2451 $valF['date_rejet'] = null;
2452 }
2453 if ($val['archive_date_limite'] != '') {
2454 $valF['date_limite'] = $val['archive_date_limite'];
2455 } else {
2456 $valF['date_limite'] = null;
2457 }
2458 if ($val['archive_date_notification_delai'] != '') {
2459 $valF['date_notification_delai'] = $val['archive_date_notification_delai'];
2460 } else {
2461 $valF['date_notification_delai'] = null;
2462 }
2463 if ($val['archive_date_decision'] != '') {
2464 $valF['date_decision'] = $val['archive_date_decision'];
2465 } else {
2466 $valF['date_decision'] = null;
2467 }
2468 if ($val['archive_date_validite'] != '') {
2469 $valF['date_validite'] = $val['archive_date_validite'];
2470 } else {
2471 $valF['date_validite'] = null;
2472 }
2473 if ($val['archive_date_achevement'] != '') {
2474 $valF['date_achevement'] = $val['archive_date_achevement'];
2475 } else {
2476 $valF['date_achevement'] = null;
2477 }
2478 if ($val['archive_date_chantier'] != '') {
2479 $valF['date_chantier'] = $val['archive_date_chantier'];
2480 } else {
2481 $valF['date_chantier'] = null;
2482 }
2483 if ($val['archive_date_conformite'] != '') {
2484 $valF['date_conformite'] = $val['archive_date_conformite'];
2485 } else {
2486 $valF['date_conformite'] = null;
2487 }
2488 if ($val['archive_incompletude'] != '') {
2489 $valF['incompletude'] = $val['archive_incompletude'];
2490 } else {
2491 $valF['incompletude'] = null;
2492 }
2493 if ($val['archive_incomplet_notifie'] != '') {
2494 $valF['incomplet_notifie'] = $val['archive_incomplet_notifie'];
2495 } else {
2496 $valF['incomplet_notifie'] = null;
2497 }
2498 if ($val['archive_evenement_suivant_tacite'] != '') {
2499 $valF['evenement_suivant_tacite'] = $val['archive_evenement_suivant_tacite'];
2500 } else {
2501 $valF['evenement_suivant_tacite'] = null;
2502 }
2503 if ($val['archive_evenement_suivant_tacite_incompletude'] != '') {
2504 $valF['evenement_suivant_tacite_incompletude'] = $val['archive_evenement_suivant_tacite_incompletude'];
2505 } else {
2506 $valF['evenement_suivant_tacite_incompletude'] = null;
2507 }
2508 if ($val['archive_etat_pendant_incompletude'] != '') {
2509 $valF['etat_pendant_incompletude'] = $val['archive_etat_pendant_incompletude'];
2510 } else {
2511 $valF['etat_pendant_incompletude'] = null;
2512 }
2513 if ($val['archive_date_limite_incompletude'] != '') {
2514 $valF['date_limite_incompletude'] = $val['archive_date_limite_incompletude'];
2515 } else {
2516 $valF['date_limite_incompletude'] = null;
2517 }
2518 if ($val['archive_delai_incompletude'] != '') {
2519 $valF['delai_incompletude'] = $val['archive_delai_incompletude'];
2520 } else {
2521 $valF['delai_incompletude'] = null;
2522 }
2523 if ($val['archive_autorite_competente'] != '') {
2524 $valF['autorite_competente'] = $val['archive_autorite_competente'];
2525 } else {
2526 $valF['autorite_competente'] = null;
2527 }
2528 $valF['date_cloture_instruction'] = null;
2529 if ($val['archive_date_cloture_instruction'] !== '') {
2530 $valF['date_cloture_instruction'] = $val['archive_date_cloture_instruction'];
2531 }
2532 // Dates concernant les dossiers contentieux
2533 // Date de première visite
2534 $valF['date_premiere_visite'] = null;
2535 if ($val['archive_date_premiere_visite'] !== '') {
2536 $valF['date_premiere_visite'] = $val['archive_date_premiere_visite'];
2537 }
2538 // Date de dernière visite
2539 $valF['date_derniere_visite'] = null;
2540 if ($val['archive_date_derniere_visite'] !== '') {
2541 $valF['date_derniere_visite'] = $val['archive_date_derniere_visite'];
2542 }
2543 // Date contradictoire
2544 $valF['date_contradictoire'] = null;
2545 if ($val['archive_date_contradictoire'] !== '') {
2546 $valF['date_contradictoire'] = $val['archive_date_contradictoire'];
2547 }
2548 // Date de retour contradictoire
2549 $valF['date_retour_contradictoire'] = null;
2550 if ($val['archive_date_retour_contradictoire'] !== '') {
2551 $valF['date_retour_contradictoire'] = $val['archive_date_retour_contradictoire'];
2552 }
2553 // Date de l'AIT
2554 $valF['date_ait'] = null;
2555 if ($val['archive_date_ait'] !== '') {
2556 $valF['date_ait'] = $val['archive_date_ait'];
2557 }
2558 // Date de transmission au parquet
2559 $valF['date_transmission_parquet'] = null;
2560 if ($val['archive_date_transmission_parquet'] !== '') {
2561 $valF['date_transmission_parquet'] = $val['archive_date_transmission_parquet'];
2562 }
2563 // Type du dossier d'instruction
2564 if ($val['archive_dossier_instruction_type'] !== '' && $val['archive_dossier_instruction_type'] !== null) {
2565 $valF['dossier_instruction_type'] = $val['archive_dossier_instruction_type'];
2566 }
2567
2568 // On met à jour le dossier
2569 $cle = " dossier='".$val['dossier']."'";
2570 $res = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
2571 $this->addToLog("triggersupprimer(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
2572 if (database::isError($res)) {
2573 die($res->getMessage());
2574 }
2575 // Affichage d'informations à l'utilisateur
2576 $this->addToMessage(_("Suppression de l'instruction")." [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
2577
2578 // Mise à jour de la demande si un récépissé d'instruction correspond à l'instruction à supprimer
2579 }
2580
2581 function triggersupprimerapres($id, &$db = null, $val = array(), $DEBUG = null) {
2582 // Mise à jour des données du dossier d'autorisation
2583 $da = $this->f->get_inst__om_dbform(array(
2584 "obj" => "dossier_autorisation",
2585 "idx" => $this->getNumDemandeAutorFromDossier($val["dossier"]),
2586 ));
2587 if($da->majDossierAutorisation() === false) {
2588 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
2589 $this->correct = false;
2590 return false;
2591 }
2592 $val['evenement'] = $this->getVal('evenement');
2593
2594 /**
2595 * Mise à jour de la date de dernière modification du dossier
2596 * d'instruction
2597 */
2598 $inst_di = $this->get_inst_dossier($this->getVal('dossier'));
2599 $inst_di->update_last_modification_date();
2600
2601 //
2602 return $this->add_log_to_dossier($id, $val);
2603 }
2604
2605 /**
2606 * Permet de composer un message d'erreur sur restriction non valide en
2607 * fonction du contexte.
2608 *
2609 * @param string $restriction formule de la restriction
2610 *
2611 * @return string message d'erreur
2612 */
2613 function get_restriction_error_message($restriction) {
2614 // Affichage du message si la restriction s'applique
2615 // Contexte du suivi des dates (message simple)
2616 $message_restrict = _("Probleme de dates :");
2617 // Split restriction
2618 $champs_restrict = preg_split(
2619 '/(\W+)/',
2620 $restriction,
2621 null,
2622 PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE
2623 );
2624 $formated_restrict = "";
2625 // Ajout des chaînes à traduire
2626 foreach ($champs_restrict as $value) {
2627 $formated_restrict .= _($value)." ";
2628 }
2629 $formated_restrict = substr($formated_restrict, 0, -1);
2630 // Message d'erreur dans le contexte du suivi des dates
2631 if($this->getParameter("maj") == 170) {
2632 $message_restrict .= " "._("contactez l'instructeur du dossier");
2633 $message_restrict .= "<br/>(".$formated_restrict.")";
2634 } else {
2635 // Affichage du message si la restriction s'applique
2636 // Contexte instruction
2637 $message_restrict .= "<br/>".$formated_restrict;
2638 }
2639
2640 return $message_restrict;
2641 }
2642
2643 /**
2644 * Vérifie la restriction sur l'événement.
2645 *
2646 * @param array $val valeurs du formulaire
2647 * @param database $db handler database
2648 * @param boolean $DEBUG NA
2649 *
2650 * @return [type] [description]
2651 */
2652 function verifier($val = array(), &$db = null, $DEBUG = null) {
2653 parent::verifier($val, $db, $DEBUG);
2654
2655 if ( isset($val['evenement']) && is_numeric($val['evenement'])){
2656 $restriction = $this->get_restriction($val['evenement']);
2657
2658 //Test qu'une restriction est présente
2659 if ($restriction != "" ){
2660
2661 //Test si la restriction est valide
2662 $this->restriction_valid = $this->restrictionIsValid($restriction);
2663 if ( !$this->restriction_valid ){
2664
2665 // Affichage du message si la restriction s'applique
2666 $this->addToMessage(
2667 $this->get_restriction_error_message($restriction)
2668 );
2669 $this->correct=false;
2670 return false;
2671 }
2672
2673 // Liste des opérateurs possible
2674 $operateurs = array(">=", "<=", "+", "-", "&&", "||", "==", "!=");
2675 // Supprime tous les espaces de la chaîne de caractère
2676 $restriction = str_replace(' ', '', $restriction);
2677
2678 // Met des espace avant et après les opérateurs puis transforme la
2679 // chaine en un tableau
2680 $tabRestriction = str_replace($operateurs, " ", $restriction);
2681 // Tableau des champ
2682 $tabRestriction = explode(" ", $tabRestriction);
2683 // Supprime les numériques du tableau
2684 foreach ($tabRestriction as $key => $value) {
2685 if (is_numeric($value)) {
2686 unset($tabRestriction[$key]);
2687 }
2688 }
2689
2690 // Vérifie les champs utilisés pour la restriction
2691 $check_field_exist = $this->f->check_field_exist($tabRestriction, 'instruction');
2692 if ($check_field_exist !== true) {
2693
2694 // Liste des champs en erreur
2695 $string_error_fields = implode(", ", $check_field_exist);
2696
2697 // Message d'erreur
2698 $error_message = _("Le champ %s n'est pas utilisable pour le champ %s");
2699 if (count($check_field_exist) > 1) {
2700 $error_message = _("Les champs %s ne sont pas utilisable pour le champ %s");
2701 }
2702
2703 // Affiche l'erreur
2704 $this->correct=false;
2705 $this->addToMessage(sprintf($error_message, $string_error_fields, _("restriction")));
2706 $this->addToMessage(_("Veuillez contacter votre administrateur."));
2707 }
2708 }
2709
2710 }
2711 if(!$this->updateDate("date_envoi_signature")) {
2712 return false;
2713 }
2714 if(!$this->updateDate("date_retour_signature")) {
2715 return false;
2716 }
2717 if(!$this->updateDate("date_envoi_rar")) {
2718 return false;
2719 }
2720 if(!$this->updateDate("date_retour_rar")) {
2721 return false;
2722 }
2723 if(!$this->updateDate("date_envoi_controle_legalite")) {
2724 return false;
2725 }
2726 if(!$this->updateDate("date_retour_controle_legalite")) {
2727 return false;
2728 }
2729
2730 }
2731
2732 /**
2733 * Finalisation des documents.
2734 * @param string $champ champ du fichier à finaliser
2735 * @param booleen $status permet de définir si on finalise ou définalise
2736 * @param string $sousform permet de savoir si se trouve dans un sousformulaire (passé au javascript)
2737 */
2738 function manage_finalizing($mode = null, $val = array()) {
2739 //
2740 $this->begin_treatment(__METHOD__);
2741
2742 //
2743 $id_inst = $this->getVal($this->clePrimaire);
2744
2745 //
2746 $admin_msg_error = _("Veuillez contacter votre administrateur.");
2747 $file_msg_error = _("Erreur de traitement de fichier.")
2748 ." ".$admin_msg_error;
2749 $bdd_msg_error = _("Erreur de base de données.")
2750 ." ".$admin_msg_error;
2751 $log_msg_error = "Finalisation non enregistrée - id instruction = %s - uid fichier = %s";
2752
2753 // Si on finalise le document
2754 if ($mode == "finalize"){
2755 //
2756 $etat = _('finalisation');
2757
2758 // Récupère la collectivite du dossier d'instruction
2759 $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
2760
2761 //
2762 $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
2763
2764 //
2765 $params = array(
2766 "specific" => array(),
2767 );
2768 // Si la rédaction libre est activée sur l'instruction
2769 if ($this->getVal("flag_edition_integrale") == 't') {
2770 $params["specific"]["corps"] = array(
2771 "mode" => "set",
2772 "value" => $this->getVal("corps_om_htmletatex"),
2773 );
2774 $params["specific"]["titre"] = array(
2775 "mode" => "set",
2776 "value" => $this->getVal("titre_om_htmletat"),
2777 );
2778 }
2779 // Génération du PDF
2780 $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'), $collectivite, null, $params);
2781 $pdf_output = $result['pdf_output'];
2782
2783 //Métadonnées du document
2784 $metadata = array(
2785 'filename' => 'instruction_'.$id_inst.'.pdf',
2786 'mimetype' => 'application/pdf',
2787 'size' => strlen($pdf_output)
2788 );
2789
2790 // Récupération des métadonnées calculées après validation
2791 $spe_metadata = $this->getMetadata("om_fichier_instruction");
2792
2793 //On vérifie si l'instruction à finaliser a un événement de type arrete
2794 $sql = "SELECT type
2795 FROM ".DB_PREFIXE."evenement
2796 WHERE evenement = ".$this->getVal("evenement");
2797 $typeEvenement = $this->db->getOne($sql);
2798 $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2799 if ($this->f->isDatabaseError($typeEvenement, true) === true) {
2800 $this->correct = false;
2801 $this->addToMessage($bdd_msg_error);
2802 return $this->end_treatment(__METHOD__, false);
2803 }
2804
2805 //Initialisation de la variable
2806 $arrete_metadata = array();
2807 // Si l'événement est de type arrete, on ajoute les métadonnées spécifiques
2808 if ( $typeEvenement === 'arrete' ){
2809 $arrete_metadata = $this->getMetadata("arrete");
2810 }
2811
2812 $metadata = array_merge($metadata, $spe_metadata, $arrete_metadata);
2813
2814 // Si le document a déjà été finalisé on le met à jour
2815 // en conservant son UID
2816 if ($this->getVal("om_fichier_instruction") != ''){
2817 $uid = $this->f->storage->update(
2818 $this->getVal("om_fichier_instruction"), $pdf_output, $metadata);
2819 }
2820 // Sinon on crée un nouveau document et dont on récupère l'UID
2821 else {
2822 $uid = $this->f->storage->create($pdf_output, $metadata);
2823 }
2824 }
2825
2826 // Si on définalise le document
2827 if ($mode == "unfinalize") {
2828 //
2829 $etat = _('définalisation');
2830 // Récupération de l'uid du document finalisé
2831 $uid = $this->getVal("om_fichier_instruction");
2832 }
2833
2834 // Si on définalise l'UID doit être défini
2835 // Si on finalise la création/modification du fichier doit avoir réussi
2836 if ($uid == '' || $uid == 'OP_FAILURE' ) {
2837 $this->correct = false;
2838 $this->addToMessage($file_msg_error);
2839 $this->addToLog(sprintf($log_msg_error, $id_inst, $uid));
2840 return $this->end_treatment(__METHOD__, false);
2841 }
2842
2843 //
2844 foreach ($this->champs as $key => $champ) {
2845 //
2846 $val[$champ] = $this->val[$key];
2847 }
2848
2849 //
2850 $val['date_evenement'] = $this->dateDBToForm($val['date_evenement']);
2851 $val['archive_date_complet'] = $this->dateDBToForm($val['archive_date_complet']);
2852 $val['archive_date_rejet'] = $this->dateDBToForm($val['archive_date_rejet']);
2853 $val['archive_date_limite'] = $this->dateDBToForm($val['archive_date_limite']);
2854 $val['archive_date_notification_delai'] = $this->dateDBToForm($val['archive_date_notification_delai']);
2855 $val['archive_date_decision'] = $this->dateDBToForm($val['archive_date_decision']);
2856 $val['archive_date_validite'] = $this->dateDBToForm($val['archive_date_validite']);
2857 $val['archive_date_achevement'] = $this->dateDBToForm($val['archive_date_achevement']);
2858 $val['archive_date_chantier'] = $this->dateDBToForm($val['archive_date_chantier']);
2859 $val['archive_date_conformite'] = $this->dateDBToForm($val['archive_date_conformite']);
2860 $val['archive_date_dernier_depot'] = $this->dateDBToForm($val['archive_date_dernier_depot']);
2861 $val['archive_date_limite_incompletude'] = $this->dateDBToForm($val['archive_date_limite_incompletude']);
2862 $val['date_finalisation_courrier'] = $this->dateDBToForm($val['date_finalisation_courrier']);
2863 $val['date_envoi_signature'] = $this->dateDBToForm($val['date_envoi_signature']);
2864 $val['date_retour_signature'] = $this->dateDBToForm($val['date_retour_signature']);
2865 $val['date_envoi_rar'] = $this->dateDBToForm($val['date_envoi_rar']);
2866 $val['date_retour_rar'] = $this->dateDBToForm($val['date_retour_rar']);
2867 $val['date_envoi_controle_legalite'] = $this->dateDBToForm($val['date_envoi_controle_legalite']);
2868 $val['date_retour_controle_legalite'] = $this->dateDBToForm($val['date_retour_controle_legalite']);
2869 $val['archive_date_cloture_instruction'] = $this->dateDBToForm($val['archive_date_cloture_instruction']);
2870 $val['archive_date_premiere_visite'] = $this->dateDBToForm($val['archive_date_premiere_visite']);
2871 $val['archive_date_derniere_visite'] = $this->dateDBToForm($val['archive_date_derniere_visite']);
2872 $val['archive_date_contradictoire'] = $this->dateDBToForm($val['archive_date_contradictoire']);
2873 $val['archive_date_retour_contradictoire'] = $this->dateDBToForm($val['archive_date_retour_contradictoire']);
2874 $val['archive_date_ait'] = $this->dateDBToForm($val['archive_date_ait']);
2875 $val['archive_date_transmission_parquet'] = $this->dateDBToForm($val['archive_date_transmission_parquet']);
2876 $this->setvalF($val);
2877
2878 // Verification de la validite des donnees
2879 $this->verifier($this->val, $this->db, DEBUG);
2880 // Si les verifications precedentes sont correctes, on procede a
2881 // la modification, sinon on ne fait rien et on retourne une erreur
2882 if ($this->correct === true) {
2883 //
2884 $valF = array(
2885 "om_fichier_instruction" => $uid,
2886 "date_finalisation_courrier" => date('Y-m-d')
2887 );
2888 //
2889 if($mode=="finalize") {
2890 // état finalisé vrai
2891 $valF["om_final_instruction"] = true;
2892 // ajout log utilisateur
2893 $login = $_SESSION['login'];
2894 $nom = "";
2895 $this->f->getUserInfos();
2896 if (isset($this->f->om_utilisateur["nom"])
2897 && !empty($this->f->om_utilisateur["nom"])) {
2898 $nom = $this->f->om_utilisateur["nom"];
2899 }
2900 $valF["om_final_instruction_utilisateur"] = $_SESSION['login'];
2901 if ($nom != "") {
2902 $valF["om_final_instruction_utilisateur"] .= " (".$nom.")";
2903 }
2904 } else {
2905 // état finalisé faux
2906 $valF["om_final_instruction"] = false;
2907 // suppression log utilisateur
2908 $valF["om_final_instruction_utilisateur"] = '';
2909 }
2910
2911 // Execution de la requête de modification des donnees de l'attribut
2912 // valF de l'objet dans l'attribut table de l'objet
2913 $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF,
2914 DB_AUTOQUERY_UPDATE, $this->getCle($id_inst));
2915 $this->addToLog(__METHOD__."() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id_inst)."\")", VERBOSE_MODE);
2916 //
2917 if ($this->f->isDatabaseError($res, true) === true) {
2918 $this->correct = false;
2919 $this->addToMessage($bdd_msg_error);
2920 return $this->end_treatment(__METHOD__, false);
2921 }
2922
2923 //
2924 $this->addToMessage(sprintf(_("La %s du document s'est effectuee avec succes."), $etat));
2925 //
2926 if ($this->add_log_to_dossier($id_inst, $val) === false) {
2927 return $this->end_treatment(__METHOD__, false);
2928 }
2929 //
2930 return $this->end_treatment(__METHOD__, true);
2931 }
2932 // L'appel de verifier() a déjà positionné correct à false
2933 // et défini un message d'erreur.
2934 $this->addToLog(sprintf($log_msg_error, $id_inst, $uid));
2935 return $this->end_treatment(__METHOD__, false);
2936 }
2937
2938 /**
2939 * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
2940 * @return string numéro de dossier d'instruction
2941 */
2942 protected function getDossier() {
2943 if(empty($this->specificMetadata)) {
2944 $this->getSpecificMetadata();
2945 }
2946 return $this->specificMetadata->dossier;
2947 }
2948 /**
2949 * Récupération la version du dossier d'instruction à ajouter aux métadonnées
2950 * @return int Version
2951 */
2952 protected function getDossierVersion() {
2953 if(empty($this->specificMetadata)) {
2954 $this->getSpecificMetadata();
2955 }
2956 return $this->specificMetadata->version;
2957 }
2958 /**
2959 * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
2960 * @return string numéro de dossier d'autorisation
2961 */
2962 protected function getNumDemandeAutor() {
2963 if(empty($this->specificMetadata)) {
2964 $this->getSpecificMetadata();
2965 }
2966 return $this->specificMetadata->dossier_autorisation;
2967 }
2968 /**
2969 * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
2970 * @return date de la demande initiale
2971 */
2972 protected function getAnneemoisDemandeAutor() {
2973 if(empty($this->specificMetadata)) {
2974 $this->getSpecificMetadata();
2975 }
2976 return $this->specificMetadata->date_demande_initiale;
2977 }
2978 /**
2979 * Récupération du type de dossier d'instruction à ajouter aux métadonnées
2980 * @return string type du dossier d'instruction
2981 */
2982 protected function getTypeInstruction() {
2983 if(empty($this->specificMetadata)) {
2984 $this->getSpecificMetadata();
2985 }
2986 return $this->specificMetadata->dossier_instruction_type;
2987 }
2988 /**
2989 * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
2990 * @return string avis
2991 */
2992 protected function getStatutAutorisation() {
2993 if(empty($this->specificMetadata)) {
2994 $this->getSpecificMetadata();
2995 }
2996 return $this->specificMetadata->statut;
2997 }
2998 /**
2999 * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
3000 * @return string type du dossier d'autorisation
3001 */
3002 protected function getTypeAutorisation() {
3003 if(empty($this->specificMetadata)) {
3004 $this->getSpecificMetadata();
3005 }
3006 return $this->specificMetadata->dossier_autorisation_type;
3007 }
3008 /**
3009 * Récupération de la date d'ajout de document à ajouter aux métadonnées
3010 * @return date de l'évènement
3011 */
3012 protected function getDateEvenementDocument() {
3013 return date("Y-m-d");
3014 }
3015 /**
3016 * Récupération du groupe d'instruction à ajouter aux métadonnées
3017 * @return string Groupe d'instruction
3018 */
3019 protected function getGroupeInstruction() {
3020 if(empty($this->specificMetadata)) {
3021 $this->getSpecificMetadata();
3022 }
3023 return $this->specificMetadata->groupe_instruction;
3024 }
3025 /**
3026 * Récupération du libellé du type du document à ajouter aux métadonnées
3027 * @return string Groupe d'instruction
3028 */
3029 protected function getTitle() {
3030
3031 // Récupère le champ événement
3032 if (isset($this->valF["evenement"]) AND $this->valF["evenement"] != "") {
3033 $evenement = $this->valF["evenement"];
3034 } else {
3035 $evenement = $this->getVal("evenement");
3036 }
3037
3038 // Requête sql
3039 $sql = "SELECT libelle FROM ".DB_PREFIXE."evenement
3040 WHERE evenement=".$evenement;
3041 $evenement_libelle = $this->db->getOne($sql);
3042 $this->addToLog("getTitle(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
3043 if (database::isError($evenement_libelle)) {
3044 die();
3045 }
3046
3047 // Retourne le libelle de l'événement
3048 return $evenement_libelle;
3049 }
3050
3051
3052 /**
3053 * Récupération du champ ERP du dossier d'instruction.
3054 *
3055 * @return boolean
3056 */
3057 public function get_concerne_erp() {
3058 //
3059 if(empty($this->specificMetadata)) {
3060 $this->getSpecificMetadata();
3061 }
3062 //
3063 return $this->specificMetadata->erp;
3064 }
3065
3066
3067 /**
3068 * Cette méthode permet de stocker en attribut toutes les métadonnées
3069 * nécessaire à l'ajout d'un document.
3070 */
3071 public function getSpecificMetadata() {
3072 if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
3073 $dossier = $this->valF["dossier"];
3074 } else {
3075 $dossier = $this->getVal("dossier");
3076 }
3077 //Requête pour récupérer les informations essentiels sur le dossier d'instruction
3078 $sql = "SELECT dossier.dossier as dossier,
3079 dossier_autorisation.dossier_autorisation as dossier_autorisation,
3080 to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
3081 dossier_instruction_type.code as dossier_instruction_type,
3082 etat_dossier_autorisation.libelle as statut,
3083 dossier_autorisation_type.code as dossier_autorisation_type,
3084 groupe.code as groupe_instruction,
3085 CASE WHEN dossier.erp IS TRUE
3086 THEN 'true'
3087 ELSE 'false'
3088 END as erp
3089 FROM ".DB_PREFIXE."dossier
3090 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
3091 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
3092 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
3093 ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
3094 LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
3095 ON dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
3096 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
3097 ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
3098 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
3099 ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
3100 LEFT JOIN ".DB_PREFIXE."groupe
3101 ON dossier_autorisation_type.groupe = groupe.groupe
3102 WHERE dossier.dossier = '".$dossier."'";
3103 $res = $this->db->query($sql);
3104 $this->f->addToLog("getSpecificMetadata() : db->query(".$sql.")", VERBOSE_MODE);
3105 if ( database::isError($res)){
3106 die();
3107 }
3108
3109 //Le résultat est récupéré dans un objet
3110 $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
3111
3112 //Si il y a un résultat
3113 if ($row !== null) {
3114
3115 // Instrance de la classe dossier
3116 $inst_dossier = $this->get_inst_dossier($dossier);
3117
3118 // Insère l'attribut version à l'objet
3119 $row->version = $inst_dossier->get_dossier_instruction_version();
3120
3121 //Alors on créé l'objet dossier_instruction
3122 $this->specificMetadata = $row;
3123
3124 }
3125 }
3126
3127 /**
3128 * Retourne le statut du dossier d'instruction
3129 * @param string $idx Identifiant du dossier d'instruction
3130 * @return string Le statut du dossier d'instruction
3131 */
3132 function getStatutAutorisationDossier($idx){
3133
3134 $statut = '';
3135
3136 //Si l'identifiant du dossier d'instruction fourni est correct
3137 if ( $idx != '' ){
3138
3139 //On récupère le statut de l'état du dossier à partir de l'identifiant du
3140 //dossier
3141 $sql = "SELECT etat.statut
3142 FROM ".DB_PREFIXE."dossier
3143 LEFT JOIN
3144 ".DB_PREFIXE."etat
3145 ON
3146 dossier.etat = etat.etat
3147 WHERE dossier ='".$idx."'";
3148 $statut = $this->db->getOne($sql);
3149 $this->f->addToLog("getStatutAutorisationDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
3150 if ( database::isError($statut)){
3151 die();
3152 }
3153 }
3154 return $statut;
3155 }
3156
3157 /**
3158 * Récupère les données du dossier
3159 * @return array
3160 */
3161 function get_dossier_actual() {
3162
3163 // Initialisation de la valeur de retour
3164 $return = array();
3165
3166 // Récupération de toutes les valeurs du dossier d'instruction en cours
3167 $sql = "SELECT * FROM ".DB_PREFIXE."dossier
3168 WHERE dossier='".$this->valF['dossier']."'";
3169 $res = $this->db->query($sql);
3170 $this->addToLog("get_dossier_actual(): db->query(\"".$sql."\");", VERBOSE_MODE);
3171 $this->f->isDatabaseError($res);
3172
3173 //
3174 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
3175
3176 // Récupération de la valeur actuelle du délai, de l'accord tacite,
3177 // de l'état et de l'avis du dossier d'instruction
3178 $return['archive_delai'] = $row['delai'];
3179 $return['archive_accord_tacite'] = $row['accord_tacite'];
3180 $return['archive_etat'] = $row['etat'];
3181 $return['archive_avis'] = $row['avis_decision'];
3182 // Récupération de la valeur actuelle des dates du dossier
3183 // d'instruction
3184 $return['archive_date_complet'] = $row['date_complet'];
3185 $return['archive_date_dernier_depot'] = $row['date_dernier_depot'];
3186 $return['archive_date_rejet'] = $row['date_rejet'];
3187 $return['archive_date_limite'] = $row['date_limite'];
3188 $return['archive_date_notification_delai'] = $row['date_notification_delai'];
3189 $return['archive_date_decision'] = $row['date_decision'];
3190 $return['archive_date_validite'] = $row['date_validite'];
3191 $return['archive_date_achevement'] = $row['date_achevement'];
3192 $return['archive_date_chantier'] = $row['date_chantier'];
3193 $return['archive_date_conformite'] = $row['date_conformite'];
3194 $return['archive_incompletude'] = $row['incompletude'];
3195 $return['archive_incomplet_notifie'] = $row['incomplet_notifie'];
3196 $return['archive_evenement_suivant_tacite'] = $row['evenement_suivant_tacite'];
3197 $return['archive_evenement_suivant_tacite_incompletude'] = $row['evenement_suivant_tacite_incompletude'];
3198 $return['archive_etat_pendant_incompletude'] = $row['etat_pendant_incompletude'];
3199 $return['archive_date_limite_incompletude'] = $row['date_limite_incompletude'];
3200 $return['archive_delai_incompletude'] = $row['delai_incompletude'];
3201 $return['archive_autorite_competente'] = $row['autorite_competente'];
3202 $return['archive_dossier_instruction_type'] = $row['dossier_instruction_type'];
3203 $return['duree_validite'] = $row['duree_validite'];
3204 $return['date_depot'] = $row['date_depot'];
3205 $return['archive_date_cloture_instruction'] = $row['date_cloture_instruction'];
3206 $return['archive_date_premiere_visite'] = $row['date_premiere_visite'];
3207 $return['archive_date_derniere_visite'] = $row['date_derniere_visite'];
3208 $return['archive_date_contradictoire'] = $row['date_contradictoire'];
3209 $return['archive_date_retour_contradictoire'] = $row['date_retour_contradictoire'];
3210 $return['archive_date_ait'] = $row['date_ait'];
3211 $return['archive_date_transmission_parquet'] = $row['date_transmission_parquet'];
3212 }
3213
3214 // Retour de la fonction
3215 return $return;
3216
3217 }
3218
3219 /**
3220 * Permet de vérifier qu'un événement est verrouillable
3221 * @param integer $idx Identifiant de l'instruction
3222 * @return boolean
3223 */
3224 function checkEvenementNonVerrouillable($idx) {
3225
3226 // Initialisation du résultat
3227 $non_verrouillable = false;
3228
3229 // Si la condition n'est pas vide
3230 if ($idx != "") {
3231
3232 // Requête SQL
3233 $sql = "SELECT evenement.non_verrouillable
3234 FROM ".DB_PREFIXE."evenement
3235 LEFT JOIN ".DB_PREFIXE."instruction
3236 ON instruction.evenement = evenement.evenement
3237 WHERE instruction.instruction = $idx";
3238 $this->f->addToLog("checkEvenementNonVerrouillable() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
3239 $res = $this->db->getOne($sql);
3240 $this->f->isDatabaseError($res);
3241
3242 // Si le retour de la requête est true
3243 if ($res == 't') {
3244 //
3245 $non_verrouillable = true;
3246 }
3247 }
3248
3249 // Retourne résultat
3250 return $non_verrouillable;
3251 }
3252
3253 /**
3254 * Mise à jour des champs archive_*
3255 * @param mixed $row La ligne de données
3256 */
3257 public function updateArchiveData($row){
3258
3259 // Récupération de la valeur actuelle du délai, de l'accord tacite,
3260 // de l'état et de l'avis du dossier d'instruction
3261 $this->valF['archive_delai']=$row['delai'];
3262 $this->valF['archive_accord_tacite']=$row['accord_tacite'];
3263 $this->valF['archive_etat']=$row['etat'];
3264 $this->valF['archive_avis']=$row['avis_decision'];
3265 // Récupération de la valeur actuelle des 9 dates du dossier
3266 // d'instruction
3267 if ($row['date_complet'] != '') {
3268 $this->valF['archive_date_complet']=$row['date_complet'];
3269 }
3270 if ($row['date_dernier_depot'] != '') {
3271 $this->valF['archive_date_dernier_depot']=$row['date_dernier_depot'];
3272 }
3273 if ($row['date_rejet'] != '') {
3274 $this->valF['archive_date_rejet']= $row['date_rejet'];
3275 }
3276 if ($row['date_limite'] != '') {
3277 $this->valF['archive_date_limite']= $row['date_limite'];
3278 }
3279 if ($row['date_notification_delai'] != '') {
3280 $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];
3281 }
3282 if ($row['date_decision'] != '') {
3283 $this->valF['archive_date_decision']= $row['date_decision'];
3284 }
3285 if ($row['date_validite'] != '') {
3286 $this->valF['archive_date_validite']= $row['date_validite'];
3287 }
3288 if ($row['date_achevement'] != '') {
3289 $this->valF['archive_date_achevement']= $row['date_achevement'];
3290 }
3291 if ($row['date_chantier'] != '') {
3292 $this->valF['archive_date_chantier']= $row['date_chantier'];
3293 }
3294 if ($row['date_conformite'] != '') {
3295 $this->valF['archive_date_conformite']= $row['date_conformite'];
3296 }
3297 if ($row['incompletude'] != '') {
3298 $this->valF['archive_incompletude']= $row['incompletude'];
3299 }
3300 if ($row['incomplet_notifie'] != '') {
3301 $this->valF['archive_incomplet_notifie']= $row['incomplet_notifie'];
3302 }
3303 if ($row['evenement_suivant_tacite'] != '') {
3304 $this->valF['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];
3305 }
3306 if ($row['evenement_suivant_tacite_incompletude'] != '') {
3307 $this->valF['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];
3308 }
3309 if ($row['etat_pendant_incompletude'] != '') {
3310 $this->valF['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];
3311 }
3312 if ($row['date_limite_incompletude'] != '') {
3313 $this->valF['archive_date_limite_incompletude']= $row['date_limite_incompletude'];
3314 }
3315 if ($row['delai_incompletude'] != '') {
3316 $this->valF['archive_delai_incompletude']= $row['delai_incompletude'];
3317 }
3318 if ($row['autorite_competente'] != '') {
3319 $this->valF['archive_autorite_competente']= $row['autorite_competente'];
3320 }
3321 if ($row['duree_validite'] != '') {
3322 $this->valF['duree_validite']= $row['duree_validite'];
3323 }
3324 if ($row['date_depot'] != '') {
3325 $this->valF['date_depot']= $row['date_depot'];
3326 }
3327 // Dates concernant les dossiers contentieux
3328 if ($row['date_cloture_instruction'] != '') {
3329 $this->valF['archive_date_cloture_instruction']= $row['date_cloture_instruction'];
3330 }
3331 if ($row['date_premiere_visite'] != '') {
3332 $this->valF['archive_date_premiere_visite']= $row['date_premiere_visite'];
3333 }
3334 if ($row['date_derniere_visite'] != '') {
3335 $this->valF['archive_date_derniere_visite']= $row['date_derniere_visite'];
3336 }
3337 if ($row['date_contradictoire'] != '') {
3338 $this->valF['archive_date_contradictoire']= $row['date_contradictoire'];
3339 }
3340 if ($row['date_retour_contradictoire'] != '') {
3341 $this->valF['archive_date_retour_contradictoire']= $row['date_retour_contradictoire'];
3342 }
3343 if ($row['date_ait'] != '') {
3344 $this->valF['archive_date_ait']= $row['date_ait'];
3345 }
3346 if ($row['date_transmission_parquet'] != '') {
3347 $this->valF['archive_date_transmission_parquet']= $row['date_transmission_parquet'];
3348 }
3349 if ($row['dossier_instruction_type'] != '') {
3350 $this->valF['archive_dossier_instruction_type']= $row['dossier_instruction_type'];
3351 }
3352 }
3353
3354 // {{{
3355 // Méthodes de récupération des métadonnées arrêté
3356 /**
3357 * @return string Retourne le numéro d'arrêté
3358 */
3359 function getNumArrete() {
3360 return $this->getVal("numero_arrete");
3361 }
3362 /**
3363 * @return chaîne vide
3364 */
3365 function getReglementaireArrete() {
3366 return 'true';
3367 }
3368 /**
3369 * @return boolean de notification au pétitionnaire
3370 */
3371 function getNotificationArrete() {
3372 return 'true';
3373 }
3374 /**
3375 * @return date de notification au pétitionnaire
3376 */
3377 function getDateNotificationArrete() {
3378 if (empty($this->metadonneesArrete)) {
3379 $this->getArreteMetadata();
3380 }
3381 return $this->metadonneesArrete["datenotification"];
3382 }
3383 /**
3384 * @return boolean check si le document est passé au contrôle de légalité
3385 */
3386 function getControleLegalite() {
3387 return 'true';
3388 }
3389 /**
3390 * @return date de signature de l'arrêté
3391 */
3392 function getDateSignature() {
3393 if (empty($this->metadonneesArrete)) {
3394 $this->getArreteMetadata();
3395 }
3396 return $this->metadonneesArrete["datesignaturearrete"];
3397 }
3398 /**
3399 * @return string nom du signataire
3400 */
3401 function getNomSignataire() {
3402 if (empty($this->metadonneesArrete)) {
3403 $this->getArreteMetadata();
3404 }
3405 return $this->metadonneesArrete["nomsignataire"];
3406 }
3407 /**
3408 * @return string qualité du signataire
3409 */
3410 function getQualiteSignataire() {
3411 if (empty($this->metadonneesArrete)) {
3412 $this->getArreteMetadata();
3413 }
3414 return $this->metadonneesArrete["qualitesignataire"];
3415 }
3416 /**
3417 * @return string numéro du terrain
3418 */
3419 function getAp_numRue() {
3420 if (empty($this->metadonneesArrete)) {
3421 $this->getArreteMetadata();
3422 }
3423 return $this->metadonneesArrete["ap_numrue"];
3424 }
3425 /**
3426 * @return string nom de la rue du terrain
3427 */
3428 function getAp_nomDeLaVoie() {
3429 if (empty($this->metadonneesArrete)) {
3430 $this->getArreteMetadata();
3431 }
3432 return $this->metadonneesArrete["ap_nomdelavoie"];
3433 }
3434 /**
3435 * @return string code postal du terrain
3436 */
3437 function getAp_codePostal() {
3438 if (empty($this->metadonneesArrete)) {
3439 $this->getArreteMetadata();
3440 }
3441 return $this->metadonneesArrete["ap_codepostal"];
3442 }
3443 /**
3444 * @return string ville du terrain
3445 */
3446 function getAp_ville() {
3447 if (empty($this->metadonneesArrete)) {
3448 $this->getArreteMetadata();
3449 }
3450 return $this->metadonneesArrete["ap_ville"];
3451 }
3452 /**
3453 * @return string activité
3454 */
3455 function getActivite() {
3456 return "Droit du sol";
3457 }
3458 /**
3459 * @return string date du retour de controle légalité
3460 */
3461 function getDateControleLegalite() {
3462 if (empty($this->metadonneesArrete)) {
3463 $this->getArreteMetadata();
3464 }
3465 return $this->metadonneesArrete["datecontrolelegalite"];
3466 }
3467
3468 // Fin des méthodes de récupération des métadonnées
3469 // }}}
3470
3471 /**
3472 * Méthode de récupération des métadonnées arrêtés dans la base de données,
3473 * les données sont stockés dans l'attribut $this->metadonneesArrete
3474 */
3475 function getArreteMetadata() {
3476
3477 //Récupération de la dernière instruction dont l'événement est de type 'arrete'
3478 $this->metadonneesArrete = array("nomsignataire"=>"", "qualitesignataire"=>"",
3479 "decisionarrete"=>"", "datenotification"=>"", "datesignaturearrete"=>"",
3480 "datecontrolelegalite"=>"", "ap_numrue"=>"", "ap_nomdelavoie"=>"",
3481 "ap_codepostal"=>"", "ap_ville"=>"");
3482
3483 $sqlArrete = "SELECT signataire_arrete.nom as \"nomsignataire\",
3484 signataire_arrete.qualite as \"qualitesignataire\",
3485 instruction.etat as \"decisionarrete\",
3486 instruction.date_retour_rar as \"datenotification\",
3487 instruction.date_retour_signature as \"datesignaturearrete\",
3488 instruction.date_retour_controle_legalite as \"datecontrolelegalite\",
3489 dossier.terrain_adresse_voie_numero as \"ap_numrue\",
3490 dossier.terrain_adresse_voie as \"ap_nomdelavoie\",
3491 dossier.terrain_adresse_code_postal as \"ap_codepostal\",
3492 dossier.terrain_adresse_localite as \"ap_ville\"
3493 FROM ".DB_PREFIXE."instruction
3494 LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
3495 instruction.signataire_arrete = signataire_arrete.signataire_arrete
3496 LEFT JOIN ".DB_PREFIXE."dossier ON
3497 instruction.dossier = dossier.dossier
3498 LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
3499 donnees_techniques.dossier_instruction = dossier.dossier
3500 WHERE instruction.instruction = ".$this->getVal("instruction");
3501 $resArrete = $this->db->query($sqlArrete);
3502 $this->f->addToLog("getArreteMetadata(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
3503 if ( database::isError($resArrete)){
3504 die();
3505 }
3506
3507 $this->metadonneesArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
3508 }
3509
3510 /**
3511 * CONDITION - has_an_edition.
3512 *
3513 * Condition pour afficher le bouton de visualisation de l'édition.
3514 *
3515 * @return boolean
3516 */
3517 function has_an_edition() {
3518 // Récupère la valeur du champ lettretype
3519 $lettretype = $this->getVal("lettretype");
3520 // Si le champ est vide
3521 if ($lettretype !== '' && $lettretype !== null) {
3522 //
3523 return true;
3524 }
3525
3526 //
3527 return false;
3528 }
3529
3530 /**
3531 * CONDITION - is_editable.
3532 *
3533 * Condition pour la modification.
3534 *
3535 * @return boolean
3536 */
3537 function is_editable() {
3538 // Contrôle si l'utilisateur possède un bypass
3539 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_modifier_bypass");
3540 //
3541 if ($bypass == true) {
3542 //
3543 return true;
3544 }
3545
3546 // Si l'utilisateur est un instructeur, que le dossier est cloturé et
3547 // que l'événement n'est pas identifié comme non verrouillable
3548 if ($this->f->isUserInstructeur()
3549 && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
3550 && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
3551 //
3552 return false;
3553 }
3554
3555 // Si l'utilisateur est un intructeur qui correspond à la division du
3556 // dossier
3557 if ($this->is_instructeur_from_division_dossier() === true) {
3558 //
3559 return true;
3560 }
3561
3562 // Si l'utilisateur est instructeur de la commune du dossier et que la
3563 // décision peut être changée par la commune.
3564 if ($this->is_instructeur_from_collectivite_dossier() === true and
3565 $this->isInstrCanChangeDecision($this->getVal('dossier')) === true) {
3566 return true;
3567 }
3568
3569 // Si l'utilisateur est instructeur de la commune du dossier et que
3570 // l'instruction est créée par un instructeur de la commune
3571 if ($this->is_instructeur_from_collectivite_dossier() === true and
3572 $this->getVal('created_by_commune') === 't') {
3573 return true;
3574 }
3575
3576 //
3577 return false;
3578 }
3579
3580 /**
3581 * CONDITION - is_deletable.
3582 *
3583 * Condition pour la suppression.
3584 *
3585 * @return boolean
3586 */
3587 function is_deletable() {
3588 // Contrôle si l'utilisateur possède un bypass intégral
3589 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_supprimer_bypass");
3590 //
3591 if ($bypass == true) {
3592
3593 //
3594 return true;
3595 }
3596
3597 // Si l'utilisateur est un intructeur qui ne correspond pas à la
3598 // division du dossier et si l'utilisateur n'a pas la permission bypass
3599 // de la division
3600 if ($this->is_instructeur_from_division_dossier() === false
3601 && $this->f->isAccredited($this->get_absolute_class_name()."_supprimer_bypass_division") === false) {
3602
3603 //
3604 return false;
3605 }
3606
3607 // l'événement est-il le dernier ?
3608 $dernier_evenement = false;
3609 // instanciation dossier
3610 $dossier = $this->f->get_inst__om_dbform(array(
3611 "obj" => "dossier",
3612 "idx" => $this->getVal('dossier'),
3613 ));
3614 // récupération dernier événement
3615 $id_dernier_evenement = $dossier->get_dernier_evenement();
3616 if ($id_dernier_evenement == $this->getVal($this->clePrimaire)) {
3617 $dernier_evenement = true;
3618 }
3619
3620 // Si dossier cloturé ou si pas dernier événement
3621 // ou de type retour ou si une date est renseignée
3622 // ET utilisateur non administrateur
3623 if ($this->getStatutAutorisationDossier($this->getVal('dossier')) == 'cloture'
3624 || $dernier_evenement == false
3625 || $this->is_evenement_retour($this->getVal("evenement")) == true
3626 || $this->getVal('date_envoi_signature') != ''
3627 || $this->getVal('date_retour_signature') != ''
3628 || $this->getVal('date_envoi_rar') != ''
3629 || $this->getVal('date_retour_rar') != ''
3630 || $this->getVal('date_envoi_controle_legalite') != ''
3631 || $this->getVal('date_retour_controle_legalite') != '') {
3632 // pas le droit de supprimer
3633 return false;;
3634 }
3635
3636 //
3637 return true;
3638 }
3639
3640
3641 /**
3642 * Vérifie que l'utilisateur est instructeur et qu'il est de la division du
3643 * dossier.
3644 *
3645 * @return, boolean true/false
3646 */
3647 function is_instructeur_from_collectivite_dossier() {
3648 if ($this->f->isUserInstructeur() === true and
3649 $this->f->om_utilisateur["om_collectivite"] == $this->get_dossier_instruction_om_collectivite()) {
3650 return true;
3651 }
3652 return false;
3653 }
3654
3655 /**
3656 * CONDITION - is_addable.
3657 *
3658 * Condition pour afficher les boutons modifier et supprimer.
3659 *
3660 * @return boolean
3661 */
3662 function is_addable() {
3663 // Contrôle si l'utilisateur possède un bypass
3664 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_ajouter_bypass");
3665 //
3666 if ($bypass == true) {
3667
3668 //
3669 return true;
3670 }
3671 // Si l'utilisateur est un intructeur qui correspond à la
3672 // division du dossier ou qu'il peut changer la décision
3673 if ($this->is_instructeur_from_division_dossier() === true or
3674 $this->isInstrCanChangeDecision($this->getParameter('idxformulaire')) === true) {
3675 //
3676 return true;
3677 }
3678
3679 //
3680 return false;
3681 }
3682
3683 /**
3684 * CONDITION - is_finalizable.
3685 *
3686 * Condition pour afficher le bouton.
3687 *
3688 * @return boolean
3689 */
3690 function is_finalizable() {
3691 // Contrôle si l'utilisateur possède un bypass
3692 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_finaliser_bypass");
3693 //
3694 if ($bypass == true) {
3695 //
3696 return true;
3697 }
3698
3699 // Si l'utilisateur est un instructeur, que le dossier est cloturé et
3700 // que l'événement n'est pas identifié comme non verrouillable
3701 if ($this->f->isUserInstructeur()
3702 && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
3703 && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
3704 //
3705 return false;
3706 }
3707
3708 // Si l'utilisateur est un intructeur qui correspond à la division du
3709 // dossier
3710 if ($this->is_instructeur_from_division_dossier() === true) {
3711 //
3712 return true;
3713 }
3714
3715 // Si l'utilisateur est instructeur de la commune du dossier et que la
3716 // décision peut être changée par la commune.
3717 if ($this->is_instructeur_from_collectivite_dossier() === true and
3718 $this->isInstrCanChangeDecision($this->getVal('dossier')) === true) {
3719 return true;
3720 }
3721
3722 // Si l'utilisateur est instructeur de la commune du dossier et que
3723 // l'instruction est créée par un instructeur de la commune
3724 if ($this->is_instructeur_from_collectivite_dossier() === true and
3725 $this->getVal('created_by_commune') === 't') {
3726 return true;
3727 }
3728
3729 //
3730 return false;
3731 }
3732
3733 /**
3734 * CONDITION - is_finalize_without_bypass.
3735 *
3736 * Condition pour afficher le bouton sans le bypass.
3737 *
3738 * @return boolean [description]
3739 */
3740 function is_finalizable_without_bypass() {
3741 // Récupère la valeur du champ finalisé
3742 $om_final_instruction = $this->getVal('om_final_instruction');
3743
3744 // Si le rapport n'est pas finalisé
3745 if (empty($om_final_instruction)
3746 || $om_final_instruction == 'f') {
3747 //
3748 return true;
3749 }
3750
3751 //
3752 return false;
3753 }
3754
3755 /**
3756 * CONDITION - is_unfinalizable.
3757 *
3758 * Condition pour afficher le bouton.
3759 *
3760 * @return boolean
3761 */
3762 function is_unfinalizable(){
3763 // Contrôle si l'utilisateur possède un bypass
3764 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_definaliser_bypass");
3765 //
3766 if ($bypass == true) {
3767 //
3768 return true;
3769 }
3770
3771 // Si l'utilisateur est un instructeur, que le dossier est cloturé et
3772 // que l'événement n'est pas identifié comme non verrouillable
3773 if ($this->f->isUserInstructeur()
3774 && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
3775 && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
3776 //
3777 return false;
3778 }
3779
3780 // Si l'utilisateur est un intructeur qui correspond à la division du
3781 // dossier
3782 if ($this->is_instructeur_from_division_dossier() === true) {
3783 //
3784 return true;
3785 }
3786
3787 // Si l'utilisateur est instructeur de la commune du dossier et que la
3788 // décision peut être changée par la commune.
3789 if ($this->is_instructeur_from_collectivite_dossier() === true and
3790 $this->isInstrCanChangeDecision($this->getVal('dossier')) === true) {
3791 return true;
3792 }
3793
3794 // Si l'utilisateur est instructeur de la commune du dossier et que
3795 // l'instruction est créée par un instructeur de la commune
3796 if ($this->is_instructeur_from_collectivite_dossier() === true and
3797 $this->getVal('created_by_commune') === 't') {
3798 return true;
3799 }
3800
3801 //
3802 return false;
3803 }
3804
3805 /**
3806 * CONDITION - is_unfinalizable_without_bypass.
3807 *
3808 * Condition pour afficher le bouton sans le bypass.
3809 *
3810 * @return boolean
3811 */
3812 function is_unfinalizable_without_bypass() {
3813 // Récupère la valeur du champ finalisé
3814 $om_final_instruction = $this->getVal('om_final_instruction');
3815
3816 // Si l'instruction est finalisée
3817 if ($om_final_instruction == 't') {
3818 //
3819 return true;
3820 }
3821
3822 //
3823 return false;
3824 }
3825
3826
3827 /**
3828 * Permet de définir si un instructeur commune peut editer une instruction
3829 *
3830 * @return boolean true si il peut
3831 */
3832 function isInstrCanChangeDecision($idx) {
3833
3834 if ($this->f->isAccredited(array("instruction", "instruction_changer_decision"), "OR") !== true or
3835 $this->f->isUserInstructeur() !== true) {
3836 return false;
3837 }
3838
3839
3840
3841 // Sinon on vérifie l'éligibilité du dossier au changement de décision
3842 $sql =
3843 "SELECT
3844 dossier.dossier
3845 FROM
3846 ".DB_PREFIXE."dossier
3847 JOIN ".DB_PREFIXE."instruction ON instruction.instruction = (
3848 SELECT instruction
3849 FROM ".DB_PREFIXE."instruction
3850 JOIN ".DB_PREFIXE."evenement on instruction.evenement=evenement.evenement
3851 WHERE instruction.dossier = dossier.dossier
3852 AND evenement.retour IS FALSE
3853 ORDER BY date_evenement DESC, instruction DESC
3854 LIMIT 1
3855 )
3856 JOIN ".DB_PREFIXE."evenement ON instruction.evenement=evenement.evenement
3857 JOIN ".DB_PREFIXE."instructeur ON dossier.instructeur=instructeur.instructeur
3858 JOIN ".DB_PREFIXE."om_utilisateur ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
3859 JOIN ".DB_PREFIXE."om_collectivite ON om_collectivite.om_collectivite=om_utilisateur.om_collectivite
3860 JOIN ".DB_PREFIXE."etat ON dossier.etat = etat.etat
3861 WHERE
3862
3863 (
3864 evenement.type = 'arrete' AND
3865 (
3866 instruction.om_final_instruction IS TRUE
3867 OR instruction.created_by_commune IS TRUE
3868 ) OR
3869 evenement.type = 'changement_decision'
3870 )
3871 AND evenement.retour IS FALSE
3872 AND instruction.date_retour_signature IS NULL
3873 AND instruction.date_envoi_rar IS NULL
3874 AND instruction.date_retour_rar IS NULL
3875 AND instruction.date_envoi_controle_legalite IS NULL
3876 AND instruction.date_retour_controle_legalite IS NULL
3877 AND etat.statut = 'encours'
3878 AND dossier.dossier = '".$idx."'
3879 AND om_collectivite.niveau = '2'
3880 ";
3881
3882
3883 // Si collectivité de l'utilisateur niveau mono alors filtre sur celle-ci
3884 if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
3885 $sql .= " AND dossier.om_collectivite=".$_SESSION['collectivite'];
3886 }
3887 $res = $this->db->getone($sql);
3888 if (database::isError($res)) {
3889 die();
3890 }
3891 // Si le dossier n'est pas sujet au changement de decision
3892 if($res == null) {
3893 return false;
3894 }
3895 return true;
3896 }
3897
3898
3899 /**
3900 * CONDITION - can_monitoring_dates.
3901 *
3902 * Condition pour afficher le bouton de suivi des dates.
3903 *
3904 * @return boolean
3905 */
3906 public function can_monitoring_dates() {
3907 // Récupère la valeur du champ finalisé
3908 $om_final_instruction = $this->getVal('om_final_instruction');
3909
3910 // Si l'instruction n'est pas finalisée
3911 if ($om_final_instruction !== 't') {
3912 //
3913 return false;
3914 }
3915
3916 // Contrôle si l'utilisateur possède un bypass
3917 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_modification_dates_bypass");
3918 if ($bypass === true) {
3919 return true;
3920 }
3921
3922 // On vérifie en premier lieu que le DI n'est pas clôturé
3923 $inst_dossier = $this->get_inst_dossier();
3924 if ($inst_dossier->getStatut() === 'cloture') {
3925 //
3926 return false;
3927 }
3928 // On récupère ses infos
3929 $coll_di = $inst_dossier->getVal('om_collectivite');
3930 $div_di = $this->getDivisionFromDossier();
3931 // et celles de son éventuel instructeur
3932 $instr_di = $inst_dossier->getVal('instructeur');
3933
3934 // Il faut disposer d'une entrée instructeur
3935 if ($this->f->isUserInstructeur() === false) {
3936 return false;
3937 }
3938
3939 // Par défaut on prétend que l'instructeur n'est pas multi
3940 $instr_di_coll_multi = false;
3941 // Si un instructeur est affecté au dossier
3942 if ($instr_di !== '' && $instr_di !== null) {
3943 // Vérifie si l'instructeur est de la collectivité de niveau 2
3944 $instr_di_coll = $this->get_instructeur_om_collectivite($instr_di);
3945 if ($this->f->isCollectiviteMono($instr_di_coll) === false) {
3946 //
3947 $instr_di_coll_multi = true;
3948 }
3949 }
3950
3951 // Il faut qu'il instruise le dossier ou soit de la même division
3952 if ($this->f->om_utilisateur['instructeur'] === $instr_di
3953 || $this->f->om_utilisateur['division'] === $div_di) {
3954 //
3955 return true;
3956 }
3957
3958 // On donne également le droit s'il est de la même collectivité que
3959 // le dossier ET si l'instruction est déléguée à la communauté
3960 if ($this->f->isCollectiviteMono($this->f->om_utilisateur['om_collectivite']) === true
3961 && $this->f->om_utilisateur['om_collectivite'] === $coll_di
3962 && $instr_di_coll_multi === true) {
3963 //
3964 return true;
3965 }
3966
3967 // Si l'instructeur ne rentre pas dans les deux cas précédents
3968 return false;
3969 }
3970
3971
3972 /**
3973 * TREATMENT - finalize.
3974 *
3975 * Permet de finaliser un enregistrement.
3976 *
3977 * @param array $val valeurs soumises par le formulaire
3978 *
3979 * @return boolean
3980 */
3981 function finalize($val = array()) {
3982
3983 // Cette méthode permet d'exécuter une routine en début des méthodes
3984 // dites de TREATMENT.
3985 $this->begin_treatment(__METHOD__);
3986
3987 // Traitement de la finalisation
3988 $ret = $this->manage_finalizing("finalize", $val);
3989
3990 // Si le traitement retourne une erreur
3991 if ($ret !== true) {
3992
3993 // Termine le traitement
3994 return $this->end_treatment(__METHOD__, false);
3995 }
3996
3997 // Termine le traitement
3998 return $this->end_treatment(__METHOD__, true);
3999 }
4000
4001 /**
4002 * TREATMENT - unfinalize.
4003 *
4004 * Permet de définaliser un enregistrement.
4005 *
4006 * @param array $val valeurs soumises par le formulaire
4007 *
4008 * @return boolean
4009 */
4010 function unfinalize($val = array()) {
4011
4012 // Cette méthode permet d'exécuter une routine en début des méthodes
4013 // dites de TREATMENT.
4014 $this->begin_treatment(__METHOD__);
4015
4016 // Traitement de la finalisation
4017 $ret = $this->manage_finalizing("unfinalize", $val);
4018
4019 // Si le traitement retourne une erreur
4020 if ($ret !== true) {
4021
4022 // Termine le traitement
4023 return $this->end_treatment(__METHOD__, false);
4024 }
4025
4026 // Termine le traitement
4027 return $this->end_treatment(__METHOD__, true);
4028 }
4029
4030 /**
4031 * VIEW - view_edition
4032 *
4033 * Edite l'édition de l'instruction ou affiche celle contenue dans le stockage.
4034 *
4035 * @return null Si l'action est incorrecte
4036 */
4037 function view_edition() {
4038
4039 // Si l'instruction est finalisée
4040 if($this->getVal("om_final_instruction") == 't'
4041 && $this->getVal("om_final_instruction") != null) {
4042
4043 // Ouvre le document
4044 $lien = '../app/index.php?module=form&snippet=file&obj='.$this->table.'&'.
4045 'champ=om_fichier_instruction&id='.$this->getVal($this->clePrimaire);
4046 //
4047 header("Location: ".$lien);
4048 } else {
4049
4050 // Récupère la collectivite du dossier d'instruction
4051 $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
4052
4053 //
4054 $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
4055
4056 // Paramètre du PDF
4057 $params = array(
4058 "watermark" => true,
4059 "specific" => array(
4060 "mode" => "previsualisation",
4061 ),
4062 );
4063 // Si la rédaction libre est activée sur l'instruction
4064 if ($this->getVal("flag_edition_integrale") == 't') {
4065 $params["specific"]["corps"] = array(
4066 "mode" => "set",
4067 "value" => $this->getVal("corps_om_htmletatex"),
4068 );
4069 $params["specific"]["titre"] = array(
4070 "mode" => "set",
4071 "value" => $this->getVal("titre_om_htmletat"),
4072 );
4073 }
4074
4075 // Génération du PDF
4076 $result = $this->compute_pdf_output('lettretype', $this->getVal("lettretype"), $collectivite, null, $params);
4077 // Affichage du PDF
4078 $this->expose_pdf_output(
4079 $result['pdf_output'],
4080 $result['filename']
4081 );
4082 }
4083 }
4084
4085 /**
4086 * Récupère la collectivité du dossier d'instruction.
4087 *
4088 * @param string $dossier_instruction_id Identifiant du DI.
4089 *
4090 * @return integer
4091 */
4092 function get_dossier_instruction_om_collectivite($dossier_instruction_id = null) {
4093
4094 // Si l'identifiant n'est pas renseigné
4095 if ($dossier_instruction_id === null) {
4096 // Récupère la valeur
4097 if ($this->getVal('dossier') !== null && $this->getVal('dossier') !== '') {
4098 $dossier_instruction_id = $this->getVal('dossier');
4099 } elseif ($this->getParameter('idxformulaire') !== null
4100 && $this->getParameter('idxformulaire') !== '') {
4101 //
4102 $dossier_instruction_id = $this->getParameter('idxformulaire');
4103 } elseif ($this->f->get_submitted_get_value('idxformulaire') !== null
4104 && $this->f->get_submitted_get_value('idxformulaire') !== '') {
4105 //
4106 $dossier_instruction_id = $this->f->get_submitted_get_value('idxformulaire');
4107 }
4108 }
4109
4110 //
4111 $dossier_instruction = $this->f->get_inst__om_dbform(array(
4112 "obj" => "dossier_instruction",
4113 "idx" => $dossier_instruction_id,
4114 ));
4115
4116 //
4117 return $dossier_instruction->getVal('om_collectivite');
4118 }
4119
4120 /**
4121 * VIEW - view_bible
4122 *
4123 * Affiche la bible manuelle.
4124 *
4125 * @return void
4126 */
4127 function view_bible() {
4128 // Vérification de l'accessibilité sur l'élément
4129 $this->checkAccessibility();
4130
4131 // XXX APP
4132
4133 $f = $this->f;
4134
4135 /**
4136 * Affichage de la structure HTML
4137 */
4138 //
4139 if ($f->isAjaxRequest()) {
4140 //
4141 header("Content-type: text/html; charset=".HTTPCHARSET."");
4142 } else {
4143 //
4144 $f->setFlag("htmlonly");
4145 $f->display();
4146 }
4147 //
4148 $f->displayStartContent();
4149 //
4150 $f->setTitle(_("Liste des éléments de la bible en lien avec un evenement"));
4151 $f->displayTitle();
4152
4153 /**
4154 *
4155 */
4156 //
4157 ($f->get_submitted_get_value("ev") ? $evenement = $f->get_submitted_get_value("ev") : $evenement = "");
4158 $evenement = intval($evenement);
4159 //
4160 ($f->get_submitted_get_value("idx") ? $idx = $f->get_submitted_get_value("idx") : $idx = "");
4161 // Récupération du code du type de DA
4162 $code_da_type = '';
4163 if (preg_match('/[A-Za-z]{2,3}/', $idx, $matches) !== false) {
4164 $code_da_type = $matches[0];
4165 }
4166 //
4167 ($f->get_submitted_get_value("complement") ? $complement = $f->get_submitted_get_value("complement") : $complement = "1");
4168
4169 // Récupération de la collectivité du dossier
4170 $dossier = $this->f->get_inst__om_dbform(array(
4171 "obj" => "dossier",
4172 "idx" => $idx,
4173 ));
4174
4175 /**
4176 *
4177 */
4178 //
4179 $sql = "SELECT *, bible.libelle as bible_lib
4180 FROM ".DB_PREFIXE."bible
4181 LEFT OUTER JOIN ".DB_PREFIXE."dossier_autorisation_type
4182 ON bible.dossier_autorisation_type=dossier_autorisation_type.dossier_autorisation_type
4183 LEFT JOIN ".DB_PREFIXE."om_collectivite
4184 ON bible.om_collectivite = om_collectivite.om_collectivite
4185 WHERE (evenement=".$evenement." OR evenement IS NULL)
4186 AND complement=".$complement."
4187 AND (bible.dossier_autorisation_type IS NULL
4188 OR dossier_autorisation_type.code ='".$code_da_type."')
4189 AND (om_collectivite.niveau = '2'
4190 OR bible.om_collectivite = ".$dossier->getVal("om_collectivite").")
4191 ORDER BY bible_lib ASC";
4192 $res = $f->db->query($sql);
4193 $f->addToLog(__METHOD__.": db->query(\"".$sql."\");", VERBOSE_MODE);
4194 $f->isDatabaseError($res);
4195 //
4196 echo "<form method=\"post\" name=\"f3\" action=\"#\">\n";
4197 //
4198 if ($res->numrows() > 0) {
4199 //
4200 echo "\t<table id='tab-bible' width='100%'>\n";
4201 //
4202 echo "\t\t<tr class=\"ui-tabs-nav ui-accordion ui-state-default tab-title\">";
4203 echo "<th>"._("Choisir")."</th>";
4204 echo "<th>"._("Libelle")."</th>";
4205 echo "</tr>\n";
4206 //
4207 $i = 0;
4208 //
4209 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
4210 //
4211 echo "\t\t<tr";
4212 echo " class=\"".($i % 2 == 0 ? "odd" : "even")."\"";
4213 echo ">";
4214 //
4215 echo "<td class=\"center\"><input type=\"checkbox\" name=\"choix[]\" value=\"".$i."\" id=\"checkbox".$i."\" /></td>";
4216 // XXX utilisation de l'attribut titre pour afficher une infobulle
4217 echo "<td><span class=\"content\" title=\"".htmlentities($row['contenu'])."\" id=\"content".$i."\">".$row['bible_lib']."</span></td>";
4218 //
4219 echo "</tr>\n";
4220 //
4221 $i++;
4222 }
4223 echo "\t</table>\n";
4224 //
4225 echo "<div class=\"formControls\">\n";
4226 $f->layout->display_form_button(array(
4227 "value" => _("Valider"),
4228 "onclick" => "bible_return('f2', 'complement".($complement == "1" ? "" : $complement)."_om_html'); return false;",
4229 ));
4230 $f->displayLinkJsCloseWindow();
4231 echo "</div>\n";
4232
4233 } else {
4234 //
4235 $message_class = "error";
4236 $message = _("Aucun element dans la bible pour l'evenement")." : ".$evenement;
4237 $f->displayMessage($message_class, $message);
4238 //
4239 echo "<div class=\"formControls\">\n";
4240 $f->displayLinkJsCloseWindow();
4241 echo "</div>\n";
4242 }
4243 //
4244 echo "</form>\n";
4245
4246 /**
4247 * Affichage de la structure HTML
4248 */
4249 //
4250 $f->displayEndContent();
4251 }
4252
4253 /**
4254 * VIEW - view_bible_auto
4255 *
4256 * Renvoie les valeurs de la bible à placer dans les compléments de l'instruction.
4257 *
4258 * @return void
4259 */
4260 function view_bible_auto() {
4261 // Vérification de l'accessibilité sur l'élément
4262 $this->checkAccessibility();
4263
4264 // XXX APP
4265
4266 $f = $this->f;
4267
4268 //
4269 $f->disableLog();
4270
4271 $formatDate="AAAA-MM-JJ";
4272
4273 // Récupération des paramètres
4274 $idx = $f->get_submitted_get_value('idx');
4275 $evenement = $f->get_submitted_get_value('ev');
4276
4277 // Initialisation de la variable de retour
4278 $retour['complement_om_html'] = '';
4279 $retour['complement2_om_html'] = '';
4280 $retour['complement3_om_html'] = '';
4281 $retour['complement4_om_html'] = '';
4282 // Vérification d'une consultation liée à l'événement
4283 $consultation = $f->db->getOne(
4284 "select consultation from ".DB_PREFIXE."evenement where evenement=".$evenement
4285 );
4286 $f->isDatabaseError($consultation);
4287 // Si consultation liée, récupération du retour d'avis
4288 if($consultation=='Oui'){
4289 $sql="select date_retour,avis_consultation.libelle as avis_consultation,
4290 service.libelle as service
4291 from ".DB_PREFIXE."consultation inner join ".DB_PREFIXE."service
4292 on consultation.service =service.service
4293 left join ".DB_PREFIXE."avis_consultation on
4294 consultation.avis_consultation = avis_consultation.avis_consultation
4295 where dossier ='".$idx."'";
4296 $res = $f->db->query($sql);
4297 $f->isDatabaseError($res);
4298 // Récupération des consultations
4299 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
4300 $correct=false;
4301 // date retour
4302 if ($row['date_retour']<>""){
4303 if ($formatDate=="AAAA-MM-JJ"){
4304 $date = explode("-", $row['date_retour']);
4305 // controle de date
4306 if (count($date) == 3 and
4307 checkdate($date[1], $date[2], $date[0])) {
4308 $date_retour_f= $date[2]."/".$date[1]."/".$date[0];
4309 $correct=true;
4310 }else{
4311 $msg= $msg."<br>La date ".$row['date_retour']." n'est pas une date.";
4312 $correct=false;
4313 }
4314 }
4315 }
4316 //
4317 $temp="Vu l'avis ".$row['avis_consultation']." du service ".$row['service'];
4318 if($correct == true){
4319 $temp=$temp." du ".$date_retour_f;
4320 }
4321 // Concaténation des retours d'avis de consultation
4322 $retour['complement_om_html'] .= $temp . "<br/><br/>";
4323 } // while
4324
4325 } // consultation
4326 // Récupération des bibles automatiques pour le champ complement_om_html
4327 $retour['complement_om_html'] .= $this->getBible($f, $evenement, $idx, '1');
4328 // Récupération des bibles automatiques pour le champ complement2_om_html
4329 $retour['complement2_om_html'] .= $this->getBible($f, $evenement, $idx, '2');
4330 // Récupération des bibles automatiques pour le champ complement3_om_html
4331 $retour['complement3_om_html'] .= $this->getBible($f, $evenement, $idx, '3');
4332 // Récupération des bibles automatiques pour le champ complement4_om_html
4333 $retour['complement4_om_html'] .= $this->getBible($f, $evenement, $idx, '4');
4334
4335
4336
4337 echo json_encode($retour);
4338 }
4339
4340 /**
4341 * VIEW - view_pdf_temp
4342 *
4343 * @return void
4344 */
4345 function view_pdf_temp() {
4346 $this->checkAccessibility();
4347 // Utilisation de $_POST pour ne pas que les textes soient altérés.
4348 $this->f->set_submitted_value();
4349 $merge_fields = array();
4350 //
4351 if (array_key_exists('c1', $_POST) === true) {
4352 $merge_fields['[complement_instruction]'] = urldecode($_POST['c1']);
4353 $merge_fields['[complement1_instruction]'] = urldecode($_POST['c1']);
4354 }
4355 if (array_key_exists('c2', $_POST) === true) {
4356 $merge_fields['[complement2_instruction]'] = urldecode($_POST['c2']);
4357 }
4358 if (array_key_exists('c3', $_POST) === true) {
4359 $merge_fields['[complement3_instruction]'] = urldecode($_POST['c3']);
4360 }
4361 if (array_key_exists('c4', $_POST) === true) {
4362 $merge_fields['[complement4_instruction]'] = urldecode($_POST['c4']);
4363 }
4364 $params = array(
4365 "watermark" => true,
4366 "specific" => array(
4367 "merge_fields" => $merge_fields,
4368 ),
4369 );
4370 //
4371 if (array_key_exists('corps', $_POST) === true) {
4372 $params["specific"]["corps"] = array(
4373 "mode" => "set",
4374 "value" => urldecode($_POST['corps']),
4375 );
4376 }
4377 if (array_key_exists('titre', $_POST) === true) {
4378 $params["specific"]["titre"] = array(
4379 "mode" => "set",
4380 "value" => urldecode($_POST['titre']),
4381 );
4382 }
4383 $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
4384 $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
4385 $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'), $collectivite, null, $params);
4386 $retour = array(
4387 'base' => base64_encode($result['pdf_output']),
4388 );
4389 echo json_encode($retour);
4390 }
4391
4392 /**
4393 * Dans le contexte de prévisualisation des éditions, génère le rendu du
4394 * PDF sans prise en compte de la valeur des compléments et le retourne en
4395 * base 64.
4396 *
4397 * @return string Rendu PDF converti en base 64.
4398 */
4399 function init_pdf_temp() {
4400 $params = array(
4401 "watermark" => true,
4402 );
4403 // Si la rédaction libre est activée sur l'instruction
4404 if ($this->getVal("flag_edition_integrale") == 't') {
4405 $params["specific"]["corps"] = array(
4406 "mode" => "set",
4407 "value" => $this->getVal("corps_om_htmletatex"),
4408 );
4409 $params["specific"]["titre"] = array(
4410 "mode" => "set",
4411 "value" => $this->getVal("titre_om_htmletat"),
4412 );
4413 }
4414 $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
4415 $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
4416 $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'), $collectivite, null, $params);
4417
4418 return base64_encode($result['pdf_output']);
4419 }
4420
4421 /**
4422 * Récupération des éléments de bible.
4423 *
4424 * @param utils $f handler de om_application
4425 * @param integer $event id de l'événement
4426 * @param string $idx id du dossier
4427 * @param integer $compnb numéro du champ complement
4428 *
4429 * @return string Chaîne de texte à insérer dans le champ complement
4430 */
4431 function getBible($f, $event, $idx, $compnb) {
4432 // Récupération de la collectivité du dossier
4433 $dossier = $this->f->get_inst__om_dbform(array(
4434 "obj" => "dossier",
4435 "idx" => $idx,
4436 ));
4437 // Récupération du code du type de DA
4438 $code_da_type = '';
4439 if (preg_match('/[A-Za-z]{2,3}/', $idx, $matches) !== false) {
4440 $code_da_type = $matches[0];
4441 }
4442 //
4443 $sql = "SELECT * FROM ".DB_PREFIXE."bible
4444 LEFT OUTER JOIN ".DB_PREFIXE."dossier_autorisation_type
4445 ON bible.dossier_autorisation_type=
4446 dossier_autorisation_type.dossier_autorisation_type
4447 LEFT JOIN
4448 ".DB_PREFIXE."om_collectivite
4449 ON bible.om_collectivite = om_collectivite.om_collectivite
4450 WHERE (evenement =".$event." or evenement IS NULL) and
4451 complement=".$compnb." and
4452 automatique='Oui' and
4453 (dossier_autorisation_type.code ='".$code_da_type."' or
4454 bible.dossier_autorisation_type IS NULL) and
4455 (om_collectivite.niveau = '2' OR bible.om_collectivite = ".$dossier->getVal("om_collectivite").")";
4456
4457 $res = $f->db->query($sql);
4458 $f->isDatabaseError($res);
4459 $temp = "";
4460 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
4461 // Remplacement des retours à la ligne par des br
4462 $temp .= preg_replace(
4463 '#(\\\r|\\\r\\\n|\\\n)#', '<br/>', $row['contenu']
4464 );
4465 // Ajout d'un saut de ligne entre chaque bible.
4466 $temp .= '<br/>';
4467 } // fin while
4468 return $temp;
4469 }
4470
4471 /**
4472 * VIEW - view_suivi_bordereaux.
4473 *
4474 * Formulaire de choix du bordereau de suivi, permettant de générer les 4 bordereaux.
4475 * Si l'utilisateur est d'une collectivité de niveau 2 il a le choix de la
4476 * collectivité des dossiers affichés.
4477 *
4478 * @return void
4479 */
4480 function view_suivi_bordereaux() {
4481 // Vérification de l'accessibilité sur l'élément
4482 $this->checkAccessibility();
4483
4484 // XXX APP
4485
4486 $f = $this->f;
4487
4488 /**
4489 * Validation du formulaire
4490 */
4491 // Si le formulaire a été validé
4492 if ($f->get_submitted_post_value("validation") !== null) {
4493 // Si un bordereau à été sélectionné
4494 if ($f->get_submitted_post_value("bordereau") !== null && $f->get_submitted_post_value("bordereau") == "" ) {
4495 // Si aucun bordereau n'a été sélectionné
4496 $message_class = "error";
4497 $message = _("Veuillez selectionner un bordereau.");
4498 }
4499 // Sinon si les dates ne sont pas valide
4500 elseif (($f->get_submitted_post_value("date_bordereau_debut") !== null
4501 && $f->get_submitted_post_value("date_bordereau_debut") == "")
4502 || ($f->get_submitted_post_value("date_bordereau_fin") !== null
4503 && $f->get_submitted_post_value("date_bordereau_fin") == "")) {
4504 // Si aucune date n'a été saisie
4505 $message_class = "error";
4506 $message = _("Veuillez saisir une date valide.");
4507 }
4508 // Sinon si les dates ne sont pas valides
4509 elseif ($f->get_submitted_post_value("bordereau") === "bordereau_avis_maire_prefet"
4510 && $f->getParameter("id_evenement_bordereau_avis_maire_prefet") == null) {
4511 // Si aucune date n'a été saisie
4512 $message_class = "error";
4513 $message = _("Erreur de parametrage. Contactez votre administrateur.");
4514 }
4515 // Affiche le message de validation
4516 else {
4517 // On récupère le libellé du bordereau pour l'afficher à l'utilisateur
4518 $sql = "SELECT om_etat.libelle
4519 FROM ".DB_PREFIXE."om_etat
4520 WHERE om_etat.id = '".$f->get_submitted_post_value("bordereau")."'";
4521 $res = $f->db->getone($sql);
4522 $f->addToLog(__METHOD__.": db->getone(\"".$sql."\")", VERBOSE_MODE);
4523 $f->isDatabaseError($res);
4524 //
4525 $message_class = "valid";
4526 $message = _("Cliquez sur le lien ci-dessous pour telecharger votre bordereau");
4527 $message .= " : <br/><br/>";
4528 $message .= "<a class='om-prev-icon pdf-16'";
4529 $message .= " title=\""._("Bordereau")."\"";
4530 $message .= "href='".OM_ROUTE_FORM."&obj=instruction";
4531 $message .= "&action=220";
4532 $message .= "&idx=0";
4533 $message .= "&type_bordereau=".$f->get_submitted_post_value("bordereau");
4534 $message .= "&date_bordereau_debut=".$f->get_submitted_post_value("date_bordereau_debut");
4535 $message .= "&date_bordereau_fin=".$f->get_submitted_post_value("date_bordereau_fin");
4536 // Si l'utilisateur est MULTI alors on ajoute le paramètre collectivite
4537 if ($f->get_submitted_post_value("om_collectivite") !== null) {
4538 $message .= "&collectivite=".$f->get_submitted_post_value("om_collectivite");
4539 }
4540 $message .= "'"." target='_blank'>";
4541 $message .= $res." "._("du")." ".$f->get_submitted_post_value("date_bordereau_debut")
4542 ." "._("au")." ".$f->get_submitted_post_value("date_bordereau_fin");
4543 $message .= "</a>";
4544 }
4545 }
4546
4547 /**
4548 * Affichage des messages et du formulaire
4549 */
4550 // Affichage du message de validation ou d'erreur
4551 if (isset($message) && isset($message_class) && $message != "") {
4552 $f->displayMessage($message_class, $message);
4553 }
4554 // Ouverture du formulaire
4555 printf("\t<form");
4556 printf(" method=\"post\"");
4557 printf(" id=\"suivi_bordereaux_form\"");
4558 printf(" action=\"\"");
4559 printf(">\n");
4560 // Paramétrage des champs du formulaire
4561 $champs = array("date_bordereau_debut", "date_bordereau_fin", "bordereau");
4562 // Si l'utilisateur est d'une collectivité de niveau 2 on affiche un select
4563 // collectivité dans le formulaire
4564 if($_SESSION["niveau"] == 2) {
4565 array_push($champs, "om_collectivite");
4566 }
4567 // Création d'un nouvel objet de type formulaire
4568 $form = $this->f->get_inst__om_formulaire(array(
4569 "validation" => 0,
4570 "maj" => 0,
4571 "champs" => $champs,
4572 ));
4573 // Paramétrage du champ date_bordereau_debut
4574 $form->setLib("date_bordereau_debut", _("date_bordereau_debut"));
4575 $form->setType("date_bordereau_debut", "date");
4576 $form->setTaille("date_bordereau_debut", 12);
4577 $form->setMax("date_bordereau_debut", 12);
4578 $form->setRequired("date_bordereau_debut");
4579 $form->setOnchange("date_bordereau_debut", "fdate(this)");
4580 $form->setVal("date_bordereau_debut", date("d/m/Y"));
4581 // Paramétrage du champ date_bordereau_fin
4582 $form->setLib("date_bordereau_fin", _("date_bordereau_fin"));
4583 $form->setType("date_bordereau_fin", "date");
4584 $form->setTaille("date_bordereau_fin", 12);
4585 $form->setMax("date_bordereau_fin", 12);
4586 $form->setRequired("date_bordereau_fin");
4587 $form->setOnchange("date_bordereau_fin", "fdate(this)");
4588 $form->setVal("date_bordereau_fin", date("d/m/Y"));
4589 // Paramétrage du champ bordereau
4590 $form->setLib("bordereau", _("bordereau"));
4591 $form->setType("bordereau", "select");
4592 $form->setRequired("bordereau");
4593 // Valeurs des champs
4594 if ($f->get_submitted_post_value("validation") !== null) {
4595 $form->setVal("date_bordereau_debut", $f->get_submitted_post_value("date_bordereau_debut"));
4596 $form->setVal("date_bordereau_fin", $f->get_submitted_post_value("date_bordereau_fin"));
4597 $form->setVal("bordereau", $f->get_submitted_post_value("bordereau"));
4598 $form->setVal("om_collectivite", $f->get_submitted_post_value("om_collectivite"));
4599 }
4600 // Données du select - On récupère ici la liste de tous les états disponibles
4601 // dans la table om_etat qui ont un id qui commence par la cahine de caractères
4602 // 'bordereau_'
4603 $sql = "SELECT om_etat.id, om_etat.libelle
4604 FROM ".DB_PREFIXE."om_etat
4605 WHERE om_etat.id LIKE 'bordereau_%'
4606 ORDER BY om_etat.id";
4607 $res = $f->db->query($sql);
4608 $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
4609 $f->isDatabaseError($res);
4610 // Données du select
4611 $contenu = array(
4612 0 => array("", ),
4613 1 => array(_("choisir bordereau")),
4614 );
4615 while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
4616 $contenu[0][] = $row['id'];
4617 $contenu[1][] = $row['libelle'];
4618 }
4619 $form->setSelect("bordereau", $contenu);
4620 //
4621 if($_SESSION["niveau"] == 2) {
4622 $form->setLib("om_collectivite", _("collectivite"));
4623 $form->setType("om_collectivite", "select");
4624
4625 // Données du select - On récupère ici la liste de tous toutes les collectivités
4626 // de niveau 1
4627 $sql = "SELECT om_collectivite, libelle
4628 FROM ".DB_PREFIXE."om_collectivite
4629 WHERE niveau = '1' ORDER BY libelle";
4630 $res = $f->db->query($sql);
4631 $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
4632 $f->isDatabaseError($res);
4633 // La valeur par défaut du select est Toutes
4634 $list_collectivites = array(
4635 0 => array("", ),
4636 1 => array(_("toutes"))
4637 );
4638
4639 $id_colls = "";
4640 // On stocke dans $id_colls l'id de toutes les collectivités de niveau 1 séparées
4641 // par des virgules, pour un traitement plus facile dans la requête de sous-état
4642 while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
4643 if ($id_colls != "") {
4644 $id_colls .= ",";
4645 }
4646 $id_colls .= $row['om_collectivite'];
4647 $list_collectivites[0][] = $row['om_collectivite'];
4648 $list_collectivites[1][] = $row['libelle'];
4649 }
4650 // On affecte la liste d'identifiants à l'option Toutes
4651 $list_collectivites[0][0] = $id_colls ;
4652 $form->setSelect("om_collectivite", $list_collectivites);
4653 }
4654
4655 // Affichage du formulaire
4656 $form->entete();
4657 $form->afficher($champs, 0, false, false);
4658 $form->enpied();
4659 // Affichage du bouton
4660 printf("\t<div class=\"formControls\">\n");
4661 $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
4662 printf("\t</div>\n");
4663 // Fermeture du formulaire
4664 printf("\t</form>\n");
4665
4666 }
4667
4668
4669 /**
4670 * VIEW - view_generate_suivi_bordereaux.
4671 *
4672 * Génère et affiche les bordereaux de suivi.
4673 *
4674 * @return [void]
4675 */
4676 function view_generate_suivi_bordereaux() {
4677 // Vérification de l'accessibilité sur l'élément
4678 $this->checkAccessibility();
4679 // Récupération du type de bordereau
4680 $bordereau = $this->f->get_submitted_get_value('type_bordereau');
4681 // Génération du PDF
4682 $result = $this->compute_pdf_output('etat', $bordereau, null, $this->getVal($this->clePrimaire));
4683 // Affichage du PDF
4684 $this->expose_pdf_output(
4685 $result['pdf_output'],
4686 $result['filename']
4687 );
4688 }
4689
4690
4691 /**
4692 * VIEW - view_suivi_envoi_lettre_rar.
4693 *
4694 * Vu pour imprimer les RAR.
4695 *
4696 * @return void
4697 */
4698 function view_suivi_envoi_lettre_rar() {
4699 // Vérification de l'accessibilité sur l'élément
4700 $this->checkAccessibility();
4701
4702 // XXX APP
4703
4704 $f = $this->f;
4705
4706 //
4707 if ($f->get_submitted_post_value("date") !== null) {
4708 $date = $f->get_submitted_post_value("date");
4709 } else {
4710 $date = "";
4711 }
4712 //
4713 if ($f->get_submitted_post_value("liste_code_barres_instruction") !== null) {
4714 $liste_code_barres_instruction = $f->get_submitted_post_value("liste_code_barres_instruction");
4715 } else {
4716 $liste_code_barres_instruction = "";
4717 }
4718
4719 // Compteur du nombre de page générées
4720 $nbLettres = 0;
4721 // Liste d'id des instructions
4722 $id4Gen = array();
4723 //
4724 $error = "";
4725
4726 // Initialisation du tableau qui va contenir les DI pour lister les liens
4727 $dossierTab = array();
4728 // On vérifie que l'utilisateur ait les droits pour afficher des consultations
4729 $isAccredited = $this->f->isAccredited(array("dossier_instruction","dossier_instruction_consulter"), "OR");
4730 $hasHidden = true;
4731 // S'il ne peut pas les consulter il aura des dossiers caché
4732 if ($isAccredited === true) {
4733 $hasHidden = false;
4734 }
4735
4736 /**
4737 * Validation du formulaire
4738 */
4739 // Si le formulaire a été validé
4740 if ($f->get_submitted_post_value('validation') !== null) {
4741 //
4742 if (empty($date) || empty($liste_code_barres_instruction)) {
4743 //
4744 $message_class = "error";
4745 $message = _("Tous les champs doivent etre remplis.");
4746 } else {
4747 // Création d'un tableau d'instruction
4748 $liste = explode("\r\n", $f->get_submitted_post_value("liste_code_barres_instruction"));
4749 //
4750 foreach ($liste as $code_barres) {
4751 // On enlève les éventuels espaces saisis
4752 $code_barres = trim($code_barres);
4753 // Vérification de l'existence de l'instruction
4754 if ($code_barres != "") {
4755 // Si la valeur transmise est numérique
4756 if (is_numeric($code_barres)) {
4757 //
4758 $sql = "SELECT count(*)
4759 FROM ".DB_PREFIXE."instruction
4760 INNER JOIN ".DB_PREFIXE."dossier
4761 ON dossier.dossier=instruction.dossier
4762 INNER JOIN ".DB_PREFIXE."dossier_instruction_type
4763 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
4764 INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
4765 ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
4766 INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
4767 ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
4768 INNER JOIN ".DB_PREFIXE."groupe
4769 ON dossier_autorisation_type.groupe = groupe.groupe
4770 WHERE code_barres='".$this->f->db->escapesimple($code_barres)."'";
4771
4772 // Ajout d'un filtre sur les groupes auxquels l'utilisateur a accès
4773 $group_clause = array();
4774 foreach ($_SESSION["groupe"] as $key => $value) {
4775 $group_clause[$key] = "(groupe.code = '".$key."'";
4776 if($value["confidentiel"] !== true) {
4777 $group_clause[$key] .= " AND dossier_autorisation_type.confidentiel IS NOT TRUE";
4778 }
4779 $group_clause[$key] .= ")";
4780 }
4781 $conditions = implode(" OR ", $group_clause);
4782 $sql .= " AND (" . $conditions . ")";
4783
4784 $nbInstr = $f->db->getone($sql);
4785 $f->addToLog(__METHOD__.": db->getone(\"".$sql."\")", VERBOSE_MODE);
4786 $f->isDatabaseError($nbInstr);
4787 //
4788 if ($nbInstr == "1") {
4789 // Récupération de la date d'envoi de l'instruction bippé
4790 $sql = "SELECT to_char(date_envoi_rar,'DD/MM/YYYY') as date_envoi_rar, instruction FROM ".DB_PREFIXE."instruction WHERE code_barres='".$code_barres."'";
4791 $res = $f->db->query($sql);
4792 $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
4793 $f->isDatabaseError($res);
4794 $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
4795 // Si pas de date ou correspond à la date du formulaire on
4796 // effectue le traitement
4797 if ($row["date_envoi_rar"] == "" || $row["date_envoi_rar"] == $date) {
4798 $instr = $this->f->get_inst__om_dbform(array(
4799 "obj" => "instruction",
4800 "idx" => $row['instruction'],
4801 ));
4802 $valF = array();
4803 foreach($instr->champs as $id => $champ) {
4804 $valF[$champ] = $instr->val[$id];
4805 }
4806
4807 # Si on peut consulter les dossiers et que le dossier n'existe pas déjà dans la liste
4808 if ($isAccredited === true
4809 && array_key_exists($instr->getVal("dossier"), $dossierTab) === false) {
4810 $dossier = $this->f->get_inst__om_dbform(array(
4811 "obj" => "dossier",
4812 "idx" => $instr->getVal("dossier"),
4813 ));
4814 if ($dossier->is_user_from_allowed_collectivite()){
4815 $dossierTab[$instr->getVal("dossier")] = $dossier;
4816 } else {
4817 $hasHidden = true;
4818 }
4819 }
4820
4821 $valF['date_evenement']=
4822 $instr->dateDBToForm($valF['date_evenement']);
4823 $valF['archive_date_complet']=
4824 $instr->dateDBToForm($valF['archive_date_complet']);
4825 $valF['archive_date_rejet']=
4826 $instr->dateDBToForm($valF['archive_date_rejet']);
4827 $valF['archive_date_limite']=
4828 $instr->dateDBToForm($valF['archive_date_limite']);
4829 $valF['archive_date_notification_delai']=
4830 $instr->dateDBToForm($valF['archive_date_notification_delai']);
4831 $valF['archive_date_decision']=
4832 $instr->dateDBToForm($valF['archive_date_decision']);
4833 $valF['archive_date_validite']=
4834 $instr->dateDBToForm($valF['archive_date_validite']);
4835 $valF['archive_date_achevement']=
4836 $instr->dateDBToForm($valF['archive_date_achevement']);
4837 $valF['archive_date_chantier']=
4838 $instr->dateDBToForm($valF['archive_date_chantier']);
4839 $valF['archive_date_conformite']=
4840 $instr->dateDBToForm($valF['archive_date_conformite']);
4841 $valF['archive_date_dernier_depot']=
4842 $instr->dateDBToForm($valF['archive_date_dernier_depot']);
4843 $valF['archive_date_limite_incompletude']=
4844 $instr->dateDBToForm($valF['archive_date_limite_incompletude']);
4845 $valF['date_finalisation_courrier']=
4846 $instr->dateDBToForm($valF['date_finalisation_courrier']);
4847 $valF['date_envoi_signature']=
4848 $instr->dateDBToForm($valF['date_envoi_signature']);
4849 $valF['date_retour_signature']=
4850 $instr->dateDBToForm($valF['date_retour_signature']);
4851 $valF['date_envoi_rar']=
4852 $instr->dateDBToForm($valF['date_envoi_rar']);
4853 $valF['date_retour_rar']=
4854 $instr->dateDBToForm($valF['date_retour_rar']);
4855 $valF['date_envoi_controle_legalite']=
4856 $instr->dateDBToForm($valF['date_envoi_controle_legalite']);
4857 $valF['date_retour_controle_legalite']=
4858 $instr->dateDBToForm($valF['date_retour_controle_legalite']);
4859 $valF['date_envoi_rar'] = $date;
4860
4861 // Vérification de la finalisation du document
4862 // correspondant au code barres
4863 if($instr->getVal("om_final_instruction") === 't') {
4864 $instr->setParameter('maj', 1);
4865 $instr->class_actions[1]["identifier"] =
4866 "envoi lettre RAR (depuis le menu suivi des pièces)";
4867 if ($instr->modifier($valF, $f->db, DEBUG) == true) {
4868 $id4Gen[] = $code_barres;
4869 $nbLettres ++;
4870 } else {
4871 //
4872 if ($error != "") {
4873 $error .= "<br/>";
4874 }
4875 $error .= sprintf(_("Une erreur s'est produite lors de la modification de l'instruction %s."),
4876 $code_barres);
4877 $error .= " ";
4878 $error .= _("Veuillez contacter votre administrateur.");
4879 }
4880 } else {
4881 //
4882 if ($error != "") {
4883 $error .= "<br/>";
4884 }
4885 $error .= sprintf(_("Le document correspondant au
4886 code barres %s n'est pas finalise,
4887 le bordereau ne sera pas genere."),
4888 $code_barres);
4889 }
4890
4891 } else {
4892 //
4893 if ($error != "") {
4894 $error .= "<br/>";
4895 }
4896 $error .= _("Une lettre correspondante a l'instruction ayant pour code barres")." ".$code_barres." "._("a deja ete envoyee, le bordereau ne sera pas genere.");
4897 }
4898 } else {
4899 //
4900 if ($error != "") {
4901 $error .= "<br/>";
4902 }
4903 $error .= _("Le numero")." ".$code_barres." "._("ne correspond a aucun code barres d'instruction.");
4904 }
4905 } else {
4906 //
4907 if ($error != "") {
4908 $error .= "<br/>";
4909 }
4910 $error .= _("Le code barres d'instruction")." ".$code_barres." "._("n'est pas valide.");
4911 }
4912 }
4913 }
4914 }
4915 }
4916
4917 /**
4918 * Affichage des messages et du formulaire
4919 */
4920 // Affichage du message de validation ou d'erreur
4921 if (isset($message) && isset($message_class) && $message != "") {
4922 $f->displayMessage($message_class, $message);
4923 }
4924 // Affichage du message d'erreur
4925 if(!empty($error)) {
4926 $f->displayMessage("error", $error);
4927 }
4928 // Affichage du message de validation de la saisie
4929 if ($nbLettres > 0) {
4930 //
4931 echo "\n<div class=\"message ui-widget ui-corner-all ui-state-highlight ui-state-valid\" >";
4932 echo "\n<p>";
4933 echo "\n<span class=\"ui-icon ui-icon-info\"></span>";
4934 echo "\n<span class=\"text\">";
4935 echo _("Cliquez sur le lien ci-dessous pour telecharger votre document");
4936 echo " : \n<br/><br/>";
4937 echo "\n<a class='om-prev-icon pdf-16'";
4938 echo "\n title=\""._("imprimer les RAR")."\"";
4939 echo "\n href=\"".OM_ROUTE_FORM."&obj=instruction&action=180&idx=0&liste=".implode(",",$id4Gen)."\"";
4940 echo "\n target='_blank'>";
4941 echo _("Telecharger le document pour")." ".$nbLettres." "._("RAR");
4942 echo "\n</a>";
4943 echo "\n</span>";
4944 echo "\n</p>";
4945 echo "\n<br/>\n";
4946 if ($isAccredited === true) {
4947 echo '<fieldset id="fieldset-form-rar-lien_di" class="cadre ui-corner-all startClosed" style="background-color: inherite;">';
4948 echo "\n<legend class=\"ui-corner-all ui-widget-content ui-state-active\" style=\"background-color: transparent; color: inherit;\">\n";
4949 echo _('Dossiers concernés par ce traitement');
4950 echo "\n</legend>";
4951 echo "\n<div class=\"fieldsetContent\" style=\"display: none;background-color: inherite\">";
4952
4953 if ($hasHidden === true) {
4954 echo "\n<br/>";
4955 echo "\n<p>";
4956 echo "\n<span class='text'>";
4957 echo _("Certains dossiers ont été omis de la liste ci-dessous car vous ne possédez pas les permissions nécessaires pour y accéder.");
4958 echo "</span>";
4959 echo "\n</p>";
4960 echo "\n<br/>";
4961 }
4962 foreach ($dossierTab as $dossier) {
4963
4964 $inst_da = $this->get_inst_common("dossier_autorisation", $dossier->getVal('dossier_autorisation'));
4965 $inst_datd = $this->get_inst_common("dossier_autorisation_type_detaille", $inst_da->getVal('dossier_autorisation_type_detaille'));
4966 $code_datd = $inst_datd->getVal('code');
4967
4968 $obj = "dossier_instruction";
4969 if ($code_datd === 'REC' OR $code_datd === 'REG') {
4970 $obj = "dossier_contentieux_tous_recours";
4971 }
4972 if ($code_datd === 'IN') {
4973 $obj = "dossier_contentieux_toutes_infractions";
4974 }
4975
4976 echo "\n<div class=\"bloc group\">";
4977 echo "\n<div class=\"field field-type-text\">";
4978
4979 echo "\n<p>";
4980 echo "\n<span class='text'>";
4981 echo "\n<a class=\"om-icon om-icon-16 consult-16\" title=\"" . _('Consulter') . "\"";
4982 echo "\n href=\"".OM_ROUTE_FORM."&obj=dossier_instruction&action=3&idx=";
4983 echo $dossier->getVal("dossier");
4984 echo "\">";
4985 echo "\n</a>";
4986
4987 echo "\n<a title=\""._("Consulter")."\" style=\"vertical-align:middle;\"";
4988 echo " href=\"".OM_ROUTE_FORM."&obj=";
4989 echo $obj;
4990 echo "&action=3&idx=";
4991 echo $dossier->getVal("dossier");
4992 echo "\">";
4993 echo $dossier->getVal("dossier_libelle");
4994 echo "\n</a>";
4995 echo "\n</span>";
4996 echo "\n</p>";
4997
4998 echo "\n</div>";
4999 echo "\n</div>";
5000 }
5001 echo "\n</div>";
5002 echo "\n</fieldset>";
5003 }
5004 echo "\n</div>";
5005 echo "\n</div>";
5006 }
5007 // Ouverture du formulaire
5008 echo "\t<form";
5009 echo " method=\"post\"";
5010 echo " id=\"suivi_envoi_lettre_rar_form\"";
5011 echo " action=\"\"";
5012 echo ">\n";
5013 // Paramétrage des champs du formulaire
5014 $champs = array("date", "liste_code_barres_instruction");
5015 // Création d'un nouvel objet de type formulaire
5016 $form = $this->f->get_inst__om_formulaire(array(
5017 "validation" => 0,
5018 "maj" => 0,
5019 "champs" => $champs,
5020 ));
5021 // Paramétrage du champ date du formulaire
5022 $form->setLib("date", _("Date")."* :");
5023 $form->setType("date", "date");
5024 $form->setOnchange("date", "fdate(this)");
5025 $form->setVal("date", ($date == "" ? date("d/m/Y") : $date));
5026 $form->setTaille("date", 10);
5027 $form->setMax("date", 10);
5028 // Paramétrage du champ liste_code_barres_instruction du formulaire
5029 $form->setLib("liste_code_barres_instruction", _("Liste des codes barres d'instructions scannes")."* :");
5030 $form->setType("liste_code_barres_instruction", "textarea");
5031 $form->setVal("liste_code_barres_instruction", $liste_code_barres_instruction);
5032 $form->setTaille("liste_code_barres_instruction", 20);
5033 $form->setMax("liste_code_barres_instruction", 20);
5034 // Affichage du formulaire
5035 $form->entete();
5036 $form->afficher($champs, 0, false, false);
5037 $form->enpied();
5038 // Affichage du bouton
5039 echo "\t<div class=\"formControls\">\n";
5040 $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
5041 echo "\t</div>\n";
5042 // Fermeture du formulaire
5043 echo "\t</form>\n";
5044 }
5045
5046 /**
5047 * VIEW - view_suivi_mise_a_jour_des_dates.
5048 *
5049 * Vu pour mettre à jour les dates de suivi de l'instruction.
5050 *
5051 * @return void
5052 */
5053 function view_suivi_mise_a_jour_des_dates() {
5054 // Vérification de l'accessibilité sur l'élément
5055 $this->checkAccessibility();
5056
5057 // XXX APP
5058
5059 $f = $this->f;
5060
5061 // Récupération des valeur passées en POST ou GET
5062 if($f->get_submitted_post_value("type_mise_a_jour") !== null) {
5063 $type_mise_a_jour = $f->get_submitted_post_value("type_mise_a_jour");
5064 } elseif($f->get_submitted_get_value('type_mise_a_jour') !== null) {
5065 $type_mise_a_jour = $f->get_submitted_get_value('type_mise_a_jour');
5066 } else {
5067 $type_mise_a_jour = "";
5068 }
5069 if($f->get_submitted_post_value('date') !== null) {
5070 $date = $f->get_submitted_post_value('date');
5071 } elseif($f->get_submitted_get_value('date') !== null) {
5072 $date = $f->get_submitted_get_value('date');
5073 } else {
5074 $date = "";
5075 }
5076 if($f->get_submitted_post_value('code_barres') !== null) {
5077 $code_barres = $f->get_submitted_post_value('code_barres');
5078 } elseif($f->get_submitted_get_value('code_barres') !== null) {
5079 $code_barres = $f->get_submitted_get_value('code_barres');
5080 } else {
5081 $code_barres = "";
5082 }
5083 // Booléen permettant de définir si un enregistrement à eu lieu
5084 $correct = false;
5085 // Booléen permettant de définir si les dates peuvent êtres enregistrées
5086 $date_error = false;
5087 // Champs date à mettre à jour
5088 $liste_champs=array();
5089
5090 // Si le formulaire a été validé
5091 if ($f->get_submitted_post_value('validation') !== null) {
5092 if(!empty($type_mise_a_jour) and !empty($date) and !empty($code_barres)) {
5093
5094 // Vérification de l'existence de l'instruction
5095 $sql = "SELECT instruction
5096 FROM ".DB_PREFIXE."instruction
5097 INNER JOIN ".DB_PREFIXE."dossier
5098 ON dossier.dossier=instruction.dossier
5099 INNER JOIN ".DB_PREFIXE."dossier_instruction_type
5100 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
5101 INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
5102 ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
5103 INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
5104 ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
5105 INNER JOIN ".DB_PREFIXE."groupe
5106 ON dossier_autorisation_type.groupe = groupe.groupe
5107 WHERE code_barres='".$this->f->db->escapesimple($code_barres)."'";
5108
5109 // Ajout d'un filtre sur les groupes auxquels l'utilisateur a accès
5110 $group_clause = array();
5111 foreach ($_SESSION["groupe"] as $key => $value) {
5112 $group_clause[$key] = "(groupe.code = '".$key."'";
5113 if($value["confidentiel"] !== true) {
5114 $group_clause[$key] .= " AND dossier_autorisation_type.confidentiel IS NOT TRUE";
5115 }
5116 $group_clause[$key] .= ")";
5117 }
5118 $conditions = implode(" OR ", $group_clause);
5119 $sql .= " AND (" . $conditions . ")";
5120
5121
5122 $res = $f->db->query($sql);
5123 $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
5124 $f->isDatabaseError($res);
5125
5126 if($res->numrows() == 1) {
5127 $liste_champs = explode(";", $type_mise_a_jour);
5128 // Mise à jour des dates après l'écran de verification
5129 if($f->get_submitted_post_value('is_valid') !== null and $f->get_submitted_post_value('is_valid') == "true") {
5130 $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
5131 $instr = $this->f->get_inst__om_dbform(array(
5132 "obj" => "instruction",
5133 "idx" => $row['instruction'],
5134 ));
5135 $valF = array();
5136 foreach($instr->champs as $id => $champ) {
5137 $valF[$champ] = $instr->val[$id];
5138 }
5139 $valF['date_evenement'] = $instr->dateDBToForm($valF['date_evenement']);
5140 $valF['archive_date_complet'] = $instr->dateDBToForm($valF['archive_date_complet']);
5141 $valF['archive_date_rejet'] = $instr->dateDBToForm($valF['archive_date_rejet']);
5142 $valF['archive_date_limite'] = $instr->dateDBToForm($valF['archive_date_limite']);
5143 $valF['archive_date_notification_delai'] = $instr->dateDBToForm($valF['archive_date_notification_delai']);
5144 $valF['archive_date_decision'] = $instr->dateDBToForm($valF['archive_date_decision']);
5145 $valF['archive_date_validite'] = $instr->dateDBToForm($valF['archive_date_validite']);
5146 $valF['archive_date_achevement'] = $instr->dateDBToForm($valF['archive_date_achevement']);
5147 $valF['archive_date_chantier'] = $instr->dateDBToForm($valF['archive_date_chantier']);
5148 $valF['archive_date_conformite'] = $instr->dateDBToForm($valF['archive_date_conformite']);
5149 $valF['archive_date_dernier_depot'] = $instr->dateDBToForm($valF['archive_date_dernier_depot']);
5150 $valF['archive_date_limite_incompletude'] = $instr->dateDBToForm($valF['archive_date_limite_incompletude']);
5151 $valF['date_finalisation_courrier'] = $instr->dateDBToForm($valF['date_finalisation_courrier']);
5152 $valF['date_envoi_signature'] = $instr->dateDBToForm($valF['date_envoi_signature']);
5153 $valF['date_retour_signature'] = $instr->dateDBToForm($valF['date_retour_signature']);
5154 $valF['date_envoi_rar'] = $instr->dateDBToForm($valF['date_envoi_rar']);
5155 $valF['date_retour_rar'] = $instr->dateDBToForm($valF['date_retour_rar']);
5156 $valF['date_envoi_controle_legalite'] = $instr->dateDBToForm($valF['date_envoi_controle_legalite']);
5157 $valF['date_retour_controle_legalite'] = $instr->dateDBToForm($valF['date_retour_controle_legalite']);
5158 $valF['archive_date_cloture_instruction'] = $instr->dateDBToForm($valF['archive_date_cloture_instruction']);
5159 $valF['archive_date_premiere_visite'] = $instr->dateDBToForm($valF['archive_date_premiere_visite']);
5160 $valF['archive_date_derniere_visite'] = $instr->dateDBToForm($valF['archive_date_derniere_visite']);
5161 $valF['archive_date_contradictoire'] = $instr->dateDBToForm($valF['archive_date_contradictoire']);
5162 $valF['archive_date_retour_contradictoire'] = $instr->dateDBToForm($valF['archive_date_retour_contradictoire']);
5163 $valF['archive_date_ait'] = $instr->dateDBToForm($valF['archive_date_ait']);
5164 $valF['archive_date_transmission_parquet'] = $instr->dateDBToForm($valF['archive_date_transmission_parquet']);
5165
5166 foreach(explode(";", $type_mise_a_jour) as $maj_date) {
5167 $valF[$maj_date]=$date;
5168 }
5169
5170 // Vérification de la finalisation du document
5171 // correspondant au code barres
5172 if($valF["om_final_instruction"] === 't' or
5173 $valF["lettretype"] == '') {
5174 $code_barres = "";
5175
5176 //Désactivation de l'autocommit
5177 $f->db->autoCommit(false);
5178
5179 //On modifie les valeurs de l'instruction
5180 $instr->setParameter('maj', 170);
5181 $instr->class_actions[170]["identifier"] =
5182 "mise à jour des dates (depuis le menu suivi des pièces)";
5183 $retour = $instr->modifier($valF, $f->db, DEBUG);
5184
5185 //Si une erreur s'est produite, on défait les modifications
5186 //qui ont été faites
5187 if (!$retour){
5188 $instr->undoValidation();
5189 }
5190 //Sinon, on valide en base de données les modifications
5191 else {
5192 $f->db->commit();
5193 }
5194
5195 // Variable correct retourné depuis la classe instruction
5196 $correct = $instr->correct;
5197
5198 // Si la modification sur l'instruction a échoué
5199 if ($correct === false) {
5200
5201 // Message d'erreur de la classe instruction
5202 $error = $instr->msg;
5203 }
5204
5205 } else {
5206 // Indique que le traitement est en erreur
5207 $correct = false;
5208 // Message d'erreur
5209 $error = sprintf(_("Le document n'est pas finalise."),
5210 "<span class='bold'>".$code_barres."</span>");
5211 }
5212 } else {
5213 // Récupération des infos du dossier
5214 $sqlInfo = "SELECT dossier.dossier_libelle,
5215 evenement.libelle as evenement,
5216 autorite_competente.code as autorite_competente_code,
5217 autorite_competente.libelle as autorite_competente,
5218 evenement.type as evenement_type,
5219 to_char(date_envoi_signature,'DD/MM/YYYY') as date_envoi_signature,
5220 to_char(date_retour_signature,'DD/MM/YYYY') as date_retour_signature,
5221 to_char(date_envoi_controle_legalite,'DD/MM/YYYY') as date_envoi_controle_legalite,
5222 to_char(date_retour_controle_legalite,'DD/MM/YYYY') as date_retour_controle_legalite,
5223 to_char(date_envoi_rar,'DD/MM/YYYY') as date_envoi_rar,
5224 to_char(date_retour_rar,'DD/MM/YYYY') as date_retour_rar
5225 FROM ".DB_PREFIXE."instruction
5226 INNER JOIN ".DB_PREFIXE."dossier ON
5227 dossier.dossier=instruction.dossier
5228 LEFT JOIN ".DB_PREFIXE."autorite_competente ON
5229 dossier.autorite_competente=autorite_competente.autorite_competente
5230 INNER JOIN ".DB_PREFIXE."evenement ON
5231 instruction.evenement=evenement.evenement
5232 WHERE code_barres='".$code_barres."'";
5233 $resInfo = $f->db->query($sqlInfo);
5234 $f->isDatabaseError($resInfo);
5235 $infos = $resInfo->fetchRow(DB_FETCHMODE_ASSOC);
5236
5237 // Vérification de la non modification des dates de suivi
5238 foreach(explode(";", $type_mise_a_jour) as $champ) {
5239 if($infos[$champ] != "" AND $infos[$champ] != $date) {
5240 $error = _("Les dates de suivis ne peuvent etre modifiees");
5241 $date_error = true;
5242 }
5243 }
5244 }
5245 } else {
5246 $error = _("Le numero saisi ne correspond a aucun code barres d'instruction.");
5247 }
5248
5249 } else {
5250 $error = _("Tous les champs doivent etre remplis.");
5251 }
5252 }
5253
5254 /**
5255 * Affichage des messages et du formulaire
5256 */
5257 // Affichage du message de validation ou d'erreur
5258 if (isset($message) && isset($message_class) && $message != "") {
5259 $f->displayMessage($message_class, $message);
5260 }
5261 // Affichage du message d'erreur
5262 if(!empty($error)) {
5263 $f->displayMessage("error", $error);
5264 }
5265
5266 // Affichage du message de validation de la saisie
5267 if($correct === true) {
5268 $f->displayMessage("ok", _("Saisie enregistree"));
5269 }
5270 // Ouverture du formulaire
5271 echo "\t<form";
5272 echo " method=\"post\"";
5273 echo " id=\"suivi_mise_a_jour_des_dates_form\"";
5274 echo " action=\"\"";
5275 echo ">\n";
5276 // Paramétrage des champs du formulaire
5277 if(isset($infos)) {
5278 $champs = array("type_mise_a_jour", "date", "code_barres", "dossier_libelle", "evenement"
5279 , "autorite_competente", "date_envoi_signature",
5280 "date_retour_signature", "date_envoi_controle_legalite",
5281 "date_retour_controle_legalite", "date_envoi_rar",
5282 "date_retour_rar", "is_valid");
5283 } else {
5284 $champs = array("type_mise_a_jour", "date", "code_barres");
5285 }
5286 // Création d'un nouvel objet de type formulaire
5287 $form = $this->f->get_inst__om_formulaire(array(
5288 "validation" => 0,
5289 "maj" => 0,
5290 "champs" => $champs,
5291 ));
5292 // Paramétrage des champs du formulaire
5293 // Parametrage du champ type_mise_a_jour
5294 $form->setLib("type_mise_a_jour", _("Date a mettre a jour")."* :");
5295 if(isset($infos)) {
5296 $form->setType("type_mise_a_jour", "selecthiddenstatic");
5297
5298 } else {
5299 $form->setType("type_mise_a_jour", "select");
5300
5301 }
5302 $form->setVal("type_mise_a_jour", $type_mise_a_jour);
5303 $contenu = array();
5304
5305 $contenu[0][0] = "date_envoi_signature";
5306 $contenu[1][0] = _("date d'envoi pour signature Mairie/Prefet");
5307
5308 $contenu[0][1] = "date_retour_signature";
5309 $contenu[1][1] = _("date de retour de signature Mairie/Prefet");
5310
5311 $contenu[0][2] = "date_retour_signature;date_envoi_controle_legalite";
5312 $contenu[1][2] = _("date de retour de signature + Envoi controle legalite");
5313
5314 $contenu[0][3] = "date_envoi_controle_legalite";
5315 $contenu[1][3] = _("date d'envoi au controle de legalite");
5316
5317 $contenu[0][4] = "date_retour_controle_legalite";
5318 $contenu[1][4] = _("date de retour de controle de legalite");
5319
5320 $contenu[0][5] = "date_retour_rar";
5321 $contenu[1][5] = _("date de retour de l'AR");
5322
5323 $form->setSelect("type_mise_a_jour", $contenu);
5324
5325 // Parametrage du champ date
5326 $form->setLib("date", _("Date")."* :");
5327 if(isset($infos)) {
5328 $form->setType("date", "hiddenstaticdate");
5329
5330 } else {
5331 $form->setType("date", "date");
5332 }
5333 $form->setVal("date", $date);
5334 $form->setTaille("date", 10);
5335 $form->setMax("date", 10);
5336
5337 // Parametrage du champ code_barres
5338 $form->setLib("code_barres", _("Code barres d'instruction")."* :");
5339 if(isset($infos)) {
5340 $form->setType("code_barres", "hiddenstatic");
5341 } else {
5342 $form->setType("code_barres", "text");
5343 }
5344 $form->setVal("code_barres", $code_barres);
5345 $form->setTaille("code_barres", 20);
5346 $form->setMax("code_barres", 20);
5347
5348 // Ajout des infos du dossier correspondantes à l'instruction séléctionnée
5349 if(isset($infos)) {
5350
5351 // Tous les champs sont défini par defaut à static
5352 foreach ($infos as $key => $value) {
5353 $form->setType($key, "static");
5354 if(in_array($key, $liste_champs)) {
5355 $form->setVal($key, $date);
5356 } else {
5357 $form->setVal($key, $value);
5358 }
5359 }
5360
5361 // Les champs dont on viens de définir la valeur sont en gras
5362 foreach ($liste_champs as $value) {
5363 $form->setBloc($value,'DF',"",'bold');
5364 }
5365
5366 // Parametrage du champ dossier
5367 $form->setLib("dossier_libelle", _("dossier_libelle")." :");
5368 $form->setType("dossier_libelle", "static");
5369 $form->setVal("dossier_libelle", $infos['dossier_libelle']);
5370
5371 // Parametrage du champ evenement
5372 $form->setLib("evenement", _("evenement")." :");
5373 $form->setType("evenement", "static");
5374 $form->setVal("evenement", $infos['evenement']);
5375
5376 // Parametrage du champ autorite_competente
5377 $form->setLib("autorite_competente", _("Autorite competente")." :");
5378 $form->setType("autorite_competente", "static");
5379 $form->setVal("autorite_competente", $infos['autorite_competente']);
5380
5381 // Parametrage des libellés d'envoi avec RAR
5382 $form->setLib("date_envoi_rar", _("date_envoi_rar")." :");
5383 $form->setLib("date_retour_rar", _("date_retour_rar")." :");
5384
5385 $form->setLib("date_envoi_signature", _("date_envoi_signature")." :");
5386 $form->setLib("date_retour_signature", _("date_retour_signature")." :");
5387 $form->setLib("date_envoi_controle_legalite", _("date_envoi_controle_legalite")." :");
5388 $form->setLib("date_retour_controle_legalite", _("date_retour_controle_legalite")." :");
5389 // Configuration des libellé en fonction de l'autorité compétente
5390 if($infos['autorite_competente_code'] == 'ETAT') {
5391 $form->setType("date_envoi_controle_legalite", "hiddendate");
5392 $form->setType("date_retour_controle_legalite", "hiddendate");
5393 }
5394
5395 // Ajout d'un champ hidden permettant de savoir que le formulaire précédant est celui de vérification
5396 $form->setLib("is_valid", _("Valide")." :");
5397 $form->setType("is_valid", "hidden");
5398 $form->setVal("is_valid", 'true');
5399
5400 $form->setFieldset('dossier_libelle','D',_('Synthese'));
5401 $form->setFieldset('is_valid','F');
5402
5403 }
5404
5405
5406 // Création du fieldset regroupant les champs permettant la mise à jour des date
5407 $form->setFieldset('type_mise_a_jour','D',_('Mise a jour'));
5408 $form->setFieldset('code_barres','F');
5409 // Affichage du formulaire
5410 $form->entete();
5411 $form->afficher($champs, 0, false, false);
5412 $form->enpied();
5413 // Affichage du bouton
5414 echo "\t<div class=\"formControls\">\n";
5415 //
5416 if(!$date_error) {
5417 $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
5418 }
5419 // Si pas sur l'écran de validation
5420 if(isset($infos)) {
5421 echo "<a class=\"retour\" href=\"".OM_ROUTE_FORM."&obj=instruction_suivi_mise_a_jour_des_dates&action=170&idx=0";
5422 echo "&amp;type_mise_a_jour=".$type_mise_a_jour."&amp;date=".$date."&amp;code_barres=".$code_barres;
5423 echo "\">Retour</a>";
5424 }
5425 echo "\t</div>\n";
5426 // Fermeture du formulaire
5427 echo "\t</form>\n";
5428 }
5429
5430 /**
5431 * [view_pdf_lettre_rar description]
5432 *
5433 * @return [type] [description]
5434 */
5435 function view_pdf_lettre_rar() {
5436 // Vérification de l'accessibilité sur l'élément
5437 $this->checkAccessibility();
5438
5439 // XXX APP
5440
5441 $f = $this->f;
5442
5443 $f->disableLog();
5444
5445 if($f->get_submitted_get_value('liste') != null) {
5446 $listeCodeBarres = explode(',',$f->get_submitted_get_value('liste'));
5447
5448 // Classe permettant la mise en page de l'édition pdf
5449 require_once "../obj/pdf_lettre_rar.class.php";
5450 $pdf_lettre_rar = new pdf_lettre_rar('P', 'mm', 'A4');
5451 // Initialisation de la mise en page
5452 $pdf_lettre_rar->init($f);
5453
5454 foreach ($listeCodeBarres as $code_barres) {
5455
5456 // On récupère le dossier
5457 $sql = "SELECT dossier
5458 FROM " . DB_PREFIXE . "instruction
5459 WHERE code_barres = '" . $code_barres . "'";
5460 $dossier = $this->db->getOne($sql);
5461 $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
5462 $this->f->isDatabaseError($dossier);
5463 $inst_dossier = $this->f->get_inst__om_dbform(array(
5464 "obj" => "dossier",
5465 "idx" => $dossier,
5466 ));
5467
5468 // En fonction du type de dossier, on récupère un demandeur différent dans les requêtes
5469 $groupe = $inst_dossier->get_type_affichage_formulaire();
5470 switch ($groupe) {
5471 case 'CTX IN':
5472 $sql_demandeur = "(lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='plaignant')";
5473 break;
5474 case 'CTX RE':
5475 $sql_demandeur = "(lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='requerant')";
5476 break;
5477 case 'ADS':
5478 case 'DPC':
5479 default:
5480 $sql_demandeur = "((lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='petitionnaire') OR demandeur.type_demandeur='delegataire')";
5481 break;
5482 }
5483
5484 // Test si l'evenement est de type arrete et si un délégataire a été nommé
5485 $sql = "SELECT
5486 dossier.dossier_libelle,
5487 evenement.type,
5488 count(lien_dossier_demandeur) as nbdemandeur,
5489 CASE
5490 WHEN division.libelle IS NOT NULL AND phase.code IS NOT NULL
5491 THEN CONCAT(phase.code, ' - ', division.libelle)
5492 ELSE
5493 phase.code
5494 END AS code_phase
5495 FROM ".DB_PREFIXE."instruction
5496 LEFT JOIN ".DB_PREFIXE."dossier
5497 ON instruction.dossier = dossier.dossier
5498 LEFT JOIN ".DB_PREFIXE."division
5499 ON dossier.division = division.division
5500 INNER JOIN ".DB_PREFIXE."evenement ON
5501 instruction.evenement=evenement.evenement
5502 LEFT JOIN ".DB_PREFIXE."phase
5503 ON evenement.phase = phase.phase
5504 inner JOIN ".DB_PREFIXE."lien_dossier_demandeur ON
5505 instruction.dossier=lien_dossier_demandeur.dossier
5506 inner join ".DB_PREFIXE."demandeur on
5507 demandeur.demandeur=lien_dossier_demandeur.demandeur
5508 WHERE code_barres='".$code_barres."'
5509 AND " . $sql_demandeur . "
5510 GROUP BY dossier.dossier_libelle, evenement.type, phase.code, division.libelle";
5511
5512 $res = $f->db->query($sql);
5513 $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
5514 $f->isDatabaseError($res);
5515 $testDemandeur = $res->fetchrow(DB_FETCHMODE_ASSOC);
5516
5517
5518 // Recuperation de l'adresse de destination
5519 $sqlAdresse = "SELECT
5520 CASE WHEN demandeur.qualite='particulier'
5521 THEN TRIM(CONCAT_WS(' ', pc.libelle, demandeur.particulier_nom, demandeur.particulier_prenom))
5522 ELSE TRIM(demandeur.personne_morale_denomination)
5523 END as ligne1,
5524 CASE WHEN demandeur.qualite='personne_morale'
5525 THEN TRIM(demandeur.personne_morale_raison_sociale)
5526 ELSE ''
5527 END as ligne1_1,
5528 CASE WHEN demandeur.qualite='personne_morale' AND (demandeur.personne_morale_nom IS NOT NULL OR demandeur.personne_morale_prenom IS NOT NULL)
5529 THEN TRIM(CONCAT_WS(' ', 'rep. par', demandeur.personne_morale_nom, demandeur.personne_morale_prenom))
5530 ELSE ''
5531 END as ligne1_2,
5532 trim(concat(demandeur.numero,' ',demandeur.voie)) as ligne2,
5533 CASE demandeur.complement
5534 WHEN null THEN ''
5535 ELSE trim(demandeur.complement)
5536 END as ligne3,
5537 CASE demandeur.lieu_dit
5538 WHEN null THEN ''
5539 ELSE trim(demandeur.lieu_dit)
5540 END as ligne4,
5541 CONCAT_WS(' ', demandeur.code_postal, demandeur.localite,
5542 (CASE WHEN demandeur.bp IS NOT NULL
5543 THEN CONCAT_WS(' ', 'BP', demandeur.bp)
5544 ELSE ''
5545 END),
5546 (CASE WHEN demandeur.cedex IS NOT NULL
5547 THEN CONCAT_WS(' ', 'CEDEX', demandeur.cedex)
5548 ELSE ''
5549 END))
5550 as ligne5,
5551 code_barres as code_barres
5552 FROM ".DB_PREFIXE."instruction
5553 INNER JOIN ".DB_PREFIXE."dossier ON dossier.dossier = instruction.dossier
5554 INNER JOIN ".DB_PREFIXE."lien_dossier_demandeur ON dossier.dossier = lien_dossier_demandeur.dossier
5555 INNER JOIN ".DB_PREFIXE."demandeur ON lien_dossier_demandeur.demandeur = demandeur.demandeur
5556 LEFT OUTER JOIN ".DB_PREFIXE."civilite as pc ON demandeur.particulier_civilite = pc.civilite OR demandeur.personne_morale_civilite = pc.civilite
5557 WHERE instruction.code_barres ='".$code_barres."'";
5558
5559 // Envoi pour delegataire ou petitionnaire principal selon le type d'evenement
5560 if($testDemandeur['type'] != 'arrete' AND $testDemandeur['nbdemandeur'] > 1) {
5561 $sqlAdresse .= " AND demandeur.type_demandeur='delegataire'";
5562 } else {
5563 $sqlAdresse .= " AND demandeur.type_demandeur='petitionnaire' AND lien_dossier_demandeur.petitionnaire_principal IS TRUE";
5564 }
5565
5566 $resAdresse = $f->db->query($sqlAdresse);
5567 $adresse_dest = $resAdresse->fetchrow(DB_FETCHMODE_ASSOC);
5568 $f->addToLog(__METHOD__.": db->query(\"".$sqlAdresse."\")", VERBOSE_MODE);
5569 $f->isDatabaseError($resAdresse);
5570
5571 // Création adresse destinataire sans ligne vide
5572 $adresse_destinataire = array();
5573 if (!empty($adresse_dest['ligne1'])) {
5574 $adresse_destinataire[] = $adresse_dest['ligne1'];
5575 }
5576 if (!empty($adresse_dest['ligne1_1'])) {
5577 $adresse_destinataire[] = $adresse_dest['ligne1_1'];
5578 }
5579 if (!empty($adresse_dest['ligne1_2'])) {
5580 $adresse_destinataire[] = $adresse_dest['ligne1_2'];
5581 }
5582 $adresse_destinataire[] = $adresse_dest['ligne2'];
5583 if (!empty($adresse_dest['ligne3'])) {
5584 $adresse_destinataire[] = $adresse_dest['ligne3'];
5585 }
5586 if (!empty($adresse_dest['ligne4'])) {
5587 $adresse_destinataire[] = $adresse_dest['ligne4'];
5588 }
5589 $adresse_destinataire[] = $adresse_dest['ligne5'];
5590
5591 // Création du champ specifique
5592 $specifique_content = array();
5593 $specifique_content[] = $adresse_dest['ligne1'];
5594 $specifique_content[] = $adresse_dest['ligne1_1'];
5595 $specifique_content[] = $adresse_dest['ligne1_2'];
5596 $specifique_content[] = $testDemandeur['dossier_libelle'];
5597 $specifique_content[] = "|||||".$adresse_dest['code_barres']."|||||";
5598 unset($adresse_dest['code_barres']);
5599 // Ajout d'une page aux pdf
5600 $pdf_lettre_rar->addLetter($adresse_destinataire, $specifique_content, $testDemandeur['code_phase']);
5601
5602 }
5603 $pdf_output = $pdf_lettre_rar->output("lettre_rar".date("dmYHis").".pdf","S");
5604 $om_edition = $this->f->get_inst__om_edition();
5605 $om_edition->expose_pdf_output($pdf_output, "lettre_rar".date("dmYHis").".pdf");
5606 }
5607 }
5608
5609 /**
5610 * VIEW - view_bordereau_envoi_maire.
5611 *
5612 * Formulaire demandant :
5613 * - le code-barres de l'événement d'instruction
5614 * - la date d'envoi du courrier pour signature par le maire
5615 *
5616 * Lors de la validation :
5617 * => met à jour cette date dans l'événement d'instruction
5618 * => crée un lien permettant de générer en PDF le bordereau
5619 *
5620 * @return void
5621 */
5622 function view_bordereau_envoi_maire() {
5623 // Vérification de l'accessibilité sur l'élément
5624 $this->checkAccessibility();
5625
5626 // Récupération des valeur passées en POST ou GET
5627 $code_barres = "";
5628 if($this->f->get_submitted_post_value('code_barres') !== null) {
5629 $code_barres = $this->f->get_submitted_post_value('code_barres');
5630 } elseif($this->f->get_submitted_get_value('code_barres')!==null) {
5631 $code_barres = $this->f->get_submitted_get_value('code_barres');
5632 }
5633 $date = "";
5634 if($this->f->get_submitted_post_value('date') !== null) {
5635 $date = $this->f->get_submitted_post_value('date');
5636 } elseif($this->f->get_submitted_get_value('date') !== null) {
5637 $date = $this->f->get_submitted_get_value('date');
5638 }
5639 $validation = 0;
5640 if($this->f->get_submitted_post_value('validation') !== null) {
5641 $validation = $this->f->get_submitted_post_value('validation');
5642 } elseif($this->f->get_submitted_get_value('validation') !== null) {
5643 $validation = $this->f->get_submitted_get_value('validation');
5644 }
5645
5646 // Si le formulaire a été validé
5647 if ($this->f->get_submitted_post_value('validation') !== null) {
5648 // Tous les champs doivent obligatoirement être remplis
5649 if (!empty($date) && !empty($code_barres)) {
5650 $date_en = $this->dateDB($date);
5651 // Si date valide
5652 if ($date_en != "") {
5653 $id_instruction = $this->get_instruction_by_barcode($code_barres);
5654 // Si un événement d'instruction a été trouvé pour ce code-barres
5655 if ($id_instruction !== null) {
5656 $ret = $this->update_date_envoi_signature($id_instruction, $date_en);
5657 // Si mise à jour réussie de la date d'envoi du courrier
5658 // pour signature par l'autorité compétente
5659 if($ret === true) {
5660 // Message de validation avec lien PDF
5661 $message_class = "valid";
5662 $message = '&bullet; '._("Veuillez cliquer sur le lien ci-dessous pour telecharger votre bordereau");
5663 $message .= " : <br/><br/>";
5664 $message .= "<a class='om-prev-icon pdf-16'";
5665 $message .= " id=\"generer_bordereau_envoi_maire\"";
5666 $message .= " title=\""._("Bordereau")."\"";
5667 $message .= " href='".OM_ROUTE_FORM."&obj=instruction";
5668 $message .= "&action=200";
5669 $message .= "&idx=".$id_instruction."'";
5670 $message .= " target='_blank'>";
5671 $message .= _("Bordereau d'envoi au maire");
5672 $message .= "</a><br/><br/>";
5673 $message .= '&bullet; '._("Rappel des informations saisies")." :<br/><br/>";
5674 $message .= _("Code du courrier")." : ".$code_barres."<br/>";
5675 $message .= _("Date d'envoi du courrier pour signature par le maire")." : ".$date;
5676
5677 } else {
5678 // Message d'erreur
5679 $message_class = "error";
5680 $message = sprintf(_("Erreur lors de la mise a jour de l'evenement d'instruction correspondant au code barres %s."),
5681 $code_barres);
5682 }
5683 }
5684 else {
5685 $message_class = "error";
5686 $message = _("Le numero saisi ne correspond a aucun code-barres d'evenement d'instruction.");
5687 }
5688 }
5689 else {
5690 $message_class = "error";
5691 $message = _("La date est invalide.");
5692 }
5693 } else {
5694 $message_class = "error";
5695 $message = _("Tous les champs doivent etre remplis.");
5696 }
5697 }
5698
5699 /**
5700 * Affichage des messages et du formulaire
5701 */
5702
5703 // Affichage du message de validation ou d'erreur
5704 if (isset($message) && isset($message_class) && $message != "") {
5705 $this->f->displayMessage($message_class, $message);
5706 }
5707
5708 // Ouverture du formulaire
5709 $datasubmit = $this->getDataSubmit();
5710 echo "\n<!-- ########## START DBFORM ########## -->\n";
5711 echo "<form";
5712 echo " id=\"bordereau_envoi_maire\"";
5713 echo " method=\"post\"";
5714 echo " name=\"f1\"";
5715 echo " action=\"";
5716 echo $datasubmit;
5717 echo "\"";
5718 echo ">\n";
5719
5720 // Paramétrage des champs du formulaire
5721 $champs = array("code_barres","date");
5722
5723 // Création d'un nouvel objet de type formulaire
5724 $form = $this->f->get_inst__om_formulaire(array(
5725 "validation" => 0,
5726 "maj" => 0,
5727 "champs" => $champs,
5728 ));
5729
5730 $template_required_label = '%s *';
5731 // Parametrage du champ code_barres
5732 $form->setLib("code_barres", sprintf($template_required_label,_("Code du courrier")));
5733 $form->setType("code_barres", "text");
5734 $form->setVal("code_barres", $code_barres);
5735 $form->setTaille("code_barres", 20);
5736 $form->setMax("code_barres", 20);
5737 // Parametrage du champ date
5738 $form->setLib("date", sprintf($template_required_label,_("Date d'envoi du courrier pour signature par le maire")));
5739 $form->setType("date", "date") ;
5740 if (empty($date)) {
5741 $date = date('d/m/Y');
5742 }
5743 $form->setVal("date", $date);
5744 $form->setTaille("date", 10);
5745 $form->setMax("date", 10);
5746
5747 // Création du bloc regroupant les champs
5748 $form->setBloc('code_barres','D');
5749 $form->setBloc('date','F');
5750 // Affichage du formulaire
5751 $form->entete();
5752 $form->afficher($champs, 0, false, false);
5753 $form->enpied();
5754 // Affichage du bouton
5755 printf("\t<div class=\"formControls\">\n");
5756 //
5757 $this->f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
5758 printf("\t</div>\n");
5759 // Fermeture du formulaire
5760 printf("\t</form>\n");
5761 }
5762
5763 /**
5764 * VIEW - view_bordereau_envoi_maire.
5765 *
5766 * PDF de bordereau d'envoi au maire pour l'événement d'instruction instancié
5767 *
5768 * @return [void]
5769 */
5770 function view_generate_bordereau_envoi_maire() {
5771 // Vérification de l'accessibilité sur l'élément
5772 $this->checkAccessibility();
5773 // Récupération de la collectivité du dossier d'instruction
5774 $collectivite_di = $this->get_dossier_instruction_om_collectivite();
5775 // Récupération de ses paramètres
5776 $collectivite = $this->f->getCollectivite($collectivite_di);
5777 // Génération du PDF
5778 $result = $this->compute_pdf_output('etat', 'communaute_bordereau_envoi_maire', $collectivite, $this->getVal(($this->clePrimaire)));
5779 // Affichage du PDF
5780 $this->expose_pdf_output(
5781 $result['pdf_output'],
5782 $result['filename']
5783 );
5784 }
5785
5786 /**
5787 * Retourne l'événement d'instruction dont on donne le code-barres, avec un filtre
5788 * pour exclure les dossiers du groupe contentieux.
5789 *
5790 * @param [string] $barcode numéro du code-barres
5791 * @return [mixed] ID de son instruction ou null si aucun code
5792 */
5793 function get_instruction_by_barcode($barcode) {
5794 // Begin
5795 $this->begin_treatment(__METHOD__);
5796 // Vérification de l'existence de l'événement d'instruction
5797 // pour le code-barres donné, en excluant les dossiers liés au groupe CTX
5798 $sql = "SELECT instruction
5799 FROM ".DB_PREFIXE."instruction
5800 INNER JOIN ".DB_PREFIXE."dossier
5801 ON dossier.dossier=instruction.dossier
5802 INNER JOIN ".DB_PREFIXE."dossier_instruction_type
5803 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
5804 INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
5805 ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
5806 INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
5807 ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
5808 INNER JOIN ".DB_PREFIXE."groupe
5809 ON dossier_autorisation_type.groupe = groupe.groupe
5810 AND groupe.code != 'CTX'
5811 WHERE code_barres = '".$this->f->db->escapesimple($barcode)."'";
5812 $res = $this->f->db->getOne($sql);
5813 $this->f->addToLog(__METHOD__." : db->getOne(\"".$sql."\")", VERBOSE_MODE);
5814 $this->f->isDatabaseError($res);
5815 // Retourne résultat
5816 return $this->end_treatment(__METHOD__, $res);
5817 }
5818
5819 /**
5820 * Met à jour le champ date d'envoi signature
5821 * avec la date fournie et pour l'instruction donnée
5822 *
5823 * @param [string] $id ID de l'événement d'instruction
5824 * @param [string] $date date au format EN
5825 * @return [boolean] true si mise à jour avec succès
5826 */
5827 function update_date_envoi_signature($id, $date) {
5828 // Préparation du tableau
5829 $valF = array();
5830 $valF['date_envoi_signature'] = $date;
5831 // Begin
5832 $this->begin_treatment(__METHOD__);
5833 // Requête
5834 $res = $this->db->autoExecute(
5835 DB_PREFIXE.$this->table,
5836 $valF,
5837 DB_AUTOQUERY_UPDATE,
5838 $this->getCle($id)
5839 );
5840 // S'il y a eu une erreur
5841 if (database::isError($res, true)) {
5842 $this->end_treatment(__METHOD__, false);
5843 }
5844 //
5845 return $this->end_treatment(__METHOD__, true);
5846 }
5847
5848 /**
5849 * Méthode permettant de définir des valeurs à envoyer en base après
5850 * validation du formulaire d'ajout.
5851 * @param array $val tableau des valeurs retournées par le formulaire
5852 */
5853 function setValFAjout($val = array()) {
5854 // Mise à jour du flag created_by_commune lors d'un changement de décision
5855 // par un utilisateur de commune sur un dossier instruit par la comcom
5856 if ($this->isInstrCanChangeDecision($this->valF["dossier"])) {
5857 $this->valF['created_by_commune'] = true;
5858 }
5859
5860 //
5861 if ($this->evenement_has_an_edition($this->valF['evenement']) === false) {
5862 if (isset($this->valF['flag_edition_integrale']) === true) {
5863 unset($this->valF['flag_edition_integrale']);
5864 }
5865 if (isset($this->valF['signataire_arrete']) === true) {
5866 unset($this->valF['signataire_arrete']);
5867 }
5868 }
5869 }
5870
5871
5872 /**
5873 * Récupère l'instance d'un événement de workflow.
5874 *
5875 * @param mixed $evenement Identifiant de l'événement.
5876 *
5877 * @return object
5878 */
5879 function get_inst_evenement($evenement = null) {
5880 //
5881 return $this->get_inst_common("evenement", $evenement);
5882 }
5883
5884 /**
5885 * Logue l'action de l'instruction dans son DI.
5886 *
5887 * @param string $id Clé primaire de l'instruction.
5888 * @param array $val Valeurs de l'instruction.
5889 *
5890 * @return bool Vrai si traitement effectué avec succès
5891 */
5892 private function add_log_to_dossier($id, array $val) {
5893 $maj = $this->getParameter("maj");
5894 // Action = Trace par défaut
5895 $action = $this->get_backtrace();
5896 // Action = Identifant de l'action si contexte connu
5897 if (empty($maj) === false
5898 || (empty($maj) === true && $maj === 0)) {
5899 $action = $this->get_action_param($maj, 'identifier');
5900 if ($action === 'modifier_suivi') {
5901 $action = "modifier (via l'action suivi des dates)";
5902 }
5903 if ($action === 'notifier_commune'
5904 && isset($val['mails_destinataires']) === true) {
5905 $action = "notification de la commune (courriels : ";
5906 $action .= $val['mails_destinataires'].")";
5907 }
5908 }
5909 // Création du log
5910 $log = array(
5911 'date' => date('Y-m-d H:i:s'),
5912 'user' => $_SESSION['login'],
5913 'action' => $action,
5914 'values' => array(
5915 'date_evenement' => $this->dateDB($val['date_evenement']),
5916 'date_retour_rar' => $this->dateDB($val['date_retour_rar']),
5917 'date_retour_signature' => $this->dateDB($val['date_retour_signature']),
5918 'evenement' => $val['evenement'],
5919 'action' => $val['action'],
5920 'instruction' => $id,
5921 'etat' => $val['etat'],
5922 ),
5923 );
5924 // Ajout du log
5925 $di = $this->get_inst_dossier($val['dossier']);
5926 $ret = $di->add_log_instructions($log);
5927 if ($ret === false) {
5928 $this->correct = false;
5929 $this->msg = '';
5930 $this->addToMessage($di->msg);
5931 }
5932 return $ret;
5933 }
5934
5935
5936 /**
5937 * Retourne le contexte de déboguage formaté en HTML.
5938 *
5939 * @return string Une ligne par trace
5940 */
5941 private function get_backtrace() {
5942 $trace = debug_backtrace();
5943 $backtrace = '';
5944 $i = 1;
5945 foreach ($trace as $key => $value) {
5946 $func = $trace[$key]['function'];
5947 // On ne s'autolog pas
5948 if ($func === 'get_backtrace'
5949 || $func === 'add_log_to_dossier') {
5950 continue;
5951 }
5952 $backtrace .= $i.') ';
5953 // Si dans une classe
5954 if (isset($trace[$key]['class']) === true
5955 && empty($trace[$key]['class']) === false) {
5956 $backtrace .= $trace[$key]['class'].'->'.$func;
5957 }
5958 // Si procédural
5959 else {
5960 $file = $trace[$key]['file'];
5961 $line = $trace[$key]['line'];
5962 $truncated_file = $this->f->get_relative_path($file);
5963 if ($truncated_file !== false) {
5964 $file = $truncated_file;
5965 }
5966 $backtrace .= $func.' IN<br/>&nbsp;&nbsp;&nbsp;&nbsp; '.$file.':'.$line;
5967 }
5968 $backtrace .= '<br/>';
5969 $i++;
5970 }
5971 return $backtrace;
5972 }
5973
5974 /**
5975 * CONDITION - is_notifiable.
5976 *
5977 * Condition pour afficher l'action notifier_commune.
5978 *
5979 * @return boolean
5980 */
5981 public function is_notifiable() {
5982 // L'instruction doit être finalisée, ce qui revient à dire
5983 // définalisable sans bypass
5984 if ($this->is_unfinalizable_without_bypass() === false) {
5985 return false;
5986 }
5987 // La collectivité de l'utilisateur doit être de niveau multi
5988 if ($this->f->has_collectivite_multi() === false) {
5989 return false;
5990 }
5991 // Le paramètre multi de l'objet du courriel doit exister
5992 if ($this->f->getParameter('param_courriel_de_notification_commune_objet_depuis_instruction') === NULL) {
5993 return false;
5994 }
5995 // Le paramètre multi du modèle du courriel doit exister
5996 if ($this->f->getParameter('param_courriel_de_notification_commune_modele_depuis_instruction') === NULL) {
5997 return false;
5998 }
5999 // A ce stade toutes les conditions sont satisfaites
6000 return true;
6001 }
6002
6003 /**
6004 * TREATMENT - notifier_commune.
6005 *
6006 * Notifie aux communes et par courriel la finalisation d'une instruction.
6007 *
6008 * @return boolean
6009 */
6010 public function notifier_commune() {
6011 // Cette méthode permet d'exécuter une routine en début des méthodes
6012 // dites de TREATMENT.
6013 $this->begin_treatment(__METHOD__);
6014 // Définition des paramètres
6015 $p_objet = 'param_courriel_de_notification_commune_objet_depuis_instruction';
6016 $p_modele = 'param_courriel_de_notification_commune_modele_depuis_instruction';
6017 $p_courriel = 'param_courriel_de_notification_commune';
6018 // Définition des variables de substitution
6019 $id_di = $this->getVal('dossier');
6020 $id_inst = $this->getVal($this->clePrimaire);
6021 // Instanciation du DI
6022 $di = $this->get_inst_dossier($id_di);
6023 // Récupération du paramétrage de la collectivité du dossier
6024 $collectivite_di = $di->getVal('om_collectivite');
6025 $params_mono = $this->f->getCollectivite($collectivite_di);
6026 // Récupération du paramétrage de la collectivité multi
6027 $collectivite_multi = $this->f->get_idx_collectivite_multi();
6028 $params_multi = $this->f->getCollectivite($collectivite_multi);
6029 // Vérification de l'objet (obligatoirement multi)
6030 $objet = null;
6031 if (isset($params_multi[$p_objet]) === true
6032 && $params_multi[$p_objet] !== '') {
6033 $objet = $params_multi[$p_objet];
6034 }
6035 // Vérification du modèle mono en priorité
6036 $modele = null;
6037 if (isset($params_mono[$p_modele]) === true
6038 && $params_mono[$p_modele] !== '') {
6039 $modele = $params_mono[$p_modele];
6040
6041 }
6042 // Sinon vérification du modèle multi
6043 if ($modele === null
6044 && isset($params_multi[$p_modele]) === true
6045 && $params_multi[$p_modele] !== '') {
6046 $modele = $params_multi[$p_modele];
6047 }
6048 // Vérification des adresses de courriel mono
6049 $courriels_valides = array();
6050 $courriels_invalides = array();
6051 if (isset($params_mono[$p_courriel]) === true
6052 && $params_mono[$p_courriel] !== '') {
6053 // Un mail par ligne
6054 $adresses = explode("\n", $params_mono[$p_courriel]);
6055 // Vérification de la validité de chaque mail avec preg_match
6056 foreach ($adresses as $adresse) {
6057 $adresse = trim($adresse);
6058 if ($this->f->checkValidEmailAddress($adresse) === 1) {
6059 $courriels_valides[] = $adresse;
6060 } else {
6061 $courriels_invalides[] = $adresse;
6062 }
6063 }
6064 }
6065 // Vérification du paramétrage global :
6066 // on stoppe le traitement si au moins un paramètre est incorrect
6067 if ($objet === null
6068 || $modele === null
6069 || count($courriels_valides) === 0
6070 || count($courriels_invalides) > 0) {
6071 // On construit le message d'erreur adéquat
6072 $this->addToMessage(_('Erreur de paramétrage :'));
6073 if ($objet === null) {
6074 $this->addToMessage(_("* l'objet du courriel envoyé aux communes est vide"));
6075 }
6076 if ($modele === null) {
6077 $this->addToMessage(_("* le modèle du courriel envoyé aux communes est vide"));
6078 }
6079 if (count($courriels_valides) === 0) {
6080 $this->addToMessage(_("* aucun courriel valide de destinataire de la commune"));
6081 }
6082 if (count($courriels_invalides) > 0) {
6083 $courriels_invalides = implode(', ', $courriels_invalides);
6084 $this->addToMessage(_("* un ou plusieurs courriels des destinataires de la commune sont invalides : ").$courriels_invalides);
6085 }
6086 $this->addToMessage(_("Veuillez contacter votre administrateur."));
6087 return $this->end_treatment(__METHOD__, false);
6088 }
6089 // Remplacement des variables de substitution
6090 $objet = str_replace('<DOSSIER_INSTRUCTION>', $id_di, $objet);
6091 $modele = $this->formater_modele($modele, $id_di, $id_inst);
6092 // Exécution du traitement d'envoi du/des mail(s)
6093 $fails = array();
6094 foreach ($courriels_valides as $email) {
6095 if ($this->f->sendMail(
6096 iconv("UTF-8", "CP1252", $objet),
6097 iconv("UTF-8", "CP1252", $modele),
6098 iconv("UTF-8", "CP1252", $email)) === false) {
6099 $fails[] = $email;
6100 }
6101 }
6102 // Si échec message d'erreur et arrêt du traitement
6103 if (count($fails) > 0) {
6104 $fails = implode(', ', $fails);
6105 $this->addToMessage(_("Erreur lors de l'envoi du courriel aux destinataires : ").$fails);
6106 $this->addToMessage(_("Veuillez contacter votre administrateur."));
6107 return $this->end_treatment(__METHOD__, false);
6108 }
6109 // Ajout du log
6110 $this->setValFFromVal();
6111 $val_inst = $this->valF;
6112 $val_inst['mails_destinataires'] = implode(', ', $courriels_valides);
6113 if ($this->add_log_to_dossier($id_inst, $val_inst) === false) {
6114 $this->addToMessage(_("Erreur lors de la notification."));
6115 $this->addToMessage(_("Veuillez contacter votre administrateur."));
6116 return $this->end_treatment(__METHOD__, false);
6117 }
6118 // Message de validation
6119 $this->addToMessage(_('La commune a été notifiée.'));
6120 return $this->end_treatment(__METHOD__, true);
6121 }
6122
6123 /**
6124 * Formatte le corps du courriel notifié aux communes
6125 *
6126 * @param string $modele template du modèle du courriel
6127 * @param string $id_di clé primaire du DI
6128 * @param string $id_inst clé primaire de l'instruction
6129 * @return string corps du mail au format HTML
6130 */
6131 public function formater_modele($modele, $id_di, $id_inst) {
6132 // Création du lien d'accès direct à l'instruction
6133 $url_inst = PATH_BASE_URL.'app/index.php?module=form&direct_link=true&obj=dossier_instruction&action=3'.
6134 '&direct_field=dossier&direct_form=instruction&direct_action=3&direct_idx='.$id_inst;
6135 $url_inst = '<a href="'.$url_inst.'">'.$url_inst.'</a>';
6136 // Remplacement des champs de fusion
6137 $modele = str_replace('<DOSSIER_INSTRUCTION>', $id_di, $modele);
6138 $modele = str_replace('<URL_INSTRUCTION>', $url_inst, $modele);
6139 $modele = str_replace('<ID_INSTRUCTION>', $id_inst, $modele);
6140 // Encodage HTML des sauts de ligne
6141 $modele = preg_replace("/\r\n|\r|\n/",'<br/>',$modele);
6142 //
6143 return $modele;
6144 }
6145
6146
6147 /**
6148 * Récupère l'instance de l'instructeur
6149 *
6150 * @param integer $instructeur Identifiant de l'instructeur.
6151 *
6152 * @return object
6153 */
6154 protected function get_inst_instructeur($instructeur) {
6155 //
6156 return $this->get_inst_common("instructeur", $instructeur);
6157 }
6158
6159
6160 /**
6161 * Récupère l'instance de l'utilisateur
6162 *
6163 * @param integer $om_utilisateur Identifiant de l'utilisateur.
6164 *
6165 * @return object
6166 */
6167 protected function get_inst_om_utilisateur($om_utilisateur) {
6168 //
6169 return $this->get_inst_common("om_utilisateur", $om_utilisateur);
6170 }
6171
6172
6173 /**
6174 * Récupère l'instance de la division.
6175 *
6176 * @param integer $division Identifiant de la division.
6177 *
6178 * @return object
6179 */
6180 protected function get_inst_division($division) {
6181 //
6182 return $this->get_inst_common("division", $division);
6183 }
6184
6185
6186 /**
6187 * Récupère l'instance de la direction.
6188 *
6189 * @param integer $direction Identifiant de la direction.
6190 *
6191 * @return object
6192 */
6193 protected function get_inst_direction($direction) {
6194 //
6195 return $this->get_inst_common("direction", $direction);
6196 }
6197
6198
6199 /**
6200 * Récupère la collectivité d'un instructeur en passant par sa division puis
6201 * par sa direction.
6202 *
6203 * @param integer $instructeur Identifiant de l'instructeur.
6204 *
6205 * @return integer
6206 */
6207 protected function get_instructeur_om_collectivite($instructeur) {
6208 // Chemin vers la collectivité d'un instructeur
6209 $inst_instr = $this->get_inst_instructeur($instructeur);
6210 $inst_division = $this->get_inst_division($inst_instr->getVal('division'));
6211 $inst_direction = $this->get_inst_direction($inst_division->getVal('direction'));
6212
6213 // Collectivité
6214 $om_collectivite = $inst_direction->getVal('om_collectivite');
6215
6216 //
6217 return $om_collectivite;
6218 }
6219
6220 /*
6221 * CONDITION - can_user_access_dossier_contexte_ajout
6222 *
6223 * Vérifie que l'utilisateur a bien accès au dossier d'instruction passé dans le
6224 * formulaire d'ajout.
6225 * Cette méthode vérifie que l'utilisateur est lié au groupe du dossier, et si le
6226 * dossier est confidentiel qu'il a accès aux confidentiels de ce groupe.
6227 *
6228 */
6229 function can_user_access_dossier_contexte_ajout() {
6230
6231 ($this->f->get_submitted_get_value('idxformulaire') !== null ? $id_dossier =
6232 $this->f->get_submitted_get_value('idxformulaire') : $id_dossier = "");
6233 //
6234 if ($id_dossier !== "") {
6235 $dossier = $this->f->get_inst__om_dbform(array(
6236 "obj" => "dossier_instruction",
6237 "idx" => $id_dossier,
6238 ));
6239 //
6240 return $dossier->can_user_access_dossier();
6241 }
6242 return false;
6243 }
6244
6245 /*
6246 * CONDITION - can_user_access_dossier
6247 *
6248 * Vérifie que l'utilisateur a bien accès au dossier lié à l'instruction instanciée.
6249 * Cette méthode vérifie que l'utilisateur est lié au groupe du dossier, et si le
6250 * dossier est confidentiel qu'il a accès aux confidentiels de ce groupe.
6251 *
6252 */
6253 function can_user_access_dossier_contexte_modification() {
6254
6255 $id_dossier = $this->getVal('dossier');
6256 //
6257 if ($id_dossier !== "" && $id_dossier !== null) {
6258 $dossier = $this->f->get_inst__om_dbform(array(
6259 "obj" => "dossier_instruction",
6260 "idx" => $id_dossier,
6261 ));
6262 //
6263 return $dossier->can_user_access_dossier();
6264 }
6265 return false;
6266 }
6267
6268 /**
6269 * Retourne le lien de retour (VIEW formulaire et VIEW sousformulaire).
6270 *
6271 * @param string $view Appel dans le contexte de la vue 'formulaire' ou de
6272 * la vue 'sousformulaire'.
6273 *
6274 * @return string
6275 */
6276 function get_back_link($view = "formulaire") {
6277 //
6278 $href = parent::get_back_link($view);
6279 //
6280 $crud = $this->get_action_crud();
6281
6282 // Redirection vers le formulaire de modification à la validation du
6283 // formulaire d'ajout si l'événement associé possède une lettre type
6284 if (($crud === 'create'
6285 || ($crud === null
6286 && $this->getParameter('maj') == 0))
6287 && $this->correct == true
6288 && $this->evenement_has_an_edition($this->valF['evenement']) === true) {
6289
6290 // On instancie l'instruction
6291 $inst_instruction = $this->f->get_inst__om_dbform(array(
6292 "obj" => "instruction",
6293 "idx" => $this->valF[$this->clePrimaire],
6294 ));
6295
6296 // Si l'instruction n'est pas finalisée automatiquement
6297 if ($inst_instruction->getVal('om_final_instruction') !== 't') {
6298 $href = str_replace("&action=3", "&action=1", $href);
6299 //
6300 if (strpos($href, "&retour=tab") !== false) {
6301 $href = str_replace("&retour=tab", "&retour= form", $href);
6302 } else {
6303 $href .= "&retour=form";
6304 }
6305 }
6306 }
6307
6308 //
6309 return $href;
6310 }
6311
6312 }// fin classe

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26