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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 8593 - (hide annotations)
Wed Feb 27 16:39:17 2019 UTC (5 years, 11 months ago) by softime
File size: 122018 byte(s)
* Merge de la branche d'intégration 4.10.0-develop dans le trunk

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26