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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3987 - (hide annotations)
Mon Apr 18 10:56:32 2016 UTC (8 years, 9 months ago) by nmeucci
File size: 95039 byte(s)
* Suite r3985 : correction du type du champ "marque" dans les consultations

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 nmeucci 3923 'om_final_consultation' => false,
462     'om_fichier_consultation' => '',
463 nmeucci 3985 'marque' => false,
464 mbroquet 3730 );
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     // MODE - retour de consultation par suivi des date
1232     if ($maj == 100) {
1233     $form->setType("consultation", "hiddenstatic");
1234     $form->setType('dossier_libelle', 'hiddenstatic');
1235     $form->setType('date_envoi', 'hiddenstaticdate');
1236     $form->setType('date_limite', 'hiddenstaticdate');
1237     $form->setType('date_reception', 'hiddenstaticdate');
1238     $form->setType('service', 'selecthiddenstatic');
1239     $form->setType('date_retour', 'date');
1240     $form->setType('lu', 'hidden');
1241     $form->setType("avis_consultation", "select");
1242     $form->setType("motivation", "textarea");
1243     $form->setType('fichier', 'upload');
1244     }
1245     //// On cache la clé primaire
1246     //$form->setType('consultation', 'hidden');
1247     //
1248     if ($this->getParameter("retourformulaire") == "dossier"
1249     || $this->getParameter("retourformulaire") == "dossier_instruction"
1250     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
1251     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
1252     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
1253     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures") {
1254     //
1255     $form->setType('dossier_libelle', 'hidden');
1256     }
1257    
1258     $form->setType('code_barres', 'hidden');
1259    
1260     //Cache les champs pour la finalisation
1261     $form->setType('om_fichier_consultation', 'hidden');
1262     $form->setType('om_final_consultation', 'hidden');
1263    
1264     if($maj == 50 or $maj == 60 or $maj == 70) {
1265     foreach ($this->champs as $value) {
1266     $form->setType($value, 'hidden');
1267     }
1268     }
1269     }
1270    
1271     // Cette méthode permet de calculer la date limite en fonction de la date
1272     // de réception et du délai de consultation du service consulté
1273     function calculDateLimite() {
1274     // mise a jour instruction avec evenement [return delay]
1275     if ($this->valF["date_reception"] != "") {
1276     //
1277     $sql = " select delai from ".DB_PREFIXE."service ";
1278     $sql .= " where service='".$this->valF["service"]."' ";
1279     $delai = $this->db->getOne($sql);
1280     $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
1281     //
1282     $sql = " select delai_type from ".DB_PREFIXE."service ";
1283     $sql .= " where service='".$this->valF["service"]."' ";
1284     $delai_type = $this->db->getOne($sql);
1285     $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
1286     //
1287     $this->valF["date_limite"] = $this->f->mois_date($this->valF["date_reception"], $delai, "+", $delai_type);
1288     //
1289     if ($delai_type == "mois") {
1290     $delai_type_trad = _("mois");
1291     } else {
1292     $delai_type_trad = _("jour(s)");
1293     }
1294     //
1295     $this->addToMessage(_("delai")." ".
1296     _("retour")." ".$delai." ".$delai_type_trad." -> ".
1297     _("retour")." ".date("d/m/Y", strtotime($this->valF["date_limite"])));
1298     }
1299     }
1300    
1301     // TRIGGER AVANT MODIFICATION DE DONNEES
1302     // trigger before modification data
1303     function triggerajouter($id,&$db,$val,$DEBUG) {
1304     //
1305     $this->calculDateLimite();
1306    
1307     // Identifiant du type de courrier
1308     $idTypeCourrier = '12';
1309     $idCourrier = str_pad($this->valF["consultation"], 10, "0", STR_PAD_LEFT);
1310     // Code barres
1311     $this->valF["code_barres"] = $idTypeCourrier . $idCourrier;
1312     }
1313    
1314     //
1315     function triggermodifier($id,&$db,$val,$DEBUG) {
1316     //
1317     $this->calculDateLimite();
1318     }
1319    
1320     //
1321     function triggerajouterapres($id,&$db,$val,$DEBUG) {
1322    
1323     // Verification de la demande de notif par mail
1324     $sql= "SELECT abrege, libelle, notification_email, email FROM ".DB_PREFIXE.
1325     "service WHERE service ='".$this->valF['service']."'";
1326     $res=$db->query($sql);
1327     $notif = $res->fetchrow(DB_FETCHMODE_ASSOC);
1328     if (database :: isError($sql))die($res->getMessage()."erreur ".$sql);
1329     if ($notif['notification_email']=='t') {
1330    
1331     // Recuperation des infos du dossier
1332     $sql= "SELECT dossier, terrain_adresse_voie_numero, terrain_adresse_voie, terrain_adresse_code_postal, terrain_adresse_localite
1333     FROM ".DB_PREFIXE."dossier WHERE dossier ='".$this->valF['dossier']."'";
1334     $res=$db->query($sql);
1335     $dossier = $res->fetchrow(DB_FETCHMODE_ASSOC);
1336    
1337     // Definition des parametres d'envoi du mail
1338     $title=_("Consultation de services : dossier no")." ".$dossier['dossier'];
1339     $corps=_("Votre service est consulte concernant le dossier no")." ".$dossier['dossier']."<br/>".
1340     _("Il concerne le terrain situe a l'adresse :")." ".$dossier['terrain_adresse_voie_numero'].
1341     " ".$dossier['terrain_adresse_voie']." ".$dossier['terrain_adresse_code_postal']." ".$dossier['terrain_adresse_localite']."<br/>".
1342     _("Vous pouvez y acceder et rendre votre avis a l'adresse")." <a href='".$this->f->getParameter('services_consultes_lien_interne').
1343     // On ajoute l'idx, s'il y a besoin
1344     ((substr($this->f->getParameter('services_consultes_lien_interne'), -5)=="&idx=")?$this->valF['consultation']:"")."'>".
1345     _("Lien interne")."</a> "._("ou")." <a href='".$this->f->getParameter('services_consultes_lien_externe').
1346     // On ajoute l'idx, s'il y a besoin
1347     ((substr($this->f->getParameter('services_consultes_lien_externe'), -5)=="&idx=")?$this->valF['consultation']:"")."'>".
1348     _("Lien externe")."</a>";
1349     // Envoi du mail avec message de retour
1350     if($this->f->sendMail(iconv("UTF-8", "CP1252", $title), iconv("UTF-8", "CP1252", $corps), iconv("UTF-8", "CP1252", $notif['email']))) {
1351     $this->addToMessage(_("Envoi d'un mail de notification au service")." \"(".$notif['abrege'].") ".$notif["libelle"]."\"");
1352     } else {
1353     $this->addToMessage(_("L'envoi du mail de notification a echoue"));
1354     }
1355     }
1356    
1357    
1358     // verification si envoi vers ERP est active
1359     if ($this->f->getParameter('option_erp') === 'true') {
1360     // s'il s'agit de la consultation ERP Secu, ERP Accessibilite, ou
1361     // deenvoie un
1362     // message a ERP
1363     $dossier_erp = $this->getFromDB("SELECT erp FROM ".DB_PREFIXE.
1364     "dossier WHERE dossier = '" .$this->valF['dossier'] . "'");
1365     $dossier_nature = $this->getFromDB("SELECT dossier_autorisation_type_detaille.code FROM ".DB_PREFIXE.
1366     "dossier
1367     INNER JOIN ".DB_PREFIXE."dossier_autorisation
1368     ON dossier.dossier_autorisation=dossier_autorisation.dossier_autorisation
1369     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
1370     ON dossier_autorisation.dossier_autorisation_type_detaille
1371     = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1372     WHERE dossier = '" . $this->valF['dossier'] . "'");
1373     if ($dossier_erp == 't'
1374     && substr($dossier_nature, 0, 2) == $this->f->getParameter('erp_dossier_nature_pc')) {
1375     // envoi du message "Demande d'instruction d'un dossier PC pour un ERP"
1376     if (($this->valF['service'] == $this->f->getParameter('erp_service_accessibilite')
1377     || $this->valF['service'] == $this->f->getParameter('erp_service_securite'))) {
1378     $msgenque = new MessageEnqueuer();
1379     $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
1380     $msgenque->setConsultationIdentifier($this->valF['consultation']);
1381     $return = $msgenque->enqueueMessage($msgenque::$ERP_DEMANDE_INSTRUCTION_PC);
1382     //Si une erreur s'est produite on arrête le traitement et on
1383     //retourne une erreur
1384     if ($return !== 0){
1385    
1386     $this->addToMessage(_("Une erreur s'est produite lors de ".
1387     "l'envoi du message au referentiel ERP. Merci de ".
1388     "contacter votre administrateur"));
1389     //On ne valide pas le formulaire
1390     $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1391     $this->correct = false;
1392     return false;
1393     }
1394     else {
1395     $this->addToMessage(_("Le message a ete transmis au ".
1396     "referentiel ERP."));
1397     }
1398     }
1399    
1400     // envoi du message "Consultation ERP pour conformite" en cas de creation de la
1401     // consultation du service ERP Conformite
1402     if ($this->valF['service'] == $this->f->getParameter('erp_service_conformite')) {
1403     $msgenque = new MessageEnqueuer();
1404     $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
1405     $msgenque->setConsultationIdentifier($this->valF['consultation']);
1406     $return = $msgenque->enqueueMessage($msgenque::$ERP_CONSULTATION_CONFORMITE);
1407     //Si une erreur s'est produite on arrête le traitement et on
1408     //retourne une erreur
1409     if ($return !== 0){
1410    
1411     $this->addToMessage(_("Une erreur s'est produite lors de ".
1412     "l'envoi du message au referentiel ERP. Merci de ".
1413     "contacter votre administrateur"));
1414     //On ne valide pas le formulaire
1415     $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1416     $this->correct = false;
1417     return false;
1418     }
1419     else {
1420     $this->addToMessage(_("Le message a ete transmis au ".
1421     "referentiel ERP."));
1422     }
1423     }
1424     }
1425     } // fin de if($this->f->getParameter('option_erp') === 'true')
1426    
1427     // Finalisation du document
1428     $this->finaliserAjouter($id);
1429     }
1430    
1431     /**
1432     * Fait une requette sql pour extraire la valeur d'un champ, et retourne
1433     * cette valeur
1434     * @param string $sql La requete sql a executer
1435     * @return La valeur du champs cherche, sinon NULL. En cas d'erreur de la BD
1436     * l'execution s'arrete.
1437     */
1438     function getFromDB($sql) {
1439     //$sql = "SELECT libelle FROM ".DB_PREFIXE."dossier WHERE dossier = '" . $dossier . "'";
1440     $res = $this->db->limitquery($sql, 0, 1);
1441     $this->f->addToLog("getDossierERPSpecification(): db->limitquery(\"".
1442     str_replace(",",", ",$sql)."\", 0, 1);", VERBOSE_MODE);
1443     // Si une erreur survient on die
1444     if (database::isError($res, true)) {
1445     // Appel de la methode de recuperation des erreurs
1446     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), 'instruction');
1447     }
1448     // retourne la nature du dossier
1449     while ($row =& $res->fetchRow()) {
1450     return $row[0];
1451     }
1452     // la nature n'etait pas trouve, ce qui ne devrait pas se passer
1453     return NULL;
1454    
1455     }
1456    
1457     // =============================================
1458     // Ajout du fielset
1459     // Add fieldset
1460     // =============================================
1461     function setLayout(&$form, $maj){
1462    
1463     // Modification layout : écran de retour d'avis permettant
1464     // uniquement la saisie des trois champs : avis, motivation et fichier
1465     if ($this->f->isAccredited('consultation_consulter_autre_que_retour_avis')) {
1466    
1467     //Champs sur lequel s'ouvre le fieldset
1468     $form->setBloc('dossier','D',"");
1469     $form->setFieldset('dossier','D',_('Consultation'));
1470    
1471     //Champs sur lequel se ferme le fieldset
1472     $form->setFieldset('date_envoi','F','');
1473     $form->setBloc('date_envoi','F');
1474    
1475     }
1476    
1477     // MODE - autre que AJOUTER alors on affiche un fieldset retour
1478     // d'avis
1479     if ($maj != 0) {
1480    
1481     //Champs sur lequel s'ouvre le fieldset
1482     $form->setBloc('date_reception','D',"");
1483     $form->setFieldset('date_reception','D',_('Retour d\'avis'));
1484    
1485     //Champs sur lequel se ferme le fieldset
1486     $form->setFieldset('lu','F','');
1487     $form->setBloc('lu','F');
1488    
1489     }
1490     }
1491    
1492     /** Surcharge de la methode retour afin de retourner sur la page de saisie de
1493     * code barre si besoin
1494     **/
1495     function retour($premier = 0, $recherche = "", $tricol = "") {
1496     $params ="obj=".get_class($this);
1497     if($this->getParameter("retour")=="form") {
1498     $params .= "&amp;idx=".$this->getParameter("idx");
1499     $params .= "&amp;action=3";
1500     }
1501     $params .= "&amp;premier=".$this->getParameter("premier");
1502     $params .= "&amp;tricol=".$this->getParameter("tricol");
1503     $params .= "&amp;recherche=".$this->getParameter("recherche");
1504     $params .= "&amp;selectioncol=".$this->getParameter("selectioncol");
1505     $params .= "&amp;advs_id=".$this->getParameter("advs_id");
1506     $params .= "&amp;valide=".$this->getParameter("valide");
1507     echo "\n<a class=\"retour\" ";
1508     echo "href=\"";
1509     //
1510    
1511     if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
1512     echo "form.php?".$params;
1513     } elseif($this->getParameter("retour")=="suivi_retours_de_consultation") {
1514     echo "../app/suivi_retours_de_consultation.php";
1515     } else {
1516     echo "tab.php?".$params;
1517     }
1518     //
1519     echo "\"";
1520     echo ">";
1521     //
1522     echo _("Retour");
1523     //
1524     echo "</a>\n";
1525     }
1526    
1527     /**
1528     * Surcharge du bouton retour pour popup
1529     */
1530     function retoursousformulaire($idxformulaire, $retourformulaire, $val,
1531     $objsf, $premiersf, $tricolsf, $validation,
1532     $idx, $maj, $retour) {
1533     if($retourformulaire === "demande_avis_encours") {
1534     echo "\n<a class=\"retour\" ";
1535     echo "href=\"";
1536     echo "#";
1537     echo "\" ";
1538     echo ">";
1539     //
1540     echo _("Retour");
1541     //
1542     echo "</a>\n";
1543     } else {
1544     parent::retoursousformulaire($idxformulaire, $retourformulaire, $val,
1545     $objsf, $premiersf, $tricolsf, $validation,
1546     $idx, $maj, $retour);
1547     }
1548     }
1549    
1550     /**
1551     * Ajout des contraintes spécifiques pour l'ajout d'un fichier en retour de
1552     * consultation
1553     */
1554     function setSelect(&$form, $maj,&$db,$debug) {
1555     if(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php"))
1556     include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php");
1557     elseif(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc"))
1558     include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc");
1559    
1560     // avis_consultation
1561     $this->init_select($form, $db, $maj, $debug, "avis_consultation",
1562     $sql_avis_consultation, $sql_avis_consultation_by_id, true);
1563    
1564     // service
1565     // si contexte DI, ou surcharge (mes_encours, mes_clotures...)
1566     $is_in_context_of_foreign_key = $this->is_in_context_of_foreign_key("dossier", $this->getParameter('retourformulaire'));
1567     if ($is_in_context_of_foreign_key == true) {
1568     // on recupÚre les services des multicollectivités et de celle du DI
1569     require_once "../obj/dossier_instruction.class.php";
1570     $di = new dossier_instruction($this->getParameter('idxformulaire'), $db, $debug);
1571     $sql_service_by_di = str_replace('<collectivite_di>', $di->getVal("om_collectivite"), $sql_service_by_di);
1572    
1573     $this->init_select($form, $db, $maj, $debug, "service",
1574     $sql_service_by_di, $sql_service_by_id, true);
1575     } else {
1576     $this->init_select($form, $db, $maj, $debug, "service", $sql_service, $sql_service_by_id, true);
1577     }
1578    
1579     //Seulement dans le cas d'un retour d'avis
1580     if($this->retourformulaire == "demande_avis_encours" or $this->getParameter("maj") == 100 or $this->getParameter("maj") == 90) {
1581     // avis_consultation
1582     $this->init_select($form, $db, 1, $debug, "avis_consultation",
1583     $sql_avis_consultation, $sql_avis_consultation_by_id, true);
1584    
1585     //Tableau des contraintes spécifiques
1586     $params = array(
1587     "constraint" => array(
1588     "size_max" => 2,
1589     "extension" => ".pdf"
1590     ),
1591     );
1592    
1593     $form->setSelect("fichier", $params);
1594     }
1595     }
1596    
1597     /**
1598     * Finalisation du document lors de l'ajout d'une consultation.
1599     *
1600     * @param integer $id indentifiant de l'objet
1601     */
1602     function finaliserAjouter($id){
1603    
1604     $uid = $this->file_finalizing($id);
1605    
1606     //Mise à jour des données
1607     if ( $uid != '' && $uid != 'OP_FAILURE' ){
1608     // Logger
1609     $this->addToLog("finaliserAjouter() - begin", EXTRA_VERBOSE_MODE);
1610    
1611     $valF = array(
1612     "om_final_consultation"=> true,
1613     "om_fichier_consultation"=>$uid
1614     );
1615    
1616     // Execution de la requête de modification des donnees de l'attribut
1617     // valF de l'objet dans l'attribut table de l'objet
1618     $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF,
1619     DB_AUTOQUERY_UPDATE, $this->getCle($id));
1620     $this->addToLog(
1621     "finaliserAjouter() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id)."\")",
1622     VERBOSE_MODE
1623     );
1624     // Si une erreur survient
1625     if (database::isError($res, true)) {
1626     $this->correct = false;
1627     // Appel de la methode de recuperation des erreurs
1628     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
1629     return false;
1630     } else {
1631     // Log
1632     $this->addToLog(_("Requete executee"), VERBOSE_MODE);
1633     // Log
1634     $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
1635     $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
1636     $message .= "[&nbsp;".$this->db->affectedRows()."&nbsp;";
1637     $message .= _("enregistrement(s) mis a jour")."&nbsp;]";
1638     $this->addToLog($message, VERBOSE_MODE);
1639     }
1640     }
1641     }
1642    
1643     /**
1644     * Finalisation du fichier.
1645     *
1646     * @param integer $id indentifiant de l'objet
1647     *
1648     * @return string uid du fichier finalisé
1649     */
1650     function file_finalizing($id){
1651     $pdf = $this->generate_pdf_consultation();
1652    
1653     if(isset($this->valF["om_final_consultation"])) {
1654     $finalized = $this->valF["om_final_consultation"];
1655     } else {
1656     $finalized = $this->getVal("om_final_consultation");
1657     }
1658    
1659     // Métadonnées du document
1660     $metadata = array(
1661     'filename' => $pdf["filename"],
1662     'mimetype' => 'application/pdf',
1663     'size' => strlen($pdf["pdf_output"])
1664     );
1665    
1666     // Récupération des métadonnées calculées après validation
1667     $spe_metadata = $this->getMetadata("om_fichier_consultation");
1668    
1669     $metadata = array_merge($metadata, $spe_metadata);
1670    
1671     // Si le document a déjà été finalisé
1672     if ( $finalized != '' ){
1673    
1674     // Met à jour le document mais pas son uid
1675     $uid = $this->f->storage->update(
1676     $this->getVal("om_fichier_consultation"), $pdf["pdf_output"], $metadata);
1677     }
1678     // Sinon, ajoute le document et récupère son uid
1679     else {
1680    
1681     // Stockage du PDF
1682     $uid = $this->f->storage->create($pdf["pdf_output"], $metadata);
1683     }
1684    
1685     return $uid;
1686    
1687     }
1688    
1689    
1690     /**
1691     * TREATMENT - finalize.
1692     *
1693     * Permet de finaliser un enregistrement
1694     *
1695     * @param array $val valeurs soumises par le formulaire
1696     * @param null $dnu1 @deprecated Ancienne ressource de base de données.
1697     * @param null $dnu2 @deprecated Ancien marqueur de débogage.
1698     *
1699     * @return boolean
1700     */
1701     function finalize($val = array(), &$dnu1 = null, $dnu2 = null) {
1702    
1703     // Cette méthode permet d'exécuter une routine en début des méthodes
1704     // dites de TREATMENT.
1705     $this->begin_treatment(__METHOD__);
1706    
1707     // Traitement de la finalisation
1708     $ret = $this->manage_finalizing("finalize", $val);
1709    
1710     // Si le traitement retourne une erreur
1711     if ($ret !== true) {
1712    
1713     // Termine le traitement
1714     $this->end_treatment(__METHOD__, false);
1715     }
1716    
1717     // Termine le traitement
1718     return $this->end_treatment(__METHOD__, true);
1719     }
1720    
1721     /**
1722     * TREATMENT - unfinalize.
1723     *
1724     * Permet de definaliser un enregistrement
1725     *
1726     * @param array $val valeurs soumises par le formulaire
1727     * @param null $dnu1 @deprecated Ancienne ressource de base de données.
1728     * @param null $dnu2 @deprecated Ancien marqueur de débogage.
1729     *
1730     * @return boolean
1731     */
1732     function unfinalize($val = array(), &$dnu1 = null, $dnu2 = null) {
1733    
1734     // Cette méthode permet d'exécuter une routine en début des méthodes
1735     // dites de TREATMENT.
1736     $this->begin_treatment(__METHOD__);
1737    
1738     // Traitement de la finalisation
1739     $ret = $this->manage_finalizing("unfinalize", $val);
1740    
1741     // Si le traitement retourne une erreur
1742     if ($ret !== true) {
1743    
1744     // Termine le traitement
1745     $this->end_treatment(__METHOD__, false);
1746     }
1747    
1748     // Termine le traitement
1749     return $this->end_treatment(__METHOD__, true);
1750     }
1751    
1752    
1753     /**
1754     * Finalisation des documents.
1755     *
1756     * @param string $mode finalize/unfinalize
1757     * @param array $val valeurs soumises par le formulaire
1758     */
1759     function manage_finalizing($mode = null, $val = array()) {
1760    
1761     // Recuperation de la valeur de la cle primaire de l'objet
1762     $id = $this->getVal($this->clePrimaire);
1763    
1764     // Si on finalise le document
1765     if ($mode == "finalize") {
1766     // Finalisation du fichier
1767     $uid = $this->file_finalizing($id);
1768     }
1769     //
1770     else {
1771    
1772     //Récupération de l'uid du document finalisé
1773     $uid = $this->getVal("om_fichier_consultation");
1774    
1775     //On dé-finalise avant de finaliser
1776     if ( $uid == '' || $uid == 'OP_FAILURE' ){
1777     $this->correct = false;
1778     $this->msg="";
1779     $this->addToMessage(_("Finalisation non enregistree"));
1780     $this->addToLog(
1781     _("Finalisation non enregistree")." - ".
1782     _("id consultation")." = ".$id." - ".
1783     _("uid fichier")." = ".$uid
1784     );
1785     return false;
1786     }
1787     }
1788    
1789     //Mise à jour des données
1790     if ($uid != '' && $uid != 'OP_FAILURE') {
1791    
1792     // Logger
1793     $this->addToLog("finaliser() - begin", EXTRA_VERBOSE_MODE);
1794    
1795     foreach ($this->champs as $key => $value) {
1796     //
1797     $val[$value] = $this->val[$key];
1798     }
1799    
1800     $this->setvalF($val);
1801    
1802     // Verification de la validite des donnees
1803     $this->verifier($this->val, $this->db, DEBUG);
1804     // Verification du verrou
1805     $this->testverrou();
1806     // Si les verifications precedentes sont correctes, on procede a
1807     // la modification, sinon on ne fait rien et on retourne une erreur
1808     if ($this->correct) {
1809    
1810     // Execution du trigger 'before' specifique au MODE 'update'
1811     $this->triggermodifier( $id, $this->db, $this->val, DEBUG);
1812    
1813     //
1814     $valF = '';
1815     if($mode=="finalize") {
1816     $valF["om_final_consultation"] = true;
1817     } else {
1818     $valF["om_final_consultation"] = false;
1819     }
1820     $valF["om_fichier_consultation"] = $uid;
1821    
1822     // Execution de la requête de modification des donnees de l'attribut
1823     // valF de l'objet dans l'attribut table de l'objet
1824     $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF,
1825     DB_AUTOQUERY_UPDATE, $this->getCle($id));
1826     $this->addToLog(
1827     "finaliser() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id)."\")",
1828     VERBOSE_MODE
1829     );
1830    
1831     // Si une erreur survient
1832     if (database::isError($res, true)) {
1833    
1834     // Appel de la methode de recuperation des erreurs
1835     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
1836     $this->correct = false;
1837     return false;
1838     } else {
1839    
1840     // Log
1841     $this->addToLog(_("Requete executee"), VERBOSE_MODE);
1842     // Log
1843     $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
1844     $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
1845     $message .= "[&nbsp;".$this->db->affectedRows()."&nbsp;";
1846     $message .= _("enregistrement(s) mis a jour")."&nbsp;]";
1847     $this->addToLog($message, VERBOSE_MODE);
1848     // Mise en place du verrou pour ne pas finaliser plusieurs fois
1849     // le meme document
1850     $this->verrouille();
1851     // Execution du trigger 'after' specifique au MODE 'update'
1852     $this->triggermodifierapres($id, $this->db, $this->val, DEBUG);
1853    
1854     if($mode == "finalize") {
1855     $etat = _('finalisation');
1856     } else {
1857     $etat = _('definalisation');
1858     }
1859     $this->msg="";
1860     $this->addToMessage(sprintf(_("La %s du document s'est effectuee avec succes."), $etat));
1861     return true;
1862     }
1863     //
1864     } else {
1865     $this->correct = false;
1866     $this->msg="";
1867     // Message d'echec (saut d'une ligne supplementaire avant le
1868     // message pour qu'il soit mis en evidence)
1869     $this->addToMessage(_("Finalisation non enregistree"));
1870     $this->addToLog(
1871     _("Finalisation non enregistree")." - ".
1872     _("id consultation")." = ".$id." - ".
1873     _("uid fichier")." = ".$uid
1874     );
1875     return false;
1876     }
1877     }
1878     // Si le document n'a pas été stocké
1879     else{
1880     $this->correct = false;
1881     $this->msg="";
1882     $this->addToMessage(_("Finalisation non enregistree"));
1883     $this->addToLog(
1884     _("Finalisation non enregistree")." - ".
1885     _("id consultation")." = ".$id." - ".
1886     _("uid fichier")." = ".$uid
1887     );
1888     return false;
1889     }
1890     }
1891    
1892     /**
1893     * Permet de récupérer l'édition de la consultation.
1894     *
1895     * @param string $output type de sortie
1896     *
1897     * @return string si le type de sortie est string, le contenu du pdf est retourné.
1898     */
1899     function generate_pdf_consultation() {
1900     if(isset($this->valF[$this->clePrimaire])) {
1901     $id = $this->valF[$this->clePrimaire];
1902     } else {
1903     $id = $this->getVal($this->clePrimaire);
1904     }
1905    
1906     // Requête qui récupère le type de consultation
1907     $sql = " SELECT id ";
1908     $sql .= " FROM ".DB_PREFIXE."service ";
1909     $sql .= " LEFT JOIN ".DB_PREFIXE."om_etat ";
1910     $sql .= " ON service.edition = om_etat.om_etat ";
1911     $sql .= " WHERE service=(";
1912     $sql .= " SELECT service ";
1913     $sql .= " FROM ".DB_PREFIXE."consultation ";
1914     $sql .= " WHERE consultation=".$id."";
1915     $sql .= ") ";
1916     $obj = $this->f->db->getone($sql);
1917     $this->f->addTolog(
1918     __FILE__." - ".__METHOD__." : db->getone(\"".$sql."\");",
1919     VERBOSE_MODE
1920     );
1921     if($this->f->isDatabaseError($obj, true)) {
1922     $this->addToMessage(_("Aucun document genere."));
1923     $this->addToMessage(_("Finalisation non enregistree"));
1924     return false;
1925     }
1926     $collectivite = $this->f->getCollectivite($this->get_dossier_collectivite());
1927    
1928     $pdf_output = $this->compute_pdf_output("etat", $obj, $collectivite, $id);
1929    
1930     return $pdf_output;
1931     }
1932    
1933     function get_dossier_collectivite() {
1934     if(isset($this->valF["dossier"])) {
1935     $dossier = $this->valF["dossier"];
1936     } else {
1937     $dossier = $this->getVal("dossier");
1938     }
1939    
1940     $sql = "SELECT om_collectivite FROM ".DB_PREFIXE."dossier WHERE dossier.dossier='".$dossier."'";
1941     $collectivite = $this->f->db->getone($sql);
1942     $this->f->addTolog(
1943     __FILE__." - ".__METHOD__." : db->getone(\"".$sql."\");",
1944     VERBOSE_MODE
1945     );
1946     if($this->f->isDatabaseError($collectivite, true)) {
1947     $this->addToMessage(_("Aucun document genere."));
1948     $this->addToMessage(_("Finalisation non enregistree"));
1949     return false;
1950     }
1951     return $collectivite;
1952     }
1953    
1954     function view_consulter_pdf(){
1955     if($this->getVal("om_final_consultation") == 't') {
1956     $lien = '../spg/file.php?obj=consultation&'.
1957     'champ=om_fichier_consultation&id='.$this->getVal($this->clePrimaire);
1958     header("Location: ".$lien);
1959     } else {
1960    
1961     $output = $this->generate_pdf_consultation();
1962     $this->expose_pdf_output($output["pdf_output"], $output["filename"]);
1963     }
1964     exit();
1965     }
1966     /**
1967     * Création du nom de fichier
1968     * @return string numéro de dossier d'instruction
1969     */
1970     protected function getFichierFilename() {
1971     return "consultation_avis_".$this->valF[$this->clePrimaire].".pdf";
1972     }
1973    
1974     /**
1975     * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
1976     * @return string numéro de dossier d'instruction
1977     */
1978     protected function getDossier() {
1979     if(empty($this->specificMetadata)) {
1980     $this->getSpecificMetadata();
1981     }
1982     return $this->specificMetadata->dossier;
1983     }
1984     /**
1985     * Récupération la version du dossier d'instruction à ajouter aux métadonnées
1986     * @return int Version
1987     */
1988     protected function getDossierVersion() {
1989     if(empty($this->specificMetadata)) {
1990     $this->getSpecificMetadata();
1991     }
1992     return $this->specificMetadata->version;
1993     }
1994     /**
1995     * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
1996     * @return string numéro de dossier d'autorisation
1997     */
1998     protected function getNumDemandeAutor() {
1999     if(empty($this->specificMetadata)) {
2000     $this->getSpecificMetadata();
2001     }
2002     return $this->specificMetadata->dossier_autorisation;
2003     }
2004     /**
2005     * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
2006     * @return date demande initiale
2007     */
2008     protected function getAnneemoisDemandeAutor() {
2009     if(empty($this->specificMetadata)) {
2010     $this->getSpecificMetadata();
2011     }
2012     return $this->specificMetadata->date_demande_initiale;
2013     }
2014     /**
2015     * Récupération du type de dossier d'instruction à ajouter aux métadonnées
2016     * @return string type de dossier d'instruction
2017     */
2018     protected function getTypeInstruction() {
2019     if(empty($this->specificMetadata)) {
2020     $this->getSpecificMetadata();
2021     }
2022     return $this->specificMetadata->dossier_instruction_type;
2023     }
2024     /**
2025     * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
2026     * @return string avis
2027     */
2028     protected function getStatutAutorisation() {
2029     if(empty($this->specificMetadata)) {
2030     $this->getSpecificMetadata();
2031     }
2032     return $this->specificMetadata->statut;
2033     }
2034     /**
2035     * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
2036     * @return string type d'autorisation
2037     */
2038     protected function getTypeAutorisation() {
2039     if(empty($this->specificMetadata)) {
2040     $this->getSpecificMetadata();
2041     }
2042     return $this->specificMetadata->dossier_autorisation_type;
2043     }
2044     /**
2045     * Récupération de la date d'ajout de document à ajouter aux métadonnées
2046     * @return date de l'évènement
2047     */
2048     protected function getDateEvenementDocument() {
2049     return date("Y-m-d");
2050     }
2051     /**
2052     * Récupération du groupe d'instruction à ajouter aux métadonnées
2053     * @return string Groupe d'instruction
2054     */
2055     protected function getGroupeInstruction() {
2056     if(empty($this->specificMetadata)) {
2057     $this->getSpecificMetadata();
2058     }
2059     return $this->specificMetadata->groupe_instruction;
2060     }
2061     /**
2062     * Récupération du type de document à ajouter aux métadonnées
2063     * @return string Type de document
2064     */
2065     protected function getTitle() {
2066     if ($this->retourformulaire == "demande_avis_encours") {
2067     return 'Retour de consultation';
2068     } else {
2069     return 'Demande de consultation';
2070     }
2071     }
2072    
2073     /**
2074     * Cette méthode permet de stocker en attribut toutes les métadonnées
2075     * nécessaire à l'ajout d'un document.
2076     */
2077     public function getSpecificMetadata() {
2078     if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
2079     $dossier = $this->valF["dossier"];
2080     } else {
2081     $dossier = $this->getVal("dossier");
2082     }
2083     //Requête pour récupérer les informations essentiels sur le dossier d'instruction
2084     $sql = "SELECT dossier.dossier as dossier,
2085     dossier_autorisation.dossier_autorisation as dossier_autorisation,
2086     to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
2087     dossier_instruction_type.code as dossier_instruction_type,
2088     etat_dossier_autorisation.libelle as statut,
2089     dossier_autorisation_type.code as dossier_autorisation_type,
2090     groupe.code as groupe_instruction
2091     FROM ".DB_PREFIXE."dossier
2092     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
2093     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2094     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
2095     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
2096     LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
2097     ON dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
2098     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
2099     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2100     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
2101     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
2102     LEFT JOIN ".DB_PREFIXE."groupe
2103     ON dossier_autorisation_type.groupe = groupe.groupe
2104     WHERE dossier.dossier = '".$dossier."'";
2105     $res = $this->db->query($sql);
2106     $this->f->addToLog("obj/document_numerise.class.php : db->query(".$sql.")", VERBOSE_MODE);
2107     if ( database::isError($res)){
2108     die();
2109     }
2110    
2111     //Le résultat est récupéré dans un objet
2112     $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
2113    
2114     //Si il y a un résultat
2115     if ($row !== null) {
2116    
2117 fmichon 3892 // Instrance de la classe dossier
2118     $inst_dossier = $this->get_inst_dossier($dossier);
2119    
2120     // Insère l'attribut version à l'objet
2121     $row->version = $inst_dossier->get_dossier_instruction_version();
2122    
2123 mbroquet 3730 //Alors on créé l'objet dossier_instruction
2124     $this->specificMetadata = $row;
2125    
2126     }
2127     }
2128    
2129     /**
2130     *
2131     * @return boolean
2132     */
2133     function is_instructeur(){
2134    
2135     //Si l'utilisateur est un instructeur
2136     if ($this->f->isUserInstructeur()){
2137     return true;
2138     }
2139     return false;
2140     }
2141    
2142     function is_editable(){
2143    
2144     if ($this->f->can_bypass("consultation", "modifier")){
2145     return true;
2146     }
2147    
2148     if ($this->is_dossier_instruction_not_closed()&&$this->is_instructeur_from_division()){
2149     return true;
2150     }
2151     return false;
2152     }
2153    
2154     function is_deletable(){
2155    
2156     if ($this->f->can_bypass("consultation", "supprimer")){
2157     return true;
2158     }
2159    
2160     if ($this->is_dossier_instruction_not_closed()&&$this->is_instructeur_from_division()){
2161     return true;
2162     }
2163     return false;
2164     }
2165    
2166     function is_multiaddable(){
2167    
2168     if ($this->f->can_bypass("consultation", "ajouter")){
2169     return true;
2170     }
2171    
2172     if ($this->is_instructeur_from_division()){
2173     return true;
2174     }
2175     return false;
2176     }
2177    
2178     function is_markable(){
2179    
2180     if($this->f->can_bypass("consultation", "modifier_lu")){
2181     return true;
2182     }
2183    
2184     if ($this->is_instructeur_from_division()){
2185     return true;
2186     }
2187     return false;
2188     }
2189    
2190     function is_finalizable(){
2191    
2192     if($this->f->can_bypass("consultation", "finaliser")){
2193     return true;
2194     }
2195    
2196     if ($this->is_instructeur_from_division() && $this->is_dossier_instruction_not_closed()){
2197     return true;
2198     }
2199    
2200     return false;
2201     }
2202    
2203     function is_unfinalizable(){
2204    
2205     if($this->f->can_bypass("consultation", "definaliser")){
2206     return true;
2207     }
2208    
2209     if ($this->is_instructeur_from_division() && $this->is_dossier_instruction_not_closed()){
2210     return true;
2211     }
2212    
2213     return false;
2214     }
2215 fmichon 3892
2216     /**
2217     * Récupère l'instance du dossier d'instruction
2218     *
2219     * @param mixed Identifiant du dossier d'instruction
2220     *
2221     * @return object
2222     */
2223     function get_inst_dossier($dossier = null) {
2224     //
2225     return $this->get_inst_common("dossier", $dossier);
2226     }
2227    
2228    
2229 mbroquet 3730 }// fin classe
2230     ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26