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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5169 - (hide annotations)
Thu Nov 17 18:17:08 2016 UTC (8 years, 2 months ago) by softime
File size: 113859 byte(s)
* Merge de la branche de développement 3.34.0 vers le trunk

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26