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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3484 - (hide annotations)
Wed May 20 14:48:58 2015 UTC (9 years, 8 months ago) by vpihour
File size: 91295 byte(s)
Lors de la suppression des consultations, instructions et commissions, le document finalisé n'était pas supprimé. C'est corrigé.

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

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26