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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3484 - (show 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 <?php
2 //$Id$
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 * 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 }// fin constructeur
70
71 /**
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
80 // ACTION - 001 - modifier
81 //
82 $this->class_actions[1]["condition"] = array("show_consultation_finaliser_portlet_action",
83 "is_editable");
84
85 // ACTION - 002 - supprimer
86 //
87 $this->class_actions[2]["condition"] = array("show_consultation_finaliser_portlet_action",
88 "is_deletable");
89
90 // ACTION - 040 - ajout_multiple
91 // Ajout de consultattons multiples
92 $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 "condition" => array("is_multiaddable"),
99 );
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 "condition" => array("is_markable",
114 "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 "condition" => array("show_consultation_finaliser_portlet_action",
130 "is_finalizable"),
131 );
132
133 // ACTION - 070 - unfinaliser
134 // Pour qu'un cadre valide l'analyse
135 $this->class_actions[70] = array(
136 "identifier" => "unfinalise",
137 "portlet" => array(
138 "type" => "action-direct",
139 "libelle" => _("Reprendre la redaction du document"),
140 "order" => 70,
141 "class" => "definalise",
142 ),
143 "view" => "formulaire",
144 "method" => "unfinalize",
145 "permission_suffix" => "definaliser",
146 "condition" => array("show_unfinalize_portlet_action",
147 "is_unfinalizable"),
148 );
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 /**
180 * 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 */
185 function is_instructeur_from_division() {
186
187 if ($this->f->isUserInstructeur()
188 && isset($this->f->om_utilisateur["division"])
189 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
190 //
191 return false;
192 }
193 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
203 if($this->f->can_bypass("consultation", "modifier")){
204 return true;
205 }
206
207 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 && $this->val[array_search("lu", $this->champs)]== "t") {
218 return false;
219 }
220 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 }
232 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 }
255 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 $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 $statut = $this->f->getStatutDossier($idxformulaire);
281 if ( $this->f->isUserInstructeur() && $statut == "cloture" ){
282 return false;
283 }
284 }
285 return true;
286 }
287
288 // {{{ Gestion de la confidentialité des données spécifiques
289
290 /**
291 * 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 function getDivisionFromDossier() {
297
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 if (($this->getParameter("maj") == 0 or $this->getParameter("maj") == 40)
312 && ($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 } else {
324 // 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 }
328
329 // 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 }
339
340 /**
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 // 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 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 // Termine le traitement
367 return $this->end_treatment(__METHOD__, false);
368 } else {
369 $this->addToMessage(_("Mise a jour effectue avec succes"));
370 return $this->end_treatment(__METHOD__, true);
371 }
372
373 } else {
374 $this->addToMessage(_("Element deja marque comme lu"));
375 }
376
377 // Termine le traitement
378 return $this->end_treatment(__METHOD__, false);
379 }
380
381 // }}}
382
383 /**
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 // 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 // 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 // Termine le traitement
429 $this->end_treatment(__METHOD__, false);
430 }
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 // Termine le traitement
461 $this->end_treatment(__METHOD__, false);
462 }
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 // Termine le traitement
501 return $this->end_treatment(__METHOD__, true);
502 }
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 "SELECT service.service, service.libelle, service.consultation_papier
607 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 function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){
1025 // ajout du retourformulaire aux attributs de l'objet
1026 $this->retourformulaire = $retourformulaire;
1027 if ($validation==0) {
1028 if ($maj == 0 or $maj == 40){
1029 $form->setVal("dossier", $idxformulaire);
1030 $form->setVal("date_envoi",date('d/m/Y'));
1031 }
1032 if($maj == 1 or $maj == 90 or $maj == 100) {
1033 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 }
1038 }
1039 }
1040
1041 function setVal(&$form, $maj, $validation) {
1042 if($maj == 1 or $maj == 90 or $maj == 100) {
1043 $form->setVal("date_retour",date('d/m/Y'));
1044 }
1045 }
1046
1047 function setvalF($val) {
1048 //
1049 parent::setValF($val);
1050 //
1051 if ($this->getParameter('maj') == 0 or $this->getParameter('maj') == 40) {
1052 //
1053 if (isset($this->valF["date_envoi"])) {
1054 $this->valF["date_reception"] = $this->valF["date_envoi"];
1055 }
1056 //
1057 $this->valF["lu"] = true;
1058 }
1059
1060 // Si un retour d'avis est modifie on passe "lu" a false
1061 if(($this->getParameter('maj')==90 or $this->getParameter('maj')==100 ) and (
1062 $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 $this->val[array_search("fichier",$this->champs)] != $val["fichier"])
1066 ) {
1067 $this->valF["lu"]=false;
1068 }
1069 }
1070
1071 function setLib(&$form, $maj) {
1072 //
1073 parent::setLib($form, $maj);
1074 //
1075 $form->setLib($this->clePrimaire, _("id"));
1076 }
1077
1078 function setType(&$form,$maj) {
1079 // Appel du parent
1080 parent::setType($form,$maj);
1081 $form->setType('dossier', 'hidden');
1082 // 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 $form->setType('date_retour', 'hiddendate');
1088 $form->setType('date_reception', 'hiddendate');
1089 $form->setType('date_limite', 'hiddendate');
1090 $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 $form->setType('dossier_libelle', 'hiddenstatic');
1096 $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 $form->setType('dossier_libelle', 'hiddenstatic');
1105 $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 if($this->getVal("fichier") == "" OR
1127 $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 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 $form->setType('fichier', 'upload2');
1141 } else {
1142 $form->setType('fichier', 'upload');
1143 }
1144 } else {
1145 // Si non on affiche uniquement le nom du fichier
1146 $form->setType('fichier', 'file');
1147 }
1148
1149 }
1150 // Mode supprimer
1151 if ($maj == 2) {
1152 $form->setType('fichier', 'filestatic');
1153 }
1154 // MODE - CONSULTER
1155 if ( $maj == 3 ) {
1156 $form->setType('fichier', 'file');
1157 }
1158 // 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 //// On cache la clé primaire
1199 //$form->setType('consultation', 'hidden');
1200 //
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 $form->setType('dossier_libelle', 'hidden');
1209 }
1210
1211 $form->setType('code_barres', 'hidden');
1212
1213 //Cache les champs pour la finalisation
1214 $form->setType('om_fichier_consultation', 'hidden');
1215 $form->setType('om_final_consultation', 'hidden');
1216
1217 if($maj == 50 or $maj == 60 or $maj == 70) {
1218 foreach ($this->champs as $value) {
1219 $form->setType($value, 'hidden');
1220 }
1221 }
1222 }
1223
1224 // 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 // mise a jour instruction avec evenement [return delay]
1228 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 $this->valF["date_limite"] = $this->f->mois_date($this->valF["date_reception"], $delai);
1237 //
1238 $this->addToMessage(_("delai")." ".
1239 _("retour")." ".$delai." "._("mois")." -> ".
1240 _("retour")." ".date("d/m/Y", strtotime($this->valF["date_limite"])));
1241 }
1242 }
1243
1244 // TRIGGER AVANT MODIFICATION DE DONNEES
1245 // trigger before modification data
1246 function triggerajouter($id,&$db,$val,$DEBUG) {
1247 //
1248 $this->calculDateLimite();
1249
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 }
1256
1257 //
1258 function triggermodifier($id,&$db,$val,$DEBUG) {
1259 //
1260 $this->calculDateLimite();
1261 }
1262
1263 //
1264 function triggerajouterapres($id,&$db,$val,$DEBUG) {
1265
1266 // Verification de la demande de notif par mail
1267 $sql= "SELECT abrege, libelle, notification_email, email FROM ".DB_PREFIXE.
1268 "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 $sql= "SELECT dossier, terrain_adresse_voie_numero, terrain_adresse_voie, terrain_adresse_code_postal, terrain_adresse_localite
1276 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 _("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 _("Vous pouvez y acceder et rendre votre avis a l'adresse")." <a href='".$this->f->getParameter('services_consultes_lien_interne').
1286 // On ajoute l'idx, s'il y a besoin
1287 ((substr($this->f->getParameter('services_consultes_lien_interne'), -5)=="&idx=")?$this->valF['consultation']:"")."'>".
1288 _("Lien interne (services VDM)")."</a> "._("ou")." <a href='".$this->f->getParameter('services_consultes_lien_externe').
1289 // On ajoute l'idx, s'il y a besoin
1290 ((substr($this->f->getParameter('services_consultes_lien_externe'), -5)=="&idx=")?$this->valF['consultation']:"")."'>".
1291 _("Lien externe (hors VDM)")."</a>";
1292 // Envoi du mail avec message de retour
1293 if($this->f->sendMail(iconv("UTF-8", "CP1252", $title), iconv("UTF-8", "CP1252", $corps), iconv("UTF-8", "CP1252", $notif['email']))) {
1294 $this->addToMessage(_("Envoi d'un mail de notification au service")." \"(".$notif['abrege'].") ".$notif["libelle"]."\"");
1295 } else {
1296 $this->addToMessage(_("L'envoi du mail de notification a echoue"));
1297 }
1298 }
1299
1300
1301 // verification si envoi vers ERP est active
1302 if ($this->f->getParameter('option_erp') === 'true') {
1303 // 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 $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 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 $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 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1334 $this->correct = false;
1335 return false;
1336 }
1337 else {
1338 $this->addToMessage(_("Le message a ete transmis au ".
1339 "referentiel ERP."));
1340 }
1341 }
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 $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 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1359 $this->correct = false;
1360 return false;
1361 }
1362 else {
1363 $this->addToMessage(_("Le message a ete transmis au ".
1364 "referentiel ERP."));
1365 }
1366 }
1367 }
1368 } // fin de if($this->f->getParameter('option_erp') === 'true')
1369
1370 // Finalisation du document
1371 $this->finaliserAjouter($id);
1372 }
1373
1374 /**
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 $this->f->addToLog("getDossierERPSpecification(): db->limitquery(\"".
1385 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 // =============================================
1401 // Ajout du fielset
1402 // Add fieldset
1403 // =============================================
1404 function setLayout(&$form, $maj){
1405
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 //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
1418 }
1419
1420 // MODE - autre que AJOUTER alors on affiche un fieldset retour
1421 // d'avis
1422 if ($maj != 0) {
1423
1424 //Champs sur lequel s'ouvre le fieldset
1425 $form->setBloc('date_reception','D',"");
1426 $form->setFieldset('date_reception','D',_('Retour d\'avis'));
1427
1428 //Champs sur lequel se ferme le fieldset
1429 $form->setFieldset('lu','F','');
1430 $form->setBloc('lu','F');
1431
1432 }
1433 }
1434
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 } elseif($this->getParameter("retour")=="suivi_retours_de_consultation") {
1457 echo "../app/suivi_retours_de_consultation.php";
1458 } else {
1459 echo "tab.php?".$params;
1460 }
1461 //
1462 echo "\"";
1463 echo ">";
1464 //
1465 echo _("Retour");
1466 //
1467 echo "</a>\n";
1468 }
1469
1470 /**
1471 * 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
1493 /**
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 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
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 //Seulement dans le cas d'un retour d'avis
1512 if($this->retourformulaire == "demande_avis_encours" or $this->getParameter("maj") == 100 or $this->getParameter("maj") == 90) {
1513 // avis_consultation
1514 $this->init_select($form, $db, 1, $debug, "avis_consultation",
1515 $sql_avis_consultation, $sql_avis_consultation_by_id, true);
1516
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
1529 /**
1530 * Finalisation du document lors de l'ajout d'une consultation.
1531 *
1532 * @param integer $id indentifiant de l'objet
1533 */
1534 function finaliserAjouter($id){
1535
1536 $uid = $this->file_finalizing($id);
1537
1538 //Mise à jour des données
1539 if ( $uid != '' && $uid != 'OP_FAILURE' ){
1540 // Logger
1541 $this->addToLog("finaliserAjouter() - begin", EXTRA_VERBOSE_MODE);
1542
1543 $valF = array(
1544 "om_final_consultation"=> true,
1545 "om_fichier_consultation"=>$uid
1546 );
1547
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 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 // Si une erreur survient
1557 if (database::isError($res, true)) {
1558 $this->correct = false;
1559 // Appel de la methode de recuperation des erreurs
1560 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
1561 return false;
1562 } else {
1563 // Log
1564 $this->addToLog(_("Requete executee"), VERBOSE_MODE);
1565 // Log
1566 $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
1567 $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
1575 /**
1576 * Finalisation du fichier.
1577 *
1578 * @param integer $id indentifiant de l'objet
1579 *
1580 * @return string uid du fichier finalisé
1581 */
1582 function file_finalizing($id){
1583 $pdf = $this->generate_pdf_consultation();
1584
1585 if(isset($this->valF["om_final_consultation"])) {
1586 $finalized = $this->valF["om_final_consultation"];
1587 } else {
1588 $finalized = $this->getVal("om_final_consultation");
1589 }
1590
1591 // Métadonnées du document
1592 $metadata = array(
1593 'filename' => $pdf["filename"],
1594 'mimetype' => 'application/pdf',
1595 'size' => strlen($pdf["pdf_output"])
1596 );
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 $this->getVal("om_fichier_consultation"), $pdf["pdf_output"], $metadata);
1609 }
1610 // Sinon, ajoute le document et récupère son uid
1611 else {
1612
1613 // Stockage du PDF
1614 $uid = $this->f->storage->create($pdf["pdf_output"], $metadata);
1615 }
1616
1617 return $uid;
1618
1619 }
1620
1621
1622 /**
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
1635 // 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 }
1652
1653 /**
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
1666 // 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 }
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 }
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 $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 }
1719 }
1720
1721 //Mise à jour des données
1722 if ($uid != '' && $uid != 'OP_FAILURE') {
1723
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 if($mode=="finalize") {
1748 $valF["om_final_consultation"] = true;
1749 } else {
1750 $valF["om_final_consultation"] = false;
1751 }
1752 $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 $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
1763 // Si une erreur survient
1764 if (database::isError($res, true)) {
1765
1766 // Appel de la methode de recuperation des erreurs
1767 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
1768 $this->correct = false;
1769 return false;
1770 } 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
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 }
1795 //
1796 } else {
1797 $this->correct = false;
1798 $this->msg="";
1799 // Message d'echec (saut d'une ligne supplementaire avant le
1800 // message pour qu'il soit mis en evidence)
1801 $this->addToMessage(_("Finalisation non enregistree"));
1802 $this->addToLog(
1803 _("Finalisation non enregistree")." - ".
1804 _("id consultation")." = ".$id." - ".
1805 _("uid fichier")." = ".$uid
1806 );
1807 return false;
1808 }
1809 }
1810 // Si le document n'a pas été stocké
1811 else{
1812 $this->correct = false;
1813 $this->msg="";
1814 $this->addToMessage(_("Finalisation non enregistree"));
1815 $this->addToLog(
1816 _("Finalisation non enregistree")." - ".
1817 _("id consultation")." = ".$id." - ".
1818 _("uid fichier")." = ".$uid
1819 );
1820 return false;
1821 }
1822 }
1823
1824 /**
1825 * 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 function generate_pdf_consultation() {
1832 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 $pdf_output = $this->compute_pdf_output("etat", $obj, null, $id);
1860
1861 return $pdf_output;
1862 }
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
1871 $output = $this->generate_pdf_consultation();
1872 $this->expose_pdf_output($output["pdf_output"], $output["filename"]);
1873 }
1874 exit();
1875 }
1876 /**
1877 * 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
1884 /**
1885 * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
1886 * @return string numéro de dossier d'instruction
1887 */
1888 protected function getDossier() {
1889 if(empty($this->specificMetadata)) {
1890 $this->getSpecificMetadata();
1891 }
1892 return $this->specificMetadata->dossier;
1893 }
1894 /**
1895 * 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 * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
1906 * @return string numéro de dossier d'autorisation
1907 */
1908 protected function getNumDemandeAutor() {
1909 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 * @return date demande initiale
1917 */
1918 protected function getAnneemoisDemandeAutor() {
1919 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 * @return string type de dossier d'instruction
1927 */
1928 protected function getTypeInstruction() {
1929 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 * @return string avis
1937 */
1938 protected function getStatutAutorisation() {
1939 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 * @return string type d'autorisation
1947 */
1948 protected function getTypeAutorisation() {
1949 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 * @return date de l'évènement
1957 */
1958 protected function getDateEvenementDocument() {
1959 return date("Y-m-d");
1960 }
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 /**
1972 * Récupération du type de document à ajouter aux métadonnées
1973 * @return string Type de document
1974 */
1975 protected function getTitle() {
1976 if ($this->retourformulaire == "demande_avis_encours") {
1977 return 'Retour de consultation';
1978 } else {
1979 return 'Demande de consultation';
1980 }
1981 }
1982
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
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 dossier_autorisation.dossier_autorisation = '".$row->dossier_autorisation."'
2042 AND
2043 dossier_instruction_type.code = '".$row->dossier_instruction_type."'";
2044 $row->version = $this->db->getOne($sql);
2045 $this->f->addToLog("getInfosForFoldername(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
2046 if ( database::isError($row->version)){
2047 $this->f->addToError("", $row->version, $row->version);
2048 return false;
2049 }
2050
2051 //Formatage du numéro de version
2052 $row->version = str_pad($row->version, 2, "0", STR_PAD_LEFT);
2053
2054 //Alors on créé l'objet dossier_instruction
2055 $this->specificMetadata = $row;
2056
2057 }
2058 }
2059
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 if ($this->f->can_bypass("consultation", "modifier")){
2076 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 if ($this->f->can_bypass("consultation", "supprimer")){
2088 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 if ($this->f->can_bypass("consultation", "ajouter")){
2100 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 if($this->f->can_bypass("consultation", "modifier_lu")){
2112 return true;
2113 }
2114
2115 if ($this->is_instructeur_from_division()){
2116 return true;
2117 }
2118 return false;
2119 }
2120
2121 function is_finalizable(){
2122
2123 if($this->f->can_bypass("consultation", "finaliser")){
2124 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 function is_unfinalizable(){
2135
2136 if($this->f->can_bypass("consultation", "definaliser")){
2137 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 }// fin classe
2147 ?>

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26