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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26