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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 12654 - (hide annotations)
Mon Aug 1 16:58:31 2022 UTC (2 years, 5 months ago) by softime
File size: 167468 byte(s)
* Fusion de la branche d'intégration 5.12.0-develop dans le trunk

1 mbroquet 3730 <?php
2 softime 7996 /**
3     * DBFORM - 'consultation' - Surcharge gen.
4     *
5     * @package openads
6     * @version SVN : $Id: consultation.class.php 6046 2016-02-26 15:27:06Z fmichon $
7     */
8    
9 mbroquet 3730 require_once ("../gen/obj/consultation.class.php");
10    
11     class consultation extends consultation_gen {
12    
13     // Champs contenant les UID des fichiers
14     var $abstract_type = array(
15     "fichier" => "file",
16     "om_fichier_consultation" => "file",
17     );
18    
19     var $metadata = array(
20     "om_fichier_consultation" => array(
21     "dossier" => "getDossier",
22     "dossier_version" => "getDossierVersion",
23     "numDemandeAutor" => "getNumDemandeAutor",
24     "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
25     "typeInstruction" => "getTypeInstruction",
26     "statutAutorisation" => "getStatutAutorisation",
27     "typeAutorisation" => "getTypeAutorisation",
28     "dateEvenementDocument" => "getDateEvenementDocument",
29     "groupeInstruction" => 'getGroupeInstruction',
30     "title" => 'getTitle',
31 softime 6272 'concerneERP' => 'get_concerne_erp',
32 softime 10573
33     'type' => 'getDocumentType',
34     'dossier_autorisation_type_detaille' => 'getDossierAutorisationTypeDetaille',
35     'dossier_instruction_type' => 'getDossierInstructionTypeLibelle',
36     'region' => 'getDossierRegion',
37     'departement' => 'getDossierDepartement',
38     'commune' => 'getDossierCommune',
39     'annee' => 'getDossierAnnee',
40     'division' => 'getDossierDivision',
41     'collectivite' => 'getDossierServiceOrCollectivite'
42 mbroquet 3730 ),
43     "fichier" => array(
44     "filename" => "getFichierFilename",
45     "dossier" => "getDossier",
46     "dossier_version" => "getDossierVersion",
47     "numDemandeAutor" => "getNumDemandeAutor",
48     "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
49     "typeInstruction" => "getTypeInstruction",
50     "statutAutorisation" => "getStatutAutorisation",
51     "typeAutorisation" => "getTypeAutorisation",
52     "dateEvenementDocument" => "getDateEvenementDocument",
53     "groupeInstruction" => 'getGroupeInstruction',
54     "title" => 'getTitle',
55 softime 6272 'concerneERP' => 'get_concerne_erp',
56 softime 10573
57     'type' => 'getDocumentType',
58     'dossier_autorisation_type_detaille' => 'getDossierAutorisationTypeDetaille',
59     'dossier_instruction_type' => 'getDossierInstructionTypeLibelle',
60     'region' => 'getDossierRegion',
61     'departement' => 'getDossierDepartement',
62     'commune' => 'getDossierCommune',
63     'annee' => 'getDossierAnnee',
64     'division' => 'getDossierDivision',
65     'collectivite' => 'getDossierServiceOrCollectivite'
66 mbroquet 3730 ),
67     );
68    
69     /**
70     * Cette variable permet de stocker le résultat de la méthode
71     * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
72     * ces appels.
73     * @var string Code de la division du dossier en cours
74     */
75     var $_division_from_dossier = NULL;
76    
77     /**
78 fmichon 3892 * Instance de la classe dossier
79     *
80     * @var mixed
81     */
82     var $inst_dossier = null;
83    
84     /**
85 softime 11876 * Instance de la classe dossier
86     *
87     * @var mixed
88     */
89     protected $typeConsultation = null;
90    
91     /**
92     * Instance de la classe dossier
93     *
94     * @var mixed
95     */
96     protected $valElementConsulte = array();
97    
98     /**
99 mbroquet 3730 * Définition des actions disponibles sur la classe.
100     *
101     * @return void
102     */
103     function init_class_actions() {
104    
105     parent::init_class_actions();
106    
107 softime 6565 // ACTION - 000 - ajouter
108     // Modifie la condition d'affichage du bouton ajouter
109     $this->class_actions[0]["condition"] = array("can_user_access_dossier_contexte_ajout");
110    
111 mbroquet 3730 // ACTION - 001 - modifier
112     //
113 softime 6565 $this->class_actions[1]["condition"] = array("is_editable", "can_user_access_dossier_contexte_modification");
114 mbroquet 3730
115     // ACTION - 002 - supprimer
116     //
117 softime 6565 $this->class_actions[2]["condition"] = array("is_deletable", "can_user_access_dossier_contexte_modification");
118 mbroquet 3730
119     // ACTION - 040 - ajout_multiple
120 softime 6565 // Ajout de consultations multiples
121 mbroquet 3730 $this->class_actions[40] = array(
122     "identifier" => "ajout_multiple",
123     "view" => "view_ajout_multiple",
124     "method" => "ajouter_multiple",
125     "button" => "valider",
126     "permission_suffix" => "ajouter",
127 softime 6565 "condition" => array("is_multiaddable", "can_user_access_dossier_contexte_ajout"),
128 mbroquet 3730 );
129 softime 11876 // ACTION - 041 - ajouter_consultation_tiers
130     // Ajout de consultations de tiers
131     $this->class_actions[41] = array(
132     "identifier" => "ajouter_consultation_tiers",
133     "permission_suffix" => "ajouter_consultation_tiers",
134     "crud" => "create",
135     "method" => "ajouter"
136     );
137 mbroquet 3730 // ACTION - 050 - marquer_comme_lu
138     $this->class_actions[50] = array(
139     "identifier" => "marquer_comme_lu",
140     "portlet" => array(
141     "type" => "action-direct",
142     "libelle" => _("Marquer comme lu"),
143     "order" => 50,
144     "class" => "lu-16",
145     ),
146     "view" => "formulaire",
147     "method" => "marquer_comme_lu",
148     "permission_suffix" => "modifier_lu",
149 softime 6565 "condition" => array(
150     "is_markable",
151     "show_marquer_comme_lu_portlet_action",
152     "can_user_access_dossier_contexte_modification",
153     ),
154 mbroquet 3730 );
155 softime 10573 // ACTION - 051 - marquer_comme_non_lu
156     $this->class_actions[51] = array(
157     "identifier" => "marquer_comme_non_lu",
158     "portlet" => array(
159     "type" => "action-direct",
160     "libelle" => __("Marquer comme non lu"),
161     "order" => 50,
162     "class" => "nonlu-16",
163     ),
164     "view" => "formulaire",
165     "method" => "marquer_comme_non_lu",
166     "permission_suffix" => "modifier_lu",
167     "condition" => array(
168     "is_markable",
169     "show_marquer_comme_non_lu_portlet_action",
170     "can_user_access_dossier_contexte_modification",
171     ),
172     );
173 mbroquet 3730 // ACTION - 060 - finaliser
174     $this->class_actions[60] = array(
175     "identifier" => "finalise",
176     "portlet" => array(
177     "type" => "action-direct",
178     "libelle" => _("Finaliser le document"),
179     "order" => 60,
180     "class" => "finalise",
181     ),
182     "view" => "formulaire",
183     "method" => "finalize",
184     "permission_suffix" => "finaliser",
185 softime 6565 "condition" => array(
186     "show_consultation_finaliser_portlet_action",
187     "is_finalizable",
188     "can_user_access_dossier_contexte_modification",
189     ),
190 mbroquet 3730 );
191    
192     // ACTION - 070 - unfinaliser
193     $this->class_actions[70] = array(
194     "identifier" => "unfinalise",
195     "portlet" => array(
196     "type" => "action-direct",
197     "libelle" => _("Reprendre la redaction du document"),
198     "order" => 70,
199     "class" => "definalise",
200     ),
201     "view" => "formulaire",
202     "method" => "unfinalize",
203     "permission_suffix" => "definaliser",
204 softime 6565 "condition" => array(
205     "show_unfinalize_portlet_action",
206     "is_unfinalizable",
207     "can_user_access_dossier_contexte_modification",
208     ),
209 mbroquet 3730 );
210    
211     // ACTION - 080 - consulter_pdf
212     $this->class_actions[80] = array(
213     "identifier" => "consulter_pdf",
214     "portlet" => array(
215     "type" => "action-blank",
216     "libelle" => _("Editer la consultation PDF"),
217     "order" => 45,
218     "class" => "pdf-16",
219     ),
220     "view" => "view_consulter_pdf",
221 softime 6565 "permission_suffix" => "edition",
222 softime 10573 "condition" => array(
223     "can_user_access_dossier_contexte_modification",
224     "is_viewable",
225     ),
226 mbroquet 3730 );
227    
228 nmeucci 4319 // ACTION - 090 - Générer l'édition PDF d'une consultation multiple
229     //
230     $this->class_actions[90] = array(
231     "identifier" => "generate_pdf_consultation_multiple",
232     "view" => "generate_pdf_consultation_multiple",
233     "permission_suffix" => "ajouter",
234     );
235 mbroquet 3730
236     // ACTION - 100 - retour_consultation
237     // Lors de la saisie de retour d'avis par le profil suivi des dates
238     $this->class_actions[100] = array(
239     "identifier" => "retour_consultation",
240     "view" => "formulaire",
241     "method" => "modifier",
242     "button" => _("Modifier"),
243     "permission_suffix" => "modifier",
244 softime 6565 "condition" => array("is_suivi_retours_de_consultation, can_user_access_dossier_contexte_modification"),
245 mbroquet 3730
246     );
247    
248 fmichon 4237 $this->class_actions[110] = array(
249     "identifier" => "suivi_mise_a_jour_des_dates",
250     "view" => "view_suivi_mise_a_jour_des_dates",
251     "permission_suffix" => "suivi_mise_a_jour_des_dates",
252     );
253    
254     $this->class_actions[120] = array(
255     "identifier" => "suivi_retours_de_consultation",
256     "view" => "view_suivi_retours_de_consultation",
257     "permission_suffix" => "suivi_retours_de_consultation",
258     );
259 softime 6565
260     // ACTION - 130 - Afficher la consultation dans les éditions
261     $this->class_actions[130] = array(
262     "identifier" => "afficher_dans_edition",
263     "portlet" => array(
264     "type" => "action-direct",
265     "libelle" => _("Afficher dans les éditions"),
266     "order" => 80,
267     "class" => "watch-16"
268     ),
269     "method" => "manage_visibilite_consultation",
270     "permission_suffix" => "visibilite_dans_edition",
271 softime 7366 "condition" => array(
272     "is_not_visible",
273     "can_show_or_hide_in_edition"),
274 softime 6565 );
275    
276     // ACTION - 140 - Masquer la consultation dans les éditions
277     $this->class_actions[140] = array(
278     "identifier" => "masquer_dans_edition",
279     "portlet" => array(
280     "type" => "action-direct",
281     "libelle" => _("Masquer dans les éditions"),
282     "order" => 80,
283     "class" => "unwatch-16"
284     ),
285     "method" => "manage_visibilite_consultation",
286     "permission_suffix" => "visibilite_dans_edition",
287 softime 7366 "condition" => array(
288     "is_visible",
289     "can_show_or_hide_in_edition"),
290 softime 6565 );
291 softime 10573
292     // ACTION 400 - preview_edition
293     // /!\ ne pas changer le numéro d'action sinon la prévisualisation
294     // depuis l'onglet document ne sera plus dirigé vers la bonne action
295     $this->class_actions[400] = array(
296     "identifier" => "preview_edition",
297     "view" => "formulaire",
298     "permission_suffix" => "tab",
299     );
300 mbroquet 3730 }
301    
302     /**
303 softime 8989 * Clause select pour la requête de sélection des données de l'enregistrement.
304     *
305     * @return array
306     */
307     function get_var_sql_forminc__champs() {
308     return array(
309     "consultation",
310     "dossier.dossier",
311     "dossier_libelle",
312     "service",
313 softime 11876 "categorie_tiers_consulte",
314     "tiers_consulte",
315     "motif_consultation",
316     "commentaire",
317 softime 8989 "to_char(consultation.date_envoi ,'DD/MM/YYYY') as \"date_envoi\"",
318     "visible",
319     "to_char(consultation.date_reception ,'DD/MM/YYYY') as \"date_reception\"",
320     "to_char(consultation.date_limite ,'DD/MM/YYYY') as \"date_limite\"",
321     "to_char(consultation.date_retour ,'DD/MM/YYYY') as \"date_retour\"",
322     "avis_consultation",
323     "motivation",
324     "fichier",
325     "lu",
326     "code_barres",
327     "om_fichier_consultation",
328     "om_final_consultation",
329     "marque",
330     "om_fichier_consultation_dossier_final",
331     "fichier_dossier_final",
332 softime 10573 // Fieldset sépcifique au service Plat'AU
333     "texte_fondement_avis",
334     "texte_avis",
335     "texte_hypotheses",
336     "nom_auteur",
337     "prenom_auteur",
338     "qualite_auteur",
339     "'' as live_preview",
340 softime 8989 );
341     }
342    
343     /**
344     * Clause from pour la requête de sélection des données de l'enregistrement.
345     *
346     * @return string
347     */
348     function get_var_sql_forminc__tableSelect() {
349     return sprintf(
350     '%1$s%2$s
351     LEFT JOIN %1$sdossier
352     ON consultation.dossier = dossier.dossier',
353     DB_PREFIXE,
354     $this->table
355     );
356     }
357    
358     /**
359     *
360     * @return string
361     */
362     function get_var_sql_forminc__sql_service_by_collectivite_from_di() {
363     return "SELECT service.service, CONCAT(service.abrege, ' - ', service.libelle) FROM ".DB_PREFIXE."service LEFT JOIN ".DB_PREFIXE."om_collectivite ON service.om_collectivite = om_collectivite.om_collectivite WHERE ((service.om_validite_debut IS NULL AND (service.om_validite_fin IS NULL OR service.om_validite_fin > CURRENT_DATE)) OR (service.om_validite_debut <= CURRENT_DATE AND (service.om_validite_fin IS NULL OR service.om_validite_fin > CURRENT_DATE))) AND (om_collectivite.niveau = '2' OR service.om_collectivite = <collectivite_di>) ORDER BY service.abrege, service.libelle";
364     }
365    
366     /**
367     *
368     * @return string
369     */
370     function get_var_sql_forminc__sql_service_by_id() {
371     return "SELECT service.service, CONCAT(service.abrege, ' - ', service.libelle) FROM ".DB_PREFIXE."service WHERE service = '<idx>'";
372     }
373    
374     /**
375 fmichon 4237 * Permet de modifier le fil d'Ariane depuis l'objet pour un formulaire
376     * @param string $ent Fil d'Ariane récupéréré
377     * @return Fil d'Ariane
378     */
379     function getFormTitle($ent) {
380     //
381     if ($this->getParameter('maj') == 120) {
382     //
383     return _("suivi")." -> "._("demandes d'avis")." -> "._("retours de consultation");
384     }
385     //
386     if ($this->getParameter('maj') == 110) {
387     //
388     return _("suivi")." -> "._("demandes d'avis")." -> "._("mise a jour des dates");
389     }
390     //
391     if ($this->getParameter('maj') == 100) {
392     //
393     return _("suivi")." -> "._("demandes d'avis")." -> "._("retours de consultation")." -> ".$this->getVal($this->clePrimaire);
394     }
395     //
396     return $ent;
397     }
398    
399    
400     /**
401     * Ce script permet de gérer l'interface de saisie rapide des retours de
402     * consultation par la cellule suivi l'aide d'un code barre.
403     */
404     function view_suivi_retours_de_consultation() {
405     //
406     $this->checkAccessibility();
407     /**
408     * Validation du formulaire
409     */
410     // Si le formulaire a été validé
411     if ($this->f->get_submitted_post_value('code_barres') !== null) {
412     // Si la valeur transmise est correcte
413     if ($this->f->get_submitted_post_value('code_barres') != ""
414     && is_numeric($this->f->get_submitted_post_value('code_barres'))) {
415     // Vérification de l'existence de la consultation
416     $sql = "SELECT consultation FROM ".DB_PREFIXE."consultation ";
417     $sql .= " WHERE code_barres='".$this->f->db->escapesimple($this->f->get_submitted_post_value('code_barres'))."'";
418     $res = $this->f->db->query($sql);
419     // Logger
420     $this->f->addToLog(
421     __METHOD__."(): db->query(\"".$sql."\")",
422     VERBOSE_MODE
423     );
424     // Gestion des erreurs de base de données
425     $this->f->isDatabaseError($res);
426     // En fonction du nombre de consultations correspondantes
427     // on affiche un message d"erreur ou on redirige vers le formulaire de
428     // saisie du retour
429     if ($res->numrows()==0) {
430     // Si
431     $message_class = "error";
432     $message = _("Ce code barres de consultation n'existe pas.");
433     } elseif ($res->numrows() > 1) {
434     // Si
435     $message_class = "error";
436     $message = _("Plusieurs consultations avec ce code barres.");
437     } else {
438     $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
439 softime 7996 header("Location: ".OM_ROUTE_FORM."&obj=consultation&action=100&retour=suivi_retours_de_consultation&idx=".$row['consultation']);
440 fmichon 4237 }
441     } elseif ($this->f->get_submitted_post_value('code_barres')!==null && $this->f->get_submitted_post_value('code_barres') == "") {
442     // Si aucune valeur n'a été saisie dans le champs consultation
443     $message_class = "error";
444     $message = _("Veuiller saisir un code barres de consultation.");
445     } else {
446     // Si
447     $message_class = "error";
448     $message = _("Cette consultation n'existe pas.");
449     }
450     }
451    
452     /**
453     * Affichage des messages et du formulaire
454     */
455     // Affichage du message de validation ou d'erreur
456     if (isset($message) && isset($message_class) && $message != "") {
457     $this->f->displayMessage($message_class, $message);
458     }
459     //
460     $datasubmit = $this->getDataSubmit();
461     // Ouverture du formulaire
462     echo "\t<form";
463     echo " method=\"post\"";
464     echo " id=\"suivi_retours_de_consultation_form\"";
465     echo " action=\"".$datasubmit."\"";
466     echo ">\n";
467     // Paramétrage des champs du formulaire
468     $champs = array("code_barres");
469     // Création d'un nouvel objet de type formulaire
470 softime 7996 $form = $this->f->get_inst__om_formulaire(array(
471     "validation" => 0,
472     "maj" => 0,
473     "champs" => $champs,
474     ));
475 fmichon 4237 // Paramétrage des champs du formulaire
476     $form->setLib("code_barres", _("No de code barres de consultation"));
477     $form->setType("code_barres", "text");
478     $form->setTaille("code_barres", 25);
479     $form->setMax("code_barres", 25);
480     // Affichage du formulaire
481     $form->entete();
482     $form->afficher($champs, 0, false, false);
483     $form->enpied();
484     // Affichage du bouton
485     echo "\t<div class=\"formControls\">\n";
486     $this->f->layout->display_form_button(array("value" => _("Valider")));
487     echo "\t</div>\n";
488     // Fermeture du formulaire
489     echo "\t</form>\n";
490     }
491    
492     /**
493     * Ce script permet de mettre à jour les dates de suivi du traitement
494     * des consultations.
495     */
496     function view_suivi_mise_a_jour_des_dates() {
497     //
498     $this->checkAccessibility();
499    
500     // Récupération des valeur passées en POST ou GET
501     $date = "";
502     if($this->f->get_submitted_post_value('date') !== null) {
503     $date = $this->f->get_submitted_post_value('date');
504     } elseif($this->f->get_submitted_get_value('date') !== null) {
505     $date = $this->f->get_submitted_get_value('date');
506     }
507     $code_barres = "";
508     if($this->f->get_submitted_post_value('code_barres') !== null) {
509     $code_barres = $this->f->get_submitted_post_value('code_barres');
510     } elseif($this->f->get_submitted_get_value('code_barres')!==null) {
511     $code_barres = $this->f->get_submitted_get_value('code_barres');
512     }
513    
514     // Booléen permettant de définir si un enregistrement à eu lieu
515     $correct = false;
516     // Booléen permettant de définir si les dates peuvent êtres enregistrées
517     $date_error = false;
518    
519     // Si le formulaire a été validé
520     if ($this->f->get_submitted_post_value('validation') !== null) {
521     //Tous les champs doivent obligatoirement être remplis
522     if ( !empty($date) && !empty($code_barres) ){
523    
524     //Vérification de l'existence de la consultation
525     $sql = "SELECT consultation, type_consultation
526     FROM ".DB_PREFIXE."consultation
527     LEFT JOIN ".DB_PREFIXE."service
528     ON service.service = consultation.service
529     WHERE code_barres = '".$this->f->db->escapesimple($code_barres)."'";
530     $res = $this->f->db->query($sql);
531     $this->f->addToLog("app/demandes_avis_mise_a_jour_des_dates.php : db->query(\"".$sql."\")", VERBOSE_MODE);
532     $this->f->isDatabaseError($res);
533    
534     //Si le code barres est correct
535     if($res->numrows() == 1) {
536    
537     //Un retour de demande d'avis ne peut être saisie que si le type de
538     //consultation est "avec_avis_attendu"
539     $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
540     if ( strcasecmp($row['type_consultation'], "avec_avis_attendu") === 0 ){
541    
542     //On met à jour la date après l'écran de vérification
543     if($this->f->get_submitted_post_value("is_valid") != null and $this->f->get_submitted_post_value("is_valid") == "true") {
544 softime 7996 $consultation = $this->f->get_inst__om_dbform(array(
545     "obj" => "consultation",
546     "idx" => $row['consultation'],
547     ));
548 fmichon 4237 $consultation->setParameter("maj", 1);
549     $valF = array();
550     foreach($consultation->champs as $id => $champ) {
551     $valF[$champ] = $consultation->val[$id];
552     }
553    
554     $valF['date_reception']=$date;
555    
556 softime 8989 $consultation->modifier($valF);
557 fmichon 4237 // Vérification de la finalisation du document
558     // correspondant au code barres
559     if($consultation->valF["om_final_consultation"] === true) {
560     $message_class = "valid";
561     $message = _("Saisie enregistree");
562     $code_barres = "";
563     } else {
564     //
565     $message_class = "error";
566     $message = sprintf(_("Le document correspondant au
567     code barres %s n'est pas finalise,
568     la date ne sera pas mise a jour."),
569     $code_barres);
570     }
571    
572     }
573     //Sinon on récupère les infos du dossier pour les afficher
574     else {
575     // Récupération des infos du dossier
576     $sqlInfo = "SELECT dossier_libelle, libelle,
577     date_reception,
578     TO_CHAR(date_envoi ,'DD/MM/YYYY') as date_envoi
579     FROM ".DB_PREFIXE."consultation
580     LEFT JOIN ".DB_PREFIXE."dossier
581     ON dossier.dossier = consultation.dossier
582     LEFT JOIN ".DB_PREFIXE."service
583     ON service.service = consultation.service
584     WHERE code_barres='".$code_barres."'";
585     $resInfo = $this->f->db->query($sqlInfo);
586     $this->f->isDatabaseError($resInfo);
587     $infos = $resInfo->fetchRow(DB_FETCHMODE_ASSOC);
588     }
589     }
590     //C'est un autre type de consultation
591     else{
592     $message_class = "error";
593     $message = _("Cette consultation n'a pas d'avis attendu.");
594     }
595     }
596     else {
597     $message_class = "error";
598     $message = _("Le numero saisi ne correspond a aucun code barres de consultation.");
599     }
600     } else {
601     $message_class = "error";
602     $message = _("Tous les champs doivent etre remplis.");
603     }
604     }
605    
606     /**
607     * Affichage des messages et du formulaire
608     */
609     // Affichage du message de validation ou d'erreur
610     if (isset($message) && isset($message_class) && $message != "") {
611     $this->f->displayMessage($message_class, $message);
612     }
613     //
614     $datasubmit = $this->getDataSubmit();
615     // Ouverture du formulaire
616     printf("\t<form");
617     printf(" method=\"post\"");
618     printf(" id=\"demandes_avis_mise_a_jour_des_dates_form\"");
619     printf(" action=\"".$datasubmit."\"");
620     printf(">\n");
621     // Paramétrage des champs du formulaire
622     $champs = array("date", "code_barres");
623     if (isset($infos)) {
624     array_push(
625     $champs,
626     "dossier_libelle",
627     "service",
628     "date_envoi",
629     "date_reception",
630     "is_valid"
631     );
632     }
633     // Création d'un nouvel objet de type formulaire
634 softime 7996 $form = $this->f->get_inst__om_formulaire(array(
635     "validation" => 0,
636     "maj" => 0,
637     "champs" => $champs,
638     ));
639 fmichon 4237 // Paramétrage des champs du formulaire
640     // Parametrage du champ date
641     $form->setLib("date", _("Date")."* :");
642     if (isset($infos)) {
643     $form->setType("date", "hiddenstaticdate");
644     } else {
645     $form->setType("date", "date");
646     }
647     $form->setVal("date", $date);
648     $form->setTaille("date", 10);
649     $form->setMax("date", 10);
650    
651     // Parametrage du champ code_barres
652     $form->setLib("code_barres", _("Code barres de consultation")."* :");
653     if (isset($infos)) {
654     $form->setType("code_barres", "hiddenstatic");
655     } else {
656     $form->setType("code_barres", "text");
657     }
658     $form->setVal("code_barres", $code_barres);
659     $form->setTaille("code_barres", 20);
660     $form->setMax("code_barres", 20);
661    
662     // Ajout des infos du dossier correspondantes à la consultation séléctionnée
663     if (isset($infos)) {
664    
665     // Tous les champs sont défini par defaut à static
666     foreach ($infos as $key => $value) {
667     $form->setType($key, "static");
668     $form->setVal($key, $value);
669     }
670    
671     // Les champs dont on vient de définir la valeur sont en gras
672     $form->setBloc("date_reception", 'DF', "", 'bold');
673    
674     // Parametrage du champ dossier
675     $form->setLib("dossier_libelle", _("dossier_libelle")." :");
676     $form->setType("dossier_libelle", "static");
677     $form->setVal("dossier_libelle", $infos['dossier_libelle']);
678    
679     // Parametrage du champ service
680     $form->setLib("service", _("service")." :");
681     $form->setType("service", "static");
682     $form->setVal("service", $infos['libelle']);
683    
684     // Parametrage des libellés d'envoi avec RAR
685     $form->setLib("date_envoi", _("Envoi demande d'avis")." :");
686     $form->setLib("date_reception", _("Retour demande d'avis")." :");
687     $form->setVal("date_reception", $date);
688    
689     // Ajout d'un champ hidden permettant de savoir que le formulaire précédant est celui de vérification
690     $form->setLib("is_valid", _("Valide")." :");
691     $form->setType("is_valid", "hidden");
692     $form->setVal("is_valid", 'true');
693    
694     $form->setFieldset('dossier_libelle', 'D', _('Synthese'));
695     $form->setFieldset('is_valid', 'F');
696     }
697    
698    
699     // Création du fieldset regroupant les champs permettant la mise à jour des date
700     $form->setFieldset('date', 'D', _('Mise a jour'));
701     $form->setFieldset('code_barres', 'F');
702     // Affichage du formulaire
703     $form->entete();
704     $form->afficher($champs, 0, false, false);
705     $form->enpied();
706     // Affichage du bouton
707     printf("\t<div class=\"formControls\">\n");
708     //
709     if (!$date_error) {
710     $this->f->layout->display_form_button(
711     array("value" => _("Valider"), "name" => "validation")
712     );
713     }
714     // Si pas sur l'écran de validation
715     if (isset($infos)) {
716     printf(
717     '<a class="retour" href="%s&amp;date=%s&amp;code_barres=%s">Retour</a>',
718     $datasubmit,
719     $date,
720     $code_barres
721     );
722     }
723     printf("\t</div>\n");
724     // Fermeture du formulaire
725     printf("\t</form>\n");
726    
727     }
728    
729 mbroquet 3730
730     /**
731     * Défini si l'utilisateur est de la cellule suivi.
732     *
733     * @return boolean true si correspond false sinon
734     */
735     function is_suivi_retours_de_consultation() {
736    
737     if($this->f->can_bypass("consultation", "modifier")){
738     return true;
739     }
740    
741 fmichon 4237 return $this->f->isAccredited("consultation_suivi_retours_de_consultation");
742 mbroquet 3730 }
743    
744     /**
745     * Si le champ lu est à true l'action "Marquer comme lu" n'est pas affichée
746     *
747     * @return boolean true sinon lu false sinon
748     */
749     function show_marquer_comme_lu_portlet_action() {
750     if (isset($this->val[array_search("lu", $this->champs)])
751     && $this->val[array_search("lu", $this->champs)]== "t") {
752     return false;
753     }
754     return true;
755     }
756    
757     /**
758 softime 10573 * Si le champ lu est à false l'action "Marquer comme non lu" n'est pas affichée
759     *
760     * @return boolean true sinon lu false sinon
761     */
762     function show_marquer_comme_non_lu_portlet_action() {
763     if (isset($this->val[array_search("lu", $this->champs)])
764     && $this->val[array_search("lu", $this->champs)]== "f") {
765     return false;
766     }
767     return true;
768     }
769    
770     /**
771 mbroquet 3730 * Si le document est finalisé l'action "finaliser" n'est pas affichée
772     *
773     * @return boolean true sinon lu false sinon
774     */
775     function show_consultation_finaliser_portlet_action() {
776     if ($this->is_document_finalized("om_final_consultation")) {
777     return false;
778     }
779     return true;
780     }
781    
782     /**
783     * Retourne is_document_finalized("om_final_consultation")
784     *
785     * @return boolean true si finalisé false sinon
786     */
787     function show_unfinalize_portlet_action() {
788     return $this->is_document_finalized("om_final_consultation");
789     }
790    
791     /**
792     * Permet de savoir si le document passé en paramètre est finalisé
793     *
794     * @param string $field flag finalisé
795     *
796     * @return boolean true si finalisé false sinon
797     */
798     function is_document_finalized($field) {
799     if($this->getVal($field) == 't') {
800     return true;
801     }
802     return false;
803     }
804    
805    
806     /**
807     *
808     */
809 softime 6565 var $inst_service = null;
810 mbroquet 3730
811 fmichon 4708 /**
812     *
813     */
814 softime 11876 var $inst_tiers_consulte = null;
815    
816     /**
817     *
818     */
819 fmichon 4708 function get_inst_service($service = null) {
820     //
821     if ($service !== null) {
822 softime 7996 return $this->f->get_inst__om_dbform(array(
823     "obj" => "service",
824     "idx" => $service,
825     ));
826 fmichon 4708 }
827     //
828 nhaye 5254 if (isset($this->inst_service) === false or
829     $this->inst_service === null) {
830 softime 7996 $this->inst_service = $this->f->get_inst__om_dbform(array(
831     "obj" => "service",
832     "idx" => $this->getVal('service'),
833     ));
834 fmichon 4708 }
835     return $this->inst_service;
836     }
837    
838     /**
839 softime 11876 *
840     */
841     protected function get_instance_objet_liee($cible, $idCible = null) {
842     // Récupère l'instance de l'élement cible
843     if ($idCible !== null) {
844     return $this->f->get_inst__om_dbform(array(
845     "obj" => $cible,
846     "idx" => $idCible
847     ));
848     }
849     //
850     $nomVarInstance = "inst_".$cible;
851     if (isset($this->$nomVarInstance) === false or
852     $this->$nomVarInstance === null) {
853     $this->$nomVarInstance = $this->f->get_inst__om_dbform(array(
854     "obj" => $cible,
855     "idx" => $this->getVal($cible)
856     ));
857     }
858    
859     return $this->$nomVarInstance;
860     }
861    
862     /**
863 mbroquet 3730 * TREATMENT - marquer_comme_lu.
864     *
865     * Cette methode permet de passer la consultation en "lu"
866     *
867     * @return boolean true si maj effectué false sinon
868     */
869     function marquer_comme_lu() {
870     // Cette méthode permet d'exécuter une routine en début des méthodes
871     // dites de TREATMENT.
872     $this->begin_treatment(__METHOD__);
873    
874     if($this->getVal("lu") == 'f') {
875     $this->correct = true;
876 softime 9245 $valF = array();
877     $valF["lu"] = true;
878    
879 mbroquet 3730 $res = $this->f->db->autoExecute(
880 softime 9245 DB_PREFIXE.$this->table,
881     $valF,
882     DB_AUTOQUERY_UPDATE,
883     $this->clePrimaire."=".$this->getVal($this->clePrimaire)
884     );
885 mbroquet 3730 if ($this->f->isDatabaseError($res, true)) {
886     // Appel de la methode de recuperation des erreurs
887     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
888     $this->correct = false;
889     // Termine le traitement
890     return $this->end_treatment(__METHOD__, false);
891     } else {
892 softime 11876 $this->addToMessage(__("La consultation a été marquée comme lu."));
893 mbroquet 3730 return $this->end_treatment(__METHOD__, true);
894     }
895    
896     } else {
897 softime 11876 $this->addToMessage(__("La consultation est déjà marquée comme lu."));
898 mbroquet 3730 }
899    
900     // Termine le traitement
901     return $this->end_treatment(__METHOD__, false);
902     }
903    
904 softime 10573 /**
905     * TREATMENT - marquer_comme_non_lu.
906     *
907     * Cette methode permet de passer la message en "non lu"
908     *
909     * @return boolean true si maj effectué false sinon
910     */
911     public function marquer_comme_non_lu() {
912     // Cette méthode permet d'exécuter une routine en début des méthodes
913     // dites de TREATMENT.
914     $this->begin_treatment(__METHOD__);
915    
916     if($this->getVal("lu") == 't') {
917     $this->correct = true;
918     $valF = array();
919     $valF["lu"] = false;
920    
921     $res = $this->f->db->autoExecute(
922     DB_PREFIXE.$this->table,
923     $valF,
924     DB_AUTOQUERY_UPDATE,
925     $this->clePrimaire."=".$this->getVal($this->clePrimaire)
926     );
927     if ($this->f->isDatabaseError($res, true)) {
928     // Appel de la methode de recuperation des erreurs
929     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
930     $this->correct = false;
931     // Termine le traitement
932     return $this->end_treatment(__METHOD__, false);
933     } else {
934 softime 11876 $this->addToMessage(__("La consultation a été marquée comme non lu."));
935 softime 10573 return $this->end_treatment(__METHOD__, true);
936     }
937    
938     } else {
939 softime 11876 $this->addToMessage(__("La consultation est déjà marquée comme non lu."));
940 softime 10573 }
941    
942     // Termine le traitement
943     return $this->end_treatment(__METHOD__, false);
944     }
945    
946 mbroquet 3730 // }}}
947    
948     /**
949     * TREATMENT - ajouter_multiple.
950     *
951     * Cette methode permet d'ajouter plusieurs consultations.
952     *
953     * @return boolean true si ajouts effectués false sinon
954     */
955     function ajouter_multiple() {
956     // Cette méthode permet d'exécuter une routine en début des méthodes
957     // dites de TREATMENT.
958     $this->begin_treatment(__METHOD__);
959    
960     // Identifiant de l'objet metier a copier
961     ($this->f->get_submitted_get_value('idxformulaire') !== null ? $idx = $this->f->get_submitted_get_value('idxformulaire') : $idx = "");
962     // Nom de l'objet metier
963     ($this->f->get_submitted_get_value('obj') !== null ? $obj = $this->f->get_submitted_get_value('obj') : $obj = "");
964     //formulaire retour
965     ($this->f->get_submitted_get_value('ret') !== null ? $retourformulaire = $this->f->get_submitted_get_value('ret') : $retourformulaire = "");
966     ($this->f->get_submitted_get_value('date_envoi') !== null ? $date_envoi = $this->f->get_submitted_get_value('date_envoi') : $date_envoi = "");
967     /*Récupération des données et formatage.*/
968     $donnees_temp = explode(';', $this->f->get_submitted_get_value('data'));
969     for ( $i = 1 ; $i < count($donnees_temp) ; $i++ )
970     $donnees[] = explode('_', $donnees_temp[$i]);
971     /* Nombre de consultations papier à générer */
972     $nbConsPap = 0;
973    
974     /* Ajout des données en base de données
975     * 0 : l'ID du service
976     * 1 : consultation papier {0,1}
977     * */
978     if ( isset($donnees) && count($donnees) > 0 ) {
979    
980     foreach ($donnees as $value) {
981    
982     $sql = "SELECT delai, id, delai_type
983     FROM ".DB_PREFIXE."service
984     LEFT JOIN ".DB_PREFIXE."om_etat
985     ON service.edition = om_etat.om_etat
986     WHERE service = $value[0]";
987     $res = $this->f->db->query($sql);
988     // Si la récupération de la description de l'avis échoue
989     if ($this->f->isDatabaseError($res, true)) {
990     // Appel de la methode de recuperation des erreurs
991     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
992     $this->correct = false;
993     // Termine le traitement
994     $this->end_treatment(__METHOD__, false);
995     }
996     $row=& $res->fetchRow();
997     $delai = $row[0];
998     $type_edition = $row[1];
999     $delai_type = $row[2];
1000    
1001     /*Calcul du delai de retour*/
1002     $date_envoi_temp = $this->datePHP($date_envoi);
1003     $delai = $this->dateDB($this->f->mois_date($date_envoi_temp, $delai, "+", $delai_type));
1004    
1005 softime 11876 /*Les données à ajouter*/
1006     // Initialisation de tous les champs a null
1007     foreach ($this->champs as $champs) {
1008     $arrayVal[$champs] = null;
1009     }
1010     // Set les valeurs des champs
1011     $arrayVal = array_replace($arrayVal, array(
1012 mbroquet 3730 'consultation' => "]",
1013     'dossier' => $idx,
1014     'date_envoi' => $date_envoi,
1015     'date_limite' => $delai,
1016     'service' => $value[0],
1017     'motivation' => "",
1018 nmeucci 3923 'om_final_consultation' => false,
1019     'om_fichier_consultation' => '',
1020 softime 8329 'om_fichier_consultation_dossier_final' => false,
1021     'fichier_dossier_final' => false,
1022 nmeucci 3985 'marque' => false,
1023 softime 10573 'visible' => true,
1024 softime 11876 ));
1025 softime 8989 $res_ajout = $this->ajouter($arrayVal);
1026 mbroquet 3730 if($res_ajout != true) {
1027     // Termine le traitement
1028     $this->end_treatment(__METHOD__, false);
1029     }
1030    
1031     /*Comptage du nombre de consultations papier demandées et récupération des ids des PDFs à éditer*/
1032     if ($value[1]==1){
1033     $idxConsultations[] = $this->valF['consultation'];
1034     $objConsultations[] = $type_edition;
1035     $nbConsPap++;
1036     }
1037     }
1038 nmeucci 4319
1039 mbroquet 3730 /*Génération du PDF*/
1040 nmeucci 4319 if (isset($idxConsultations) && count($idxConsultations) > 0 ){
1041    
1042     // Stockage de l'identifiant de chaque consultation dont on veut éditer la
1043     // version papier, séparés par un point-virgule
1044     $textIdsConsultations = "";
1045 mbroquet 3730 foreach ($idxConsultations as $value) {
1046 nmeucci 4319 if ($textIdsConsultations != "") {
1047     $textIdsConsultations .= ";";
1048     }
1049     $textIdsConsultations .= $value;
1050 mbroquet 3730 }
1051 nmeucci 4319 // Stockage de l'objet de chaque consultation dont on veut éditer la
1052     // version papier, séparés par un point-virgule
1053     $textObjConsultations = "";
1054 mbroquet 3730 foreach ($objConsultations as $value) {
1055 nmeucci 4319 if ($textObjConsultations != "") {
1056     $textObjConsultations .= ";";
1057     }
1058     $textObjConsultations .= $value;
1059 mbroquet 3730 }
1060 nmeucci 4319
1061     // Ouverture du PDF dans une nouvelle fenêtre
1062     printf("
1063 mbroquet 3730 <script language='javascript' type='text/javascript'>
1064 nmeucci 4319 window.open('%s','_blank')
1065 mbroquet 3730 </script>
1066 nmeucci 4319 ",
1067 softime 11057 OM_ROUTE_FORM."&obj=consultation&action=90&idx=0&dossier_instruction=".$this->getVal('dossier')."&textobj=".$textObjConsultations."&"."textids=".$textIdsConsultations
1068 nmeucci 4319 );
1069 mbroquet 3730 }
1070 softime 7996 $return_url = OM_ROUTE_SOUSTAB;
1071     $return_url .= "&obj=consultation";
1072 mbroquet 3730 $return_url .= "&retourformulaire=".$this->getParameter("retourformulaire");
1073     $return_url .= "&idxformulaire=".$this->getParameter("idxformulaire");
1074     $return_url .= "&premier=".$this->getParameter("premiersf");
1075     $return_url .= "&tricol=".$this->getParameter("tricolsf");
1076    
1077     /*Affichage du message d'information*/
1078     $this->f->displayMessage("valid", count($donnees)._(' service(s) selectionne(s) dont ').$nbConsPap._(' consultation(s) papier.'));
1079    
1080    
1081     // Termine le traitement
1082     return $this->end_treatment(__METHOD__, true);
1083     }
1084     }
1085    
1086    
1087     /**
1088     * VIEW - view_ajout_multiple.
1089     *
1090     * Formulaire specifique
1091     *
1092     * @return void
1093     */
1094     function view_ajout_multiple() {
1095    
1096     if (count($this->f->get_submitted_get_value()) > 0
1097     && $this->f->get_submitted_get_value('data') !== null
1098     && $this->f->get_submitted_get_value('data') != "" ) {
1099     $this->f->disableLog();
1100     $this->ajouter_multiple();
1101    
1102     } else {
1103    
1104     // Vérification de l'accessibilité sur l'élément
1105     $this->checkAccessibility();
1106     //
1107     $datasubmit = $this->getDataSubmitSousForm();
1108 softime 7996 $return_url = OM_ROUTE_SOUSTAB;
1109     $return_url .= "&obj=consultation";
1110 mbroquet 3730 $return_url .= "&retourformulaire=".$this->getParameter("retourformulaire");
1111     $return_url .= "&idxformulaire=".$this->getParameter("idxformulaire");
1112     $return_url .= "&premier=".$this->getParameter("premiersf");
1113     $return_url .= "&tricol=".$this->getParameter("tricolsf");
1114     // Légende du fieldset
1115     $title = _("Objet");
1116     /*Requête qui récupère les services qui sont dans des thématiques*/
1117     $sql =
1118     "SELECT
1119     ser_cat.service_categorie,
1120     ser_cat.libelle AS them_lib,
1121     ser.service,
1122     CONCAT(ser.abrege, ' - ', ser.libelle) AS ser_lib,
1123     ser.consultation_papier
1124     FROM
1125     ".DB_PREFIXE."lien_service_service_categorie lie,
1126     ".DB_PREFIXE."service_categorie ser_cat,
1127     ".DB_PREFIXE."service ser
1128     LEFT JOIN ".DB_PREFIXE."om_collectivite
1129     ON ser.om_collectivite = om_collectivite.om_collectivite
1130     WHERE
1131     ser_cat.service_categorie = lie.service_categorie AND
1132     ser.service = lie.service AND
1133     (
1134     (ser.om_validite_debut IS NULL
1135     AND (ser.om_validite_fin IS NULL
1136     OR ser.om_validite_fin > CURRENT_DATE))
1137     OR
1138     (ser.om_validite_debut <= CURRENT_DATE
1139     AND (ser.om_validite_fin IS NULL
1140     OR ser.om_validite_fin > CURRENT_DATE))
1141     )";
1142    
1143     // Si c'est un sous-formulaire de dossier d'instruction ou une de ses surcharges
1144     // mes encours, mes clôtures...
1145     $is_in_context_of_foreign_key = $this->is_in_context_of_foreign_key("dossier", $this->getParameter('retourformulaire'));
1146     if ($is_in_context_of_foreign_key == true) {
1147    
1148     // on recupère les services des multicollectivités et de celle
1149     // du DI
1150 softime 7996 $di = $this->f->get_inst__om_dbform(array(
1151     "obj" => "dossier_instruction",
1152     "idx" => $this->getParameter('idxformulaire'),
1153     ));
1154 mbroquet 3730
1155     //
1156     $sql .= sprintf(" AND (om_collectivite.niveau = '2' OR ser.om_collectivite = %s) ", $di->getVal('om_collectivite'));
1157     }
1158     //
1159     $sql .= " ORDER BY them_lib, ser.abrege, ser.libelle";
1160    
1161     $res = $this->f->db->query($sql);
1162     $this->f->addToLog(
1163     "app/consultation_multiple.php: db->query(\"".$sql."\")", VERBOSE_MODE
1164     );
1165     $this->f->isDatabaseError($res);
1166    
1167     $temp_ser_cat = 0;
1168     $liste_gauche = "";
1169    
1170     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1171     $name = $row['service_categorie'].'_'.
1172     $row['service'].'_'.
1173     (($row['consultation_papier'] == '' || $row['consultation_papier'] == 'f' ) ? '0' : '1' ).'_';
1174     // On change de thématique, donc rajoute le nom de la thématique
1175     if ( $temp_ser_cat != $row['service_categorie'] ){
1176    
1177     $temp_ser_cat = $row['service_categorie'];
1178     $liste_gauche .= '
1179     <div id="them_'.$row['service_categorie'].'" class="liste_gauche_them" >'.
1180     $row['them_lib'].
1181     '</div>
1182     <div
1183     class="liste_gauche_service t'.$name.'"
1184     id="t'.$name.'" >
1185     '.$row['ser_lib'].'
1186     <input class="t'.$name.'" type="checkbox" '.(($row['consultation_papier'] == '' || $row['consultation_papier'] == 'f' ) ? '' : 'checked="checked"' ).'/>
1187     </div>
1188     ';
1189     }
1190    
1191     /*On est dans la même thématique*/
1192     else {
1193    
1194     $liste_gauche .= '
1195     <div
1196     class="liste_gauche_service t'.$name.'"
1197     id="t'.$name.'" >
1198     '.$row['ser_lib'].'
1199     <input class="t'.$name.'" type="checkbox" '.(($row['consultation_papier'] == '' || $row['consultation_papier'] == 'f' ) ? '' : 'checked="checked"' ).'/>
1200     </div>
1201     ';
1202     }
1203    
1204     }
1205    
1206     /*Requête qui récupère les services qui ne sont pas dans une thématique*/
1207     $sql =
1208     "SELECT service.service,
1209     CONCAT(service.abrege, ' - ', service.libelle) AS ser_lib,
1210     service.consultation_papier
1211     FROM ".DB_PREFIXE."service
1212     LEFT JOIN ".DB_PREFIXE."om_collectivite
1213     ON service.om_collectivite = om_collectivite.om_collectivite
1214     WHERE service NOT IN
1215     (
1216     SELECT service
1217     FROM ".DB_PREFIXE."lien_service_service_categorie
1218     )
1219     AND
1220     (
1221     om_validite_fin <= CURRENT_DATE OR
1222     om_validite_fin IS NULL
1223     )
1224     ";
1225    
1226     // Si c'est un sous-formulaire de dossier d'instruction ou une de ses surcharges
1227     // mes encours, mes clôtures...
1228     $is_in_context_of_foreign_key = $this->is_in_context_of_foreign_key("dossier", $this->getParameter('retourformulaire'));
1229     if ($is_in_context_of_foreign_key == true) {
1230    
1231     // on recupère les services des multicollectivités et de celle
1232     // du DI
1233 softime 7996 $di = $this->f->get_inst__om_dbform(array(
1234     "obj" => "dossier_instruction",
1235     "idx" => $this->getParameter('idxformulaire'),
1236     ));
1237 mbroquet 3730
1238     //
1239     $sql .= sprintf(" AND (om_collectivite.niveau = '2' OR service.om_collectivite = %s) ", $di->getVal('om_collectivite'));
1240     }
1241    
1242     // Tri des services qui ne sont pas dans une thématique par ordre alphabétique
1243     $sql .= " ORDER BY service.abrege, service.libelle";
1244    
1245    
1246     $res = $this->f->db->query($sql);
1247     $this->f->isDatabaseError($res);
1248    
1249     if ($res->numrows() > 0) {
1250     $liste_gauche .= '
1251     <div id="them_0" class="liste_gauche_them">Autres</div>';
1252     }
1253    
1254     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1255    
1256     /*Ajout de tous les services qui n'ont pas de thématique*/
1257     $name = '0_'.
1258     $row['service'].'_'.
1259     (($row['consultation_papier'] == '' || $row['consultation_papier'] == 'f' ) ? '0' : '1' ).'_';
1260     $liste_gauche .= '
1261     <div
1262     class="liste_gauche_service t'.$name.'"
1263     id="t'.$name.'" >
1264     '.$row['ser_lib'].'&nbsp;
1265     <input class="t'.$name.'" type="checkbox" '.(($row['consultation_papier'] == '' || $row['consultation_papier'] == 'f' ) ? '' : 'checked="checked"' ).'/>
1266     </div>
1267     ';
1268     }
1269    
1270     /*Affichage du formulaire*/
1271     echo "\n<!-- ########## START DBFORM ########## -->\n";
1272     echo "<form";
1273     echo " method=\"post\"";
1274     echo " name=\"f2\"";
1275     echo " action=\"\"";
1276     echo " id=\"form_val\"";
1277     //echo " onsubmit=\"ajaxIt('consultation', '');return false;\"";
1278    
1279     //echo " onsubmit=\"affichersform('".$this->getParameter("objsf")."', '".$datasubmit."', this);\"";
1280     echo ">\n";
1281     echo '<div class="formEntete ui-corner-all">';
1282     echo "<div>";
1283     echo '<div class="bloc">';
1284     echo "<fieldset class='cadre ui-corner-all ui-widget-content'>\n";
1285     echo "\t<legend class='ui-corner-all ui-widget-content ui-state-active'>".
1286     _("Consultation par thematique ")."</legend>";
1287     echo "<div class='fieldsetContent' style='width:100%'>";
1288     echo '<div class="field-ser-them field-type-hiddenstatic">';
1289     echo '<div class="form-libelle">';
1290     echo '<label class="libelle-dossier" for="dossier">';
1291     echo _('dossier');
1292     echo '<span class="not-null-tag">*</span>';
1293     echo '</label>';
1294     echo '</div>';
1295     echo '<div class="form-content">';
1296     echo '<input class="champFormulaire" type="hidden" value="'.$this->getParameter("idxformulaire").'" name="dossier"/>';
1297     echo $this->getParameter("idxformulaire");
1298     echo '</div>';
1299     echo '</div>';
1300     /*Code du nouveau champ*/
1301     echo '<div class="field-ser-them ser-them">';
1302     echo '<div class="list-ser-them">';
1303     echo $liste_gauche;
1304     echo '</div>';
1305     echo '<div class="button-ser-them">';
1306     echo '<ul>';
1307     echo '<li>';
1308     echo '<input type="button" value="'._("Ajouter").' >>" id="add-ser-them"/>';
1309     echo '</li>';
1310     echo '<li>';
1311     echo '<input type="button" value="<< '._("Supprimer").'" id="del-ser-them"/>';
1312     echo '</li>';
1313     echo '</ul>';
1314     echo '</div>';
1315     echo '<div class="list-sel-ser-them">';
1316     echo '<div class=\'row row_title\'>';
1317     echo '<div class=\'cell1 liste_droite_title list-sel-ser-them-title\'>'._('Service a consulter').'</div>';
1318     echo '<div class=\'cell2 liste_droite_title list-sel-ser-them-title\'>'._('Version papier').'</div>';
1319     echo '</div>';
1320     echo '</div>';
1321     echo '</div>';
1322     /* -- FIN --*/
1323 jymadier 3990 // Le champ de date d'envoi est visible seulement aux ayant-droits
1324     if($this->f->isAccredited('consultation_saisir_date_envoi')) {
1325     echo '<div class="field-ser-them field-type-date2">';
1326     }
1327     else {
1328     echo '<div class="field field-type-hiddendate">';
1329     }
1330 mbroquet 3730 echo '<div class="form-libelle">';
1331     echo '<label class="libelle-date_envoi" for="date_envoi">';
1332     echo _('date_envoi');
1333     echo '<span class="not-null-tag">*</span>';
1334     echo '</label>';
1335     echo '</div>';
1336     echo '<div class="form-content">';
1337     echo '<input id="date_envoi" class="champFormulaire datepicker"
1338 jymadier 4000 type="text" onkeyup="" onchange="fdate(this);"
1339 mbroquet 3730 maxlength="10" size="12" value="'.date("d/m/Y").'"
1340     name="date_envoi">';
1341     echo '</div>';
1342     echo '</div>';
1343     echo "</div>";
1344     echo "</fieldset>";
1345     echo '</div>';
1346     echo '</div>';
1347     echo '</div>';
1348     echo '<div class="formControls">';
1349    
1350     echo '<div class="formControls">';
1351     echo "<input class=\"om-button ui-button ui-widget ui-state-default ui-corner-all\"
1352     type=\"button\"
1353    
1354     value=\"Ajouter le(s) enregistrement(s) de la table : 'Consultation'\"
1355     id=\"button_val\">";
1356     $this->retoursousformulaire(
1357     $this->getParameter("idxformulaire"),
1358     $this->getParameter("retourformulaire"),
1359     null,
1360     $this->getParameter("objsf"),
1361     $this->getParameter("premiersf"),
1362     $this->getParameter("tricolsf"),
1363     $this->getParameter("validation"),
1364     $this->getParameter("idx"),
1365     $this->getParameter("maj"),
1366     $this->getParameter("retour")
1367     );
1368     echo '</div>';
1369     echo '</div>';
1370     echo '</form>';
1371    
1372     echo "
1373     <script language='javascript' type='text/javascript'>
1374     $(function(){
1375     changeActionVal('');
1376     /*
1377     Sélectionne tous les services d'un thème au clique sur celui ci.
1378     */
1379     $('.liste_gauche_them').click(
1380     function(){
1381    
1382     var id = $(this).attr('id').split('_')[1];
1383     var numSer = 0;
1384     var numSerWithClass = 0;
1385    
1386     $('.list-ser-them div').each(
1387     function() {
1388    
1389     if ( $(this).attr('id').indexOf('them') == -1 &&
1390     $(this).attr('id').indexOf(id) == 1 &&
1391     $(this).hasClass('liste_gauche_service_selected') )
1392    
1393     numSerWithClass++;
1394    
1395     if ( $(this).attr('id').indexOf('them') == -1 &&
1396     $(this).attr('id').indexOf(id) == 1 )
1397    
1398     numSer++;
1399     }
1400     );
1401    
1402     if ( numSerWithClass < numSer && numSerWithClass >= 0 ){
1403    
1404     $('.list-ser-them div').each(
1405     function() {
1406    
1407     if ( $(this).attr('id').indexOf('them') == -1 &&
1408     $(this).attr('id').indexOf(id) == 1 &&
1409     !$(this).hasClass('liste_gauche_service_selected') )
1410    
1411     $(this).addClass('liste_gauche_service_selected');
1412     }
1413     );
1414     }
1415    
1416     else {
1417    
1418     $('.list-ser-them div').each(
1419     function() {
1420    
1421     if ( $(this).attr('id').indexOf('them') == -1 &&
1422     $(this).attr('id').indexOf(id) == 1 &&
1423     $(this).hasClass('liste_gauche_service_selected') )
1424    
1425     $(this).removeClass('liste_gauche_service_selected');
1426     }
1427     );
1428     }
1429     }
1430     );
1431    
1432     /*
1433     Change la class CSS d'un service sur lequel on clique dans la liste de gauche.
1434     */
1435     $('.liste_gauche_service').click(
1436     function(){
1437     $(this).toggleClass('liste_gauche_service_selected');
1438     }
1439     );
1440    
1441     /*
1442     Change la class CSS d'un service sur lequel on clique dans la liste de droite.
1443     */
1444     $('.field-ser-them').on(
1445     'click',
1446     '.cell1',
1447     function(){
1448     if ( !$(this).hasClass('liste_droite_title') )
1449     $(this).parent().toggleClass('liste_droite_service_selected');
1450     }
1451     );
1452    
1453     $('.liste_droite_service input[type=checkbox]').live(
1454     'click',
1455     'input[type=checkbox]',
1456     function(){
1457    
1458     old_id = $(this).attr('class');
1459    
1460     tab_don = old_id.split('_');
1461    
1462     new_id = tab_don[0] + '_' + tab_don[1] + '_' + ((tab_don[2] == 0 ) ? 1 : 0 ) + '_';
1463    
1464     changeOneData( ';' + tab_don[1] + '_' + tab_don[2], ';' + tab_don[1] + '_' + ((tab_don[2] == 0) ? 1 : 0) );
1465     $('div[class=\"' + old_id + '\"]').attr('class', new_id);
1466     $(this).attr('class', new_id);
1467    
1468     }
1469     );
1470    
1471     $('#date_envoi').change(
1472     function (){
1473    
1474     var listServ = new Array();
1475     var data = '';
1476    
1477     $('.liste_gauche_service_selected').each(
1478     function(i) {
1479    
1480 jymadier 4000 var id = $(this).attr('id');
1481 mbroquet 3730
1482 jymadier 4000 if ( listServ.length > 0 && listServ.indexOf(id.split('_')[1]) != -1 )
1483 mbroquet 3730 return;
1484 jymadier 4000 listServ[i] = id.split('_')[1];
1485     data += ';' + id.split('_')[1] + '_' + id.split('_')[2] ;
1486 mbroquet 3730
1487     }
1488     );
1489    
1490     changeActionVal(data);
1491     }
1492     );
1493    
1494     /*
1495     Passe les services sélectionnés dans la liste de gauche dans celle de droite.
1496     */
1497     $('#add-ser-them').click(
1498     function() {
1499    
1500     changeDataLeftColumn();
1501     }
1502     );
1503    
1504     /*
1505     Passe les services sélectionnés dans la liste de droite dans celle de gauche.
1506     */
1507     $('#del-ser-them').click(
1508     function() {
1509    
1510     var data = '';
1511    
1512     //Supprime les éléments de la liste de droite
1513     $('.liste_droite_service_selected').each(
1514     function() {
1515    
1516     var name = $('#'+ $(this).attr('id') + ' .cell1 div').attr('name');
1517    
1518     manageListServ('.list-ser-them div', name, 1);
1519    
1520     $(this).remove();
1521     }
1522     );
1523    
1524     //Change les valeurs qui vont être renvoyées à la validation du formulaire
1525     $('.liste_droite_service').each(
1526     function(){
1527    
1528     var name = $('#'+ $(this).attr('id') + ' .cell1 div').attr('name');
1529     data += ';' + name.split('_')[1] + '_' + name.split('_')[2] ;
1530     }
1531     );
1532    
1533     changeActionVal(data);
1534     }
1535     );
1536     });
1537    
1538     /*
1539     Vérifie que l'objet n'est pas une thématique et que son identifiant correspond.
1540     */
1541     function isNotthemIsOneServ( objet, id ){
1542     return ( $(objet).attr('id').indexOf('them') == -1 &&
1543     $(objet).attr('id').indexOf('_' + id.split('_')[1] + '_') != -1 );
1544     }
1545    
1546     /*
1547     Affiche ou cache un élément qui n'est pas une thématique et dont son identifiant correspond.
1548     */
1549     function manageListServ( objet , name, type){
1550    
1551     $(objet).each(
1552     function() {
1553    
1554     if ( isNotthemIsOneServ(this, name) ){
1555     if ( type == 0 )
1556    
1557     $(this).hide() ;
1558    
1559     else {
1560    
1561     if ( $(this).hasClass('liste_gauche_service_selected') )
1562    
1563     $(this).toggleClass('liste_gauche_service_selected');
1564    
1565     $(this).show() ;
1566    
1567     }
1568     }
1569     }
1570     );
1571     }
1572    
1573     /*
1574     Change les actions qui sont réalisées lors de la soumission du formulaire
1575     */
1576     function changeActionVal(data){
1577     date = $('#date_envoi').val();
1578    
1579    
1580    
1581     $('#button_val').attr(
1582     'onclick',
1583     'if ( $(\'.liste_gauche_service_selected\').length > 0 && $(\'#date_envoi\').val() != \'\' ) { messageIt(\'consultation\', \'".html_entity_decode($datasubmit)."&data='+data+'&date_envoi='+date+'\',true);' +
1584     'messageIt(\'consultation\', \'".html_entity_decode($return_url)."\',false);} else alert(\'Veuillez choisir au moins un service et une date d envoi\');'
1585    
1586     );
1587    
1588     }
1589    
1590     /*
1591     Change les actions qui sont réalisées lors de la soumission du formulaire
1592     */
1593     function changeOneData( oldData, newData) {
1594    
1595     date = $('#date_envoi').val();
1596    
1597     $('#button_val').attr(
1598     'onclick',
1599     $('#button_val').attr('onclick').replace(oldData,newData)
1600     );
1601    
1602     }
1603    
1604     function changeDataLeftColumn(){
1605    
1606     $('.list-sel-ser-them').empty();
1607     $('.list-sel-ser-them').html(
1608     '<div class=\"row row_title\">' +
1609     '<div class=\"cell1 liste_droite_title list-sel-ser-them-title\">"._("Service a consulter")."</div>' +
1610     '<div class=\"cell2 liste_droite_title list-sel-ser-them-title\">"._("Version papier")."</div>' +
1611     '</div>'
1612     );
1613    
1614     var listServ = new Array();
1615     var data = '';
1616    
1617     $('.liste_gauche_service_selected').each(
1618     function(i) {
1619    
1620     var id = $(this).attr('id');
1621    
1622     if ( $.inArray(id.split('_')[1], listServ) != -1 )
1623     return;
1624    
1625     data += ';' + id.split('_')[1] + '_' + id.split('_')[2] ;
1626     listServ[i] = id.split('_')[1];
1627    
1628     $('.list-sel-ser-them').append(
1629     '<div id=\'s' + i + '\' class=\'row liste_droite_service\'>'+
1630     '<div class=\'cell1\'>'+
1631     '<div class=\'' + $(this).attr('id') + '\' name=\'' + $(this).attr('id') + '\'>'+
1632     $(this).html().split('<')[0]+
1633     '</div>'+
1634     '</div>' +
1635     '<div class=\'cell2\'>'+
1636     '<div>'+
1637     '<input class=\'' + $(this).attr('id') + '\''+$(this).html().split('<input')[1]+
1638     '</div>'+
1639     '</div>'+
1640     '</div>'
1641     );
1642    
1643     $(this).hide();
1644    
1645     manageListServ('.list-ser-them div', id, 0);
1646    
1647     }
1648     );
1649     changeActionVal(data);
1650     }
1651     </script>";
1652     }
1653 nmeucci 4319 }
1654 mbroquet 3730
1655 nmeucci 4319
1656     /**
1657     * TREATMENT - view_bordereau_envoi_maire.
1658     *
1659     * Génère et affiche l'édition PDF contenant une ou plusieurs consultations.
1660     *
1661     * @return [void]
1662     */
1663     function generate_pdf_consultation_multiple() {
1664     // Vérification de l'accessibilité sur l'élément
1665     $this->checkAccessibility();
1666     // Récupération de la collectivité du dossier d'instruction
1667     $collectivite = $this->f->getCollectivite($this->get_dossier_collectivite());
1668     // Identifiants des consultations à afficher
1669     $idsConsultations = $this->f->get_submitted_get_value('textids');
1670     // Type de chaque consultations (avec_avis_attendu, ...)
1671     $objConsultations = $this->f->get_submitted_get_value('textobj');
1672     // Génération du PDF
1673     $result = $this->compute_pdf_output('etat', $objConsultations, $collectivite, $idsConsultations);
1674     // Affichage du PDF
1675     $this->expose_pdf_output(
1676     $result['pdf_output'],
1677     $result['filename']
1678     );
1679 mbroquet 3730 }
1680    
1681 softime 8989 /**
1682     * SETTER_FORM - setValsousformulaire (setVal).
1683     *
1684     * @return void
1685     */
1686 softime 6929 function setValsousformulaire(&$form, $maj, $validation, $idxformulaire, $retourformulaire, $typeformulaire, &$dnu1 = null, $dnu2 = null) {
1687 softime 8989 parent::setValsousformulaire($form, $maj, $validation, $idxformulaire, $retourformulaire, $typeformulaire);
1688     //
1689 mbroquet 3730 $this->retourformulaire = $retourformulaire;
1690 softime 8989 //
1691     if ($validation == 0) {
1692 softime 11876 if ($maj == 0 or $maj == 40 or $maj == 41) {
1693 softime 8989 $form->setVal("dossier", $this->getParameter("idxformulaire"));
1694     $form->setVal("date_envoi", date("d/m/Y"));
1695 mbroquet 3730 }
1696 softime 8989 if (($maj == 1 || $maj == 91 || $maj == 100) && $this->getVal("date_retour") == "") {
1697     if ($this->f->isAccredited("consultation_retour_avis_suivi")
1698     || $this->f->isAccredited("consultation_retour_avis_service")) {
1699     //
1700     $form->setVal("date_retour", date("d/m/Y"));
1701 mbroquet 3730 }
1702     }
1703     }
1704     }
1705 softime 8989
1706     /**
1707     * SETTER_FORM - setVal (setVal).
1708     *
1709     * @return void
1710     */
1711     function setVal(&$form, $maj, $validation, &$dnu1 = null, $dnu2 = null) {
1712     parent::setVal($form, $maj, $validation);
1713     //
1714     if (($maj == 1 || $maj == 91 || $maj == 100) && $this->getVal("date_retour") == "") {
1715     $form->setVal("date_retour", date('d/m/Y'));
1716 mbroquet 3730 }
1717     }
1718    
1719 softime 6929 function setvalF($val = array()) {
1720 mbroquet 3730 //
1721     parent::setValF($val);
1722 softime 6565 //Si on crée une consultation on la met a visible
1723 softime 11876 if ($this->getParameter('maj') == 0 || $this->getParameter('maj') == 41) {
1724 softime 6565 $this->valF["visible"] = true;
1725     }
1726    
1727 softime 11876 if ($this->getParameter('maj') == 0
1728     or $this->getParameter('maj') == 40
1729     or $this->getParameter('maj') == 41) {
1730 mbroquet 3730 //
1731     if (isset($this->valF["date_envoi"])) {
1732     $this->valF["date_reception"] = $this->valF["date_envoi"];
1733     }
1734     //
1735     $this->valF["lu"] = true;
1736     }
1737    
1738     // Si un retour d'avis est modifie on passe "lu" a false
1739 softime 8989 if(($this->getParameter('maj')==100 ) and (
1740 mbroquet 3730 $this->val[array_search("avis_consultation",$this->champs)] != $val["avis_consultation"] OR
1741     $this->val[array_search("date_retour",$this->champs)] != $val["date_retour"] OR
1742     $this->val[array_search("motivation",$this->champs)] != $val["motivation"] OR
1743     $this->val[array_search("fichier",$this->champs)] != $val["fichier"])
1744     ) {
1745     $this->valF["lu"]=false;
1746     }
1747     }
1748    
1749 softime 11876 /**
1750     * SETTER FORM - set_form_default_values
1751     *
1752     * @param formulaire $form Instance formulaire.
1753     * @param integer $maj Identifant numérique de l'action.
1754     * @param integer $validation Marqueur de validation du formulaire.
1755     *
1756     * @return void
1757     */
1758     function set_form_default_values(&$form, $maj, $validation) {
1759     if ($validation == 0 && $maj == 41) {
1760     foreach ($this->champs as $champ) {
1761     $form->setVal($champ, null, $validation);
1762     }
1763     }
1764     }
1765    
1766 mbroquet 3730 function setLib(&$form, $maj) {
1767     //
1768     parent::setLib($form, $maj);
1769     //
1770     $form->setLib($this->clePrimaire, _("id"));
1771 softime 7366 $form->setLib('visible', _("visible dans les éditions"));
1772 softime 10573 $form->setLib("live_preview", "");
1773 softime 11876
1774     $form->setLib('categorie_tiers_consulte', _('catégorie du tiers consulté'));
1775     $form->setLib('tiers_consulte', __('tiers consulté'));
1776     $form->setLib('motif_consultation', _('motif de la consultation'));
1777 mbroquet 3730 }
1778    
1779     function setType(&$form,$maj) {
1780     // Appel du parent
1781     parent::setType($form,$maj);
1782     $form->setType('dossier', 'hidden');
1783 nmeucci 3992 $form->setType('marque', 'hidden');
1784 softime 8329 $form->setType('om_fichier_consultation_dossier_final', 'hidden');
1785     $form->setType('fichier_dossier_final', 'hidden');
1786 softime 10573 $form->setType('live_preview', 'hidden');
1787     //
1788     $form->setType('texte_fondement_avis', 'hidden');
1789     $form->setType('texte_avis', 'hidden');
1790     $form->setType('texte_hypotheses', 'hidden');
1791     $form->setType('nom_auteur', 'hidden');
1792     $form->setType('prenom_auteur', 'hidden');
1793     $form->setType('qualite_auteur', 'hidden');
1794 softime 11876 $form->setType('qualite_auteur', 'hidden');
1795     // MODE - AJOUTER et MODE - AJOUTER CONSULTATION TIERS
1796     if ($maj == 0 || $maj == 41) {
1797 mbroquet 3730 // On cache alors tous les champs que nous ne voulons pas voir
1798     // apparaître dans le formulaire d'ajout (principalement les
1799     // informations sur le retour d'avis)
1800     $form->setType('date_retour', 'hiddendate');
1801     $form->setType('date_reception', 'hiddendate');
1802     $form->setType('date_limite', 'hiddendate');
1803     $form->setType('avis_consultation', 'hidden');
1804 softime 6565 $form->setType('visible', 'hidden');
1805 mbroquet 3730 $form->setType('motivation', 'hidden');
1806     $form->setType('fichier', 'hidden');
1807     $form->setType('lu', 'hidden');
1808 softime 11876 $form->setType('categorie_tiers_consulte', 'hidden');
1809     $form->setType('tiers_consulte', 'hidden');
1810     $form->setType('service', 'hidden');
1811     $form->setType('motif_consultation', 'hidden');
1812 mbroquet 3730 // On permet la modification de certains champs
1813     $form->setType('dossier_libelle', 'hiddenstatic');
1814 softime 11876 $form->setType('commentaire', 'textarea');
1815     // Affichage des champs selon le type de consultation
1816     if ($maj == 0) { // consultation service
1817     $champsRecquis = array('service');
1818     $form->setType('service', 'select');
1819     } elseif ($maj == 41) { // consultation tiers
1820     $champsRecquis = array('categorie_tiers_consulte', 'tiers_consulte', 'motif_consultation');
1821     $form->setType('categorie_tiers_consulte', 'select');
1822     $form->setType('tiers_consulte', 'select');
1823     $form->setType('motif_consultation', 'select');
1824     }
1825     // Gestion de l'affichage des champs obligatoire selon le type de consultation
1826     // TODO : A voir si il existe une meilleur manière de gérer l'affichage des champs obligatoire
1827     foreach ($champsRecquis as $champs) {
1828     $this->required_field[] = $champs;
1829     }
1830 jymadier 3990 // Le champ "date d'envoi" est affiché seulement si l'utilisateur a la
1831     // permission
1832     if($this->f->isAccredited('consultation_saisir_date_envoi')) {
1833     $form->setType('date_envoi', 'date2');
1834     }
1835     else {
1836     $form->setType('date_envoi', 'hiddendate');
1837     }
1838 mbroquet 3730 }
1839     // MODE - MODIFIER
1840     if ($maj == 1) {
1841     // On affiche en statique les informations qui ne sont plus
1842     // modifiables
1843     $form->setType('dossier_libelle', 'hiddenstatic');
1844     $form->setType('date_envoi', 'hiddenstaticdate');
1845     $form->setType('date_limite', 'hiddenstaticdate');
1846 softime 7366 $form->setType('visible', 'checkboxhiddenstatic');
1847 softime 11876 // Gestion de l'affichage des champs selon les consultations service et tiers
1848     if ($this->getVal('service') != null && $this->getVal('service') != '') {
1849     $form->setType('service', 'selecthiddenstatic');
1850     $form->setType('categorie_tiers_consulte', 'hidden');
1851     $form->setType('tiers_consulte', 'hidden');
1852     $form->setType('motif_consultation', 'hidden');
1853     } else {
1854     $form->setType('service', 'hidden');
1855     $form->setType('categorie_tiers_consulte', 'selecthiddenstatic');
1856     $form->setType('tiers_consulte', 'selecthiddenstatic');
1857     $form->setType('motif_consultation', 'selecthiddenstatic');
1858     }
1859 mbroquet 3730
1860     // La date de réception ne peut être modifiée que par un
1861     // utilisateur en ayant spécifiquement la permission
1862 softime 4667 if($this->f->isAccredited(array('consultation','consultation_modifier_date_reception'), 'OR')) {
1863 mbroquet 3730 $form->setType('date_reception', 'date2');
1864     } else {
1865     $form->setType('date_reception', 'hiddenstaticdate');
1866     }
1867    
1868     // Le marqueur lu/non lu ne peut être modifié que par un
1869     // utilisateur en ayant spécifiquement la permission
1870 softime 4667 if ($this->f->isAccredited(array('consultation','consultation_modifier_lu'), 'OR')) {
1871 mbroquet 3730 $form->setType('lu', 'checkbox');
1872     } else {
1873     $form->setType('lu', 'hidden');
1874     }
1875    
1876     // Gestion du type du widget sur le champ fichier
1877     if($this->getVal("fichier") == "" OR
1878 softime 4667 $this->f->isAccredited(array('consultation', 'consultation_modifier_fichier'), 'OR')) {
1879 mbroquet 3730 // Si il n'y a jamais eu de fichier enregistré ou que
1880     // l'utilisateur a spécifiquement les droits pour modifier
1881     // un fichier déjà enregistré alors on positionne un type
1882     // de widget modifiable
1883 softime 8989 $contexts = array(
1884     "demande_avis_encours",
1885     "dossier",
1886     "dossier_contentieux_mes_infractions",
1887     "dossier_contentieux_mes_recours",
1888     "dossier_contentieux_tous_recours",
1889     "dossier_contentieux_toutes_infractions",
1890     "dossier_instruction",
1891     "dossier_instruction_mes_clotures",
1892     "dossier_instruction_mes_encours",
1893     "dossier_instruction_tous_clotures",
1894     "dossier_instruction_tous_encours",
1895     "dossier_qualifier",
1896     );
1897     if (in_array($this->getParameter("retourformulaire"), $contexts) === true) {
1898 mbroquet 3730 $form->setType('fichier', 'upload2');
1899     } else {
1900     $form->setType('fichier', 'upload');
1901     }
1902     } else {
1903     // Si non on affiche uniquement le nom du fichier
1904     $form->setType('fichier', 'filestaticedit');
1905     }
1906    
1907     }
1908     // Mode supprimer
1909     if ($maj == 2) {
1910     $form->setType('fichier', 'filestatic');
1911 softime 11876 // L'affichage des champs différe pour les consultations de service et celle de tiers
1912     if ($this->getVal('service') != null && $this->getVal('service') != '') {
1913     $form->setType('categorie_tiers_consulte', 'hidden');
1914     $form->setType('tiers_consulte', 'hidden');
1915     $form->setType('motif_consultation', 'hidden');
1916     } else {
1917     $form->setType('service', 'hidden');
1918     }
1919 mbroquet 3730 }
1920     // MODE - CONSULTER
1921 softime 11876 if ($maj == 3) {
1922 mbroquet 3730 $form->setType('fichier', 'file');
1923 softime 11876 // Affichage d'une consultation vers un service
1924     if ($this->getVal('service') !== null && $this->getVal('service') != '') {
1925     $form->setType('categorie_tiers_consulte', 'hidden');
1926     $form->setType('tiers_consulte', 'hidden');
1927     $form->setType('motif_consultation', 'hidden');
1928 softime 10573 $inst_service = $this->get_inst_service($this->getVal('service'));
1929     if ($inst_service->getVal('service_type') === 'platau') {
1930     $form->setType("texte_fondement_avis", "textareastatic");
1931     $form->setType("texte_avis", "textareastatic");
1932     $form->setType("texte_hypotheses", "textareastatic");
1933     $form->setType("nom_auteur", "static");
1934     $form->setType("prenom_auteur", "static");
1935     $form->setType("qualite_auteur", "static");
1936     }
1937 softime 11876 } else { // Affichage d'un consultation d'un tiers
1938     $form->setType('service', 'hidden');
1939     $inst_motif = $this->f->get_inst__om_dbform(array(
1940     'idx' => $this->getVal('motif_consultation'),
1941     'obj' => 'motif_consultation'
1942     ));
1943     if ($inst_motif->getVal('service_type') === 'platau') {
1944     $form->setType("texte_fondement_avis", "textareastatic");
1945     $form->setType("texte_avis", "textareastatic");
1946     $form->setType("texte_hypotheses", "textareastatic");
1947     $form->setType("nom_auteur", "static");
1948     $form->setType("prenom_auteur", "static");
1949     $form->setType("qualite_auteur", "static");
1950     }
1951 softime 10573 }
1952 mbroquet 3730 }
1953 softime 6565
1954     // MODE - AJOUT MULTIPLE
1955     if ($maj == 40) {
1956     $form->setType('visible', 'hidden');
1957     }
1958    
1959 mbroquet 3730 // MODE - retour de consultation par suivi des date
1960     if ($maj == 100) {
1961     $form->setType("consultation", "hiddenstatic");
1962     $form->setType('dossier_libelle', 'hiddenstatic');
1963     $form->setType('date_envoi', 'hiddenstaticdate');
1964     $form->setType('date_limite', 'hiddenstaticdate');
1965     $form->setType('date_reception', 'hiddenstaticdate');
1966     $form->setType('service', 'selecthiddenstatic');
1967 softime 11876 $form->setType('categorie_tiers_consulte', 'selecthiddenstatic');
1968     $form->setType('tiers_consulte', 'selecthiddenstatic');
1969     $form->setType('motif_consultation', 'selecthiddenstatic');
1970 softime 12654 $form->setType('commentaire', 'hiddenstatic');
1971 mbroquet 3730 $form->setType('date_retour', 'date');
1972     $form->setType('lu', 'hidden');
1973 softime 6565 $form->setType('visible', 'hidden');
1974 mbroquet 3730 $form->setType("avis_consultation", "select");
1975     $form->setType("motivation", "textarea");
1976     $form->setType('fichier', 'upload');
1977 softime 5024 // Gestion du type du widget sur le champ fichier
1978     if($this->getVal("fichier") == "" OR
1979     $this->f->isAccredited(array('consultation', 'consultation_modifier_fichier'), 'OR')) {
1980     // Si il n'y a jamais eu de fichier enregistré ou que
1981     // l'utilisateur a spécifiquement les droits pour modifier
1982     // un fichier déjà enregistré alors on positionne un type
1983     // de widget modifiable
1984 softime 8989 $contexts = array(
1985     "demande_avis_encours",
1986     "dossier",
1987     "dossier_contentieux_mes_infractions",
1988     "dossier_contentieux_mes_recours",
1989     "dossier_contentieux_tous_recours",
1990     "dossier_contentieux_toutes_infractions",
1991     "dossier_instruction",
1992     "dossier_instruction_mes_clotures",
1993     "dossier_instruction_mes_encours",
1994     "dossier_instruction_tous_clotures",
1995     "dossier_instruction_tous_encours",
1996     "dossier_qualifier",
1997     );
1998     if (in_array($this->getParameter("retourformulaire"), $contexts) === true) {
1999 softime 5024 $form->setType('fichier', 'upload2');
2000     } else {
2001     $form->setType('fichier', 'upload');
2002     }
2003     } else {
2004     // Si non on affiche uniquement le nom du fichier
2005     $form->setType('fichier', 'filestaticedit');
2006     }
2007 mbroquet 3730 }
2008     //// On cache la clé primaire
2009     //$form->setType('consultation', 'hidden');
2010     //
2011 softime 8989 if ($this->is_in_context_of_foreign_key("dossier", $this->getParameter("retourformulaire")) === true) {
2012 mbroquet 3730 $form->setType('dossier_libelle', 'hidden');
2013     }
2014    
2015     $form->setType('code_barres', 'hidden');
2016    
2017     //Cache les champs pour la finalisation
2018     $form->setType('om_fichier_consultation', 'hidden');
2019     $form->setType('om_final_consultation', 'hidden');
2020    
2021 softime 10573 if($maj == 50 OR $maj == 51 OR $maj == 60 OR $maj == 70 OR $maj == 120 OR $maj == 130 OR $maj == 140) {
2022 mbroquet 3730 foreach ($this->champs as $value) {
2023     $form->setType($value, 'hidden');
2024     }
2025     }
2026 softime 10573
2027     if ($maj == 400) {
2028     foreach ($this->champs as $champ) {
2029     $form->setType($champ, 'hidden');
2030     }
2031 softime 11418 $form->setType('live_preview', 'previsualiser');
2032 softime 10573 }
2033 mbroquet 3730 }
2034    
2035 softime 11876 /**
2036     * Permet de définir l’attribut “onchange” sur chaque champ.
2037     *
2038     * @param object &$form Formumaire
2039     * @param integer $maj Mode d'insertion
2040     */
2041     function setOnchange(&$form, $maj) {
2042     parent::setOnchange($form, $maj);
2043    
2044     // En cas de changement du champ categorie_tiers_consulte, appel
2045     // la méthode javascript filterSelect qui utilise (via l'URL) le
2046     // snippet_filterselect. Le snippet renvoie ensuite un json contenant la valeur du champ.
2047     // Cette valeur est ensuite utilisé pour récupèrer la liste des
2048     // tiers_consulte ayant la categorie sélectionné
2049     // Uniquement dans le formulaire d'ajout d'une consultation a un tiers
2050     if ($maj == '41') {
2051     $form->setOnchange(
2052     'categorie_tiers_consulte',
2053     "filterSelect(
2054     this.value,
2055     'tiers_consulte',
2056     'categorie_tiers_consulte',
2057     'consultation'
2058     )"
2059     );
2060     }
2061     }
2062    
2063     /**
2064     * Cette méthode permet de calculer la date limite en fonction de la date
2065     * de réception et du délai de consultation.
2066     *
2067     * Met a jour les valeurs du formulaire en mettant a jour l'attribut valF.
2068     *
2069     * @param
2070     * @return void
2071     */
2072 mbroquet 3730 function calculDateLimite() {
2073 softime 11876 // Vérifie si la variable contenant les informations nécessaire au calcul
2074     // de la date limite a bien été setter et si ce n'est pas le cas fait
2075     // appel au setter.
2076     if ($this->valElementConsulte == array()) {
2077     $this->set_val_element_consulte();
2078     }
2079    
2080 mbroquet 3730 // mise a jour instruction avec evenement [return delay]
2081 softime 8989 if (array_key_exists("date_reception", $this->valF)
2082     && $this->valF["date_reception"] != "") {
2083 softime 11876 // Calcul de la date limite a partir du délai et du type de délai
2084     $this->valF["date_limite"] = $this->f->mois_date(
2085     $this->valF["date_reception"],
2086     $this->valElementConsulte['delai'],
2087     "+",
2088     $this->valElementConsulte['delai_type']
2089     );
2090 mbroquet 3730 //
2091 softime 11876 if ($this->valElementConsulte['delai_type'] == "mois") {
2092 mbroquet 3730 $delai_type_trad = _("mois");
2093     } else {
2094     $delai_type_trad = _("jour(s)");
2095     }
2096     //
2097     $this->addToMessage(_("delai")." ".
2098 softime 11876 _("retour")." ".$this->valElementConsulte['delai']." ".$delai_type_trad." -> ".
2099 mbroquet 3730 _("retour")." ".date("d/m/Y", strtotime($this->valF["date_limite"])));
2100     }
2101     }
2102    
2103 softime 8989 /**
2104 softime 11876 * Identifie si la consultation est une consultation de tiers ou de service
2105     * a partir des valeurs envoyées dans le formulaire ou alors des valeurs
2106     * issue de la consultation.
2107     * Si il existe une valeur pour le champ service, le type de consultation sera setter
2108     * a "service".
2109     * Si il existe une valeur pour le champ tiers_consulte, le type de consultation sera setter
2110     * a "tiers_consulte"
2111     * Si aucun type de consultation n'a pu être défini renvoie false.
2112     *
2113     * Une fois le type de consultation récupéré effectue une requête pour récupérer
2114     * toutes les infos nécessaires pour créer / mettre à jour la consultation.
2115     * Set la variable valElementConsulte avec les valeurs ainsi récupérées.
2116     *
2117     * @return boolean indique si les informations ont été correctement récupérées
2118     */
2119     protected function set_val_element_consulte() {
2120     $typesConsultationPossible = array('service', 'tiers_consulte');
2121     $typeConsultation = null;
2122     // Pour tous les types de consultation possible vérifie si l'élément
2123     // consulté a bien une valeur enregistrée pour la consultation.
2124     // Si c'est le cas la consultation est de ce type
2125     // UNe fois le type de consultation récupéré il n'y a plus besoin de tester
2126     // les autres types car une consultation n'a qu'un seul type (tier ou service)
2127     foreach ($typesConsultationPossible as $typePossible) {
2128     if (isset($this->valF[$typePossible]) &&
2129     $this->valF[$typePossible] != null &&
2130     $this->valF[$typePossible] != '') {
2131     $typeConsultation = $typePossible;
2132     $idElement = $this->valF[$typePossible];
2133     break;
2134     } elseif ($this->getVal($typePossible) != null && $this->getVal($typePossible) != '') {
2135     $typeConsultation = $typePossible;
2136     $idElement = $this->getVal($typePossible);
2137     break;
2138     }
2139     }
2140    
2141     // Renvoie une erreur si le type de consultation n'a pas pu être récupéré
2142     if ($typeConsultation == null) {
2143     $this->addToMessage(__('Erreur : le type de consultation n\'a pas pu être défini'));
2144     return false;
2145     }
2146     $this->typeConsultation = $typeConsultation;
2147     // Récuperation les infos lié à l'élement consulté de la consultation.
2148     $instance = $this->f->get_inst__om_dbform(array(
2149     'obj' => $typeConsultation,
2150     'idx' => $idElement
2151     ));
2152     $champARecupere = array(
2153     $typeConsultation,
2154     'libelle',
2155     'abrege',
2156     'generate_edition',
2157     'service_type',
2158     'delai',
2159     'delai_type',
2160     'notification_email',
2161     'email'
2162     );
2163     if ($typeConsultation == 'tiers_consulte') {
2164     // POur les tiers consulte, il faut récupérer le motif de consultation
2165     $idMotif = isset($this->valF['motif_consultation']) &&
2166     $this->valF['motif_consultation'] != null &&
2167     $this->valF['motif_consultation'] != '' ?
2168     $this->valF['motif_consultation'] :
2169     $this->getVal('motif_consultation');
2170     if ($idMotif == null || $idMotif == '') {
2171     $this->addToMessage(__('Erreur : le motif de consultation n\'a pas pu être récupéré'));
2172     return false;
2173     }
2174     $instanceMotif = $this->f->get_inst__om_dbform(array(
2175     'obj' => 'motif_consultation',
2176     'idx' => $idMotif
2177     ));
2178     foreach($champARecupere as $champ) {
2179     // On cherche les informations voulus dans la table tiers consulte et
2180     // si il n'existe pas c'est qu'ils sont dans la table motif_consultatio,
2181     if ($instance->getVal($champ) != null) {
2182     $valElementConsulte[$champ] = $instance->getVal($champ);
2183     } else {
2184     $valElementConsulte[$champ] = $instanceMotif->getVal($champ);
2185     }
2186     }
2187     // Le champ contenant les adresses mails n'a pas le même nom pour les
2188     // tiers et les services. Pour les tiers il faut donc récupèrer les mails
2189     // dans 'liste_diffusion'
2190     $valElementConsulte['email'] = $instance->getVal('liste_diffusion');
2191     } else {
2192     foreach($champARecupere as $champ) {
2193     $valElementConsulte[$champ] = $instance->getVal($champ);
2194     }
2195     }
2196     $this->valElementConsulte = $valElementConsulte;
2197     return true;
2198     }
2199    
2200     /**
2201 softime 8989 * TRIGGER - triggerajouter.
2202 softime 11876 * Réalise le calcul de la date limite de consultation et
2203 softime 8989 *
2204     * @return boolean
2205     */
2206     function triggerajouter($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2207     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2208 softime 11876 // Set le type de consultation (var typeConsultation) et les valeurs
2209     // issues de l'élement consulte (var valElementConsulte)
2210     if ($this->set_val_element_consulte() == false) {
2211     $this->addToMessage(__('Erreur : les informations de l\'élement consulté n\'ont pas pu être récupéré.'));
2212     return false;
2213     }
2214 mbroquet 3730 $this->calculDateLimite();
2215 softime 10573
2216 softime 11876 if ($this->valElementConsulte['generate_edition'] === 't') {
2217 softime 10573 // Identifiant du type de courrier
2218     $idTypeCourrier = '12';
2219     $idCourrier = str_pad($this->valF["consultation"], 10, "0", STR_PAD_LEFT);
2220     // Code barres
2221     $this->valF["code_barres"] = $idTypeCourrier . $idCourrier;
2222     }
2223 mbroquet 3730 }
2224    
2225 softime 8989 /**
2226     * TRIGGER - triggermodifier.
2227     *
2228     * @return boolean
2229     */
2230     function triggermodifier($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2231     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2232 softime 11876 // Set le type de consultation (var typeConsultation) et les valeurs
2233     // issues de l'élement consulte (var valElementConsulte)
2234     if ($this->set_val_element_consulte() == false) {
2235     $this->addToMessage(__('Erreur : les informations de l\'élement consulté n\'ont pas pu être récupéré.'));
2236     return false;
2237     }
2238    
2239     // Si la date de réception a été modifiée on recalcul les délais à partir de la nouvelle date
2240 softime 10573 if (array_key_exists("date_reception", $this->valF) === true
2241     && $this->getVal('date_reception') !== $this->valF['date_reception']) {
2242     $this->calculDateLimite();
2243     }
2244 mbroquet 3730 }
2245    
2246 fmichon 4708 /**
2247     * TRIGGER - triggerajouterapres.
2248     *
2249     * - Notification par courrier du service consulté
2250     * - Interface avec le référentiel ERP [104]
2251     * - Interface avec le référentiel ERP [106]
2252     * - Finalisation du document PDF de consultation
2253     *
2254     * @return boolean
2255     */
2256 softime 8989 function triggerajouterapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2257     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2258 softime 11876 // Set le type de consultation (var typeConsultation) et les valeurs
2259     // issues de l'élement consulte (var valElementConsulte)
2260     if ($this->set_val_element_consulte() == false) {
2261     $this->addToMessage(__('Erreur : les informations de l\'élement consulté n\'ont pas pu être récupéré.'));
2262     return false;
2263     }
2264 fmichon 4708 // On a besoin de l'instance du dossier lié à la consultation
2265     $inst_di = $this->get_inst_dossier($this->valF['dossier']);
2266    
2267     /**
2268     * Notification par courriel du service consulté.
2269     *
2270     * Si il y a un problème lors de l'envoi du courriel, on prévient l'utilisateur
2271     * mais on ne bloque pas le traitement. Le courriel de notification n'a pas de
2272     * de caractère critique.
2273     */
2274 softime 11876 // On a besoin du nom de l'élement consulté pour l'affichage des messages
2275     $tradTypeConsultation = str_replace('_', ' ', $this->typeConsultation);
2276     if ($this->valElementConsulte['notification_email'] == 't') {
2277     // vérifie si il y a bien des adresses mail enregistrées dans la liste de diffusion
2278     // et si ce n'est pas le cas préviens l'utilisateur que l'envoi du mail n'est pas possible
2279     if ($this->valElementConsulte['email'] == '') {
2280 softime 10207 $this->addToMessage(sprintf(
2281 softime 11876 __("Erreur, il n'y a aucune adresse mail dans la liste de diffusion du %s (%s) %s. Envoi du mail non effectué."),
2282     $tradTypeConsultation,
2283     $this->valElementConsulte['abrege'],
2284     $this->valElementConsulte["libelle"]
2285 softime 10207 ));
2286 softime 11876 } else {
2287     // Composition du titre du courriel
2288     $title = sprintf(
2289     '%s %s',
2290     _("Consultation de ".$tradTypeConsultation." : dossier no"),
2291     $inst_di->getVal($inst_di->clePrimaire)
2292     );
2293     $title = iconv("UTF-8", "CP1252", $title);
2294     // Composition du corps du courriel
2295     $corps = sprintf(
2296     '%s %s<br/>%s %s %s %s %s<br/>%s <a href=\'%s\'>%s</a> %s <a href=\'%s\'>%s</a>',
2297     _("Votre ".$tradTypeConsultation." est consulte concernant le dossier no"),
2298     $inst_di->getVal($inst_di->clePrimaire),
2299     _("Il concerne le terrain situe a l'adresse :"),
2300     $inst_di->getVal('terrain_adresse_voie_numero'),
2301     $inst_di->getVal('terrain_adresse_voie'),
2302     $inst_di->getVal('terrain_adresse_code_postal'),
2303     $inst_di->getVal('terrain_adresse_localite'),
2304     _("Vous pouvez y acceder et rendre votre avis a l'adresse"),
2305     // Adresse interne, si l'adresse termine par &idx= alors on ajoute l'identifiant de la consultation
2306     $this->f->getParameter('services_consultes_lien_interne').((substr($this->f->getParameter('services_consultes_lien_interne'), -5) == "&idx=") ? $this->valF['consultation'] : ""),
2307     _("Lien interne"),
2308     _("ou"),
2309     // Adresse externe, si l'adresse termine par &idx= alors on ajoute l'identifiant de la consultation
2310     $this->f->getParameter('services_consultes_lien_externe').((substr($this->f->getParameter('services_consultes_lien_externe'), -5) == "&idx=") ? $this->valF['consultation'] : ""),
2311     _("Lien externe")
2312     );
2313     $corps = iconv("UTF-8", "CP1252", $corps);
2314     // Récupération des destinataire
2315     $email_list = explode("\r\n", $this->valElementConsulte['email']);
2316     $nb_destinataire = count($email_list);
2317     $nb_success = 0;
2318     $nb_error = 0;
2319     foreach ($email_list as $email) {
2320     // Envoi du mail avec message de retour
2321     if ($this->f->sendMail($title, $corps, iconv("UTF-8", "CP1252", $email))) {
2322     $this->f->addToLog(__METHOD__."() : senMail envoi de la notification au ".$tradTypeConsultation." effectué", VERBOSE_MODE);
2323     $nb_success++;
2324     } else {
2325     $this->f->addToLog(__METHOD__."() : ERROR - sendMail envoi de la notification au ".$tradTypeConsultation." n'a pas pu aboutir", DEBUG_MODE);
2326     $nb_error++;
2327     }
2328     }
2329     if ($nb_success != 0) {
2330     $this->addToMessage(
2331     sprintf(
2332     __("Envoi d'un mail de notification au %s (%s) %s."),
2333     $tradTypeConsultation,
2334     $this->valElementConsulte['abrege'],
2335     $this->valElementConsulte["libelle"]
2336     ));
2337     }
2338     if ($nb_error > 0 && $nb_error != $nb_destinataire) {
2339     $this->addToMessage(sprintf(
2340     __("Erreur lors de l'envoi du mail de notification à au moins un destinataire du %s (%s) %s."),
2341     $tradTypeConsultation,
2342     $this->valElementConsulte['abrege'],
2343     $this->valElementConsulte["libelle"]
2344     ));
2345     }
2346     if ($nb_error == $nb_destinataire) {
2347     $this->addToMessage(sprintf(
2348     __("Erreur lors de l'envoi du mail de notification aux destinataires du %s (%s) %s."),
2349     $tradTypeConsultation,
2350     $this->valElementConsulte['abrege'],
2351     $this->valElementConsulte["libelle"]
2352     ));
2353     }
2354 softime 10207 }
2355 mbroquet 3730 }
2356 fmichon 4708
2357 softime 7366 // Récupère la collectivité du dossier d'instruction lié à la
2358     // consultation
2359     $om_collectivite = $this->get_dossier_collectivite();
2360    
2361 softime 11876 // /!\ pour l'instant l'interface avec le référentiel erp concerne
2362     // uniquement les consultations faite à des service
2363     if ($this->typeConsultation === 'service') {
2364     // Récupération de l'instance du service en utilisant l'id du service stocké
2365     // dans valElementConsulte.
2366     $inst_service = $this->get_inst_service($this->valElementConsulte['service']);
2367     /**
2368     * Interface avec le référentiel ERP.
2369     *
2370     * (WS->ERP)[104] Demande d'instruction de dossier PC pour un ERP -> PC
2371     * Déclencheur :
2372     * - L'option ERP est activée
2373     * - Le dossier est de type PC
2374     * - Le formulaire d'ajout de consultation est validé avec un service
2375     * correspondant à un des services ERP pour avis
2376     */
2377     if ($this->f->is_option_referentiel_erp_enabled($om_collectivite) === true
2378     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__pc')
2379     && in_array($inst_service->getVal($inst_service->clePrimaire), explode(";", $this->f->getParameter('erp__services__avis__pc')))) {
2380     //
2381     $infos = array(
2382     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2383     "consultation" => $this->valF['consultation'],
2384 fmichon 4708 "date_envoi" => $this->valF['date_envoi'],
2385     "service_abrege" => $inst_service->getVal('abrege'),
2386     "service_libelle" => $inst_service->getVal('libelle'),
2387 softime 4740 "date_limite" => $this->valF['date_limite'],
2388 softime 11876 );
2389     //
2390     $ret = $this->f->send_message_to_referentiel_erp(104, $infos);
2391     if ($ret !== true) {
2392     $this->cleanMessage();
2393     $this->addToMessage(_("Une erreur s'est produite lors de la notification (104) du référentiel ERP. Contactez votre administrateur."));
2394     return false;
2395     }
2396     $this->addToMessage(_("Notification (104) du référentiel ERP OK."));
2397 mbroquet 3730 }
2398 softime 11876
2399     /**
2400     * Interface avec le référentiel ERP.
2401     *
2402     * (WS->ERP)[106] Consultation ERP pour conformité -> PC
2403     * Déclencheur :
2404     * - L'option ERP est activée
2405     * - Le dossier est de type PC
2406     * - Le formulaire d'ajout de consultation est validé avec un service
2407     * correspondant à un des services ERP pour conformité
2408     */
2409 fmichon 4708 //
2410 softime 11876 if ($this->f->is_option_referentiel_erp_enabled($om_collectivite) === true
2411     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__pc')
2412     && in_array($inst_service->getVal($inst_service->clePrimaire), explode(";", $this->f->getParameter('erp__services__conformite__pc')))) {
2413     //
2414     $infos = array(
2415     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2416     "consultation" => $this->valF['consultation'],
2417     "date_envoi" => $this->valF['date_envoi'],
2418     "service_abrege" => $inst_service->getVal('abrege'),
2419     "service_libelle" => $inst_service->getVal('libelle'),
2420     "date_limite" => $this->valF['date_limite'],
2421     );
2422     //
2423     $ret = $this->f->send_message_to_referentiel_erp(106, $infos);
2424     if ($ret !== true) {
2425     $this->cleanMessage();
2426     $this->addToMessage(_("Une erreur s'est produite lors de la notification (106) du référentiel ERP. Contactez votre administrateur."));
2427     return false;
2428     }
2429     $this->addToMessage(_("Notification (106) du référentiel ERP OK."));
2430 fmichon 4708 }
2431 mbroquet 3730 }
2432    
2433 fmichon 4708 /**
2434     * Finalisation du document PDF de consultation.
2435     */
2436 softime 11876 if ($this->valElementConsulte['generate_edition'] === 't') {
2437 softime 10573 $finaliserAjouter = $this->finaliserAjouter($id);
2438     if ($finaliserAjouter === false) {
2439     return false;
2440     }
2441     }
2442    
2443     /**
2444     * Gestion des tâches pour la dématérialisation
2445     */
2446     // Le service consulté fera sa réponse depuis Plat'AU
2447 softime 11876 if ($this->valElementConsulte['service_type'] === 'platau'
2448 softime 10808 && $this->f->is_type_dossier_platau($inst_di->getVal('dossier_autorisation')) === true
2449     && $inst_di->getVal('etat_transmission_platau') !== 'jamais_transmissible') {
2450 softime 10573 //
2451     $inst_task = $this->f->get_inst__om_dbform(array(
2452     "obj" => "task",
2453     "idx" => 0,
2454     ));
2455     $task_val = array(
2456     'type' => 'creation_consultation',
2457     'object_id' => $id,
2458     'dossier' => $val['dossier'],
2459     );
2460 softime 10968 // Change l'état de la tâche de notification en fonction de l'état de
2461     // transmission du dossier d'instruction
2462     if ($this->f->is_option_mode_service_consulte_enabled() === false
2463     && ($inst_di->getVal('etat_transmission_platau') == 'non_transmissible'
2464     || $inst_di->getVal('etat_transmission_platau') == 'transmis_mais_non_transmissible')) {
2465     //
2466     $task_val['state'] = $inst_task::STATUS_DRAFT;
2467     }
2468 softime 10573 $add_task = $inst_task->add_task(array('val' => $task_val));
2469     if ($add_task === false) {
2470     $this->addToMessage(sprintf('%s %s',
2471     __("Une erreur s'est produite lors de la création tâche."),
2472     __("Veuillez contacter votre administrateur.")
2473     ));
2474     $this->correct = false;
2475     return false;
2476     }
2477     }
2478    
2479     //
2480     return true;
2481 mbroquet 3730 }
2482    
2483 softime 10573 /**
2484     * TRIGGER - triggersupprimerapres.
2485     *
2486     * @return boolean
2487     */
2488     function triggersupprimerapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2489     parent::triggersupprimerapres($id, $dnu1, $val, $dnu2);
2490    
2491     /**
2492     * Gestion des tâches pour la dématérialisation
2493     */
2494     $inst_task_empty = $this->f->get_inst__om_dbform(array(
2495     "obj" => "task",
2496     "idx" => 0,
2497     ));
2498     $task_exists = $inst_task_empty->task_exists('creation_consultation', $id);
2499     if ($task_exists !== false) {
2500     $inst_task = $this->f->get_inst__om_dbform(array(
2501     "obj" => "task",
2502     "idx" => $task_exists,
2503     ));
2504     if ($inst_task->getVal('state') === $inst_task::STATUS_NEW || $inst_task->getVal('state') === $inst_task::STATUS_DRAFT) {
2505     $task_val = array(
2506     'state' => $inst_task::STATUS_CANCELED,
2507     );
2508     $update_task = $inst_task->update_task(array('val' => $task_val));
2509     if ($update_task === false) {
2510     $this->addToMessage(sprintf('%s %s',
2511     sprintf(__("Une erreur s'est produite lors de la modification de la tâche %."), $inst_task->getVal($inst_task->clePrimaire)),
2512     __("Veuillez contacter votre administrateur.")
2513     ));
2514     $this->correct = false;
2515     return false;
2516     }
2517     }
2518     }
2519    
2520     //
2521     return true;
2522     }
2523    
2524 mbroquet 3730 // =============================================
2525     // Ajout du fielset
2526     // Add fieldset
2527     // =============================================
2528     function setLayout(&$form, $maj){
2529    
2530 softime 6565 //Champs sur lequel s'ouvre le fieldset
2531     $form->setBloc('dossier','D',"");
2532     $form->setFieldset('dossier','D',_('Consultation'));
2533 mbroquet 3730
2534 softime 6565 //Champs sur lequel se ferme le fieldset
2535 softime 7366 $form->setFieldset('visible','F','');
2536     $form->setBloc('visible','F');
2537 mbroquet 3730
2538     // MODE - autre que AJOUTER alors on affiche un fieldset retour
2539     // d'avis
2540 softime 11876 if ($maj != 0 && $maj != 41) {
2541 mbroquet 3730
2542     //Champs sur lequel s'ouvre le fieldset
2543     $form->setBloc('date_reception','D',"");
2544     $form->setFieldset('date_reception','D',_('Retour d\'avis'));
2545    
2546     //Champs sur lequel se ferme le fieldset
2547     $form->setFieldset('lu','F','');
2548     $form->setBloc('lu','F');
2549    
2550     }
2551 softime 10573
2552     $form->setBloc('texte_fondement_avis','D',"");
2553     $form->setFieldset('texte_fondement_avis','D',_("Informations Plat'AU"));
2554     $form->setFieldset('qualite_auteur','F','');
2555     $form->setBloc('qualite_auteur','F');
2556 mbroquet 3730 }
2557    
2558     /** Surcharge de la methode retour afin de retourner sur la page de saisie de
2559     * code barre si besoin
2560     **/
2561     function retour($premier = 0, $recherche = "", $tricol = "") {
2562 softime 7996 $params ="obj=".$this->get_absolute_class_name();
2563 mbroquet 3730 if($this->getParameter("retour")=="form") {
2564     $params .= "&amp;idx=".$this->getParameter("idx");
2565     $params .= "&amp;action=3";
2566     }
2567     $params .= "&amp;premier=".$this->getParameter("premier");
2568     $params .= "&amp;tricol=".$this->getParameter("tricol");
2569     $params .= "&amp;advs_id=".$this->getParameter("advs_id");
2570     $params .= "&amp;valide=".$this->getParameter("valide");
2571     echo "\n<a class=\"retour\" ";
2572     echo "href=\"";
2573     //
2574    
2575     if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
2576 softime 7996 echo OM_ROUTE_FORM."&".$params;
2577 mbroquet 3730 } elseif($this->getParameter("retour")=="suivi_retours_de_consultation") {
2578 softime 7996 echo OM_ROUTE_FORM."&obj=consultation&idx=0&action=120";
2579 mbroquet 3730 } else {
2580 softime 7996 echo OM_ROUTE_TAB."&".$params;
2581 mbroquet 3730 }
2582     //
2583     echo "\"";
2584     echo ">";
2585     //
2586     echo _("Retour");
2587     //
2588     echo "</a>\n";
2589     }
2590    
2591     /**
2592     * Surcharge du bouton retour pour popup
2593     */
2594 softime 6929 function retoursousformulaire($idxformulaire = NULL, $retourformulaire = NULL, $val = NULL,
2595     $objsf = NULL, $premiersf = NULL, $tricolsf = NULL, $validation = NULL,
2596     $idx = NULL, $maj = NULL, $retour = NULL) {
2597 softime 8989 if ($this->getParameter("retourformulaire") === "demande_avis_encours") {
2598 mbroquet 3730 echo "\n<a class=\"retour\" ";
2599     echo "href=\"";
2600     echo "#";
2601     echo "\" ";
2602     echo ">";
2603     //
2604     echo _("Retour");
2605     //
2606     echo "</a>\n";
2607     } else {
2608     parent::retoursousformulaire($idxformulaire, $retourformulaire, $val,
2609     $objsf, $premiersf, $tricolsf, $validation,
2610     $idx, $maj, $retour);
2611     }
2612     }
2613 softime 8989
2614 mbroquet 3730 /**
2615 softime 8989 * SETTER_FORM - setSelect.
2616     *
2617     * @return void
2618 mbroquet 3730 */
2619 softime 8989 function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
2620 softime 11876 // TODO : ajouter un commentaire expliquant pourquoi l'appel a la méthode parent
2621     // est commenté et voir si on peut quand même appeler le parents pour réduire
2622     // le code de cette méthode
2623 softime 8989 //parent::setSelect($form, $maj);
2624 mbroquet 3730 // avis_consultation
2625 softime 8989 $this->init_select(
2626     $form,
2627     $this->f->db,
2628     $maj,
2629     null,
2630     "avis_consultation",
2631     $this->get_var_sql_forminc__sql("avis_consultation"),
2632     $this->get_var_sql_forminc__sql("avis_consultation_by_id"),
2633     true
2634     );
2635 mbroquet 3730 // service
2636 softime 8989 $sql_service = $this->get_var_sql_forminc__sql("service");
2637 mbroquet 3730 // si contexte DI, ou surcharge (mes_encours, mes_clotures...)
2638     $is_in_context_of_foreign_key = $this->is_in_context_of_foreign_key("dossier", $this->getParameter('retourformulaire'));
2639     if ($is_in_context_of_foreign_key == true) {
2640     // on recupÚre les services des multicollectivités et de celle du DI
2641 softime 7996 $di = $this->f->get_inst__om_dbform(array(
2642     "obj" => "dossier_instruction",
2643     "idx" => $this->getParameter('idxformulaire'),
2644     ));
2645 softime 8989 $sql_service = str_replace(
2646     '<collectivite_di>',
2647     $di->getVal("om_collectivite"),
2648     $this->get_var_sql_forminc__sql("service_by_collectivite_from_di")
2649     );
2650 mbroquet 3730
2651 softime 8593 // Si l'option référentiel ERP est activée, et que le type du
2652     // dossier d'instruction en contexte n'est pas autorisé à être
2653     // interfacé avec le référentiel ERP, alors les services à consulter
2654     // représentant les services ERP ne doivent pas être proposés dans
2655     // la liste à choix
2656     if ($this->f->is_option_referentiel_erp_enabled($di->getVal("om_collectivite")) === true
2657     && $this->f->getDATCode($di->getVal('dossier')) == $this->f-> getParameter ('erp__dossier__nature__pc')
2658     &&($this->f->getParameter('erp__dossier__type_di__pc')) !== null) {
2659     //
2660     $query_where_service_pc = "";
2661     $erp_di_pc = $this->f->getParameter('erp__dossier__type_di__pc');
2662     $erp_di_pc = explode(";", $erp_di_pc);
2663     $type_di = $di->getVal('dossier_instruction_type') ;
2664    
2665     if (in_array($type_di, $erp_di_pc) === false) {
2666     // Dans le cas d'une consultation pour avis
2667     // Si les identifiant des services à consulter sont définis
2668     // dans le paramètre erp__services__avis__pc
2669     if ($this->f->getParameter('erp__services__avis__pc') !== null) {
2670     $erp_service_pc = $this->f->getParameter('erp__services__avis__pc');
2671     $erp_service_pc = explode(";", $erp_service_pc);
2672    
2673     if (is_array($erp_service_pc) === true
2674     && empty($erp_service_pc) !== true) {
2675     //
2676     $query_where_service_pc .= sprintf(
2677     ' AND service.service NOT IN (%s) ',
2678     implode(", ", $erp_service_pc)
2679     );
2680     }
2681     }
2682    
2683     // Dans le cas d'une consultation pour conformité
2684     // Si les identifiant des services à consulter sont définis
2685     // dans le paramètre erp__services__avis__pc
2686     if ($this->f->getParameter('erp__services__conformite__pc') !== null) {
2687     $erp_service_pc = $this->f->getParameter('erp__services__conformite__pc');
2688     $erp_service_pc = explode(";", $erp_service_pc);
2689    
2690     if (is_array($erp_service_pc) === true
2691     && empty($erp_service_pc) !== true) {
2692     //
2693     $query_where_service_pc .= sprintf(
2694     ' AND service.service NOT IN (%s) ',
2695     implode(", ", $erp_service_pc)
2696     );
2697     }
2698     }
2699     }
2700    
2701     $sql_service = str_replace('ORDER BY', $query_where_service_pc."ORDER BY", $sql_service);
2702     }
2703 mbroquet 3730 }
2704 softime 8989 $this->init_select(
2705     $form,
2706     $this->f->db,
2707     $maj,
2708     null,
2709     "service",
2710     $sql_service,
2711     $this->get_var_sql_forminc__sql("service_by_id"),
2712     true
2713     );
2714 mbroquet 3730 //Seulement dans le cas d'un retour d'avis
2715 softime 8989 // Ajout des contraintes spécifiques pour l'ajout d'un fichier en retour de
2716     // consultation
2717     if ($this->getParameter("retourformulaire") == "demande_avis_encours"
2718     || $this->getParameter("maj") == 100
2719     || $this->getParameter("maj") == 91) {
2720 mbroquet 3730 // avis_consultation
2721 softime 8989 $this->init_select(
2722     $form,
2723     $this->f->db,
2724     1,
2725     null,
2726     "avis_consultation",
2727     $this->get_var_sql_forminc__sql("avis_consultation"),
2728     $this->get_var_sql_forminc__sql("avis_consultation_by_id"),
2729     true
2730     );
2731 mbroquet 3730 //Tableau des contraintes spécifiques
2732     $params = array(
2733     "constraint" => array(
2734     "size_max" => 2,
2735     "extension" => ".pdf"
2736     ),
2737     );
2738    
2739     $form->setSelect("fichier", $params);
2740     }
2741 softime 10573
2742     //
2743     if ($maj == 400) {
2744     $file = $this->f->storage->get($this->getVal('om_fichier_consultation'));
2745 softime 11418 $form->setSelect('live_preview', array(
2746     'base64' => base64_encode($file['file_content']),
2747     'mimetype' => $file['metadata']['mimetype'],
2748     'label' => 'document de consultation',
2749     'href' => sprintf(
2750     '../app/index.php?module=form&snippet=file&obj=consultation&champ=om_fichier_consultation&id=%1$s',
2751     $this->getVal($this->clePrimaire)
2752     )
2753     ));
2754 softime 10573 }
2755 softime 11876 // tiers_consulte
2756     $this->init_select(
2757     $form,
2758     $this->f->db,
2759     $maj,
2760     null,
2761     "motif_consultation",
2762     $this->get_var_sql_forminc__sql("tiers_consulte"),
2763     $this->get_var_sql_forminc__sql("tiers_consulte"),
2764     true
2765     );
2766     // Initialise le select en fonction de la valeur du champs categorie_tiers_consulte
2767     $form->setSelect(
2768     'tiers_consulte',
2769     $this->loadSelect_tiers_consulte($form, $maj, "categorie_tiers_consulte")
2770     );
2771     // motif_consultation
2772     $this->init_select(
2773     $form,
2774     $this->f->db,
2775     $maj,
2776     null,
2777     "motif_consultation",
2778     $this->get_var_sql_forminc__sql("motif_consultation"),
2779     $this->get_var_sql_forminc__sql("motif_consultation_by_id"),
2780     true
2781     );
2782     // categorie_tiers_consulte
2783     $this->init_select(
2784     $form,
2785     $this->f->db,
2786     $maj,
2787     null,
2788     "categorie_tiers_consulte",
2789     $this->get_var_sql_forminc__sql("categorie_tiers_consulte"),
2790     $this->get_var_sql_forminc__sql("categorie_tiers_consulte_by_id"),
2791     true
2792     );
2793 mbroquet 3730 }
2794    
2795     /**
2796 softime 11876 * Renvoie les valeurs possible des options du select "tiers_consulte".
2797     *
2798     * Ce select liste toutes les unités qui ont le type recherché
2799     * par l'unité parente.
2800     *
2801     * @param object $form Formulaire.
2802     * @param integer $maj Mode d'insertion.
2803     * @param string $champ Champ activant le filtre.
2804     *
2805     * @return array Tableau des valeurs possible du select.
2806     */
2807     protected function loadSelect_tiers_consulte($form, $maj, $champ) {
2808     // Initialisation du tableau de paramétrage du select :
2809     // - la clé 0 contient le tableau des valeurs,
2810     // - la clé 1 contient le tableau des labels,
2811     // - les clés des tableaux doivent faire correspondre le couple valeur/label.
2812     $contenu = array(
2813     0 => array('', ),
2814     1 => array(__('choisir')." ".__("tiers_consulte"), ),
2815     );
2816    
2817     // Récupération de l'identifiant de la catégorie du tiers consulté :
2818     // (par ordre de priorité)
2819     // - si une valeur est postée : c'est le cas lors du rechargement d'un
2820     // formulaire et que le select doit être peuplé par rapport aux
2821     // données saisies dans le formulaire,
2822     // - si la valeur est passée en paramètre : c'est le cas lors d'un
2823     // appel via le snippet filterselect qui effectue un
2824     // $object->setParameter($linkedField, $idx); lors d'un appel ajax
2825     // depuis le formulaire,
2826     // - si la valeur est dans l'enregistrement de la consultation sur laquelle on se
2827     // trouve : c'est le cas lors de la première ouverture du formulaire
2828     // en modification par exemple.
2829     $idCategorieTiers = "";
2830     if ($this->f->get_submitted_post_value($champ) !== null) {
2831     $idCategorieTiers = $this->f->get_submitted_post_value($champ);
2832     } elseif ($this->getParameter($champ) != "") {
2833     $idCategorieTiers = $this->getParameter($champ);
2834     } elseif (isset($form->val[$champ])) {
2835     $idCategorieTiers = $form->val[$champ];
2836     }
2837    
2838     // Si on ne récupère pas la categorie de tiers alors on ne peut pas savoir
2839     // le type attendu, on renvoi donc un select vide
2840     if ($idCategorieTiers == "" || ! is_numeric($idCategorieTiers)) {
2841     return $contenu;
2842     }
2843    
2844     // on récupère la liste de tous les tiers ayant la catégorie voulue
2845     $sql = sprintf(
2846     'SELECT
2847     tiers_consulte,
2848     CONCAT(abrege, \' - \', libelle) as libelle
2849     FROM
2850     %1$stiers_consulte
2851     WHERE
2852     categorie_tiers_consulte = %2$d
2853     ORDER BY
2854     tiers_consulte.libelle ASC',
2855     DB_PREFIXE,
2856     intval($idCategorieTiers)
2857     );
2858     $res = $this->f->db->query($sql);
2859     $this->addToLog("db->query(\"".$sql."\");", VERBOSE_MODE);
2860     $this->f->isDatabaseError($res);
2861    
2862     // Préparation du tableau de paramétrage du select avec les résultats récupérés
2863     while ($row = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
2864     $contenu[0][] = $row['tiers_consulte'];
2865     $contenu[1][] = $row['libelle'];
2866     }
2867    
2868     // on renvoie le tableau de paramètrage du select contenant la liste des unités
2869     // respectant la contrainte de type
2870     return $contenu;
2871     }
2872    
2873     /**
2874 mbroquet 3730 * Finalisation du document lors de l'ajout d'une consultation.
2875     *
2876 softime 5024 * @param integer $id_consult indentifiant de l'objet
2877 mbroquet 3730 */
2878 softime 5024 function finaliserAjouter($id_consult){
2879     //
2880     $this->begin_treatment(__METHOD__);
2881 mbroquet 3730
2882 softime 5024 //
2883     $admin_msg_error = _("Veuillez contacter votre administrateur.");
2884     $file_msg_error = _("La finalisation du document a échoué.")
2885     ." ".$admin_msg_error;
2886     $bdd_msg_error = _("Erreur de base de données.")
2887     ." ".$admin_msg_error;
2888 softime 5169 $log_msg_error = "Finalisation non enregistrée - id consultation = %s - uid fichier = %s";
2889 mbroquet 3730
2890 softime 5024 $uid = $this->file_finalizing($id_consult);
2891     // Comme pour le fonctionnement de l'envoi de mail,
2892     // Si échec cela ne stoppe pas la création de la consultation.
2893     // L'utilisateur en est tout de même informé dans l'IHM
2894     // et l'erreur est loguée.
2895     if ($uid == '' || $uid == 'OP_FAILURE' ) {
2896     $this->addToMessage($file_msg_error);
2897 softime 8989 $this->addToLog(sprintf($log_msg_error, $id_consult, $uid), VERBOSE_MODE);
2898 softime 5024 return $this->end_treatment(__METHOD__, true);
2899     }
2900 mbroquet 3730
2901 softime 5024 // Si succès mise à jour de la consultation
2902     $valF = array(
2903     "om_final_consultation" => true,
2904     "om_fichier_consultation" => $uid
2905     );
2906     //
2907 softime 8989 $res = $this->f->db->autoExecute(DB_PREFIXE.$this->table, $valF,
2908 softime 5024 DB_AUTOQUERY_UPDATE, $this->getCle($id_consult));
2909     //
2910     $this->addToLog(
2911     "finaliserAjouter() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id_consult)."\")",
2912     VERBOSE_MODE
2913     );
2914     //
2915     if ($this->f->isDatabaseError($res, true) === true) {
2916     $this->correct = false;
2917     // Remplacement du message de validation
2918     $this->msg = '';
2919     $this->addToMessage($bdd_msg_error);
2920     return $this->end_treatment(__METHOD__, false);
2921 mbroquet 3730 }
2922 softime 5024 //
2923     return $this->end_treatment(__METHOD__, true);
2924 mbroquet 3730 }
2925    
2926     /**
2927     * Finalisation du fichier.
2928     *
2929     * @param integer $id indentifiant de l'objet
2930     *
2931     * @return string uid du fichier finalisé
2932     */
2933     function file_finalizing($id){
2934 softime 11876 if ( ! ($pdf = $this->generate_pdf_consultation())) {
2935     $this->addToMessage(__('Erreur lors de la génération du document'));
2936     return '';
2937     }
2938 mbroquet 3730
2939     if(isset($this->valF["om_final_consultation"])) {
2940     $finalized = $this->valF["om_final_consultation"];
2941     } else {
2942     $finalized = $this->getVal("om_final_consultation");
2943     }
2944    
2945     // Métadonnées du document
2946     $metadata = array(
2947     'filename' => $pdf["filename"],
2948     'mimetype' => 'application/pdf',
2949     'size' => strlen($pdf["pdf_output"])
2950     );
2951    
2952     // Récupération des métadonnées calculées après validation
2953     $spe_metadata = $this->getMetadata("om_fichier_consultation");
2954    
2955     $metadata = array_merge($metadata, $spe_metadata);
2956    
2957 softime 10573 // Si le document a déjà été finalisé (vaudra 'f', ou false sinon)
2958 mbroquet 3730 if ( $finalized != '' ){
2959    
2960     // Met à jour le document mais pas son uid
2961     $uid = $this->f->storage->update(
2962     $this->getVal("om_fichier_consultation"), $pdf["pdf_output"], $metadata);
2963     }
2964     // Sinon, ajoute le document et récupère son uid
2965     else {
2966    
2967     // Stockage du PDF
2968 softime 10573 $uid = $this->f->storage->create($pdf["pdf_output"], $metadata, "from_content", $this->table.".om_fichier_consultation");
2969 mbroquet 3730 }
2970    
2971     return $uid;
2972    
2973     }
2974    
2975    
2976     /**
2977     * TREATMENT - finalize.
2978     *
2979     * Permet de finaliser un enregistrement
2980     *
2981     * @param array $val valeurs soumises par le formulaire
2982     * @param null $dnu1 @deprecated Ancienne ressource de base de données.
2983     * @param null $dnu2 @deprecated Ancien marqueur de débogage.
2984     *
2985     * @return boolean
2986     */
2987     function finalize($val = array(), &$dnu1 = null, $dnu2 = null) {
2988    
2989     // Cette méthode permet d'exécuter une routine en début des méthodes
2990     // dites de TREATMENT.
2991     $this->begin_treatment(__METHOD__);
2992    
2993     // Traitement de la finalisation
2994     $ret = $this->manage_finalizing("finalize", $val);
2995    
2996     // Si le traitement retourne une erreur
2997     if ($ret !== true) {
2998    
2999     // Termine le traitement
3000     $this->end_treatment(__METHOD__, false);
3001     }
3002    
3003     // Termine le traitement
3004     return $this->end_treatment(__METHOD__, true);
3005     }
3006    
3007     /**
3008     * TREATMENT - unfinalize.
3009     *
3010     * Permet de definaliser un enregistrement
3011     *
3012     * @param array $val valeurs soumises par le formulaire
3013     * @param null $dnu1 @deprecated Ancienne ressource de base de données.
3014     * @param null $dnu2 @deprecated Ancien marqueur de débogage.
3015     *
3016     * @return boolean
3017     */
3018     function unfinalize($val = array(), &$dnu1 = null, $dnu2 = null) {
3019    
3020     // Cette méthode permet d'exécuter une routine en début des méthodes
3021     // dites de TREATMENT.
3022     $this->begin_treatment(__METHOD__);
3023    
3024     // Traitement de la finalisation
3025     $ret = $this->manage_finalizing("unfinalize", $val);
3026    
3027     // Si le traitement retourne une erreur
3028     if ($ret !== true) {
3029    
3030     // Termine le traitement
3031     $this->end_treatment(__METHOD__, false);
3032     }
3033    
3034     // Termine le traitement
3035     return $this->end_treatment(__METHOD__, true);
3036     }
3037    
3038 softime 6565 /**
3039     * TREATMENT - manage_visibilite_consultation.
3040     *
3041     * Permet de masquer la consultation dans les éditions si elle est actuellement
3042     * affichée, ou de l'afficher si elle est actuellement masquée.
3043     *
3044     *
3045     * @param array $val valeurs soumises par le formulaire
3046     * @param null $dnu1 @deprecated Ancienne ressource de base de données.
3047     * @param null $dnu2 @deprecated Ancien marqueur de débogage.
3048     *
3049     * @return boolean
3050     */
3051     function manage_visibilite_consultation($val = array(), &$dnu1 = null, $dnu2 = null) {
3052 mbroquet 3730
3053 softime 6565 // Cette méthode permet d'exécuter une routine en début des méthodes
3054     // dites de TREATMENT.
3055     $this->begin_treatment(__METHOD__);
3056    
3057     // Recuperation de la valeur de la cle primaire de l'objet
3058     $id = $this->getVal($this->clePrimaire);
3059    
3060     if($this->getVal("visible") == 'f') {
3061     $valF["visible"] = true;
3062     }
3063     else {
3064     $valF["visible"] = false;
3065     }
3066    
3067     // Execution de la requête de modification des donnees de l'attribut
3068 softime 8989 $res = $this->f->db->autoExecute(DB_PREFIXE.$this->table, $valF,
3069 softime 6565 DB_AUTOQUERY_UPDATE, $this->getCle($id));
3070     $this->addToLog(
3071     "manage_visibilite_consultation() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id)."\")",
3072     VERBOSE_MODE
3073     );
3074    
3075     // Si une erreur survient
3076     if (database::isError($res, true)) {
3077    
3078     // Appel de la methode de recuperation des erreurs
3079     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
3080     $this->correct = false;
3081     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
3082     // Termine le traitement
3083     return $this->end_treatment(__METHOD__, false);
3084     }
3085    
3086     if ($valF["visible"] === false) {
3087     $this->addToMessage(_("La consultation est masquée dans les éditions."));
3088     }
3089     else {
3090     $this->addToMessage(_("La consultation est affichée dans les éditions."));
3091     }
3092     // Termine le traitement
3093     return $this->end_treatment(__METHOD__, true);
3094     }
3095    
3096    
3097 mbroquet 3730 /**
3098     * Finalisation des documents.
3099     *
3100     * @param string $mode finalize/unfinalize
3101     * @param array $val valeurs soumises par le formulaire
3102     */
3103     function manage_finalizing($mode = null, $val = array()) {
3104 softime 5024 //
3105     $this->begin_treatment(__METHOD__);
3106 mbroquet 3730
3107     // Recuperation de la valeur de la cle primaire de l'objet
3108 softime 5024 $id_consult = $this->getVal($this->clePrimaire);
3109 mbroquet 3730
3110 softime 5024 //
3111     $admin_msg_error = _("Veuillez contacter votre administrateur.");
3112     $file_msg_error = _("Erreur de traitement de fichier.")
3113     ." ".$admin_msg_error;
3114     $bdd_msg_error = _("Erreur de base de données.")
3115     ." ".$admin_msg_error;
3116 softime 5169 $log_msg_error = "Finalisation non enregistrée - id consultation = %s - uid fichier = %s";
3117 softime 5024
3118 mbroquet 3730 // Si on finalise le document
3119     if ($mode == "finalize") {
3120 softime 5024 //
3121     $etat = _('finalisation');
3122 mbroquet 3730 // Finalisation du fichier
3123 softime 5024 $uid = $this->file_finalizing($id_consult);
3124 mbroquet 3730 }
3125     //
3126     else {
3127 softime 5024 //
3128     $etat = _('définalisation');
3129 mbroquet 3730 //Récupération de l'uid du document finalisé
3130     $uid = $this->getVal("om_fichier_consultation");
3131     }
3132    
3133 softime 5024 // Si on définalise l'UID doit être défini
3134     // Si on finalise la création/modification du fichier doit avoir réussi
3135     if ($uid == '' || $uid == 'OP_FAILURE' ) {
3136     $this->correct = false;
3137     $this->addToMessage($file_msg_error);
3138 softime 8989 $this->addToLog(sprintf($log_msg_error, $id_consult, $uid), VERBOSE_MODE);
3139 softime 5024 return $this->end_treatment(__METHOD__, false);
3140     }
3141 mbroquet 3730
3142 softime 5024 foreach ($this->champs as $key => $value) {
3143     //
3144     $val[$value] = $this->val[$key];
3145     }
3146     $this->setvalF($val);
3147 mbroquet 3730
3148 softime 5024 // Verification de la validite des donnees
3149 softime 8989 $this->verifier($this->val);
3150 softime 5024 // Si les verifications precedentes sont correctes, on procede a
3151     // la modification, sinon on ne fait rien et on retourne une erreur
3152     if ($this->correct === true) {
3153 mbroquet 3730
3154 softime 5024 // Execution du trigger 'before' specifique au MODE 'update'
3155 softime 8989 $this->triggermodifier($id_consult, $this->f->db, $this->val, DEBUG);
3156 softime 5024 // Suppression de son message de validation
3157     $this->msg = '';
3158 mbroquet 3730
3159     //
3160 softime 9245 $valF = array();
3161 softime 5024 if ($mode == "finalize") {
3162     $valF["om_final_consultation"] = true;
3163 mbroquet 3730 } else {
3164 softime 5024 $valF["om_final_consultation"] = false;
3165 mbroquet 3730 }
3166 softime 5024 $valF["om_fichier_consultation"] = $uid;
3167    
3168     // Execution de la requête de modification des donnees de l'attribut
3169     // valF de l'objet dans l'attribut table de l'objet
3170 softime 8989 $res = $this->f->db->autoExecute(DB_PREFIXE.$this->table, $valF,
3171 softime 5024 DB_AUTOQUERY_UPDATE, $this->getCle($id_consult));
3172 mbroquet 3730 $this->addToLog(
3173 softime 5024 "finaliser() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id_consult)."\")",
3174     VERBOSE_MODE
3175 mbroquet 3730 );
3176 softime 5024 //
3177     if ($this->f->isDatabaseError($res, true) === true) {
3178     $this->correct = false;
3179     $this->addToMessage($bdd_msg_error);
3180     return $this->end_treatment(__METHOD__, false);
3181     }
3182     //
3183     $this->addToMessage(sprintf(_("La %s du document s'est effectuee avec succes."), $etat));
3184     return $this->end_treatment(__METHOD__, true);
3185 mbroquet 3730 }
3186 softime 5024 // L'appel de verifier() a déjà positionné correct à false
3187     // et défini un message d'erreur.
3188 softime 8989 $this->addToLog(sprintf($log_msg_error, $id_consult, $uid), DEBUG_MODE);
3189 softime 5024 return $this->end_treatment(__METHOD__, false);
3190 mbroquet 3730 }
3191    
3192     /**
3193     * Permet de récupérer l'édition de la consultation.
3194     *
3195     * @param string $output type de sortie
3196     *
3197     * @return string si le type de sortie est string, le contenu du pdf est retourné.
3198     */
3199     function generate_pdf_consultation() {
3200     if(isset($this->valF[$this->clePrimaire])) {
3201     $id = $this->valF[$this->clePrimaire];
3202     } else {
3203     $id = $this->getVal($this->clePrimaire);
3204     }
3205    
3206     // Requête qui récupère le type de consultation
3207 softime 11876 $sql = sprintf(
3208     '(SELECT
3209     id
3210     FROM
3211     %1$sservice
3212     LEFT JOIN %1$som_etat ON service.edition = om_etat.om_etat
3213     WHERE
3214     service = (
3215     SELECT
3216     service
3217     FROM
3218     %1$sconsultation
3219     WHERE
3220     consultation = %2$s))
3221     UNION
3222     (SELECT
3223     id
3224     FROM
3225     %1$smotif_consultation
3226     LEFT JOIN %1$som_etat ON motif_consultation.om_etat = om_etat.om_etat
3227     WHERE
3228     motif_consultation = (
3229     SELECT
3230     motif_consultation
3231     FROM
3232     %1$sconsultation
3233     WHERE
3234     consultation = %2$s))',
3235     DB_PREFIXE,
3236     $id
3237     );
3238 mbroquet 3730 $obj = $this->f->db->getone($sql);
3239     $this->f->addTolog(
3240     __FILE__." - ".__METHOD__." : db->getone(\"".$sql."\");",
3241     VERBOSE_MODE
3242     );
3243     if($this->f->isDatabaseError($obj, true)) {
3244     $this->addToMessage(_("Aucun document genere."));
3245     $this->addToMessage(_("Finalisation non enregistree"));
3246     return false;
3247     }
3248     $collectivite = $this->f->getCollectivite($this->get_dossier_collectivite());
3249    
3250     $pdf_output = $this->compute_pdf_output("etat", $obj, $collectivite, $id);
3251    
3252     return $pdf_output;
3253     }
3254    
3255     function get_dossier_collectivite() {
3256     if(isset($this->valF["dossier"])) {
3257     $dossier = $this->valF["dossier"];
3258 softime 11057 } elseif (! empty($this->f->get_submitted_get_value('dossier_instruction')) ) {
3259     $dossier = $this->f->get_submitted_get_value('dossier_instruction');
3260 mbroquet 3730 } else {
3261     $dossier = $this->getVal("dossier");
3262     }
3263    
3264 softime 11057 $sql = "SELECT om_collectivite FROM ".DB_PREFIXE."dossier WHERE dossier.dossier='".$this->f->db->escapeSimple($dossier)."'";
3265 mbroquet 3730 $collectivite = $this->f->db->getone($sql);
3266     $this->f->addTolog(
3267     __FILE__." - ".__METHOD__." : db->getone(\"".$sql."\");",
3268     VERBOSE_MODE
3269     );
3270     if($this->f->isDatabaseError($collectivite, true)) {
3271     $this->addToMessage(_("Aucun document genere."));
3272     $this->addToMessage(_("Finalisation non enregistree"));
3273     return false;
3274     }
3275     return $collectivite;
3276     }
3277    
3278     function view_consulter_pdf(){
3279 softime 10573 if ($this->getVal("om_final_consultation") == 't') {
3280 softime 7996 $lien = '../app/index.php?module=form&snippet=file&obj=consultation&'.
3281 mbroquet 3730 'champ=om_fichier_consultation&id='.$this->getVal($this->clePrimaire);
3282     header("Location: ".$lien);
3283     } else {
3284    
3285     $output = $this->generate_pdf_consultation();
3286     $this->expose_pdf_output($output["pdf_output"], $output["filename"]);
3287     }
3288     exit();
3289     }
3290 nhaye 5254
3291    
3292 mbroquet 3730 /**
3293     * Création du nom de fichier
3294     * @return string numéro de dossier d'instruction
3295     */
3296     protected function getFichierFilename() {
3297 softime 12433 $fichier = isset($this->valF['fichier']) === true && $this->valF['fichier'] !== null ? $this->valF['fichier'] : $this->getVal('fichier');
3298     $consultation_id = isset($this->valF[$this->clePrimaire]) === true && $this->valF[$this->clePrimaire] !== null ? $this->valF[$this->clePrimaire] : $this->getVal($this->clePrimaire);
3299 softime 10573 // Récupère l'extension sur le fichier temporaire
3300     $extension = '';
3301 softime 12433 if ($fichier !== null && $fichier !== '') {
3302     $temporary_test = explode("|", $fichier);
3303 softime 10573 if (isset($temporary_test[0]) === true && $temporary_test[0] == "tmp") {
3304     if (isset($temporary_test[1]) === true) {
3305     $tmp_filename = $this->f->storage->getFilename_temporary($temporary_test[1]);
3306     $extension = strtolower(substr($tmp_filename, strrpos($tmp_filename, '.')));
3307     }
3308     }
3309     }
3310 softime 12433 return "consultation_avis_".$consultation_id.$extension;
3311 mbroquet 3730 }
3312    
3313     /**
3314     * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
3315     * @return string numéro de dossier d'instruction
3316     */
3317 softime 10573 protected function getDossier($champ = null) {
3318 mbroquet 3730 if(empty($this->specificMetadata)) {
3319     $this->getSpecificMetadata();
3320     }
3321     return $this->specificMetadata->dossier;
3322     }
3323     /**
3324     * Récupération la version du dossier d'instruction à ajouter aux métadonnées
3325     * @return int Version
3326     */
3327     protected function getDossierVersion() {
3328     if(empty($this->specificMetadata)) {
3329     $this->getSpecificMetadata();
3330     }
3331     return $this->specificMetadata->version;
3332     }
3333     /**
3334     * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
3335     * @return string numéro de dossier d'autorisation
3336     */
3337     protected function getNumDemandeAutor() {
3338     if(empty($this->specificMetadata)) {
3339     $this->getSpecificMetadata();
3340     }
3341     return $this->specificMetadata->dossier_autorisation;
3342     }
3343     /**
3344     * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
3345     * @return date demande initiale
3346     */
3347     protected function getAnneemoisDemandeAutor() {
3348     if(empty($this->specificMetadata)) {
3349     $this->getSpecificMetadata();
3350     }
3351     return $this->specificMetadata->date_demande_initiale;
3352     }
3353     /**
3354     * Récupération du type de dossier d'instruction à ajouter aux métadonnées
3355     * @return string type de dossier d'instruction
3356     */
3357     protected function getTypeInstruction() {
3358     if(empty($this->specificMetadata)) {
3359     $this->getSpecificMetadata();
3360     }
3361     return $this->specificMetadata->dossier_instruction_type;
3362     }
3363     /**
3364     * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
3365     * @return string avis
3366     */
3367     protected function getStatutAutorisation() {
3368     if(empty($this->specificMetadata)) {
3369     $this->getSpecificMetadata();
3370     }
3371     return $this->specificMetadata->statut;
3372     }
3373     /**
3374     * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
3375     * @return string type d'autorisation
3376     */
3377     protected function getTypeAutorisation() {
3378     if(empty($this->specificMetadata)) {
3379     $this->getSpecificMetadata();
3380     }
3381     return $this->specificMetadata->dossier_autorisation_type;
3382     }
3383     /**
3384     * Récupération de la date d'ajout de document à ajouter aux métadonnées
3385     * @return date de l'évènement
3386     */
3387     protected function getDateEvenementDocument() {
3388     return date("Y-m-d");
3389     }
3390     /**
3391     * Récupération du groupe d'instruction à ajouter aux métadonnées
3392     * @return string Groupe d'instruction
3393     */
3394     protected function getGroupeInstruction() {
3395     if(empty($this->specificMetadata)) {
3396     $this->getSpecificMetadata();
3397     }
3398     return $this->specificMetadata->groupe_instruction;
3399     }
3400     /**
3401     * Récupération du type de document à ajouter aux métadonnées
3402     * @return string Type de document
3403     */
3404     protected function getTitle() {
3405 softime 8989 if ($this->getParameter("retourformulaire") == "demande_avis_encours") {
3406 mbroquet 3730 return 'Retour de consultation';
3407     } else {
3408     return 'Demande de consultation';
3409     }
3410     }
3411    
3412 softime 6272
3413 mbroquet 3730 /**
3414 softime 6272 * Récupération du champ ERP du dossier d'instruction.
3415     *
3416     * @return boolean
3417     */
3418     public function get_concerne_erp() {
3419     //
3420     if(empty($this->specificMetadata)) {
3421     $this->getSpecificMetadata();
3422     }
3423     //
3424     return $this->specificMetadata->erp;
3425     }
3426    
3427    
3428     /**
3429 mbroquet 3730 * Cette méthode permet de stocker en attribut toutes les métadonnées
3430     * nécessaire à l'ajout d'un document.
3431     */
3432     public function getSpecificMetadata() {
3433     if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
3434     $dossier = $this->valF["dossier"];
3435     } else {
3436     $dossier = $this->getVal("dossier");
3437     }
3438     //Requête pour récupérer les informations essentiels sur le dossier d'instruction
3439     $sql = "SELECT dossier.dossier as dossier,
3440     dossier_autorisation.dossier_autorisation as dossier_autorisation,
3441     to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
3442     dossier_instruction_type.code as dossier_instruction_type,
3443     etat_dossier_autorisation.libelle as statut,
3444     dossier_autorisation_type.code as dossier_autorisation_type,
3445 softime 6272 groupe.code as groupe_instruction,
3446     CASE WHEN dossier.erp IS TRUE
3447     THEN 'true'
3448     ELSE 'false'
3449     END as erp
3450 mbroquet 3730 FROM ".DB_PREFIXE."dossier
3451     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
3452     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
3453     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
3454     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
3455     LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
3456     ON dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
3457     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
3458     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
3459     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
3460     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
3461     LEFT JOIN ".DB_PREFIXE."groupe
3462     ON dossier_autorisation_type.groupe = groupe.groupe
3463     WHERE dossier.dossier = '".$dossier."'";
3464 softime 8989 $res = $this->f->db->query($sql);
3465 mbroquet 3730 $this->f->addToLog("obj/document_numerise.class.php : db->query(".$sql.")", VERBOSE_MODE);
3466     if ( database::isError($res)){
3467     die();
3468     }
3469    
3470     //Le résultat est récupéré dans un objet
3471     $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
3472    
3473     //Si il y a un résultat
3474     if ($row !== null) {
3475    
3476 fmichon 3892 // Instrance de la classe dossier
3477     $inst_dossier = $this->get_inst_dossier($dossier);
3478    
3479     // Insère l'attribut version à l'objet
3480     $row->version = $inst_dossier->get_dossier_instruction_version();
3481    
3482 mbroquet 3730 //Alors on créé l'objet dossier_instruction
3483     $this->specificMetadata = $row;
3484    
3485     }
3486     }
3487    
3488     /**
3489     *
3490     * @return boolean
3491     */
3492     function is_instructeur(){
3493    
3494     //Si l'utilisateur est un instructeur
3495     if ($this->f->isUserInstructeur()){
3496     return true;
3497     }
3498     return false;
3499     }
3500    
3501     function is_editable(){
3502 softime 10573 // Impossible de modifier si la consultation est liée à un service Plat'AU
3503     $inst_service = $this->get_inst_service($this->getVal('service'));
3504     if ($inst_service->getVal('service_type') !== null
3505     && $inst_service->getVal('service_type') === 'platau') {
3506     //
3507     return false;
3508     }
3509    
3510 softime 5024 // Si bypass
3511 mbroquet 3730 if ($this->f->can_bypass("consultation", "modifier")){
3512     return true;
3513     }
3514    
3515 softime 6565 // Tester si le dossier est cloturé ,
3516     // et si l'instructeur est de la même division
3517     if ($this->is_instructeur_from_division_dossier() === true and
3518     $this->is_dossier_instruction_not_closed() === true) {
3519     return true;
3520 mbroquet 3730 }
3521     return false;
3522     }
3523    
3524     function is_deletable(){
3525 softime 10573 // Impossible de supprimer si la tâche Plat'AU de la consultation a été consommée
3526     $inst_task_empty = $this->f->get_inst__om_dbform(array(
3527     "obj" => "task",
3528     "idx" => 0,
3529     ));
3530     $task_exists = $inst_task_empty->task_exists('creation_consultation', $this->getVal($this->clePrimaire));
3531     if ($task_exists !== false) {
3532     $inst_task = $this->f->get_inst__om_dbform(array(
3533     "obj" => "task",
3534     "idx" => $task_exists,
3535     ));
3536     if ($inst_task->getVal('state') === $inst_task::STATUS_PENDING
3537     || $inst_task->getVal('state') === $inst_task::STATUS_DONE) {
3538     //
3539     return false;
3540     }
3541     }
3542    
3543 softime 6565 // Suppression possible pour l'instructeur de la division si pas d'avis
3544     if ($this->is_dossier_instruction_not_closed() === true &&
3545     $this->is_instructeur_from_division_dossier() === true &&
3546 softime 5024 $this->getVal("avis_consultation") == "" &&
3547 softime 6565 $this->getVal('fichier') == ""
3548 softime 5024 ){
3549 mbroquet 3730 return true;
3550     }
3551 softime 6565
3552     // Si un avis a été rendu il faut que l'utilisateur ai le droit
3553     // specifique de suppression avec avis rendu et le bypass de division
3554     if ($this->getVal("avis_consultation") != "" or $this->getVal('fichier') != "") {
3555    
3556     if ($this->f->can_bypass("consultation", "supprimer") and
3557     $this->f->isAccredited("consultation_supprimer_avec_avis_rendu") == true){
3558     return true;
3559     }
3560     } else {
3561     // Si pas d'avis rendu, le bypass suffit
3562     if ($this->f->can_bypass("consultation", "supprimer")){
3563     return true;
3564     }
3565     }
3566    
3567 mbroquet 3730 return false;
3568     }
3569    
3570     function is_multiaddable(){
3571    
3572     if ($this->f->can_bypass("consultation", "ajouter")){
3573     return true;
3574     }
3575    
3576 softime 6565 if ($this->is_instructeur_from_division_dossier() === true){
3577 mbroquet 3730 return true;
3578     }
3579     return false;
3580     }
3581    
3582     function is_markable(){
3583    
3584     if($this->f->can_bypass("consultation", "modifier_lu")){
3585     return true;
3586     }
3587    
3588 softime 6565 if ($this->is_instructeur_from_division_dossier() === true){
3589 mbroquet 3730 return true;
3590     }
3591     return false;
3592     }
3593    
3594 softime 6565 // Si la consultation est visible alors on peut afficher le lien pour la masquer
3595     function is_visible() {
3596     if($this->getVal("visible") == 't') {
3597     return true;
3598     }
3599     return false;
3600     }
3601    
3602     // Si la consultation n'est pas visible alors on peut afficher le lien pour l'afficher
3603     function is_not_visible() {
3604     if($this->getVal("visible") == 'f') {
3605     return true;
3606     }
3607     return false;
3608     }
3609    
3610 mbroquet 3730 function is_finalizable(){
3611 softime 11876 // Vérifie si la variable contenant les informations nécessaire pour la
3612     // vérification est initialisé et si ce n'est pas le cas elle est initialisée
3613     if ($this->valElementConsulte == array()) {
3614     if (! $this->set_val_element_consulte()) {
3615     return false;
3616     }
3617     }
3618 softime 10573
3619 softime 11876 // Vérifie si la génération d'édition est disponible pour le service / motif
3620     if ($this->valElementConsulte['generate_edition'] !== 't') {
3621 softime 10573 return false;
3622     }
3623    
3624 mbroquet 3730 if($this->f->can_bypass("consultation", "finaliser")){
3625     return true;
3626     }
3627    
3628 softime 6565 if ($this->is_instructeur_from_division_dossier() === true &&
3629     $this->is_dossier_instruction_not_closed() === true){
3630 mbroquet 3730 return true;
3631     }
3632    
3633     return false;
3634     }
3635    
3636     function is_unfinalizable(){
3637 softime 11876 // Vérifie si la variable contenant les informations nécessaire pour la
3638     // vérification est initialisé et si ce n'est pas le cas elle est initalisée
3639     if ($this->valElementConsulte == array()) {
3640     if (! $this->set_val_element_consulte()) {
3641     return false;
3642     }
3643     }
3644 softime 10573
3645 softime 11876 if ($this->valElementConsulte['generate_edition'] !== 't') {
3646 softime 10573 return false;
3647     }
3648 softime 11876
3649     if ($this->valElementConsulte['service_type'] === 'platau') {
3650 softime 10573 return false;
3651     }
3652    
3653 mbroquet 3730 if($this->f->can_bypass("consultation", "definaliser")){
3654     return true;
3655     }
3656    
3657 softime 6565 if ($this->is_instructeur_from_division_dossier() === true &&
3658     $this->is_dossier_instruction_not_closed() === true){
3659 mbroquet 3730 return true;
3660     }
3661    
3662     return false;
3663     }
3664 fmichon 3892
3665 softime 12433 /**
3666     * Cette méthode vérifie à l'aide d'une requête sql si des tiers ont été paramétrés.
3667     * Si c'est le cas on renvoie true sinon renvoie false.
3668     *
3669     * Si la requête échoue la méthode renverra false.
3670     *
3671     * @return boolean
3672     */
3673     public function is_tiers_parametre() {
3674     // Récupère la requête de remplissage de la liste de sélection des tiers
3675     // consulté
3676     $sql = $this->get_var_sql_forminc__sql_tiers_consulte();
3677     // Récupère les résultats de la requête. Si on ne récupère pas de résultats ou
3678     // que la requête est en erreur renvoie false.
3679     $res = $this->f->db->query($sql);
3680     $this->addToLog(__METHOD__.'(): db->query("'.$sql.'");', VERBOSE_MODE);
3681     if ($this->f->isDatabaseError($res) !== false) {
3682     return false;
3683     }
3684     if ($res->numrows() == 0) {
3685     return false;
3686     }
3687     // Si on a des résultats alors des tiers ont été paramétrés
3688     return true;
3689     }
3690    
3691 softime 6565 /*
3692 softime 7366 * CONDITION - can_show_or_hide_in_edition
3693     *
3694     * Vérifie que l'utilisateur possède la permission bypass.
3695     * Vérifie que l'utilisateur est un instructeur, qu'il fait partie de la
3696     * division du dossier et que le dossier n'est pas clôturé.
3697     *
3698     * Cette méthode est identique aux conditions dans consultation.inc.php
3699     * permettant l'affichage des actions depuis le listing des consultations.
3700     * Il est nécessaire que cette méthode ainsi que la condition if restent
3701     * concordants en tout point afin que le comportement des actions soit
3702     * identique depuis le formulaire et depuis le listing.
3703     *
3704     * @return boolean
3705     *
3706     */
3707     function can_show_or_hide_in_edition() {
3708    
3709     //
3710     if ($this->f->can_bypass("consultation", "visibilite_dans_edition") === true){
3711     return true;
3712     }
3713    
3714     //
3715     if ($this->is_instructeur_from_division_dossier() === true and
3716     $this->is_dossier_instruction_not_closed() === true) {
3717     return true;
3718     }
3719     return false;
3720     }
3721    
3722     /*
3723 softime 6565 * CONDITION - can_user_access_dossier_contexte_ajout
3724 fmichon 3892 *
3725 softime 6565 * Vérifie que l'utilisateur a bien accès au dossier d'instruction passé dans le
3726     * formulaire d'ajout.
3727     * Cette méthode vérifie que l'utilisateur est lié au groupe du dossier, et si le
3728     * dossier est confidentiel qu'il a accès aux confidentiels de ce groupe.
3729     *
3730 fmichon 3892 */
3731 softime 6565 function can_user_access_dossier_contexte_ajout() {
3732    
3733     ($this->f->get_submitted_get_value('idxformulaire') !== null ? $id_dossier =
3734     $this->f->get_submitted_get_value('idxformulaire') : $id_dossier = "");
3735 fmichon 3892 //
3736 softime 6565 if ($id_dossier !== "") {
3737 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
3738     "obj" => "dossier_instruction",
3739     "idx" => $id_dossier,
3740     ));
3741 softime 6565 //
3742     return $dossier->can_user_access_dossier();
3743     }
3744     return false;
3745 fmichon 3892 }
3746    
3747 softime 6565 /*
3748     * CONDITION - can_user_access_dossier_contexte_modification
3749     *
3750     * Vérifie que l'utilisateur a bien accès au dossier lié à la consultation.
3751     * Cette méthode vérifie que l'utilisateur est lié au groupe du dossier, et si le
3752     * dossier est confidentiel qu'il a accès aux confidentiels de ce groupe.
3753     *
3754     */
3755     function can_user_access_dossier_contexte_modification() {
3756 fmichon 3892
3757 softime 6565 ($this->f->get_submitted_get_value('idxformulaire') !== null ? $id_dossier =
3758     $this->f->get_submitted_get_value('idxformulaire') : $id_dossier = "");
3759    
3760     if ($id_dossier != "") {
3761 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
3762     "obj" => "dossier",
3763     "idx" => $id_dossier,
3764     ));
3765 softime 6565 //
3766     return $dossier->can_user_access_dossier();
3767     }
3768     return false;
3769     }
3770    
3771 softime 7717 /**
3772 softime 10573 * [is_viewable description]
3773     * @return boolean [description]
3774     */
3775     function is_viewable() {
3776 softime 11876 // Vérifie si la variable contenant les informations nécessaire pour la
3777     // vérification est initialisé et si ce n'est pas le cas elle est initalisée
3778     if ($this->valElementConsulte == array()) {
3779     if (! $this->set_val_element_consulte()) {
3780     return false;
3781     }
3782     }
3783     if ($this->valElementConsulte['generate_edition'] !== 't') {
3784 softime 10573 return false;
3785     }
3786    
3787     return true;
3788     }
3789    
3790     /**
3791 softime 7717 * Indique si la redirection vers le lien de retour est activée ou non.
3792     *
3793     * L'objectif de cette méthode est de permettre d'activer ou de désactiver
3794     * la redirection dans certains contextes.
3795     *
3796     * @return boolean
3797     */
3798     function is_back_link_redirect_activated() {
3799     //
3800     if ($this->getParameter("maj") == 100) {
3801     //
3802     return false;
3803     }
3804     //
3805     return true;
3806     }
3807    
3808 softime 10573 // XXX WIP
3809     public function get_json_data() {
3810     $val = array_combine($this->champs, $this->val);
3811     foreach ($val as $key => $value) {
3812     $val[$key] = strip_tags($value);
3813     }
3814     return $val;
3815     }
3816 softime 6565
3817 softime 10573 protected function getDocumentType($champ = null) {
3818     $serviceId = $this->getVal('service');
3819     if (empty($serviceId) && isset($this->valF['service'])) {
3820     $serviceId = $this->valF['service'];
3821     }
3822     if (! empty($serviceId)) {
3823     $service = $this->f->findObjectById('service', $serviceId);
3824     if (! empty($service)) {
3825     return __("Consultation").':'.$service->getVal('libelle');
3826     }
3827     }
3828     return parent::getDocumentType();
3829     }
3830 softime 7996
3831 softime 11585 /**
3832     * Affiche la page de téléchargement du document de la notification.
3833     *
3834     * @param boolean $content_only Affiche le contenu seulement.
3835     *
3836     * @return void
3837     */
3838     public function view_telecharger_document_anonym() {
3839     // Par défaut on considère qu'on va afficher le formulaire
3840     $idx = 0;
3841     // Flag d'erreur
3842     $error = false;
3843     // Message d'erreur
3844     $message = '';
3845    
3846     // Paramètres GET : récupération de la clé d'accès
3847     $cle_acces_document = $this->f->get_submitted_get_value('key');
3848     $cle_acces_document = $this->f->db->escapeSimple($cle_acces_document);
3849     // Vérification de l'existence de la clé et récupération de l'uid du fichier
3850     $uidFichier = $this->getUidDocumentConsultationWithKey($cle_acces_document);
3851     if ($uidFichier != null) {
3852     // Récupération du document
3853     $file = $this->f->storage->get($uidFichier);
3854    
3855     // Headers
3856     header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
3857     header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date dans le passé
3858     header("Content-Type: ".$file['metadata']['mimetype']);
3859     header("Accept-Ranges: bytes");
3860     header("Content-Disposition: inline; filename=\"".$file['metadata']['filename']."\";" );
3861     // Affichage du document
3862     echo $file['file_content'];
3863    
3864     // Récupération de la date de premier accès et maj du suivi uniquement
3865     // si la date de 1er accès n'a pas encore été remplis
3866     $inst_notif = $this->getInstanceNotificationWithKey($cle_acces_document);
3867     if ($inst_notif->getVal('date_premier_acces') == null ||
3868     $inst_notif->getVal('date_premier_acces') == '') {
3869     $notif_val = array();
3870     foreach ($inst_notif->champs as $champ) {
3871     $notif_val[$champ] = $inst_notif->getVal($champ);
3872     }
3873     $notif_val['date_premier_acces'] = date("d/m/Y H:i:s");
3874     $notif_val['statut'] = 'vu';
3875     $notif_val['commentaire'] = 'Le document a été vu';
3876     $suivi_notif = $inst_notif->modifier($notif_val);
3877     }
3878    
3879     } else {
3880     // Page vide 404
3881     printf('Ressource inexistante');
3882     header('HTTP/1.0 404 Not Found');
3883     }
3884     }
3885     /**
3886     * Récupère une clé et renvoie l'uid du document liée à cette
3887     * clé. Si la clé n'existe pas renvoie null.
3888     *
3889     * @param string $cleGen clé dont on cherche l'instruction
3890     * @return integer|null
3891     */
3892     protected function getUidDocumentConsultationWithKey($cleGen) {
3893     $query = sprintf(
3894     'SELECT
3895     consultation.fichier
3896     FROM
3897     %1$sinstruction_notification_document
3898     LEFT JOIN %1$sconsultation ON instruction_notification_document.document_id = consultation.consultation
3899     WHERE
3900     instruction_notification_document.cle = \'%2$s\'',
3901     DB_PREFIXE,
3902     $this->f->db->escapeSimple($cleGen)
3903     );
3904    
3905     $res = $this->f->db->getOne($query);
3906     $this->addToLog(__METHOD__.": db->getOne(\"".$query."\");", VERBOSE_MODE);
3907     $this->f->isDatabaseError($res);
3908     return $res;
3909     }
3910    
3911     /**
3912     * Récupère une clé, fait une requête pour récupérer l'id de la notification liée a cette clé.
3913     * Récupère l'instance de instruction_notification dont l'id a été récupéré et la renvoie.
3914     *
3915     * @param string $cleGen
3916     * @return instruction_notification
3917     */
3918     protected function getInstanceNotificationWithKey($key) {
3919     // TODO : refactoriser pour éviter d'avoir a réecrire cette méthode dans chaque classe
3920     // a laquelle la consultation anonyme des documents est associée
3921     $sql = sprintf(
3922     "SELECT
3923     instruction_notification
3924     FROM
3925     %1\$sinstruction_notification_document
3926     WHERE
3927     cle = '%2\$s'",
3928     DB_PREFIXE,
3929     $this->f->db->escapeSimple($key)
3930     );
3931     $res = $this->f->db->getOne($sql);
3932     $this->addToLog(__METHOD__.": db->getOne(\"".$sql."\");", VERBOSE_MODE);
3933     $this->f->isDatabaseError($res);
3934    
3935     // Récupération de l'instance de notification
3936     $instNotif = $this->f->get_inst__om_dbform(array(
3937     "obj" => "instruction_notification",
3938     "idx" => $res,
3939     ));
3940     return $instNotif;
3941     }
3942    
3943    
3944 softime 11876 /**
3945     * Vérifie la validité des valeurs en mode CREATE & UPDATE.
3946     * (Surcharge)
3947     *
3948     * Les consultations pouvant être des consultations
3949     * de tiers ou de service selon le type de consultations
3950     * certain champs ne doivent pas être null.
3951     * Consultation tiers :
3952     * - categorie tiers consulte
3953     * - tiers consulte
3954     * - motif consultation
3955     * Consultation service :
3956     * - service
3957     * Cette surcharge permet de vérifier que selon le contexte
3958     * les valeurs voulues sont bien renseigné.
3959     *
3960     * @param array $val Tableau des valeurs brutes.
3961     * @param null &$dnu1 @deprecated Ne pas utiliser.
3962     * @param null $dnu2 @deprecated Ne pas utiliser.
3963     *
3964     * @return void
3965     */
3966     function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
3967     // Ajout des champs concerné à la liste des champs requis
3968     // pour que la vérification de présence des champs requis se fasse aussi
3969     // sur ces champs
3970     $maj = $this->getParameter("maj");
3971     $champsNonNull = array();
3972     // Action liées à l'ajout et la modification de consultation d'un service
3973     if ($maj == '0' || ($maj == '1' && ($this->getVal('service') != null && $this->getVal('service') != ''))) {
3974     $champsNonNull = array('service');
3975     } elseif ($maj == '41'|| ($maj == '1' && ($this->getVal('tiers_consulte') != null && $this->getVal('tiers_consulte') != ''))) {
3976     // Actions liées à l'ajout et la modification de consultation d'un tiers
3977     $champsNonNull = array('categorie_tiers_consulte', 'tiers_consulte', 'motif_consultation');
3978     }
3979     foreach($champsNonNull as $champs) {
3980     $this->required_field[] = $champs;
3981     }
3982     parent::verifier($val, $dnu1, $dnu2);
3983     }
3984    
3985    
3986 softime 10573 }// fin classe

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26