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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3985 - (hide annotations)
Mon Apr 18 08:27:22 2016 UTC (8 years, 9 months ago) by nmeucci
File size: 95085 byte(s)
* Évolution - Ajout des actions marquer/démarquer le dossier sur les demandes
  d'avis en cours afin de signifier que le service consulté l'a pris en charge.

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26