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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 13137 - (show annotations)
Thu Oct 27 20:34:03 2022 UTC (2 years, 3 months ago) by softime
File size: 167402 byte(s)
* Fusion de la branche d'intégration 5.14.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 'type' => 'getDocumentType',
34 'dossier_autorisation_type_detaille' => 'getDossierAutorisationTypeDetaille',
35 'dossier_instruction_type' => 'getDossierInstructionTypeLibelle',
36 'region' => 'getDossierRegion',
37 'departement' => 'getDossierDepartement',
38 'commune' => 'getDossierCommune',
39 'annee' => 'getDossierAnnee',
40 'division' => 'getDossierDivision',
41 'collectivite' => 'getDossierServiceOrCollectivite'
42 ),
43 "fichier" => array(
44 "filename" => "getFichierFilename",
45 "dossier" => "getDossier",
46 "dossier_version" => "getDossierVersion",
47 "numDemandeAutor" => "getNumDemandeAutor",
48 "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
49 "typeInstruction" => "getTypeInstruction",
50 "statutAutorisation" => "getStatutAutorisation",
51 "typeAutorisation" => "getTypeAutorisation",
52 "dateEvenementDocument" => "getDateEvenementDocument",
53 "groupeInstruction" => 'getGroupeInstruction',
54 "title" => 'getTitle',
55 'concerneERP' => 'get_concerne_erp',
56
57 'type' => 'getDocumentType',
58 'dossier_autorisation_type_detaille' => 'getDossierAutorisationTypeDetaille',
59 'dossier_instruction_type' => 'getDossierInstructionTypeLibelle',
60 'region' => 'getDossierRegion',
61 'departement' => 'getDossierDepartement',
62 'commune' => 'getDossierCommune',
63 'annee' => 'getDossierAnnee',
64 'division' => 'getDossierDivision',
65 'collectivite' => 'getDossierServiceOrCollectivite'
66 ),
67 );
68
69 /**
70 * Cette variable permet de stocker le résultat de la méthode
71 * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
72 * ces appels.
73 * @var string Code de la division du dossier en cours
74 */
75 var $_division_from_dossier = NULL;
76
77 /**
78 * Instance de la classe dossier
79 *
80 * @var mixed
81 */
82 var $inst_dossier = null;
83
84 /**
85 * Instance de la classe dossier
86 *
87 * @var mixed
88 */
89 protected $typeConsultation = null;
90
91 /**
92 * Instance de la classe dossier
93 *
94 * @var mixed
95 */
96 protected $valElementConsulte = array();
97
98 /**
99 * Définition des actions disponibles sur la classe.
100 *
101 * @return void
102 */
103 function init_class_actions() {
104
105 parent::init_class_actions();
106
107 // ACTION - 000 - ajouter
108 // Modifie la condition d'affichage du bouton ajouter
109 $this->class_actions[0]["condition"] = array("can_user_access_dossier_contexte_ajout");
110
111 // ACTION - 001 - modifier
112 //
113 $this->class_actions[1]["condition"] = array("is_editable", "can_user_access_dossier_contexte_modification");
114
115 // ACTION - 002 - supprimer
116 //
117 $this->class_actions[2]["condition"] = array("is_deletable", "can_user_access_dossier_contexte_modification");
118
119 // ACTION - 040 - ajout_multiple
120 // Ajout de consultations multiples
121 $this->class_actions[40] = array(
122 "identifier" => "ajout_multiple",
123 "view" => "view_ajout_multiple",
124 "method" => "ajouter_multiple",
125 "button" => "valider",
126 "permission_suffix" => "ajouter",
127 "condition" => array("is_multiaddable", "can_user_access_dossier_contexte_ajout"),
128 );
129 // ACTION - 041 - ajouter_consultation_tiers
130 // Ajout de consultations de tiers
131 $this->class_actions[41] = array(
132 "identifier" => "ajouter_consultation_tiers",
133 "permission_suffix" => "ajouter_consultation_tiers",
134 "crud" => "create",
135 "method" => "ajouter"
136 );
137 // ACTION - 050 - marquer_comme_lu
138 $this->class_actions[50] = array(
139 "identifier" => "marquer_comme_lu",
140 "portlet" => array(
141 "type" => "action-direct",
142 "libelle" => _("Marquer comme lu"),
143 "order" => 50,
144 "class" => "lu-16",
145 ),
146 "view" => "formulaire",
147 "method" => "marquer_comme_lu",
148 "permission_suffix" => "modifier_lu",
149 "condition" => array(
150 "is_markable",
151 "show_marquer_comme_lu_portlet_action",
152 "can_user_access_dossier_contexte_modification",
153 ),
154 );
155 // ACTION - 051 - marquer_comme_non_lu
156 $this->class_actions[51] = array(
157 "identifier" => "marquer_comme_non_lu",
158 "portlet" => array(
159 "type" => "action-direct",
160 "libelle" => __("Marquer comme non lu"),
161 "order" => 50,
162 "class" => "nonlu-16",
163 ),
164 "view" => "formulaire",
165 "method" => "marquer_comme_non_lu",
166 "permission_suffix" => "modifier_lu",
167 "condition" => array(
168 "is_markable",
169 "show_marquer_comme_non_lu_portlet_action",
170 "can_user_access_dossier_contexte_modification",
171 ),
172 );
173 // ACTION - 060 - finaliser
174 $this->class_actions[60] = array(
175 "identifier" => "finalise",
176 "portlet" => array(
177 "type" => "action-direct",
178 "libelle" => _("Finaliser le document"),
179 "order" => 60,
180 "class" => "finalise",
181 ),
182 "view" => "formulaire",
183 "method" => "finalize",
184 "permission_suffix" => "finaliser",
185 "condition" => array(
186 "show_consultation_finaliser_portlet_action",
187 "is_finalizable",
188 "can_user_access_dossier_contexte_modification",
189 ),
190 );
191
192 // ACTION - 070 - unfinaliser
193 $this->class_actions[70] = array(
194 "identifier" => "unfinalise",
195 "portlet" => array(
196 "type" => "action-direct",
197 "libelle" => _("Reprendre la redaction du document"),
198 "order" => 70,
199 "class" => "definalise",
200 ),
201 "view" => "formulaire",
202 "method" => "unfinalize",
203 "permission_suffix" => "definaliser",
204 "condition" => array(
205 "show_unfinalize_portlet_action",
206 "is_unfinalizable",
207 "can_user_access_dossier_contexte_modification",
208 ),
209 );
210
211 // ACTION - 080 - consulter_pdf
212 $this->class_actions[80] = array(
213 "identifier" => "consulter_pdf",
214 "portlet" => array(
215 "type" => "action-blank",
216 "libelle" => _("Editer la consultation PDF"),
217 "order" => 45,
218 "class" => "pdf-16",
219 ),
220 "view" => "view_consulter_pdf",
221 "permission_suffix" => "edition",
222 "condition" => array(
223 "can_user_access_dossier_contexte_modification",
224 "is_viewable",
225 ),
226 );
227
228 // ACTION - 090 - Générer l'édition PDF d'une consultation multiple
229 //
230 $this->class_actions[90] = array(
231 "identifier" => "generate_pdf_consultation_multiple",
232 "view" => "generate_pdf_consultation_multiple",
233 "permission_suffix" => "ajouter",
234 );
235
236 // ACTION - 100 - retour_consultation
237 // Lors de la saisie de retour d'avis par le profil suivi des dates
238 $this->class_actions[100] = array(
239 "identifier" => "retour_consultation",
240 "view" => "formulaire",
241 "method" => "modifier",
242 "button" => _("Modifier"),
243 "permission_suffix" => "modifier",
244 "condition" => array("is_suivi_retours_de_consultation, can_user_access_dossier_contexte_modification"),
245
246 );
247
248 $this->class_actions[110] = array(
249 "identifier" => "suivi_mise_a_jour_des_dates",
250 "view" => "view_suivi_mise_a_jour_des_dates",
251 "permission_suffix" => "suivi_mise_a_jour_des_dates",
252 );
253
254 $this->class_actions[120] = array(
255 "identifier" => "suivi_retours_de_consultation",
256 "view" => "view_suivi_retours_de_consultation",
257 "permission_suffix" => "suivi_retours_de_consultation",
258 );
259
260 // ACTION - 130 - Afficher la consultation dans les éditions
261 $this->class_actions[130] = array(
262 "identifier" => "afficher_dans_edition",
263 "portlet" => array(
264 "type" => "action-direct",
265 "libelle" => _("Afficher dans les éditions"),
266 "order" => 80,
267 "class" => "watch-16"
268 ),
269 "method" => "manage_visibilite_consultation",
270 "permission_suffix" => "visibilite_dans_edition",
271 "condition" => array(
272 "is_not_visible",
273 "can_show_or_hide_in_edition"),
274 );
275
276 // ACTION - 140 - Masquer la consultation dans les éditions
277 $this->class_actions[140] = array(
278 "identifier" => "masquer_dans_edition",
279 "portlet" => array(
280 "type" => "action-direct",
281 "libelle" => _("Masquer dans les éditions"),
282 "order" => 80,
283 "class" => "unwatch-16"
284 ),
285 "method" => "manage_visibilite_consultation",
286 "permission_suffix" => "visibilite_dans_edition",
287 "condition" => array(
288 "is_visible",
289 "can_show_or_hide_in_edition"),
290 );
291
292 // ACTION 400 - preview_edition
293 // /!\ ne pas changer le numéro d'action sinon la prévisualisation
294 // depuis l'onglet document ne sera plus dirigé vers la bonne action
295 $this->class_actions[400] = array(
296 "identifier" => "preview_edition",
297 "view" => "formulaire",
298 "permission_suffix" => "tab",
299 );
300 }
301
302 /**
303 * Clause select pour la requête de sélection des données de l'enregistrement.
304 *
305 * @return array
306 */
307 function get_var_sql_forminc__champs() {
308 return array(
309 "consultation",
310 "dossier.dossier",
311 "dossier_libelle",
312 "service",
313 "categorie_tiers_consulte",
314 "tiers_consulte",
315 "motif_consultation",
316 "commentaire",
317 "to_char(consultation.date_envoi ,'DD/MM/YYYY') as \"date_envoi\"",
318 "visible",
319 "to_char(consultation.date_reception ,'DD/MM/YYYY') as \"date_reception\"",
320 "to_char(consultation.date_limite ,'DD/MM/YYYY') as \"date_limite\"",
321 "to_char(consultation.date_retour ,'DD/MM/YYYY') as \"date_retour\"",
322 "avis_consultation",
323 "motivation",
324 "fichier",
325 "lu",
326 "code_barres",
327 "om_fichier_consultation",
328 "om_final_consultation",
329 "marque",
330 "om_fichier_consultation_dossier_final",
331 "fichier_dossier_final",
332 // Fieldset sépcifique au service Plat'AU
333 "texte_fondement_avis",
334 "texte_avis",
335 "texte_hypotheses",
336 "nom_auteur",
337 "prenom_auteur",
338 "qualite_auteur",
339 "'' as live_preview",
340 );
341 }
342
343 /**
344 * Clause from pour la requête de sélection des données de l'enregistrement.
345 *
346 * @return string
347 */
348 function get_var_sql_forminc__tableSelect() {
349 return sprintf(
350 '%1$s%2$s
351 LEFT JOIN %1$sdossier
352 ON consultation.dossier = dossier.dossier',
353 DB_PREFIXE,
354 $this->table
355 );
356 }
357
358 /**
359 *
360 * @return string
361 */
362 function get_var_sql_forminc__sql_service_by_collectivite_from_di() {
363 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";
364 }
365
366 /**
367 *
368 * @return string
369 */
370 function get_var_sql_forminc__sql_service_by_id() {
371 return "SELECT service.service, CONCAT(service.abrege, ' - ', service.libelle) FROM ".DB_PREFIXE."service WHERE service = '<idx>'";
372 }
373
374 /**
375 * Permet de modifier le fil d'Ariane depuis l'objet pour un formulaire
376 * @param string $ent Fil d'Ariane récupéréré
377 * @return Fil d'Ariane
378 */
379 function getFormTitle($ent) {
380 //
381 if ($this->getParameter('maj') == 120) {
382 //
383 return _("suivi")." -> "._("demandes d'avis")." -> "._("retours de consultation");
384 }
385 //
386 if ($this->getParameter('maj') == 110) {
387 //
388 return _("suivi")." -> "._("demandes d'avis")." -> "._("mise a jour des dates");
389 }
390 //
391 if ($this->getParameter('maj') == 100) {
392 //
393 return _("suivi")." -> "._("demandes d'avis")." -> "._("retours de consultation")." -> ".$this->getVal($this->clePrimaire);
394 }
395 //
396 return $ent;
397 }
398
399
400 /**
401 * Ce script permet de gérer l'interface de saisie rapide des retours de
402 * consultation par la cellule suivi l'aide d'un code barre.
403 */
404 function view_suivi_retours_de_consultation() {
405 //
406 $this->checkAccessibility();
407 /**
408 * Validation du formulaire
409 */
410 // Si le formulaire a été validé
411 if ($this->f->get_submitted_post_value('code_barres') !== null) {
412 // Si la valeur transmise est correcte
413 if ($this->f->get_submitted_post_value('code_barres') != ""
414 && is_numeric($this->f->get_submitted_post_value('code_barres'))) {
415 // Vérification de l'existence de la consultation
416 $sql = "SELECT consultation FROM ".DB_PREFIXE."consultation ";
417 $sql .= " WHERE code_barres='".$this->f->db->escapesimple($this->f->get_submitted_post_value('code_barres'))."'";
418 $res = $this->f->db->query($sql);
419 // Logger
420 $this->f->addToLog(
421 __METHOD__."(): db->query(\"".$sql."\")",
422 VERBOSE_MODE
423 );
424 // Gestion des erreurs de base de données
425 $this->f->isDatabaseError($res);
426 // En fonction du nombre de consultations correspondantes
427 // on affiche un message d"erreur ou on redirige vers le formulaire de
428 // saisie du retour
429 if ($res->numrows()==0) {
430 // Si
431 $message_class = "error";
432 $message = _("Ce code barres de consultation n'existe pas.");
433 } elseif ($res->numrows() > 1) {
434 // Si
435 $message_class = "error";
436 $message = _("Plusieurs consultations avec ce code barres.");
437 } else {
438 $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
439 header("Location: ".OM_ROUTE_FORM."&obj=consultation&action=100&retour=suivi_retours_de_consultation&idx=".$row['consultation']);
440 }
441 } elseif ($this->f->get_submitted_post_value('code_barres')!==null && $this->f->get_submitted_post_value('code_barres') == "") {
442 // Si aucune valeur n'a été saisie dans le champs consultation
443 $message_class = "error";
444 $message = _("Veuiller saisir un code barres de consultation.");
445 } else {
446 // Si
447 $message_class = "error";
448 $message = _("Cette consultation n'existe pas.");
449 }
450 }
451
452 /**
453 * Affichage des messages et du formulaire
454 */
455 // Affichage du message de validation ou d'erreur
456 if (isset($message) && isset($message_class) && $message != "") {
457 $this->f->displayMessage($message_class, $message);
458 }
459 //
460 $datasubmit = $this->getDataSubmit();
461 // Ouverture du formulaire
462 echo "\t<form";
463 echo " method=\"post\"";
464 echo " id=\"suivi_retours_de_consultation_form\"";
465 echo " action=\"".$datasubmit."\"";
466 echo ">\n";
467 // Paramétrage des champs du formulaire
468 $champs = array("code_barres");
469 // Création d'un nouvel objet de type formulaire
470 $form = $this->f->get_inst__om_formulaire(array(
471 "validation" => 0,
472 "maj" => 0,
473 "champs" => $champs,
474 ));
475 // Paramétrage des champs du formulaire
476 $form->setLib("code_barres", _("No de code barres de consultation"));
477 $form->setType("code_barres", "text");
478 $form->setTaille("code_barres", 25);
479 $form->setMax("code_barres", 25);
480 // Affichage du formulaire
481 $form->entete();
482 $form->afficher($champs, 0, false, false);
483 $form->enpied();
484 // Affichage du bouton
485 echo "\t<div class=\"formControls\">\n";
486 $this->f->layout->display_form_button(array("value" => _("Valider")));
487 echo "\t</div>\n";
488 // Fermeture du formulaire
489 echo "\t</form>\n";
490 }
491
492 /**
493 * Ce script permet de mettre à jour les dates de suivi du traitement
494 * des consultations.
495 */
496 function view_suivi_mise_a_jour_des_dates() {
497 //
498 $this->checkAccessibility();
499
500 // Récupération des valeur passées en POST ou GET
501 $date = "";
502 if($this->f->get_submitted_post_value('date') !== null) {
503 $date = $this->f->get_submitted_post_value('date');
504 } elseif($this->f->get_submitted_get_value('date') !== null) {
505 $date = $this->f->get_submitted_get_value('date');
506 }
507 $code_barres = "";
508 if($this->f->get_submitted_post_value('code_barres') !== null) {
509 $code_barres = $this->f->get_submitted_post_value('code_barres');
510 } elseif($this->f->get_submitted_get_value('code_barres')!==null) {
511 $code_barres = $this->f->get_submitted_get_value('code_barres');
512 }
513
514 // Booléen permettant de définir si un enregistrement à eu lieu
515 $correct = false;
516 // Booléen permettant de définir si les dates peuvent êtres enregistrées
517 $date_error = false;
518
519 // Si le formulaire a été validé
520 if ($this->f->get_submitted_post_value('validation') !== null) {
521 //Tous les champs doivent obligatoirement être remplis
522 if ( !empty($date) && !empty($code_barres) ){
523
524 //Vérification de l'existence de la consultation
525 $sql = "SELECT consultation, type_consultation
526 FROM ".DB_PREFIXE."consultation
527 LEFT JOIN ".DB_PREFIXE."service
528 ON service.service = consultation.service
529 WHERE code_barres = '".$this->f->db->escapesimple($code_barres)."'";
530 $res = $this->f->db->query($sql);
531 $this->f->addToLog("app/demandes_avis_mise_a_jour_des_dates.php : db->query(\"".$sql."\")", VERBOSE_MODE);
532 $this->f->isDatabaseError($res);
533
534 //Si le code barres est correct
535 if($res->numrows() == 1) {
536
537 //Un retour de demande d'avis ne peut être saisie que si le type de
538 //consultation est "avec_avis_attendu"
539 $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
540 if ( strcasecmp($row['type_consultation'], "avec_avis_attendu") === 0 ){
541
542 //On met à jour la date après l'écran de vérification
543 if($this->f->get_submitted_post_value("is_valid") != null and $this->f->get_submitted_post_value("is_valid") == "true") {
544 $consultation = $this->f->get_inst__om_dbform(array(
545 "obj" => "consultation",
546 "idx" => $row['consultation'],
547 ));
548 $consultation->setParameter("maj", 1);
549 $valF = array();
550 foreach($consultation->champs as $id => $champ) {
551 $valF[$champ] = $consultation->val[$id];
552 }
553
554 $valF['date_reception']=$date;
555
556 $consultation->modifier($valF);
557 // Vérification de la finalisation du document
558 // correspondant au code barres
559 if($consultation->valF["om_final_consultation"] === true) {
560 $message_class = "valid";
561 $message = _("Saisie enregistree");
562 $code_barres = "";
563 } else {
564 //
565 $message_class = "error";
566 $message = sprintf(_("Le document correspondant au
567 code barres %s n'est pas finalise,
568 la date ne sera pas mise a jour."),
569 $code_barres);
570 }
571
572 }
573 //Sinon on récupère les infos du dossier pour les afficher
574 else {
575 // Récupération des infos du dossier
576 $sqlInfo = "SELECT dossier_libelle, libelle,
577 date_reception,
578 TO_CHAR(date_envoi ,'DD/MM/YYYY') as date_envoi
579 FROM ".DB_PREFIXE."consultation
580 LEFT JOIN ".DB_PREFIXE."dossier
581 ON dossier.dossier = consultation.dossier
582 LEFT JOIN ".DB_PREFIXE."service
583 ON service.service = consultation.service
584 WHERE code_barres='".$code_barres."'";
585 $resInfo = $this->f->db->query($sqlInfo);
586 $this->f->isDatabaseError($resInfo);
587 $infos = $resInfo->fetchRow(DB_FETCHMODE_ASSOC);
588 }
589 }
590 //C'est un autre type de consultation
591 else{
592 $message_class = "error";
593 $message = _("Cette consultation n'a pas d'avis attendu.");
594 }
595 }
596 else {
597 $message_class = "error";
598 $message = _("Le numero saisi ne correspond a aucun code barres de consultation.");
599 }
600 } else {
601 $message_class = "error";
602 $message = _("Tous les champs doivent etre remplis.");
603 }
604 }
605
606 /**
607 * Affichage des messages et du formulaire
608 */
609 // Affichage du message de validation ou d'erreur
610 if (isset($message) && isset($message_class) && $message != "") {
611 $this->f->displayMessage($message_class, $message);
612 }
613 //
614 $datasubmit = $this->getDataSubmit();
615 // Ouverture du formulaire
616 printf("\t<form");
617 printf(" method=\"post\"");
618 printf(" id=\"demandes_avis_mise_a_jour_des_dates_form\"");
619 printf(" action=\"".$datasubmit."\"");
620 printf(">\n");
621 // Paramétrage des champs du formulaire
622 $champs = array("date", "code_barres");
623 if (isset($infos)) {
624 array_push(
625 $champs,
626 "dossier_libelle",
627 "service",
628 "date_envoi",
629 "date_reception",
630 "is_valid"
631 );
632 }
633 // Création d'un nouvel objet de type formulaire
634 $form = $this->f->get_inst__om_formulaire(array(
635 "validation" => 0,
636 "maj" => 0,
637 "champs" => $champs,
638 ));
639 // Paramétrage des champs du formulaire
640 // Parametrage du champ date
641 $form->setLib("date", _("Date")."* :");
642 if (isset($infos)) {
643 $form->setType("date", "hiddenstaticdate");
644 } else {
645 $form->setType("date", "date");
646 }
647 $form->setVal("date", $date);
648 $form->setTaille("date", 10);
649 $form->setMax("date", 10);
650
651 // Parametrage du champ code_barres
652 $form->setLib("code_barres", _("Code barres de consultation")."* :");
653 if (isset($infos)) {
654 $form->setType("code_barres", "hiddenstatic");
655 } else {
656 $form->setType("code_barres", "text");
657 }
658 $form->setVal("code_barres", $code_barres);
659 $form->setTaille("code_barres", 20);
660 $form->setMax("code_barres", 20);
661
662 // Ajout des infos du dossier correspondantes à la consultation séléctionnée
663 if (isset($infos)) {
664
665 // Tous les champs sont défini par defaut à static
666 foreach ($infos as $key => $value) {
667 $form->setType($key, "static");
668 $form->setVal($key, $value);
669 }
670
671 // Les champs dont on vient de définir la valeur sont en gras
672 $form->setBloc("date_reception", 'DF', "", 'bold');
673
674 // Parametrage du champ dossier
675 $form->setLib("dossier_libelle", _("dossier_libelle")." :");
676 $form->setType("dossier_libelle", "static");
677 $form->setVal("dossier_libelle", $infos['dossier_libelle']);
678
679 // Parametrage du champ service
680 $form->setLib("service", _("service")." :");
681 $form->setType("service", "static");
682 $form->setVal("service", $infos['libelle']);
683
684 // Parametrage des libellés d'envoi avec RAR
685 $form->setLib("date_envoi", _("Envoi demande d'avis")." :");
686 $form->setLib("date_reception", _("Retour demande d'avis")." :");
687 $form->setVal("date_reception", $date);
688
689 // Ajout d'un champ hidden permettant de savoir que le formulaire précédant est celui de vérification
690 $form->setLib("is_valid", _("Valide")." :");
691 $form->setType("is_valid", "hidden");
692 $form->setVal("is_valid", 'true');
693
694 $form->setFieldset('dossier_libelle', 'D', _('Synthese'));
695 $form->setFieldset('is_valid', 'F');
696 }
697
698
699 // Création du fieldset regroupant les champs permettant la mise à jour des date
700 $form->setFieldset('date', 'D', _('Mise a jour'));
701 $form->setFieldset('code_barres', 'F');
702 // Affichage du formulaire
703 $form->entete();
704 $form->afficher($champs, 0, false, false);
705 $form->enpied();
706 // Affichage du bouton
707 printf("\t<div class=\"formControls\">\n");
708 //
709 if (!$date_error) {
710 $this->f->layout->display_form_button(
711 array("value" => _("Valider"), "name" => "validation")
712 );
713 }
714 // Si pas sur l'écran de validation
715 if (isset($infos)) {
716 printf(
717 '<a class="retour" href="%s&amp;date=%s&amp;code_barres=%s">Retour</a>',
718 $datasubmit,
719 $date,
720 $code_barres
721 );
722 }
723 printf("\t</div>\n");
724 // Fermeture du formulaire
725 printf("\t</form>\n");
726
727 }
728
729
730 /**
731 * Défini si l'utilisateur est de la cellule suivi.
732 *
733 * @return boolean true si correspond false sinon
734 */
735 function is_suivi_retours_de_consultation() {
736
737 if($this->f->can_bypass("consultation", "modifier")){
738 return true;
739 }
740
741 return $this->f->isAccredited("consultation_suivi_retours_de_consultation");
742 }
743
744 /**
745 * Si le champ lu est à true l'action "Marquer comme lu" n'est pas affichée
746 *
747 * @return boolean true sinon lu false sinon
748 */
749 function show_marquer_comme_lu_portlet_action() {
750 if (isset($this->val[array_search("lu", $this->champs)])
751 && $this->val[array_search("lu", $this->champs)]== "t") {
752 return false;
753 }
754 return true;
755 }
756
757 /**
758 * Si le champ lu est à false l'action "Marquer comme non lu" n'est pas affichée
759 *
760 * @return boolean true sinon lu false sinon
761 */
762 function show_marquer_comme_non_lu_portlet_action() {
763 if (isset($this->val[array_search("lu", $this->champs)])
764 && $this->val[array_search("lu", $this->champs)]== "f") {
765 return false;
766 }
767 return true;
768 }
769
770 /**
771 * Si le document est finalisé l'action "finaliser" n'est pas affichée
772 *
773 * @return boolean true sinon lu false sinon
774 */
775 function show_consultation_finaliser_portlet_action() {
776 if ($this->is_document_finalized("om_final_consultation")) {
777 return false;
778 }
779 return true;
780 }
781
782 /**
783 * Retourne is_document_finalized("om_final_consultation")
784 *
785 * @return boolean true si finalisé false sinon
786 */
787 function show_unfinalize_portlet_action() {
788 return $this->is_document_finalized("om_final_consultation");
789 }
790
791 /**
792 * Permet de savoir si le document passé en paramètre est finalisé
793 *
794 * @param string $field flag finalisé
795 *
796 * @return boolean true si finalisé false sinon
797 */
798 function is_document_finalized($field) {
799 if($this->getVal($field) == 't') {
800 return true;
801 }
802 return false;
803 }
804
805
806 /**
807 *
808 */
809 var $inst_service = null;
810
811 /**
812 *
813 */
814 var $inst_tiers_consulte = null;
815
816 /**
817 *
818 */
819 function get_inst_service($service = null) {
820 //
821 if ($service !== null) {
822 return $this->f->get_inst__om_dbform(array(
823 "obj" => "service",
824 "idx" => $service,
825 ));
826 }
827 //
828 if (isset($this->inst_service) === false or
829 $this->inst_service === null) {
830 $this->inst_service = $this->f->get_inst__om_dbform(array(
831 "obj" => "service",
832 "idx" => $this->getVal('service'),
833 ));
834 }
835 return $this->inst_service;
836 }
837
838 /**
839 *
840 */
841 protected function get_instance_objet_liee($cible, $idCible = null) {
842 // Récupère l'instance de l'élement cible
843 if ($idCible !== null) {
844 return $this->f->get_inst__om_dbform(array(
845 "obj" => $cible,
846 "idx" => $idCible
847 ));
848 }
849 //
850 $nomVarInstance = "inst_".$cible;
851 if (isset($this->$nomVarInstance) === false or
852 $this->$nomVarInstance === null) {
853 $this->$nomVarInstance = $this->f->get_inst__om_dbform(array(
854 "obj" => $cible,
855 "idx" => $this->getVal($cible)
856 ));
857 }
858
859 return $this->$nomVarInstance;
860 }
861
862 /**
863 * TREATMENT - marquer_comme_lu.
864 *
865 * Cette methode permet de passer la consultation en "lu"
866 *
867 * @return boolean true si maj effectué false sinon
868 */
869 function marquer_comme_lu() {
870 // Cette méthode permet d'exécuter une routine en début des méthodes
871 // dites de TREATMENT.
872 $this->begin_treatment(__METHOD__);
873
874 if($this->getVal("lu") == 'f') {
875 $this->correct = true;
876 $valF = array();
877 $valF["lu"] = true;
878
879 $res = $this->f->db->autoExecute(
880 DB_PREFIXE.$this->table,
881 $valF,
882 DB_AUTOQUERY_UPDATE,
883 $this->clePrimaire."=".$this->getVal($this->clePrimaire)
884 );
885 if ($this->f->isDatabaseError($res, true)) {
886 // Appel de la methode de recuperation des erreurs
887 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
888 $this->correct = false;
889 // Termine le traitement
890 return $this->end_treatment(__METHOD__, false);
891 } else {
892 $this->addToMessage(__("La consultation a été marquée comme lu."));
893 return $this->end_treatment(__METHOD__, true);
894 }
895
896 } else {
897 $this->addToMessage(__("La consultation est déjà marquée comme lu."));
898 }
899
900 // Termine le traitement
901 return $this->end_treatment(__METHOD__, false);
902 }
903
904 /**
905 * TREATMENT - marquer_comme_non_lu.
906 *
907 * Cette methode permet de passer la message en "non lu"
908 *
909 * @return boolean true si maj effectué false sinon
910 */
911 public function marquer_comme_non_lu() {
912 // Cette méthode permet d'exécuter une routine en début des méthodes
913 // dites de TREATMENT.
914 $this->begin_treatment(__METHOD__);
915
916 if($this->getVal("lu") == 't') {
917 $this->correct = true;
918 $valF = array();
919 $valF["lu"] = false;
920
921 $res = $this->f->db->autoExecute(
922 DB_PREFIXE.$this->table,
923 $valF,
924 DB_AUTOQUERY_UPDATE,
925 $this->clePrimaire."=".$this->getVal($this->clePrimaire)
926 );
927 if ($this->f->isDatabaseError($res, true)) {
928 // Appel de la methode de recuperation des erreurs
929 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
930 $this->correct = false;
931 // Termine le traitement
932 return $this->end_treatment(__METHOD__, false);
933 } else {
934 $this->addToMessage(__("La consultation a été marquée comme non lu."));
935 return $this->end_treatment(__METHOD__, true);
936 }
937
938 } else {
939 $this->addToMessage(__("La consultation est déjà marquée comme non lu."));
940 }
941
942 // Termine le traitement
943 return $this->end_treatment(__METHOD__, false);
944 }
945
946 // }}}
947
948 /**
949 * TREATMENT - ajouter_multiple.
950 *
951 * Cette methode permet d'ajouter plusieurs consultations.
952 *
953 * @return boolean true si ajouts effectués false sinon
954 */
955 function ajouter_multiple() {
956 // Cette méthode permet d'exécuter une routine en début des méthodes
957 // dites de TREATMENT.
958 $this->begin_treatment(__METHOD__);
959
960 // Identifiant de l'objet metier a copier
961 ($this->f->get_submitted_get_value('idxformulaire') !== null ? $idx = $this->f->get_submitted_get_value('idxformulaire') : $idx = "");
962 // Nom de l'objet metier
963 ($this->f->get_submitted_get_value('obj') !== null ? $obj = $this->f->get_submitted_get_value('obj') : $obj = "");
964 //formulaire retour
965 ($this->f->get_submitted_get_value('ret') !== null ? $retourformulaire = $this->f->get_submitted_get_value('ret') : $retourformulaire = "");
966 ($this->f->get_submitted_get_value('date_envoi') !== null ? $date_envoi = $this->f->get_submitted_get_value('date_envoi') : $date_envoi = "");
967 /*Récupération des données et formatage.*/
968 $donnees_temp = explode(';', $this->f->get_submitted_get_value('data'));
969 for ( $i = 1 ; $i < count($donnees_temp) ; $i++ )
970 $donnees[] = explode('_', $donnees_temp[$i]);
971 /* Nombre de consultations papier à générer */
972 $nbConsPap = 0;
973
974 /* Ajout des données en base de données
975 * 0 : l'ID du service
976 * 1 : consultation papier {0,1}
977 * */
978 if ( isset($donnees) && count($donnees) > 0 ) {
979
980 foreach ($donnees as $value) {
981
982 $sql = "SELECT delai, id, delai_type
983 FROM ".DB_PREFIXE."service
984 LEFT JOIN ".DB_PREFIXE."om_etat
985 ON service.edition = om_etat.om_etat
986 WHERE service = $value[0]";
987 $res = $this->f->db->query($sql);
988 // Si la récupération de la description de l'avis échoue
989 if ($this->f->isDatabaseError($res, true)) {
990 // Appel de la methode de recuperation des erreurs
991 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
992 $this->correct = false;
993 // Termine le traitement
994 $this->end_treatment(__METHOD__, false);
995 }
996 $row=& $res->fetchRow();
997 $delai = $row[0];
998 $type_edition = $row[1];
999 $delai_type = $row[2];
1000
1001 /*Calcul du delai de retour*/
1002 $date_envoi_temp = $this->datePHP($date_envoi);
1003 $delai = $this->dateDB($this->f->mois_date($date_envoi_temp, $delai, "+", $delai_type));
1004
1005 /*Les données à ajouter*/
1006 // Initialisation de tous les champs a null
1007 foreach ($this->champs as $champs) {
1008 $arrayVal[$champs] = null;
1009 }
1010 // Set les valeurs des champs
1011 $arrayVal = array_replace($arrayVal, array(
1012 'consultation' => "]",
1013 'dossier' => $idx,
1014 'date_envoi' => $date_envoi,
1015 'date_limite' => $delai,
1016 'service' => $value[0],
1017 'motivation' => "",
1018 'om_final_consultation' => false,
1019 'om_fichier_consultation' => '',
1020 'om_fichier_consultation_dossier_final' => false,
1021 'fichier_dossier_final' => false,
1022 'marque' => false,
1023 'visible' => true,
1024 ));
1025 $res_ajout = $this->ajouter($arrayVal);
1026 if($res_ajout != true) {
1027 // Termine le traitement
1028 $this->end_treatment(__METHOD__, false);
1029 }
1030
1031 /*Comptage du nombre de consultations papier demandées et récupération des ids des PDFs à éditer*/
1032 if ($value[1]==1){
1033 $idxConsultations[] = $this->valF['consultation'];
1034 $objConsultations[] = $type_edition;
1035 $nbConsPap++;
1036 }
1037 }
1038
1039 /*Génération du PDF*/
1040 if (isset($idxConsultations) && count($idxConsultations) > 0 ){
1041
1042 // Stockage de l'identifiant de chaque consultation dont on veut éditer la
1043 // version papier, séparés par un point-virgule
1044 $textIdsConsultations = "";
1045 foreach ($idxConsultations as $value) {
1046 if ($textIdsConsultations != "") {
1047 $textIdsConsultations .= ";";
1048 }
1049 $textIdsConsultations .= $value;
1050 }
1051 // Stockage de l'objet de chaque consultation dont on veut éditer la
1052 // version papier, séparés par un point-virgule
1053 $textObjConsultations = "";
1054 foreach ($objConsultations as $value) {
1055 if ($textObjConsultations != "") {
1056 $textObjConsultations .= ";";
1057 }
1058 $textObjConsultations .= $value;
1059 }
1060
1061 // Ouverture du PDF dans une nouvelle fenêtre
1062 printf("
1063 <script language='javascript' type='text/javascript'>
1064 window.open('%s','_blank')
1065 </script>
1066 ",
1067 OM_ROUTE_FORM."&obj=consultation&action=90&idx=0&dossier_instruction=".$this->getVal('dossier')."&textobj=".$textObjConsultations."&"."textids=".$textIdsConsultations
1068 );
1069 }
1070 $return_url = OM_ROUTE_SOUSTAB;
1071 $return_url .= "&obj=consultation";
1072 $return_url .= "&retourformulaire=".$this->getParameter("retourformulaire");
1073 $return_url .= "&idxformulaire=".$this->getParameter("idxformulaire");
1074 $return_url .= "&premier=".$this->getParameter("premiersf");
1075 $return_url .= "&tricol=".$this->getParameter("tricolsf");
1076
1077 /*Affichage du message d'information*/
1078 $this->f->displayMessage("valid", count($donnees)._(' service(s) selectionne(s) dont ').$nbConsPap._(' consultation(s) papier.'));
1079
1080
1081 // Termine le traitement
1082 return $this->end_treatment(__METHOD__, true);
1083 }
1084 }
1085
1086
1087 /**
1088 * VIEW - view_ajout_multiple.
1089 *
1090 * Formulaire specifique
1091 *
1092 * @return void
1093 */
1094 function view_ajout_multiple() {
1095
1096 if (count($this->f->get_submitted_get_value()) > 0
1097 && $this->f->get_submitted_get_value('data') !== null
1098 && $this->f->get_submitted_get_value('data') != "" ) {
1099 $this->f->disableLog();
1100 $this->ajouter_multiple();
1101
1102 } else {
1103
1104 // Vérification de l'accessibilité sur l'élément
1105 $this->checkAccessibility();
1106 //
1107 $datasubmit = $this->getDataSubmitSousForm();
1108 $return_url = OM_ROUTE_SOUSTAB;
1109 $return_url .= "&obj=consultation";
1110 $return_url .= "&retourformulaire=".$this->getParameter("retourformulaire");
1111 $return_url .= "&idxformulaire=".$this->getParameter("idxformulaire");
1112 $return_url .= "&premier=".$this->getParameter("premiersf");
1113 $return_url .= "&tricol=".$this->getParameter("tricolsf");
1114 // Légende du fieldset
1115 $title = _("Objet");
1116 /*Requête qui récupère les services qui sont dans des thématiques*/
1117 $sql =
1118 "SELECT
1119 ser_cat.service_categorie,
1120 ser_cat.libelle AS them_lib,
1121 ser.service,
1122 CONCAT(ser.abrege, ' - ', ser.libelle) AS ser_lib,
1123 ser.consultation_papier
1124 FROM
1125 ".DB_PREFIXE."lien_service_service_categorie lie,
1126 ".DB_PREFIXE."service_categorie ser_cat,
1127 ".DB_PREFIXE."service ser
1128 LEFT JOIN ".DB_PREFIXE."om_collectivite
1129 ON ser.om_collectivite = om_collectivite.om_collectivite
1130 WHERE
1131 ser_cat.service_categorie = lie.service_categorie AND
1132 ser.service = lie.service AND
1133 (
1134 (ser.om_validite_debut IS NULL
1135 AND (ser.om_validite_fin IS NULL
1136 OR ser.om_validite_fin > CURRENT_DATE))
1137 OR
1138 (ser.om_validite_debut <= CURRENT_DATE
1139 AND (ser.om_validite_fin IS NULL
1140 OR ser.om_validite_fin > CURRENT_DATE))
1141 )";
1142
1143 // Si c'est un sous-formulaire de dossier d'instruction ou une de ses surcharges
1144 // mes encours, mes clôtures...
1145 $is_in_context_of_foreign_key = $this->is_in_context_of_foreign_key("dossier", $this->getParameter('retourformulaire'));
1146 if ($is_in_context_of_foreign_key == true) {
1147
1148 // on recupère les services des multicollectivités et de celle
1149 // du DI
1150 $di = $this->f->get_inst__om_dbform(array(
1151 "obj" => "dossier_instruction",
1152 "idx" => $this->getParameter('idxformulaire'),
1153 ));
1154
1155 //
1156 $sql .= sprintf(" AND (om_collectivite.niveau = '2' OR ser.om_collectivite = %s) ", $di->getVal('om_collectivite'));
1157 }
1158 //
1159 $sql .= " ORDER BY them_lib, ser.abrege, ser.libelle";
1160
1161 $res = $this->f->db->query($sql);
1162 $this->f->addToLog(
1163 "app/consultation_multiple.php: db->query(\"".$sql."\")", VERBOSE_MODE
1164 );
1165 $this->f->isDatabaseError($res);
1166
1167 $temp_ser_cat = 0;
1168 $liste_gauche = "";
1169
1170 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1171 $name = $row['service_categorie'].'_'.
1172 $row['service'].'_'.
1173 (($row['consultation_papier'] == '' || $row['consultation_papier'] == 'f' ) ? '0' : '1' ).'_';
1174 // On change de thématique, donc rajoute le nom de la thématique
1175 if ( $temp_ser_cat != $row['service_categorie'] ){
1176
1177 $temp_ser_cat = $row['service_categorie'];
1178 $liste_gauche .= '
1179 <div id="them_'.$row['service_categorie'].'" class="liste_gauche_them" >'.
1180 $row['them_lib'].
1181 '</div>
1182 <div
1183 class="liste_gauche_service t'.$name.'"
1184 id="t'.$name.'" >
1185 '.$row['ser_lib'].'
1186 <input class="t'.$name.'" type="checkbox" '.(($row['consultation_papier'] == '' || $row['consultation_papier'] == 'f' ) ? '' : 'checked="checked"' ).'/>
1187 </div>
1188 ';
1189 }
1190
1191 /*On est dans la même thématique*/
1192 else {
1193
1194 $liste_gauche .= '
1195 <div
1196 class="liste_gauche_service t'.$name.'"
1197 id="t'.$name.'" >
1198 '.$row['ser_lib'].'
1199 <input class="t'.$name.'" type="checkbox" '.(($row['consultation_papier'] == '' || $row['consultation_papier'] == 'f' ) ? '' : 'checked="checked"' ).'/>
1200 </div>
1201 ';
1202 }
1203
1204 }
1205
1206 /*Requête qui récupère les services qui ne sont pas dans une thématique*/
1207 $sql =
1208 "SELECT service.service,
1209 CONCAT(service.abrege, ' - ', service.libelle) AS ser_lib,
1210 service.consultation_papier
1211 FROM ".DB_PREFIXE."service
1212 LEFT JOIN ".DB_PREFIXE."om_collectivite
1213 ON service.om_collectivite = om_collectivite.om_collectivite
1214 WHERE service NOT IN
1215 (
1216 SELECT service
1217 FROM ".DB_PREFIXE."lien_service_service_categorie
1218 )
1219 AND
1220 (
1221 om_validite_fin <= CURRENT_DATE OR
1222 om_validite_fin IS NULL
1223 )
1224 ";
1225
1226 // Si c'est un sous-formulaire de dossier d'instruction ou une de ses surcharges
1227 // mes encours, mes clôtures...
1228 $is_in_context_of_foreign_key = $this->is_in_context_of_foreign_key("dossier", $this->getParameter('retourformulaire'));
1229 if ($is_in_context_of_foreign_key == true) {
1230
1231 // on recupère les services des multicollectivités et de celle
1232 // du DI
1233 $di = $this->f->get_inst__om_dbform(array(
1234 "obj" => "dossier_instruction",
1235 "idx" => $this->getParameter('idxformulaire'),
1236 ));
1237
1238 //
1239 $sql .= sprintf(" AND (om_collectivite.niveau = '2' OR service.om_collectivite = %s) ", $di->getVal('om_collectivite'));
1240 }
1241
1242 // Tri des services qui ne sont pas dans une thématique par ordre alphabétique
1243 $sql .= " ORDER BY service.abrege, service.libelle";
1244
1245
1246 $res = $this->f->db->query($sql);
1247 $this->f->isDatabaseError($res);
1248
1249 if ($res->numrows() > 0) {
1250 $liste_gauche .= '
1251 <div id="them_0" class="liste_gauche_them">Autres</div>';
1252 }
1253
1254 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1255
1256 /*Ajout de tous les services qui n'ont pas de thématique*/
1257 $name = '0_'.
1258 $row['service'].'_'.
1259 (($row['consultation_papier'] == '' || $row['consultation_papier'] == 'f' ) ? '0' : '1' ).'_';
1260 $liste_gauche .= '
1261 <div
1262 class="liste_gauche_service t'.$name.'"
1263 id="t'.$name.'" >
1264 '.$row['ser_lib'].'&nbsp;
1265 <input class="t'.$name.'" type="checkbox" '.(($row['consultation_papier'] == '' || $row['consultation_papier'] == 'f' ) ? '' : 'checked="checked"' ).'/>
1266 </div>
1267 ';
1268 }
1269
1270 /*Affichage du formulaire*/
1271 echo "\n<!-- ########## START DBFORM ########## -->\n";
1272 echo "<form";
1273 echo " method=\"post\"";
1274 echo " name=\"f2\"";
1275 echo " action=\"\"";
1276 echo " id=\"form_val\"";
1277 //echo " onsubmit=\"ajaxIt('consultation', '');return false;\"";
1278
1279 //echo " onsubmit=\"affichersform('".$this->getParameter("objsf")."', '".$datasubmit."', this);\"";
1280 echo ">\n";
1281 echo '<div class="formEntete ui-corner-all">';
1282 echo "<div>";
1283 echo '<div class="bloc">';
1284 echo "<fieldset class='cadre ui-corner-all ui-widget-content'>\n";
1285 echo "\t<legend class='ui-corner-all ui-widget-content ui-state-active'>".
1286 _("Consultation par thematique ")."</legend>";
1287 echo "<div class='fieldsetContent' style='width:100%'>";
1288 echo '<div class="field-ser-them field-type-hiddenstatic">';
1289 echo '<div class="form-libelle">';
1290 echo '<label class="libelle-dossier" for="dossier">';
1291 echo _('dossier');
1292 echo '<span class="not-null-tag">*</span>';
1293 echo '</label>';
1294 echo '</div>';
1295 echo '<div class="form-content">';
1296 echo '<input class="champFormulaire" type="hidden" value="'.$this->getParameter("idxformulaire").'" name="dossier"/>';
1297 echo $this->getParameter("idxformulaire");
1298 echo '</div>';
1299 echo '</div>';
1300 /*Code du nouveau champ*/
1301 echo '<div class="field-ser-them ser-them">';
1302 echo '<div class="list-ser-them">';
1303 echo $liste_gauche;
1304 echo '</div>';
1305 echo '<div class="button-ser-them">';
1306 echo '<ul>';
1307 echo '<li>';
1308 echo '<input type="button" value="'._("Ajouter").' >>" id="add-ser-them"/>';
1309 echo '</li>';
1310 echo '<li>';
1311 echo '<input type="button" value="<< '._("Supprimer").'" id="del-ser-them"/>';
1312 echo '</li>';
1313 echo '</ul>';
1314 echo '</div>';
1315 echo '<div class="list-sel-ser-them">';
1316 echo '<div class=\'row row_title\'>';
1317 echo '<div class=\'cell1 liste_droite_title list-sel-ser-them-title\'>'._('Service a consulter').'</div>';
1318 echo '<div class=\'cell2 liste_droite_title list-sel-ser-them-title\'>'._('Version papier').'</div>';
1319 echo '</div>';
1320 echo '</div>';
1321 echo '</div>';
1322 /* -- FIN --*/
1323 // Le champ de date d'envoi est visible seulement aux ayant-droits
1324 if($this->f->isAccredited('consultation_saisir_date_envoi')) {
1325 echo '<div class="field-ser-them field-type-date2">';
1326 }
1327 else {
1328 echo '<div class="field field-type-hiddendate">';
1329 }
1330 echo '<div class="form-libelle">';
1331 echo '<label class="libelle-date_envoi" for="date_envoi">';
1332 echo _('date_envoi');
1333 echo '<span class="not-null-tag">*</span>';
1334 echo '</label>';
1335 echo '</div>';
1336 echo '<div class="form-content">';
1337 echo '<input id="date_envoi" class="champFormulaire datepicker"
1338 type="text" onkeyup="" onchange="fdate(this);"
1339 maxlength="10" size="12" value="'.date("d/m/Y").'"
1340 name="date_envoi">';
1341 echo '</div>';
1342 echo '</div>';
1343 echo "</div>";
1344 echo "</fieldset>";
1345 echo '</div>';
1346 echo '</div>';
1347 echo '</div>';
1348 echo '<div class="formControls">';
1349
1350 echo '<div class="formControls">';
1351 echo "<input class=\"om-button ui-button ui-widget ui-state-default ui-corner-all\"
1352 type=\"button\"
1353
1354 value=\"Ajouter le(s) enregistrement(s) de la table : 'Consultation'\"
1355 id=\"button_val\">";
1356 $this->retoursousformulaire(
1357 $this->getParameter("idxformulaire"),
1358 $this->getParameter("retourformulaire"),
1359 null,
1360 $this->getParameter("objsf"),
1361 $this->getParameter("premiersf"),
1362 $this->getParameter("tricolsf"),
1363 $this->getParameter("validation"),
1364 $this->getParameter("idx"),
1365 $this->getParameter("maj"),
1366 $this->getParameter("retour")
1367 );
1368 echo '</div>';
1369 echo '</div>';
1370 echo '</form>';
1371
1372 echo "
1373 <script language='javascript' type='text/javascript'>
1374 $(function(){
1375 changeActionVal('');
1376 /*
1377 Sélectionne tous les services d'un thème au clique sur celui ci.
1378 */
1379 $('.liste_gauche_them').click(
1380 function(){
1381
1382 var id = $(this).attr('id').split('_')[1];
1383 var numSer = 0;
1384 var numSerWithClass = 0;
1385
1386 $('.list-ser-them div').each(
1387 function() {
1388
1389 if ( $(this).attr('id').indexOf('them') == -1 &&
1390 $(this).attr('id').indexOf(id) == 1 &&
1391 $(this).hasClass('liste_gauche_service_selected') )
1392
1393 numSerWithClass++;
1394
1395 if ( $(this).attr('id').indexOf('them') == -1 &&
1396 $(this).attr('id').indexOf(id) == 1 )
1397
1398 numSer++;
1399 }
1400 );
1401
1402 if ( numSerWithClass < numSer && numSerWithClass >= 0 ){
1403
1404 $('.list-ser-them div').each(
1405 function() {
1406
1407 if ( $(this).attr('id').indexOf('them') == -1 &&
1408 $(this).attr('id').indexOf(id) == 1 &&
1409 !$(this).hasClass('liste_gauche_service_selected') )
1410
1411 $(this).addClass('liste_gauche_service_selected');
1412 }
1413 );
1414 }
1415
1416 else {
1417
1418 $('.list-ser-them div').each(
1419 function() {
1420
1421 if ( $(this).attr('id').indexOf('them') == -1 &&
1422 $(this).attr('id').indexOf(id) == 1 &&
1423 $(this).hasClass('liste_gauche_service_selected') )
1424
1425 $(this).removeClass('liste_gauche_service_selected');
1426 }
1427 );
1428 }
1429 }
1430 );
1431
1432 /*
1433 Change la class CSS d'un service sur lequel on clique dans la liste de gauche.
1434 */
1435 $('.liste_gauche_service').click(
1436 function(){
1437 $(this).toggleClass('liste_gauche_service_selected');
1438 }
1439 );
1440
1441 /*
1442 Change la class CSS d'un service sur lequel on clique dans la liste de droite.
1443 */
1444 $('.field-ser-them').on(
1445 'click',
1446 '.cell1',
1447 function(){
1448 if ( !$(this).hasClass('liste_droite_title') )
1449 $(this).parent().toggleClass('liste_droite_service_selected');
1450 }
1451 );
1452
1453 $('.liste_droite_service input[type=checkbox]').live(
1454 'click',
1455 'input[type=checkbox]',
1456 function(){
1457
1458 old_id = $(this).attr('class');
1459
1460 tab_don = old_id.split('_');
1461
1462 new_id = tab_don[0] + '_' + tab_don[1] + '_' + ((tab_don[2] == 0 ) ? 1 : 0 ) + '_';
1463
1464 changeOneData( ';' + tab_don[1] + '_' + tab_don[2], ';' + tab_don[1] + '_' + ((tab_don[2] == 0) ? 1 : 0) );
1465 $('div[class=\"' + old_id + '\"]').attr('class', new_id);
1466 $(this).attr('class', new_id);
1467
1468 }
1469 );
1470
1471 $('#date_envoi').change(
1472 function (){
1473
1474 var listServ = new Array();
1475 var data = '';
1476
1477 $('.liste_gauche_service_selected').each(
1478 function(i) {
1479
1480 var id = $(this).attr('id');
1481
1482 if ( listServ.length > 0 && listServ.indexOf(id.split('_')[1]) != -1 )
1483 return;
1484 listServ[i] = id.split('_')[1];
1485 data += ';' + id.split('_')[1] + '_' + id.split('_')[2] ;
1486
1487 }
1488 );
1489
1490 changeActionVal(data);
1491 }
1492 );
1493
1494 /*
1495 Passe les services sélectionnés dans la liste de gauche dans celle de droite.
1496 */
1497 $('#add-ser-them').click(
1498 function() {
1499
1500 changeDataLeftColumn();
1501 }
1502 );
1503
1504 /*
1505 Passe les services sélectionnés dans la liste de droite dans celle de gauche.
1506 */
1507 $('#del-ser-them').click(
1508 function() {
1509
1510 var data = '';
1511
1512 //Supprime les éléments de la liste de droite
1513 $('.liste_droite_service_selected').each(
1514 function() {
1515
1516 var name = $('#'+ $(this).attr('id') + ' .cell1 div').attr('name');
1517
1518 manageListServ('.list-ser-them div', name, 1);
1519
1520 $(this).remove();
1521 }
1522 );
1523
1524 //Change les valeurs qui vont être renvoyées à la validation du formulaire
1525 $('.liste_droite_service').each(
1526 function(){
1527
1528 var name = $('#'+ $(this).attr('id') + ' .cell1 div').attr('name');
1529 data += ';' + name.split('_')[1] + '_' + name.split('_')[2] ;
1530 }
1531 );
1532
1533 changeActionVal(data);
1534 }
1535 );
1536 });
1537
1538 /*
1539 Vérifie que l'objet n'est pas une thématique et que son identifiant correspond.
1540 */
1541 function isNotthemIsOneServ( objet, id ){
1542 return ( $(objet).attr('id').indexOf('them') == -1 &&
1543 $(objet).attr('id').indexOf('_' + id.split('_')[1] + '_') != -1 );
1544 }
1545
1546 /*
1547 Affiche ou cache un élément qui n'est pas une thématique et dont son identifiant correspond.
1548 */
1549 function manageListServ( objet , name, type){
1550
1551 $(objet).each(
1552 function() {
1553
1554 if ( isNotthemIsOneServ(this, name) ){
1555 if ( type == 0 )
1556
1557 $(this).hide() ;
1558
1559 else {
1560
1561 if ( $(this).hasClass('liste_gauche_service_selected') )
1562
1563 $(this).toggleClass('liste_gauche_service_selected');
1564
1565 $(this).show() ;
1566
1567 }
1568 }
1569 }
1570 );
1571 }
1572
1573 /*
1574 Change les actions qui sont réalisées lors de la soumission du formulaire
1575 */
1576 function changeActionVal(data){
1577 date = $('#date_envoi').val();
1578
1579
1580
1581 $('#button_val').attr(
1582 'onclick',
1583 'if ( $(\'.liste_gauche_service_selected\').length > 0 && $(\'#date_envoi\').val() != \'\' ) { messageIt(\'consultation\', \'".html_entity_decode($datasubmit)."&data='+data+'&date_envoi='+date+'\',true);' +
1584 'messageIt(\'consultation\', \'".html_entity_decode($return_url)."\',false);} else alert(\'Veuillez choisir au moins un service et une date d envoi\');'
1585
1586 );
1587
1588 }
1589
1590 /*
1591 Change les actions qui sont réalisées lors de la soumission du formulaire
1592 */
1593 function changeOneData( oldData, newData) {
1594
1595 date = $('#date_envoi').val();
1596
1597 $('#button_val').attr(
1598 'onclick',
1599 $('#button_val').attr('onclick').replace(oldData,newData)
1600 );
1601
1602 }
1603
1604 function changeDataLeftColumn(){
1605
1606 $('.list-sel-ser-them').empty();
1607 $('.list-sel-ser-them').html(
1608 '<div class=\"row row_title\">' +
1609 '<div class=\"cell1 liste_droite_title list-sel-ser-them-title\">"._("Service a consulter")."</div>' +
1610 '<div class=\"cell2 liste_droite_title list-sel-ser-them-title\">"._("Version papier")."</div>' +
1611 '</div>'
1612 );
1613
1614 var listServ = new Array();
1615 var data = '';
1616
1617 $('.liste_gauche_service_selected').each(
1618 function(i) {
1619
1620 var id = $(this).attr('id');
1621
1622 if ( $.inArray(id.split('_')[1], listServ) != -1 )
1623 return;
1624
1625 data += ';' + id.split('_')[1] + '_' + id.split('_')[2] ;
1626 listServ[i] = id.split('_')[1];
1627
1628 $('.list-sel-ser-them').append(
1629 '<div id=\'s' + i + '\' class=\'row liste_droite_service\'>'+
1630 '<div class=\'cell1\'>'+
1631 '<div class=\'' + $(this).attr('id') + '\' name=\'' + $(this).attr('id') + '\'>'+
1632 $(this).html().split('<')[0]+
1633 '</div>'+
1634 '</div>' +
1635 '<div class=\'cell2\'>'+
1636 '<div>'+
1637 '<input class=\'' + $(this).attr('id') + '\''+$(this).html().split('<input')[1]+
1638 '</div>'+
1639 '</div>'+
1640 '</div>'
1641 );
1642
1643 $(this).hide();
1644
1645 manageListServ('.list-ser-them div', id, 0);
1646
1647 }
1648 );
1649 changeActionVal(data);
1650 }
1651 </script>";
1652 }
1653 }
1654
1655
1656 /**
1657 * TREATMENT - view_bordereau_envoi_maire.
1658 *
1659 * Génère et affiche l'édition PDF contenant une ou plusieurs consultations.
1660 *
1661 * @return [void]
1662 */
1663 function generate_pdf_consultation_multiple() {
1664 // Vérification de l'accessibilité sur l'élément
1665 $this->checkAccessibility();
1666 // Récupération de la collectivité du dossier d'instruction
1667 $collectivite = $this->f->getCollectivite($this->get_dossier_collectivite());
1668 // Identifiants des consultations à afficher
1669 $idsConsultations = $this->f->get_submitted_get_value('textids');
1670 // Type de chaque consultations (avec_avis_attendu, ...)
1671 $objConsultations = $this->f->get_submitted_get_value('textobj');
1672 // Génération du PDF
1673 $result = $this->compute_pdf_output('etat', $objConsultations, $collectivite, $idsConsultations);
1674 // Affichage du PDF
1675 $this->expose_pdf_output(
1676 $result['pdf_output'],
1677 $result['filename']
1678 );
1679 }
1680
1681 /**
1682 * SETTER_FORM - setValsousformulaire (setVal).
1683 *
1684 * @return void
1685 */
1686 function setValsousformulaire(&$form, $maj, $validation, $idxformulaire, $retourformulaire, $typeformulaire, &$dnu1 = null, $dnu2 = null) {
1687 parent::setValsousformulaire($form, $maj, $validation, $idxformulaire, $retourformulaire, $typeformulaire);
1688 //
1689 $this->retourformulaire = $retourformulaire;
1690 //
1691 if ($validation == 0) {
1692 if ($maj == 0 or $maj == 40 or $maj == 41) {
1693 $form->setVal("dossier", $this->getParameter("idxformulaire"));
1694 $form->setVal("date_envoi", date("d/m/Y"));
1695 }
1696 if (($maj == 1 || $maj == 91 || $maj == 100) && $this->getVal("date_retour") == "") {
1697 if ($this->f->isAccredited("consultation_retour_avis_suivi")
1698 || $this->f->isAccredited("consultation_retour_avis_service")) {
1699 //
1700 $form->setVal("date_retour", date("d/m/Y"));
1701 }
1702 }
1703 }
1704 }
1705
1706 /**
1707 * SETTER_FORM - setVal (setVal).
1708 *
1709 * @return void
1710 */
1711 function setVal(&$form, $maj, $validation, &$dnu1 = null, $dnu2 = null) {
1712 parent::setVal($form, $maj, $validation);
1713 //
1714 if (($maj == 1 || $maj == 91 || $maj == 100) && $this->getVal("date_retour") == "") {
1715 $form->setVal("date_retour", date('d/m/Y'));
1716 }
1717 }
1718
1719 function setvalF($val = array()) {
1720 //
1721 parent::setValF($val);
1722 //Si on crée une consultation on la met a visible
1723 if ($this->getParameter('maj') == 0 || $this->getParameter('maj') == 41) {
1724 $this->valF["visible"] = true;
1725 }
1726
1727 if ($this->getParameter('maj') == 0
1728 or $this->getParameter('maj') == 40
1729 or $this->getParameter('maj') == 41) {
1730 //
1731 if (isset($this->valF["date_envoi"])) {
1732 $this->valF["date_reception"] = $this->valF["date_envoi"];
1733 }
1734 //
1735 $this->valF["lu"] = true;
1736 }
1737
1738 // Si un retour d'avis est modifie on passe "lu" a false
1739 if(($this->getParameter('maj')==100 ) and (
1740 $this->val[array_search("avis_consultation",$this->champs)] != $val["avis_consultation"] OR
1741 $this->val[array_search("date_retour",$this->champs)] != $val["date_retour"] OR
1742 $this->val[array_search("motivation",$this->champs)] != $val["motivation"] OR
1743 $this->val[array_search("fichier",$this->champs)] != $val["fichier"])
1744 ) {
1745 $this->valF["lu"]=false;
1746 }
1747 }
1748
1749 /**
1750 * SETTER FORM - set_form_default_values
1751 *
1752 * @param formulaire $form Instance formulaire.
1753 * @param integer $maj Identifant numérique de l'action.
1754 * @param integer $validation Marqueur de validation du formulaire.
1755 *
1756 * @return void
1757 */
1758 function set_form_default_values(&$form, $maj, $validation) {
1759 if ($validation == 0 && $maj == 41) {
1760 foreach ($this->champs as $champ) {
1761 $form->setVal($champ, null, $validation);
1762 }
1763 }
1764 }
1765
1766 function setLib(&$form, $maj) {
1767 //
1768 parent::setLib($form, $maj);
1769 //
1770 $form->setLib($this->clePrimaire, _("id"));
1771 $form->setLib('visible', _("visible dans les éditions"));
1772 $form->setLib("live_preview", "");
1773
1774 $form->setLib('categorie_tiers_consulte', _('catégorie du tiers consulté'));
1775 $form->setLib('tiers_consulte', __('tiers consulté'));
1776 $form->setLib('motif_consultation', _('motif de la consultation'));
1777 }
1778
1779 function setType(&$form,$maj) {
1780 // Appel du parent
1781 parent::setType($form,$maj);
1782 $form->setType('dossier', 'hidden');
1783 $form->setType('marque', 'hidden');
1784 $form->setType('om_fichier_consultation_dossier_final', 'hidden');
1785 $form->setType('fichier_dossier_final', 'hidden');
1786 $form->setType('live_preview', 'hidden');
1787 //
1788 $form->setType('texte_fondement_avis', 'hidden');
1789 $form->setType('texte_avis', 'hidden');
1790 $form->setType('texte_hypotheses', 'hidden');
1791 $form->setType('nom_auteur', 'hidden');
1792 $form->setType('prenom_auteur', 'hidden');
1793 $form->setType('qualite_auteur', 'hidden');
1794 $form->setType('qualite_auteur', 'hidden');
1795 // MODE - AJOUTER et MODE - AJOUTER CONSULTATION TIERS
1796 if ($maj == 0 || $maj == 41) {
1797 // On cache alors tous les champs que nous ne voulons pas voir
1798 // apparaître dans le formulaire d'ajout (principalement les
1799 // informations sur le retour d'avis)
1800 $form->setType('date_retour', 'hiddendate');
1801 $form->setType('date_reception', 'hiddendate');
1802 $form->setType('date_limite', 'hiddendate');
1803 $form->setType('avis_consultation', 'hidden');
1804 $form->setType('visible', 'hidden');
1805 $form->setType('motivation', 'hidden');
1806 $form->setType('fichier', 'hidden');
1807 $form->setType('lu', 'hidden');
1808 $form->setType('categorie_tiers_consulte', 'hidden');
1809 $form->setType('tiers_consulte', 'hidden');
1810 $form->setType('service', 'hidden');
1811 $form->setType('motif_consultation', 'hidden');
1812 // On permet la modification de certains champs
1813 $form->setType('dossier_libelle', 'hiddenstatic');
1814 $form->setType('commentaire', 'textarea');
1815 // Affichage des champs selon le type de consultation
1816 if ($maj == 0) { // consultation service
1817 $champsRecquis = array('service');
1818 $form->setType('service', 'select');
1819 } elseif ($maj == 41) { // consultation tiers
1820 $champsRecquis = array('categorie_tiers_consulte', 'tiers_consulte', 'motif_consultation');
1821 $form->setType('categorie_tiers_consulte', 'select');
1822 $form->setType('tiers_consulte', 'select');
1823 $form->setType('motif_consultation', 'select');
1824 }
1825 // Gestion de l'affichage des champs obligatoire selon le type de consultation
1826 // TODO : A voir si il existe une meilleur manière de gérer l'affichage des champs obligatoire
1827 foreach ($champsRecquis as $champs) {
1828 $this->required_field[] = $champs;
1829 }
1830 // Le champ "date d'envoi" est affiché seulement si l'utilisateur a la
1831 // permission
1832 if($this->f->isAccredited('consultation_saisir_date_envoi')) {
1833 $form->setType('date_envoi', 'date2');
1834 }
1835 else {
1836 $form->setType('date_envoi', 'hiddendate');
1837 }
1838 }
1839 // MODE - MODIFIER
1840 if ($maj == 1) {
1841 // On affiche en statique les informations qui ne sont plus
1842 // modifiables
1843 $form->setType('dossier_libelle', 'hiddenstatic');
1844 $form->setType('date_envoi', 'hiddenstaticdate');
1845 $form->setType('date_limite', 'hiddenstaticdate');
1846 $form->setType('visible', 'checkboxhiddenstatic');
1847 // Gestion de l'affichage des champs selon les consultations service et tiers
1848 if ($this->getVal('service') != null && $this->getVal('service') != '') {
1849 $form->setType('service', 'selecthiddenstatic');
1850 $form->setType('categorie_tiers_consulte', 'hidden');
1851 $form->setType('tiers_consulte', 'hidden');
1852 $form->setType('motif_consultation', 'hidden');
1853 } else {
1854 $form->setType('service', 'hidden');
1855 $form->setType('categorie_tiers_consulte', 'selecthiddenstatic');
1856 $form->setType('tiers_consulte', 'selecthiddenstatic');
1857 $form->setType('motif_consultation', 'selecthiddenstatic');
1858 }
1859
1860 // La date de réception ne peut être modifiée que par un
1861 // utilisateur en ayant spécifiquement la permission
1862 if($this->f->isAccredited(array('consultation','consultation_modifier_date_reception'), 'OR')) {
1863 $form->setType('date_reception', 'date2');
1864 } else {
1865 $form->setType('date_reception', 'hiddenstaticdate');
1866 }
1867
1868 // Le marqueur lu/non lu ne peut être modifié que par un
1869 // utilisateur en ayant spécifiquement la permission
1870 if ($this->f->isAccredited(array('consultation','consultation_modifier_lu'), 'OR')) {
1871 $form->setType('lu', 'checkbox');
1872 } else {
1873 $form->setType('lu', 'hidden');
1874 }
1875
1876 // Gestion du type du widget sur le champ fichier
1877 if($this->getVal("fichier") == "" OR
1878 $this->f->isAccredited(array('consultation', 'consultation_modifier_fichier'), 'OR')) {
1879 // Si il n'y a jamais eu de fichier enregistré ou que
1880 // l'utilisateur a spécifiquement les droits pour modifier
1881 // un fichier déjà enregistré alors on positionne un type
1882 // de widget modifiable
1883 $contexts = array(
1884 "demande_avis_encours",
1885 "dossier",
1886 "dossier_contentieux_mes_infractions",
1887 "dossier_contentieux_mes_recours",
1888 "dossier_contentieux_tous_recours",
1889 "dossier_contentieux_toutes_infractions",
1890 "dossier_instruction",
1891 "dossier_instruction_mes_clotures",
1892 "dossier_instruction_mes_encours",
1893 "dossier_instruction_tous_clotures",
1894 "dossier_instruction_tous_encours",
1895 "dossier_qualifier",
1896 );
1897 if (in_array($this->getParameter("retourformulaire"), $contexts) === true) {
1898 $form->setType('fichier', 'upload2');
1899 } else {
1900 $form->setType('fichier', 'upload');
1901 }
1902 } else {
1903 // Si non on affiche uniquement le nom du fichier
1904 $form->setType('fichier', 'filestaticedit');
1905 }
1906
1907 }
1908 // Mode supprimer
1909 if ($maj == 2) {
1910 $form->setType('fichier', 'filestatic');
1911 // L'affichage des champs différe pour les consultations de service et celle de tiers
1912 if ($this->getVal('service') != null && $this->getVal('service') != '') {
1913 $form->setType('categorie_tiers_consulte', 'hidden');
1914 $form->setType('tiers_consulte', 'hidden');
1915 $form->setType('motif_consultation', 'hidden');
1916 } else {
1917 $form->setType('service', 'hidden');
1918 }
1919 }
1920 // MODE - CONSULTER
1921 if ($maj == 3) {
1922 $form->setType('fichier', 'file');
1923 // Affichage d'une consultation vers un service
1924 if ($this->getVal('service') !== null && $this->getVal('service') != '') {
1925 $form->setType('categorie_tiers_consulte', 'hidden');
1926 $form->setType('tiers_consulte', 'hidden');
1927 $form->setType('motif_consultation', 'hidden');
1928 $inst_service = $this->get_inst_service($this->getVal('service'));
1929 if ($inst_service->getVal('service_type') === PLATAU) {
1930 $form->setType("texte_fondement_avis", "textareastatic");
1931 $form->setType("texte_avis", "textareastatic");
1932 $form->setType("texte_hypotheses", "textareastatic");
1933 $form->setType("nom_auteur", "static");
1934 $form->setType("prenom_auteur", "static");
1935 $form->setType("qualite_auteur", "static");
1936 }
1937 } else { // Affichage d'un consultation d'un tiers
1938 $form->setType('service', 'hidden');
1939 $inst_motif = $this->f->get_inst__om_dbform(array(
1940 'idx' => $this->getVal('motif_consultation'),
1941 'obj' => 'motif_consultation'
1942 ));
1943 if ($inst_motif->getVal('service_type') === PLATAU) {
1944 $form->setType("texte_fondement_avis", "textareastatic");
1945 $form->setType("texte_avis", "textareastatic");
1946 $form->setType("texte_hypotheses", "textareastatic");
1947 $form->setType("nom_auteur", "static");
1948 $form->setType("prenom_auteur", "static");
1949 $form->setType("qualite_auteur", "static");
1950 }
1951 }
1952 }
1953
1954 // MODE - AJOUT MULTIPLE
1955 if ($maj == 40) {
1956 $form->setType('visible', 'hidden');
1957 }
1958
1959 // MODE - retour de consultation par suivi des date
1960 if ($maj == 100) {
1961 $form->setType("consultation", "hiddenstatic");
1962 $form->setType('dossier_libelle', 'hiddenstatic');
1963 $form->setType('date_envoi', 'hiddenstaticdate');
1964 $form->setType('date_limite', 'hiddenstaticdate');
1965 $form->setType('date_reception', 'hiddenstaticdate');
1966 $form->setType('service', 'selecthiddenstatic');
1967 $form->setType('categorie_tiers_consulte', 'selecthiddenstatic');
1968 $form->setType('tiers_consulte', 'selecthiddenstatic');
1969 $form->setType('motif_consultation', 'selecthiddenstatic');
1970 $form->setType('commentaire', 'hiddenstatic');
1971 $form->setType('date_retour', 'date');
1972 $form->setType('lu', 'hidden');
1973 $form->setType('visible', 'hidden');
1974 $form->setType("avis_consultation", "select");
1975 $form->setType("motivation", "textarea");
1976 $form->setType('fichier', 'upload');
1977 // Gestion du type du widget sur le champ fichier
1978 if($this->getVal("fichier") == "" OR
1979 $this->f->isAccredited(array('consultation', 'consultation_modifier_fichier'), 'OR')) {
1980 // Si il n'y a jamais eu de fichier enregistré ou que
1981 // l'utilisateur a spécifiquement les droits pour modifier
1982 // un fichier déjà enregistré alors on positionne un type
1983 // de widget modifiable
1984 $contexts = array(
1985 "demande_avis_encours",
1986 "dossier",
1987 "dossier_contentieux_mes_infractions",
1988 "dossier_contentieux_mes_recours",
1989 "dossier_contentieux_tous_recours",
1990 "dossier_contentieux_toutes_infractions",
1991 "dossier_instruction",
1992 "dossier_instruction_mes_clotures",
1993 "dossier_instruction_mes_encours",
1994 "dossier_instruction_tous_clotures",
1995 "dossier_instruction_tous_encours",
1996 "dossier_qualifier",
1997 );
1998 if (in_array($this->getParameter("retourformulaire"), $contexts) === true) {
1999 $form->setType('fichier', 'upload2');
2000 } else {
2001 $form->setType('fichier', 'upload');
2002 }
2003 } else {
2004 // Si non on affiche uniquement le nom du fichier
2005 $form->setType('fichier', 'filestaticedit');
2006 }
2007 }
2008 //// On cache la clé primaire
2009 //$form->setType('consultation', 'hidden');
2010 //
2011 if ($this->is_in_context_of_foreign_key("dossier", $this->getParameter("retourformulaire")) === true) {
2012 $form->setType('dossier_libelle', 'hidden');
2013 }
2014
2015 $form->setType('code_barres', 'hidden');
2016
2017 //Cache les champs pour la finalisation
2018 $form->setType('om_fichier_consultation', 'hidden');
2019 $form->setType('om_final_consultation', 'hidden');
2020
2021 if($maj == 50 OR $maj == 51 OR $maj == 60 OR $maj == 70 OR $maj == 120 OR $maj == 130 OR $maj == 140) {
2022 foreach ($this->champs as $value) {
2023 $form->setType($value, 'hidden');
2024 }
2025 }
2026
2027 if ($maj == 400) {
2028 foreach ($this->champs as $champ) {
2029 $form->setType($champ, 'hidden');
2030 }
2031 $form->setType('live_preview', 'previsualiser');
2032 }
2033 }
2034
2035 /**
2036 * Permet de définir l’attribut “onchange” sur chaque champ.
2037 *
2038 * @param object &$form Formumaire
2039 * @param integer $maj Mode d'insertion
2040 */
2041 function setOnchange(&$form, $maj) {
2042 parent::setOnchange($form, $maj);
2043
2044 // En cas de changement du champ categorie_tiers_consulte, appel
2045 // la méthode javascript filterSelect qui utilise (via l'URL) le
2046 // snippet_filterselect. Le snippet renvoie ensuite un json contenant la valeur du champ.
2047 // Cette valeur est ensuite utilisé pour récupèrer la liste des
2048 // tiers_consulte ayant la categorie sélectionné
2049 // Uniquement dans le formulaire d'ajout d'une consultation a un tiers
2050 if ($maj == '41') {
2051 $form->setOnchange(
2052 'categorie_tiers_consulte',
2053 "filterSelect(
2054 this.value,
2055 'tiers_consulte',
2056 'categorie_tiers_consulte',
2057 'consultation'
2058 )"
2059 );
2060 }
2061 }
2062
2063 /**
2064 * Cette méthode permet de calculer la date limite en fonction de la date
2065 * de réception et du délai de consultation.
2066 *
2067 * Met a jour les valeurs du formulaire en mettant a jour l'attribut valF.
2068 *
2069 * @param
2070 * @return void
2071 */
2072 function calculDateLimite() {
2073 // Vérifie si la variable contenant les informations nécessaire au calcul
2074 // de la date limite a bien été setter et si ce n'est pas le cas fait
2075 // appel au setter.
2076 if ($this->valElementConsulte == array()) {
2077 $this->set_val_element_consulte();
2078 }
2079
2080 // mise a jour instruction avec evenement [return delay]
2081 if (array_key_exists("date_reception", $this->valF)
2082 && $this->valF["date_reception"] != "") {
2083 // Calcul de la date limite a partir du délai et du type de délai
2084 $this->valF["date_limite"] = $this->f->mois_date(
2085 $this->valF["date_reception"],
2086 $this->valElementConsulte['delai'],
2087 "+",
2088 $this->valElementConsulte['delai_type']
2089 );
2090 //
2091 if ($this->valElementConsulte['delai_type'] == "mois") {
2092 $delai_type_trad = _("mois");
2093 } else {
2094 $delai_type_trad = _("jour(s)");
2095 }
2096 //
2097 $this->addToMessage(_("delai")." ".
2098 _("retour")." ".$this->valElementConsulte['delai']." ".$delai_type_trad." -> ".
2099 _("retour")." ".date("d/m/Y", strtotime($this->valF["date_limite"])));
2100 }
2101 }
2102
2103 /**
2104 * Identifie si la consultation est une consultation de tiers ou de service
2105 * a partir des valeurs envoyées dans le formulaire ou alors des valeurs
2106 * issue de la consultation.
2107 * Si il existe une valeur pour le champ service, le type de consultation sera setter
2108 * a "service".
2109 * Si il existe une valeur pour le champ tiers_consulte, le type de consultation sera setter
2110 * a "tiers_consulte"
2111 * Si aucun type de consultation n'a pu être défini renvoie false.
2112 *
2113 * Une fois le type de consultation récupéré effectue une requête pour récupérer
2114 * toutes les infos nécessaires pour créer / mettre à jour la consultation.
2115 * Set la variable valElementConsulte avec les valeurs ainsi récupérées.
2116 *
2117 * @return boolean indique si les informations ont été correctement récupérées
2118 */
2119 protected function set_val_element_consulte() {
2120 $typesConsultationPossible = array('service', 'tiers_consulte');
2121 $typeConsultation = null;
2122 // Pour tous les types de consultation possible vérifie si l'élément
2123 // consulté a bien une valeur enregistrée pour la consultation.
2124 // Si c'est le cas la consultation est de ce type
2125 // UNe fois le type de consultation récupéré il n'y a plus besoin de tester
2126 // les autres types car une consultation n'a qu'un seul type (tier ou service)
2127 foreach ($typesConsultationPossible as $typePossible) {
2128 if (isset($this->valF[$typePossible]) &&
2129 $this->valF[$typePossible] != null &&
2130 $this->valF[$typePossible] != '') {
2131 $typeConsultation = $typePossible;
2132 $idElement = $this->valF[$typePossible];
2133 break;
2134 } elseif ($this->getVal($typePossible) != null && $this->getVal($typePossible) != '') {
2135 $typeConsultation = $typePossible;
2136 $idElement = $this->getVal($typePossible);
2137 break;
2138 }
2139 }
2140
2141 // Renvoie une erreur si le type de consultation n'a pas pu être récupéré
2142 if ($typeConsultation == null) {
2143 $this->addToMessage(__('Erreur : le type de consultation n\'a pas pu être défini'));
2144 return false;
2145 }
2146 $this->typeConsultation = $typeConsultation;
2147 // Récuperation les infos lié à l'élement consulté de la consultation.
2148 $instance = $this->f->get_inst__om_dbform(array(
2149 'obj' => $typeConsultation,
2150 'idx' => $idElement
2151 ));
2152 $champARecupere = array(
2153 $typeConsultation,
2154 'libelle',
2155 'abrege',
2156 'generate_edition',
2157 'service_type',
2158 'delai',
2159 'delai_type',
2160 'notification_email',
2161 'email'
2162 );
2163 if ($typeConsultation == 'tiers_consulte') {
2164 // POur les tiers consulte, il faut récupérer le motif de consultation
2165 $idMotif = isset($this->valF['motif_consultation']) &&
2166 $this->valF['motif_consultation'] != null &&
2167 $this->valF['motif_consultation'] != '' ?
2168 $this->valF['motif_consultation'] :
2169 $this->getVal('motif_consultation');
2170 if ($idMotif == null || $idMotif == '') {
2171 $this->addToMessage(__('Erreur : le motif de consultation n\'a pas pu être récupéré'));
2172 return false;
2173 }
2174 $instanceMotif = $this->f->get_inst__om_dbform(array(
2175 'obj' => 'motif_consultation',
2176 'idx' => $idMotif
2177 ));
2178 foreach($champARecupere as $champ) {
2179 // On cherche les informations voulus dans la table tiers consulte et
2180 // si il n'existe pas c'est qu'ils sont dans la table motif_consultatio,
2181 if ($instance->getVal($champ) != null) {
2182 $valElementConsulte[$champ] = $instance->getVal($champ);
2183 } else {
2184 $valElementConsulte[$champ] = $instanceMotif->getVal($champ);
2185 }
2186 }
2187 // Le champ contenant les adresses mails n'a pas le même nom pour les
2188 // tiers et les services. Pour les tiers il faut donc récupèrer les mails
2189 // dans 'liste_diffusion'
2190 $valElementConsulte['email'] = $instance->getVal('liste_diffusion');
2191 } else {
2192 foreach($champARecupere as $champ) {
2193 $valElementConsulte[$champ] = $instance->getVal($champ);
2194 }
2195 }
2196 $this->valElementConsulte = $valElementConsulte;
2197 return true;
2198 }
2199
2200 /**
2201 * TRIGGER - triggerajouter.
2202 * Réalise le calcul de la date limite de consultation et
2203 *
2204 * @return boolean
2205 */
2206 function triggerajouter($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2207 $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2208 // Set le type de consultation (var typeConsultation) et les valeurs
2209 // issues de l'élement consulte (var valElementConsulte)
2210 if ($this->set_val_element_consulte() == false) {
2211 $this->addToMessage(__('Erreur : les informations de l\'élement consulté n\'ont pas pu être récupéré.'));
2212 return false;
2213 }
2214 $this->calculDateLimite();
2215
2216 if ($this->valElementConsulte['generate_edition'] === 't') {
2217 // Identifiant du type de courrier
2218 $idTypeCourrier = '12';
2219 $idCourrier = str_pad($this->valF["consultation"], 10, "0", STR_PAD_LEFT);
2220 // Code barres
2221 $this->valF["code_barres"] = $idTypeCourrier . $idCourrier;
2222 }
2223 }
2224
2225 /**
2226 * TRIGGER - triggermodifier.
2227 *
2228 * @return boolean
2229 */
2230 function triggermodifier($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2231 $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2232 // Set le type de consultation (var typeConsultation) et les valeurs
2233 // issues de l'élement consulte (var valElementConsulte)
2234 if ($this->set_val_element_consulte() == false) {
2235 $this->addToMessage(__('Erreur : les informations de l\'élement consulté n\'ont pas pu être récupéré.'));
2236 return false;
2237 }
2238
2239 // Si la date de réception a été modifiée on recalcul les délais à partir de la nouvelle date
2240 if (array_key_exists("date_reception", $this->valF) === true
2241 && $this->getVal('date_reception') !== $this->valF['date_reception']) {
2242 $this->calculDateLimite();
2243 }
2244 }
2245
2246 /**
2247 * TRIGGER - triggerajouterapres.
2248 *
2249 * - Notification par courrier du service consulté
2250 * - Interface avec le référentiel ERP [104]
2251 * - Interface avec le référentiel ERP [106]
2252 * - Finalisation du document PDF de consultation
2253 *
2254 * @return boolean
2255 */
2256 function triggerajouterapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2257 $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2258 // Set le type de consultation (var typeConsultation) et les valeurs
2259 // issues de l'élement consulte (var valElementConsulte)
2260 if ($this->set_val_element_consulte() == false) {
2261 $this->addToMessage(__('Erreur : les informations de l\'élement consulté n\'ont pas pu être récupéré.'));
2262 return false;
2263 }
2264 // On a besoin de l'instance du dossier lié à la consultation
2265 $inst_di = $this->get_inst_dossier($this->valF['dossier']);
2266
2267 /**
2268 * Notification par courriel du service consulté.
2269 *
2270 * Si il y a un problème lors de l'envoi du courriel, on prévient l'utilisateur
2271 * mais on ne bloque pas le traitement. Le courriel de notification n'a pas de
2272 * de caractère critique.
2273 */
2274 // On a besoin du nom de l'élement consulté pour l'affichage des messages
2275 $tradTypeConsultation = str_replace('_', ' ', $this->typeConsultation);
2276 if ($this->valElementConsulte['notification_email'] == 't') {
2277 // vérifie si il y a bien des adresses mail enregistrées dans la liste de diffusion
2278 // et si ce n'est pas le cas préviens l'utilisateur que l'envoi du mail n'est pas possible
2279 if ($this->valElementConsulte['email'] == '') {
2280 $this->addToMessage(sprintf(
2281 __("Erreur, il n'y a aucune adresse mail dans la liste de diffusion du %s (%s) %s. Envoi du mail non effectué."),
2282 $tradTypeConsultation,
2283 $this->valElementConsulte['abrege'],
2284 $this->valElementConsulte["libelle"]
2285 ));
2286 } else {
2287 // Composition du titre du courriel
2288 $title = sprintf(
2289 '%s %s',
2290 _("Consultation de ".$tradTypeConsultation." : dossier no"),
2291 $inst_di->getVal($inst_di->clePrimaire)
2292 );
2293 $title = iconv("UTF-8", "CP1252", $title);
2294 // Composition du corps du courriel
2295 $corps = sprintf(
2296 '%s %s<br/>%s %s %s %s %s<br/>%s <a href=\'%s\'>%s</a> %s <a href=\'%s\'>%s</a>',
2297 _("Votre ".$tradTypeConsultation." est consulte concernant le dossier no"),
2298 $inst_di->getVal($inst_di->clePrimaire),
2299 _("Il concerne le terrain situe a l'adresse :"),
2300 $inst_di->getVal('terrain_adresse_voie_numero'),
2301 $inst_di->getVal('terrain_adresse_voie'),
2302 $inst_di->getVal('terrain_adresse_code_postal'),
2303 $inst_di->getVal('terrain_adresse_localite'),
2304 _("Vous pouvez y acceder et rendre votre avis a l'adresse"),
2305 // Adresse interne, si l'adresse termine par &idx= alors on ajoute l'identifiant de la consultation
2306 $this->f->getParameter('services_consultes_lien_interne').((substr($this->f->getParameter('services_consultes_lien_interne'), -5) == "&idx=") ? $this->valF['consultation'] : ""),
2307 _("Lien interne"),
2308 _("ou"),
2309 // Adresse externe, si l'adresse termine par &idx= alors on ajoute l'identifiant de la consultation
2310 $this->f->getParameter('services_consultes_lien_externe').((substr($this->f->getParameter('services_consultes_lien_externe'), -5) == "&idx=") ? $this->valF['consultation'] : ""),
2311 _("Lien externe")
2312 );
2313 $corps = iconv("UTF-8", "CP1252", $corps);
2314 // Récupération des destinataire
2315 $email_list = explode("\r\n", $this->valElementConsulte['email']);
2316 $nb_destinataire = count($email_list);
2317 $nb_success = 0;
2318 $nb_error = 0;
2319 foreach ($email_list as $email) {
2320 // Envoi du mail avec message de retour
2321 if ($this->f->sendMail($title, $corps, iconv("UTF-8", "CP1252", $email))) {
2322 $this->f->addToLog(__METHOD__."() : senMail envoi de la notification au ".$tradTypeConsultation." effectué", VERBOSE_MODE);
2323 $nb_success++;
2324 } else {
2325 $this->f->addToLog(__METHOD__."() : ERROR - sendMail envoi de la notification au ".$tradTypeConsultation." n'a pas pu aboutir", DEBUG_MODE);
2326 $nb_error++;
2327 }
2328 }
2329 if ($nb_success != 0) {
2330 $this->addToMessage(
2331 sprintf(
2332 __("Envoi d'un mail de notification au %s (%s) %s."),
2333 $tradTypeConsultation,
2334 $this->valElementConsulte['abrege'],
2335 $this->valElementConsulte["libelle"]
2336 ));
2337 }
2338 if ($nb_error > 0 && $nb_error != $nb_destinataire) {
2339 $this->addToMessage(sprintf(
2340 __("Erreur lors de l'envoi du mail de notification à au moins un destinataire du %s (%s) %s."),
2341 $tradTypeConsultation,
2342 $this->valElementConsulte['abrege'],
2343 $this->valElementConsulte["libelle"]
2344 ));
2345 }
2346 if ($nb_error == $nb_destinataire) {
2347 $this->addToMessage(sprintf(
2348 __("Erreur lors de l'envoi du mail de notification aux destinataires du %s (%s) %s."),
2349 $tradTypeConsultation,
2350 $this->valElementConsulte['abrege'],
2351 $this->valElementConsulte["libelle"]
2352 ));
2353 }
2354 }
2355 }
2356
2357 // Récupère la collectivité du dossier d'instruction lié à la
2358 // consultation
2359 $om_collectivite = $this->get_dossier_collectivite();
2360
2361 // /!\ pour l'instant l'interface avec le référentiel erp concerne
2362 // uniquement les consultations faite à des service
2363 if ($this->typeConsultation === 'service') {
2364 // Récupération de l'instance du service en utilisant l'id du service stocké
2365 // dans valElementConsulte.
2366 $inst_service = $this->get_inst_service($this->valElementConsulte['service']);
2367 /**
2368 * Interface avec le référentiel ERP.
2369 *
2370 * (WS->ERP)[104] Demande d'instruction de dossier PC pour un ERP -> PC
2371 * Déclencheur :
2372 * - L'option ERP est activée
2373 * - Le dossier est de type PC
2374 * - Le formulaire d'ajout de consultation est validé avec un service
2375 * correspondant à un des services ERP pour avis
2376 */
2377 if ($this->f->is_option_referentiel_erp_enabled($om_collectivite) === true
2378 && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__pc')
2379 && in_array($inst_service->getVal($inst_service->clePrimaire), explode(";", $this->f->getParameter('erp__services__avis__pc')))) {
2380 //
2381 $infos = array(
2382 "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2383 "consultation" => $this->valF['consultation'],
2384 "date_envoi" => $this->valF['date_envoi'],
2385 "service_abrege" => $inst_service->getVal('abrege'),
2386 "service_libelle" => $inst_service->getVal('libelle'),
2387 "date_limite" => $this->valF['date_limite'],
2388 );
2389 //
2390 $ret = $this->f->send_message_to_referentiel_erp(104, $infos);
2391 if ($ret !== true) {
2392 $this->cleanMessage();
2393 $this->addToMessage(_("Une erreur s'est produite lors de la notification (104) du référentiel ERP. Contactez votre administrateur."));
2394 return false;
2395 }
2396 $this->addToMessage(_("Notification (104) du référentiel ERP OK."));
2397 }
2398
2399 /**
2400 * Interface avec le référentiel ERP.
2401 *
2402 * (WS->ERP)[106] Consultation ERP pour conformité -> PC
2403 * Déclencheur :
2404 * - L'option ERP est activée
2405 * - Le dossier est de type PC
2406 * - Le formulaire d'ajout de consultation est validé avec un service
2407 * correspondant à un des services ERP pour conformité
2408 */
2409 //
2410 if ($this->f->is_option_referentiel_erp_enabled($om_collectivite) === true
2411 && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__pc')
2412 && in_array($inst_service->getVal($inst_service->clePrimaire), explode(";", $this->f->getParameter('erp__services__conformite__pc')))) {
2413 //
2414 $infos = array(
2415 "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2416 "consultation" => $this->valF['consultation'],
2417 "date_envoi" => $this->valF['date_envoi'],
2418 "service_abrege" => $inst_service->getVal('abrege'),
2419 "service_libelle" => $inst_service->getVal('libelle'),
2420 "date_limite" => $this->valF['date_limite'],
2421 );
2422 //
2423 $ret = $this->f->send_message_to_referentiel_erp(106, $infos);
2424 if ($ret !== true) {
2425 $this->cleanMessage();
2426 $this->addToMessage(_("Une erreur s'est produite lors de la notification (106) du référentiel ERP. Contactez votre administrateur."));
2427 return false;
2428 }
2429 $this->addToMessage(_("Notification (106) du référentiel ERP OK."));
2430 }
2431 }
2432
2433 /**
2434 * Finalisation du document PDF de consultation.
2435 */
2436 if ($this->valElementConsulte['generate_edition'] === 't') {
2437 $finaliserAjouter = $this->finaliserAjouter($id);
2438 if ($finaliserAjouter === false) {
2439 return false;
2440 }
2441 }
2442
2443 /**
2444 * Gestion des tâches pour la dématérialisation
2445 */
2446 // Le service consulté fera sa réponse depuis Plat'AU
2447 if ($this->valElementConsulte['service_type'] === PLATAU
2448 && $this->f->is_type_dossier_platau($inst_di->getVal('dossier_autorisation')) === true
2449 && $inst_di->getVal('etat_transmission_platau') !== 'jamais_transmissible') {
2450 //
2451 $inst_task = $this->f->get_inst__om_dbform(array(
2452 "obj" => "task",
2453 "idx" => 0,
2454 ));
2455 $task_val = array(
2456 'type' => 'creation_consultation',
2457 'object_id' => $id,
2458 'dossier' => $val['dossier'],
2459 );
2460 // Change l'état de la tâche de notification en fonction de l'état de
2461 // transmission du dossier d'instruction
2462 if ($this->f->is_option_mode_service_consulte_enabled() === false
2463 && ($inst_di->getVal('etat_transmission_platau') == 'non_transmissible'
2464 || $inst_di->getVal('etat_transmission_platau') == 'transmis_mais_non_transmissible')) {
2465 //
2466 $task_val['state'] = $inst_task::STATUS_DRAFT;
2467 }
2468 $add_task = $inst_task->add_task(array('val' => $task_val));
2469 if ($add_task === false) {
2470 $this->addToMessage(sprintf('%s %s',
2471 __("Une erreur s'est produite lors de la création tâche."),
2472 __("Veuillez contacter votre administrateur.")
2473 ));
2474 $this->correct = false;
2475 return false;
2476 }
2477 }
2478
2479 //
2480 return true;
2481 }
2482
2483 /**
2484 * TRIGGER - triggersupprimerapres.
2485 *
2486 * @return boolean
2487 */
2488 function triggersupprimerapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2489 parent::triggersupprimerapres($id, $dnu1, $val, $dnu2);
2490
2491 /**
2492 * Gestion des tâches pour la dématérialisation
2493 */
2494 $inst_task_empty = $this->f->get_inst__om_dbform(array(
2495 "obj" => "task",
2496 "idx" => 0,
2497 ));
2498 $task_exists = $inst_task_empty->task_exists('creation_consultation', $id);
2499 if ($task_exists !== false) {
2500 $inst_task = $this->f->get_inst__om_dbform(array(
2501 "obj" => "task",
2502 "idx" => $task_exists,
2503 ));
2504 if ($inst_task->getVal('state') === $inst_task::STATUS_NEW || $inst_task->getVal('state') === $inst_task::STATUS_DRAFT) {
2505 $task_val = array(
2506 'state' => $inst_task::STATUS_CANCELED,
2507 );
2508 $update_task = $inst_task->update_task(array('val' => $task_val));
2509 if ($update_task === false) {
2510 $this->addToMessage(sprintf('%s %s',
2511 sprintf(__("Une erreur s'est produite lors de la modification de la tâche %."), $inst_task->getVal($inst_task->clePrimaire)),
2512 __("Veuillez contacter votre administrateur.")
2513 ));
2514 $this->correct = false;
2515 return false;
2516 }
2517 }
2518 }
2519
2520 //
2521 return true;
2522 }
2523
2524 // =============================================
2525 // Ajout du fielset
2526 // Add fieldset
2527 // =============================================
2528 function setLayout(&$form, $maj){
2529
2530 //Champs sur lequel s'ouvre le fieldset
2531 $form->setBloc('dossier','D',"");
2532 $form->setFieldset('dossier','D',_('Consultation'));
2533
2534 //Champs sur lequel se ferme le fieldset
2535 $form->setFieldset('visible','F','');
2536 $form->setBloc('visible','F');
2537
2538 // MODE - autre que AJOUTER alors on affiche un fieldset retour
2539 // d'avis
2540 if ($maj != 0 && $maj != 41) {
2541
2542 //Champs sur lequel s'ouvre le fieldset
2543 $form->setBloc('date_reception','D',"");
2544 $form->setFieldset('date_reception','D',_('Retour d\'avis'));
2545
2546 //Champs sur lequel se ferme le fieldset
2547 $form->setFieldset('lu','F','');
2548 $form->setBloc('lu','F');
2549
2550 }
2551
2552 $form->setBloc('texte_fondement_avis','D',"");
2553 $form->setFieldset('texte_fondement_avis','D',_("Informations Plat'AU"));
2554 $form->setFieldset('qualite_auteur','F','');
2555 $form->setBloc('qualite_auteur','F');
2556 }
2557
2558 /** Surcharge de la methode retour afin de retourner sur la page de saisie de
2559 * code barre si besoin
2560 **/
2561 function retour($premier = 0, $recherche = "", $tricol = "") {
2562 $params ="obj=".$this->get_absolute_class_name();
2563 if($this->getParameter("retour")=="form") {
2564 $params .= "&amp;idx=".$this->getParameter("idx");
2565 $params .= "&amp;action=3";
2566 }
2567 $params .= "&amp;premier=".$this->getParameter("premier");
2568 $params .= "&amp;tricol=".$this->getParameter("tricol");
2569 $params .= "&amp;advs_id=".$this->getParameter("advs_id");
2570 $params .= "&amp;valide=".$this->getParameter("valide");
2571 echo "\n<a class=\"retour\" ";
2572 echo "href=\"";
2573 //
2574
2575 if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
2576 echo OM_ROUTE_FORM."&".$params;
2577 } elseif($this->getParameter("retour")=="suivi_retours_de_consultation") {
2578 echo OM_ROUTE_FORM."&obj=consultation&idx=0&action=120";
2579 } else {
2580 echo OM_ROUTE_TAB."&".$params;
2581 }
2582 //
2583 echo "\"";
2584 echo ">";
2585 //
2586 echo _("Retour");
2587 //
2588 echo "</a>\n";
2589 }
2590
2591 /**
2592 * Surcharge du bouton retour pour popup
2593 */
2594 function retoursousformulaire($idxformulaire = NULL, $retourformulaire = NULL, $val = NULL,
2595 $objsf = NULL, $premiersf = NULL, $tricolsf = NULL, $validation = NULL,
2596 $idx = NULL, $maj = NULL, $retour = NULL) {
2597 if ($this->getParameter("retourformulaire") === "demande_avis_encours") {
2598 echo "\n<a class=\"retour\" ";
2599 echo "href=\"";
2600 echo "#";
2601 echo "\" ";
2602 echo ">";
2603 //
2604 echo _("Retour");
2605 //
2606 echo "</a>\n";
2607 } else {
2608 parent::retoursousformulaire($idxformulaire, $retourformulaire, $val,
2609 $objsf, $premiersf, $tricolsf, $validation,
2610 $idx, $maj, $retour);
2611 }
2612 }
2613
2614 /**
2615 * SETTER_FORM - setSelect.
2616 *
2617 * @return void
2618 */
2619 function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
2620 // TODO : ajouter un commentaire expliquant pourquoi l'appel a la méthode parent
2621 // est commenté et voir si on peut quand même appeler le parents pour réduire
2622 // le code de cette méthode
2623 //parent::setSelect($form, $maj);
2624 // avis_consultation
2625 $this->init_select(
2626 $form,
2627 $this->f->db,
2628 $maj,
2629 null,
2630 "avis_consultation",
2631 $this->get_var_sql_forminc__sql("avis_consultation"),
2632 $this->get_var_sql_forminc__sql("avis_consultation_by_id"),
2633 true
2634 );
2635 // service
2636 $sql_service = $this->get_var_sql_forminc__sql("service");
2637 // si contexte DI, ou surcharge (mes_encours, mes_clotures...)
2638 $is_in_context_of_foreign_key = $this->is_in_context_of_foreign_key("dossier", $this->getParameter('retourformulaire'));
2639 if ($is_in_context_of_foreign_key == true) {
2640 // on recupÚre les services des multicollectivités et de celle du DI
2641 $di = $this->f->get_inst__om_dbform(array(
2642 "obj" => "dossier_instruction",
2643 "idx" => $this->getParameter('idxformulaire'),
2644 ));
2645 $sql_service = str_replace(
2646 '<collectivite_di>',
2647 $di->getVal("om_collectivite"),
2648 $this->get_var_sql_forminc__sql("service_by_collectivite_from_di")
2649 );
2650
2651 // Si l'option référentiel ERP est activée, et que le type du
2652 // dossier d'instruction en contexte n'est pas autorisé à être
2653 // interfacé avec le référentiel ERP, alors les services à consulter
2654 // représentant les services ERP ne doivent pas être proposés dans
2655 // la liste à choix
2656 if ($this->f->is_option_referentiel_erp_enabled($di->getVal("om_collectivite")) === true
2657 && $this->f->getDATCode($di->getVal('dossier')) == $this->f-> getParameter ('erp__dossier__nature__pc')
2658 &&($this->f->getParameter('erp__dossier__type_di__pc')) !== null) {
2659 //
2660 $query_where_service_pc = "";
2661 $erp_di_pc = $this->f->getParameter('erp__dossier__type_di__pc');
2662 $erp_di_pc = explode(";", $erp_di_pc);
2663 $type_di = $di->getVal('dossier_instruction_type') ;
2664
2665 if (in_array($type_di, $erp_di_pc) === false) {
2666 // Dans le cas d'une consultation pour avis
2667 // Si les identifiant des services à consulter sont définis
2668 // dans le paramètre erp__services__avis__pc
2669 if ($this->f->getParameter('erp__services__avis__pc') !== null) {
2670 $erp_service_pc = $this->f->getParameter('erp__services__avis__pc');
2671 $erp_service_pc = explode(";", $erp_service_pc);
2672
2673 if (is_array($erp_service_pc) === true
2674 && empty($erp_service_pc) !== true) {
2675 //
2676 $query_where_service_pc .= sprintf(
2677 ' AND service.service NOT IN (%s) ',
2678 implode(", ", $erp_service_pc)
2679 );
2680 }
2681 }
2682
2683 // Dans le cas d'une consultation pour conformité
2684 // Si les identifiant des services à consulter sont définis
2685 // dans le paramètre erp__services__avis__pc
2686 if ($this->f->getParameter('erp__services__conformite__pc') !== null) {
2687 $erp_service_pc = $this->f->getParameter('erp__services__conformite__pc');
2688 $erp_service_pc = explode(";", $erp_service_pc);
2689
2690 if (is_array($erp_service_pc) === true
2691 && empty($erp_service_pc) !== true) {
2692 //
2693 $query_where_service_pc .= sprintf(
2694 ' AND service.service NOT IN (%s) ',
2695 implode(", ", $erp_service_pc)
2696 );
2697 }
2698 }
2699 }
2700
2701 $sql_service = str_replace('ORDER BY', $query_where_service_pc."ORDER BY", $sql_service);
2702 }
2703 }
2704 $this->init_select(
2705 $form,
2706 $this->f->db,
2707 $maj,
2708 null,
2709 "service",
2710 $sql_service,
2711 $this->get_var_sql_forminc__sql("service_by_id"),
2712 true
2713 );
2714 //Seulement dans le cas d'un retour d'avis
2715 // Ajout des contraintes spécifiques pour l'ajout d'un fichier en retour de
2716 // consultation
2717 if ($this->getParameter("retourformulaire") == "demande_avis_encours"
2718 || $this->getParameter("maj") == 100
2719 || $this->getParameter("maj") == 91) {
2720 // avis_consultation
2721 $this->init_select(
2722 $form,
2723 $this->f->db,
2724 1,
2725 null,
2726 "avis_consultation",
2727 $this->get_var_sql_forminc__sql("avis_consultation"),
2728 $this->get_var_sql_forminc__sql("avis_consultation_by_id"),
2729 true
2730 );
2731 //Tableau des contraintes spécifiques
2732 $params = array(
2733 "constraint" => array(
2734 "size_max" => 2,
2735 "extension" => ".pdf"
2736 ),
2737 );
2738
2739 $form->setSelect("fichier", $params);
2740 }
2741
2742 //
2743 if ($maj == 400) {
2744 $file = $this->f->storage->get($this->getVal('om_fichier_consultation'));
2745 $form->setSelect('live_preview', array(
2746 'base64' => base64_encode($file['file_content']),
2747 'mimetype' => $file['metadata']['mimetype'],
2748 'label' => 'document de consultation',
2749 'href' => sprintf(
2750 '../app/index.php?module=form&snippet=file&obj=consultation&champ=om_fichier_consultation&id=%1$s',
2751 $this->getVal($this->clePrimaire)
2752 )
2753 ));
2754 }
2755 // tiers_consulte
2756 $this->init_select(
2757 $form,
2758 $this->f->db,
2759 $maj,
2760 null,
2761 "motif_consultation",
2762 $this->get_var_sql_forminc__sql("tiers_consulte"),
2763 $this->get_var_sql_forminc__sql("tiers_consulte"),
2764 true
2765 );
2766 // Initialise le select en fonction de la valeur du champs categorie_tiers_consulte
2767 $form->setSelect(
2768 'tiers_consulte',
2769 $this->loadSelect_tiers_consulte($form, $maj, "categorie_tiers_consulte")
2770 );
2771 // motif_consultation
2772 $this->init_select(
2773 $form,
2774 $this->f->db,
2775 $maj,
2776 null,
2777 "motif_consultation",
2778 $this->get_var_sql_forminc__sql("motif_consultation"),
2779 $this->get_var_sql_forminc__sql("motif_consultation_by_id"),
2780 true
2781 );
2782 // categorie_tiers_consulte
2783 $this->init_select(
2784 $form,
2785 $this->f->db,
2786 $maj,
2787 null,
2788 "categorie_tiers_consulte",
2789 $this->get_var_sql_forminc__sql("categorie_tiers_consulte"),
2790 $this->get_var_sql_forminc__sql("categorie_tiers_consulte_by_id"),
2791 true
2792 );
2793 }
2794
2795 /**
2796 * Renvoie les valeurs possible des options du select "tiers_consulte".
2797 *
2798 * Ce select liste toutes les unités qui ont le type recherché
2799 * par l'unité parente.
2800 *
2801 * @param object $form Formulaire.
2802 * @param integer $maj Mode d'insertion.
2803 * @param string $champ Champ activant le filtre.
2804 *
2805 * @return array Tableau des valeurs possible du select.
2806 */
2807 protected function loadSelect_tiers_consulte($form, $maj, $champ) {
2808 // Initialisation du tableau de paramétrage du select :
2809 // - la clé 0 contient le tableau des valeurs,
2810 // - la clé 1 contient le tableau des labels,
2811 // - les clés des tableaux doivent faire correspondre le couple valeur/label.
2812 $contenu = array(
2813 0 => array('', ),
2814 1 => array(__('choisir')." ".__("tiers_consulte"), ),
2815 );
2816
2817 // Récupération de l'identifiant de la catégorie du tiers consulté :
2818 // (par ordre de priorité)
2819 // - si une valeur est postée : c'est le cas lors du rechargement d'un
2820 // formulaire et que le select doit être peuplé par rapport aux
2821 // données saisies dans le formulaire,
2822 // - si la valeur est passée en paramètre : c'est le cas lors d'un
2823 // appel via le snippet filterselect qui effectue un
2824 // $object->setParameter($linkedField, $idx); lors d'un appel ajax
2825 // depuis le formulaire,
2826 // - si la valeur est dans l'enregistrement de la consultation sur laquelle on se
2827 // trouve : c'est le cas lors de la première ouverture du formulaire
2828 // en modification par exemple.
2829 $idCategorieTiers = "";
2830 if ($this->f->get_submitted_post_value($champ) !== null) {
2831 $idCategorieTiers = $this->f->get_submitted_post_value($champ);
2832 } elseif ($this->getParameter($champ) != "") {
2833 $idCategorieTiers = $this->getParameter($champ);
2834 } elseif (isset($form->val[$champ])) {
2835 $idCategorieTiers = $form->val[$champ];
2836 }
2837
2838 // Si on ne récupère pas la categorie de tiers alors on ne peut pas savoir
2839 // le type attendu, on renvoi donc un select vide
2840 if ($idCategorieTiers == "" || ! is_numeric($idCategorieTiers)) {
2841 return $contenu;
2842 }
2843
2844 // on récupère la liste de tous les tiers ayant la catégorie voulue
2845 $sql = sprintf(
2846 'SELECT
2847 tiers_consulte,
2848 CONCAT(abrege, \' - \', libelle) as libelle
2849 FROM
2850 %1$stiers_consulte
2851 WHERE
2852 categorie_tiers_consulte = %2$d
2853 ORDER BY
2854 tiers_consulte.libelle ASC',
2855 DB_PREFIXE,
2856 intval($idCategorieTiers)
2857 );
2858 $res = $this->f->db->query($sql);
2859 $this->addToLog("db->query(\"".$sql."\");", VERBOSE_MODE);
2860 $this->f->isDatabaseError($res);
2861
2862 // Préparation du tableau de paramétrage du select avec les résultats récupérés
2863 while ($row = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
2864 $contenu[0][] = $row['tiers_consulte'];
2865 $contenu[1][] = $row['libelle'];
2866 }
2867
2868 // on renvoie le tableau de paramètrage du select contenant la liste des unités
2869 // respectant la contrainte de type
2870 return $contenu;
2871 }
2872
2873 /**
2874 * Finalisation du document lors de l'ajout d'une consultation.
2875 *
2876 * @param integer $id_consult indentifiant de l'objet
2877 */
2878 function finaliserAjouter($id_consult){
2879 //
2880 $this->begin_treatment(__METHOD__);
2881
2882 //
2883 $admin_msg_error = _("Veuillez contacter votre administrateur.");
2884 $file_msg_error = _("La finalisation du document a échoué.")
2885 ." ".$admin_msg_error;
2886 $bdd_msg_error = _("Erreur de base de données.")
2887 ." ".$admin_msg_error;
2888 $log_msg_error = "Finalisation non enregistrée - id consultation = %s - uid fichier = %s";
2889
2890 $uid = $this->file_finalizing($id_consult);
2891 // Comme pour le fonctionnement de l'envoi de mail,
2892 // Si échec cela ne stoppe pas la création de la consultation.
2893 // L'utilisateur en est tout de même informé dans l'IHM
2894 // et l'erreur est loguée.
2895 if ($uid == '' || $uid == 'OP_FAILURE' ) {
2896 $this->addToMessage($file_msg_error);
2897 $this->addToLog(sprintf($log_msg_error, $id_consult, $uid), VERBOSE_MODE);
2898 return $this->end_treatment(__METHOD__, true);
2899 }
2900
2901 // Si succès mise à jour de la consultation
2902 $valF = array(
2903 "om_final_consultation" => true,
2904 "om_fichier_consultation" => $uid
2905 );
2906 //
2907 $res = $this->f->db->autoExecute(DB_PREFIXE.$this->table, $valF,
2908 DB_AUTOQUERY_UPDATE, $this->getCle($id_consult));
2909 //
2910 $this->addToLog(
2911 "finaliserAjouter() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id_consult)."\")",
2912 VERBOSE_MODE
2913 );
2914 //
2915 if ($this->f->isDatabaseError($res, true) === true) {
2916 $this->correct = false;
2917 // Remplacement du message de validation
2918 $this->msg = '';
2919 $this->addToMessage($bdd_msg_error);
2920 return $this->end_treatment(__METHOD__, false);
2921 }
2922 //
2923 return $this->end_treatment(__METHOD__, true);
2924 }
2925
2926 /**
2927 * Finalisation du fichier.
2928 *
2929 * @param integer $id indentifiant de l'objet
2930 *
2931 * @return string uid du fichier finalisé
2932 */
2933 function file_finalizing($id){
2934 if ( ! ($pdf = $this->generate_pdf_consultation())) {
2935 $this->addToMessage(__('Erreur lors de la génération du document'));
2936 return '';
2937 }
2938
2939 if(isset($this->valF["om_final_consultation"])) {
2940 $finalized = $this->valF["om_final_consultation"];
2941 } else {
2942 $finalized = $this->getVal("om_final_consultation");
2943 }
2944
2945 // Métadonnées du document
2946 $metadata = array(
2947 'filename' => $pdf["filename"],
2948 'mimetype' => 'application/pdf',
2949 'size' => strlen($pdf["pdf_output"])
2950 );
2951
2952 // Récupération des métadonnées calculées après validation
2953 $spe_metadata = $this->getMetadata("om_fichier_consultation");
2954
2955 $metadata = array_merge($metadata, $spe_metadata);
2956
2957 // Si le document a déjà été finalisé (vaudra 'f', ou false sinon)
2958 if ( $finalized != '' ){
2959
2960 // Met à jour le document mais pas son uid
2961 $uid = $this->f->storage->update(
2962 $this->getVal("om_fichier_consultation"), $pdf["pdf_output"], $metadata);
2963 }
2964 // Sinon, ajoute le document et récupère son uid
2965 else {
2966
2967 // Stockage du PDF
2968 $uid = $this->f->storage->create($pdf["pdf_output"], $metadata, "from_content", $this->table.".om_fichier_consultation");
2969 }
2970
2971 return $uid;
2972
2973 }
2974
2975
2976 /**
2977 * TREATMENT - finalize.
2978 *
2979 * Permet de finaliser un enregistrement
2980 *
2981 * @param array $val valeurs soumises par le formulaire
2982 * @param null $dnu1 @deprecated Ancienne ressource de base de données.
2983 * @param null $dnu2 @deprecated Ancien marqueur de débogage.
2984 *
2985 * @return boolean
2986 */
2987 function finalize($val = array(), &$dnu1 = null, $dnu2 = null) {
2988
2989 // Cette méthode permet d'exécuter une routine en début des méthodes
2990 // dites de TREATMENT.
2991 $this->begin_treatment(__METHOD__);
2992
2993 // Traitement de la finalisation
2994 $ret = $this->manage_finalizing("finalize", $val);
2995
2996 // Si le traitement retourne une erreur
2997 if ($ret !== true) {
2998
2999 // Termine le traitement
3000 $this->end_treatment(__METHOD__, false);
3001 }
3002
3003 // Termine le traitement
3004 return $this->end_treatment(__METHOD__, true);
3005 }
3006
3007 /**
3008 * TREATMENT - unfinalize.
3009 *
3010 * Permet de definaliser un enregistrement
3011 *
3012 * @param array $val valeurs soumises par le formulaire
3013 * @param null $dnu1 @deprecated Ancienne ressource de base de données.
3014 * @param null $dnu2 @deprecated Ancien marqueur de débogage.
3015 *
3016 * @return boolean
3017 */
3018 function unfinalize($val = array(), &$dnu1 = null, $dnu2 = null) {
3019
3020 // Cette méthode permet d'exécuter une routine en début des méthodes
3021 // dites de TREATMENT.
3022 $this->begin_treatment(__METHOD__);
3023
3024 // Traitement de la finalisation
3025 $ret = $this->manage_finalizing("unfinalize", $val);
3026
3027 // Si le traitement retourne une erreur
3028 if ($ret !== true) {
3029
3030 // Termine le traitement
3031 $this->end_treatment(__METHOD__, false);
3032 }
3033
3034 // Termine le traitement
3035 return $this->end_treatment(__METHOD__, true);
3036 }
3037
3038 /**
3039 * TREATMENT - manage_visibilite_consultation.
3040 *
3041 * Permet de masquer la consultation dans les éditions si elle est actuellement
3042 * affichée, ou de l'afficher si elle est actuellement masquée.
3043 *
3044 *
3045 * @param array $val valeurs soumises par le formulaire
3046 * @param null $dnu1 @deprecated Ancienne ressource de base de données.
3047 * @param null $dnu2 @deprecated Ancien marqueur de débogage.
3048 *
3049 * @return boolean
3050 */
3051 function manage_visibilite_consultation($val = array(), &$dnu1 = null, $dnu2 = null) {
3052
3053 // Cette méthode permet d'exécuter une routine en début des méthodes
3054 // dites de TREATMENT.
3055 $this->begin_treatment(__METHOD__);
3056
3057 // Recuperation de la valeur de la cle primaire de l'objet
3058 $id = $this->getVal($this->clePrimaire);
3059
3060 if($this->getVal("visible") == 'f') {
3061 $valF["visible"] = true;
3062 }
3063 else {
3064 $valF["visible"] = false;
3065 }
3066
3067 // Execution de la requête de modification des donnees de l'attribut
3068 $res = $this->f->db->autoExecute(DB_PREFIXE.$this->table, $valF,
3069 DB_AUTOQUERY_UPDATE, $this->getCle($id));
3070 $this->addToLog(
3071 __METHOD__."(): db->autoexecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id)."\")",
3072 VERBOSE_MODE
3073 );
3074 if ($this->f->isDatabaseError($res, true) !== false) {
3075 // Appel de la methode de recuperation des erreurs
3076 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
3077 $this->correct = false;
3078 $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
3079 // Termine le traitement
3080 return $this->end_treatment(__METHOD__, false);
3081 }
3082
3083 if ($valF["visible"] === false) {
3084 $this->addToMessage(_("La consultation est masquée dans les éditions."));
3085 }
3086 else {
3087 $this->addToMessage(_("La consultation est affichée dans les éditions."));
3088 }
3089 // Termine le traitement
3090 return $this->end_treatment(__METHOD__, true);
3091 }
3092
3093
3094 /**
3095 * Finalisation des documents.
3096 *
3097 * @param string $mode finalize/unfinalize
3098 * @param array $val valeurs soumises par le formulaire
3099 */
3100 function manage_finalizing($mode = null, $val = array()) {
3101 //
3102 $this->begin_treatment(__METHOD__);
3103
3104 // Recuperation de la valeur de la cle primaire de l'objet
3105 $id_consult = $this->getVal($this->clePrimaire);
3106
3107 //
3108 $admin_msg_error = _("Veuillez contacter votre administrateur.");
3109 $file_msg_error = _("Erreur de traitement de fichier.")
3110 ." ".$admin_msg_error;
3111 $bdd_msg_error = _("Erreur de base de données.")
3112 ." ".$admin_msg_error;
3113 $log_msg_error = "Finalisation non enregistrée - id consultation = %s - uid fichier = %s";
3114
3115 // Si on finalise le document
3116 if ($mode == "finalize") {
3117 //
3118 $etat = _('finalisation');
3119 // Finalisation du fichier
3120 $uid = $this->file_finalizing($id_consult);
3121 }
3122 //
3123 else {
3124 //
3125 $etat = _('définalisation');
3126 //Récupération de l'uid du document finalisé
3127 $uid = $this->getVal("om_fichier_consultation");
3128 }
3129
3130 // Si on définalise l'UID doit être défini
3131 // Si on finalise la création/modification du fichier doit avoir réussi
3132 if ($uid == '' || $uid == 'OP_FAILURE' ) {
3133 $this->correct = false;
3134 $this->addToMessage($file_msg_error);
3135 $this->addToLog(sprintf($log_msg_error, $id_consult, $uid), VERBOSE_MODE);
3136 return $this->end_treatment(__METHOD__, false);
3137 }
3138
3139 foreach ($this->champs as $key => $value) {
3140 //
3141 $val[$value] = $this->val[$key];
3142 }
3143 $this->setvalF($val);
3144
3145 // Verification de la validite des donnees
3146 $this->verifier($this->val);
3147 // Si les verifications precedentes sont correctes, on procede a
3148 // la modification, sinon on ne fait rien et on retourne une erreur
3149 if ($this->correct === true) {
3150
3151 // Execution du trigger 'before' specifique au MODE 'update'
3152 $this->triggermodifier($id_consult, $this->f->db, $this->val, DEBUG);
3153 // Suppression de son message de validation
3154 $this->msg = '';
3155
3156 //
3157 $valF = array();
3158 if ($mode == "finalize") {
3159 $valF["om_final_consultation"] = true;
3160 } else {
3161 $valF["om_final_consultation"] = false;
3162 }
3163 $valF["om_fichier_consultation"] = $uid;
3164
3165 // Execution de la requête de modification des donnees de l'attribut
3166 // valF de l'objet dans l'attribut table de l'objet
3167 $res = $this->f->db->autoExecute(DB_PREFIXE.$this->table, $valF,
3168 DB_AUTOQUERY_UPDATE, $this->getCle($id_consult));
3169 $this->addToLog(
3170 "finaliser() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id_consult)."\")",
3171 VERBOSE_MODE
3172 );
3173 //
3174 if ($this->f->isDatabaseError($res, true) === true) {
3175 $this->correct = false;
3176 $this->addToMessage($bdd_msg_error);
3177 return $this->end_treatment(__METHOD__, false);
3178 }
3179 //
3180 $this->addToMessage(sprintf(_("La %s du document s'est effectuee avec succes."), $etat));
3181 return $this->end_treatment(__METHOD__, true);
3182 }
3183 // L'appel de verifier() a déjà positionné correct à false
3184 // et défini un message d'erreur.
3185 $this->addToLog(sprintf($log_msg_error, $id_consult, $uid), DEBUG_MODE);
3186 return $this->end_treatment(__METHOD__, false);
3187 }
3188
3189 /**
3190 * Permet de récupérer l'édition de la consultation.
3191 *
3192 * @param string $output type de sortie
3193 *
3194 * @return string si le type de sortie est string, le contenu du pdf est retourné.
3195 */
3196 function generate_pdf_consultation() {
3197 if(isset($this->valF[$this->clePrimaire])) {
3198 $id = $this->valF[$this->clePrimaire];
3199 } else {
3200 $id = $this->getVal($this->clePrimaire);
3201 }
3202
3203 // Requête qui récupère le type de consultation
3204 $sql = sprintf(
3205 '(SELECT
3206 id
3207 FROM
3208 %1$sservice
3209 LEFT JOIN %1$som_etat ON service.edition = om_etat.om_etat
3210 WHERE
3211 service = (
3212 SELECT
3213 service
3214 FROM
3215 %1$sconsultation
3216 WHERE
3217 consultation = %2$s))
3218 UNION
3219 (SELECT
3220 id
3221 FROM
3222 %1$smotif_consultation
3223 LEFT JOIN %1$som_etat ON motif_consultation.om_etat = om_etat.om_etat
3224 WHERE
3225 motif_consultation = (
3226 SELECT
3227 motif_consultation
3228 FROM
3229 %1$sconsultation
3230 WHERE
3231 consultation = %2$s))',
3232 DB_PREFIXE,
3233 $id
3234 );
3235 $obj = $this->f->db->getone($sql);
3236 $this->f->addTolog(
3237 __FILE__." - ".__METHOD__." : db->getone(\"".$sql."\");",
3238 VERBOSE_MODE
3239 );
3240 if($this->f->isDatabaseError($obj, true)) {
3241 $this->addToMessage(_("Aucun document genere."));
3242 $this->addToMessage(_("Finalisation non enregistree"));
3243 return false;
3244 }
3245 $collectivite = $this->f->getCollectivite($this->get_dossier_collectivite());
3246
3247 $pdf_output = $this->compute_pdf_output("etat", $obj, $collectivite, $id);
3248
3249 return $pdf_output;
3250 }
3251
3252 function get_dossier_collectivite() {
3253 if(isset($this->valF["dossier"])) {
3254 $dossier = $this->valF["dossier"];
3255 } elseif (! empty($this->f->get_submitted_get_value('dossier_instruction')) ) {
3256 $dossier = $this->f->get_submitted_get_value('dossier_instruction');
3257 } else {
3258 $dossier = $this->getVal("dossier");
3259 }
3260
3261 $sql = "SELECT om_collectivite FROM ".DB_PREFIXE."dossier WHERE dossier.dossier='".$this->f->db->escapeSimple($dossier)."'";
3262 $collectivite = $this->f->db->getone($sql);
3263 $this->f->addTolog(
3264 __FILE__." - ".__METHOD__." : db->getone(\"".$sql."\");",
3265 VERBOSE_MODE
3266 );
3267 if($this->f->isDatabaseError($collectivite, true)) {
3268 $this->addToMessage(_("Aucun document genere."));
3269 $this->addToMessage(_("Finalisation non enregistree"));
3270 return false;
3271 }
3272 return $collectivite;
3273 }
3274
3275 function view_consulter_pdf(){
3276 if ($this->getVal("om_final_consultation") == 't') {
3277 $lien = '../app/index.php?module=form&snippet=file&obj=consultation&'.
3278 'champ=om_fichier_consultation&id='.$this->getVal($this->clePrimaire);
3279 header("Location: ".$lien);
3280 } else {
3281
3282 $output = $this->generate_pdf_consultation();
3283 $this->expose_pdf_output($output["pdf_output"], $output["filename"]);
3284 }
3285 exit();
3286 }
3287
3288
3289 /**
3290 * Création du nom de fichier
3291 * @return string numéro de dossier d'instruction
3292 */
3293 protected function getFichierFilename() {
3294 $fichier = isset($this->valF['fichier']) === true && $this->valF['fichier'] !== null ? $this->valF['fichier'] : $this->getVal('fichier');
3295 $consultation_id = isset($this->valF[$this->clePrimaire]) === true && $this->valF[$this->clePrimaire] !== null ? $this->valF[$this->clePrimaire] : $this->getVal($this->clePrimaire);
3296 // Récupère l'extension sur le fichier temporaire
3297 $extension = '';
3298 if ($fichier !== null && $fichier !== '') {
3299 $temporary_test = explode("|", $fichier);
3300 if (isset($temporary_test[0]) === true && $temporary_test[0] == "tmp") {
3301 if (isset($temporary_test[1]) === true) {
3302 $tmp_filename = $this->f->storage->getFilename_temporary($temporary_test[1]);
3303 $extension = strtolower(substr($tmp_filename, strrpos($tmp_filename, '.')));
3304 }
3305 }
3306 }
3307 return "consultation_avis_".$consultation_id.$extension;
3308 }
3309
3310 /**
3311 * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
3312 * @return string numéro de dossier d'instruction
3313 */
3314 protected function getDossier($champ = null) {
3315 if(empty($this->specificMetadata)) {
3316 $this->getSpecificMetadata();
3317 }
3318 return $this->specificMetadata->dossier;
3319 }
3320 /**
3321 * Récupération la version du dossier d'instruction à ajouter aux métadonnées
3322 * @return int Version
3323 */
3324 protected function getDossierVersion() {
3325 if(empty($this->specificMetadata)) {
3326 $this->getSpecificMetadata();
3327 }
3328 return $this->specificMetadata->version;
3329 }
3330 /**
3331 * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
3332 * @return string numéro de dossier d'autorisation
3333 */
3334 protected function getNumDemandeAutor() {
3335 if(empty($this->specificMetadata)) {
3336 $this->getSpecificMetadata();
3337 }
3338 return $this->specificMetadata->dossier_autorisation;
3339 }
3340 /**
3341 * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
3342 * @return date demande initiale
3343 */
3344 protected function getAnneemoisDemandeAutor() {
3345 if(empty($this->specificMetadata)) {
3346 $this->getSpecificMetadata();
3347 }
3348 return $this->specificMetadata->date_demande_initiale;
3349 }
3350 /**
3351 * Récupération du type de dossier d'instruction à ajouter aux métadonnées
3352 * @return string type de dossier d'instruction
3353 */
3354 protected function getTypeInstruction() {
3355 if(empty($this->specificMetadata)) {
3356 $this->getSpecificMetadata();
3357 }
3358 return $this->specificMetadata->dossier_instruction_type;
3359 }
3360 /**
3361 * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
3362 * @return string avis
3363 */
3364 protected function getStatutAutorisation() {
3365 if(empty($this->specificMetadata)) {
3366 $this->getSpecificMetadata();
3367 }
3368 return $this->specificMetadata->statut;
3369 }
3370 /**
3371 * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
3372 * @return string type d'autorisation
3373 */
3374 protected function getTypeAutorisation() {
3375 if(empty($this->specificMetadata)) {
3376 $this->getSpecificMetadata();
3377 }
3378 return $this->specificMetadata->dossier_autorisation_type;
3379 }
3380 /**
3381 * Récupération de la date d'ajout de document à ajouter aux métadonnées
3382 * @return date de l'évènement
3383 */
3384 protected function getDateEvenementDocument() {
3385 return date("Y-m-d");
3386 }
3387 /**
3388 * Récupération du groupe d'instruction à ajouter aux métadonnées
3389 * @return string Groupe d'instruction
3390 */
3391 protected function getGroupeInstruction() {
3392 if(empty($this->specificMetadata)) {
3393 $this->getSpecificMetadata();
3394 }
3395 return $this->specificMetadata->groupe_instruction;
3396 }
3397 /**
3398 * Récupération du type de document à ajouter aux métadonnées
3399 * @return string Type de document
3400 */
3401 protected function getTitle() {
3402 if ($this->getParameter("retourformulaire") == "demande_avis_encours") {
3403 return 'Retour de consultation';
3404 } else {
3405 return 'Demande de consultation';
3406 }
3407 }
3408
3409
3410 /**
3411 * Récupération du champ ERP du dossier d'instruction.
3412 *
3413 * @return boolean
3414 */
3415 public function get_concerne_erp() {
3416 //
3417 if(empty($this->specificMetadata)) {
3418 $this->getSpecificMetadata();
3419 }
3420 //
3421 return $this->specificMetadata->erp;
3422 }
3423
3424
3425 /**
3426 * Cette méthode permet de stocker en attribut toutes les métadonnées
3427 * nécessaire à l'ajout d'un document.
3428 */
3429 public function getSpecificMetadata() {
3430 if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
3431 $dossier = $this->valF["dossier"];
3432 } else {
3433 $dossier = $this->getVal("dossier");
3434 }
3435 //Requête pour récupérer les informations essentiels sur le dossier d'instruction
3436 $sql = "SELECT dossier.dossier as dossier,
3437 dossier_autorisation.dossier_autorisation as dossier_autorisation,
3438 to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
3439 dossier_instruction_type.code as dossier_instruction_type,
3440 etat_dossier_autorisation.libelle as statut,
3441 dossier_autorisation_type.code as dossier_autorisation_type,
3442 groupe.code as groupe_instruction,
3443 CASE WHEN dossier.erp IS TRUE
3444 THEN 'true'
3445 ELSE 'false'
3446 END as erp
3447 FROM ".DB_PREFIXE."dossier
3448 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
3449 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
3450 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
3451 ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
3452 LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
3453 ON dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
3454 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
3455 ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
3456 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
3457 ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
3458 LEFT JOIN ".DB_PREFIXE."groupe
3459 ON dossier_autorisation_type.groupe = groupe.groupe
3460 WHERE dossier.dossier = '".$dossier."'";
3461 $res = $this->f->db->query($sql);
3462 $this->addToLog(
3463 __METHOD__."(): db->query(\"".$sql."\");",
3464 VERBOSE_MODE
3465 );
3466 $this->f->isDatabaseError($res);
3467
3468 //Le résultat est récupéré dans un objet
3469 $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
3470
3471 //Si il y a un résultat
3472 if ($row !== null) {
3473
3474 // Instrance de la classe dossier
3475 $inst_dossier = $this->get_inst_dossier($dossier);
3476
3477 // Insère l'attribut version à l'objet
3478 $row->version = $inst_dossier->get_dossier_instruction_version();
3479
3480 //Alors on créé l'objet dossier_instruction
3481 $this->specificMetadata = $row;
3482
3483 }
3484 }
3485
3486 /**
3487 *
3488 * @return boolean
3489 */
3490 function is_instructeur(){
3491
3492 //Si l'utilisateur est un instructeur
3493 if ($this->f->isUserInstructeur()){
3494 return true;
3495 }
3496 return false;
3497 }
3498
3499 function is_editable(){
3500 // Impossible de modifier si la consultation est liée à un service Plat'AU
3501 $inst_service = $this->get_inst_service($this->getVal('service'));
3502 if ($inst_service->getVal('service_type') !== null
3503 && $inst_service->getVal('service_type') === PLATAU) {
3504 //
3505 return false;
3506 }
3507
3508 // Si bypass
3509 if ($this->f->can_bypass("consultation", "modifier")){
3510 return true;
3511 }
3512
3513 // Tester si le dossier est cloturé ,
3514 // et si l'instructeur est de la même division
3515 if ($this->is_instructeur_from_division_dossier() === true and
3516 $this->is_dossier_instruction_not_closed() === true) {
3517 return true;
3518 }
3519 return false;
3520 }
3521
3522 function is_deletable(){
3523 // Impossible de supprimer si la tâche Plat'AU de la consultation a été consommée
3524 $inst_task_empty = $this->f->get_inst__om_dbform(array(
3525 "obj" => "task",
3526 "idx" => 0,
3527 ));
3528 $task_exists = $inst_task_empty->task_exists('creation_consultation', $this->getVal($this->clePrimaire));
3529 if ($task_exists !== false) {
3530 $inst_task = $this->f->get_inst__om_dbform(array(
3531 "obj" => "task",
3532 "idx" => $task_exists,
3533 ));
3534 if ($inst_task->getVal('state') === $inst_task::STATUS_PENDING
3535 || $inst_task->getVal('state') === $inst_task::STATUS_DONE) {
3536 //
3537 return false;
3538 }
3539 }
3540
3541 // Suppression possible pour l'instructeur de la division si pas d'avis
3542 if ($this->is_dossier_instruction_not_closed() === true &&
3543 $this->is_instructeur_from_division_dossier() === true &&
3544 $this->getVal("avis_consultation") == "" &&
3545 $this->getVal('fichier') == ""
3546 ){
3547 return true;
3548 }
3549
3550 // Si un avis a été rendu il faut que l'utilisateur ai le droit
3551 // specifique de suppression avec avis rendu et le bypass de division
3552 if ($this->getVal("avis_consultation") != "" or $this->getVal('fichier') != "") {
3553
3554 if ($this->f->can_bypass("consultation", "supprimer") and
3555 $this->f->isAccredited("consultation_supprimer_avec_avis_rendu") == true){
3556 return true;
3557 }
3558 } else {
3559 // Si pas d'avis rendu, le bypass suffit
3560 if ($this->f->can_bypass("consultation", "supprimer")){
3561 return true;
3562 }
3563 }
3564
3565 return false;
3566 }
3567
3568 function is_multiaddable(){
3569
3570 if ($this->f->can_bypass("consultation", "ajouter")){
3571 return true;
3572 }
3573
3574 if ($this->is_instructeur_from_division_dossier() === true){
3575 return true;
3576 }
3577 return false;
3578 }
3579
3580 function is_markable(){
3581
3582 if($this->f->can_bypass("consultation", "modifier_lu")){
3583 return true;
3584 }
3585
3586 if ($this->is_instructeur_from_division_dossier() === true){
3587 return true;
3588 }
3589 return false;
3590 }
3591
3592 // Si la consultation est visible alors on peut afficher le lien pour la masquer
3593 function is_visible() {
3594 if($this->getVal("visible") == 't') {
3595 return true;
3596 }
3597 return false;
3598 }
3599
3600 // Si la consultation n'est pas visible alors on peut afficher le lien pour l'afficher
3601 function is_not_visible() {
3602 if($this->getVal("visible") == 'f') {
3603 return true;
3604 }
3605 return false;
3606 }
3607
3608 function is_finalizable(){
3609 // Vérifie si la variable contenant les informations nécessaire pour la
3610 // vérification est initialisé et si ce n'est pas le cas elle est initialisée
3611 if ($this->valElementConsulte == array()) {
3612 if (! $this->set_val_element_consulte()) {
3613 return false;
3614 }
3615 }
3616
3617 // Vérifie si la génération d'édition est disponible pour le service / motif
3618 if ($this->valElementConsulte['generate_edition'] !== 't') {
3619 return false;
3620 }
3621
3622 if($this->f->can_bypass("consultation", "finaliser")){
3623 return true;
3624 }
3625
3626 if ($this->is_instructeur_from_division_dossier() === true &&
3627 $this->is_dossier_instruction_not_closed() === true){
3628 return true;
3629 }
3630
3631 return false;
3632 }
3633
3634 function is_unfinalizable(){
3635 // Vérifie si la variable contenant les informations nécessaire pour la
3636 // vérification est initialisé et si ce n'est pas le cas elle est initalisée
3637 if ($this->valElementConsulte == array()) {
3638 if (! $this->set_val_element_consulte()) {
3639 return false;
3640 }
3641 }
3642
3643 if ($this->valElementConsulte['generate_edition'] !== 't') {
3644 return false;
3645 }
3646
3647 if ($this->valElementConsulte['service_type'] === PLATAU) {
3648 return false;
3649 }
3650
3651 if($this->f->can_bypass("consultation", "definaliser")){
3652 return true;
3653 }
3654
3655 if ($this->is_instructeur_from_division_dossier() === true &&
3656 $this->is_dossier_instruction_not_closed() === true){
3657 return true;
3658 }
3659
3660 return false;
3661 }
3662
3663 /**
3664 * Cette méthode vérifie à l'aide d'une requête sql si des tiers ont été paramétrés.
3665 * Si c'est le cas on renvoie true sinon renvoie false.
3666 *
3667 * Si la requête échoue la méthode renverra false.
3668 *
3669 * @return boolean
3670 */
3671 public function is_tiers_parametre() {
3672 // Récupère la requête de remplissage de la liste de sélection des tiers
3673 // consulté
3674 $sql = $this->get_var_sql_forminc__sql_tiers_consulte();
3675 // Récupère les résultats de la requête. Si on ne récupère pas de résultats ou
3676 // que la requête est en erreur renvoie false.
3677 $res = $this->f->db->query($sql);
3678 $this->addToLog(__METHOD__.'(): db->query("'.$sql.'");', VERBOSE_MODE);
3679 if ($this->f->isDatabaseError($res) !== false) {
3680 return false;
3681 }
3682 if ($res->numrows() == 0) {
3683 return false;
3684 }
3685 // Si on a des résultats alors des tiers ont été paramétrés
3686 return true;
3687 }
3688
3689 /*
3690 * CONDITION - can_show_or_hide_in_edition
3691 *
3692 * Vérifie que l'utilisateur possède la permission bypass.
3693 * Vérifie que l'utilisateur est un instructeur, qu'il fait partie de la
3694 * division du dossier et que le dossier n'est pas clôturé.
3695 *
3696 * Cette méthode est identique aux conditions dans consultation.inc.php
3697 * permettant l'affichage des actions depuis le listing des consultations.
3698 * Il est nécessaire que cette méthode ainsi que la condition if restent
3699 * concordants en tout point afin que le comportement des actions soit
3700 * identique depuis le formulaire et depuis le listing.
3701 *
3702 * @return boolean
3703 *
3704 */
3705 function can_show_or_hide_in_edition() {
3706
3707 //
3708 if ($this->f->can_bypass("consultation", "visibilite_dans_edition") === true){
3709 return true;
3710 }
3711
3712 //
3713 if ($this->is_instructeur_from_division_dossier() === true and
3714 $this->is_dossier_instruction_not_closed() === true) {
3715 return true;
3716 }
3717 return false;
3718 }
3719
3720 /*
3721 * CONDITION - can_user_access_dossier_contexte_ajout
3722 *
3723 * Vérifie que l'utilisateur a bien accès au dossier d'instruction passé dans le
3724 * formulaire d'ajout.
3725 * Cette méthode vérifie que l'utilisateur est lié au groupe du dossier, et si le
3726 * dossier est confidentiel qu'il a accès aux confidentiels de ce groupe.
3727 *
3728 */
3729 function can_user_access_dossier_contexte_ajout() {
3730
3731 ($this->f->get_submitted_get_value('idxformulaire') !== null ? $id_dossier =
3732 $this->f->get_submitted_get_value('idxformulaire') : $id_dossier = "");
3733 //
3734 if ($id_dossier !== "") {
3735 $dossier = $this->f->get_inst__om_dbform(array(
3736 "obj" => "dossier_instruction",
3737 "idx" => $id_dossier,
3738 ));
3739 //
3740 return $dossier->can_user_access_dossier();
3741 }
3742 return false;
3743 }
3744
3745 /*
3746 * CONDITION - can_user_access_dossier_contexte_modification
3747 *
3748 * Vérifie que l'utilisateur a bien accès au dossier lié à la consultation.
3749 * Cette méthode vérifie que l'utilisateur est lié au groupe du dossier, et si le
3750 * dossier est confidentiel qu'il a accès aux confidentiels de ce groupe.
3751 *
3752 */
3753 function can_user_access_dossier_contexte_modification() {
3754
3755 ($this->f->get_submitted_get_value('idxformulaire') !== null ? $id_dossier =
3756 $this->f->get_submitted_get_value('idxformulaire') : $id_dossier = "");
3757
3758 if ($id_dossier != "") {
3759 $dossier = $this->f->get_inst__om_dbform(array(
3760 "obj" => "dossier",
3761 "idx" => $id_dossier,
3762 ));
3763 //
3764 return $dossier->can_user_access_dossier();
3765 }
3766 return false;
3767 }
3768
3769 /**
3770 * [is_viewable description]
3771 * @return boolean [description]
3772 */
3773 function is_viewable() {
3774 // Vérifie si la variable contenant les informations nécessaire pour la
3775 // vérification est initialisé et si ce n'est pas le cas elle est initalisée
3776 if ($this->valElementConsulte == array()) {
3777 if (! $this->set_val_element_consulte()) {
3778 return false;
3779 }
3780 }
3781 if ($this->valElementConsulte['generate_edition'] !== 't') {
3782 return false;
3783 }
3784
3785 return true;
3786 }
3787
3788 /**
3789 * Indique si la redirection vers le lien de retour est activée ou non.
3790 *
3791 * L'objectif de cette méthode est de permettre d'activer ou de désactiver
3792 * la redirection dans certains contextes.
3793 *
3794 * @return boolean
3795 */
3796 function is_back_link_redirect_activated() {
3797 //
3798 if ($this->getParameter("maj") == 100) {
3799 //
3800 return false;
3801 }
3802 //
3803 return true;
3804 }
3805
3806 // XXX WIP
3807 public function get_json_data() {
3808 $val = array_combine($this->champs, $this->val);
3809 foreach ($val as $key => $value) {
3810 $val[$key] = strip_tags($value);
3811 }
3812 return $val;
3813 }
3814
3815 protected function getDocumentType($champ = null) {
3816 $serviceId = $this->getVal('service');
3817 if (empty($serviceId) && isset($this->valF['service'])) {
3818 $serviceId = $this->valF['service'];
3819 }
3820 if (! empty($serviceId)) {
3821 $service = $this->f->findObjectById('service', $serviceId);
3822 if (! empty($service)) {
3823 return __("Consultation").':'.$service->getVal('libelle');
3824 }
3825 }
3826 return parent::getDocumentType();
3827 }
3828
3829 /**
3830 * Affiche la page de téléchargement du document de la notification.
3831 *
3832 * @param boolean $content_only Affiche le contenu seulement.
3833 *
3834 * @return void
3835 */
3836 public function view_telecharger_document_anonym() {
3837 // Par défaut on considère qu'on va afficher le formulaire
3838 $idx = 0;
3839 // Flag d'erreur
3840 $error = false;
3841 // Message d'erreur
3842 $message = '';
3843
3844 // Paramètres GET : récupération de la clé d'accès
3845 $cle_acces_document = $this->f->get_submitted_get_value('key');
3846 $cle_acces_document = $this->f->db->escapeSimple($cle_acces_document);
3847 // Vérification de l'existence de la clé et récupération de l'uid du fichier
3848 $uidFichier = $this->getUidDocumentConsultationWithKey($cle_acces_document);
3849 if ($uidFichier != null) {
3850 // Récupération du document
3851 $file = $this->f->storage->get($uidFichier);
3852
3853 // Headers
3854 header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
3855 header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date dans le passé
3856 header("Content-Type: ".$file['metadata']['mimetype']);
3857 header("Accept-Ranges: bytes");
3858 header("Content-Disposition: inline; filename=\"".$file['metadata']['filename']."\";" );
3859 // Affichage du document
3860 echo $file['file_content'];
3861
3862 // Récupération de la date de premier accès et maj du suivi uniquement
3863 // si la date de 1er accès n'a pas encore été remplis
3864 $inst_notif = $this->getInstanceNotificationWithKey($cle_acces_document);
3865 if ($inst_notif->getVal('date_premier_acces') == null ||
3866 $inst_notif->getVal('date_premier_acces') == '') {
3867 $notif_val = array();
3868 foreach ($inst_notif->champs as $champ) {
3869 $notif_val[$champ] = $inst_notif->getVal($champ);
3870 }
3871 $notif_val['date_premier_acces'] = date("d/m/Y H:i:s");
3872 $notif_val['statut'] = 'vu';
3873 $notif_val['commentaire'] = 'Le document a été vu';
3874 $suivi_notif = $inst_notif->modifier($notif_val);
3875 }
3876
3877 } else {
3878 // Page vide 404
3879 printf('Ressource inexistante');
3880 header('HTTP/1.0 404 Not Found');
3881 }
3882 }
3883 /**
3884 * Récupère une clé et renvoie l'uid du document liée à cette
3885 * clé. Si la clé n'existe pas renvoie null.
3886 *
3887 * @param string $cleGen clé dont on cherche l'instruction
3888 * @return integer|null
3889 */
3890 protected function getUidDocumentConsultationWithKey($cleGen) {
3891 $query = sprintf(
3892 'SELECT
3893 consultation.fichier
3894 FROM
3895 %1$sinstruction_notification_document
3896 LEFT JOIN %1$sconsultation ON instruction_notification_document.document_id = consultation.consultation
3897 WHERE
3898 instruction_notification_document.cle = \'%2$s\'',
3899 DB_PREFIXE,
3900 $this->f->db->escapeSimple($cleGen)
3901 );
3902
3903 $res = $this->f->db->getOne($query);
3904 $this->addToLog(__METHOD__.": db->getOne(\"".$query."\");", VERBOSE_MODE);
3905 $this->f->isDatabaseError($res);
3906 return $res;
3907 }
3908
3909 /**
3910 * Récupère une clé, fait une requête pour récupérer l'id de la notification liée a cette clé.
3911 * Récupère l'instance de instruction_notification dont l'id a été récupéré et la renvoie.
3912 *
3913 * @param string $cleGen
3914 * @return instruction_notification
3915 */
3916 protected function getInstanceNotificationWithKey($key) {
3917 // TODO : refactoriser pour éviter d'avoir a réecrire cette méthode dans chaque classe
3918 // a laquelle la consultation anonyme des documents est associée
3919 $sql = sprintf(
3920 "SELECT
3921 instruction_notification
3922 FROM
3923 %1\$sinstruction_notification_document
3924 WHERE
3925 cle = '%2\$s'",
3926 DB_PREFIXE,
3927 $this->f->db->escapeSimple($key)
3928 );
3929 $res = $this->f->db->getOne($sql);
3930 $this->addToLog(__METHOD__.": db->getOne(\"".$sql."\");", VERBOSE_MODE);
3931 $this->f->isDatabaseError($res);
3932
3933 // Récupération de l'instance de notification
3934 $instNotif = $this->f->get_inst__om_dbform(array(
3935 "obj" => "instruction_notification",
3936 "idx" => $res,
3937 ));
3938 return $instNotif;
3939 }
3940
3941
3942 /**
3943 * Vérifie la validité des valeurs en mode CREATE & UPDATE.
3944 * (Surcharge)
3945 *
3946 * Les consultations pouvant être des consultations
3947 * de tiers ou de service selon le type de consultations
3948 * certain champs ne doivent pas être null.
3949 * Consultation tiers :
3950 * - categorie tiers consulte
3951 * - tiers consulte
3952 * - motif consultation
3953 * Consultation service :
3954 * - service
3955 * Cette surcharge permet de vérifier que selon le contexte
3956 * les valeurs voulues sont bien renseigné.
3957 *
3958 * @param array $val Tableau des valeurs brutes.
3959 * @param null &$dnu1 @deprecated Ne pas utiliser.
3960 * @param null $dnu2 @deprecated Ne pas utiliser.
3961 *
3962 * @return void
3963 */
3964 function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
3965 // Ajout des champs concerné à la liste des champs requis
3966 // pour que la vérification de présence des champs requis se fasse aussi
3967 // sur ces champs
3968 $maj = $this->getParameter("maj");
3969 $champsNonNull = array();
3970 // Action liées à l'ajout et la modification de consultation d'un service
3971 if ($maj == '0' || ($maj == '1' && ($this->getVal('service') != null && $this->getVal('service') != ''))) {
3972 $champsNonNull = array('service');
3973 } elseif ($maj == '41'|| ($maj == '1' && ($this->getVal('tiers_consulte') != null && $this->getVal('tiers_consulte') != ''))) {
3974 // Actions liées à l'ajout et la modification de consultation d'un tiers
3975 $champsNonNull = array('categorie_tiers_consulte', 'tiers_consulte', 'motif_consultation');
3976 }
3977 foreach($champsNonNull as $champs) {
3978 $this->required_field[] = $champs;
3979 }
3980 parent::verifier($val, $dnu1, $dnu2);
3981 }
3982
3983
3984 }// fin classe

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26