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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26