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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7521 - (show annotations)
Thu Sep 21 15:55:37 2017 UTC (7 years, 2 months ago) by softime
File size: 260395 byte(s)
Error occurred while calculating annotation data.
* Merge de la branche d'intégration 4.5.0

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26