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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26