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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 9245 - (show annotations)
Fri Apr 3 09:21:03 2020 UTC (4 years, 9 months ago) by softime
File size: 123142 byte(s)
* Merge de la branche d'intégration 4.13.0-develop dans le trunk

1 <?php
2 /**
3 * DBFORM - 'consultation' - Surcharge gen.
4 *
5 * @package openads
6 * @version SVN : $Id: consultation.class.php 6046 2016-02-26 15:27:06Z fmichon $
7 */
8
9 require_once ("../gen/obj/consultation.class.php");
10
11 class consultation extends consultation_gen {
12
13 // Champs contenant les UID des fichiers
14 var $abstract_type = array(
15 "fichier" => "file",
16 "om_fichier_consultation" => "file",
17 );
18
19 var $metadata = array(
20 "om_fichier_consultation" => array(
21 "dossier" => "getDossier",
22 "dossier_version" => "getDossierVersion",
23 "numDemandeAutor" => "getNumDemandeAutor",
24 "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
25 "typeInstruction" => "getTypeInstruction",
26 "statutAutorisation" => "getStatutAutorisation",
27 "typeAutorisation" => "getTypeAutorisation",
28 "dateEvenementDocument" => "getDateEvenementDocument",
29 "groupeInstruction" => 'getGroupeInstruction',
30 "title" => 'getTitle',
31 'concerneERP' => 'get_concerne_erp',
32 ),
33 "fichier" => array(
34 "filename" => "getFichierFilename",
35 "dossier" => "getDossier",
36 "dossier_version" => "getDossierVersion",
37 "numDemandeAutor" => "getNumDemandeAutor",
38 "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
39 "typeInstruction" => "getTypeInstruction",
40 "statutAutorisation" => "getStatutAutorisation",
41 "typeAutorisation" => "getTypeAutorisation",
42 "dateEvenementDocument" => "getDateEvenementDocument",
43 "groupeInstruction" => 'getGroupeInstruction',
44 "title" => 'getTitle',
45 'concerneERP' => 'get_concerne_erp',
46 ),
47 );
48
49 /**
50 * Cette variable permet de stocker le résultat de la méthode
51 * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
52 * ces appels.
53 * @var string Code de la division du dossier en cours
54 */
55 var $_division_from_dossier = NULL;
56
57 /**
58 * Instance de la classe dossier
59 *
60 * @var mixed
61 */
62 var $inst_dossier = null;
63
64 /**
65 * Définition des actions disponibles sur la classe.
66 *
67 * @return void
68 */
69 function init_class_actions() {
70
71 parent::init_class_actions();
72
73 // ACTION - 000 - ajouter
74 // Modifie la condition d'affichage du bouton ajouter
75 $this->class_actions[0]["condition"] = array("can_user_access_dossier_contexte_ajout");
76
77 // ACTION - 001 - modifier
78 //
79 $this->class_actions[1]["condition"] = array("is_editable", "can_user_access_dossier_contexte_modification");
80
81 // ACTION - 002 - supprimer
82 //
83 $this->class_actions[2]["condition"] = array("is_deletable", "can_user_access_dossier_contexte_modification");
84
85 // ACTION - 040 - ajout_multiple
86 // Ajout de consultations multiples
87 $this->class_actions[40] = array(
88 "identifier" => "ajout_multiple",
89 "view" => "view_ajout_multiple",
90 "method" => "ajouter_multiple",
91 "button" => "valider",
92 "permission_suffix" => "ajouter",
93 "condition" => array("is_multiaddable", "can_user_access_dossier_contexte_ajout"),
94 );
95 // ACTION - 050 - marquer_comme_lu
96 $this->class_actions[50] = array(
97 "identifier" => "marquer_comme_lu",
98 "portlet" => array(
99 "type" => "action-direct",
100 "libelle" => _("Marquer comme lu"),
101 "order" => 50,
102 "class" => "lu-16",
103 ),
104 "view" => "formulaire",
105 "method" => "marquer_comme_lu",
106 "permission_suffix" => "modifier_lu",
107 "condition" => array(
108 "is_markable",
109 "show_marquer_comme_lu_portlet_action",
110 "can_user_access_dossier_contexte_modification",
111 ),
112 );
113 // ACTION - 060 - finaliser
114 $this->class_actions[60] = array(
115 "identifier" => "finalise",
116 "portlet" => array(
117 "type" => "action-direct",
118 "libelle" => _("Finaliser le document"),
119 "order" => 60,
120 "class" => "finalise",
121 ),
122 "view" => "formulaire",
123 "method" => "finalize",
124 "permission_suffix" => "finaliser",
125 "condition" => array(
126 "show_consultation_finaliser_portlet_action",
127 "is_finalizable",
128 "can_user_access_dossier_contexte_modification",
129 ),
130 );
131
132 // ACTION - 070 - unfinaliser
133 $this->class_actions[70] = array(
134 "identifier" => "unfinalise",
135 "portlet" => array(
136 "type" => "action-direct",
137 "libelle" => _("Reprendre la redaction du document"),
138 "order" => 70,
139 "class" => "definalise",
140 ),
141 "view" => "formulaire",
142 "method" => "unfinalize",
143 "permission_suffix" => "definaliser",
144 "condition" => array(
145 "show_unfinalize_portlet_action",
146 "is_unfinalizable",
147 "can_user_access_dossier_contexte_modification",
148 ),
149 );
150
151 // ACTION - 080 - consulter_pdf
152 $this->class_actions[80] = array(
153 "identifier" => "consulter_pdf",
154 "portlet" => array(
155 "type" => "action-blank",
156 "libelle" => _("Editer la consultation PDF"),
157 "order" => 45,
158 "class" => "pdf-16",
159 ),
160 "view" => "view_consulter_pdf",
161 "permission_suffix" => "edition",
162 "condition" => "can_user_access_dossier_contexte_modification",
163 );
164
165 // ACTION - 090 - Générer l'édition PDF d'une consultation multiple
166 //
167 $this->class_actions[90] = array(
168 "identifier" => "generate_pdf_consultation_multiple",
169 "view" => "generate_pdf_consultation_multiple",
170 "permission_suffix" => "ajouter",
171 );
172
173 // ACTION - 100 - retour_consultation
174 // Lors de la saisie de retour d'avis par le profil suivi des dates
175 $this->class_actions[100] = array(
176 "identifier" => "retour_consultation",
177 "view" => "formulaire",
178 "method" => "modifier",
179 "button" => _("Modifier"),
180 "permission_suffix" => "modifier",
181 "condition" => array("is_suivi_retours_de_consultation, can_user_access_dossier_contexte_modification"),
182
183 );
184
185 $this->class_actions[110] = array(
186 "identifier" => "suivi_mise_a_jour_des_dates",
187 "view" => "view_suivi_mise_a_jour_des_dates",
188 "permission_suffix" => "suivi_mise_a_jour_des_dates",
189 );
190
191 $this->class_actions[120] = array(
192 "identifier" => "suivi_retours_de_consultation",
193 "view" => "view_suivi_retours_de_consultation",
194 "permission_suffix" => "suivi_retours_de_consultation",
195 );
196
197 // ACTION - 130 - Afficher la consultation dans les éditions
198 $this->class_actions[130] = array(
199 "identifier" => "afficher_dans_edition",
200 "portlet" => array(
201 "type" => "action-direct",
202 "libelle" => _("Afficher dans les éditions"),
203 "order" => 80,
204 "class" => "watch-16"
205 ),
206 "method" => "manage_visibilite_consultation",
207 "permission_suffix" => "visibilite_dans_edition",
208 "condition" => array(
209 "is_not_visible",
210 "can_show_or_hide_in_edition"),
211 );
212
213 // ACTION - 140 - Masquer la consultation dans les éditions
214 $this->class_actions[140] = array(
215 "identifier" => "masquer_dans_edition",
216 "portlet" => array(
217 "type" => "action-direct",
218 "libelle" => _("Masquer dans les éditions"),
219 "order" => 80,
220 "class" => "unwatch-16"
221 ),
222 "method" => "manage_visibilite_consultation",
223 "permission_suffix" => "visibilite_dans_edition",
224 "condition" => array(
225 "is_visible",
226 "can_show_or_hide_in_edition"),
227 );
228 }
229
230 /**
231 * Clause select pour la requête de sélection des données de l'enregistrement.
232 *
233 * @return array
234 */
235 function get_var_sql_forminc__champs() {
236 return array(
237 "consultation",
238 "dossier.dossier",
239 "dossier_libelle",
240 "service",
241 "to_char(consultation.date_envoi ,'DD/MM/YYYY') as \"date_envoi\"",
242 "visible",
243 "to_char(consultation.date_reception ,'DD/MM/YYYY') as \"date_reception\"",
244 "to_char(consultation.date_limite ,'DD/MM/YYYY') as \"date_limite\"",
245 "to_char(consultation.date_retour ,'DD/MM/YYYY') as \"date_retour\"",
246 "avis_consultation",
247 "motivation",
248 "fichier",
249 "lu",
250 "code_barres",
251 "om_fichier_consultation",
252 "om_final_consultation",
253 "marque",
254 "om_fichier_consultation_dossier_final",
255 "fichier_dossier_final",
256 );
257 }
258
259 /**
260 * Clause from pour la requête de sélection des données de l'enregistrement.
261 *
262 * @return string
263 */
264 function get_var_sql_forminc__tableSelect() {
265 return sprintf(
266 '%1$s%2$s
267 LEFT JOIN %1$sdossier
268 ON consultation.dossier = dossier.dossier',
269 DB_PREFIXE,
270 $this->table
271 );
272 }
273
274 /**
275 *
276 * @return string
277 */
278 function get_var_sql_forminc__sql_service_by_collectivite_from_di() {
279 return "SELECT service.service, CONCAT(service.abrege, ' - ', service.libelle) FROM ".DB_PREFIXE."service LEFT JOIN ".DB_PREFIXE."om_collectivite ON service.om_collectivite = om_collectivite.om_collectivite WHERE ((service.om_validite_debut IS NULL AND (service.om_validite_fin IS NULL OR service.om_validite_fin > CURRENT_DATE)) OR (service.om_validite_debut <= CURRENT_DATE AND (service.om_validite_fin IS NULL OR service.om_validite_fin > CURRENT_DATE))) AND (om_collectivite.niveau = '2' OR service.om_collectivite = <collectivite_di>) ORDER BY service.abrege, service.libelle";
280 }
281
282 /**
283 *
284 * @return string
285 */
286 function get_var_sql_forminc__sql_service_by_id() {
287 return "SELECT service.service, CONCAT(service.abrege, ' - ', service.libelle) FROM ".DB_PREFIXE."service WHERE service = '<idx>'";
288 }
289
290 /**
291 * Permet de modifier le fil d'Ariane depuis l'objet pour un formulaire
292 * @param string $ent Fil d'Ariane récupéréré
293 * @return Fil d'Ariane
294 */
295 function getFormTitle($ent) {
296 //
297 if ($this->getParameter('maj') == 120) {
298 //
299 return _("suivi")." -> "._("demandes d'avis")." -> "._("retours de consultation");
300 }
301 //
302 if ($this->getParameter('maj') == 110) {
303 //
304 return _("suivi")." -> "._("demandes d'avis")." -> "._("mise a jour des dates");
305 }
306 //
307 if ($this->getParameter('maj') == 100) {
308 //
309 return _("suivi")." -> "._("demandes d'avis")." -> "._("retours de consultation")." -> ".$this->getVal($this->clePrimaire);
310 }
311 //
312 return $ent;
313 }
314
315
316 /**
317 * Ce script permet de gérer l'interface de saisie rapide des retours de
318 * consultation par la cellule suivi l'aide d'un code barre.
319 */
320 function view_suivi_retours_de_consultation() {
321 //
322 $this->checkAccessibility();
323 /**
324 * Validation du formulaire
325 */
326 // Si le formulaire a été validé
327 if ($this->f->get_submitted_post_value('code_barres') !== null) {
328 // Si la valeur transmise est correcte
329 if ($this->f->get_submitted_post_value('code_barres') != ""
330 && is_numeric($this->f->get_submitted_post_value('code_barres'))) {
331 // Vérification de l'existence de la consultation
332 $sql = "SELECT consultation FROM ".DB_PREFIXE."consultation ";
333 $sql .= " WHERE code_barres='".$this->f->db->escapesimple($this->f->get_submitted_post_value('code_barres'))."'";
334 $res = $this->f->db->query($sql);
335 // Logger
336 $this->f->addToLog(
337 __METHOD__."(): db->query(\"".$sql."\")",
338 VERBOSE_MODE
339 );
340 // Gestion des erreurs de base de données
341 $this->f->isDatabaseError($res);
342 // En fonction du nombre de consultations correspondantes
343 // on affiche un message d"erreur ou on redirige vers le formulaire de
344 // saisie du retour
345 if ($res->numrows()==0) {
346 // Si
347 $message_class = "error";
348 $message = _("Ce code barres de consultation n'existe pas.");
349 } elseif ($res->numrows() > 1) {
350 // Si
351 $message_class = "error";
352 $message = _("Plusieurs consultations avec ce code barres.");
353 } else {
354 $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
355 header("Location: ".OM_ROUTE_FORM."&obj=consultation&action=100&retour=suivi_retours_de_consultation&idx=".$row['consultation']);
356 }
357 } elseif ($this->f->get_submitted_post_value('code_barres')!==null && $this->f->get_submitted_post_value('code_barres') == "") {
358 // Si aucune valeur n'a été saisie dans le champs consultation
359 $message_class = "error";
360 $message = _("Veuiller saisir un code barres de consultation.");
361 } else {
362 // Si
363 $message_class = "error";
364 $message = _("Cette consultation n'existe pas.");
365 }
366 }
367
368 /**
369 * Affichage des messages et du formulaire
370 */
371 // Affichage du message de validation ou d'erreur
372 if (isset($message) && isset($message_class) && $message != "") {
373 $this->f->displayMessage($message_class, $message);
374 }
375 //
376 $datasubmit = $this->getDataSubmit();
377 // Ouverture du formulaire
378 echo "\t<form";
379 echo " method=\"post\"";
380 echo " id=\"suivi_retours_de_consultation_form\"";
381 echo " action=\"".$datasubmit."\"";
382 echo ">\n";
383 // Paramétrage des champs du formulaire
384 $champs = array("code_barres");
385 // Création d'un nouvel objet de type formulaire
386 $form = $this->f->get_inst__om_formulaire(array(
387 "validation" => 0,
388 "maj" => 0,
389 "champs" => $champs,
390 ));
391 // Paramétrage des champs du formulaire
392 $form->setLib("code_barres", _("No de code barres de consultation"));
393 $form->setType("code_barres", "text");
394 $form->setTaille("code_barres", 25);
395 $form->setMax("code_barres", 25);
396 // Affichage du formulaire
397 $form->entete();
398 $form->afficher($champs, 0, false, false);
399 $form->enpied();
400 // Affichage du bouton
401 echo "\t<div class=\"formControls\">\n";
402 $this->f->layout->display_form_button(array("value" => _("Valider")));
403 echo "\t</div>\n";
404 // Fermeture du formulaire
405 echo "\t</form>\n";
406 }
407
408 /**
409 * Ce script permet de mettre à jour les dates de suivi du traitement
410 * des consultations.
411 */
412 function view_suivi_mise_a_jour_des_dates() {
413 //
414 $this->checkAccessibility();
415
416 // Récupération des valeur passées en POST ou GET
417 $date = "";
418 if($this->f->get_submitted_post_value('date') !== null) {
419 $date = $this->f->get_submitted_post_value('date');
420 } elseif($this->f->get_submitted_get_value('date') !== null) {
421 $date = $this->f->get_submitted_get_value('date');
422 }
423 $code_barres = "";
424 if($this->f->get_submitted_post_value('code_barres') !== null) {
425 $code_barres = $this->f->get_submitted_post_value('code_barres');
426 } elseif($this->f->get_submitted_get_value('code_barres')!==null) {
427 $code_barres = $this->f->get_submitted_get_value('code_barres');
428 }
429
430 // Booléen permettant de définir si un enregistrement à eu lieu
431 $correct = false;
432 // Booléen permettant de définir si les dates peuvent êtres enregistrées
433 $date_error = false;
434
435 // Si le formulaire a été validé
436 if ($this->f->get_submitted_post_value('validation') !== null) {
437 //Tous les champs doivent obligatoirement être remplis
438 if ( !empty($date) && !empty($code_barres) ){
439
440 //Vérification de l'existence de la consultation
441 $sql = "SELECT consultation, type_consultation
442 FROM ".DB_PREFIXE."consultation
443 LEFT JOIN ".DB_PREFIXE."service
444 ON service.service = consultation.service
445 WHERE code_barres = '".$this->f->db->escapesimple($code_barres)."'";
446 $res = $this->f->db->query($sql);
447 $this->f->addToLog("app/demandes_avis_mise_a_jour_des_dates.php : db->query(\"".$sql."\")", VERBOSE_MODE);
448 $this->f->isDatabaseError($res);
449
450 //Si le code barres est correct
451 if($res->numrows() == 1) {
452
453 //Un retour de demande d'avis ne peut être saisie que si le type de
454 //consultation est "avec_avis_attendu"
455 $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
456 if ( strcasecmp($row['type_consultation'], "avec_avis_attendu") === 0 ){
457
458 //On met à jour la date après l'écran de vérification
459 if($this->f->get_submitted_post_value("is_valid") != null and $this->f->get_submitted_post_value("is_valid") == "true") {
460 $consultation = $this->f->get_inst__om_dbform(array(
461 "obj" => "consultation",
462 "idx" => $row['consultation'],
463 ));
464 $consultation->setParameter("maj", 1);
465 $valF = array();
466 foreach($consultation->champs as $id => $champ) {
467 $valF[$champ] = $consultation->val[$id];
468 }
469
470 $valF['date_reception']=$date;
471
472 $consultation->modifier($valF);
473 // Vérification de la finalisation du document
474 // correspondant au code barres
475 if($consultation->valF["om_final_consultation"] === true) {
476 $message_class = "valid";
477 $message = _("Saisie enregistree");
478 $code_barres = "";
479 } else {
480 //
481 $message_class = "error";
482 $message = sprintf(_("Le document correspondant au
483 code barres %s n'est pas finalise,
484 la date ne sera pas mise a jour."),
485 $code_barres);
486 }
487
488 }
489 //Sinon on récupère les infos du dossier pour les afficher
490 else {
491 // Récupération des infos du dossier
492 $sqlInfo = "SELECT dossier_libelle, libelle,
493 date_reception,
494 TO_CHAR(date_envoi ,'DD/MM/YYYY') as date_envoi
495 FROM ".DB_PREFIXE."consultation
496 LEFT JOIN ".DB_PREFIXE."dossier
497 ON dossier.dossier = consultation.dossier
498 LEFT JOIN ".DB_PREFIXE."service
499 ON service.service = consultation.service
500 WHERE code_barres='".$code_barres."'";
501 $resInfo = $this->f->db->query($sqlInfo);
502 $this->f->isDatabaseError($resInfo);
503 $infos = $resInfo->fetchRow(DB_FETCHMODE_ASSOC);
504 }
505 }
506 //C'est un autre type de consultation
507 else{
508 $message_class = "error";
509 $message = _("Cette consultation n'a pas d'avis attendu.");
510 }
511 }
512 else {
513 $message_class = "error";
514 $message = _("Le numero saisi ne correspond a aucun code barres de consultation.");
515 }
516 } else {
517 $message_class = "error";
518 $message = _("Tous les champs doivent etre remplis.");
519 }
520 }
521
522 /**
523 * Affichage des messages et du formulaire
524 */
525 // Affichage du message de validation ou d'erreur
526 if (isset($message) && isset($message_class) && $message != "") {
527 $this->f->displayMessage($message_class, $message);
528 }
529 //
530 $datasubmit = $this->getDataSubmit();
531 // Ouverture du formulaire
532 printf("\t<form");
533 printf(" method=\"post\"");
534 printf(" id=\"demandes_avis_mise_a_jour_des_dates_form\"");
535 printf(" action=\"".$datasubmit."\"");
536 printf(">\n");
537 // Paramétrage des champs du formulaire
538 $champs = array("date", "code_barres");
539 if (isset($infos)) {
540 array_push(
541 $champs,
542 "dossier_libelle",
543 "service",
544 "date_envoi",
545 "date_reception",
546 "is_valid"
547 );
548 }
549 // Création d'un nouvel objet de type formulaire
550 $form = $this->f->get_inst__om_formulaire(array(
551 "validation" => 0,
552 "maj" => 0,
553 "champs" => $champs,
554 ));
555 // Paramétrage des champs du formulaire
556 // Parametrage du champ date
557 $form->setLib("date", _("Date")."* :");
558 if (isset($infos)) {
559 $form->setType("date", "hiddenstaticdate");
560 } else {
561 $form->setType("date", "date");
562 }
563 $form->setVal("date", $date);
564 $form->setTaille("date", 10);
565 $form->setMax("date", 10);
566
567 // Parametrage du champ code_barres
568 $form->setLib("code_barres", _("Code barres de consultation")."* :");
569 if (isset($infos)) {
570 $form->setType("code_barres", "hiddenstatic");
571 } else {
572 $form->setType("code_barres", "text");
573 }
574 $form->setVal("code_barres", $code_barres);
575 $form->setTaille("code_barres", 20);
576 $form->setMax("code_barres", 20);
577
578 // Ajout des infos du dossier correspondantes à la consultation séléctionnée
579 if (isset($infos)) {
580
581 // Tous les champs sont défini par defaut à static
582 foreach ($infos as $key => $value) {
583 $form->setType($key, "static");
584 $form->setVal($key, $value);
585 }
586
587 // Les champs dont on vient de définir la valeur sont en gras
588 $form->setBloc("date_reception", 'DF', "", 'bold');
589
590 // Parametrage du champ dossier
591 $form->setLib("dossier_libelle", _("dossier_libelle")." :");
592 $form->setType("dossier_libelle", "static");
593 $form->setVal("dossier_libelle", $infos['dossier_libelle']);
594
595 // Parametrage du champ service
596 $form->setLib("service", _("service")." :");
597 $form->setType("service", "static");
598 $form->setVal("service", $infos['libelle']);
599
600 // Parametrage des libellés d'envoi avec RAR
601 $form->setLib("date_envoi", _("Envoi demande d'avis")." :");
602 $form->setLib("date_reception", _("Retour demande d'avis")." :");
603 $form->setVal("date_reception", $date);
604
605 // Ajout d'un champ hidden permettant de savoir que le formulaire précédant est celui de vérification
606 $form->setLib("is_valid", _("Valide")." :");
607 $form->setType("is_valid", "hidden");
608 $form->setVal("is_valid", 'true');
609
610 $form->setFieldset('dossier_libelle', 'D', _('Synthese'));
611 $form->setFieldset('is_valid', 'F');
612 }
613
614
615 // Création du fieldset regroupant les champs permettant la mise à jour des date
616 $form->setFieldset('date', 'D', _('Mise a jour'));
617 $form->setFieldset('code_barres', 'F');
618 // Affichage du formulaire
619 $form->entete();
620 $form->afficher($champs, 0, false, false);
621 $form->enpied();
622 // Affichage du bouton
623 printf("\t<div class=\"formControls\">\n");
624 //
625 if (!$date_error) {
626 $this->f->layout->display_form_button(
627 array("value" => _("Valider"), "name" => "validation")
628 );
629 }
630 // Si pas sur l'écran de validation
631 if (isset($infos)) {
632 printf(
633 '<a class="retour" href="%s&amp;date=%s&amp;code_barres=%s">Retour</a>',
634 $datasubmit,
635 $date,
636 $code_barres
637 );
638 }
639 printf("\t</div>\n");
640 // Fermeture du formulaire
641 printf("\t</form>\n");
642
643 }
644
645
646 /**
647 * Défini si l'utilisateur est de la cellule suivi.
648 *
649 * @return boolean true si correspond false sinon
650 */
651 function is_suivi_retours_de_consultation() {
652
653 if($this->f->can_bypass("consultation", "modifier")){
654 return true;
655 }
656
657 return $this->f->isAccredited("consultation_suivi_retours_de_consultation");
658 }
659
660 /**
661 * Si le champ lu est à true l'action "Marquer comme lu" n'est pas affichée
662 *
663 * @return boolean true sinon lu false sinon
664 */
665 function show_marquer_comme_lu_portlet_action() {
666 if (isset($this->val[array_search("lu", $this->champs)])
667 && $this->val[array_search("lu", $this->champs)]== "t") {
668 return false;
669 }
670 return true;
671 }
672
673 /**
674 * Si le document est finalisé l'action "finaliser" n'est pas affichée
675 *
676 * @return boolean true sinon lu false sinon
677 */
678 function show_consultation_finaliser_portlet_action() {
679 if ($this->is_document_finalized("om_final_consultation")) {
680 return false;
681 }
682 return true;
683 }
684
685 /**
686 * Retourne is_document_finalized("om_final_consultation")
687 *
688 * @return boolean true si finalisé false sinon
689 */
690 function show_unfinalize_portlet_action() {
691 return $this->is_document_finalized("om_final_consultation");
692 }
693
694 /**
695 * Permet de savoir si le document passé en paramètre est finalisé
696 *
697 * @param string $field flag finalisé
698 *
699 * @return boolean true si finalisé false sinon
700 */
701 function is_document_finalized($field) {
702 if($this->getVal($field) == 't') {
703 return true;
704 }
705 return false;
706 }
707
708
709 /**
710 *
711 */
712 var $inst_service = null;
713
714 /**
715 *
716 */
717 function get_inst_service($service = null) {
718 //
719 if ($service !== null) {
720 return $this->f->get_inst__om_dbform(array(
721 "obj" => "service",
722 "idx" => $service,
723 ));
724 }
725 //
726 if (isset($this->inst_service) === false or
727 $this->inst_service === null) {
728 $this->inst_service = $this->f->get_inst__om_dbform(array(
729 "obj" => "service",
730 "idx" => $this->getVal('service'),
731 ));
732 }
733 return $this->inst_service;
734 }
735
736 /**
737 * TREATMENT - marquer_comme_lu.
738 *
739 * Cette methode permet de passer la consultation en "lu"
740 *
741 * @return boolean true si maj effectué false sinon
742 */
743 function marquer_comme_lu() {
744 // Cette méthode permet d'exécuter une routine en début des méthodes
745 // dites de TREATMENT.
746 $this->begin_treatment(__METHOD__);
747
748 if($this->getVal("lu") == 'f') {
749 $this->correct = true;
750 $valF = array();
751 $valF["lu"] = true;
752
753 $res = $this->f->db->autoExecute(
754 DB_PREFIXE.$this->table,
755 $valF,
756 DB_AUTOQUERY_UPDATE,
757 $this->clePrimaire."=".$this->getVal($this->clePrimaire)
758 );
759 if ($this->f->isDatabaseError($res, true)) {
760 // Appel de la methode de recuperation des erreurs
761 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
762 $this->correct = false;
763 // Termine le traitement
764 return $this->end_treatment(__METHOD__, false);
765 } else {
766 $this->addToMessage(_("Mise a jour effectue avec succes"));
767 return $this->end_treatment(__METHOD__, true);
768 }
769
770 } else {
771 $this->addToMessage(_("Element deja marque comme lu"));
772 }
773
774 // Termine le traitement
775 return $this->end_treatment(__METHOD__, false);
776 }
777
778 // }}}
779
780 /**
781 * TREATMENT - ajouter_multiple.
782 *
783 * Cette methode permet d'ajouter plusieurs consultations.
784 *
785 * @return boolean true si ajouts effectués false sinon
786 */
787 function ajouter_multiple() {
788 // Cette méthode permet d'exécuter une routine en début des méthodes
789 // dites de TREATMENT.
790 $this->begin_treatment(__METHOD__);
791
792 // Identifiant de l'objet metier a copier
793 ($this->f->get_submitted_get_value('idxformulaire') !== null ? $idx = $this->f->get_submitted_get_value('idxformulaire') : $idx = "");
794 // Nom de l'objet metier
795 ($this->f->get_submitted_get_value('obj') !== null ? $obj = $this->f->get_submitted_get_value('obj') : $obj = "");
796 //formulaire retour
797 ($this->f->get_submitted_get_value('ret') !== null ? $retourformulaire = $this->f->get_submitted_get_value('ret') : $retourformulaire = "");
798 ($this->f->get_submitted_get_value('date_envoi') !== null ? $date_envoi = $this->f->get_submitted_get_value('date_envoi') : $date_envoi = "");
799 /*Récupération des données et formatage.*/
800 $donnees_temp = explode(';', $this->f->get_submitted_get_value('data'));
801 for ( $i = 1 ; $i < count($donnees_temp) ; $i++ )
802 $donnees[] = explode('_', $donnees_temp[$i]);
803 /* Nombre de consultations papier à générer */
804 $nbConsPap = 0;
805
806 /* Ajout des données en base de données
807 * 0 : l'ID du service
808 * 1 : consultation papier {0,1}
809 * */
810 if ( isset($donnees) && count($donnees) > 0 ) {
811
812 foreach ($donnees as $value) {
813
814 $sql = "SELECT delai, id, delai_type
815 FROM ".DB_PREFIXE."service
816 LEFT JOIN ".DB_PREFIXE."om_etat
817 ON service.edition = om_etat.om_etat
818 WHERE service = $value[0]";
819 $res = $this->f->db->query($sql);
820 // Si la récupération de la description de l'avis échoue
821 if ($this->f->isDatabaseError($res, true)) {
822 // Appel de la methode de recuperation des erreurs
823 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
824 $this->correct = false;
825 // Termine le traitement
826 $this->end_treatment(__METHOD__, false);
827 }
828 $row=& $res->fetchRow();
829 $delai = $row[0];
830 $type_edition = $row[1];
831 $delai_type = $row[2];
832
833 /*Calcul du delai de retour*/
834 $date_envoi_temp = $this->datePHP($date_envoi);
835 $delai = $this->dateDB($this->f->mois_date($date_envoi_temp, $delai, "+", $delai_type));
836
837 /*Les données à ajouter*/
838 $arrayVal = array(
839 'consultation' => "]",
840 'dossier' => $idx,
841 'date_envoi' => $date_envoi,
842 'date_retour' => NULL,
843 'date_limite' => $delai,
844 'service' => $value[0],
845 'avis_consultation' => NULL,
846 'date_reception' => NULL,
847 'motivation' => "",
848 'fichier' => NULL,
849 'lu' => TRUE,
850 'code_barres' => NULL,
851 'om_final_consultation' => false,
852 'om_fichier_consultation' => '',
853 'om_fichier_consultation_dossier_final' => false,
854 'fichier_dossier_final' => false,
855 'marque' => false,
856 'visible' => true
857 );
858
859 $res_ajout = $this->ajouter($arrayVal);
860 if($res_ajout != true) {
861 // Termine le traitement
862 $this->end_treatment(__METHOD__, false);
863 }
864
865 /*Comptage du nombre de consultations papier demandées et récupération des ids des PDFs à éditer*/
866 if ($value[1]==1){
867 $idxConsultations[] = $this->valF['consultation'];
868 $objConsultations[] = $type_edition;
869 $nbConsPap++;
870 }
871 }
872
873 /*Génération du PDF*/
874 if (isset($idxConsultations) && count($idxConsultations) > 0 ){
875
876 // Stockage de l'identifiant de chaque consultation dont on veut éditer la
877 // version papier, séparés par un point-virgule
878 $textIdsConsultations = "";
879 foreach ($idxConsultations as $value) {
880 if ($textIdsConsultations != "") {
881 $textIdsConsultations .= ";";
882 }
883 $textIdsConsultations .= $value;
884 }
885 // Stockage de l'objet de chaque consultation dont on veut éditer la
886 // version papier, séparés par un point-virgule
887 $textObjConsultations = "";
888 foreach ($objConsultations as $value) {
889 if ($textObjConsultations != "") {
890 $textObjConsultations .= ";";
891 }
892 $textObjConsultations .= $value;
893 }
894
895 // Ouverture du PDF dans une nouvelle fenêtre
896 printf("
897 <script language='javascript' type='text/javascript'>
898 window.open('%s','_blank')
899 </script>
900 ",
901 OM_ROUTE_FORM."&obj=consultation&action=90&idx=0&textobj=".$textObjConsultations."&"."textids=".$textIdsConsultations
902 );
903 }
904 $return_url = OM_ROUTE_SOUSTAB;
905 $return_url .= "&obj=consultation";
906 $return_url .= "&retourformulaire=".$this->getParameter("retourformulaire");
907 $return_url .= "&idxformulaire=".$this->getParameter("idxformulaire");
908 $return_url .= "&premier=".$this->getParameter("premiersf");
909 $return_url .= "&tricol=".$this->getParameter("tricolsf");
910
911 /*Affichage du message d'information*/
912 $this->f->displayMessage("valid", count($donnees)._(' service(s) selectionne(s) dont ').$nbConsPap._(' consultation(s) papier.'));
913
914
915 // Termine le traitement
916 return $this->end_treatment(__METHOD__, true);
917 }
918 }
919
920
921 /**
922 * VIEW - view_ajout_multiple.
923 *
924 * Formulaire specifique
925 *
926 * @return void
927 */
928 function view_ajout_multiple() {
929
930 if (count($this->f->get_submitted_get_value()) > 0
931 && $this->f->get_submitted_get_value('data') !== null
932 && $this->f->get_submitted_get_value('data') != "" ) {
933 $this->f->disableLog();
934 $this->ajouter_multiple();
935
936 } else {
937
938 // Vérification de l'accessibilité sur l'élément
939 $this->checkAccessibility();
940 //
941 $datasubmit = $this->getDataSubmitSousForm();
942 $return_url = OM_ROUTE_SOUSTAB;
943 $return_url .= "&obj=consultation";
944 $return_url .= "&retourformulaire=".$this->getParameter("retourformulaire");
945 $return_url .= "&idxformulaire=".$this->getParameter("idxformulaire");
946 $return_url .= "&premier=".$this->getParameter("premiersf");
947 $return_url .= "&tricol=".$this->getParameter("tricolsf");
948 // Légende du fieldset
949 $title = _("Objet");
950 /*Requête qui récupère les services qui sont dans des thématiques*/
951 $sql =
952 "SELECT
953 ser_cat.service_categorie,
954 ser_cat.libelle AS them_lib,
955 ser.service,
956 CONCAT(ser.abrege, ' - ', ser.libelle) AS ser_lib,
957 ser.consultation_papier
958 FROM
959 ".DB_PREFIXE."lien_service_service_categorie lie,
960 ".DB_PREFIXE."service_categorie ser_cat,
961 ".DB_PREFIXE."service ser
962 LEFT JOIN ".DB_PREFIXE."om_collectivite
963 ON ser.om_collectivite = om_collectivite.om_collectivite
964 WHERE
965 ser_cat.service_categorie = lie.service_categorie AND
966 ser.service = lie.service AND
967 (
968 (ser.om_validite_debut IS NULL
969 AND (ser.om_validite_fin IS NULL
970 OR ser.om_validite_fin > CURRENT_DATE))
971 OR
972 (ser.om_validite_debut <= CURRENT_DATE
973 AND (ser.om_validite_fin IS NULL
974 OR ser.om_validite_fin > CURRENT_DATE))
975 )";
976
977 // Si c'est un sous-formulaire de dossier d'instruction ou une de ses surcharges
978 // mes encours, mes clôtures...
979 $is_in_context_of_foreign_key = $this->is_in_context_of_foreign_key("dossier", $this->getParameter('retourformulaire'));
980 if ($is_in_context_of_foreign_key == true) {
981
982 // on recupère les services des multicollectivités et de celle
983 // du DI
984 $di = $this->f->get_inst__om_dbform(array(
985 "obj" => "dossier_instruction",
986 "idx" => $this->getParameter('idxformulaire'),
987 ));
988
989 //
990 $sql .= sprintf(" AND (om_collectivite.niveau = '2' OR ser.om_collectivite = %s) ", $di->getVal('om_collectivite'));
991 }
992 //
993 $sql .= " ORDER BY them_lib, ser.abrege, ser.libelle";
994
995 $res = $this->f->db->query($sql);
996 $this->f->addToLog(
997 "app/consultation_multiple.php: db->query(\"".$sql."\")", VERBOSE_MODE
998 );
999 $this->f->isDatabaseError($res);
1000
1001 $temp_ser_cat = 0;
1002 $liste_gauche = "";
1003
1004 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1005 $name = $row['service_categorie'].'_'.
1006 $row['service'].'_'.
1007 (($row['consultation_papier'] == '' || $row['consultation_papier'] == 'f' ) ? '0' : '1' ).'_';
1008 // On change de thématique, donc rajoute le nom de la thématique
1009 if ( $temp_ser_cat != $row['service_categorie'] ){
1010
1011 $temp_ser_cat = $row['service_categorie'];
1012 $liste_gauche .= '
1013 <div id="them_'.$row['service_categorie'].'" class="liste_gauche_them" >'.
1014 $row['them_lib'].
1015 '</div>
1016 <div
1017 class="liste_gauche_service t'.$name.'"
1018 id="t'.$name.'" >
1019 '.$row['ser_lib'].'
1020 <input class="t'.$name.'" type="checkbox" '.(($row['consultation_papier'] == '' || $row['consultation_papier'] == 'f' ) ? '' : 'checked="checked"' ).'/>
1021 </div>
1022 ';
1023 }
1024
1025 /*On est dans la même thématique*/
1026 else {
1027
1028 $liste_gauche .= '
1029 <div
1030 class="liste_gauche_service t'.$name.'"
1031 id="t'.$name.'" >
1032 '.$row['ser_lib'].'
1033 <input class="t'.$name.'" type="checkbox" '.(($row['consultation_papier'] == '' || $row['consultation_papier'] == 'f' ) ? '' : 'checked="checked"' ).'/>
1034 </div>
1035 ';
1036 }
1037
1038 }
1039
1040 /*Requête qui récupère les services qui ne sont pas dans une thématique*/
1041 $sql =
1042 "SELECT service.service,
1043 CONCAT(service.abrege, ' - ', service.libelle) AS ser_lib,
1044 service.consultation_papier
1045 FROM ".DB_PREFIXE."service
1046 LEFT JOIN ".DB_PREFIXE."om_collectivite
1047 ON service.om_collectivite = om_collectivite.om_collectivite
1048 WHERE service NOT IN
1049 (
1050 SELECT service
1051 FROM ".DB_PREFIXE."lien_service_service_categorie
1052 )
1053 AND
1054 (
1055 om_validite_fin <= CURRENT_DATE OR
1056 om_validite_fin IS NULL
1057 )
1058 ";
1059
1060 // Si c'est un sous-formulaire de dossier d'instruction ou une de ses surcharges
1061 // mes encours, mes clôtures...
1062 $is_in_context_of_foreign_key = $this->is_in_context_of_foreign_key("dossier", $this->getParameter('retourformulaire'));
1063 if ($is_in_context_of_foreign_key == true) {
1064
1065 // on recupère les services des multicollectivités et de celle
1066 // du DI
1067 $di = $this->f->get_inst__om_dbform(array(
1068 "obj" => "dossier_instruction",
1069 "idx" => $this->getParameter('idxformulaire'),
1070 ));
1071
1072 //
1073 $sql .= sprintf(" AND (om_collectivite.niveau = '2' OR service.om_collectivite = %s) ", $di->getVal('om_collectivite'));
1074 }
1075
1076 // Tri des services qui ne sont pas dans une thématique par ordre alphabétique
1077 $sql .= " ORDER BY service.abrege, service.libelle";
1078
1079
1080 $res = $this->f->db->query($sql);
1081 $this->f->isDatabaseError($res);
1082
1083 if ($res->numrows() > 0) {
1084 $liste_gauche .= '
1085 <div id="them_0" class="liste_gauche_them">Autres</div>';
1086 }
1087
1088 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1089
1090 /*Ajout de tous les services qui n'ont pas de thématique*/
1091 $name = '0_'.
1092 $row['service'].'_'.
1093 (($row['consultation_papier'] == '' || $row['consultation_papier'] == 'f' ) ? '0' : '1' ).'_';
1094 $liste_gauche .= '
1095 <div
1096 class="liste_gauche_service t'.$name.'"
1097 id="t'.$name.'" >
1098 '.$row['ser_lib'].'&nbsp;
1099 <input class="t'.$name.'" type="checkbox" '.(($row['consultation_papier'] == '' || $row['consultation_papier'] == 'f' ) ? '' : 'checked="checked"' ).'/>
1100 </div>
1101 ';
1102 }
1103
1104 /*Affichage du formulaire*/
1105 echo "\n<!-- ########## START DBFORM ########## -->\n";
1106 echo "<form";
1107 echo " method=\"post\"";
1108 echo " name=\"f2\"";
1109 echo " action=\"\"";
1110 echo " id=\"form_val\"";
1111 //echo " onsubmit=\"ajaxIt('consultation', '');return false;\"";
1112
1113 //echo " onsubmit=\"affichersform('".$this->getParameter("objsf")."', '".$datasubmit."', this);\"";
1114 echo ">\n";
1115 echo '<div class="formEntete ui-corner-all">';
1116 echo "<div>";
1117 echo '<div class="bloc">';
1118 echo "<fieldset class='cadre ui-corner-all ui-widget-content'>\n";
1119 echo "\t<legend class='ui-corner-all ui-widget-content ui-state-active'>".
1120 _("Consultation par thematique ")."</legend>";
1121 echo "<div class='fieldsetContent' style='width:100%'>";
1122 echo '<div class="field-ser-them field-type-hiddenstatic">';
1123 echo '<div class="form-libelle">';
1124 echo '<label class="libelle-dossier" for="dossier">';
1125 echo _('dossier');
1126 echo '<span class="not-null-tag">*</span>';
1127 echo '</label>';
1128 echo '</div>';
1129 echo '<div class="form-content">';
1130 echo '<input class="champFormulaire" type="hidden" value="'.$this->getParameter("idxformulaire").'" name="dossier"/>';
1131 echo $this->getParameter("idxformulaire");
1132 echo '</div>';
1133 echo '</div>';
1134 /*Code du nouveau champ*/
1135 echo '<div class="field-ser-them ser-them">';
1136 echo '<div class="list-ser-them">';
1137 echo $liste_gauche;
1138 echo '</div>';
1139 echo '<div class="button-ser-them">';
1140 echo '<ul>';
1141 echo '<li>';
1142 echo '<input type="button" value="'._("Ajouter").' >>" id="add-ser-them"/>';
1143 echo '</li>';
1144 echo '<li>';
1145 echo '<input type="button" value="<< '._("Supprimer").'" id="del-ser-them"/>';
1146 echo '</li>';
1147 echo '</ul>';
1148 echo '</div>';
1149 echo '<div class="list-sel-ser-them">';
1150 echo '<div class=\'row row_title\'>';
1151 echo '<div class=\'cell1 liste_droite_title list-sel-ser-them-title\'>'._('Service a consulter').'</div>';
1152 echo '<div class=\'cell2 liste_droite_title list-sel-ser-them-title\'>'._('Version papier').'</div>';
1153 echo '</div>';
1154 echo '</div>';
1155 echo '</div>';
1156 /* -- FIN --*/
1157 // Le champ de date d'envoi est visible seulement aux ayant-droits
1158 if($this->f->isAccredited('consultation_saisir_date_envoi')) {
1159 echo '<div class="field-ser-them field-type-date2">';
1160 }
1161 else {
1162 echo '<div class="field field-type-hiddendate">';
1163 }
1164 echo '<div class="form-libelle">';
1165 echo '<label class="libelle-date_envoi" for="date_envoi">';
1166 echo _('date_envoi');
1167 echo '<span class="not-null-tag">*</span>';
1168 echo '</label>';
1169 echo '</div>';
1170 echo '<div class="form-content">';
1171 echo '<input id="date_envoi" class="champFormulaire datepicker"
1172 type="text" onkeyup="" onchange="fdate(this);"
1173 maxlength="10" size="12" value="'.date("d/m/Y").'"
1174 name="date_envoi">';
1175 echo '</div>';
1176 echo '</div>';
1177 echo "</div>";
1178 echo "</fieldset>";
1179 echo '</div>';
1180 echo '</div>';
1181 echo '</div>';
1182 echo '<div class="formControls">';
1183
1184 echo '<div class="formControls">';
1185 echo "<input class=\"om-button ui-button ui-widget ui-state-default ui-corner-all\"
1186 type=\"button\"
1187
1188 value=\"Ajouter le(s) enregistrement(s) de la table : 'Consultation'\"
1189 id=\"button_val\">";
1190 $this->retoursousformulaire(
1191 $this->getParameter("idxformulaire"),
1192 $this->getParameter("retourformulaire"),
1193 null,
1194 $this->getParameter("objsf"),
1195 $this->getParameter("premiersf"),
1196 $this->getParameter("tricolsf"),
1197 $this->getParameter("validation"),
1198 $this->getParameter("idx"),
1199 $this->getParameter("maj"),
1200 $this->getParameter("retour")
1201 );
1202 echo '</div>';
1203 echo '</div>';
1204 echo '</form>';
1205
1206 echo "
1207 <script language='javascript' type='text/javascript'>
1208 $(function(){
1209 changeActionVal('');
1210 /*
1211 Sélectionne tous les services d'un thème au clique sur celui ci.
1212 */
1213 $('.liste_gauche_them').click(
1214 function(){
1215
1216 var id = $(this).attr('id').split('_')[1];
1217 var numSer = 0;
1218 var numSerWithClass = 0;
1219
1220 $('.list-ser-them div').each(
1221 function() {
1222
1223 if ( $(this).attr('id').indexOf('them') == -1 &&
1224 $(this).attr('id').indexOf(id) == 1 &&
1225 $(this).hasClass('liste_gauche_service_selected') )
1226
1227 numSerWithClass++;
1228
1229 if ( $(this).attr('id').indexOf('them') == -1 &&
1230 $(this).attr('id').indexOf(id) == 1 )
1231
1232 numSer++;
1233 }
1234 );
1235
1236 if ( numSerWithClass < numSer && numSerWithClass >= 0 ){
1237
1238 $('.list-ser-them div').each(
1239 function() {
1240
1241 if ( $(this).attr('id').indexOf('them') == -1 &&
1242 $(this).attr('id').indexOf(id) == 1 &&
1243 !$(this).hasClass('liste_gauche_service_selected') )
1244
1245 $(this).addClass('liste_gauche_service_selected');
1246 }
1247 );
1248 }
1249
1250 else {
1251
1252 $('.list-ser-them div').each(
1253 function() {
1254
1255 if ( $(this).attr('id').indexOf('them') == -1 &&
1256 $(this).attr('id').indexOf(id) == 1 &&
1257 $(this).hasClass('liste_gauche_service_selected') )
1258
1259 $(this).removeClass('liste_gauche_service_selected');
1260 }
1261 );
1262 }
1263 }
1264 );
1265
1266 /*
1267 Change la class CSS d'un service sur lequel on clique dans la liste de gauche.
1268 */
1269 $('.liste_gauche_service').click(
1270 function(){
1271 $(this).toggleClass('liste_gauche_service_selected');
1272 }
1273 );
1274
1275 /*
1276 Change la class CSS d'un service sur lequel on clique dans la liste de droite.
1277 */
1278 $('.field-ser-them').on(
1279 'click',
1280 '.cell1',
1281 function(){
1282 if ( !$(this).hasClass('liste_droite_title') )
1283 $(this).parent().toggleClass('liste_droite_service_selected');
1284 }
1285 );
1286
1287 $('.liste_droite_service input[type=checkbox]').live(
1288 'click',
1289 'input[type=checkbox]',
1290 function(){
1291
1292 old_id = $(this).attr('class');
1293
1294 tab_don = old_id.split('_');
1295
1296 new_id = tab_don[0] + '_' + tab_don[1] + '_' + ((tab_don[2] == 0 ) ? 1 : 0 ) + '_';
1297
1298 changeOneData( ';' + tab_don[1] + '_' + tab_don[2], ';' + tab_don[1] + '_' + ((tab_don[2] == 0) ? 1 : 0) );
1299 $('div[class=\"' + old_id + '\"]').attr('class', new_id);
1300 $(this).attr('class', new_id);
1301
1302 }
1303 );
1304
1305 $('#date_envoi').change(
1306 function (){
1307
1308 var listServ = new Array();
1309 var data = '';
1310
1311 $('.liste_gauche_service_selected').each(
1312 function(i) {
1313
1314 var id = $(this).attr('id');
1315
1316 if ( listServ.length > 0 && listServ.indexOf(id.split('_')[1]) != -1 )
1317 return;
1318 listServ[i] = id.split('_')[1];
1319 data += ';' + id.split('_')[1] + '_' + id.split('_')[2] ;
1320
1321 }
1322 );
1323
1324 changeActionVal(data);
1325 }
1326 );
1327
1328 /*
1329 Passe les services sélectionnés dans la liste de gauche dans celle de droite.
1330 */
1331 $('#add-ser-them').click(
1332 function() {
1333
1334 changeDataLeftColumn();
1335 }
1336 );
1337
1338 /*
1339 Passe les services sélectionnés dans la liste de droite dans celle de gauche.
1340 */
1341 $('#del-ser-them').click(
1342 function() {
1343
1344 var data = '';
1345
1346 //Supprime les éléments de la liste de droite
1347 $('.liste_droite_service_selected').each(
1348 function() {
1349
1350 var name = $('#'+ $(this).attr('id') + ' .cell1 div').attr('name');
1351
1352 manageListServ('.list-ser-them div', name, 1);
1353
1354 $(this).remove();
1355 }
1356 );
1357
1358 //Change les valeurs qui vont être renvoyées à la validation du formulaire
1359 $('.liste_droite_service').each(
1360 function(){
1361
1362 var name = $('#'+ $(this).attr('id') + ' .cell1 div').attr('name');
1363 data += ';' + name.split('_')[1] + '_' + name.split('_')[2] ;
1364 }
1365 );
1366
1367 changeActionVal(data);
1368 }
1369 );
1370 });
1371
1372 /*
1373 Vérifie que l'objet n'est pas une thématique et que son identifiant correspond.
1374 */
1375 function isNotthemIsOneServ( objet, id ){
1376 return ( $(objet).attr('id').indexOf('them') == -1 &&
1377 $(objet).attr('id').indexOf('_' + id.split('_')[1] + '_') != -1 );
1378 }
1379
1380 /*
1381 Affiche ou cache un élément qui n'est pas une thématique et dont son identifiant correspond.
1382 */
1383 function manageListServ( objet , name, type){
1384
1385 $(objet).each(
1386 function() {
1387
1388 if ( isNotthemIsOneServ(this, name) ){
1389 if ( type == 0 )
1390
1391 $(this).hide() ;
1392
1393 else {
1394
1395 if ( $(this).hasClass('liste_gauche_service_selected') )
1396
1397 $(this).toggleClass('liste_gauche_service_selected');
1398
1399 $(this).show() ;
1400
1401 }
1402 }
1403 }
1404 );
1405 }
1406
1407 /*
1408 Change les actions qui sont réalisées lors de la soumission du formulaire
1409 */
1410 function changeActionVal(data){
1411 date = $('#date_envoi').val();
1412
1413
1414
1415 $('#button_val').attr(
1416 'onclick',
1417 'if ( $(\'.liste_gauche_service_selected\').length > 0 && $(\'#date_envoi\').val() != \'\' ) { messageIt(\'consultation\', \'".html_entity_decode($datasubmit)."&data='+data+'&date_envoi='+date+'\',true);' +
1418 'messageIt(\'consultation\', \'".html_entity_decode($return_url)."\',false);} else alert(\'Veuillez choisir au moins un service et une date d envoi\');'
1419
1420 );
1421
1422 }
1423
1424 /*
1425 Change les actions qui sont réalisées lors de la soumission du formulaire
1426 */
1427 function changeOneData( oldData, newData) {
1428
1429 date = $('#date_envoi').val();
1430
1431 $('#button_val').attr(
1432 'onclick',
1433 $('#button_val').attr('onclick').replace(oldData,newData)
1434 );
1435
1436 }
1437
1438 function changeDataLeftColumn(){
1439
1440 $('.list-sel-ser-them').empty();
1441 $('.list-sel-ser-them').html(
1442 '<div class=\"row row_title\">' +
1443 '<div class=\"cell1 liste_droite_title list-sel-ser-them-title\">"._("Service a consulter")."</div>' +
1444 '<div class=\"cell2 liste_droite_title list-sel-ser-them-title\">"._("Version papier")."</div>' +
1445 '</div>'
1446 );
1447
1448 var listServ = new Array();
1449 var data = '';
1450
1451 $('.liste_gauche_service_selected').each(
1452 function(i) {
1453
1454 var id = $(this).attr('id');
1455
1456 if ( $.inArray(id.split('_')[1], listServ) != -1 )
1457 return;
1458
1459 data += ';' + id.split('_')[1] + '_' + id.split('_')[2] ;
1460 listServ[i] = id.split('_')[1];
1461
1462 $('.list-sel-ser-them').append(
1463 '<div id=\'s' + i + '\' class=\'row liste_droite_service\'>'+
1464 '<div class=\'cell1\'>'+
1465 '<div class=\'' + $(this).attr('id') + '\' name=\'' + $(this).attr('id') + '\'>'+
1466 $(this).html().split('<')[0]+
1467 '</div>'+
1468 '</div>' +
1469 '<div class=\'cell2\'>'+
1470 '<div>'+
1471 '<input class=\'' + $(this).attr('id') + '\''+$(this).html().split('<input')[1]+
1472 '</div>'+
1473 '</div>'+
1474 '</div>'
1475 );
1476
1477 $(this).hide();
1478
1479 manageListServ('.list-ser-them div', id, 0);
1480
1481 }
1482 );
1483 changeActionVal(data);
1484 }
1485 </script>";
1486 }
1487 }
1488
1489
1490 /**
1491 * TREATMENT - view_bordereau_envoi_maire.
1492 *
1493 * Génère et affiche l'édition PDF contenant une ou plusieurs consultations.
1494 *
1495 * @return [void]
1496 */
1497 function generate_pdf_consultation_multiple() {
1498 // Vérification de l'accessibilité sur l'élément
1499 $this->checkAccessibility();
1500 // Récupération de la collectivité du dossier d'instruction
1501 $collectivite = $this->f->getCollectivite($this->get_dossier_collectivite());
1502 // Identifiants des consultations à afficher
1503 $idsConsultations = $this->f->get_submitted_get_value('textids');
1504 // Type de chaque consultations (avec_avis_attendu, ...)
1505 $objConsultations = $this->f->get_submitted_get_value('textobj');
1506 // Génération du PDF
1507 $result = $this->compute_pdf_output('etat', $objConsultations, $collectivite, $idsConsultations);
1508 // Affichage du PDF
1509 $this->expose_pdf_output(
1510 $result['pdf_output'],
1511 $result['filename']
1512 );
1513 }
1514
1515 /**
1516 * SETTER_FORM - setValsousformulaire (setVal).
1517 *
1518 * @return void
1519 */
1520 function setValsousformulaire(&$form, $maj, $validation, $idxformulaire, $retourformulaire, $typeformulaire, &$dnu1 = null, $dnu2 = null) {
1521 parent::setValsousformulaire($form, $maj, $validation, $idxformulaire, $retourformulaire, $typeformulaire);
1522 //
1523 $this->retourformulaire = $retourformulaire;
1524 //
1525 if ($validation == 0) {
1526 if ($maj == 0 or $maj == 40) {
1527 $form->setVal("dossier", $this->getParameter("idxformulaire"));
1528 $form->setVal("date_envoi", date("d/m/Y"));
1529 }
1530 if (($maj == 1 || $maj == 91 || $maj == 100) && $this->getVal("date_retour") == "") {
1531 if ($this->f->isAccredited("consultation_retour_avis_suivi")
1532 || $this->f->isAccredited("consultation_retour_avis_service")) {
1533 //
1534 $form->setVal("date_retour", date("d/m/Y"));
1535 }
1536 }
1537 }
1538 }
1539
1540 /**
1541 * SETTER_FORM - setVal (setVal).
1542 *
1543 * @return void
1544 */
1545 function setVal(&$form, $maj, $validation, &$dnu1 = null, $dnu2 = null) {
1546 parent::setVal($form, $maj, $validation);
1547 //
1548 if (($maj == 1 || $maj == 91 || $maj == 100) && $this->getVal("date_retour") == "") {
1549 $form->setVal("date_retour", date('d/m/Y'));
1550 }
1551 }
1552
1553 function setvalF($val = array()) {
1554 //
1555 parent::setValF($val);
1556 //Si on crée une consultation on la met a visible
1557 if ($this->getParameter('maj') == 0) {
1558 $this->valF["visible"] = true;
1559 }
1560
1561 if ($this->getParameter('maj') == 0 or $this->getParameter('maj') == 40) {
1562 //
1563 if (isset($this->valF["date_envoi"])) {
1564 $this->valF["date_reception"] = $this->valF["date_envoi"];
1565 }
1566 //
1567 $this->valF["lu"] = true;
1568 }
1569
1570 // Si un retour d'avis est modifie on passe "lu" a false
1571 if(($this->getParameter('maj')==100 ) and (
1572 $this->val[array_search("avis_consultation",$this->champs)] != $val["avis_consultation"] OR
1573 $this->val[array_search("date_retour",$this->champs)] != $val["date_retour"] OR
1574 $this->val[array_search("motivation",$this->champs)] != $val["motivation"] OR
1575 $this->val[array_search("fichier",$this->champs)] != $val["fichier"])
1576 ) {
1577 $this->valF["lu"]=false;
1578 }
1579 }
1580
1581 function setLib(&$form, $maj) {
1582 //
1583 parent::setLib($form, $maj);
1584 //
1585 $form->setLib($this->clePrimaire, _("id"));
1586 $form->setLib('visible', _("visible dans les éditions"));
1587 }
1588
1589 function setType(&$form,$maj) {
1590 // Appel du parent
1591 parent::setType($form,$maj);
1592 $form->setType('dossier', 'hidden');
1593 $form->setType('marque', 'hidden');
1594 $form->setType('om_fichier_consultation_dossier_final', 'hidden');
1595 $form->setType('fichier_dossier_final', 'hidden');
1596 // MODE - AJOUTER
1597 if ($maj == 0) {
1598 // On cache alors tous les champs que nous ne voulons pas voir
1599 // apparaître dans le formulaire d'ajout (principalement les
1600 // informations sur le retour d'avis)
1601 $form->setType('date_retour', 'hiddendate');
1602 $form->setType('date_reception', 'hiddendate');
1603 $form->setType('date_limite', 'hiddendate');
1604 $form->setType('avis_consultation', 'hidden');
1605 $form->setType('visible', 'hidden');
1606 $form->setType('motivation', 'hidden');
1607 $form->setType('fichier', 'hidden');
1608 $form->setType('lu', 'hidden');
1609 // On permet la modification de certains champs
1610 $form->setType('dossier_libelle', 'hiddenstatic');
1611 $form->setType('service', 'select');
1612 // Le champ "date d'envoi" est affiché seulement si l'utilisateur a la
1613 // permission
1614 if($this->f->isAccredited('consultation_saisir_date_envoi')) {
1615 $form->setType('date_envoi', 'date2');
1616 }
1617 else {
1618 $form->setType('date_envoi', 'hiddendate');
1619 }
1620 }
1621 // MODE - MODIFIER
1622 if ($maj == 1) {
1623
1624 // On affiche en statique les informations qui ne sont plus
1625 // modifiables
1626 $form->setType('dossier_libelle', 'hiddenstatic');
1627 $form->setType('date_envoi', 'hiddenstaticdate');
1628 $form->setType('date_limite', 'hiddenstaticdate');
1629 $form->setType('service', 'selecthiddenstatic');
1630 $form->setType('visible', 'checkboxhiddenstatic');
1631
1632 // La date de réception ne peut être modifiée que par un
1633 // utilisateur en ayant spécifiquement la permission
1634 if($this->f->isAccredited(array('consultation','consultation_modifier_date_reception'), 'OR')) {
1635 $form->setType('date_reception', 'date2');
1636 } else {
1637 $form->setType('date_reception', 'hiddenstaticdate');
1638 }
1639
1640 // Le marqueur lu/non lu ne peut être modifié que par un
1641 // utilisateur en ayant spécifiquement la permission
1642 if ($this->f->isAccredited(array('consultation','consultation_modifier_lu'), 'OR')) {
1643 $form->setType('lu', 'checkbox');
1644 } else {
1645 $form->setType('lu', 'hidden');
1646 }
1647
1648 // Gestion du type du widget sur le champ fichier
1649 if($this->getVal("fichier") == "" OR
1650 $this->f->isAccredited(array('consultation', 'consultation_modifier_fichier'), 'OR')) {
1651 // Si il n'y a jamais eu de fichier enregistré ou que
1652 // l'utilisateur a spécifiquement les droits pour modifier
1653 // un fichier déjà enregistré alors on positionne un type
1654 // de widget modifiable
1655 $contexts = array(
1656 "demande_avis_encours",
1657 "dossier",
1658 "dossier_contentieux_mes_infractions",
1659 "dossier_contentieux_mes_recours",
1660 "dossier_contentieux_tous_recours",
1661 "dossier_contentieux_toutes_infractions",
1662 "dossier_instruction",
1663 "dossier_instruction_mes_clotures",
1664 "dossier_instruction_mes_encours",
1665 "dossier_instruction_tous_clotures",
1666 "dossier_instruction_tous_encours",
1667 "dossier_qualifier",
1668 );
1669 if (in_array($this->getParameter("retourformulaire"), $contexts) === true) {
1670 $form->setType('fichier', 'upload2');
1671 } else {
1672 $form->setType('fichier', 'upload');
1673 }
1674 } else {
1675 // Si non on affiche uniquement le nom du fichier
1676 $form->setType('fichier', 'filestaticedit');
1677 }
1678
1679 }
1680 // Mode supprimer
1681 if ($maj == 2) {
1682 $form->setType('fichier', 'filestatic');
1683 }
1684 // MODE - CONSULTER
1685 if ( $maj == 3 ) {
1686 $form->setType('fichier', 'file');
1687 }
1688
1689 // MODE - AJOUT MULTIPLE
1690 if ($maj == 40) {
1691 $form->setType('visible', 'hidden');
1692 }
1693
1694 // MODE - retour de consultation par suivi des date
1695 if ($maj == 100) {
1696 $form->setType("consultation", "hiddenstatic");
1697 $form->setType('dossier_libelle', 'hiddenstatic');
1698 $form->setType('date_envoi', 'hiddenstaticdate');
1699 $form->setType('date_limite', 'hiddenstaticdate');
1700 $form->setType('date_reception', 'hiddenstaticdate');
1701 $form->setType('service', 'selecthiddenstatic');
1702 $form->setType('date_retour', 'date');
1703 $form->setType('lu', 'hidden');
1704 $form->setType('visible', 'hidden');
1705 $form->setType("avis_consultation", "select");
1706 $form->setType("motivation", "textarea");
1707 $form->setType('fichier', 'upload');
1708 // Gestion du type du widget sur le champ fichier
1709 if($this->getVal("fichier") == "" OR
1710 $this->f->isAccredited(array('consultation', 'consultation_modifier_fichier'), 'OR')) {
1711 // Si il n'y a jamais eu de fichier enregistré ou que
1712 // l'utilisateur a spécifiquement les droits pour modifier
1713 // un fichier déjà enregistré alors on positionne un type
1714 // de widget modifiable
1715 $contexts = array(
1716 "demande_avis_encours",
1717 "dossier",
1718 "dossier_contentieux_mes_infractions",
1719 "dossier_contentieux_mes_recours",
1720 "dossier_contentieux_tous_recours",
1721 "dossier_contentieux_toutes_infractions",
1722 "dossier_instruction",
1723 "dossier_instruction_mes_clotures",
1724 "dossier_instruction_mes_encours",
1725 "dossier_instruction_tous_clotures",
1726 "dossier_instruction_tous_encours",
1727 "dossier_qualifier",
1728 );
1729 if (in_array($this->getParameter("retourformulaire"), $contexts) === true) {
1730 $form->setType('fichier', 'upload2');
1731 } else {
1732 $form->setType('fichier', 'upload');
1733 }
1734 } else {
1735 // Si non on affiche uniquement le nom du fichier
1736 $form->setType('fichier', 'filestaticedit');
1737 }
1738 }
1739 //// On cache la clé primaire
1740 //$form->setType('consultation', 'hidden');
1741 //
1742 if ($this->is_in_context_of_foreign_key("dossier", $this->getParameter("retourformulaire")) === true) {
1743 $form->setType('dossier_libelle', 'hidden');
1744 }
1745
1746 $form->setType('code_barres', 'hidden');
1747
1748 //Cache les champs pour la finalisation
1749 $form->setType('om_fichier_consultation', 'hidden');
1750 $form->setType('om_final_consultation', 'hidden');
1751
1752 if($maj == 50 OR $maj == 60 OR $maj == 70 OR $maj == 120 OR $maj == 130 OR $maj == 140) {
1753 foreach ($this->champs as $value) {
1754 $form->setType($value, 'hidden');
1755 }
1756 }
1757 }
1758
1759 // Cette méthode permet de calculer la date limite en fonction de la date
1760 // de réception et du délai de consultation du service consulté
1761 function calculDateLimite() {
1762 // mise a jour instruction avec evenement [return delay]
1763 if (array_key_exists("date_reception", $this->valF)
1764 && $this->valF["date_reception"] != "") {
1765 //
1766 $sql = " select delai from ".DB_PREFIXE."service ";
1767 $sql .= " where service='".$this->valF["service"]."' ";
1768 $delai = $this->f->db->getOne($sql);
1769 $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
1770 //
1771 $sql = " select delai_type from ".DB_PREFIXE."service ";
1772 $sql .= " where service='".$this->valF["service"]."' ";
1773 $delai_type = $this->f->db->getOne($sql);
1774 $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
1775 //
1776 $this->valF["date_limite"] = $this->f->mois_date($this->valF["date_reception"], $delai, "+", $delai_type);
1777 //
1778 if ($delai_type == "mois") {
1779 $delai_type_trad = _("mois");
1780 } else {
1781 $delai_type_trad = _("jour(s)");
1782 }
1783 //
1784 $this->addToMessage(_("delai")." ".
1785 _("retour")." ".$delai." ".$delai_type_trad." -> ".
1786 _("retour")." ".date("d/m/Y", strtotime($this->valF["date_limite"])));
1787 }
1788 }
1789
1790 /**
1791 * TRIGGER - triggerajouter.
1792 *
1793 * @return boolean
1794 */
1795 function triggerajouter($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
1796 $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
1797 //
1798 $this->calculDateLimite();
1799
1800 // Identifiant du type de courrier
1801 $idTypeCourrier = '12';
1802 $idCourrier = str_pad($this->valF["consultation"], 10, "0", STR_PAD_LEFT);
1803 // Code barres
1804 $this->valF["code_barres"] = $idTypeCourrier . $idCourrier;
1805 }
1806
1807 /**
1808 * TRIGGER - triggermodifier.
1809 *
1810 * @return boolean
1811 */
1812 function triggermodifier($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
1813 $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
1814 //
1815 $this->calculDateLimite();
1816 }
1817
1818 /**
1819 * TRIGGER - triggerajouterapres.
1820 *
1821 * - Notification par courrier du service consulté
1822 * - Interface avec le référentiel ERP [104]
1823 * - Interface avec le référentiel ERP [106]
1824 * - Finalisation du document PDF de consultation
1825 *
1826 * @return boolean
1827 */
1828 function triggerajouterapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
1829 $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
1830 // On a besoin de l'instance du dossier lié à la consultation
1831 $inst_di = $this->get_inst_dossier($this->valF['dossier']);
1832
1833 // On a besoin de l'instance du service lié à la consultation
1834 $inst_service = $this->get_inst_service($this->valF['service']);
1835
1836 /**
1837 * Notification par courriel du service consulté.
1838 *
1839 * Si il y a un problème lors de l'envoi du courriel, on prévient l'utilisateur
1840 * mais on ne bloque pas le traitement. Le courriel de notification n'a pas de
1841 * de caractère critique.
1842 */
1843 if ($inst_service->getVal('notification_email') == 't') {
1844 // Composition du titre du courriel
1845 $title = sprintf(
1846 '%s %s',
1847 _("Consultation de services : dossier no"),
1848 $inst_di->getVal($inst_di->clePrimaire)
1849 );
1850 $title = iconv("UTF-8", "CP1252", $title);
1851 // Composition du corps du courriel
1852 $corps = sprintf(
1853 '%s %s<br/>%s %s %s %s %s<br/>%s <a href=\'%s\'>%s</a> %s <a href=\'%s\'>%s</a>',
1854 _("Votre service est consulte concernant le dossier no"),
1855 $inst_di->getVal($inst_di->clePrimaire),
1856 _("Il concerne le terrain situe a l'adresse :"),
1857 $inst_di->getVal('terrain_adresse_voie_numero'),
1858 $inst_di->getVal('terrain_adresse_voie'),
1859 $inst_di->getVal('terrain_adresse_code_postal'),
1860 $inst_di->getVal('terrain_adresse_localite'),
1861 _("Vous pouvez y acceder et rendre votre avis a l'adresse"),
1862 // Adresse interne, si l'adresse termine par &idx= alors on ajoute l'identifiant de la consultation
1863 $this->f->getParameter('services_consultes_lien_interne').((substr($this->f->getParameter('services_consultes_lien_interne'), -5) == "&idx=") ? $this->valF['consultation'] : ""),
1864 _("Lien interne"),
1865 _("ou"),
1866 // Adresse externe, si l'adresse termine par &idx= alors on ajoute l'identifiant de la consultation
1867 $this->f->getParameter('services_consultes_lien_externe').((substr($this->f->getParameter('services_consultes_lien_externe'), -5) == "&idx=") ? $this->valF['consultation'] : ""),
1868 _("Lien externe")
1869 );
1870 $corps = iconv("UTF-8", "CP1252", $corps);
1871 // Envoi du mail avec message de retour
1872 if ($this->f->sendMail($title, $corps, iconv("UTF-8", "CP1252", $inst_service->getVal('email')))) {
1873 $this->addToMessage(_("Envoi d'un mail de notification au service")." \"(".$inst_service->getVal('abrege').") ".$inst_service->getVal("libelle")."\".");
1874 } else {
1875 $this->addToMessage(_("L'envoi du mail de notification a échoué.")
1876 .' '._("Veuillez contacter votre administrateur."));
1877 }
1878 }
1879
1880 // Récupère la collectivité du dossier d'instruction lié à la
1881 // consultation
1882 $om_collectivite = $this->get_dossier_collectivite();
1883
1884 /**
1885 * Interface avec le référentiel ERP.
1886 *
1887 * (WS->ERP)[104] Demande d'instruction de dossier PC pour un ERP -> PC
1888 * Déclencheur :
1889 * - L'option ERP est activée
1890 * - Le dossier est de type PC
1891 * - Le formulaire d'ajout de consultation est validé avec un service
1892 * correspondant à un des services ERP pour avis
1893 */
1894 //
1895 if ($this->f->is_option_referentiel_erp_enabled($om_collectivite) === true
1896 && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__pc')
1897 && in_array($inst_service->getVal($inst_service->clePrimaire), explode(";", $this->f->getParameter('erp__services__avis__pc')))) {
1898 //
1899 $infos = array(
1900 "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
1901 "consultation" => $this->valF['consultation'],
1902 "date_envoi" => $this->valF['date_envoi'],
1903 "service_abrege" => $inst_service->getVal('abrege'),
1904 "service_libelle" => $inst_service->getVal('libelle'),
1905 "date_limite" => $this->valF['date_limite'],
1906 );
1907 //
1908 $ret = $this->f->send_message_to_referentiel_erp(104, $infos);
1909 if ($ret !== true) {
1910 $this->cleanMessage();
1911 $this->addToMessage(_("Une erreur s'est produite lors de la notification (104) du référentiel ERP. Contactez votre administrateur."));
1912 return false;
1913 }
1914 $this->addToMessage(_("Notification (104) du référentiel ERP OK."));
1915 }
1916
1917 /**
1918 * Interface avec le référentiel ERP.
1919 *
1920 * (WS->ERP)[106] Consultation ERP pour conformité -> PC
1921 * Déclencheur :
1922 * - L'option ERP est activée
1923 * - Le dossier est de type PC
1924 * - Le formulaire d'ajout de consultation est validé avec un service
1925 * correspondant à un des services ERP pour conformité
1926 */
1927 //
1928 if ($this->f->is_option_referentiel_erp_enabled($om_collectivite) === true
1929 && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__pc')
1930 && in_array($inst_service->getVal($inst_service->clePrimaire), explode(";", $this->f->getParameter('erp__services__conformite__pc')))) {
1931 //
1932 $infos = array(
1933 "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
1934 "consultation" => $this->valF['consultation'],
1935 "date_envoi" => $this->valF['date_envoi'],
1936 "service_abrege" => $inst_service->getVal('abrege'),
1937 "service_libelle" => $inst_service->getVal('libelle'),
1938 "date_limite" => $this->valF['date_limite'],
1939 );
1940 //
1941 $ret = $this->f->send_message_to_referentiel_erp(106, $infos);
1942 if ($ret !== true) {
1943 $this->cleanMessage();
1944 $this->addToMessage(_("Une erreur s'est produite lors de la notification (106) du référentiel ERP. Contactez votre administrateur."));
1945 return false;
1946 }
1947 $this->addToMessage(_("Notification (106) du référentiel ERP OK."));
1948 }
1949
1950 /**
1951 * Finalisation du document PDF de consultation.
1952 */
1953 //
1954 return $this->finaliserAjouter($id);
1955 }
1956
1957 // =============================================
1958 // Ajout du fielset
1959 // Add fieldset
1960 // =============================================
1961 function setLayout(&$form, $maj){
1962
1963 //Champs sur lequel s'ouvre le fieldset
1964 $form->setBloc('dossier','D',"");
1965 $form->setFieldset('dossier','D',_('Consultation'));
1966
1967 //Champs sur lequel se ferme le fieldset
1968 $form->setFieldset('visible','F','');
1969 $form->setBloc('visible','F');
1970
1971 // MODE - autre que AJOUTER alors on affiche un fieldset retour
1972 // d'avis
1973 if ($maj != 0) {
1974
1975 //Champs sur lequel s'ouvre le fieldset
1976 $form->setBloc('date_reception','D',"");
1977 $form->setFieldset('date_reception','D',_('Retour d\'avis'));
1978
1979 //Champs sur lequel se ferme le fieldset
1980 $form->setFieldset('lu','F','');
1981 $form->setBloc('lu','F');
1982
1983 }
1984 }
1985
1986 /** Surcharge de la methode retour afin de retourner sur la page de saisie de
1987 * code barre si besoin
1988 **/
1989 function retour($premier = 0, $recherche = "", $tricol = "") {
1990 $params ="obj=".$this->get_absolute_class_name();
1991 if($this->getParameter("retour")=="form") {
1992 $params .= "&amp;idx=".$this->getParameter("idx");
1993 $params .= "&amp;action=3";
1994 }
1995 $params .= "&amp;premier=".$this->getParameter("premier");
1996 $params .= "&amp;tricol=".$this->getParameter("tricol");
1997 $params .= "&amp;advs_id=".$this->getParameter("advs_id");
1998 $params .= "&amp;valide=".$this->getParameter("valide");
1999 echo "\n<a class=\"retour\" ";
2000 echo "href=\"";
2001 //
2002
2003 if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
2004 echo OM_ROUTE_FORM."&".$params;
2005 } elseif($this->getParameter("retour")=="suivi_retours_de_consultation") {
2006 echo OM_ROUTE_FORM."&obj=consultation&idx=0&action=120";
2007 } else {
2008 echo OM_ROUTE_TAB."&".$params;
2009 }
2010 //
2011 echo "\"";
2012 echo ">";
2013 //
2014 echo _("Retour");
2015 //
2016 echo "</a>\n";
2017 }
2018
2019 /**
2020 * Surcharge du bouton retour pour popup
2021 */
2022 function retoursousformulaire($idxformulaire = NULL, $retourformulaire = NULL, $val = NULL,
2023 $objsf = NULL, $premiersf = NULL, $tricolsf = NULL, $validation = NULL,
2024 $idx = NULL, $maj = NULL, $retour = NULL) {
2025 if ($this->getParameter("retourformulaire") === "demande_avis_encours") {
2026 echo "\n<a class=\"retour\" ";
2027 echo "href=\"";
2028 echo "#";
2029 echo "\" ";
2030 echo ">";
2031 //
2032 echo _("Retour");
2033 //
2034 echo "</a>\n";
2035 } else {
2036 parent::retoursousformulaire($idxformulaire, $retourformulaire, $val,
2037 $objsf, $premiersf, $tricolsf, $validation,
2038 $idx, $maj, $retour);
2039 }
2040 }
2041
2042 /**
2043 * SETTER_FORM - setSelect.
2044 *
2045 * @return void
2046 */
2047 function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
2048 //parent::setSelect($form, $maj);
2049 // avis_consultation
2050 $this->init_select(
2051 $form,
2052 $this->f->db,
2053 $maj,
2054 null,
2055 "avis_consultation",
2056 $this->get_var_sql_forminc__sql("avis_consultation"),
2057 $this->get_var_sql_forminc__sql("avis_consultation_by_id"),
2058 true
2059 );
2060 // service
2061 $sql_service = $this->get_var_sql_forminc__sql("service");
2062 // si contexte DI, ou surcharge (mes_encours, mes_clotures...)
2063 $is_in_context_of_foreign_key = $this->is_in_context_of_foreign_key("dossier", $this->getParameter('retourformulaire'));
2064 if ($is_in_context_of_foreign_key == true) {
2065 // on recupÚre les services des multicollectivités et de celle du DI
2066 $di = $this->f->get_inst__om_dbform(array(
2067 "obj" => "dossier_instruction",
2068 "idx" => $this->getParameter('idxformulaire'),
2069 ));
2070 $sql_service = str_replace(
2071 '<collectivite_di>',
2072 $di->getVal("om_collectivite"),
2073 $this->get_var_sql_forminc__sql("service_by_collectivite_from_di")
2074 );
2075
2076 // Si l'option référentiel ERP est activée, et que le type du
2077 // dossier d'instruction en contexte n'est pas autorisé à être
2078 // interfacé avec le référentiel ERP, alors les services à consulter
2079 // représentant les services ERP ne doivent pas être proposés dans
2080 // la liste à choix
2081 if ($this->f->is_option_referentiel_erp_enabled($di->getVal("om_collectivite")) === true
2082 && $this->f->getDATCode($di->getVal('dossier')) == $this->f-> getParameter ('erp__dossier__nature__pc')
2083 &&($this->f->getParameter('erp__dossier__type_di__pc')) !== null) {
2084 //
2085 $query_where_service_pc = "";
2086 $erp_di_pc = $this->f->getParameter('erp__dossier__type_di__pc');
2087 $erp_di_pc = explode(";", $erp_di_pc);
2088 $type_di = $di->getVal('dossier_instruction_type') ;
2089
2090 if (in_array($type_di, $erp_di_pc) === false) {
2091 // Dans le cas d'une consultation pour avis
2092 // Si les identifiant des services à consulter sont définis
2093 // dans le paramètre erp__services__avis__pc
2094 if ($this->f->getParameter('erp__services__avis__pc') !== null) {
2095 $erp_service_pc = $this->f->getParameter('erp__services__avis__pc');
2096 $erp_service_pc = explode(";", $erp_service_pc);
2097
2098 if (is_array($erp_service_pc) === true
2099 && empty($erp_service_pc) !== true) {
2100 //
2101 $query_where_service_pc .= sprintf(
2102 ' AND service.service NOT IN (%s) ',
2103 implode(", ", $erp_service_pc)
2104 );
2105 }
2106 }
2107
2108 // Dans le cas d'une consultation pour conformité
2109 // Si les identifiant des services à consulter sont définis
2110 // dans le paramètre erp__services__avis__pc
2111 if ($this->f->getParameter('erp__services__conformite__pc') !== null) {
2112 $erp_service_pc = $this->f->getParameter('erp__services__conformite__pc');
2113 $erp_service_pc = explode(";", $erp_service_pc);
2114
2115 if (is_array($erp_service_pc) === true
2116 && empty($erp_service_pc) !== true) {
2117 //
2118 $query_where_service_pc .= sprintf(
2119 ' AND service.service NOT IN (%s) ',
2120 implode(", ", $erp_service_pc)
2121 );
2122 }
2123 }
2124 }
2125
2126 $sql_service = str_replace('ORDER BY', $query_where_service_pc."ORDER BY", $sql_service);
2127 }
2128 }
2129 $this->init_select(
2130 $form,
2131 $this->f->db,
2132 $maj,
2133 null,
2134 "service",
2135 $sql_service,
2136 $this->get_var_sql_forminc__sql("service_by_id"),
2137 true
2138 );
2139 //Seulement dans le cas d'un retour d'avis
2140 // Ajout des contraintes spécifiques pour l'ajout d'un fichier en retour de
2141 // consultation
2142 if ($this->getParameter("retourformulaire") == "demande_avis_encours"
2143 || $this->getParameter("maj") == 100
2144 || $this->getParameter("maj") == 91) {
2145 // avis_consultation
2146 $this->init_select(
2147 $form,
2148 $this->f->db,
2149 1,
2150 null,
2151 "avis_consultation",
2152 $this->get_var_sql_forminc__sql("avis_consultation"),
2153 $this->get_var_sql_forminc__sql("avis_consultation_by_id"),
2154 true
2155 );
2156 //Tableau des contraintes spécifiques
2157 $params = array(
2158 "constraint" => array(
2159 "size_max" => 2,
2160 "extension" => ".pdf"
2161 ),
2162 );
2163
2164 $form->setSelect("fichier", $params);
2165 }
2166 }
2167
2168 /**
2169 * Finalisation du document lors de l'ajout d'une consultation.
2170 *
2171 * @param integer $id_consult indentifiant de l'objet
2172 */
2173 function finaliserAjouter($id_consult){
2174 //
2175 $this->begin_treatment(__METHOD__);
2176
2177 //
2178 $admin_msg_error = _("Veuillez contacter votre administrateur.");
2179 $file_msg_error = _("La finalisation du document a échoué.")
2180 ." ".$admin_msg_error;
2181 $bdd_msg_error = _("Erreur de base de données.")
2182 ." ".$admin_msg_error;
2183 $log_msg_error = "Finalisation non enregistrée - id consultation = %s - uid fichier = %s";
2184
2185 $uid = $this->file_finalizing($id_consult);
2186 // Comme pour le fonctionnement de l'envoi de mail,
2187 // Si échec cela ne stoppe pas la création de la consultation.
2188 // L'utilisateur en est tout de même informé dans l'IHM
2189 // et l'erreur est loguée.
2190 if ($uid == '' || $uid == 'OP_FAILURE' ) {
2191 $this->addToMessage($file_msg_error);
2192 $this->addToLog(sprintf($log_msg_error, $id_consult, $uid), VERBOSE_MODE);
2193 return $this->end_treatment(__METHOD__, true);
2194 }
2195
2196 // Si succès mise à jour de la consultation
2197 $valF = array(
2198 "om_final_consultation" => true,
2199 "om_fichier_consultation" => $uid
2200 );
2201 //
2202 $res = $this->f->db->autoExecute(DB_PREFIXE.$this->table, $valF,
2203 DB_AUTOQUERY_UPDATE, $this->getCle($id_consult));
2204 //
2205 $this->addToLog(
2206 "finaliserAjouter() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id_consult)."\")",
2207 VERBOSE_MODE
2208 );
2209 //
2210 if ($this->f->isDatabaseError($res, true) === true) {
2211 $this->correct = false;
2212 // Remplacement du message de validation
2213 $this->msg = '';
2214 $this->addToMessage($bdd_msg_error);
2215 return $this->end_treatment(__METHOD__, false);
2216 }
2217 //
2218 return $this->end_treatment(__METHOD__, true);
2219 }
2220
2221 /**
2222 * Finalisation du fichier.
2223 *
2224 * @param integer $id indentifiant de l'objet
2225 *
2226 * @return string uid du fichier finalisé
2227 */
2228 function file_finalizing($id){
2229 $pdf = $this->generate_pdf_consultation();
2230
2231 if(isset($this->valF["om_final_consultation"])) {
2232 $finalized = $this->valF["om_final_consultation"];
2233 } else {
2234 $finalized = $this->getVal("om_final_consultation");
2235 }
2236
2237 // Métadonnées du document
2238 $metadata = array(
2239 'filename' => $pdf["filename"],
2240 'mimetype' => 'application/pdf',
2241 'size' => strlen($pdf["pdf_output"])
2242 );
2243
2244 // Récupération des métadonnées calculées après validation
2245 $spe_metadata = $this->getMetadata("om_fichier_consultation");
2246
2247 $metadata = array_merge($metadata, $spe_metadata);
2248
2249 // Si le document a déjà été finalisé
2250 if ( $finalized != '' ){
2251
2252 // Met à jour le document mais pas son uid
2253 $uid = $this->f->storage->update(
2254 $this->getVal("om_fichier_consultation"), $pdf["pdf_output"], $metadata);
2255 }
2256 // Sinon, ajoute le document et récupère son uid
2257 else {
2258
2259 // Stockage du PDF
2260 $uid = $this->f->storage->create($pdf["pdf_output"], $metadata);
2261 }
2262
2263 return $uid;
2264
2265 }
2266
2267
2268 /**
2269 * TREATMENT - finalize.
2270 *
2271 * Permet de finaliser un enregistrement
2272 *
2273 * @param array $val valeurs soumises par le formulaire
2274 * @param null $dnu1 @deprecated Ancienne ressource de base de données.
2275 * @param null $dnu2 @deprecated Ancien marqueur de débogage.
2276 *
2277 * @return boolean
2278 */
2279 function finalize($val = array(), &$dnu1 = null, $dnu2 = null) {
2280
2281 // Cette méthode permet d'exécuter une routine en début des méthodes
2282 // dites de TREATMENT.
2283 $this->begin_treatment(__METHOD__);
2284
2285 // Traitement de la finalisation
2286 $ret = $this->manage_finalizing("finalize", $val);
2287
2288 // Si le traitement retourne une erreur
2289 if ($ret !== true) {
2290
2291 // Termine le traitement
2292 $this->end_treatment(__METHOD__, false);
2293 }
2294
2295 // Termine le traitement
2296 return $this->end_treatment(__METHOD__, true);
2297 }
2298
2299 /**
2300 * TREATMENT - unfinalize.
2301 *
2302 * Permet de definaliser un enregistrement
2303 *
2304 * @param array $val valeurs soumises par le formulaire
2305 * @param null $dnu1 @deprecated Ancienne ressource de base de données.
2306 * @param null $dnu2 @deprecated Ancien marqueur de débogage.
2307 *
2308 * @return boolean
2309 */
2310 function unfinalize($val = array(), &$dnu1 = null, $dnu2 = null) {
2311
2312 // Cette méthode permet d'exécuter une routine en début des méthodes
2313 // dites de TREATMENT.
2314 $this->begin_treatment(__METHOD__);
2315
2316 // Traitement de la finalisation
2317 $ret = $this->manage_finalizing("unfinalize", $val);
2318
2319 // Si le traitement retourne une erreur
2320 if ($ret !== true) {
2321
2322 // Termine le traitement
2323 $this->end_treatment(__METHOD__, false);
2324 }
2325
2326 // Termine le traitement
2327 return $this->end_treatment(__METHOD__, true);
2328 }
2329
2330 /**
2331 * TREATMENT - manage_visibilite_consultation.
2332 *
2333 * Permet de masquer la consultation dans les éditions si elle est actuellement
2334 * affichée, ou de l'afficher si elle est actuellement masquée.
2335 *
2336 *
2337 * @param array $val valeurs soumises par le formulaire
2338 * @param null $dnu1 @deprecated Ancienne ressource de base de données.
2339 * @param null $dnu2 @deprecated Ancien marqueur de débogage.
2340 *
2341 * @return boolean
2342 */
2343 function manage_visibilite_consultation($val = array(), &$dnu1 = null, $dnu2 = null) {
2344
2345 // Cette méthode permet d'exécuter une routine en début des méthodes
2346 // dites de TREATMENT.
2347 $this->begin_treatment(__METHOD__);
2348
2349 // Recuperation de la valeur de la cle primaire de l'objet
2350 $id = $this->getVal($this->clePrimaire);
2351
2352 if($this->getVal("visible") == 'f') {
2353 $valF["visible"] = true;
2354 }
2355 else {
2356 $valF["visible"] = false;
2357 }
2358
2359 // Execution de la requête de modification des donnees de l'attribut
2360 $res = $this->f->db->autoExecute(DB_PREFIXE.$this->table, $valF,
2361 DB_AUTOQUERY_UPDATE, $this->getCle($id));
2362 $this->addToLog(
2363 "manage_visibilite_consultation() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id)."\")",
2364 VERBOSE_MODE
2365 );
2366
2367 // Si une erreur survient
2368 if (database::isError($res, true)) {
2369
2370 // Appel de la methode de recuperation des erreurs
2371 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
2372 $this->correct = false;
2373 $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
2374 // Termine le traitement
2375 return $this->end_treatment(__METHOD__, false);
2376 }
2377
2378 if ($valF["visible"] === false) {
2379 $this->addToMessage(_("La consultation est masquée dans les éditions."));
2380 }
2381 else {
2382 $this->addToMessage(_("La consultation est affichée dans les éditions."));
2383 }
2384 // Termine le traitement
2385 return $this->end_treatment(__METHOD__, true);
2386 }
2387
2388
2389 /**
2390 * Finalisation des documents.
2391 *
2392 * @param string $mode finalize/unfinalize
2393 * @param array $val valeurs soumises par le formulaire
2394 */
2395 function manage_finalizing($mode = null, $val = array()) {
2396 //
2397 $this->begin_treatment(__METHOD__);
2398
2399 // Recuperation de la valeur de la cle primaire de l'objet
2400 $id_consult = $this->getVal($this->clePrimaire);
2401
2402 //
2403 $admin_msg_error = _("Veuillez contacter votre administrateur.");
2404 $file_msg_error = _("Erreur de traitement de fichier.")
2405 ." ".$admin_msg_error;
2406 $bdd_msg_error = _("Erreur de base de données.")
2407 ." ".$admin_msg_error;
2408 $log_msg_error = "Finalisation non enregistrée - id consultation = %s - uid fichier = %s";
2409
2410 // Si on finalise le document
2411 if ($mode == "finalize") {
2412 //
2413 $etat = _('finalisation');
2414 // Finalisation du fichier
2415 $uid = $this->file_finalizing($id_consult);
2416 }
2417 //
2418 else {
2419 //
2420 $etat = _('définalisation');
2421 //Récupération de l'uid du document finalisé
2422 $uid = $this->getVal("om_fichier_consultation");
2423 }
2424
2425 // Si on définalise l'UID doit être défini
2426 // Si on finalise la création/modification du fichier doit avoir réussi
2427 if ($uid == '' || $uid == 'OP_FAILURE' ) {
2428 $this->correct = false;
2429 $this->addToMessage($file_msg_error);
2430 $this->addToLog(sprintf($log_msg_error, $id_consult, $uid), VERBOSE_MODE);
2431 return $this->end_treatment(__METHOD__, false);
2432 }
2433
2434 foreach ($this->champs as $key => $value) {
2435 //
2436 $val[$value] = $this->val[$key];
2437 }
2438 $this->setvalF($val);
2439
2440 // Verification de la validite des donnees
2441 $this->verifier($this->val);
2442 // Si les verifications precedentes sont correctes, on procede a
2443 // la modification, sinon on ne fait rien et on retourne une erreur
2444 if ($this->correct === true) {
2445
2446 // Execution du trigger 'before' specifique au MODE 'update'
2447 $this->triggermodifier($id_consult, $this->f->db, $this->val, DEBUG);
2448 // Suppression de son message de validation
2449 $this->msg = '';
2450
2451 //
2452 $valF = array();
2453 if ($mode == "finalize") {
2454 $valF["om_final_consultation"] = true;
2455 } else {
2456 $valF["om_final_consultation"] = false;
2457 }
2458 $valF["om_fichier_consultation"] = $uid;
2459
2460 // Execution de la requête de modification des donnees de l'attribut
2461 // valF de l'objet dans l'attribut table de l'objet
2462 $res = $this->f->db->autoExecute(DB_PREFIXE.$this->table, $valF,
2463 DB_AUTOQUERY_UPDATE, $this->getCle($id_consult));
2464 $this->addToLog(
2465 "finaliser() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id_consult)."\")",
2466 VERBOSE_MODE
2467 );
2468 //
2469 if ($this->f->isDatabaseError($res, true) === true) {
2470 $this->correct = false;
2471 $this->addToMessage($bdd_msg_error);
2472 return $this->end_treatment(__METHOD__, false);
2473 }
2474 //
2475 $this->addToMessage(sprintf(_("La %s du document s'est effectuee avec succes."), $etat));
2476 return $this->end_treatment(__METHOD__, true);
2477 }
2478 // L'appel de verifier() a déjà positionné correct à false
2479 // et défini un message d'erreur.
2480 $this->addToLog(sprintf($log_msg_error, $id_consult, $uid), DEBUG_MODE);
2481 return $this->end_treatment(__METHOD__, false);
2482 }
2483
2484 /**
2485 * Permet de récupérer l'édition de la consultation.
2486 *
2487 * @param string $output type de sortie
2488 *
2489 * @return string si le type de sortie est string, le contenu du pdf est retourné.
2490 */
2491 function generate_pdf_consultation() {
2492 if(isset($this->valF[$this->clePrimaire])) {
2493 $id = $this->valF[$this->clePrimaire];
2494 } else {
2495 $id = $this->getVal($this->clePrimaire);
2496 }
2497
2498 // Requête qui récupère le type de consultation
2499 $sql = " SELECT id ";
2500 $sql .= " FROM ".DB_PREFIXE."service ";
2501 $sql .= " LEFT JOIN ".DB_PREFIXE."om_etat ";
2502 $sql .= " ON service.edition = om_etat.om_etat ";
2503 $sql .= " WHERE service=(";
2504 $sql .= " SELECT service ";
2505 $sql .= " FROM ".DB_PREFIXE."consultation ";
2506 $sql .= " WHERE consultation=".$id."";
2507 $sql .= ") ";
2508 $obj = $this->f->db->getone($sql);
2509 $this->f->addTolog(
2510 __FILE__." - ".__METHOD__." : db->getone(\"".$sql."\");",
2511 VERBOSE_MODE
2512 );
2513 if($this->f->isDatabaseError($obj, true)) {
2514 $this->addToMessage(_("Aucun document genere."));
2515 $this->addToMessage(_("Finalisation non enregistree"));
2516 return false;
2517 }
2518 $collectivite = $this->f->getCollectivite($this->get_dossier_collectivite());
2519
2520 $pdf_output = $this->compute_pdf_output("etat", $obj, $collectivite, $id);
2521
2522 return $pdf_output;
2523 }
2524
2525 function get_dossier_collectivite() {
2526 if(isset($this->valF["dossier"])) {
2527 $dossier = $this->valF["dossier"];
2528 } else {
2529 $dossier = $this->getVal("dossier");
2530 }
2531
2532 $sql = "SELECT om_collectivite FROM ".DB_PREFIXE."dossier WHERE dossier.dossier='".$dossier."'";
2533 $collectivite = $this->f->db->getone($sql);
2534 $this->f->addTolog(
2535 __FILE__." - ".__METHOD__." : db->getone(\"".$sql."\");",
2536 VERBOSE_MODE
2537 );
2538 if($this->f->isDatabaseError($collectivite, true)) {
2539 $this->addToMessage(_("Aucun document genere."));
2540 $this->addToMessage(_("Finalisation non enregistree"));
2541 return false;
2542 }
2543 return $collectivite;
2544 }
2545
2546 function view_consulter_pdf(){
2547 if($this->getVal("om_final_consultation") == 't') {
2548 $lien = '../app/index.php?module=form&snippet=file&obj=consultation&'.
2549 'champ=om_fichier_consultation&id='.$this->getVal($this->clePrimaire);
2550 header("Location: ".$lien);
2551 } else {
2552
2553 $output = $this->generate_pdf_consultation();
2554 $this->expose_pdf_output($output["pdf_output"], $output["filename"]);
2555 }
2556 exit();
2557 }
2558
2559
2560 /**
2561 * Création du nom de fichier
2562 * @return string numéro de dossier d'instruction
2563 */
2564 protected function getFichierFilename() {
2565 return "consultation_avis_".$this->valF[$this->clePrimaire].".pdf";
2566 }
2567
2568 /**
2569 * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
2570 * @return string numéro de dossier d'instruction
2571 */
2572 protected function getDossier() {
2573 if(empty($this->specificMetadata)) {
2574 $this->getSpecificMetadata();
2575 }
2576 return $this->specificMetadata->dossier;
2577 }
2578 /**
2579 * Récupération la version du dossier d'instruction à ajouter aux métadonnées
2580 * @return int Version
2581 */
2582 protected function getDossierVersion() {
2583 if(empty($this->specificMetadata)) {
2584 $this->getSpecificMetadata();
2585 }
2586 return $this->specificMetadata->version;
2587 }
2588 /**
2589 * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
2590 * @return string numéro de dossier d'autorisation
2591 */
2592 protected function getNumDemandeAutor() {
2593 if(empty($this->specificMetadata)) {
2594 $this->getSpecificMetadata();
2595 }
2596 return $this->specificMetadata->dossier_autorisation;
2597 }
2598 /**
2599 * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
2600 * @return date demande initiale
2601 */
2602 protected function getAnneemoisDemandeAutor() {
2603 if(empty($this->specificMetadata)) {
2604 $this->getSpecificMetadata();
2605 }
2606 return $this->specificMetadata->date_demande_initiale;
2607 }
2608 /**
2609 * Récupération du type de dossier d'instruction à ajouter aux métadonnées
2610 * @return string type de dossier d'instruction
2611 */
2612 protected function getTypeInstruction() {
2613 if(empty($this->specificMetadata)) {
2614 $this->getSpecificMetadata();
2615 }
2616 return $this->specificMetadata->dossier_instruction_type;
2617 }
2618 /**
2619 * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
2620 * @return string avis
2621 */
2622 protected function getStatutAutorisation() {
2623 if(empty($this->specificMetadata)) {
2624 $this->getSpecificMetadata();
2625 }
2626 return $this->specificMetadata->statut;
2627 }
2628 /**
2629 * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
2630 * @return string type d'autorisation
2631 */
2632 protected function getTypeAutorisation() {
2633 if(empty($this->specificMetadata)) {
2634 $this->getSpecificMetadata();
2635 }
2636 return $this->specificMetadata->dossier_autorisation_type;
2637 }
2638 /**
2639 * Récupération de la date d'ajout de document à ajouter aux métadonnées
2640 * @return date de l'évènement
2641 */
2642 protected function getDateEvenementDocument() {
2643 return date("Y-m-d");
2644 }
2645 /**
2646 * Récupération du groupe d'instruction à ajouter aux métadonnées
2647 * @return string Groupe d'instruction
2648 */
2649 protected function getGroupeInstruction() {
2650 if(empty($this->specificMetadata)) {
2651 $this->getSpecificMetadata();
2652 }
2653 return $this->specificMetadata->groupe_instruction;
2654 }
2655 /**
2656 * Récupération du type de document à ajouter aux métadonnées
2657 * @return string Type de document
2658 */
2659 protected function getTitle() {
2660 if ($this->getParameter("retourformulaire") == "demande_avis_encours") {
2661 return 'Retour de consultation';
2662 } else {
2663 return 'Demande de consultation';
2664 }
2665 }
2666
2667
2668 /**
2669 * Récupération du champ ERP du dossier d'instruction.
2670 *
2671 * @return boolean
2672 */
2673 public function get_concerne_erp() {
2674 //
2675 if(empty($this->specificMetadata)) {
2676 $this->getSpecificMetadata();
2677 }
2678 //
2679 return $this->specificMetadata->erp;
2680 }
2681
2682
2683 /**
2684 * Cette méthode permet de stocker en attribut toutes les métadonnées
2685 * nécessaire à l'ajout d'un document.
2686 */
2687 public function getSpecificMetadata() {
2688 if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
2689 $dossier = $this->valF["dossier"];
2690 } else {
2691 $dossier = $this->getVal("dossier");
2692 }
2693 //Requête pour récupérer les informations essentiels sur le dossier d'instruction
2694 $sql = "SELECT dossier.dossier as dossier,
2695 dossier_autorisation.dossier_autorisation as dossier_autorisation,
2696 to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
2697 dossier_instruction_type.code as dossier_instruction_type,
2698 etat_dossier_autorisation.libelle as statut,
2699 dossier_autorisation_type.code as dossier_autorisation_type,
2700 groupe.code as groupe_instruction,
2701 CASE WHEN dossier.erp IS TRUE
2702 THEN 'true'
2703 ELSE 'false'
2704 END as erp
2705 FROM ".DB_PREFIXE."dossier
2706 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
2707 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2708 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
2709 ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
2710 LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
2711 ON dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
2712 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
2713 ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2714 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
2715 ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
2716 LEFT JOIN ".DB_PREFIXE."groupe
2717 ON dossier_autorisation_type.groupe = groupe.groupe
2718 WHERE dossier.dossier = '".$dossier."'";
2719 $res = $this->f->db->query($sql);
2720 $this->f->addToLog("obj/document_numerise.class.php : db->query(".$sql.")", VERBOSE_MODE);
2721 if ( database::isError($res)){
2722 die();
2723 }
2724
2725 //Le résultat est récupéré dans un objet
2726 $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
2727
2728 //Si il y a un résultat
2729 if ($row !== null) {
2730
2731 // Instrance de la classe dossier
2732 $inst_dossier = $this->get_inst_dossier($dossier);
2733
2734 // Insère l'attribut version à l'objet
2735 $row->version = $inst_dossier->get_dossier_instruction_version();
2736
2737 //Alors on créé l'objet dossier_instruction
2738 $this->specificMetadata = $row;
2739
2740 }
2741 }
2742
2743 /**
2744 *
2745 * @return boolean
2746 */
2747 function is_instructeur(){
2748
2749 //Si l'utilisateur est un instructeur
2750 if ($this->f->isUserInstructeur()){
2751 return true;
2752 }
2753 return false;
2754 }
2755
2756 function is_editable(){
2757 // Si bypass
2758 if ($this->f->can_bypass("consultation", "modifier")){
2759 return true;
2760 }
2761
2762 // Tester si le dossier est cloturé ,
2763 // et si l'instructeur est de la même division
2764 if ($this->is_instructeur_from_division_dossier() === true and
2765 $this->is_dossier_instruction_not_closed() === true) {
2766 return true;
2767 }
2768 return false;
2769 }
2770
2771 function is_deletable(){
2772 // Suppression possible pour l'instructeur de la division si pas d'avis
2773 if ($this->is_dossier_instruction_not_closed() === true &&
2774 $this->is_instructeur_from_division_dossier() === true &&
2775 $this->getVal("avis_consultation") == "" &&
2776 $this->getVal('fichier') == ""
2777 ){
2778 return true;
2779 }
2780
2781 // Si un avis a été rendu il faut que l'utilisateur ai le droit
2782 // specifique de suppression avec avis rendu et le bypass de division
2783 if ($this->getVal("avis_consultation") != "" or $this->getVal('fichier') != "") {
2784
2785 if ($this->f->can_bypass("consultation", "supprimer") and
2786 $this->f->isAccredited("consultation_supprimer_avec_avis_rendu") == true){
2787 return true;
2788 }
2789 } else {
2790 // Si pas d'avis rendu, le bypass suffit
2791 if ($this->f->can_bypass("consultation", "supprimer")){
2792 return true;
2793 }
2794 }
2795
2796 return false;
2797 }
2798
2799 function is_multiaddable(){
2800
2801 if ($this->f->can_bypass("consultation", "ajouter")){
2802 return true;
2803 }
2804
2805 if ($this->is_instructeur_from_division_dossier() === true){
2806 return true;
2807 }
2808 return false;
2809 }
2810
2811 function is_markable(){
2812
2813 if($this->f->can_bypass("consultation", "modifier_lu")){
2814 return true;
2815 }
2816
2817 if ($this->is_instructeur_from_division_dossier() === true){
2818 return true;
2819 }
2820 return false;
2821 }
2822
2823 // Si la consultation est visible alors on peut afficher le lien pour la masquer
2824 function is_visible() {
2825 if($this->getVal("visible") == 't') {
2826 return true;
2827 }
2828 return false;
2829 }
2830
2831 // Si la consultation n'est pas visible alors on peut afficher le lien pour l'afficher
2832 function is_not_visible() {
2833 if($this->getVal("visible") == 'f') {
2834 return true;
2835 }
2836 return false;
2837 }
2838
2839 function is_finalizable(){
2840
2841 if($this->f->can_bypass("consultation", "finaliser")){
2842 return true;
2843 }
2844
2845 if ($this->is_instructeur_from_division_dossier() === true &&
2846 $this->is_dossier_instruction_not_closed() === true){
2847 return true;
2848 }
2849
2850 return false;
2851 }
2852
2853 function is_unfinalizable(){
2854
2855 if($this->f->can_bypass("consultation", "definaliser")){
2856 return true;
2857 }
2858
2859 if ($this->is_instructeur_from_division_dossier() === true &&
2860 $this->is_dossier_instruction_not_closed() === true){
2861 return true;
2862 }
2863
2864 return false;
2865 }
2866
2867 /*
2868 * CONDITION - can_show_or_hide_in_edition
2869 *
2870 * Vérifie que l'utilisateur possède la permission bypass.
2871 * Vérifie que l'utilisateur est un instructeur, qu'il fait partie de la
2872 * division du dossier et que le dossier n'est pas clôturé.
2873 *
2874 * Cette méthode est identique aux conditions dans consultation.inc.php
2875 * permettant l'affichage des actions depuis le listing des consultations.
2876 * Il est nécessaire que cette méthode ainsi que la condition if restent
2877 * concordants en tout point afin que le comportement des actions soit
2878 * identique depuis le formulaire et depuis le listing.
2879 *
2880 * @return boolean
2881 *
2882 */
2883 function can_show_or_hide_in_edition() {
2884
2885 //
2886 if ($this->f->can_bypass("consultation", "visibilite_dans_edition") === true){
2887 return true;
2888 }
2889
2890 //
2891 if ($this->is_instructeur_from_division_dossier() === true and
2892 $this->is_dossier_instruction_not_closed() === true) {
2893 return true;
2894 }
2895 return false;
2896 }
2897
2898 /*
2899 * CONDITION - can_user_access_dossier_contexte_ajout
2900 *
2901 * Vérifie que l'utilisateur a bien accès au dossier d'instruction passé dans le
2902 * formulaire d'ajout.
2903 * Cette méthode vérifie que l'utilisateur est lié au groupe du dossier, et si le
2904 * dossier est confidentiel qu'il a accès aux confidentiels de ce groupe.
2905 *
2906 */
2907 function can_user_access_dossier_contexte_ajout() {
2908
2909 ($this->f->get_submitted_get_value('idxformulaire') !== null ? $id_dossier =
2910 $this->f->get_submitted_get_value('idxformulaire') : $id_dossier = "");
2911 //
2912 if ($id_dossier !== "") {
2913 $dossier = $this->f->get_inst__om_dbform(array(
2914 "obj" => "dossier_instruction",
2915 "idx" => $id_dossier,
2916 ));
2917 //
2918 return $dossier->can_user_access_dossier();
2919 }
2920 return false;
2921 }
2922
2923 /*
2924 * CONDITION - can_user_access_dossier_contexte_modification
2925 *
2926 * Vérifie que l'utilisateur a bien accès au dossier lié à la consultation.
2927 * Cette méthode vérifie que l'utilisateur est lié au groupe du dossier, et si le
2928 * dossier est confidentiel qu'il a accès aux confidentiels de ce groupe.
2929 *
2930 */
2931 function can_user_access_dossier_contexte_modification() {
2932
2933 ($this->f->get_submitted_get_value('idxformulaire') !== null ? $id_dossier =
2934 $this->f->get_submitted_get_value('idxformulaire') : $id_dossier = "");
2935
2936 if ($id_dossier != "") {
2937 $dossier = $this->f->get_inst__om_dbform(array(
2938 "obj" => "dossier",
2939 "idx" => $id_dossier,
2940 ));
2941 //
2942 return $dossier->can_user_access_dossier();
2943 }
2944 return false;
2945 }
2946
2947 /**
2948 * Indique si la redirection vers le lien de retour est activée ou non.
2949 *
2950 * L'objectif de cette méthode est de permettre d'activer ou de désactiver
2951 * la redirection dans certains contextes.
2952 *
2953 * @return boolean
2954 */
2955 function is_back_link_redirect_activated() {
2956 //
2957 if ($this->getParameter("maj") == 100) {
2958 //
2959 return false;
2960 }
2961 //
2962 return true;
2963 }
2964
2965 }// fin classe
2966
2967

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26