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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5024 - (show annotations)
Wed Nov 2 14:39:23 2016 UTC (8 years, 3 months ago) by softime
File size: 215001 byte(s)
* Merge de la branche de développement 3.33.x

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26