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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26