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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7366 - (hide annotations)
Tue Aug 8 09:19:57 2017 UTC (7 years, 5 months ago) by softime
File size: 118691 byte(s)
* Merge de la branche d'intégration 4.4.0

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26