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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3929 - (hide annotations)
Mon Apr 11 16:33:26 2016 UTC (8 years, 9 months ago) by nmeucci
File size: 95002 byte(s)
suppression de l'évolution "marquer le dossier"

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26