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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7996 - (hide annotations)
Fri Jul 20 17:12:33 2018 UTC (6 years, 6 months ago) by softime
File size: 118974 byte(s)
* Merge de la branche d'intégration 4.7.0 vers le trunk

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26