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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 12433 - (hide annotations)
Thu Jun 23 17:40:44 2022 UTC (2 years, 7 months ago) by softime
File size: 167409 byte(s)
* Fusion de la branche d'intégration 5.11.0-develop vers le trunk

1 mbroquet 3730 <?php
2 softime 7996 /**
3     * DBFORM - 'consultation' - Surcharge gen.
4     *
5     * @package openads
6     * @version SVN : $Id: consultation.class.php 6046 2016-02-26 15:27:06Z fmichon $
7     */
8    
9 mbroquet 3730 require_once ("../gen/obj/consultation.class.php");
10    
11     class consultation extends consultation_gen {
12    
13     // Champs contenant les UID des fichiers
14     var $abstract_type = array(
15     "fichier" => "file",
16     "om_fichier_consultation" => "file",
17     );
18    
19     var $metadata = array(
20     "om_fichier_consultation" => array(
21     "dossier" => "getDossier",
22     "dossier_version" => "getDossierVersion",
23     "numDemandeAutor" => "getNumDemandeAutor",
24     "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
25     "typeInstruction" => "getTypeInstruction",
26     "statutAutorisation" => "getStatutAutorisation",
27     "typeAutorisation" => "getTypeAutorisation",
28     "dateEvenementDocument" => "getDateEvenementDocument",
29     "groupeInstruction" => 'getGroupeInstruction',
30     "title" => 'getTitle',
31 softime 6272 'concerneERP' => 'get_concerne_erp',
32 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 mbroquet 3730 $form->setType('date_retour', 'date');
1971     $form->setType('lu', 'hidden');
1972 softime 6565 $form->setType('visible', 'hidden');
1973 mbroquet 3730 $form->setType("avis_consultation", "select");
1974     $form->setType("motivation", "textarea");
1975     $form->setType('fichier', 'upload');
1976 softime 5024 // Gestion du type du widget sur le champ fichier
1977     if($this->getVal("fichier") == "" OR
1978     $this->f->isAccredited(array('consultation', 'consultation_modifier_fichier'), 'OR')) {
1979     // Si il n'y a jamais eu de fichier enregistré ou que
1980     // l'utilisateur a spécifiquement les droits pour modifier
1981     // un fichier déjà enregistré alors on positionne un type
1982     // de widget modifiable
1983 softime 8989 $contexts = array(
1984     "demande_avis_encours",
1985     "dossier",
1986     "dossier_contentieux_mes_infractions",
1987     "dossier_contentieux_mes_recours",
1988     "dossier_contentieux_tous_recours",
1989     "dossier_contentieux_toutes_infractions",
1990     "dossier_instruction",
1991     "dossier_instruction_mes_clotures",
1992     "dossier_instruction_mes_encours",
1993     "dossier_instruction_tous_clotures",
1994     "dossier_instruction_tous_encours",
1995     "dossier_qualifier",
1996     );
1997     if (in_array($this->getParameter("retourformulaire"), $contexts) === true) {
1998 softime 5024 $form->setType('fichier', 'upload2');
1999     } else {
2000     $form->setType('fichier', 'upload');
2001     }
2002     } else {
2003     // Si non on affiche uniquement le nom du fichier
2004     $form->setType('fichier', 'filestaticedit');
2005     }
2006 mbroquet 3730 }
2007     //// On cache la clé primaire
2008     //$form->setType('consultation', 'hidden');
2009     //
2010 softime 8989 if ($this->is_in_context_of_foreign_key("dossier", $this->getParameter("retourformulaire")) === true) {
2011 mbroquet 3730 $form->setType('dossier_libelle', 'hidden');
2012     }
2013    
2014     $form->setType('code_barres', 'hidden');
2015    
2016     //Cache les champs pour la finalisation
2017     $form->setType('om_fichier_consultation', 'hidden');
2018     $form->setType('om_final_consultation', 'hidden');
2019    
2020 softime 10573 if($maj == 50 OR $maj == 51 OR $maj == 60 OR $maj == 70 OR $maj == 120 OR $maj == 130 OR $maj == 140) {
2021 mbroquet 3730 foreach ($this->champs as $value) {
2022     $form->setType($value, 'hidden');
2023     }
2024     }
2025 softime 10573
2026     if ($maj == 400) {
2027     foreach ($this->champs as $champ) {
2028     $form->setType($champ, 'hidden');
2029     }
2030 softime 11418 $form->setType('live_preview', 'previsualiser');
2031 softime 10573 }
2032 mbroquet 3730 }
2033    
2034 softime 11876 /**
2035     * Permet de définir l’attribut “onchange” sur chaque champ.
2036     *
2037     * @param object &$form Formumaire
2038     * @param integer $maj Mode d'insertion
2039     */
2040     function setOnchange(&$form, $maj) {
2041     parent::setOnchange($form, $maj);
2042    
2043     // En cas de changement du champ categorie_tiers_consulte, appel
2044     // la méthode javascript filterSelect qui utilise (via l'URL) le
2045     // snippet_filterselect. Le snippet renvoie ensuite un json contenant la valeur du champ.
2046     // Cette valeur est ensuite utilisé pour récupèrer la liste des
2047     // tiers_consulte ayant la categorie sélectionné
2048     // Uniquement dans le formulaire d'ajout d'une consultation a un tiers
2049     if ($maj == '41') {
2050     $form->setOnchange(
2051     'categorie_tiers_consulte',
2052     "filterSelect(
2053     this.value,
2054     'tiers_consulte',
2055     'categorie_tiers_consulte',
2056     'consultation'
2057     )"
2058     );
2059     }
2060     }
2061    
2062     /**
2063     * Cette méthode permet de calculer la date limite en fonction de la date
2064     * de réception et du délai de consultation.
2065     *
2066     * Met a jour les valeurs du formulaire en mettant a jour l'attribut valF.
2067     *
2068     * @param
2069     * @return void
2070     */
2071 mbroquet 3730 function calculDateLimite() {
2072 softime 11876 // Vérifie si la variable contenant les informations nécessaire au calcul
2073     // de la date limite a bien été setter et si ce n'est pas le cas fait
2074     // appel au setter.
2075     if ($this->valElementConsulte == array()) {
2076     $this->set_val_element_consulte();
2077     }
2078    
2079 mbroquet 3730 // mise a jour instruction avec evenement [return delay]
2080 softime 8989 if (array_key_exists("date_reception", $this->valF)
2081     && $this->valF["date_reception"] != "") {
2082 softime 11876 // Calcul de la date limite a partir du délai et du type de délai
2083     $this->valF["date_limite"] = $this->f->mois_date(
2084     $this->valF["date_reception"],
2085     $this->valElementConsulte['delai'],
2086     "+",
2087     $this->valElementConsulte['delai_type']
2088     );
2089 mbroquet 3730 //
2090 softime 11876 if ($this->valElementConsulte['delai_type'] == "mois") {
2091 mbroquet 3730 $delai_type_trad = _("mois");
2092     } else {
2093     $delai_type_trad = _("jour(s)");
2094     }
2095     //
2096     $this->addToMessage(_("delai")." ".
2097 softime 11876 _("retour")." ".$this->valElementConsulte['delai']." ".$delai_type_trad." -> ".
2098 mbroquet 3730 _("retour")." ".date("d/m/Y", strtotime($this->valF["date_limite"])));
2099     }
2100     }
2101    
2102 softime 8989 /**
2103 softime 11876 * Identifie si la consultation est une consultation de tiers ou de service
2104     * a partir des valeurs envoyées dans le formulaire ou alors des valeurs
2105     * issue de la consultation.
2106     * Si il existe une valeur pour le champ service, le type de consultation sera setter
2107     * a "service".
2108     * Si il existe une valeur pour le champ tiers_consulte, le type de consultation sera setter
2109     * a "tiers_consulte"
2110     * Si aucun type de consultation n'a pu être défini renvoie false.
2111     *
2112     * Une fois le type de consultation récupéré effectue une requête pour récupérer
2113     * toutes les infos nécessaires pour créer / mettre à jour la consultation.
2114     * Set la variable valElementConsulte avec les valeurs ainsi récupérées.
2115     *
2116     * @return boolean indique si les informations ont été correctement récupérées
2117     */
2118     protected function set_val_element_consulte() {
2119     $typesConsultationPossible = array('service', 'tiers_consulte');
2120     $typeConsultation = null;
2121     // Pour tous les types de consultation possible vérifie si l'élément
2122     // consulté a bien une valeur enregistrée pour la consultation.
2123     // Si c'est le cas la consultation est de ce type
2124     // UNe fois le type de consultation récupéré il n'y a plus besoin de tester
2125     // les autres types car une consultation n'a qu'un seul type (tier ou service)
2126     foreach ($typesConsultationPossible as $typePossible) {
2127     if (isset($this->valF[$typePossible]) &&
2128     $this->valF[$typePossible] != null &&
2129     $this->valF[$typePossible] != '') {
2130     $typeConsultation = $typePossible;
2131     $idElement = $this->valF[$typePossible];
2132     break;
2133     } elseif ($this->getVal($typePossible) != null && $this->getVal($typePossible) != '') {
2134     $typeConsultation = $typePossible;
2135     $idElement = $this->getVal($typePossible);
2136     break;
2137     }
2138     }
2139    
2140     // Renvoie une erreur si le type de consultation n'a pas pu être récupéré
2141     if ($typeConsultation == null) {
2142     $this->addToMessage(__('Erreur : le type de consultation n\'a pas pu être défini'));
2143     return false;
2144     }
2145     $this->typeConsultation = $typeConsultation;
2146     // Récuperation les infos lié à l'élement consulté de la consultation.
2147     $instance = $this->f->get_inst__om_dbform(array(
2148     'obj' => $typeConsultation,
2149     'idx' => $idElement
2150     ));
2151     $champARecupere = array(
2152     $typeConsultation,
2153     'libelle',
2154     'abrege',
2155     'generate_edition',
2156     'service_type',
2157     'delai',
2158     'delai_type',
2159     'notification_email',
2160     'email'
2161     );
2162     if ($typeConsultation == 'tiers_consulte') {
2163     // POur les tiers consulte, il faut récupérer le motif de consultation
2164     $idMotif = isset($this->valF['motif_consultation']) &&
2165     $this->valF['motif_consultation'] != null &&
2166     $this->valF['motif_consultation'] != '' ?
2167     $this->valF['motif_consultation'] :
2168     $this->getVal('motif_consultation');
2169     if ($idMotif == null || $idMotif == '') {
2170     $this->addToMessage(__('Erreur : le motif de consultation n\'a pas pu être récupéré'));
2171     return false;
2172     }
2173     $instanceMotif = $this->f->get_inst__om_dbform(array(
2174     'obj' => 'motif_consultation',
2175     'idx' => $idMotif
2176     ));
2177     foreach($champARecupere as $champ) {
2178     // On cherche les informations voulus dans la table tiers consulte et
2179     // si il n'existe pas c'est qu'ils sont dans la table motif_consultatio,
2180     if ($instance->getVal($champ) != null) {
2181     $valElementConsulte[$champ] = $instance->getVal($champ);
2182     } else {
2183     $valElementConsulte[$champ] = $instanceMotif->getVal($champ);
2184     }
2185     }
2186     // Le champ contenant les adresses mails n'a pas le même nom pour les
2187     // tiers et les services. Pour les tiers il faut donc récupèrer les mails
2188     // dans 'liste_diffusion'
2189     $valElementConsulte['email'] = $instance->getVal('liste_diffusion');
2190     } else {
2191     foreach($champARecupere as $champ) {
2192     $valElementConsulte[$champ] = $instance->getVal($champ);
2193     }
2194     }
2195     $this->valElementConsulte = $valElementConsulte;
2196     return true;
2197     }
2198    
2199     /**
2200 softime 8989 * TRIGGER - triggerajouter.
2201 softime 11876 * Réalise le calcul de la date limite de consultation et
2202 softime 8989 *
2203     * @return boolean
2204     */
2205     function triggerajouter($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2206     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2207 softime 11876 // Set le type de consultation (var typeConsultation) et les valeurs
2208     // issues de l'élement consulte (var valElementConsulte)
2209     if ($this->set_val_element_consulte() == false) {
2210     $this->addToMessage(__('Erreur : les informations de l\'élement consulté n\'ont pas pu être récupéré.'));
2211     return false;
2212     }
2213 mbroquet 3730 $this->calculDateLimite();
2214 softime 10573
2215 softime 11876 if ($this->valElementConsulte['generate_edition'] === 't') {
2216 softime 10573 // Identifiant du type de courrier
2217     $idTypeCourrier = '12';
2218     $idCourrier = str_pad($this->valF["consultation"], 10, "0", STR_PAD_LEFT);
2219     // Code barres
2220     $this->valF["code_barres"] = $idTypeCourrier . $idCourrier;
2221     }
2222 mbroquet 3730 }
2223    
2224 softime 8989 /**
2225     * TRIGGER - triggermodifier.
2226     *
2227     * @return boolean
2228     */
2229     function triggermodifier($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2230     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2231 softime 11876 // Set le type de consultation (var typeConsultation) et les valeurs
2232     // issues de l'élement consulte (var valElementConsulte)
2233     if ($this->set_val_element_consulte() == false) {
2234     $this->addToMessage(__('Erreur : les informations de l\'élement consulté n\'ont pas pu être récupéré.'));
2235     return false;
2236     }
2237    
2238     // Si la date de réception a été modifiée on recalcul les délais à partir de la nouvelle date
2239 softime 10573 if (array_key_exists("date_reception", $this->valF) === true
2240     && $this->getVal('date_reception') !== $this->valF['date_reception']) {
2241     $this->calculDateLimite();
2242     }
2243 mbroquet 3730 }
2244    
2245 fmichon 4708 /**
2246     * TRIGGER - triggerajouterapres.
2247     *
2248     * - Notification par courrier du service consulté
2249     * - Interface avec le référentiel ERP [104]
2250     * - Interface avec le référentiel ERP [106]
2251     * - Finalisation du document PDF de consultation
2252     *
2253     * @return boolean
2254     */
2255 softime 8989 function triggerajouterapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2256     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2257 softime 11876 // Set le type de consultation (var typeConsultation) et les valeurs
2258     // issues de l'élement consulte (var valElementConsulte)
2259     if ($this->set_val_element_consulte() == false) {
2260     $this->addToMessage(__('Erreur : les informations de l\'élement consulté n\'ont pas pu être récupéré.'));
2261     return false;
2262     }
2263 fmichon 4708 // On a besoin de l'instance du dossier lié à la consultation
2264     $inst_di = $this->get_inst_dossier($this->valF['dossier']);
2265    
2266     /**
2267     * Notification par courriel du service consulté.
2268     *
2269     * Si il y a un problème lors de l'envoi du courriel, on prévient l'utilisateur
2270     * mais on ne bloque pas le traitement. Le courriel de notification n'a pas de
2271     * de caractère critique.
2272     */
2273 softime 11876 // On a besoin du nom de l'élement consulté pour l'affichage des messages
2274     $tradTypeConsultation = str_replace('_', ' ', $this->typeConsultation);
2275     if ($this->valElementConsulte['notification_email'] == 't') {
2276     // vérifie si il y a bien des adresses mail enregistrées dans la liste de diffusion
2277     // et si ce n'est pas le cas préviens l'utilisateur que l'envoi du mail n'est pas possible
2278     if ($this->valElementConsulte['email'] == '') {
2279 softime 10207 $this->addToMessage(sprintf(
2280 softime 11876 __("Erreur, il n'y a aucune adresse mail dans la liste de diffusion du %s (%s) %s. Envoi du mail non effectué."),
2281     $tradTypeConsultation,
2282     $this->valElementConsulte['abrege'],
2283     $this->valElementConsulte["libelle"]
2284 softime 10207 ));
2285 softime 11876 } else {
2286     // Composition du titre du courriel
2287     $title = sprintf(
2288     '%s %s',
2289     _("Consultation de ".$tradTypeConsultation." : dossier no"),
2290     $inst_di->getVal($inst_di->clePrimaire)
2291     );
2292     $title = iconv("UTF-8", "CP1252", $title);
2293     // Composition du corps du courriel
2294     $corps = sprintf(
2295     '%s %s<br/>%s %s %s %s %s<br/>%s <a href=\'%s\'>%s</a> %s <a href=\'%s\'>%s</a>',
2296     _("Votre ".$tradTypeConsultation." est consulte concernant le dossier no"),
2297     $inst_di->getVal($inst_di->clePrimaire),
2298     _("Il concerne le terrain situe a l'adresse :"),
2299     $inst_di->getVal('terrain_adresse_voie_numero'),
2300     $inst_di->getVal('terrain_adresse_voie'),
2301     $inst_di->getVal('terrain_adresse_code_postal'),
2302     $inst_di->getVal('terrain_adresse_localite'),
2303     _("Vous pouvez y acceder et rendre votre avis a l'adresse"),
2304     // Adresse interne, si l'adresse termine par &idx= alors on ajoute l'identifiant de la consultation
2305     $this->f->getParameter('services_consultes_lien_interne').((substr($this->f->getParameter('services_consultes_lien_interne'), -5) == "&idx=") ? $this->valF['consultation'] : ""),
2306     _("Lien interne"),
2307     _("ou"),
2308     // Adresse externe, si l'adresse termine par &idx= alors on ajoute l'identifiant de la consultation
2309     $this->f->getParameter('services_consultes_lien_externe').((substr($this->f->getParameter('services_consultes_lien_externe'), -5) == "&idx=") ? $this->valF['consultation'] : ""),
2310     _("Lien externe")
2311     );
2312     $corps = iconv("UTF-8", "CP1252", $corps);
2313     // Récupération des destinataire
2314     $email_list = explode("\r\n", $this->valElementConsulte['email']);
2315     $nb_destinataire = count($email_list);
2316     $nb_success = 0;
2317     $nb_error = 0;
2318     foreach ($email_list as $email) {
2319     // Envoi du mail avec message de retour
2320     if ($this->f->sendMail($title, $corps, iconv("UTF-8", "CP1252", $email))) {
2321     $this->f->addToLog(__METHOD__."() : senMail envoi de la notification au ".$tradTypeConsultation." effectué", VERBOSE_MODE);
2322     $nb_success++;
2323     } else {
2324     $this->f->addToLog(__METHOD__."() : ERROR - sendMail envoi de la notification au ".$tradTypeConsultation." n'a pas pu aboutir", DEBUG_MODE);
2325     $nb_error++;
2326     }
2327     }
2328     if ($nb_success != 0) {
2329     $this->addToMessage(
2330     sprintf(
2331     __("Envoi d'un mail de notification au %s (%s) %s."),
2332     $tradTypeConsultation,
2333     $this->valElementConsulte['abrege'],
2334     $this->valElementConsulte["libelle"]
2335     ));
2336     }
2337     if ($nb_error > 0 && $nb_error != $nb_destinataire) {
2338     $this->addToMessage(sprintf(
2339     __("Erreur lors de l'envoi du mail de notification à au moins un destinataire du %s (%s) %s."),
2340     $tradTypeConsultation,
2341     $this->valElementConsulte['abrege'],
2342     $this->valElementConsulte["libelle"]
2343     ));
2344     }
2345     if ($nb_error == $nb_destinataire) {
2346     $this->addToMessage(sprintf(
2347     __("Erreur lors de l'envoi du mail de notification aux destinataires du %s (%s) %s."),
2348     $tradTypeConsultation,
2349     $this->valElementConsulte['abrege'],
2350     $this->valElementConsulte["libelle"]
2351     ));
2352     }
2353 softime 10207 }
2354 mbroquet 3730 }
2355 fmichon 4708
2356 softime 7366 // Récupère la collectivité du dossier d'instruction lié à la
2357     // consultation
2358     $om_collectivite = $this->get_dossier_collectivite();
2359    
2360 softime 11876 // /!\ pour l'instant l'interface avec le référentiel erp concerne
2361     // uniquement les consultations faite à des service
2362     if ($this->typeConsultation === 'service') {
2363     // Récupération de l'instance du service en utilisant l'id du service stocké
2364     // dans valElementConsulte.
2365     $inst_service = $this->get_inst_service($this->valElementConsulte['service']);
2366     /**
2367     * Interface avec le référentiel ERP.
2368     *
2369     * (WS->ERP)[104] Demande d'instruction de dossier PC pour un ERP -> PC
2370     * Déclencheur :
2371     * - L'option ERP est activée
2372     * - Le dossier est de type PC
2373     * - Le formulaire d'ajout de consultation est validé avec un service
2374     * correspondant à un des services ERP pour avis
2375     */
2376     if ($this->f->is_option_referentiel_erp_enabled($om_collectivite) === true
2377     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__pc')
2378     && in_array($inst_service->getVal($inst_service->clePrimaire), explode(";", $this->f->getParameter('erp__services__avis__pc')))) {
2379     //
2380     $infos = array(
2381     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2382     "consultation" => $this->valF['consultation'],
2383 fmichon 4708 "date_envoi" => $this->valF['date_envoi'],
2384     "service_abrege" => $inst_service->getVal('abrege'),
2385     "service_libelle" => $inst_service->getVal('libelle'),
2386 softime 4740 "date_limite" => $this->valF['date_limite'],
2387 softime 11876 );
2388     //
2389     $ret = $this->f->send_message_to_referentiel_erp(104, $infos);
2390     if ($ret !== true) {
2391     $this->cleanMessage();
2392     $this->addToMessage(_("Une erreur s'est produite lors de la notification (104) du référentiel ERP. Contactez votre administrateur."));
2393     return false;
2394     }
2395     $this->addToMessage(_("Notification (104) du référentiel ERP OK."));
2396 mbroquet 3730 }
2397 softime 11876
2398     /**
2399     * Interface avec le référentiel ERP.
2400     *
2401     * (WS->ERP)[106] Consultation ERP pour conformité -> PC
2402     * Déclencheur :
2403     * - L'option ERP est activée
2404     * - Le dossier est de type PC
2405     * - Le formulaire d'ajout de consultation est validé avec un service
2406     * correspondant à un des services ERP pour conformité
2407     */
2408 fmichon 4708 //
2409 softime 11876 if ($this->f->is_option_referentiel_erp_enabled($om_collectivite) === true
2410     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__pc')
2411     && in_array($inst_service->getVal($inst_service->clePrimaire), explode(";", $this->f->getParameter('erp__services__conformite__pc')))) {
2412     //
2413     $infos = array(
2414     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2415     "consultation" => $this->valF['consultation'],
2416     "date_envoi" => $this->valF['date_envoi'],
2417     "service_abrege" => $inst_service->getVal('abrege'),
2418     "service_libelle" => $inst_service->getVal('libelle'),
2419     "date_limite" => $this->valF['date_limite'],
2420     );
2421     //
2422     $ret = $this->f->send_message_to_referentiel_erp(106, $infos);
2423     if ($ret !== true) {
2424     $this->cleanMessage();
2425     $this->addToMessage(_("Une erreur s'est produite lors de la notification (106) du référentiel ERP. Contactez votre administrateur."));
2426     return false;
2427     }
2428     $this->addToMessage(_("Notification (106) du référentiel ERP OK."));
2429 fmichon 4708 }
2430 mbroquet 3730 }
2431    
2432 fmichon 4708 /**
2433     * Finalisation du document PDF de consultation.
2434     */
2435 softime 11876 if ($this->valElementConsulte['generate_edition'] === 't') {
2436 softime 10573 $finaliserAjouter = $this->finaliserAjouter($id);
2437     if ($finaliserAjouter === false) {
2438     return false;
2439     }
2440     }
2441    
2442     /**
2443     * Gestion des tâches pour la dématérialisation
2444     */
2445     // Le service consulté fera sa réponse depuis Plat'AU
2446 softime 11876 if ($this->valElementConsulte['service_type'] === 'platau'
2447 softime 10808 && $this->f->is_type_dossier_platau($inst_di->getVal('dossier_autorisation')) === true
2448     && $inst_di->getVal('etat_transmission_platau') !== 'jamais_transmissible') {
2449 softime 10573 //
2450     $inst_task = $this->f->get_inst__om_dbform(array(
2451     "obj" => "task",
2452     "idx" => 0,
2453     ));
2454     $task_val = array(
2455     'type' => 'creation_consultation',
2456     'object_id' => $id,
2457     'dossier' => $val['dossier'],
2458     );
2459 softime 10968 // Change l'état de la tâche de notification en fonction de l'état de
2460     // transmission du dossier d'instruction
2461     if ($this->f->is_option_mode_service_consulte_enabled() === false
2462     && ($inst_di->getVal('etat_transmission_platau') == 'non_transmissible'
2463     || $inst_di->getVal('etat_transmission_platau') == 'transmis_mais_non_transmissible')) {
2464     //
2465     $task_val['state'] = $inst_task::STATUS_DRAFT;
2466     }
2467 softime 10573 $add_task = $inst_task->add_task(array('val' => $task_val));
2468     if ($add_task === false) {
2469     $this->addToMessage(sprintf('%s %s',
2470     __("Une erreur s'est produite lors de la création tâche."),
2471     __("Veuillez contacter votre administrateur.")
2472     ));
2473     $this->correct = false;
2474     return false;
2475     }
2476     }
2477    
2478     //
2479     return true;
2480 mbroquet 3730 }
2481    
2482 softime 10573 /**
2483     * TRIGGER - triggersupprimerapres.
2484     *
2485     * @return boolean
2486     */
2487     function triggersupprimerapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2488     parent::triggersupprimerapres($id, $dnu1, $val, $dnu2);
2489    
2490     /**
2491     * Gestion des tâches pour la dématérialisation
2492     */
2493     $inst_task_empty = $this->f->get_inst__om_dbform(array(
2494     "obj" => "task",
2495     "idx" => 0,
2496     ));
2497     $task_exists = $inst_task_empty->task_exists('creation_consultation', $id);
2498     if ($task_exists !== false) {
2499     $inst_task = $this->f->get_inst__om_dbform(array(
2500     "obj" => "task",
2501     "idx" => $task_exists,
2502     ));
2503     if ($inst_task->getVal('state') === $inst_task::STATUS_NEW || $inst_task->getVal('state') === $inst_task::STATUS_DRAFT) {
2504     $task_val = array(
2505     'state' => $inst_task::STATUS_CANCELED,
2506     );
2507     $update_task = $inst_task->update_task(array('val' => $task_val));
2508     if ($update_task === false) {
2509     $this->addToMessage(sprintf('%s %s',
2510     sprintf(__("Une erreur s'est produite lors de la modification de la tâche %."), $inst_task->getVal($inst_task->clePrimaire)),
2511     __("Veuillez contacter votre administrateur.")
2512     ));
2513     $this->correct = false;
2514     return false;
2515     }
2516     }
2517     }
2518    
2519     //
2520     return true;
2521     }
2522    
2523 mbroquet 3730 // =============================================
2524     // Ajout du fielset
2525     // Add fieldset
2526     // =============================================
2527     function setLayout(&$form, $maj){
2528    
2529 softime 6565 //Champs sur lequel s'ouvre le fieldset
2530     $form->setBloc('dossier','D',"");
2531     $form->setFieldset('dossier','D',_('Consultation'));
2532 mbroquet 3730
2533 softime 6565 //Champs sur lequel se ferme le fieldset
2534 softime 7366 $form->setFieldset('visible','F','');
2535     $form->setBloc('visible','F');
2536 mbroquet 3730
2537     // MODE - autre que AJOUTER alors on affiche un fieldset retour
2538     // d'avis
2539 softime 11876 if ($maj != 0 && $maj != 41) {
2540 mbroquet 3730
2541     //Champs sur lequel s'ouvre le fieldset
2542     $form->setBloc('date_reception','D',"");
2543     $form->setFieldset('date_reception','D',_('Retour d\'avis'));
2544    
2545     //Champs sur lequel se ferme le fieldset
2546     $form->setFieldset('lu','F','');
2547     $form->setBloc('lu','F');
2548    
2549     }
2550 softime 10573
2551     $form->setBloc('texte_fondement_avis','D',"");
2552     $form->setFieldset('texte_fondement_avis','D',_("Informations Plat'AU"));
2553     $form->setFieldset('qualite_auteur','F','');
2554     $form->setBloc('qualite_auteur','F');
2555 mbroquet 3730 }
2556    
2557     /** Surcharge de la methode retour afin de retourner sur la page de saisie de
2558     * code barre si besoin
2559     **/
2560     function retour($premier = 0, $recherche = "", $tricol = "") {
2561 softime 7996 $params ="obj=".$this->get_absolute_class_name();
2562 mbroquet 3730 if($this->getParameter("retour")=="form") {
2563     $params .= "&amp;idx=".$this->getParameter("idx");
2564     $params .= "&amp;action=3";
2565     }
2566     $params .= "&amp;premier=".$this->getParameter("premier");
2567     $params .= "&amp;tricol=".$this->getParameter("tricol");
2568     $params .= "&amp;advs_id=".$this->getParameter("advs_id");
2569     $params .= "&amp;valide=".$this->getParameter("valide");
2570     echo "\n<a class=\"retour\" ";
2571     echo "href=\"";
2572     //
2573    
2574     if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
2575 softime 7996 echo OM_ROUTE_FORM."&".$params;
2576 mbroquet 3730 } elseif($this->getParameter("retour")=="suivi_retours_de_consultation") {
2577 softime 7996 echo OM_ROUTE_FORM."&obj=consultation&idx=0&action=120";
2578 mbroquet 3730 } else {
2579 softime 7996 echo OM_ROUTE_TAB."&".$params;
2580 mbroquet 3730 }
2581     //
2582     echo "\"";
2583     echo ">";
2584     //
2585     echo _("Retour");
2586     //
2587     echo "</a>\n";
2588     }
2589    
2590     /**
2591     * Surcharge du bouton retour pour popup
2592     */
2593 softime 6929 function retoursousformulaire($idxformulaire = NULL, $retourformulaire = NULL, $val = NULL,
2594     $objsf = NULL, $premiersf = NULL, $tricolsf = NULL, $validation = NULL,
2595     $idx = NULL, $maj = NULL, $retour = NULL) {
2596 softime 8989 if ($this->getParameter("retourformulaire") === "demande_avis_encours") {
2597 mbroquet 3730 echo "\n<a class=\"retour\" ";
2598     echo "href=\"";
2599     echo "#";
2600     echo "\" ";
2601     echo ">";
2602     //
2603     echo _("Retour");
2604     //
2605     echo "</a>\n";
2606     } else {
2607     parent::retoursousformulaire($idxformulaire, $retourformulaire, $val,
2608     $objsf, $premiersf, $tricolsf, $validation,
2609     $idx, $maj, $retour);
2610     }
2611     }
2612 softime 8989
2613 mbroquet 3730 /**
2614 softime 8989 * SETTER_FORM - setSelect.
2615     *
2616     * @return void
2617 mbroquet 3730 */
2618 softime 8989 function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
2619 softime 11876 // TODO : ajouter un commentaire expliquant pourquoi l'appel a la méthode parent
2620     // est commenté et voir si on peut quand même appeler le parents pour réduire
2621     // le code de cette méthode
2622 softime 8989 //parent::setSelect($form, $maj);
2623 mbroquet 3730 // avis_consultation
2624 softime 8989 $this->init_select(
2625     $form,
2626     $this->f->db,
2627     $maj,
2628     null,
2629     "avis_consultation",
2630     $this->get_var_sql_forminc__sql("avis_consultation"),
2631     $this->get_var_sql_forminc__sql("avis_consultation_by_id"),
2632     true
2633     );
2634 mbroquet 3730 // service
2635 softime 8989 $sql_service = $this->get_var_sql_forminc__sql("service");
2636 mbroquet 3730 // si contexte DI, ou surcharge (mes_encours, mes_clotures...)
2637     $is_in_context_of_foreign_key = $this->is_in_context_of_foreign_key("dossier", $this->getParameter('retourformulaire'));
2638     if ($is_in_context_of_foreign_key == true) {
2639     // on recupÚre les services des multicollectivités et de celle du DI
2640 softime 7996 $di = $this->f->get_inst__om_dbform(array(
2641     "obj" => "dossier_instruction",
2642     "idx" => $this->getParameter('idxformulaire'),
2643     ));
2644 softime 8989 $sql_service = str_replace(
2645     '<collectivite_di>',
2646     $di->getVal("om_collectivite"),
2647     $this->get_var_sql_forminc__sql("service_by_collectivite_from_di")
2648     );
2649 mbroquet 3730
2650 softime 8593 // Si l'option référentiel ERP est activée, et que le type du
2651     // dossier d'instruction en contexte n'est pas autorisé à être
2652     // interfacé avec le référentiel ERP, alors les services à consulter
2653     // représentant les services ERP ne doivent pas être proposés dans
2654     // la liste à choix
2655     if ($this->f->is_option_referentiel_erp_enabled($di->getVal("om_collectivite")) === true
2656     && $this->f->getDATCode($di->getVal('dossier')) == $this->f-> getParameter ('erp__dossier__nature__pc')
2657     &&($this->f->getParameter('erp__dossier__type_di__pc')) !== null) {
2658     //
2659     $query_where_service_pc = "";
2660     $erp_di_pc = $this->f->getParameter('erp__dossier__type_di__pc');
2661     $erp_di_pc = explode(";", $erp_di_pc);
2662     $type_di = $di->getVal('dossier_instruction_type') ;
2663    
2664     if (in_array($type_di, $erp_di_pc) === false) {
2665     // Dans le cas d'une consultation pour avis
2666     // Si les identifiant des services à consulter sont définis
2667     // dans le paramètre erp__services__avis__pc
2668     if ($this->f->getParameter('erp__services__avis__pc') !== null) {
2669     $erp_service_pc = $this->f->getParameter('erp__services__avis__pc');
2670     $erp_service_pc = explode(";", $erp_service_pc);
2671    
2672     if (is_array($erp_service_pc) === true
2673     && empty($erp_service_pc) !== true) {
2674     //
2675     $query_where_service_pc .= sprintf(
2676     ' AND service.service NOT IN (%s) ',
2677     implode(", ", $erp_service_pc)
2678     );
2679     }
2680     }
2681    
2682     // Dans le cas d'une consultation pour conformité
2683     // Si les identifiant des services à consulter sont définis
2684     // dans le paramètre erp__services__avis__pc
2685     if ($this->f->getParameter('erp__services__conformite__pc') !== null) {
2686     $erp_service_pc = $this->f->getParameter('erp__services__conformite__pc');
2687     $erp_service_pc = explode(";", $erp_service_pc);
2688    
2689     if (is_array($erp_service_pc) === true
2690     && empty($erp_service_pc) !== true) {
2691     //
2692     $query_where_service_pc .= sprintf(
2693     ' AND service.service NOT IN (%s) ',
2694     implode(", ", $erp_service_pc)
2695     );
2696     }
2697     }
2698     }
2699    
2700     $sql_service = str_replace('ORDER BY', $query_where_service_pc."ORDER BY", $sql_service);
2701     }
2702 mbroquet 3730 }
2703 softime 8989 $this->init_select(
2704     $form,
2705     $this->f->db,
2706     $maj,
2707     null,
2708     "service",
2709     $sql_service,
2710     $this->get_var_sql_forminc__sql("service_by_id"),
2711     true
2712     );
2713 mbroquet 3730 //Seulement dans le cas d'un retour d'avis
2714 softime 8989 // Ajout des contraintes spécifiques pour l'ajout d'un fichier en retour de
2715     // consultation
2716     if ($this->getParameter("retourformulaire") == "demande_avis_encours"
2717     || $this->getParameter("maj") == 100
2718     || $this->getParameter("maj") == 91) {
2719 mbroquet 3730 // avis_consultation
2720 softime 8989 $this->init_select(
2721     $form,
2722     $this->f->db,
2723     1,
2724     null,
2725     "avis_consultation",
2726     $this->get_var_sql_forminc__sql("avis_consultation"),
2727     $this->get_var_sql_forminc__sql("avis_consultation_by_id"),
2728     true
2729     );
2730 mbroquet 3730 //Tableau des contraintes spécifiques
2731     $params = array(
2732     "constraint" => array(
2733     "size_max" => 2,
2734     "extension" => ".pdf"
2735     ),
2736     );
2737    
2738     $form->setSelect("fichier", $params);
2739     }
2740 softime 10573
2741     //
2742     if ($maj == 400) {
2743     $file = $this->f->storage->get($this->getVal('om_fichier_consultation'));
2744 softime 11418 $form->setSelect('live_preview', array(
2745     'base64' => base64_encode($file['file_content']),
2746     'mimetype' => $file['metadata']['mimetype'],
2747     'label' => 'document de consultation',
2748     'href' => sprintf(
2749     '../app/index.php?module=form&snippet=file&obj=consultation&champ=om_fichier_consultation&id=%1$s',
2750     $this->getVal($this->clePrimaire)
2751     )
2752     ));
2753 softime 10573 }
2754 softime 11876 // tiers_consulte
2755     $this->init_select(
2756     $form,
2757     $this->f->db,
2758     $maj,
2759     null,
2760     "motif_consultation",
2761     $this->get_var_sql_forminc__sql("tiers_consulte"),
2762     $this->get_var_sql_forminc__sql("tiers_consulte"),
2763     true
2764     );
2765     // Initialise le select en fonction de la valeur du champs categorie_tiers_consulte
2766     $form->setSelect(
2767     'tiers_consulte',
2768     $this->loadSelect_tiers_consulte($form, $maj, "categorie_tiers_consulte")
2769     );
2770     // motif_consultation
2771     $this->init_select(
2772     $form,
2773     $this->f->db,
2774     $maj,
2775     null,
2776     "motif_consultation",
2777     $this->get_var_sql_forminc__sql("motif_consultation"),
2778     $this->get_var_sql_forminc__sql("motif_consultation_by_id"),
2779     true
2780     );
2781     // categorie_tiers_consulte
2782     $this->init_select(
2783     $form,
2784     $this->f->db,
2785     $maj,
2786     null,
2787     "categorie_tiers_consulte",
2788     $this->get_var_sql_forminc__sql("categorie_tiers_consulte"),
2789     $this->get_var_sql_forminc__sql("categorie_tiers_consulte_by_id"),
2790     true
2791     );
2792 mbroquet 3730 }
2793    
2794     /**
2795 softime 11876 * Renvoie les valeurs possible des options du select "tiers_consulte".
2796     *
2797     * Ce select liste toutes les unités qui ont le type recherché
2798     * par l'unité parente.
2799     *
2800     * @param object $form Formulaire.
2801     * @param integer $maj Mode d'insertion.
2802     * @param string $champ Champ activant le filtre.
2803     *
2804     * @return array Tableau des valeurs possible du select.
2805     */
2806     protected function loadSelect_tiers_consulte($form, $maj, $champ) {
2807     // Initialisation du tableau de paramétrage du select :
2808     // - la clé 0 contient le tableau des valeurs,
2809     // - la clé 1 contient le tableau des labels,
2810     // - les clés des tableaux doivent faire correspondre le couple valeur/label.
2811     $contenu = array(
2812     0 => array('', ),
2813     1 => array(__('choisir')." ".__("tiers_consulte"), ),
2814     );
2815    
2816     // Récupération de l'identifiant de la catégorie du tiers consulté :
2817     // (par ordre de priorité)
2818     // - si une valeur est postée : c'est le cas lors du rechargement d'un
2819     // formulaire et que le select doit être peuplé par rapport aux
2820     // données saisies dans le formulaire,
2821     // - si la valeur est passée en paramètre : c'est le cas lors d'un
2822     // appel via le snippet filterselect qui effectue un
2823     // $object->setParameter($linkedField, $idx); lors d'un appel ajax
2824     // depuis le formulaire,
2825     // - si la valeur est dans l'enregistrement de la consultation sur laquelle on se
2826     // trouve : c'est le cas lors de la première ouverture du formulaire
2827     // en modification par exemple.
2828     $idCategorieTiers = "";
2829     if ($this->f->get_submitted_post_value($champ) !== null) {
2830     $idCategorieTiers = $this->f->get_submitted_post_value($champ);
2831     } elseif ($this->getParameter($champ) != "") {
2832     $idCategorieTiers = $this->getParameter($champ);
2833     } elseif (isset($form->val[$champ])) {
2834     $idCategorieTiers = $form->val[$champ];
2835     }
2836    
2837     // Si on ne récupère pas la categorie de tiers alors on ne peut pas savoir
2838     // le type attendu, on renvoi donc un select vide
2839     if ($idCategorieTiers == "" || ! is_numeric($idCategorieTiers)) {
2840     return $contenu;
2841     }
2842    
2843     // on récupère la liste de tous les tiers ayant la catégorie voulue
2844     $sql = sprintf(
2845     'SELECT
2846     tiers_consulte,
2847     CONCAT(abrege, \' - \', libelle) as libelle
2848     FROM
2849     %1$stiers_consulte
2850     WHERE
2851     categorie_tiers_consulte = %2$d
2852     ORDER BY
2853     tiers_consulte.libelle ASC',
2854     DB_PREFIXE,
2855     intval($idCategorieTiers)
2856     );
2857     $res = $this->f->db->query($sql);
2858     $this->addToLog("db->query(\"".$sql."\");", VERBOSE_MODE);
2859     $this->f->isDatabaseError($res);
2860    
2861     // Préparation du tableau de paramétrage du select avec les résultats récupérés
2862     while ($row = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
2863     $contenu[0][] = $row['tiers_consulte'];
2864     $contenu[1][] = $row['libelle'];
2865     }
2866    
2867     // on renvoie le tableau de paramètrage du select contenant la liste des unités
2868     // respectant la contrainte de type
2869     return $contenu;
2870     }
2871    
2872     /**
2873 mbroquet 3730 * Finalisation du document lors de l'ajout d'une consultation.
2874     *
2875 softime 5024 * @param integer $id_consult indentifiant de l'objet
2876 mbroquet 3730 */
2877 softime 5024 function finaliserAjouter($id_consult){
2878     //
2879     $this->begin_treatment(__METHOD__);
2880 mbroquet 3730
2881 softime 5024 //
2882     $admin_msg_error = _("Veuillez contacter votre administrateur.");
2883     $file_msg_error = _("La finalisation du document a échoué.")
2884     ." ".$admin_msg_error;
2885     $bdd_msg_error = _("Erreur de base de données.")
2886     ." ".$admin_msg_error;
2887 softime 5169 $log_msg_error = "Finalisation non enregistrée - id consultation = %s - uid fichier = %s";
2888 mbroquet 3730
2889 softime 5024 $uid = $this->file_finalizing($id_consult);
2890     // Comme pour le fonctionnement de l'envoi de mail,
2891     // Si échec cela ne stoppe pas la création de la consultation.
2892     // L'utilisateur en est tout de même informé dans l'IHM
2893     // et l'erreur est loguée.
2894     if ($uid == '' || $uid == 'OP_FAILURE' ) {
2895     $this->addToMessage($file_msg_error);
2896 softime 8989 $this->addToLog(sprintf($log_msg_error, $id_consult, $uid), VERBOSE_MODE);
2897 softime 5024 return $this->end_treatment(__METHOD__, true);
2898     }
2899 mbroquet 3730
2900 softime 5024 // Si succès mise à jour de la consultation
2901     $valF = array(
2902     "om_final_consultation" => true,
2903     "om_fichier_consultation" => $uid
2904     );
2905     //
2906 softime 8989 $res = $this->f->db->autoExecute(DB_PREFIXE.$this->table, $valF,
2907 softime 5024 DB_AUTOQUERY_UPDATE, $this->getCle($id_consult));
2908     //
2909     $this->addToLog(
2910     "finaliserAjouter() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id_consult)."\")",
2911     VERBOSE_MODE
2912     );
2913     //
2914     if ($this->f->isDatabaseError($res, true) === true) {
2915     $this->correct = false;
2916     // Remplacement du message de validation
2917     $this->msg = '';
2918     $this->addToMessage($bdd_msg_error);
2919     return $this->end_treatment(__METHOD__, false);
2920 mbroquet 3730 }
2921 softime 5024 //
2922     return $this->end_treatment(__METHOD__, true);
2923 mbroquet 3730 }
2924    
2925     /**
2926     * Finalisation du fichier.
2927     *
2928     * @param integer $id indentifiant de l'objet
2929     *
2930     * @return string uid du fichier finalisé
2931     */
2932     function file_finalizing($id){
2933 softime 11876 if ( ! ($pdf = $this->generate_pdf_consultation())) {
2934     $this->addToMessage(__('Erreur lors de la génération du document'));
2935     return '';
2936     }
2937 mbroquet 3730
2938     if(isset($this->valF["om_final_consultation"])) {
2939     $finalized = $this->valF["om_final_consultation"];
2940     } else {
2941     $finalized = $this->getVal("om_final_consultation");
2942     }
2943    
2944     // Métadonnées du document
2945     $metadata = array(
2946     'filename' => $pdf["filename"],
2947     'mimetype' => 'application/pdf',
2948     'size' => strlen($pdf["pdf_output"])
2949     );
2950    
2951     // Récupération des métadonnées calculées après validation
2952     $spe_metadata = $this->getMetadata("om_fichier_consultation");
2953    
2954     $metadata = array_merge($metadata, $spe_metadata);
2955    
2956 softime 10573 // Si le document a déjà été finalisé (vaudra 'f', ou false sinon)
2957 mbroquet 3730 if ( $finalized != '' ){
2958    
2959     // Met à jour le document mais pas son uid
2960     $uid = $this->f->storage->update(
2961     $this->getVal("om_fichier_consultation"), $pdf["pdf_output"], $metadata);
2962     }
2963     // Sinon, ajoute le document et récupère son uid
2964     else {
2965    
2966     // Stockage du PDF
2967 softime 10573 $uid = $this->f->storage->create($pdf["pdf_output"], $metadata, "from_content", $this->table.".om_fichier_consultation");
2968 mbroquet 3730 }
2969    
2970     return $uid;
2971    
2972     }
2973    
2974    
2975     /**
2976     * TREATMENT - finalize.
2977     *
2978     * Permet de finaliser un enregistrement
2979     *
2980     * @param array $val valeurs soumises par le formulaire
2981     * @param null $dnu1 @deprecated Ancienne ressource de base de données.
2982     * @param null $dnu2 @deprecated Ancien marqueur de débogage.
2983     *
2984     * @return boolean
2985     */
2986     function finalize($val = array(), &$dnu1 = null, $dnu2 = null) {
2987    
2988     // Cette méthode permet d'exécuter une routine en début des méthodes
2989     // dites de TREATMENT.
2990     $this->begin_treatment(__METHOD__);
2991    
2992     // Traitement de la finalisation
2993     $ret = $this->manage_finalizing("finalize", $val);
2994    
2995     // Si le traitement retourne une erreur
2996     if ($ret !== true) {
2997    
2998     // Termine le traitement
2999     $this->end_treatment(__METHOD__, false);
3000     }
3001    
3002     // Termine le traitement
3003     return $this->end_treatment(__METHOD__, true);
3004     }
3005    
3006     /**
3007     * TREATMENT - unfinalize.
3008     *
3009     * Permet de definaliser un enregistrement
3010     *
3011     * @param array $val valeurs soumises par le formulaire
3012     * @param null $dnu1 @deprecated Ancienne ressource de base de données.
3013     * @param null $dnu2 @deprecated Ancien marqueur de débogage.
3014     *
3015     * @return boolean
3016     */
3017     function unfinalize($val = array(), &$dnu1 = null, $dnu2 = null) {
3018    
3019     // Cette méthode permet d'exécuter une routine en début des méthodes
3020     // dites de TREATMENT.
3021     $this->begin_treatment(__METHOD__);
3022    
3023     // Traitement de la finalisation
3024     $ret = $this->manage_finalizing("unfinalize", $val);
3025    
3026     // Si le traitement retourne une erreur
3027     if ($ret !== true) {
3028    
3029     // Termine le traitement
3030     $this->end_treatment(__METHOD__, false);
3031     }
3032    
3033     // Termine le traitement
3034     return $this->end_treatment(__METHOD__, true);
3035     }
3036    
3037 softime 6565 /**
3038     * TREATMENT - manage_visibilite_consultation.
3039     *
3040     * Permet de masquer la consultation dans les éditions si elle est actuellement
3041     * affichée, ou de l'afficher si elle est actuellement masquée.
3042     *
3043     *
3044     * @param array $val valeurs soumises par le formulaire
3045     * @param null $dnu1 @deprecated Ancienne ressource de base de données.
3046     * @param null $dnu2 @deprecated Ancien marqueur de débogage.
3047     *
3048     * @return boolean
3049     */
3050     function manage_visibilite_consultation($val = array(), &$dnu1 = null, $dnu2 = null) {
3051 mbroquet 3730
3052 softime 6565 // Cette méthode permet d'exécuter une routine en début des méthodes
3053     // dites de TREATMENT.
3054     $this->begin_treatment(__METHOD__);
3055    
3056     // Recuperation de la valeur de la cle primaire de l'objet
3057     $id = $this->getVal($this->clePrimaire);
3058    
3059     if($this->getVal("visible") == 'f') {
3060     $valF["visible"] = true;
3061     }
3062     else {
3063     $valF["visible"] = false;
3064     }
3065    
3066     // Execution de la requête de modification des donnees de l'attribut
3067 softime 8989 $res = $this->f->db->autoExecute(DB_PREFIXE.$this->table, $valF,
3068 softime 6565 DB_AUTOQUERY_UPDATE, $this->getCle($id));
3069     $this->addToLog(
3070     "manage_visibilite_consultation() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id)."\")",
3071     VERBOSE_MODE
3072     );
3073    
3074     // Si une erreur survient
3075     if (database::isError($res, true)) {
3076    
3077     // Appel de la methode de recuperation des erreurs
3078     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
3079     $this->correct = false;
3080     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
3081     // Termine le traitement
3082     return $this->end_treatment(__METHOD__, false);
3083     }
3084    
3085     if ($valF["visible"] === false) {
3086     $this->addToMessage(_("La consultation est masquée dans les éditions."));
3087     }
3088     else {
3089     $this->addToMessage(_("La consultation est affichée dans les éditions."));
3090     }
3091     // Termine le traitement
3092     return $this->end_treatment(__METHOD__, true);
3093     }
3094    
3095    
3096 mbroquet 3730 /**
3097     * Finalisation des documents.
3098     *
3099     * @param string $mode finalize/unfinalize
3100     * @param array $val valeurs soumises par le formulaire
3101     */
3102     function manage_finalizing($mode = null, $val = array()) {
3103 softime 5024 //
3104     $this->begin_treatment(__METHOD__);
3105 mbroquet 3730
3106     // Recuperation de la valeur de la cle primaire de l'objet
3107 softime 5024 $id_consult = $this->getVal($this->clePrimaire);
3108 mbroquet 3730
3109 softime 5024 //
3110     $admin_msg_error = _("Veuillez contacter votre administrateur.");
3111     $file_msg_error = _("Erreur de traitement de fichier.")
3112     ." ".$admin_msg_error;
3113     $bdd_msg_error = _("Erreur de base de données.")
3114     ." ".$admin_msg_error;
3115 softime 5169 $log_msg_error = "Finalisation non enregistrée - id consultation = %s - uid fichier = %s";
3116 softime 5024
3117 mbroquet 3730 // Si on finalise le document
3118     if ($mode == "finalize") {
3119 softime 5024 //
3120     $etat = _('finalisation');
3121 mbroquet 3730 // Finalisation du fichier
3122 softime 5024 $uid = $this->file_finalizing($id_consult);
3123 mbroquet 3730 }
3124     //
3125     else {
3126 softime 5024 //
3127     $etat = _('définalisation');
3128 mbroquet 3730 //Récupération de l'uid du document finalisé
3129     $uid = $this->getVal("om_fichier_consultation");
3130     }
3131    
3132 softime 5024 // Si on définalise l'UID doit être défini
3133     // Si on finalise la création/modification du fichier doit avoir réussi
3134     if ($uid == '' || $uid == 'OP_FAILURE' ) {
3135     $this->correct = false;
3136     $this->addToMessage($file_msg_error);
3137 softime 8989 $this->addToLog(sprintf($log_msg_error, $id_consult, $uid), VERBOSE_MODE);
3138 softime 5024 return $this->end_treatment(__METHOD__, false);
3139     }
3140 mbroquet 3730
3141 softime 5024 foreach ($this->champs as $key => $value) {
3142     //
3143     $val[$value] = $this->val[$key];
3144     }
3145     $this->setvalF($val);
3146 mbroquet 3730
3147 softime 5024 // Verification de la validite des donnees
3148 softime 8989 $this->verifier($this->val);
3149 softime 5024 // Si les verifications precedentes sont correctes, on procede a
3150     // la modification, sinon on ne fait rien et on retourne une erreur
3151     if ($this->correct === true) {
3152 mbroquet 3730
3153 softime 5024 // Execution du trigger 'before' specifique au MODE 'update'
3154 softime 8989 $this->triggermodifier($id_consult, $this->f->db, $this->val, DEBUG);
3155 softime 5024 // Suppression de son message de validation
3156     $this->msg = '';
3157 mbroquet 3730
3158     //
3159 softime 9245 $valF = array();
3160 softime 5024 if ($mode == "finalize") {
3161     $valF["om_final_consultation"] = true;
3162 mbroquet 3730 } else {
3163 softime 5024 $valF["om_final_consultation"] = false;
3164 mbroquet 3730 }
3165 softime 5024 $valF["om_fichier_consultation"] = $uid;
3166    
3167     // Execution de la requête de modification des donnees de l'attribut
3168     // valF de l'objet dans l'attribut table de l'objet
3169 softime 8989 $res = $this->f->db->autoExecute(DB_PREFIXE.$this->table, $valF,
3170 softime 5024 DB_AUTOQUERY_UPDATE, $this->getCle($id_consult));
3171 mbroquet 3730 $this->addToLog(
3172 softime 5024 "finaliser() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id_consult)."\")",
3173     VERBOSE_MODE
3174 mbroquet 3730 );
3175 softime 5024 //
3176     if ($this->f->isDatabaseError($res, true) === true) {
3177     $this->correct = false;
3178     $this->addToMessage($bdd_msg_error);
3179     return $this->end_treatment(__METHOD__, false);
3180     }
3181     //
3182     $this->addToMessage(sprintf(_("La %s du document s'est effectuee avec succes."), $etat));
3183     return $this->end_treatment(__METHOD__, true);
3184 mbroquet 3730 }
3185 softime 5024 // L'appel de verifier() a déjà positionné correct à false
3186     // et défini un message d'erreur.
3187 softime 8989 $this->addToLog(sprintf($log_msg_error, $id_consult, $uid), DEBUG_MODE);
3188 softime 5024 return $this->end_treatment(__METHOD__, false);
3189 mbroquet 3730 }
3190    
3191     /**
3192     * Permet de récupérer l'édition de la consultation.
3193     *
3194     * @param string $output type de sortie
3195     *
3196     * @return string si le type de sortie est string, le contenu du pdf est retourné.
3197     */
3198     function generate_pdf_consultation() {
3199     if(isset($this->valF[$this->clePrimaire])) {
3200     $id = $this->valF[$this->clePrimaire];
3201     } else {
3202     $id = $this->getVal($this->clePrimaire);
3203     }
3204    
3205     // Requête qui récupère le type de consultation
3206 softime 11876 $sql = sprintf(
3207     '(SELECT
3208     id
3209     FROM
3210     %1$sservice
3211     LEFT JOIN %1$som_etat ON service.edition = om_etat.om_etat
3212     WHERE
3213     service = (
3214     SELECT
3215     service
3216     FROM
3217     %1$sconsultation
3218     WHERE
3219     consultation = %2$s))
3220     UNION
3221     (SELECT
3222     id
3223     FROM
3224     %1$smotif_consultation
3225     LEFT JOIN %1$som_etat ON motif_consultation.om_etat = om_etat.om_etat
3226     WHERE
3227     motif_consultation = (
3228     SELECT
3229     motif_consultation
3230     FROM
3231     %1$sconsultation
3232     WHERE
3233     consultation = %2$s))',
3234     DB_PREFIXE,
3235     $id
3236     );
3237 mbroquet 3730 $obj = $this->f->db->getone($sql);
3238     $this->f->addTolog(
3239     __FILE__." - ".__METHOD__." : db->getone(\"".$sql."\");",
3240     VERBOSE_MODE
3241     );
3242     if($this->f->isDatabaseError($obj, true)) {
3243     $this->addToMessage(_("Aucun document genere."));
3244     $this->addToMessage(_("Finalisation non enregistree"));
3245     return false;
3246     }
3247     $collectivite = $this->f->getCollectivite($this->get_dossier_collectivite());
3248    
3249     $pdf_output = $this->compute_pdf_output("etat", $obj, $collectivite, $id);
3250    
3251     return $pdf_output;
3252     }
3253    
3254     function get_dossier_collectivite() {
3255     if(isset($this->valF["dossier"])) {
3256     $dossier = $this->valF["dossier"];
3257 softime 11057 } elseif (! empty($this->f->get_submitted_get_value('dossier_instruction')) ) {
3258     $dossier = $this->f->get_submitted_get_value('dossier_instruction');
3259 mbroquet 3730 } else {
3260     $dossier = $this->getVal("dossier");
3261     }
3262    
3263 softime 11057 $sql = "SELECT om_collectivite FROM ".DB_PREFIXE."dossier WHERE dossier.dossier='".$this->f->db->escapeSimple($dossier)."'";
3264 mbroquet 3730 $collectivite = $this->f->db->getone($sql);
3265     $this->f->addTolog(
3266     __FILE__." - ".__METHOD__." : db->getone(\"".$sql."\");",
3267     VERBOSE_MODE
3268     );
3269     if($this->f->isDatabaseError($collectivite, true)) {
3270     $this->addToMessage(_("Aucun document genere."));
3271     $this->addToMessage(_("Finalisation non enregistree"));
3272     return false;
3273     }
3274     return $collectivite;
3275     }
3276    
3277     function view_consulter_pdf(){
3278 softime 10573 if ($this->getVal("om_final_consultation") == 't') {
3279 softime 7996 $lien = '../app/index.php?module=form&snippet=file&obj=consultation&'.
3280 mbroquet 3730 'champ=om_fichier_consultation&id='.$this->getVal($this->clePrimaire);
3281     header("Location: ".$lien);
3282     } else {
3283    
3284     $output = $this->generate_pdf_consultation();
3285     $this->expose_pdf_output($output["pdf_output"], $output["filename"]);
3286     }
3287     exit();
3288     }
3289 nhaye 5254
3290    
3291 mbroquet 3730 /**
3292     * Création du nom de fichier
3293     * @return string numéro de dossier d'instruction
3294     */
3295     protected function getFichierFilename() {
3296 softime 12433 $fichier = isset($this->valF['fichier']) === true && $this->valF['fichier'] !== null ? $this->valF['fichier'] : $this->getVal('fichier');
3297     $consultation_id = isset($this->valF[$this->clePrimaire]) === true && $this->valF[$this->clePrimaire] !== null ? $this->valF[$this->clePrimaire] : $this->getVal($this->clePrimaire);
3298 softime 10573 // Récupère l'extension sur le fichier temporaire
3299     $extension = '';
3300 softime 12433 if ($fichier !== null && $fichier !== '') {
3301     $temporary_test = explode("|", $fichier);
3302 softime 10573 if (isset($temporary_test[0]) === true && $temporary_test[0] == "tmp") {
3303     if (isset($temporary_test[1]) === true) {
3304     $tmp_filename = $this->f->storage->getFilename_temporary($temporary_test[1]);
3305     $extension = strtolower(substr($tmp_filename, strrpos($tmp_filename, '.')));
3306     }
3307     }
3308     }
3309 softime 12433 return "consultation_avis_".$consultation_id.$extension;
3310 mbroquet 3730 }
3311    
3312     /**
3313     * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
3314     * @return string numéro de dossier d'instruction
3315     */
3316 softime 10573 protected function getDossier($champ = null) {
3317 mbroquet 3730 if(empty($this->specificMetadata)) {
3318     $this->getSpecificMetadata();
3319     }
3320     return $this->specificMetadata->dossier;
3321     }
3322     /**
3323     * Récupération la version du dossier d'instruction à ajouter aux métadonnées
3324     * @return int Version
3325     */
3326     protected function getDossierVersion() {
3327     if(empty($this->specificMetadata)) {
3328     $this->getSpecificMetadata();
3329     }
3330     return $this->specificMetadata->version;
3331     }
3332     /**
3333     * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
3334     * @return string numéro de dossier d'autorisation
3335     */
3336     protected function getNumDemandeAutor() {
3337     if(empty($this->specificMetadata)) {
3338     $this->getSpecificMetadata();
3339     }
3340     return $this->specificMetadata->dossier_autorisation;
3341     }
3342     /**
3343     * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
3344     * @return date demande initiale
3345     */
3346     protected function getAnneemoisDemandeAutor() {
3347     if(empty($this->specificMetadata)) {
3348     $this->getSpecificMetadata();
3349     }
3350     return $this->specificMetadata->date_demande_initiale;
3351     }
3352     /**
3353     * Récupération du type de dossier d'instruction à ajouter aux métadonnées
3354     * @return string type de dossier d'instruction
3355     */
3356     protected function getTypeInstruction() {
3357     if(empty($this->specificMetadata)) {
3358     $this->getSpecificMetadata();
3359     }
3360     return $this->specificMetadata->dossier_instruction_type;
3361     }
3362     /**
3363     * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
3364     * @return string avis
3365     */
3366     protected function getStatutAutorisation() {
3367     if(empty($this->specificMetadata)) {
3368     $this->getSpecificMetadata();
3369     }
3370     return $this->specificMetadata->statut;
3371     }
3372     /**
3373     * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
3374     * @return string type d'autorisation
3375     */
3376     protected function getTypeAutorisation() {
3377     if(empty($this->specificMetadata)) {
3378     $this->getSpecificMetadata();
3379     }
3380     return $this->specificMetadata->dossier_autorisation_type;
3381     }
3382     /**
3383     * Récupération de la date d'ajout de document à ajouter aux métadonnées
3384     * @return date de l'évènement
3385     */
3386     protected function getDateEvenementDocument() {
3387     return date("Y-m-d");
3388     }
3389     /**
3390     * Récupération du groupe d'instruction à ajouter aux métadonnées
3391     * @return string Groupe d'instruction
3392     */
3393     protected function getGroupeInstruction() {
3394     if(empty($this->specificMetadata)) {
3395     $this->getSpecificMetadata();
3396     }
3397     return $this->specificMetadata->groupe_instruction;
3398     }
3399     /**
3400     * Récupération du type de document à ajouter aux métadonnées
3401     * @return string Type de document
3402     */
3403     protected function getTitle() {
3404 softime 8989 if ($this->getParameter("retourformulaire") == "demande_avis_encours") {
3405 mbroquet 3730 return 'Retour de consultation';
3406     } else {
3407     return 'Demande de consultation';
3408     }
3409     }
3410    
3411 softime 6272
3412 mbroquet 3730 /**
3413 softime 6272 * Récupération du champ ERP du dossier d'instruction.
3414     *
3415     * @return boolean
3416     */
3417     public function get_concerne_erp() {
3418     //
3419     if(empty($this->specificMetadata)) {
3420     $this->getSpecificMetadata();
3421     }
3422     //
3423     return $this->specificMetadata->erp;
3424     }
3425    
3426    
3427     /**
3428 mbroquet 3730 * Cette méthode permet de stocker en attribut toutes les métadonnées
3429     * nécessaire à l'ajout d'un document.
3430     */
3431     public function getSpecificMetadata() {
3432     if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
3433     $dossier = $this->valF["dossier"];
3434     } else {
3435     $dossier = $this->getVal("dossier");
3436     }
3437     //Requête pour récupérer les informations essentiels sur le dossier d'instruction
3438     $sql = "SELECT dossier.dossier as dossier,
3439     dossier_autorisation.dossier_autorisation as dossier_autorisation,
3440     to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
3441     dossier_instruction_type.code as dossier_instruction_type,
3442     etat_dossier_autorisation.libelle as statut,
3443     dossier_autorisation_type.code as dossier_autorisation_type,
3444 softime 6272 groupe.code as groupe_instruction,
3445     CASE WHEN dossier.erp IS TRUE
3446     THEN 'true'
3447     ELSE 'false'
3448     END as erp
3449 mbroquet 3730 FROM ".DB_PREFIXE."dossier
3450     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
3451     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
3452     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
3453     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
3454     LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
3455     ON dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
3456     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
3457     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
3458     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
3459     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
3460     LEFT JOIN ".DB_PREFIXE."groupe
3461     ON dossier_autorisation_type.groupe = groupe.groupe
3462     WHERE dossier.dossier = '".$dossier."'";
3463 softime 8989 $res = $this->f->db->query($sql);
3464 mbroquet 3730 $this->f->addToLog("obj/document_numerise.class.php : db->query(".$sql.")", VERBOSE_MODE);
3465     if ( database::isError($res)){
3466     die();
3467     }
3468    
3469     //Le résultat est récupéré dans un objet
3470     $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
3471    
3472     //Si il y a un résultat
3473     if ($row !== null) {
3474    
3475 fmichon 3892 // Instrance de la classe dossier
3476     $inst_dossier = $this->get_inst_dossier($dossier);
3477    
3478     // Insère l'attribut version à l'objet
3479     $row->version = $inst_dossier->get_dossier_instruction_version();
3480    
3481 mbroquet 3730 //Alors on créé l'objet dossier_instruction
3482     $this->specificMetadata = $row;
3483    
3484     }
3485     }
3486    
3487     /**
3488     *
3489     * @return boolean
3490     */
3491     function is_instructeur(){
3492    
3493     //Si l'utilisateur est un instructeur
3494     if ($this->f->isUserInstructeur()){
3495     return true;
3496     }
3497     return false;
3498     }
3499    
3500     function is_editable(){
3501 softime 10573 // Impossible de modifier si la consultation est liée à un service Plat'AU
3502     $inst_service = $this->get_inst_service($this->getVal('service'));
3503     if ($inst_service->getVal('service_type') !== null
3504     && $inst_service->getVal('service_type') === 'platau') {
3505     //
3506     return false;
3507     }
3508    
3509 softime 5024 // Si bypass
3510 mbroquet 3730 if ($this->f->can_bypass("consultation", "modifier")){
3511     return true;
3512     }
3513    
3514 softime 6565 // Tester si le dossier est cloturé ,
3515     // et si l'instructeur est de la même division
3516     if ($this->is_instructeur_from_division_dossier() === true and
3517     $this->is_dossier_instruction_not_closed() === true) {
3518     return true;
3519 mbroquet 3730 }
3520     return false;
3521     }
3522    
3523     function is_deletable(){
3524 softime 10573 // Impossible de supprimer si la tâche Plat'AU de la consultation a été consommée
3525     $inst_task_empty = $this->f->get_inst__om_dbform(array(
3526     "obj" => "task",
3527     "idx" => 0,
3528     ));
3529     $task_exists = $inst_task_empty->task_exists('creation_consultation', $this->getVal($this->clePrimaire));
3530     if ($task_exists !== false) {
3531     $inst_task = $this->f->get_inst__om_dbform(array(
3532     "obj" => "task",
3533     "idx" => $task_exists,
3534     ));
3535     if ($inst_task->getVal('state') === $inst_task::STATUS_PENDING
3536     || $inst_task->getVal('state') === $inst_task::STATUS_DONE) {
3537     //
3538     return false;
3539     }
3540     }
3541    
3542 softime 6565 // Suppression possible pour l'instructeur de la division si pas d'avis
3543     if ($this->is_dossier_instruction_not_closed() === true &&
3544     $this->is_instructeur_from_division_dossier() === true &&
3545 softime 5024 $this->getVal("avis_consultation") == "" &&
3546 softime 6565 $this->getVal('fichier') == ""
3547 softime 5024 ){
3548 mbroquet 3730 return true;
3549     }
3550 softime 6565
3551     // Si un avis a été rendu il faut que l'utilisateur ai le droit
3552     // specifique de suppression avec avis rendu et le bypass de division
3553     if ($this->getVal("avis_consultation") != "" or $this->getVal('fichier') != "") {
3554    
3555     if ($this->f->can_bypass("consultation", "supprimer") and
3556     $this->f->isAccredited("consultation_supprimer_avec_avis_rendu") == true){
3557     return true;
3558     }
3559     } else {
3560     // Si pas d'avis rendu, le bypass suffit
3561     if ($this->f->can_bypass("consultation", "supprimer")){
3562     return true;
3563     }
3564     }
3565    
3566 mbroquet 3730 return false;
3567     }
3568    
3569     function is_multiaddable(){
3570    
3571     if ($this->f->can_bypass("consultation", "ajouter")){
3572     return true;
3573     }
3574    
3575 softime 6565 if ($this->is_instructeur_from_division_dossier() === true){
3576 mbroquet 3730 return true;
3577     }
3578     return false;
3579     }
3580    
3581     function is_markable(){
3582    
3583     if($this->f->can_bypass("consultation", "modifier_lu")){
3584     return true;
3585     }
3586    
3587 softime 6565 if ($this->is_instructeur_from_division_dossier() === true){
3588 mbroquet 3730 return true;
3589     }
3590     return false;
3591     }
3592    
3593 softime 6565 // Si la consultation est visible alors on peut afficher le lien pour la masquer
3594     function is_visible() {
3595     if($this->getVal("visible") == 't') {
3596     return true;
3597     }
3598     return false;
3599     }
3600    
3601     // Si la consultation n'est pas visible alors on peut afficher le lien pour l'afficher
3602     function is_not_visible() {
3603     if($this->getVal("visible") == 'f') {
3604     return true;
3605     }
3606     return false;
3607     }
3608    
3609 mbroquet 3730 function is_finalizable(){
3610 softime 11876 // Vérifie si la variable contenant les informations nécessaire pour la
3611     // vérification est initialisé et si ce n'est pas le cas elle est initialisée
3612     if ($this->valElementConsulte == array()) {
3613     if (! $this->set_val_element_consulte()) {
3614     return false;
3615     }
3616     }
3617 softime 10573
3618 softime 11876 // Vérifie si la génération d'édition est disponible pour le service / motif
3619     if ($this->valElementConsulte['generate_edition'] !== 't') {
3620 softime 10573 return false;
3621     }
3622    
3623 mbroquet 3730 if($this->f->can_bypass("consultation", "finaliser")){
3624     return true;
3625     }
3626    
3627 softime 6565 if ($this->is_instructeur_from_division_dossier() === true &&
3628     $this->is_dossier_instruction_not_closed() === true){
3629 mbroquet 3730 return true;
3630     }
3631    
3632     return false;
3633     }
3634    
3635     function is_unfinalizable(){
3636 softime 11876 // Vérifie si la variable contenant les informations nécessaire pour la
3637     // vérification est initialisé et si ce n'est pas le cas elle est initalisée
3638     if ($this->valElementConsulte == array()) {
3639     if (! $this->set_val_element_consulte()) {
3640     return false;
3641     }
3642     }
3643 softime 10573
3644 softime 11876 if ($this->valElementConsulte['generate_edition'] !== 't') {
3645 softime 10573 return false;
3646     }
3647 softime 11876
3648     if ($this->valElementConsulte['service_type'] === 'platau') {
3649 softime 10573 return false;
3650     }
3651    
3652 mbroquet 3730 if($this->f->can_bypass("consultation", "definaliser")){
3653     return true;
3654     }
3655    
3656 softime 6565 if ($this->is_instructeur_from_division_dossier() === true &&
3657     $this->is_dossier_instruction_not_closed() === true){
3658 mbroquet 3730 return true;
3659     }
3660    
3661     return false;
3662     }
3663 fmichon 3892
3664 softime 12433 /**
3665     * Cette méthode vérifie à l'aide d'une requête sql si des tiers ont été paramétrés.
3666     * Si c'est le cas on renvoie true sinon renvoie false.
3667     *
3668     * Si la requête échoue la méthode renverra false.
3669     *
3670     * @return boolean
3671     */
3672     public function is_tiers_parametre() {
3673     // Récupère la requête de remplissage de la liste de sélection des tiers
3674     // consulté
3675     $sql = $this->get_var_sql_forminc__sql_tiers_consulte();
3676     // Récupère les résultats de la requête. Si on ne récupère pas de résultats ou
3677     // que la requête est en erreur renvoie false.
3678     $res = $this->f->db->query($sql);
3679     $this->addToLog(__METHOD__.'(): db->query("'.$sql.'");', VERBOSE_MODE);
3680     if ($this->f->isDatabaseError($res) !== false) {
3681     return false;
3682     }
3683     if ($res->numrows() == 0) {
3684     return false;
3685     }
3686     // Si on a des résultats alors des tiers ont été paramétrés
3687     return true;
3688     }
3689    
3690 softime 6565 /*
3691 softime 7366 * CONDITION - can_show_or_hide_in_edition
3692     *
3693     * Vérifie que l'utilisateur possède la permission bypass.
3694     * Vérifie que l'utilisateur est un instructeur, qu'il fait partie de la
3695     * division du dossier et que le dossier n'est pas clôturé.
3696     *
3697     * Cette méthode est identique aux conditions dans consultation.inc.php
3698     * permettant l'affichage des actions depuis le listing des consultations.
3699     * Il est nécessaire que cette méthode ainsi que la condition if restent
3700     * concordants en tout point afin que le comportement des actions soit
3701     * identique depuis le formulaire et depuis le listing.
3702     *
3703     * @return boolean
3704     *
3705     */
3706     function can_show_or_hide_in_edition() {
3707    
3708     //
3709     if ($this->f->can_bypass("consultation", "visibilite_dans_edition") === true){
3710     return true;
3711     }
3712    
3713     //
3714     if ($this->is_instructeur_from_division_dossier() === true and
3715     $this->is_dossier_instruction_not_closed() === true) {
3716     return true;
3717     }
3718     return false;
3719     }
3720    
3721     /*
3722 softime 6565 * CONDITION - can_user_access_dossier_contexte_ajout
3723 fmichon 3892 *
3724 softime 6565 * Vérifie que l'utilisateur a bien accès au dossier d'instruction passé dans le
3725     * formulaire d'ajout.
3726     * Cette méthode vérifie que l'utilisateur est lié au groupe du dossier, et si le
3727     * dossier est confidentiel qu'il a accès aux confidentiels de ce groupe.
3728     *
3729 fmichon 3892 */
3730 softime 6565 function can_user_access_dossier_contexte_ajout() {
3731    
3732     ($this->f->get_submitted_get_value('idxformulaire') !== null ? $id_dossier =
3733     $this->f->get_submitted_get_value('idxformulaire') : $id_dossier = "");
3734 fmichon 3892 //
3735 softime 6565 if ($id_dossier !== "") {
3736 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
3737     "obj" => "dossier_instruction",
3738     "idx" => $id_dossier,
3739     ));
3740 softime 6565 //
3741     return $dossier->can_user_access_dossier();
3742     }
3743     return false;
3744 fmichon 3892 }
3745    
3746 softime 6565 /*
3747     * CONDITION - can_user_access_dossier_contexte_modification
3748     *
3749     * Vérifie que l'utilisateur a bien accès au dossier lié à la consultation.
3750     * Cette méthode vérifie que l'utilisateur est lié au groupe du dossier, et si le
3751     * dossier est confidentiel qu'il a accès aux confidentiels de ce groupe.
3752     *
3753     */
3754     function can_user_access_dossier_contexte_modification() {
3755 fmichon 3892
3756 softime 6565 ($this->f->get_submitted_get_value('idxformulaire') !== null ? $id_dossier =
3757     $this->f->get_submitted_get_value('idxformulaire') : $id_dossier = "");
3758    
3759     if ($id_dossier != "") {
3760 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
3761     "obj" => "dossier",
3762     "idx" => $id_dossier,
3763     ));
3764 softime 6565 //
3765     return $dossier->can_user_access_dossier();
3766     }
3767     return false;
3768     }
3769    
3770 softime 7717 /**
3771 softime 10573 * [is_viewable description]
3772     * @return boolean [description]
3773     */
3774     function is_viewable() {
3775 softime 11876 // Vérifie si la variable contenant les informations nécessaire pour la
3776     // vérification est initialisé et si ce n'est pas le cas elle est initalisée
3777     if ($this->valElementConsulte == array()) {
3778     if (! $this->set_val_element_consulte()) {
3779     return false;
3780     }
3781     }
3782     if ($this->valElementConsulte['generate_edition'] !== 't') {
3783 softime 10573 return false;
3784     }
3785    
3786     return true;
3787     }
3788    
3789     /**
3790 softime 7717 * Indique si la redirection vers le lien de retour est activée ou non.
3791     *
3792     * L'objectif de cette méthode est de permettre d'activer ou de désactiver
3793     * la redirection dans certains contextes.
3794     *
3795     * @return boolean
3796     */
3797     function is_back_link_redirect_activated() {
3798     //
3799     if ($this->getParameter("maj") == 100) {
3800     //
3801     return false;
3802     }
3803     //
3804     return true;
3805     }
3806    
3807 softime 10573 // XXX WIP
3808     public function get_json_data() {
3809     $val = array_combine($this->champs, $this->val);
3810     foreach ($val as $key => $value) {
3811     $val[$key] = strip_tags($value);
3812     }
3813     return $val;
3814     }
3815 softime 6565
3816 softime 10573 protected function getDocumentType($champ = null) {
3817     $serviceId = $this->getVal('service');
3818     if (empty($serviceId) && isset($this->valF['service'])) {
3819     $serviceId = $this->valF['service'];
3820     }
3821     if (! empty($serviceId)) {
3822     $service = $this->f->findObjectById('service', $serviceId);
3823     if (! empty($service)) {
3824     return __("Consultation").':'.$service->getVal('libelle');
3825     }
3826     }
3827     return parent::getDocumentType();
3828     }
3829 softime 7996
3830 softime 11585 /**
3831     * Affiche la page de téléchargement du document de la notification.
3832     *
3833     * @param boolean $content_only Affiche le contenu seulement.
3834     *
3835     * @return void
3836     */
3837     public function view_telecharger_document_anonym() {
3838     // Par défaut on considère qu'on va afficher le formulaire
3839     $idx = 0;
3840     // Flag d'erreur
3841     $error = false;
3842     // Message d'erreur
3843     $message = '';
3844    
3845     // Paramètres GET : récupération de la clé d'accès
3846     $cle_acces_document = $this->f->get_submitted_get_value('key');
3847     $cle_acces_document = $this->f->db->escapeSimple($cle_acces_document);
3848     // Vérification de l'existence de la clé et récupération de l'uid du fichier
3849     $uidFichier = $this->getUidDocumentConsultationWithKey($cle_acces_document);
3850     if ($uidFichier != null) {
3851     // Récupération du document
3852     $file = $this->f->storage->get($uidFichier);
3853    
3854     // Headers
3855     header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
3856     header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date dans le passé
3857     header("Content-Type: ".$file['metadata']['mimetype']);
3858     header("Accept-Ranges: bytes");
3859     header("Content-Disposition: inline; filename=\"".$file['metadata']['filename']."\";" );
3860     // Affichage du document
3861     echo $file['file_content'];
3862    
3863     // Récupération de la date de premier accès et maj du suivi uniquement
3864     // si la date de 1er accès n'a pas encore été remplis
3865     $inst_notif = $this->getInstanceNotificationWithKey($cle_acces_document);
3866     if ($inst_notif->getVal('date_premier_acces') == null ||
3867     $inst_notif->getVal('date_premier_acces') == '') {
3868     $notif_val = array();
3869     foreach ($inst_notif->champs as $champ) {
3870     $notif_val[$champ] = $inst_notif->getVal($champ);
3871     }
3872     $notif_val['date_premier_acces'] = date("d/m/Y H:i:s");
3873     $notif_val['statut'] = 'vu';
3874     $notif_val['commentaire'] = 'Le document a été vu';
3875     $suivi_notif = $inst_notif->modifier($notif_val);
3876     }
3877    
3878     } else {
3879     // Page vide 404
3880     printf('Ressource inexistante');
3881     header('HTTP/1.0 404 Not Found');
3882     }
3883     }
3884     /**
3885     * Récupère une clé et renvoie l'uid du document liée à cette
3886     * clé. Si la clé n'existe pas renvoie null.
3887     *
3888     * @param string $cleGen clé dont on cherche l'instruction
3889     * @return integer|null
3890     */
3891     protected function getUidDocumentConsultationWithKey($cleGen) {
3892     $query = sprintf(
3893     'SELECT
3894     consultation.fichier
3895     FROM
3896     %1$sinstruction_notification_document
3897     LEFT JOIN %1$sconsultation ON instruction_notification_document.document_id = consultation.consultation
3898     WHERE
3899     instruction_notification_document.cle = \'%2$s\'',
3900     DB_PREFIXE,
3901     $this->f->db->escapeSimple($cleGen)
3902     );
3903    
3904     $res = $this->f->db->getOne($query);
3905     $this->addToLog(__METHOD__.": db->getOne(\"".$query."\");", VERBOSE_MODE);
3906     $this->f->isDatabaseError($res);
3907     return $res;
3908     }
3909    
3910     /**
3911     * Récupère une clé, fait une requête pour récupérer l'id de la notification liée a cette clé.
3912     * Récupère l'instance de instruction_notification dont l'id a été récupéré et la renvoie.
3913     *
3914     * @param string $cleGen
3915     * @return instruction_notification
3916     */
3917     protected function getInstanceNotificationWithKey($key) {
3918     // TODO : refactoriser pour éviter d'avoir a réecrire cette méthode dans chaque classe
3919     // a laquelle la consultation anonyme des documents est associée
3920     $sql = sprintf(
3921     "SELECT
3922     instruction_notification
3923     FROM
3924     %1\$sinstruction_notification_document
3925     WHERE
3926     cle = '%2\$s'",
3927     DB_PREFIXE,
3928     $this->f->db->escapeSimple($key)
3929     );
3930     $res = $this->f->db->getOne($sql);
3931     $this->addToLog(__METHOD__.": db->getOne(\"".$sql."\");", VERBOSE_MODE);
3932     $this->f->isDatabaseError($res);
3933    
3934     // Récupération de l'instance de notification
3935     $instNotif = $this->f->get_inst__om_dbform(array(
3936     "obj" => "instruction_notification",
3937     "idx" => $res,
3938     ));
3939     return $instNotif;
3940     }
3941    
3942    
3943 softime 11876 /**
3944     * Vérifie la validité des valeurs en mode CREATE & UPDATE.
3945     * (Surcharge)
3946     *
3947     * Les consultations pouvant être des consultations
3948     * de tiers ou de service selon le type de consultations
3949     * certain champs ne doivent pas être null.
3950     * Consultation tiers :
3951     * - categorie tiers consulte
3952     * - tiers consulte
3953     * - motif consultation
3954     * Consultation service :
3955     * - service
3956     * Cette surcharge permet de vérifier que selon le contexte
3957     * les valeurs voulues sont bien renseigné.
3958     *
3959     * @param array $val Tableau des valeurs brutes.
3960     * @param null &$dnu1 @deprecated Ne pas utiliser.
3961     * @param null $dnu2 @deprecated Ne pas utiliser.
3962     *
3963     * @return void
3964     */
3965     function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
3966     // Ajout des champs concerné à la liste des champs requis
3967     // pour que la vérification de présence des champs requis se fasse aussi
3968     // sur ces champs
3969     $maj = $this->getParameter("maj");
3970     $champsNonNull = array();
3971     // Action liées à l'ajout et la modification de consultation d'un service
3972     if ($maj == '0' || ($maj == '1' && ($this->getVal('service') != null && $this->getVal('service') != ''))) {
3973     $champsNonNull = array('service');
3974     } elseif ($maj == '41'|| ($maj == '1' && ($this->getVal('tiers_consulte') != null && $this->getVal('tiers_consulte') != ''))) {
3975     // Actions liées à l'ajout et la modification de consultation d'un tiers
3976     $champsNonNull = array('categorie_tiers_consulte', 'tiers_consulte', 'motif_consultation');
3977     }
3978     foreach($champsNonNull as $champs) {
3979     $this->required_field[] = $champs;
3980     }
3981     parent::verifier($val, $dnu1, $dnu2);
3982     }
3983    
3984    
3985 softime 10573 }// fin classe

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26