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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5254 - (hide annotations)
Fri Nov 25 10:59:14 2016 UTC (8 years, 2 months ago) by nhaye
File size: 113875 byte(s)
Merge de la branche d'application des nouvelles actions (passage des lots en nouvelles actions)

1 mbroquet 3730 <?php
2     //$Id: consultation.class.php 6046 2016-02-26 15:27:06Z fmichon $
3     //gen openMairie le 10/02/2011 20:32
4     require_once ("../gen/obj/consultation.class.php");
5    
6     class consultation extends consultation_gen {
7    
8     // Champs contenant les UID des fichiers
9     var $abstract_type = array(
10     "fichier" => "file",
11     "om_fichier_consultation" => "file",
12     );
13    
14     var $metadata = array(
15     "om_fichier_consultation" => array(
16     "dossier" => "getDossier",
17     "dossier_version" => "getDossierVersion",
18     "numDemandeAutor" => "getNumDemandeAutor",
19     "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
20     "typeInstruction" => "getTypeInstruction",
21     "statutAutorisation" => "getStatutAutorisation",
22     "typeAutorisation" => "getTypeAutorisation",
23     "dateEvenementDocument" => "getDateEvenementDocument",
24     "groupeInstruction" => 'getGroupeInstruction',
25     "title" => 'getTitle',
26     ),
27     "fichier" => array(
28     "filename" => "getFichierFilename",
29     "dossier" => "getDossier",
30     "dossier_version" => "getDossierVersion",
31     "numDemandeAutor" => "getNumDemandeAutor",
32     "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
33     "typeInstruction" => "getTypeInstruction",
34     "statutAutorisation" => "getStatutAutorisation",
35     "typeAutorisation" => "getTypeAutorisation",
36     "dateEvenementDocument" => "getDateEvenementDocument",
37     "groupeInstruction" => 'getGroupeInstruction',
38     "title" => 'getTitle',
39     ),
40     );
41    
42     /**
43     * Les nouvelles actions sont activées sur cet objet.
44     *
45     * @var boolean
46     */
47     var $activate_class_action;
48    
49     /**
50     * Cette variable permet de stocker le résultat de la méthode
51     * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
52     * ces appels.
53     * @var string Code de la division du dossier en cours
54     */
55     var $_division_from_dossier = NULL;
56    
57     /**
58 fmichon 3892 * Instance de la classe dossier
59     *
60     * @var mixed
61     */
62     var $inst_dossier = null;
63    
64     /**
65 mbroquet 3730 * Constructeur.
66     *
67     * @param integer $id identifiant de l'enregistrement
68     * @param database $db handler de la base de données
69     * @param boolean $debug debug
70     */
71 nhaye 5254 function __construct($id, &$dnu1 = null, $dnu2 = null) {
72 mbroquet 3730 //On active les nouvelles actions
73     $this->activate_class_action = true;
74 nhaye 5254 $this->constructeur($id, $dnu1, $dnu2);
75 mbroquet 3730 }// fin constructeur
76    
77     /**
78     * Définition des actions disponibles sur la classe.
79     *
80     * @return void
81     */
82     function init_class_actions() {
83    
84     parent::init_class_actions();
85    
86     // ACTION - 001 - modifier
87     //
88 softime 5024 $this->class_actions[1]["condition"] = array("is_editable");
89 mbroquet 3730
90     // ACTION - 002 - supprimer
91     //
92 softime 5024 $this->class_actions[2]["condition"] = array("is_deletable");
93 mbroquet 3730
94     // ACTION - 040 - ajout_multiple
95     // Ajout de consultattons multiples
96     $this->class_actions[40] = array(
97     "identifier" => "ajout_multiple",
98     "view" => "view_ajout_multiple",
99     "method" => "ajouter_multiple",
100     "button" => "valider",
101     "permission_suffix" => "ajouter",
102     "condition" => array("is_multiaddable"),
103     );
104     // ACTION - 050 - marquer_comme_lu
105     // Pour qu'un cadre valide l'analyse
106     $this->class_actions[50] = array(
107     "identifier" => "marquer_comme_lu",
108     "portlet" => array(
109     "type" => "action-direct",
110     "libelle" => _("Marquer comme lu"),
111     "order" => 50,
112     "class" => "lu-16",
113     ),
114     "view" => "formulaire",
115     "method" => "marquer_comme_lu",
116     "permission_suffix" => "modifier_lu",
117     "condition" => array("is_markable",
118     "show_marquer_comme_lu_portlet_action"),
119     );
120     // ACTION - 060 - finaliser
121     // Pour qu'un cadre valide l'analyse
122     $this->class_actions[60] = array(
123     "identifier" => "finalise",
124     "portlet" => array(
125     "type" => "action-direct",
126     "libelle" => _("Finaliser le document"),
127     "order" => 60,
128     "class" => "finalise",
129     ),
130     "view" => "formulaire",
131     "method" => "finalize",
132     "permission_suffix" => "finaliser",
133     "condition" => array("show_consultation_finaliser_portlet_action",
134     "is_finalizable"),
135     );
136    
137     // ACTION - 070 - unfinaliser
138     // Pour qu'un cadre valide l'analyse
139     $this->class_actions[70] = array(
140     "identifier" => "unfinalise",
141     "portlet" => array(
142     "type" => "action-direct",
143     "libelle" => _("Reprendre la redaction du document"),
144     "order" => 70,
145     "class" => "definalise",
146     ),
147     "view" => "formulaire",
148     "method" => "unfinalize",
149     "permission_suffix" => "definaliser",
150     "condition" => array("show_unfinalize_portlet_action",
151     "is_unfinalizable"),
152     );
153    
154     // ACTION - 080 - consulter_pdf
155     // Pour qu'un cadre valide l'analyse
156     $this->class_actions[80] = array(
157     "identifier" => "consulter_pdf",
158     "portlet" => array(
159     "type" => "action-blank",
160     "libelle" => _("Editer la consultation PDF"),
161     "order" => 45,
162     "class" => "pdf-16",
163     ),
164     "view" => "view_consulter_pdf",
165     "permission_suffix" => "consulter",
166     );
167    
168 nmeucci 4319 // ACTION - 090 - Générer l'édition PDF d'une consultation multiple
169     //
170     $this->class_actions[90] = array(
171     "identifier" => "generate_pdf_consultation_multiple",
172     "view" => "generate_pdf_consultation_multiple",
173     "permission_suffix" => "ajouter",
174     );
175 mbroquet 3730
176     // ACTION - 100 - retour_consultation
177     // Lors de la saisie de retour d'avis par le profil suivi des dates
178     $this->class_actions[100] = array(
179     "identifier" => "retour_consultation",
180     "view" => "formulaire",
181     "method" => "modifier",
182     "button" => _("Modifier"),
183     "permission_suffix" => "modifier",
184     "condition" => array("is_suivi_retours_de_consultation"),
185    
186     );
187    
188 fmichon 4237 $this->class_actions[110] = array(
189     "identifier" => "suivi_mise_a_jour_des_dates",
190     "view" => "view_suivi_mise_a_jour_des_dates",
191     "permission_suffix" => "suivi_mise_a_jour_des_dates",
192     "condition" => array(),
193     );
194    
195     $this->class_actions[120] = array(
196     "identifier" => "suivi_retours_de_consultation",
197     "view" => "view_suivi_retours_de_consultation",
198     "permission_suffix" => "suivi_retours_de_consultation",
199     "condition" => array(),
200     );
201 mbroquet 3730 }
202    
203     /**
204 fmichon 4237 * Permet de modifier le fil d'Ariane depuis l'objet pour un formulaire
205     * @param string $ent Fil d'Ariane récupéréré
206     * @return Fil d'Ariane
207     */
208     function getFormTitle($ent) {
209     //
210     if ($this->getParameter('maj') == 120) {
211     //
212     return _("suivi")." -> "._("demandes d'avis")." -> "._("retours de consultation");
213     }
214     //
215     if ($this->getParameter('maj') == 110) {
216     //
217     return _("suivi")." -> "._("demandes d'avis")." -> "._("mise a jour des dates");
218     }
219     //
220     if ($this->getParameter('maj') == 100) {
221     //
222     return _("suivi")." -> "._("demandes d'avis")." -> "._("retours de consultation")." -> ".$this->getVal($this->clePrimaire);
223     }
224     //
225     return $ent;
226     }
227    
228    
229     /**
230     * Ce script permet de gérer l'interface de saisie rapide des retours de
231     * consultation par la cellule suivi l'aide d'un code barre.
232     */
233     function view_suivi_retours_de_consultation() {
234     //
235     $this->checkAccessibility();
236     /**
237     * Validation du formulaire
238     */
239     // Si le formulaire a été validé
240     if ($this->f->get_submitted_post_value('code_barres') !== null) {
241     // Si la valeur transmise est correcte
242     if ($this->f->get_submitted_post_value('code_barres') != ""
243     && is_numeric($this->f->get_submitted_post_value('code_barres'))) {
244     // Vérification de l'existence de la consultation
245     $sql = "SELECT consultation FROM ".DB_PREFIXE."consultation ";
246     $sql .= " WHERE code_barres='".$this->f->db->escapesimple($this->f->get_submitted_post_value('code_barres'))."'";
247     $res = $this->f->db->query($sql);
248     // Logger
249     $this->f->addToLog(
250     __METHOD__."(): db->query(\"".$sql."\")",
251     VERBOSE_MODE
252     );
253     // Gestion des erreurs de base de données
254     $this->f->isDatabaseError($res);
255     // En fonction du nombre de consultations correspondantes
256     // on affiche un message d"erreur ou on redirige vers le formulaire de
257     // saisie du retour
258     if ($res->numrows()==0) {
259     // Si
260     $message_class = "error";
261     $message = _("Ce code barres de consultation n'existe pas.");
262     } elseif ($res->numrows() > 1) {
263     // Si
264     $message_class = "error";
265     $message = _("Plusieurs consultations avec ce code barres.");
266     } else {
267     $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
268     header("Location: ../scr/form.php?obj=consultation&action=100&retour=suivi_retours_de_consultation&idx=".$row['consultation']);
269     }
270     } elseif ($this->f->get_submitted_post_value('code_barres')!==null && $this->f->get_submitted_post_value('code_barres') == "") {
271     // Si aucune valeur n'a été saisie dans le champs consultation
272     $message_class = "error";
273     $message = _("Veuiller saisir un code barres de consultation.");
274     } else {
275     // Si
276     $message_class = "error";
277     $message = _("Cette consultation n'existe pas.");
278     }
279     }
280    
281     /**
282     * Affichage des messages et du formulaire
283     */
284     // Affichage du message de validation ou d'erreur
285     if (isset($message) && isset($message_class) && $message != "") {
286     $this->f->displayMessage($message_class, $message);
287     }
288     //
289     $datasubmit = $this->getDataSubmit();
290     // Inclusion de la classe de gestion des formulaires
291     require_once "../obj/om_formulaire.class.php";
292     // Ouverture du formulaire
293     echo "\t<form";
294     echo " method=\"post\"";
295     echo " id=\"suivi_retours_de_consultation_form\"";
296     echo " action=\"".$datasubmit."\"";
297     echo ">\n";
298     // Paramétrage des champs du formulaire
299     $champs = array("code_barres");
300     // Création d'un nouvel objet de type formulaire
301     $form = new formulaire(null, 0, 0, $champs);
302     // Paramétrage des champs du formulaire
303     $form->setLib("code_barres", _("No de code barres de consultation"));
304     $form->setType("code_barres", "text");
305     $form->setTaille("code_barres", 25);
306     $form->setMax("code_barres", 25);
307     // Affichage du formulaire
308     $form->entete();
309     $form->afficher($champs, 0, false, false);
310     $form->enpied();
311     // Affichage du bouton
312     echo "\t<div class=\"formControls\">\n";
313     $this->f->layout->display_form_button(array("value" => _("Valider")));
314     echo "\t</div>\n";
315     // Fermeture du formulaire
316     echo "\t</form>\n";
317     }
318    
319     /**
320     * Ce script permet de mettre à jour les dates de suivi du traitement
321     * des consultations.
322     */
323     function view_suivi_mise_a_jour_des_dates() {
324     //
325     $this->checkAccessibility();
326    
327     // Récupération des valeur passées en POST ou GET
328     $date = "";
329     if($this->f->get_submitted_post_value('date') !== null) {
330     $date = $this->f->get_submitted_post_value('date');
331     } elseif($this->f->get_submitted_get_value('date') !== null) {
332     $date = $this->f->get_submitted_get_value('date');
333     }
334     $code_barres = "";
335     if($this->f->get_submitted_post_value('code_barres') !== null) {
336     $code_barres = $this->f->get_submitted_post_value('code_barres');
337     } elseif($this->f->get_submitted_get_value('code_barres')!==null) {
338     $code_barres = $this->f->get_submitted_get_value('code_barres');
339     }
340    
341     // Booléen permettant de définir si un enregistrement à eu lieu
342     $correct = false;
343     // Booléen permettant de définir si les dates peuvent êtres enregistrées
344     $date_error = false;
345    
346     // Si le formulaire a été validé
347     if ($this->f->get_submitted_post_value('validation') !== null) {
348     //Tous les champs doivent obligatoirement être remplis
349     if ( !empty($date) && !empty($code_barres) ){
350    
351     //Vérification de l'existence de la consultation
352     $sql = "SELECT consultation, type_consultation
353     FROM ".DB_PREFIXE."consultation
354     LEFT JOIN ".DB_PREFIXE."service
355     ON service.service = consultation.service
356     WHERE code_barres = '".$this->f->db->escapesimple($code_barres)."'";
357     $res = $this->f->db->query($sql);
358     $this->f->addToLog("app/demandes_avis_mise_a_jour_des_dates.php : db->query(\"".$sql."\")", VERBOSE_MODE);
359     $this->f->isDatabaseError($res);
360    
361     //Si le code barres est correct
362     if($res->numrows() == 1) {
363    
364     //Un retour de demande d'avis ne peut être saisie que si le type de
365     //consultation est "avec_avis_attendu"
366     $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
367     if ( strcasecmp($row['type_consultation'], "avec_avis_attendu") === 0 ){
368    
369     //On met à jour la date après l'écran de vérification
370     if($this->f->get_submitted_post_value("is_valid") != null and $this->f->get_submitted_post_value("is_valid") == "true") {
371     require_once '../obj/consultation.class.php';
372     $consultation = new consultation($row['consultation'], $this->f->db, DEBUG);
373     $consultation->setParameter("maj", 1);
374     $valF = array();
375     foreach($consultation->champs as $id => $champ) {
376     $valF[$champ] = $consultation->val[$id];
377     }
378    
379     $valF['date_reception']=$date;
380    
381     $consultation->modifier($valF, $this->f->db, DEBUG);
382     // Vérification de la finalisation du document
383     // correspondant au code barres
384     if($consultation->valF["om_final_consultation"] === true) {
385     $message_class = "valid";
386     $message = _("Saisie enregistree");
387     $code_barres = "";
388     } else {
389     //
390     $message_class = "error";
391     $message = sprintf(_("Le document correspondant au
392     code barres %s n'est pas finalise,
393     la date ne sera pas mise a jour."),
394     $code_barres);
395     }
396    
397     }
398     //Sinon on récupère les infos du dossier pour les afficher
399     else {
400     // Récupération des infos du dossier
401     $sqlInfo = "SELECT dossier_libelle, libelle,
402     date_reception,
403     TO_CHAR(date_envoi ,'DD/MM/YYYY') as date_envoi
404     FROM ".DB_PREFIXE."consultation
405     LEFT JOIN ".DB_PREFIXE."dossier
406     ON dossier.dossier = consultation.dossier
407     LEFT JOIN ".DB_PREFIXE."service
408     ON service.service = consultation.service
409     WHERE code_barres='".$code_barres."'";
410     $resInfo = $this->f->db->query($sqlInfo);
411     $this->f->isDatabaseError($resInfo);
412     $infos = $resInfo->fetchRow(DB_FETCHMODE_ASSOC);
413     }
414     }
415     //C'est un autre type de consultation
416     else{
417     $message_class = "error";
418     $message = _("Cette consultation n'a pas d'avis attendu.");
419     }
420     }
421     else {
422     $message_class = "error";
423     $message = _("Le numero saisi ne correspond a aucun code barres de consultation.");
424     }
425     } else {
426     $message_class = "error";
427     $message = _("Tous les champs doivent etre remplis.");
428     }
429     }
430    
431     /**
432     * Affichage des messages et du formulaire
433     */
434     // Affichage du message de validation ou d'erreur
435     if (isset($message) && isset($message_class) && $message != "") {
436     $this->f->displayMessage($message_class, $message);
437     }
438     //
439     $datasubmit = $this->getDataSubmit();
440     // Inclusion de la classe de gestion des formulaires
441     require_once "../obj/om_formulaire.class.php";
442     // Ouverture du formulaire
443     printf("\t<form");
444     printf(" method=\"post\"");
445     printf(" id=\"demandes_avis_mise_a_jour_des_dates_form\"");
446     printf(" action=\"".$datasubmit."\"");
447     printf(">\n");
448     // Paramétrage des champs du formulaire
449     $champs = array("date", "code_barres");
450     if (isset($infos)) {
451     array_push(
452     $champs,
453     "dossier_libelle",
454     "service",
455     "date_envoi",
456     "date_reception",
457     "is_valid"
458     );
459     }
460     // Création d'un nouvel objet de type formulaire
461     $form = new formulaire(null, 0, 0, $champs);
462     // Paramétrage des champs du formulaire
463     // Parametrage du champ date
464     $form->setLib("date", _("Date")."* :");
465     if (isset($infos)) {
466     $form->setType("date", "hiddenstaticdate");
467     } else {
468     $form->setType("date", "date");
469     }
470     $form->setVal("date", $date);
471     $form->setTaille("date", 10);
472     $form->setMax("date", 10);
473    
474     // Parametrage du champ code_barres
475     $form->setLib("code_barres", _("Code barres de consultation")."* :");
476     if (isset($infos)) {
477     $form->setType("code_barres", "hiddenstatic");
478     } else {
479     $form->setType("code_barres", "text");
480     }
481     $form->setVal("code_barres", $code_barres);
482     $form->setTaille("code_barres", 20);
483     $form->setMax("code_barres", 20);
484    
485     // Ajout des infos du dossier correspondantes à la consultation séléctionnée
486     if (isset($infos)) {
487    
488     // Tous les champs sont défini par defaut à static
489     foreach ($infos as $key => $value) {
490     $form->setType($key, "static");
491     $form->setVal($key, $value);
492     }
493    
494     // Les champs dont on vient de définir la valeur sont en gras
495     $form->setBloc("date_reception", 'DF', "", 'bold');
496    
497     // Parametrage du champ dossier
498     $form->setLib("dossier_libelle", _("dossier_libelle")." :");
499     $form->setType("dossier_libelle", "static");
500     $form->setVal("dossier_libelle", $infos['dossier_libelle']);
501    
502     // Parametrage du champ service
503     $form->setLib("service", _("service")." :");
504     $form->setType("service", "static");
505     $form->setVal("service", $infos['libelle']);
506    
507     // Parametrage des libellés d'envoi avec RAR
508     $form->setLib("date_envoi", _("Envoi demande d'avis")." :");
509     $form->setLib("date_reception", _("Retour demande d'avis")." :");
510     $form->setVal("date_reception", $date);
511    
512     // Ajout d'un champ hidden permettant de savoir que le formulaire précédant est celui de vérification
513     $form->setLib("is_valid", _("Valide")." :");
514     $form->setType("is_valid", "hidden");
515     $form->setVal("is_valid", 'true');
516    
517     $form->setFieldset('dossier_libelle', 'D', _('Synthese'));
518     $form->setFieldset('is_valid', 'F');
519     }
520    
521    
522     // Création du fieldset regroupant les champs permettant la mise à jour des date
523     $form->setFieldset('date', 'D', _('Mise a jour'));
524     $form->setFieldset('code_barres', 'F');
525     // Affichage du formulaire
526     $form->entete();
527     $form->afficher($champs, 0, false, false);
528     $form->enpied();
529     // Affichage du bouton
530     printf("\t<div class=\"formControls\">\n");
531     //
532     if (!$date_error) {
533     $this->f->layout->display_form_button(
534     array("value" => _("Valider"), "name" => "validation")
535     );
536     }
537     // Si pas sur l'écran de validation
538     if (isset($infos)) {
539     printf(
540     '<a class="retour" href="%s&amp;date=%s&amp;code_barres=%s">Retour</a>',
541     $datasubmit,
542     $date,
543     $code_barres
544     );
545     }
546     printf("\t</div>\n");
547     // Fermeture du formulaire
548     printf("\t</form>\n");
549    
550     }
551    
552     /**
553 mbroquet 3730 * Défini si l'utilisateur est un intructeur qui en correspond à la division
554     * du dossier.
555     *
556     * @return boolean true si correspond false sinon
557     */
558     function is_instructeur_from_division() {
559    
560     if ($this->f->isUserInstructeur()
561     && isset($this->f->om_utilisateur["division"])
562     && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
563     //
564     return false;
565     }
566     return true;
567     }
568    
569     /**
570     * Défini si l'utilisateur est de la cellule suivi.
571     *
572     * @return boolean true si correspond false sinon
573     */
574     function is_suivi_retours_de_consultation() {
575    
576     if($this->f->can_bypass("consultation", "modifier")){
577     return true;
578     }
579    
580 fmichon 4237 return $this->f->isAccredited("consultation_suivi_retours_de_consultation");
581 mbroquet 3730 }
582    
583     /**
584     * Si le champ lu est à true l'action "Marquer comme lu" n'est pas affichée
585     *
586     * @return boolean true sinon lu false sinon
587     */
588     function show_marquer_comme_lu_portlet_action() {
589     if (isset($this->val[array_search("lu", $this->champs)])
590     && $this->val[array_search("lu", $this->champs)]== "t") {
591     return false;
592     }
593     return true;
594     }
595    
596     /**
597     * Si le document est finalisé l'action "finaliser" n'est pas affichée
598     *
599     * @return boolean true sinon lu false sinon
600     */
601     function show_consultation_finaliser_portlet_action() {
602     if ($this->is_document_finalized("om_final_consultation")) {
603     return false;
604     }
605     return true;
606     }
607    
608     /**
609     * Retourne is_document_finalized("om_final_consultation")
610     *
611     * @return boolean true si finalisé false sinon
612     */
613     function show_unfinalize_portlet_action() {
614     return $this->is_document_finalized("om_final_consultation");
615     }
616    
617     /**
618     * Permet de savoir si le document passé en paramètre est finalisé
619     *
620     * @param string $field flag finalisé
621     *
622     * @return boolean true si finalisé false sinon
623     */
624     function is_document_finalized($field) {
625     if($this->getVal($field) == 't') {
626     return true;
627     }
628     return false;
629     }
630    
631     /**
632     * Si le dossier d'instruction auquel est rattachée la consultation est
633     * cloturé, on affiche pas les liens du portlet.
634     *
635     * @return boolean true si non cloturé false sinon
636     */
637     function is_dossier_instruction_not_closed() {
638     $idxformulaire = $this->getParameter("idxformulaire");
639     $retourformulaire = $this->getParameter("retourformulaire");
640     //Si le dossier d'instruction auquel est rattachée la consultation est
641     //cloturé, on affiche pas les liens du portlet
642     if ( $idxformulaire != '' &&
643     (
644     $retourformulaire == 'dossier' ||
645     $retourformulaire == 'dossier_instruction' ||
646     $retourformulaire == 'dossier_instruction_mes_encours' ||
647     $retourformulaire == 'dossier_instruction_tous_encours' ||
648     $retourformulaire == 'dossier_instruction_mes_clotures' ||
649     $retourformulaire == 'dossier_instruction_tous_clotures'
650     )){
651    
652     //On récuppère le statut du dossier d'instruction
653     $statut = $this->f->getStatutDossier($idxformulaire);
654     if ( $this->f->isUserInstructeur() && $statut == "cloture" ){
655     return false;
656     }
657     }
658     return true;
659     }
660    
661     // {{{ Gestion de la confidentialité des données spécifiques
662    
663     /**
664     * Cette méthode permet de récupérer le code de division correspondant
665     * au dossier sur lequel on se trouve.
666     *
667     * @return string Code de la division du dossier en cours
668     */
669     function getDivisionFromDossier() {
670    
671     // Cette méthode peut être appelée plusieurs fois lors d'une requête.
672     // Pour éviter de refaire le traitement de recherche de la division
673     // alors on vérifie si nous ne l'avons pas déjà calculé.
674     if ($this->_division_from_dossier != NULL) {
675     // Logger
676     $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
677     // On retourne la valeur déjà calculée
678     return $this->_division_from_dossier;
679     }
680    
681     // Par défaut, on définit la valeur du dossier à NULL
682     $dossier = NULL;
683     // Test sur le mode et le contexte du formulaire
684     if (($this->getParameter("maj") == 0 or $this->getParameter("maj") == 40)
685     && ($this->getParameter("retourformulaire") == "dossier"
686     || $this->getParameter("retourformulaire") == "dossier_instruction"
687     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
688     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
689     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
690     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures")) {
691     // Si on se trouve en mode AJOUT (seul mode où l'enregistrement
692     // n'existe pas en base de données) ET que nous nous trouvons
693     // dans le contexte d'un dossier d'instruction alors on récupère
694     // le numéro de dossier depuis le paramètre 'idxformulaire'
695     $dossier = $this->getParameter("idxformulaire");
696     } else {
697     // Sinon on récupère le numéro de dossier dans le champs dossier de
698     // l'enregistrement (en base de données)
699     $dossier = $this->getVal("dossier");
700     }
701    
702     // On appelle la méthode de la classe utils qui renvoi le code de la
703     // division d'un dossier, on la stocke pour ne pas refaire le calcul au
704     // prochain appel de cette méthode
705     $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
706     // Logger
707     $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
708     // On retourne la valeur retournée
709     return $this->_division_from_dossier;
710    
711     }
712    
713 fmichon 4708
714     /**
715     *
716     */
717     function get_inst_service($service = null) {
718     //
719     if ($service !== null) {
720     require_once "../obj/service.class.php";
721     return new service($service, $this->f->db, null);
722     }
723     //
724 nhaye 5254 if (isset($this->inst_service) === false or
725     $this->inst_service === null) {
726 fmichon 4708 require_once "../obj/service.class.php";
727     $this->inst_service = new service($this->getVal('service'), $this->f->db, null);
728     }
729     return $this->inst_service;
730     }
731    
732     /**
733 mbroquet 3730 * TREATMENT - marquer_comme_lu.
734     *
735     * Cette methode permet de passer la consultation en "lu"
736     *
737     * @return boolean true si maj effectué false sinon
738     */
739     function marquer_comme_lu() {
740     // Cette méthode permet d'exécuter une routine en début des méthodes
741     // dites de TREATMENT.
742     $this->begin_treatment(__METHOD__);
743    
744     if($this->getVal("lu") == 'f') {
745     $this->correct = true;
746     $this->valF["lu"] = true;
747    
748     $res = $this->f->db->autoExecute(
749     DB_PREFIXE.$this->table,
750     $this->valF,
751     DB_AUTOQUERY_UPDATE,
752     $this->clePrimaire."=".$this->getVal($this->clePrimaire)
753     );
754     if ($this->f->isDatabaseError($res, true)) {
755     // Appel de la methode de recuperation des erreurs
756     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
757     $this->correct = false;
758     // Termine le traitement
759     return $this->end_treatment(__METHOD__, false);
760     } else {
761     $this->addToMessage(_("Mise a jour effectue avec succes"));
762     return $this->end_treatment(__METHOD__, true);
763     }
764    
765     } else {
766     $this->addToMessage(_("Element deja marque comme lu"));
767     }
768    
769     // Termine le traitement
770     return $this->end_treatment(__METHOD__, false);
771     }
772    
773     // }}}
774    
775     /**
776     * TREATMENT - ajouter_multiple.
777     *
778     * Cette methode permet d'ajouter plusieurs consultations.
779     *
780     * @return boolean true si ajouts effectués false sinon
781     */
782     function ajouter_multiple() {
783     // Cette méthode permet d'exécuter une routine en début des méthodes
784     // dites de TREATMENT.
785     $this->begin_treatment(__METHOD__);
786    
787     // Identifiant de l'objet metier a copier
788     ($this->f->get_submitted_get_value('idxformulaire') !== null ? $idx = $this->f->get_submitted_get_value('idxformulaire') : $idx = "");
789     // Nom de l'objet metier
790     ($this->f->get_submitted_get_value('obj') !== null ? $obj = $this->f->get_submitted_get_value('obj') : $obj = "");
791     //formulaire retour
792     ($this->f->get_submitted_get_value('ret') !== null ? $retourformulaire = $this->f->get_submitted_get_value('ret') : $retourformulaire = "");
793     ($this->f->get_submitted_get_value('date_envoi') !== null ? $date_envoi = $this->f->get_submitted_get_value('date_envoi') : $date_envoi = "");
794     /*Récupération des données et formatage.*/
795     $donnees_temp = explode(';', $this->f->get_submitted_get_value('data'));
796     for ( $i = 1 ; $i < count($donnees_temp) ; $i++ )
797     $donnees[] = explode('_', $donnees_temp[$i]);
798     /* Nombre de consultations papier à générer */
799     $nbConsPap = 0;
800    
801     /* Ajout des données en base de données
802     * 0 : l'ID du service
803     * 1 : consultation papier {0,1}
804     * */
805     if ( isset($donnees) && count($donnees) > 0 ) {
806    
807     foreach ($donnees as $value) {
808    
809     $sql = "SELECT delai, id, delai_type
810     FROM ".DB_PREFIXE."service
811     LEFT JOIN ".DB_PREFIXE."om_etat
812     ON service.edition = om_etat.om_etat
813     WHERE service = $value[0]";
814     $res = $this->f->db->query($sql);
815     // Si la récupération de la description de l'avis échoue
816     if ($this->f->isDatabaseError($res, true)) {
817     // Appel de la methode de recuperation des erreurs
818     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
819     $this->correct = false;
820     // Termine le traitement
821     $this->end_treatment(__METHOD__, false);
822     }
823     $row=& $res->fetchRow();
824     $delai = $row[0];
825     $type_edition = $row[1];
826     $delai_type = $row[2];
827    
828     /*Calcul du delai de retour*/
829     $date_envoi_temp = $this->datePHP($date_envoi);
830     $delai = $this->dateDB($this->f->mois_date($date_envoi_temp, $delai, "+", $delai_type));
831    
832     /*Les données à ajouter*/
833     $arrayVal = array(
834     'consultation' => "]",
835     'dossier' => $idx,
836     'date_envoi' => $date_envoi,
837     'date_retour' => NULL,
838     'date_limite' => $delai,
839     'service' => $value[0],
840     'avis_consultation' => NULL,
841     'date_reception' => NULL,
842     'motivation' => "",
843     'fichier' => NULL,
844     'lu' => TRUE,
845     'code_barres' => NULL,
846 nmeucci 3923 'om_final_consultation' => false,
847     'om_fichier_consultation' => '',
848 nmeucci 3985 'marque' => false,
849 mbroquet 3730 );
850    
851     $res_ajout = $this->ajouter($arrayVal, $this->f->db, DEBUG);
852     if($res_ajout != true) {
853     // Termine le traitement
854     $this->end_treatment(__METHOD__, false);
855     }
856    
857     /*Comptage du nombre de consultations papier demandées et récupération des ids des PDFs à éditer*/
858     if ($value[1]==1){
859     $idxConsultations[] = $this->valF['consultation'];
860     $objConsultations[] = $type_edition;
861     $nbConsPap++;
862     }
863     }
864 nmeucci 4319
865 mbroquet 3730 /*Génération du PDF*/
866 nmeucci 4319 if (isset($idxConsultations) && count($idxConsultations) > 0 ){
867    
868     // Stockage de l'identifiant de chaque consultation dont on veut éditer la
869     // version papier, séparés par un point-virgule
870     $textIdsConsultations = "";
871 mbroquet 3730 foreach ($idxConsultations as $value) {
872 nmeucci 4319 if ($textIdsConsultations != "") {
873     $textIdsConsultations .= ";";
874     }
875     $textIdsConsultations .= $value;
876 mbroquet 3730 }
877 nmeucci 4319 // Stockage de l'objet de chaque consultation dont on veut éditer la
878     // version papier, séparés par un point-virgule
879     $textObjConsultations = "";
880 mbroquet 3730 foreach ($objConsultations as $value) {
881 nmeucci 4319 if ($textObjConsultations != "") {
882     $textObjConsultations .= ";";
883     }
884     $textObjConsultations .= $value;
885 mbroquet 3730 }
886 nmeucci 4319
887     // Ouverture du PDF dans une nouvelle fenêtre
888     printf("
889 mbroquet 3730 <script language='javascript' type='text/javascript'>
890 nmeucci 4319 window.open('%s','_blank')
891 mbroquet 3730 </script>
892 nmeucci 4319 ",
893     "../scr/form.php?obj=consultation&action=90&idx=0&textobj=".$textObjConsultations."&"."textids=".$textIdsConsultations
894     );
895 mbroquet 3730 }
896     $return_url = "../scr/soustab.php?";
897     $return_url .= "obj=consultation";
898     $return_url .= "&retourformulaire=".$this->getParameter("retourformulaire");
899     $return_url .= "&idxformulaire=".$this->getParameter("idxformulaire");
900     $return_url .= "&premier=".$this->getParameter("premiersf");
901     $return_url .= "&tricol=".$this->getParameter("tricolsf");
902    
903     /*Affichage du message d'information*/
904     $this->f->displayMessage("valid", count($donnees)._(' service(s) selectionne(s) dont ').$nbConsPap._(' consultation(s) papier.'));
905    
906    
907     // Termine le traitement
908     return $this->end_treatment(__METHOD__, true);
909     }
910     }
911    
912    
913     /**
914     * VIEW - view_ajout_multiple.
915     *
916     * Formulaire specifique
917     *
918     * @return void
919     */
920     function view_ajout_multiple() {
921    
922     if (count($this->f->get_submitted_get_value()) > 0
923     && $this->f->get_submitted_get_value('data') !== null
924     && $this->f->get_submitted_get_value('data') != "" ) {
925     $this->f->disableLog();
926     $this->ajouter_multiple();
927    
928     } else {
929    
930     // Vérification de l'accessibilité sur l'élément
931     $this->checkAccessibility();
932     //
933     $datasubmit = $this->getDataSubmitSousForm();
934     $return_url = "../scr/soustab.php?";
935     $return_url .= "obj=consultation";
936     $return_url .= "&retourformulaire=".$this->getParameter("retourformulaire");
937     $return_url .= "&idxformulaire=".$this->getParameter("idxformulaire");
938     $return_url .= "&premier=".$this->getParameter("premiersf");
939     $return_url .= "&tricol=".$this->getParameter("tricolsf");
940     // Légende du fieldset
941     $title = _("Objet");
942     /*Requête qui récupère les services qui sont dans des thématiques*/
943     $sql =
944     "SELECT
945     ser_cat.service_categorie,
946     ser_cat.libelle AS them_lib,
947     ser.service,
948     CONCAT(ser.abrege, ' - ', ser.libelle) AS ser_lib,
949     ser.consultation_papier
950     FROM
951     ".DB_PREFIXE."lien_service_service_categorie lie,
952     ".DB_PREFIXE."service_categorie ser_cat,
953     ".DB_PREFIXE."service ser
954     LEFT JOIN ".DB_PREFIXE."om_collectivite
955     ON ser.om_collectivite = om_collectivite.om_collectivite
956     WHERE
957     ser_cat.service_categorie = lie.service_categorie AND
958     ser.service = lie.service AND
959     (
960     (ser.om_validite_debut IS NULL
961     AND (ser.om_validite_fin IS NULL
962     OR ser.om_validite_fin > CURRENT_DATE))
963     OR
964     (ser.om_validite_debut <= CURRENT_DATE
965     AND (ser.om_validite_fin IS NULL
966     OR ser.om_validite_fin > CURRENT_DATE))
967     )";
968    
969     // Si c'est un sous-formulaire de dossier d'instruction ou une de ses surcharges
970     // mes encours, mes clôtures...
971     $is_in_context_of_foreign_key = $this->is_in_context_of_foreign_key("dossier", $this->getParameter('retourformulaire'));
972     if ($is_in_context_of_foreign_key == true) {
973    
974     // on recupère les services des multicollectivités et de celle
975     // du DI
976     require_once "../obj/dossier_instruction.class.php";
977     $di = new dossier_instruction($this->getParameter('idxformulaire'), $this->db, false);
978    
979     //
980     $sql .= sprintf(" AND (om_collectivite.niveau = '2' OR ser.om_collectivite = %s) ", $di->getVal('om_collectivite'));
981     }
982     //
983     $sql .= " ORDER BY them_lib, ser.abrege, ser.libelle";
984    
985     $res = $this->f->db->query($sql);
986     $this->f->addToLog(
987     "app/consultation_multiple.php: db->query(\"".$sql."\")", VERBOSE_MODE
988     );
989     $this->f->isDatabaseError($res);
990    
991     $temp_ser_cat = 0;
992     $liste_gauche = "";
993    
994     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
995     $name = $row['service_categorie'].'_'.
996     $row['service'].'_'.
997     (($row['consultation_papier'] == '' || $row['consultation_papier'] == 'f' ) ? '0' : '1' ).'_';
998     // On change de thématique, donc rajoute le nom de la thématique
999     if ( $temp_ser_cat != $row['service_categorie'] ){
1000    
1001     $temp_ser_cat = $row['service_categorie'];
1002     $liste_gauche .= '
1003     <div id="them_'.$row['service_categorie'].'" class="liste_gauche_them" >'.
1004     $row['them_lib'].
1005     '</div>
1006     <div
1007     class="liste_gauche_service t'.$name.'"
1008     id="t'.$name.'" >
1009     '.$row['ser_lib'].'
1010     <input class="t'.$name.'" type="checkbox" '.(($row['consultation_papier'] == '' || $row['consultation_papier'] == 'f' ) ? '' : 'checked="checked"' ).'/>
1011     </div>
1012     ';
1013     }
1014    
1015     /*On est dans la même thématique*/
1016     else {
1017    
1018     $liste_gauche .= '
1019     <div
1020     class="liste_gauche_service t'.$name.'"
1021     id="t'.$name.'" >
1022     '.$row['ser_lib'].'
1023     <input class="t'.$name.'" type="checkbox" '.(($row['consultation_papier'] == '' || $row['consultation_papier'] == 'f' ) ? '' : 'checked="checked"' ).'/>
1024     </div>
1025     ';
1026     }
1027    
1028     }
1029    
1030     /*Requête qui récupère les services qui ne sont pas dans une thématique*/
1031     $sql =
1032     "SELECT service.service,
1033     CONCAT(service.abrege, ' - ', service.libelle) AS ser_lib,
1034     service.consultation_papier
1035     FROM ".DB_PREFIXE."service
1036     LEFT JOIN ".DB_PREFIXE."om_collectivite
1037     ON service.om_collectivite = om_collectivite.om_collectivite
1038     WHERE service NOT IN
1039     (
1040     SELECT service
1041     FROM ".DB_PREFIXE."lien_service_service_categorie
1042     )
1043     AND
1044     (
1045     om_validite_fin <= CURRENT_DATE OR
1046     om_validite_fin IS NULL
1047     )
1048     ";
1049    
1050     // Si c'est un sous-formulaire de dossier d'instruction ou une de ses surcharges
1051     // mes encours, mes clôtures...
1052     $is_in_context_of_foreign_key = $this->is_in_context_of_foreign_key("dossier", $this->getParameter('retourformulaire'));
1053     if ($is_in_context_of_foreign_key == true) {
1054    
1055     // on recupère les services des multicollectivités et de celle
1056     // du DI
1057     require_once "../obj/dossier_instruction.class.php";
1058     $di = new dossier_instruction($this->getParameter('idxformulaire'), $this->db, false);
1059    
1060     //
1061     $sql .= sprintf(" AND (om_collectivite.niveau = '2' OR service.om_collectivite = %s) ", $di->getVal('om_collectivite'));
1062     }
1063    
1064     // Tri des services qui ne sont pas dans une thématique par ordre alphabétique
1065     $sql .= " ORDER BY service.abrege, service.libelle";
1066    
1067    
1068     $res = $this->f->db->query($sql);
1069     $this->f->isDatabaseError($res);
1070    
1071     if ($res->numrows() > 0) {
1072     $liste_gauche .= '
1073     <div id="them_0" class="liste_gauche_them">Autres</div>';
1074     }
1075    
1076     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1077    
1078     /*Ajout de tous les services qui n'ont pas de thématique*/
1079     $name = '0_'.
1080     $row['service'].'_'.
1081     (($row['consultation_papier'] == '' || $row['consultation_papier'] == 'f' ) ? '0' : '1' ).'_';
1082     $liste_gauche .= '
1083     <div
1084     class="liste_gauche_service t'.$name.'"
1085     id="t'.$name.'" >
1086     '.$row['ser_lib'].'&nbsp;
1087     <input class="t'.$name.'" type="checkbox" '.(($row['consultation_papier'] == '' || $row['consultation_papier'] == 'f' ) ? '' : 'checked="checked"' ).'/>
1088     </div>
1089     ';
1090     }
1091    
1092     /*Affichage du formulaire*/
1093     echo "\n<!-- ########## START DBFORM ########## -->\n";
1094     echo "<form";
1095     echo " method=\"post\"";
1096     echo " name=\"f2\"";
1097     echo " action=\"\"";
1098     echo " id=\"form_val\"";
1099     //echo " onsubmit=\"ajaxIt('consultation', '');return false;\"";
1100    
1101     //echo " onsubmit=\"affichersform('".$this->getParameter("objsf")."', '".$datasubmit."', this);\"";
1102     echo ">\n";
1103     echo '<div class="formEntete ui-corner-all">';
1104     echo "<div>";
1105     echo '<div class="bloc">';
1106     echo "<fieldset class='cadre ui-corner-all ui-widget-content'>\n";
1107     echo "\t<legend class='ui-corner-all ui-widget-content ui-state-active'>".
1108     _("Consultation par thematique ")."</legend>";
1109     echo "<div class='fieldsetContent' style='width:100%'>";
1110     echo '<div class="field-ser-them field-type-hiddenstatic">';
1111     echo '<div class="form-libelle">';
1112     echo '<label class="libelle-dossier" for="dossier">';
1113     echo _('dossier');
1114     echo '<span class="not-null-tag">*</span>';
1115     echo '</label>';
1116     echo '</div>';
1117     echo '<div class="form-content">';
1118     echo '<input class="champFormulaire" type="hidden" value="'.$this->getParameter("idxformulaire").'" name="dossier"/>';
1119     echo $this->getParameter("idxformulaire");
1120     echo '</div>';
1121     echo '</div>';
1122     /*Code du nouveau champ*/
1123     echo '<div class="field-ser-them ser-them">';
1124     echo '<div class="list-ser-them">';
1125     echo $liste_gauche;
1126     echo '</div>';
1127     echo '<div class="button-ser-them">';
1128     echo '<ul>';
1129     echo '<li>';
1130     echo '<input type="button" value="'._("Ajouter").' >>" id="add-ser-them"/>';
1131     echo '</li>';
1132     echo '<li>';
1133     echo '<input type="button" value="<< '._("Supprimer").'" id="del-ser-them"/>';
1134     echo '</li>';
1135     echo '</ul>';
1136     echo '</div>';
1137     echo '<div class="list-sel-ser-them">';
1138     echo '<div class=\'row row_title\'>';
1139     echo '<div class=\'cell1 liste_droite_title list-sel-ser-them-title\'>'._('Service a consulter').'</div>';
1140     echo '<div class=\'cell2 liste_droite_title list-sel-ser-them-title\'>'._('Version papier').'</div>';
1141     echo '</div>';
1142     echo '</div>';
1143     echo '</div>';
1144     /* -- FIN --*/
1145 jymadier 3990 // Le champ de date d'envoi est visible seulement aux ayant-droits
1146     if($this->f->isAccredited('consultation_saisir_date_envoi')) {
1147     echo '<div class="field-ser-them field-type-date2">';
1148     }
1149     else {
1150     echo '<div class="field field-type-hiddendate">';
1151     }
1152 mbroquet 3730 echo '<div class="form-libelle">';
1153     echo '<label class="libelle-date_envoi" for="date_envoi">';
1154     echo _('date_envoi');
1155     echo '<span class="not-null-tag">*</span>';
1156     echo '</label>';
1157     echo '</div>';
1158     echo '<div class="form-content">';
1159     echo '<input id="date_envoi" class="champFormulaire datepicker"
1160 jymadier 4000 type="text" onkeyup="" onchange="fdate(this);"
1161 mbroquet 3730 maxlength="10" size="12" value="'.date("d/m/Y").'"
1162     name="date_envoi">';
1163     echo '</div>';
1164     echo '</div>';
1165     echo "</div>";
1166     echo "</fieldset>";
1167     echo '</div>';
1168     echo '</div>';
1169     echo '</div>';
1170     echo '<div class="formControls">';
1171    
1172     echo '<div class="formControls">';
1173     echo "<input class=\"om-button ui-button ui-widget ui-state-default ui-corner-all\"
1174     type=\"button\"
1175    
1176     value=\"Ajouter le(s) enregistrement(s) de la table : 'Consultation'\"
1177     id=\"button_val\">";
1178     $this->retoursousformulaire(
1179     $this->getParameter("idxformulaire"),
1180     $this->getParameter("retourformulaire"),
1181     null,
1182     $this->getParameter("objsf"),
1183     $this->getParameter("premiersf"),
1184     $this->getParameter("tricolsf"),
1185     $this->getParameter("validation"),
1186     $this->getParameter("idx"),
1187     $this->getParameter("maj"),
1188     $this->getParameter("retour")
1189     );
1190     echo '</div>';
1191     echo '</div>';
1192     echo '</form>';
1193    
1194     echo "
1195     <script language='javascript' type='text/javascript'>
1196     $(function(){
1197     changeActionVal('');
1198     /*
1199     Sélectionne tous les services d'un thème au clique sur celui ci.
1200     */
1201     $('.liste_gauche_them').click(
1202     function(){
1203    
1204     var id = $(this).attr('id').split('_')[1];
1205     var numSer = 0;
1206     var numSerWithClass = 0;
1207    
1208     $('.list-ser-them div').each(
1209     function() {
1210    
1211     if ( $(this).attr('id').indexOf('them') == -1 &&
1212     $(this).attr('id').indexOf(id) == 1 &&
1213     $(this).hasClass('liste_gauche_service_selected') )
1214    
1215     numSerWithClass++;
1216    
1217     if ( $(this).attr('id').indexOf('them') == -1 &&
1218     $(this).attr('id').indexOf(id) == 1 )
1219    
1220     numSer++;
1221     }
1222     );
1223    
1224     if ( numSerWithClass < numSer && numSerWithClass >= 0 ){
1225    
1226     $('.list-ser-them div').each(
1227     function() {
1228    
1229     if ( $(this).attr('id').indexOf('them') == -1 &&
1230     $(this).attr('id').indexOf(id) == 1 &&
1231     !$(this).hasClass('liste_gauche_service_selected') )
1232    
1233     $(this).addClass('liste_gauche_service_selected');
1234     }
1235     );
1236     }
1237    
1238     else {
1239    
1240     $('.list-ser-them div').each(
1241     function() {
1242    
1243     if ( $(this).attr('id').indexOf('them') == -1 &&
1244     $(this).attr('id').indexOf(id) == 1 &&
1245     $(this).hasClass('liste_gauche_service_selected') )
1246    
1247     $(this).removeClass('liste_gauche_service_selected');
1248     }
1249     );
1250     }
1251     }
1252     );
1253    
1254     /*
1255     Change la class CSS d'un service sur lequel on clique dans la liste de gauche.
1256     */
1257     $('.liste_gauche_service').click(
1258     function(){
1259     $(this).toggleClass('liste_gauche_service_selected');
1260     }
1261     );
1262    
1263     /*
1264     Change la class CSS d'un service sur lequel on clique dans la liste de droite.
1265     */
1266     $('.field-ser-them').on(
1267     'click',
1268     '.cell1',
1269     function(){
1270     if ( !$(this).hasClass('liste_droite_title') )
1271     $(this).parent().toggleClass('liste_droite_service_selected');
1272     }
1273     );
1274    
1275     $('.liste_droite_service input[type=checkbox]').live(
1276     'click',
1277     'input[type=checkbox]',
1278     function(){
1279    
1280     old_id = $(this).attr('class');
1281    
1282     tab_don = old_id.split('_');
1283    
1284     new_id = tab_don[0] + '_' + tab_don[1] + '_' + ((tab_don[2] == 0 ) ? 1 : 0 ) + '_';
1285    
1286     changeOneData( ';' + tab_don[1] + '_' + tab_don[2], ';' + tab_don[1] + '_' + ((tab_don[2] == 0) ? 1 : 0) );
1287     $('div[class=\"' + old_id + '\"]').attr('class', new_id);
1288     $(this).attr('class', new_id);
1289    
1290     }
1291     );
1292    
1293     $('#date_envoi').change(
1294     function (){
1295    
1296     var listServ = new Array();
1297     var data = '';
1298    
1299     $('.liste_gauche_service_selected').each(
1300     function(i) {
1301    
1302 jymadier 4000 var id = $(this).attr('id');
1303 mbroquet 3730
1304 jymadier 4000 if ( listServ.length > 0 && listServ.indexOf(id.split('_')[1]) != -1 )
1305 mbroquet 3730 return;
1306 jymadier 4000 listServ[i] = id.split('_')[1];
1307     data += ';' + id.split('_')[1] + '_' + id.split('_')[2] ;
1308 mbroquet 3730
1309     }
1310     );
1311    
1312     changeActionVal(data);
1313     }
1314     );
1315    
1316     /*
1317     Passe les services sélectionnés dans la liste de gauche dans celle de droite.
1318     */
1319     $('#add-ser-them').click(
1320     function() {
1321    
1322     changeDataLeftColumn();
1323     }
1324     );
1325    
1326     /*
1327     Passe les services sélectionnés dans la liste de droite dans celle de gauche.
1328     */
1329     $('#del-ser-them').click(
1330     function() {
1331    
1332     var data = '';
1333    
1334     //Supprime les éléments de la liste de droite
1335     $('.liste_droite_service_selected').each(
1336     function() {
1337    
1338     var name = $('#'+ $(this).attr('id') + ' .cell1 div').attr('name');
1339    
1340     manageListServ('.list-ser-them div', name, 1);
1341    
1342     $(this).remove();
1343     }
1344     );
1345    
1346     //Change les valeurs qui vont être renvoyées à la validation du formulaire
1347     $('.liste_droite_service').each(
1348     function(){
1349    
1350     var name = $('#'+ $(this).attr('id') + ' .cell1 div').attr('name');
1351     data += ';' + name.split('_')[1] + '_' + name.split('_')[2] ;
1352     }
1353     );
1354    
1355     changeActionVal(data);
1356     }
1357     );
1358     });
1359    
1360     /*
1361     Vérifie que l'objet n'est pas une thématique et que son identifiant correspond.
1362     */
1363     function isNotthemIsOneServ( objet, id ){
1364     return ( $(objet).attr('id').indexOf('them') == -1 &&
1365     $(objet).attr('id').indexOf('_' + id.split('_')[1] + '_') != -1 );
1366     }
1367    
1368     /*
1369     Affiche ou cache un élément qui n'est pas une thématique et dont son identifiant correspond.
1370     */
1371     function manageListServ( objet , name, type){
1372    
1373     $(objet).each(
1374     function() {
1375    
1376     if ( isNotthemIsOneServ(this, name) ){
1377     if ( type == 0 )
1378    
1379     $(this).hide() ;
1380    
1381     else {
1382    
1383     if ( $(this).hasClass('liste_gauche_service_selected') )
1384    
1385     $(this).toggleClass('liste_gauche_service_selected');
1386    
1387     $(this).show() ;
1388    
1389     }
1390     }
1391     }
1392     );
1393     }
1394    
1395     /*
1396     Change les actions qui sont réalisées lors de la soumission du formulaire
1397     */
1398     function changeActionVal(data){
1399     date = $('#date_envoi').val();
1400    
1401    
1402    
1403     $('#button_val').attr(
1404     'onclick',
1405     'if ( $(\'.liste_gauche_service_selected\').length > 0 && $(\'#date_envoi\').val() != \'\' ) { messageIt(\'consultation\', \'".html_entity_decode($datasubmit)."&data='+data+'&date_envoi='+date+'\',true);' +
1406     'messageIt(\'consultation\', \'".html_entity_decode($return_url)."\',false);} else alert(\'Veuillez choisir au moins un service et une date d envoi\');'
1407    
1408     );
1409    
1410     }
1411    
1412     /*
1413     Change les actions qui sont réalisées lors de la soumission du formulaire
1414     */
1415     function changeOneData( oldData, newData) {
1416    
1417     date = $('#date_envoi').val();
1418    
1419     $('#button_val').attr(
1420     'onclick',
1421     $('#button_val').attr('onclick').replace(oldData,newData)
1422     );
1423    
1424     }
1425    
1426     function changeDataLeftColumn(){
1427    
1428     $('.list-sel-ser-them').empty();
1429     $('.list-sel-ser-them').html(
1430     '<div class=\"row row_title\">' +
1431     '<div class=\"cell1 liste_droite_title list-sel-ser-them-title\">"._("Service a consulter")."</div>' +
1432     '<div class=\"cell2 liste_droite_title list-sel-ser-them-title\">"._("Version papier")."</div>' +
1433     '</div>'
1434     );
1435    
1436     var listServ = new Array();
1437     var data = '';
1438    
1439     $('.liste_gauche_service_selected').each(
1440     function(i) {
1441    
1442     var id = $(this).attr('id');
1443    
1444     if ( $.inArray(id.split('_')[1], listServ) != -1 )
1445     return;
1446    
1447     data += ';' + id.split('_')[1] + '_' + id.split('_')[2] ;
1448     listServ[i] = id.split('_')[1];
1449    
1450     $('.list-sel-ser-them').append(
1451     '<div id=\'s' + i + '\' class=\'row liste_droite_service\'>'+
1452     '<div class=\'cell1\'>'+
1453     '<div class=\'' + $(this).attr('id') + '\' name=\'' + $(this).attr('id') + '\'>'+
1454     $(this).html().split('<')[0]+
1455     '</div>'+
1456     '</div>' +
1457     '<div class=\'cell2\'>'+
1458     '<div>'+
1459     '<input class=\'' + $(this).attr('id') + '\''+$(this).html().split('<input')[1]+
1460     '</div>'+
1461     '</div>'+
1462     '</div>'
1463     );
1464    
1465     $(this).hide();
1466    
1467     manageListServ('.list-ser-them div', id, 0);
1468    
1469     }
1470     );
1471     changeActionVal(data);
1472     }
1473     </script>";
1474     }
1475 nmeucci 4319 }
1476 mbroquet 3730
1477 nmeucci 4319
1478     /**
1479     * TREATMENT - view_bordereau_envoi_maire.
1480     *
1481     * Génère et affiche l'édition PDF contenant une ou plusieurs consultations.
1482     *
1483     * @return [void]
1484     */
1485     function generate_pdf_consultation_multiple() {
1486     // Vérification de l'accessibilité sur l'élément
1487     $this->checkAccessibility();
1488     // Récupération de la collectivité du dossier d'instruction
1489     $collectivite = $this->f->getCollectivite($this->get_dossier_collectivite());
1490     // Identifiants des consultations à afficher
1491     $idsConsultations = $this->f->get_submitted_get_value('textids');
1492     // Type de chaque consultations (avec_avis_attendu, ...)
1493     $objConsultations = $this->f->get_submitted_get_value('textobj');
1494     // Génération du PDF
1495     $result = $this->compute_pdf_output('etat', $objConsultations, $collectivite, $idsConsultations);
1496     // Affichage du PDF
1497     $this->expose_pdf_output(
1498     $result['pdf_output'],
1499     $result['filename']
1500     );
1501 mbroquet 3730 }
1502    
1503 nmeucci 4319
1504 mbroquet 3730 function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){
1505     // ajout du retourformulaire aux attributs de l'objet
1506     $this->retourformulaire = $retourformulaire;
1507     if ($validation==0) {
1508     if ($maj == 0 or $maj == 40){
1509     $form->setVal("dossier", $idxformulaire);
1510     $form->setVal("date_envoi",date('d/m/Y'));
1511     }
1512 softime 5024 if(($maj == 1 or $maj == 90 or $maj == 100) AND $this->getVal("date_retour") == "") {
1513 mbroquet 3730 if($this->f->isAccredited('consultation_retour_avis_suivi') OR
1514     $this->f->isAccredited('consultation_retour_avis_service')) {
1515     $form->setVal("date_retour",date('d/m/Y'));
1516     }
1517     }
1518     }
1519     }
1520    
1521     function setVal(&$form, $maj, $validation) {
1522 softime 5024 if(($maj == 1 or $maj == 90 or $maj == 100) AND $this->getVal("date_retour") == "") {
1523 mbroquet 3730 $form->setVal("date_retour",date('d/m/Y'));
1524     }
1525     }
1526    
1527     function setvalF($val) {
1528     //
1529     parent::setValF($val);
1530     //
1531     if ($this->getParameter('maj') == 0 or $this->getParameter('maj') == 40) {
1532     //
1533     if (isset($this->valF["date_envoi"])) {
1534     $this->valF["date_reception"] = $this->valF["date_envoi"];
1535     }
1536     //
1537     $this->valF["lu"] = true;
1538     }
1539    
1540     // Si un retour d'avis est modifie on passe "lu" a false
1541     if(($this->getParameter('maj')==90 or $this->getParameter('maj')==100 ) and (
1542     $this->val[array_search("avis_consultation",$this->champs)] != $val["avis_consultation"] OR
1543     $this->val[array_search("date_retour",$this->champs)] != $val["date_retour"] OR
1544     $this->val[array_search("motivation",$this->champs)] != $val["motivation"] OR
1545     $this->val[array_search("fichier",$this->champs)] != $val["fichier"])
1546     ) {
1547     $this->valF["lu"]=false;
1548     }
1549     }
1550    
1551     function setLib(&$form, $maj) {
1552     //
1553     parent::setLib($form, $maj);
1554     //
1555     $form->setLib($this->clePrimaire, _("id"));
1556     }
1557    
1558     function setType(&$form,$maj) {
1559     // Appel du parent
1560     parent::setType($form,$maj);
1561     $form->setType('dossier', 'hidden');
1562 nmeucci 3992 $form->setType('marque', 'hidden');
1563 mbroquet 3730 // MODE - AJOUTER
1564     if ($maj == 0) {
1565     // On cache alors tous les champs que nous ne voulons pas voir
1566     // apparaître dans le formulaire d'ajout (principalement les
1567     // informations sur le retour d'avis)
1568     $form->setType('date_retour', 'hiddendate');
1569     $form->setType('date_reception', 'hiddendate');
1570     $form->setType('date_limite', 'hiddendate');
1571     $form->setType('avis_consultation', 'hidden');
1572     $form->setType('motivation', 'hidden');
1573     $form->setType('fichier', 'hidden');
1574     $form->setType('lu', 'hidden');
1575     // On permet la modification de certains champs
1576     $form->setType('dossier_libelle', 'hiddenstatic');
1577     $form->setType('service', 'select');
1578 jymadier 3990 // Le champ "date d'envoi" est affiché seulement si l'utilisateur a la
1579     // permission
1580     if($this->f->isAccredited('consultation_saisir_date_envoi')) {
1581     $form->setType('date_envoi', 'date2');
1582     }
1583     else {
1584     $form->setType('date_envoi', 'hiddendate');
1585     }
1586 mbroquet 3730 }
1587     // MODE - MODIFIER
1588     if ($maj == 1) {
1589    
1590     // On affiche en statique les informations qui ne sont plus
1591     // modifiables
1592     $form->setType('dossier_libelle', 'hiddenstatic');
1593     $form->setType('date_envoi', 'hiddenstaticdate');
1594     $form->setType('date_limite', 'hiddenstaticdate');
1595     $form->setType('service', 'selecthiddenstatic');
1596    
1597     // La date de réception ne peut être modifiée que par un
1598     // utilisateur en ayant spécifiquement la permission
1599 softime 4667 if($this->f->isAccredited(array('consultation','consultation_modifier_date_reception'), 'OR')) {
1600 mbroquet 3730 $form->setType('date_reception', 'date2');
1601     } else {
1602     $form->setType('date_reception', 'hiddenstaticdate');
1603     }
1604    
1605     // Le marqueur lu/non lu ne peut être modifié que par un
1606     // utilisateur en ayant spécifiquement la permission
1607 softime 4667 if ($this->f->isAccredited(array('consultation','consultation_modifier_lu'), 'OR')) {
1608 mbroquet 3730 $form->setType('lu', 'checkbox');
1609     } else {
1610     $form->setType('lu', 'hidden');
1611     }
1612    
1613     // Gestion du type du widget sur le champ fichier
1614     if($this->getVal("fichier") == "" OR
1615 softime 4667 $this->f->isAccredited(array('consultation', 'consultation_modifier_fichier'), 'OR')) {
1616 mbroquet 3730 // Si il n'y a jamais eu de fichier enregistré ou que
1617     // l'utilisateur a spécifiquement les droits pour modifier
1618     // un fichier déjà enregistré alors on positionne un type
1619     // de widget modifiable
1620     if ($this->retourformulaire == "demande_avis_encours"
1621     || $this->retourformulaire == "dossier_qualifier"
1622     || $this->retourformulaire == "dossier"
1623     || $this->retourformulaire == "dossier_instruction"
1624     || $this->retourformulaire == "dossier_instruction_mes_encours"
1625     || $this->retourformulaire == "dossier_instruction_tous_encours"
1626     || $this->retourformulaire == "dossier_instruction_mes_clotures"
1627     || $this->retourformulaire == "dossier_instruction_tous_clotures") {
1628     $form->setType('fichier', 'upload2');
1629     } else {
1630     $form->setType('fichier', 'upload');
1631     }
1632     } else {
1633     // Si non on affiche uniquement le nom du fichier
1634     $form->setType('fichier', 'filestaticedit');
1635     }
1636    
1637     }
1638     // Mode supprimer
1639     if ($maj == 2) {
1640     $form->setType('fichier', 'filestatic');
1641     }
1642     // MODE - CONSULTER
1643     if ( $maj == 3 ) {
1644     $form->setType('fichier', 'file');
1645     }
1646     // Mode - retour d'avis
1647     // Modification layout : écran de retour d'avis permettant
1648     // uniquement la saisie des trois champs : avis, motivation et fichier
1649     if ( $maj == 90 ) {
1650    
1651     $form->setType("consultation", "hiddenstatic");
1652     if ($this->is_in_context_of_foreign_key("avis_consultation", $this->retourformulaire)) {
1653     $form->setType("avis_consultation", "selecthiddenstatic");
1654     } else {
1655     $form->setType("avis_consultation", "select");
1656     }
1657     $form->setType("motivation", "textarea");
1658     $form->setType('fichier', 'upload2');
1659    
1660     // On cache alors tous les champs que nous ne voulons pas voir
1661     $form->setType('dossier_libelle', 'hidden');
1662     $form->setType('service', 'hidden');
1663     $form->setType('date_envoi', 'hiddendate');
1664     $form->setType('date_retour', 'hiddendate');
1665     $form->setType('date_reception', 'hiddendate');
1666     $form->setType('date_limite', 'hiddendate');
1667     $form->setType('lu', 'hidden');
1668     }
1669    
1670     // MODE - retour de consultation par suivi des date
1671     if ($maj == 100) {
1672     $form->setType("consultation", "hiddenstatic");
1673     $form->setType('dossier_libelle', 'hiddenstatic');
1674     $form->setType('date_envoi', 'hiddenstaticdate');
1675     $form->setType('date_limite', 'hiddenstaticdate');
1676     $form->setType('date_reception', 'hiddenstaticdate');
1677     $form->setType('service', 'selecthiddenstatic');
1678     $form->setType('date_retour', 'date');
1679     $form->setType('lu', 'hidden');
1680     $form->setType("avis_consultation", "select");
1681     $form->setType("motivation", "textarea");
1682     $form->setType('fichier', 'upload');
1683 softime 5024 // Gestion du type du widget sur le champ fichier
1684     if($this->getVal("fichier") == "" OR
1685     $this->f->isAccredited(array('consultation', 'consultation_modifier_fichier'), 'OR')) {
1686     // Si il n'y a jamais eu de fichier enregistré ou que
1687     // l'utilisateur a spécifiquement les droits pour modifier
1688     // un fichier déjà enregistré alors on positionne un type
1689     // de widget modifiable
1690     if ($this->retourformulaire == "demande_avis_encours"
1691     || $this->retourformulaire == "dossier_qualifier"
1692     || $this->retourformulaire == "dossier"
1693     || $this->retourformulaire == "dossier_instruction"
1694     || $this->retourformulaire == "dossier_instruction_mes_encours"
1695     || $this->retourformulaire == "dossier_instruction_tous_encours"
1696     || $this->retourformulaire == "dossier_instruction_mes_clotures"
1697     || $this->retourformulaire == "dossier_instruction_tous_clotures") {
1698     $form->setType('fichier', 'upload2');
1699     } else {
1700     $form->setType('fichier', 'upload');
1701     }
1702     } else {
1703     // Si non on affiche uniquement le nom du fichier
1704     $form->setType('fichier', 'filestaticedit');
1705     }
1706 mbroquet 3730 }
1707     //// On cache la clé primaire
1708     //$form->setType('consultation', 'hidden');
1709     //
1710     if ($this->getParameter("retourformulaire") == "dossier"
1711     || $this->getParameter("retourformulaire") == "dossier_instruction"
1712     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
1713     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
1714     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
1715     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures") {
1716     //
1717     $form->setType('dossier_libelle', 'hidden');
1718     }
1719    
1720     $form->setType('code_barres', 'hidden');
1721    
1722     //Cache les champs pour la finalisation
1723     $form->setType('om_fichier_consultation', 'hidden');
1724     $form->setType('om_final_consultation', 'hidden');
1725    
1726     if($maj == 50 or $maj == 60 or $maj == 70) {
1727     foreach ($this->champs as $value) {
1728     $form->setType($value, 'hidden');
1729     }
1730     }
1731     }
1732    
1733     // Cette méthode permet de calculer la date limite en fonction de la date
1734     // de réception et du délai de consultation du service consulté
1735     function calculDateLimite() {
1736     // mise a jour instruction avec evenement [return delay]
1737     if ($this->valF["date_reception"] != "") {
1738     //
1739     $sql = " select delai from ".DB_PREFIXE."service ";
1740     $sql .= " where service='".$this->valF["service"]."' ";
1741     $delai = $this->db->getOne($sql);
1742     $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
1743     //
1744     $sql = " select delai_type from ".DB_PREFIXE."service ";
1745     $sql .= " where service='".$this->valF["service"]."' ";
1746     $delai_type = $this->db->getOne($sql);
1747     $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
1748     //
1749     $this->valF["date_limite"] = $this->f->mois_date($this->valF["date_reception"], $delai, "+", $delai_type);
1750     //
1751     if ($delai_type == "mois") {
1752     $delai_type_trad = _("mois");
1753     } else {
1754     $delai_type_trad = _("jour(s)");
1755     }
1756     //
1757     $this->addToMessage(_("delai")." ".
1758     _("retour")." ".$delai." ".$delai_type_trad." -> ".
1759     _("retour")." ".date("d/m/Y", strtotime($this->valF["date_limite"])));
1760     }
1761     }
1762    
1763     // TRIGGER AVANT MODIFICATION DE DONNEES
1764     // trigger before modification data
1765     function triggerajouter($id,&$db,$val,$DEBUG) {
1766     //
1767     $this->calculDateLimite();
1768    
1769     // Identifiant du type de courrier
1770     $idTypeCourrier = '12';
1771     $idCourrier = str_pad($this->valF["consultation"], 10, "0", STR_PAD_LEFT);
1772     // Code barres
1773     $this->valF["code_barres"] = $idTypeCourrier . $idCourrier;
1774     }
1775    
1776     //
1777     function triggermodifier($id,&$db,$val,$DEBUG) {
1778     //
1779     $this->calculDateLimite();
1780     }
1781    
1782 fmichon 4708 /**
1783     * TRIGGER - triggerajouterapres.
1784     *
1785     * - Notification par courrier du service consulté
1786     * - Interface avec le référentiel ERP [104]
1787     * - Interface avec le référentiel ERP [106]
1788     * - Finalisation du document PDF de consultation
1789     *
1790     * @return boolean
1791     */
1792     function triggerajouterapres($id, &$db, $val, $DEBUG) {
1793    
1794     // On a besoin de l'instance du dossier lié à la consultation
1795     $inst_di = $this->get_inst_dossier($this->valF['dossier']);
1796    
1797     // On a besoin de l'instance du service lié à la consultation
1798     $inst_service = $this->get_inst_service($this->valF['service']);
1799    
1800     /**
1801     * Notification par courriel du service consulté.
1802     *
1803     * Si il y a un problème lors de l'envoi du courriel, on prévient l'utilisateur
1804     * mais on ne bloque pas le traitement. Le courriel de notification n'a pas de
1805     * de caractère critique.
1806     */
1807     if ($inst_service->getVal('notification_email') == 't') {
1808     // Composition du titre du courriel
1809     $title = sprintf(
1810     '%s %s',
1811     _("Consultation de services : dossier no"),
1812     $inst_di->getVal($inst_di->clePrimaire)
1813     );
1814     $title = iconv("UTF-8", "CP1252", $title);
1815     // Composition du corps du courriel
1816     $corps = sprintf(
1817     '%s %s<br/>%s %s %s %s %s<br/>%s <a href=\'%s\'>%s</a> %s <a href=\'%s\'>%s</a>',
1818     _("Votre service est consulte concernant le dossier no"),
1819     $inst_di->getVal($inst_di->clePrimaire),
1820     _("Il concerne le terrain situe a l'adresse :"),
1821     $inst_di->getVal('terrain_adresse_voie_numero'),
1822     $inst_di->getVal('terrain_adresse_voie'),
1823     $inst_di->getVal('terrain_adresse_code_postal'),
1824     $inst_di->getVal('terrain_adresse_localite'),
1825     _("Vous pouvez y acceder et rendre votre avis a l'adresse"),
1826     // Adresse interne, si l'adresse termine par &idx= alors on ajoute l'identifiant de la consultation
1827     $this->f->getParameter('services_consultes_lien_interne').((substr($this->f->getParameter('services_consultes_lien_interne'), -5) == "&idx=") ? $this->valF['consultation'] : ""),
1828     _("Lien interne"),
1829     _("ou"),
1830     // Adresse externe, si l'adresse termine par &idx= alors on ajoute l'identifiant de la consultation
1831     $this->f->getParameter('services_consultes_lien_externe').((substr($this->f->getParameter('services_consultes_lien_externe'), -5) == "&idx=") ? $this->valF['consultation'] : ""),
1832     _("Lien externe")
1833     );
1834     $corps = iconv("UTF-8", "CP1252", $corps);
1835 mbroquet 3730 // Envoi du mail avec message de retour
1836 fmichon 4708 if ($this->f->sendMail($title, $corps, iconv("UTF-8", "CP1252", $inst_service->getVal('email')))) {
1837 softime 5024 $this->addToMessage(_("Envoi d'un mail de notification au service")." \"(".$inst_service->getVal('abrege').") ".$inst_service->getVal("libelle")."\".");
1838 mbroquet 3730 } else {
1839 softime 5024 $this->addToMessage(_("L'envoi du mail de notification a échoué.")
1840     .' '._("Veuillez contacter votre administrateur."));
1841 mbroquet 3730 }
1842     }
1843 fmichon 4708
1844     /**
1845     * Interface avec le référentiel ERP.
1846     *
1847     * (WS->ERP)[104] Demande d'instruction de dossier PC pour un ERP -> PC
1848     * Déclencheur :
1849     * - L'option ERP est activée
1850     * - Le dossier est de type PC
1851     * - Le formulaire d'ajout de consultation est validé avec un service
1852     * correspondant à un des services ERP pour avis
1853     */
1854     //
1855     if ($this->f->is_option_referentiel_erp_enabled() === true
1856     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__pc')
1857     && in_array($inst_service->getVal($inst_service->clePrimaire), explode(";", $this->f->getParameter('erp__services__avis__pc')))) {
1858     //
1859     $infos = array(
1860     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
1861     "consultation" => $this->valF['consultation'],
1862     "date_envoi" => $this->valF['date_envoi'],
1863     "service_abrege" => $inst_service->getVal('abrege'),
1864     "service_libelle" => $inst_service->getVal('libelle'),
1865 softime 4740 "date_limite" => $this->valF['date_limite'],
1866 fmichon 4708 );
1867     //
1868     $ret = $this->f->send_message_to_referentiel_erp(104, $infos);
1869     if ($ret !== true) {
1870     $this->cleanMessage();
1871     $this->addToMessage(_("Une erreur s'est produite lors de la notification (104) du référentiel ERP. Contactez votre administrateur."));
1872     return false;
1873 mbroquet 3730 }
1874 fmichon 4708 $this->addToMessage(_("Notification (104) du référentiel ERP OK."));
1875 mbroquet 3730 }
1876 fmichon 4708
1877     /**
1878     * Interface avec le référentiel ERP.
1879     *
1880     * (WS->ERP)[106] Consultation ERP pour conformité -> PC
1881     * Déclencheur :
1882     * - L'option ERP est activée
1883     * - Le dossier est de type PC
1884     * - Le formulaire d'ajout de consultation est validé avec un service
1885     * correspondant à un des services ERP pour conformité
1886     */
1887     //
1888     if ($this->f->is_option_referentiel_erp_enabled() === true
1889     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__pc')
1890     && in_array($inst_service->getVal($inst_service->clePrimaire), explode(";", $this->f->getParameter('erp__services__conformite__pc')))) {
1891     //
1892     $infos = array(
1893     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
1894     "consultation" => $this->valF['consultation'],
1895     "date_envoi" => $this->valF['date_envoi'],
1896     "service_abrege" => $inst_service->getVal('abrege'),
1897     "service_libelle" => $inst_service->getVal('libelle'),
1898 softime 4740 "date_limite" => $this->valF['date_limite'],
1899 fmichon 4708 );
1900     //
1901     $ret = $this->f->send_message_to_referentiel_erp(106, $infos);
1902     if ($ret !== true) {
1903     $this->cleanMessage();
1904     $this->addToMessage(_("Une erreur s'est produite lors de la notification (106) du référentiel ERP. Contactez votre administrateur."));
1905     return false;
1906     }
1907     $this->addToMessage(_("Notification (106) du référentiel ERP OK."));
1908 mbroquet 3730 }
1909    
1910 fmichon 4708 /**
1911     * Finalisation du document PDF de consultation.
1912     */
1913     //
1914 softime 5024 return $this->finaliserAjouter($id);
1915 mbroquet 3730 }
1916    
1917     // =============================================
1918     // Ajout du fielset
1919     // Add fieldset
1920     // =============================================
1921     function setLayout(&$form, $maj){
1922    
1923     // Modification layout : écran de retour d'avis permettant
1924     // uniquement la saisie des trois champs : avis, motivation et fichier
1925 softime 4667 if ($this->f->isAccredited(array('consultation', 'consultation_consulter_autre_que_retour_avis'), 'OR')) {
1926 mbroquet 3730
1927     //Champs sur lequel s'ouvre le fieldset
1928     $form->setBloc('dossier','D',"");
1929     $form->setFieldset('dossier','D',_('Consultation'));
1930    
1931     //Champs sur lequel se ferme le fieldset
1932     $form->setFieldset('date_envoi','F','');
1933     $form->setBloc('date_envoi','F');
1934    
1935     }
1936    
1937     // MODE - autre que AJOUTER alors on affiche un fieldset retour
1938     // d'avis
1939     if ($maj != 0) {
1940    
1941     //Champs sur lequel s'ouvre le fieldset
1942     $form->setBloc('date_reception','D',"");
1943     $form->setFieldset('date_reception','D',_('Retour d\'avis'));
1944    
1945     //Champs sur lequel se ferme le fieldset
1946     $form->setFieldset('lu','F','');
1947     $form->setBloc('lu','F');
1948    
1949     }
1950     }
1951    
1952     /** Surcharge de la methode retour afin de retourner sur la page de saisie de
1953     * code barre si besoin
1954     **/
1955     function retour($premier = 0, $recherche = "", $tricol = "") {
1956     $params ="obj=".get_class($this);
1957     if($this->getParameter("retour")=="form") {
1958     $params .= "&amp;idx=".$this->getParameter("idx");
1959     $params .= "&amp;action=3";
1960     }
1961     $params .= "&amp;premier=".$this->getParameter("premier");
1962     $params .= "&amp;tricol=".$this->getParameter("tricol");
1963     $params .= "&amp;recherche=".$this->getParameter("recherche");
1964     $params .= "&amp;selectioncol=".$this->getParameter("selectioncol");
1965     $params .= "&amp;advs_id=".$this->getParameter("advs_id");
1966     $params .= "&amp;valide=".$this->getParameter("valide");
1967     echo "\n<a class=\"retour\" ";
1968     echo "href=\"";
1969     //
1970    
1971     if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
1972     echo "form.php?".$params;
1973     } elseif($this->getParameter("retour")=="suivi_retours_de_consultation") {
1974 fmichon 4237 echo "../scr/form.php?obj=consultation&idx=0&action=120";
1975 mbroquet 3730 } else {
1976     echo "tab.php?".$params;
1977     }
1978     //
1979     echo "\"";
1980     echo ">";
1981     //
1982     echo _("Retour");
1983     //
1984     echo "</a>\n";
1985     }
1986    
1987     /**
1988     * Surcharge du bouton retour pour popup
1989     */
1990     function retoursousformulaire($idxformulaire, $retourformulaire, $val,
1991     $objsf, $premiersf, $tricolsf, $validation,
1992     $idx, $maj, $retour) {
1993     if($retourformulaire === "demande_avis_encours") {
1994     echo "\n<a class=\"retour\" ";
1995     echo "href=\"";
1996     echo "#";
1997     echo "\" ";
1998     echo ">";
1999     //
2000     echo _("Retour");
2001     //
2002     echo "</a>\n";
2003     } else {
2004     parent::retoursousformulaire($idxformulaire, $retourformulaire, $val,
2005     $objsf, $premiersf, $tricolsf, $validation,
2006     $idx, $maj, $retour);
2007     }
2008     }
2009    
2010     /**
2011     * Ajout des contraintes spécifiques pour l'ajout d'un fichier en retour de
2012     * consultation
2013     */
2014     function setSelect(&$form, $maj,&$db,$debug) {
2015     if(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php"))
2016     include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php");
2017     elseif(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc"))
2018     include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc");
2019    
2020     // avis_consultation
2021     $this->init_select($form, $db, $maj, $debug, "avis_consultation",
2022     $sql_avis_consultation, $sql_avis_consultation_by_id, true);
2023    
2024     // service
2025     // si contexte DI, ou surcharge (mes_encours, mes_clotures...)
2026     $is_in_context_of_foreign_key = $this->is_in_context_of_foreign_key("dossier", $this->getParameter('retourformulaire'));
2027     if ($is_in_context_of_foreign_key == true) {
2028     // on recupÚre les services des multicollectivités et de celle du DI
2029     require_once "../obj/dossier_instruction.class.php";
2030     $di = new dossier_instruction($this->getParameter('idxformulaire'), $db, $debug);
2031     $sql_service_by_di = str_replace('<collectivite_di>', $di->getVal("om_collectivite"), $sql_service_by_di);
2032    
2033     $this->init_select($form, $db, $maj, $debug, "service",
2034     $sql_service_by_di, $sql_service_by_id, true);
2035     } else {
2036     $this->init_select($form, $db, $maj, $debug, "service", $sql_service, $sql_service_by_id, true);
2037     }
2038    
2039     //Seulement dans le cas d'un retour d'avis
2040     if($this->retourformulaire == "demande_avis_encours" or $this->getParameter("maj") == 100 or $this->getParameter("maj") == 90) {
2041     // avis_consultation
2042     $this->init_select($form, $db, 1, $debug, "avis_consultation",
2043     $sql_avis_consultation, $sql_avis_consultation_by_id, true);
2044    
2045     //Tableau des contraintes spécifiques
2046     $params = array(
2047     "constraint" => array(
2048     "size_max" => 2,
2049     "extension" => ".pdf"
2050     ),
2051     );
2052    
2053     $form->setSelect("fichier", $params);
2054     }
2055     }
2056    
2057     /**
2058     * Finalisation du document lors de l'ajout d'une consultation.
2059     *
2060 softime 5024 * @param integer $id_consult indentifiant de l'objet
2061 mbroquet 3730 */
2062 softime 5024 function finaliserAjouter($id_consult){
2063     //
2064     $this->begin_treatment(__METHOD__);
2065 mbroquet 3730
2066 softime 5024 //
2067     $admin_msg_error = _("Veuillez contacter votre administrateur.");
2068     $file_msg_error = _("La finalisation du document a échoué.")
2069     ." ".$admin_msg_error;
2070     $bdd_msg_error = _("Erreur de base de données.")
2071     ." ".$admin_msg_error;
2072 softime 5169 $log_msg_error = "Finalisation non enregistrée - id consultation = %s - uid fichier = %s";
2073 mbroquet 3730
2074 softime 5024 $uid = $this->file_finalizing($id_consult);
2075     // Comme pour le fonctionnement de l'envoi de mail,
2076     // Si échec cela ne stoppe pas la création de la consultation.
2077     // L'utilisateur en est tout de même informé dans l'IHM
2078     // et l'erreur est loguée.
2079     if ($uid == '' || $uid == 'OP_FAILURE' ) {
2080     $this->addToMessage($file_msg_error);
2081     $this->addToLog(sprintf($log_msg_error, $id_consult, $uid));
2082     return $this->end_treatment(__METHOD__, true);
2083     }
2084 mbroquet 3730
2085 softime 5024 // Si succès mise à jour de la consultation
2086     $valF = array(
2087     "om_final_consultation" => true,
2088     "om_fichier_consultation" => $uid
2089     );
2090     //
2091     $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF,
2092     DB_AUTOQUERY_UPDATE, $this->getCle($id_consult));
2093     //
2094     $this->addToLog(
2095     "finaliserAjouter() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id_consult)."\")",
2096     VERBOSE_MODE
2097     );
2098     //
2099     if ($this->f->isDatabaseError($res, true) === true) {
2100     $this->correct = false;
2101     // Remplacement du message de validation
2102     $this->msg = '';
2103     $this->addToMessage($bdd_msg_error);
2104     return $this->end_treatment(__METHOD__, false);
2105 mbroquet 3730 }
2106 softime 5024 //
2107     return $this->end_treatment(__METHOD__, true);
2108 mbroquet 3730 }
2109    
2110     /**
2111     * Finalisation du fichier.
2112     *
2113     * @param integer $id indentifiant de l'objet
2114     *
2115     * @return string uid du fichier finalisé
2116     */
2117     function file_finalizing($id){
2118     $pdf = $this->generate_pdf_consultation();
2119    
2120     if(isset($this->valF["om_final_consultation"])) {
2121     $finalized = $this->valF["om_final_consultation"];
2122     } else {
2123     $finalized = $this->getVal("om_final_consultation");
2124     }
2125    
2126     // Métadonnées du document
2127     $metadata = array(
2128     'filename' => $pdf["filename"],
2129     'mimetype' => 'application/pdf',
2130     'size' => strlen($pdf["pdf_output"])
2131     );
2132    
2133     // Récupération des métadonnées calculées après validation
2134     $spe_metadata = $this->getMetadata("om_fichier_consultation");
2135    
2136     $metadata = array_merge($metadata, $spe_metadata);
2137    
2138     // Si le document a déjà été finalisé
2139     if ( $finalized != '' ){
2140    
2141     // Met à jour le document mais pas son uid
2142     $uid = $this->f->storage->update(
2143     $this->getVal("om_fichier_consultation"), $pdf["pdf_output"], $metadata);
2144     }
2145     // Sinon, ajoute le document et récupère son uid
2146     else {
2147    
2148     // Stockage du PDF
2149     $uid = $this->f->storage->create($pdf["pdf_output"], $metadata);
2150     }
2151    
2152     return $uid;
2153    
2154     }
2155    
2156    
2157     /**
2158     * TREATMENT - finalize.
2159     *
2160     * Permet de finaliser un enregistrement
2161     *
2162     * @param array $val valeurs soumises par le formulaire
2163     * @param null $dnu1 @deprecated Ancienne ressource de base de données.
2164     * @param null $dnu2 @deprecated Ancien marqueur de débogage.
2165     *
2166     * @return boolean
2167     */
2168     function finalize($val = array(), &$dnu1 = null, $dnu2 = null) {
2169    
2170     // Cette méthode permet d'exécuter une routine en début des méthodes
2171     // dites de TREATMENT.
2172     $this->begin_treatment(__METHOD__);
2173    
2174     // Traitement de la finalisation
2175     $ret = $this->manage_finalizing("finalize", $val);
2176    
2177     // Si le traitement retourne une erreur
2178     if ($ret !== true) {
2179    
2180     // Termine le traitement
2181     $this->end_treatment(__METHOD__, false);
2182     }
2183    
2184     // Termine le traitement
2185     return $this->end_treatment(__METHOD__, true);
2186     }
2187    
2188     /**
2189     * TREATMENT - unfinalize.
2190     *
2191     * Permet de definaliser un enregistrement
2192     *
2193     * @param array $val valeurs soumises par le formulaire
2194     * @param null $dnu1 @deprecated Ancienne ressource de base de données.
2195     * @param null $dnu2 @deprecated Ancien marqueur de débogage.
2196     *
2197     * @return boolean
2198     */
2199     function unfinalize($val = array(), &$dnu1 = null, $dnu2 = null) {
2200    
2201     // Cette méthode permet d'exécuter une routine en début des méthodes
2202     // dites de TREATMENT.
2203     $this->begin_treatment(__METHOD__);
2204    
2205     // Traitement de la finalisation
2206     $ret = $this->manage_finalizing("unfinalize", $val);
2207    
2208     // Si le traitement retourne une erreur
2209     if ($ret !== true) {
2210    
2211     // Termine le traitement
2212     $this->end_treatment(__METHOD__, false);
2213     }
2214    
2215     // Termine le traitement
2216     return $this->end_treatment(__METHOD__, true);
2217     }
2218    
2219    
2220     /**
2221     * Finalisation des documents.
2222     *
2223     * @param string $mode finalize/unfinalize
2224     * @param array $val valeurs soumises par le formulaire
2225     */
2226     function manage_finalizing($mode = null, $val = array()) {
2227 softime 5024 //
2228     $this->begin_treatment(__METHOD__);
2229 mbroquet 3730
2230     // Recuperation de la valeur de la cle primaire de l'objet
2231 softime 5024 $id_consult = $this->getVal($this->clePrimaire);
2232 mbroquet 3730
2233 softime 5024 //
2234     $admin_msg_error = _("Veuillez contacter votre administrateur.");
2235     $file_msg_error = _("Erreur de traitement de fichier.")
2236     ." ".$admin_msg_error;
2237     $bdd_msg_error = _("Erreur de base de données.")
2238     ." ".$admin_msg_error;
2239 softime 5169 $log_msg_error = "Finalisation non enregistrée - id consultation = %s - uid fichier = %s";
2240 softime 5024
2241 mbroquet 3730 // Si on finalise le document
2242     if ($mode == "finalize") {
2243 softime 5024 //
2244     $etat = _('finalisation');
2245 mbroquet 3730 // Finalisation du fichier
2246 softime 5024 $uid = $this->file_finalizing($id_consult);
2247 mbroquet 3730 }
2248     //
2249     else {
2250 softime 5024 //
2251     $etat = _('définalisation');
2252 mbroquet 3730 //Récupération de l'uid du document finalisé
2253     $uid = $this->getVal("om_fichier_consultation");
2254     }
2255    
2256 softime 5024 // Si on définalise l'UID doit être défini
2257     // Si on finalise la création/modification du fichier doit avoir réussi
2258     if ($uid == '' || $uid == 'OP_FAILURE' ) {
2259     $this->correct = false;
2260     $this->addToMessage($file_msg_error);
2261     $this->addToLog(sprintf($log_msg_error, $id_consult, $uid));
2262     return $this->end_treatment(__METHOD__, false);
2263     }
2264 mbroquet 3730
2265 softime 5024 foreach ($this->champs as $key => $value) {
2266     //
2267     $val[$value] = $this->val[$key];
2268     }
2269     $this->setvalF($val);
2270 mbroquet 3730
2271 softime 5024 // Verification de la validite des donnees
2272     $this->verifier($this->val, $this->db, DEBUG);
2273     // Si les verifications precedentes sont correctes, on procede a
2274     // la modification, sinon on ne fait rien et on retourne une erreur
2275     if ($this->correct === true) {
2276 mbroquet 3730
2277 softime 5024 // Execution du trigger 'before' specifique au MODE 'update'
2278     $this->triggermodifier($id_consult, $this->db, $this->val, DEBUG);
2279     // Suppression de son message de validation
2280     $this->msg = '';
2281 mbroquet 3730
2282     //
2283 softime 5024 $valF = '';
2284     if ($mode == "finalize") {
2285     $valF["om_final_consultation"] = true;
2286 mbroquet 3730 } else {
2287 softime 5024 $valF["om_final_consultation"] = false;
2288 mbroquet 3730 }
2289 softime 5024 $valF["om_fichier_consultation"] = $uid;
2290    
2291     // Execution de la requête de modification des donnees de l'attribut
2292     // valF de l'objet dans l'attribut table de l'objet
2293     $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF,
2294     DB_AUTOQUERY_UPDATE, $this->getCle($id_consult));
2295 mbroquet 3730 $this->addToLog(
2296 softime 5024 "finaliser() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id_consult)."\")",
2297     VERBOSE_MODE
2298 mbroquet 3730 );
2299 softime 5024 //
2300     if ($this->f->isDatabaseError($res, true) === true) {
2301     $this->correct = false;
2302     $this->addToMessage($bdd_msg_error);
2303     return $this->end_treatment(__METHOD__, false);
2304     }
2305     //
2306     $this->addToMessage(sprintf(_("La %s du document s'est effectuee avec succes."), $etat));
2307     return $this->end_treatment(__METHOD__, true);
2308 mbroquet 3730 }
2309 softime 5024 // L'appel de verifier() a déjà positionné correct à false
2310     // et défini un message d'erreur.
2311     $this->addToLog(sprintf($log_msg_error, $id_consult, $uid));
2312     return $this->end_treatment(__METHOD__, false);
2313 mbroquet 3730 }
2314    
2315     /**
2316     * Permet de récupérer l'édition de la consultation.
2317     *
2318     * @param string $output type de sortie
2319     *
2320     * @return string si le type de sortie est string, le contenu du pdf est retourné.
2321     */
2322     function generate_pdf_consultation() {
2323     if(isset($this->valF[$this->clePrimaire])) {
2324     $id = $this->valF[$this->clePrimaire];
2325     } else {
2326     $id = $this->getVal($this->clePrimaire);
2327     }
2328    
2329     // Requête qui récupère le type de consultation
2330     $sql = " SELECT id ";
2331     $sql .= " FROM ".DB_PREFIXE."service ";
2332     $sql .= " LEFT JOIN ".DB_PREFIXE."om_etat ";
2333     $sql .= " ON service.edition = om_etat.om_etat ";
2334     $sql .= " WHERE service=(";
2335     $sql .= " SELECT service ";
2336     $sql .= " FROM ".DB_PREFIXE."consultation ";
2337     $sql .= " WHERE consultation=".$id."";
2338     $sql .= ") ";
2339     $obj = $this->f->db->getone($sql);
2340     $this->f->addTolog(
2341     __FILE__." - ".__METHOD__." : db->getone(\"".$sql."\");",
2342     VERBOSE_MODE
2343     );
2344     if($this->f->isDatabaseError($obj, true)) {
2345     $this->addToMessage(_("Aucun document genere."));
2346     $this->addToMessage(_("Finalisation non enregistree"));
2347     return false;
2348     }
2349     $collectivite = $this->f->getCollectivite($this->get_dossier_collectivite());
2350    
2351     $pdf_output = $this->compute_pdf_output("etat", $obj, $collectivite, $id);
2352    
2353     return $pdf_output;
2354     }
2355    
2356     function get_dossier_collectivite() {
2357     if(isset($this->valF["dossier"])) {
2358     $dossier = $this->valF["dossier"];
2359     } else {
2360     $dossier = $this->getVal("dossier");
2361     }
2362    
2363     $sql = "SELECT om_collectivite FROM ".DB_PREFIXE."dossier WHERE dossier.dossier='".$dossier."'";
2364     $collectivite = $this->f->db->getone($sql);
2365     $this->f->addTolog(
2366     __FILE__." - ".__METHOD__." : db->getone(\"".$sql."\");",
2367     VERBOSE_MODE
2368     );
2369     if($this->f->isDatabaseError($collectivite, true)) {
2370     $this->addToMessage(_("Aucun document genere."));
2371     $this->addToMessage(_("Finalisation non enregistree"));
2372     return false;
2373     }
2374     return $collectivite;
2375     }
2376    
2377     function view_consulter_pdf(){
2378     if($this->getVal("om_final_consultation") == 't') {
2379     $lien = '../spg/file.php?obj=consultation&'.
2380     'champ=om_fichier_consultation&id='.$this->getVal($this->clePrimaire);
2381     header("Location: ".$lien);
2382     } else {
2383    
2384     $output = $this->generate_pdf_consultation();
2385     $this->expose_pdf_output($output["pdf_output"], $output["filename"]);
2386     }
2387     exit();
2388     }
2389 nhaye 5254
2390    
2391 mbroquet 3730 /**
2392     * Création du nom de fichier
2393     * @return string numéro de dossier d'instruction
2394     */
2395     protected function getFichierFilename() {
2396     return "consultation_avis_".$this->valF[$this->clePrimaire].".pdf";
2397     }
2398    
2399     /**
2400     * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
2401     * @return string numéro de dossier d'instruction
2402     */
2403     protected function getDossier() {
2404     if(empty($this->specificMetadata)) {
2405     $this->getSpecificMetadata();
2406     }
2407     return $this->specificMetadata->dossier;
2408     }
2409     /**
2410     * Récupération la version du dossier d'instruction à ajouter aux métadonnées
2411     * @return int Version
2412     */
2413     protected function getDossierVersion() {
2414     if(empty($this->specificMetadata)) {
2415     $this->getSpecificMetadata();
2416     }
2417     return $this->specificMetadata->version;
2418     }
2419     /**
2420     * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
2421     * @return string numéro de dossier d'autorisation
2422     */
2423     protected function getNumDemandeAutor() {
2424     if(empty($this->specificMetadata)) {
2425     $this->getSpecificMetadata();
2426     }
2427     return $this->specificMetadata->dossier_autorisation;
2428     }
2429     /**
2430     * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
2431     * @return date demande initiale
2432     */
2433     protected function getAnneemoisDemandeAutor() {
2434     if(empty($this->specificMetadata)) {
2435     $this->getSpecificMetadata();
2436     }
2437     return $this->specificMetadata->date_demande_initiale;
2438     }
2439     /**
2440     * Récupération du type de dossier d'instruction à ajouter aux métadonnées
2441     * @return string type de dossier d'instruction
2442     */
2443     protected function getTypeInstruction() {
2444     if(empty($this->specificMetadata)) {
2445     $this->getSpecificMetadata();
2446     }
2447     return $this->specificMetadata->dossier_instruction_type;
2448     }
2449     /**
2450     * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
2451     * @return string avis
2452     */
2453     protected function getStatutAutorisation() {
2454     if(empty($this->specificMetadata)) {
2455     $this->getSpecificMetadata();
2456     }
2457     return $this->specificMetadata->statut;
2458     }
2459     /**
2460     * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
2461     * @return string type d'autorisation
2462     */
2463     protected function getTypeAutorisation() {
2464     if(empty($this->specificMetadata)) {
2465     $this->getSpecificMetadata();
2466     }
2467     return $this->specificMetadata->dossier_autorisation_type;
2468     }
2469     /**
2470     * Récupération de la date d'ajout de document à ajouter aux métadonnées
2471     * @return date de l'évènement
2472     */
2473     protected function getDateEvenementDocument() {
2474     return date("Y-m-d");
2475     }
2476     /**
2477     * Récupération du groupe d'instruction à ajouter aux métadonnées
2478     * @return string Groupe d'instruction
2479     */
2480     protected function getGroupeInstruction() {
2481     if(empty($this->specificMetadata)) {
2482     $this->getSpecificMetadata();
2483     }
2484     return $this->specificMetadata->groupe_instruction;
2485     }
2486     /**
2487     * Récupération du type de document à ajouter aux métadonnées
2488     * @return string Type de document
2489     */
2490     protected function getTitle() {
2491     if ($this->retourformulaire == "demande_avis_encours") {
2492     return 'Retour de consultation';
2493     } else {
2494     return 'Demande de consultation';
2495     }
2496     }
2497    
2498     /**
2499     * Cette méthode permet de stocker en attribut toutes les métadonnées
2500     * nécessaire à l'ajout d'un document.
2501     */
2502     public function getSpecificMetadata() {
2503     if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
2504     $dossier = $this->valF["dossier"];
2505     } else {
2506     $dossier = $this->getVal("dossier");
2507     }
2508     //Requête pour récupérer les informations essentiels sur le dossier d'instruction
2509     $sql = "SELECT dossier.dossier as dossier,
2510     dossier_autorisation.dossier_autorisation as dossier_autorisation,
2511     to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
2512     dossier_instruction_type.code as dossier_instruction_type,
2513     etat_dossier_autorisation.libelle as statut,
2514     dossier_autorisation_type.code as dossier_autorisation_type,
2515     groupe.code as groupe_instruction
2516     FROM ".DB_PREFIXE."dossier
2517     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
2518     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2519     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
2520     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
2521     LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
2522     ON dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
2523     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
2524     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2525     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
2526     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
2527     LEFT JOIN ".DB_PREFIXE."groupe
2528     ON dossier_autorisation_type.groupe = groupe.groupe
2529     WHERE dossier.dossier = '".$dossier."'";
2530     $res = $this->db->query($sql);
2531     $this->f->addToLog("obj/document_numerise.class.php : db->query(".$sql.")", VERBOSE_MODE);
2532     if ( database::isError($res)){
2533     die();
2534     }
2535    
2536     //Le résultat est récupéré dans un objet
2537     $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
2538    
2539     //Si il y a un résultat
2540     if ($row !== null) {
2541    
2542 fmichon 3892 // Instrance de la classe dossier
2543     $inst_dossier = $this->get_inst_dossier($dossier);
2544    
2545     // Insère l'attribut version à l'objet
2546     $row->version = $inst_dossier->get_dossier_instruction_version();
2547    
2548 mbroquet 3730 //Alors on créé l'objet dossier_instruction
2549     $this->specificMetadata = $row;
2550    
2551     }
2552     }
2553    
2554     /**
2555     *
2556     * @return boolean
2557     */
2558     function is_instructeur(){
2559    
2560     //Si l'utilisateur est un instructeur
2561     if ($this->f->isUserInstructeur()){
2562     return true;
2563     }
2564     return false;
2565     }
2566    
2567     function is_editable(){
2568 softime 5024 // Si bypass
2569 mbroquet 3730 if ($this->f->can_bypass("consultation", "modifier")){
2570     return true;
2571     }
2572    
2573 softime 5024 // Si l'utilisateur n'est pas instructeur on vérifie que le dossier
2574     // n'est pas clôturé
2575     // Sinon on verifie sa division
2576     if ($this->f->isUserInstructeur() === false) {
2577     if ($this->is_dossier_instruction_not_closed() === true) {
2578     return true;
2579     }
2580     } else {
2581     if ($this->is_dossier_instruction_not_closed() === true &&
2582     $this->is_instructeur_from_division() === true) {
2583     return true;
2584     }
2585 mbroquet 3730 }
2586     return false;
2587     }
2588    
2589     function is_deletable(){
2590    
2591     if ($this->f->can_bypass("consultation", "supprimer")){
2592     return true;
2593     }
2594 softime 5024
2595     // Pas de suppression possible si un avis est rendu
2596     // ou si un fichier est lié et que l'utilisateur n'a pas le droit de
2597     // supprimer avec avis rendu
2598     if ($this->is_dossier_instruction_not_closed() &&
2599     $this->is_instructeur_from_division() &&
2600     $this->getVal("avis_consultation") == "" &&
2601     $this->getVal('fichier') == "" &&
2602     $this->f->isAccredited("consultation_supprimer_avec_avis_rendu") == false
2603     ){
2604 mbroquet 3730 return true;
2605     }
2606     return false;
2607     }
2608    
2609     function is_multiaddable(){
2610    
2611     if ($this->f->can_bypass("consultation", "ajouter")){
2612     return true;
2613     }
2614    
2615     if ($this->is_instructeur_from_division()){
2616     return true;
2617     }
2618     return false;
2619     }
2620    
2621     function is_markable(){
2622    
2623     if($this->f->can_bypass("consultation", "modifier_lu")){
2624     return true;
2625     }
2626    
2627     if ($this->is_instructeur_from_division()){
2628     return true;
2629     }
2630     return false;
2631     }
2632    
2633     function is_finalizable(){
2634    
2635     if($this->f->can_bypass("consultation", "finaliser")){
2636     return true;
2637     }
2638    
2639     if ($this->is_instructeur_from_division() && $this->is_dossier_instruction_not_closed()){
2640     return true;
2641     }
2642    
2643     return false;
2644     }
2645    
2646     function is_unfinalizable(){
2647    
2648     if($this->f->can_bypass("consultation", "definaliser")){
2649     return true;
2650     }
2651    
2652     if ($this->is_instructeur_from_division() && $this->is_dossier_instruction_not_closed()){
2653     return true;
2654     }
2655    
2656     return false;
2657     }
2658 fmichon 3892
2659     /**
2660     * Récupère l'instance du dossier d'instruction
2661     *
2662     * @param mixed Identifiant du dossier d'instruction
2663     *
2664     * @return object
2665     */
2666     function get_inst_dossier($dossier = null) {
2667     //
2668     return $this->get_inst_common("dossier", $dossier);
2669     }
2670    
2671    
2672 mbroquet 3730 }// fin classe
2673 softime 5024 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26