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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10207 - (hide annotations)
Tue Jun 29 13:39:42 2021 UTC (3 years, 7 months ago) by softime
File size: 124514 byte(s)
* Fusion de la branche d'intégration 4.15.0-develop dans le trunk + retour au développement 4.15.1

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26