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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3395 - (hide annotations)
Wed Apr 8 10:30:59 2015 UTC (9 years, 9 months ago) by nhaye
File size: 90861 byte(s)
Passage de la classe consultation avec les nouvelles actions

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

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26