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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 19592 - (hide annotations)
Wed Jan 22 18:04:27 2025 UTC (12 days, 8 hours ago) by softime
File size: 180688 byte(s)
merge: fusion de la branche d'intégration v6.10.0-develop dans le trunk

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26