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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4667 - (hide annotations)
Wed Jun 29 16:50:16 2016 UTC (8 years, 7 months ago) by softime
File size: 113743 byte(s)
* Amélioration - Ajout d'un profil "Administrateur technique et fonctionnel"
  possédant tous les droits.
  Ticket #8400.

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26