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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26