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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26