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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 11418 - (hide annotations)
Mon Feb 7 14:59:54 2022 UTC (2 years, 11 months ago) by softime
File size: 138671 byte(s)
* Fusion de la branche d'intégration 5.7.0-develop dans le trunk

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26