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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 8329 - (show annotations)
Wed Nov 14 11:20:57 2018 UTC (6 years, 2 months ago) by softime
File size: 119232 byte(s)
* Merge de la branche d'intégration 4.8.0-develop dans le trunk

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26