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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3892 - (hide annotations)
Fri Apr 8 13:48:30 2016 UTC (8 years, 9 months ago) by fmichon
File size: 95003 byte(s)
Merge de la branche de correctif 'merge_3.14.x' :
* Correction - Les métadonnées des fichiers enregistrés sur le filestorage sont
  désormais correctes.
* Correction - Lorsque l'avis d'une consultation est automatiquement passé à
  tacite, le champ "lu" est désormais positionné à non lu. Cela permet de
  l'afficher dans le widget "consultation" du tableau de bord de l'instructeur.
* Correction - L'aide à la saisie sur le formulaire des pétitionnaires et des
  architectes permettant de chercher dans les "fréquents" prends en compte
  désormais le caractère '*' dans la chaîne recherchée.

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26