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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4237 - (hide annotations)
Fri May 20 09:41:07 2016 UTC (8 years, 8 months ago) by fmichon
File size: 111591 byte(s)
* Déplacement de scripts du répertoire app/ vers des vues de la classe métier concernée. Les écrans sont : 'Suivi > Demandes D'avis > *'.

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26