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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26