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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2877 - (show annotations)
Wed Mar 26 11:18:23 2014 UTC (10 years, 10 months ago) by vpihour
File size: 51027 byte(s)
Correction de la gestion des envois des messages aux référentiels
Ajout des tests pour l'envoi des messages par les instructions

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 var $abstract_type = array(
10 "fichier" => "file",
11 );
12
13 var $metadata = array(
14 "om_fichier_consultation" => array(
15 "dossier" => "getDossier",
16 "dossier_version" => "getDossierVersion",
17 "numDemandeAutor" => "getNumDemandeAutor",
18 "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
19 "typeInstruction" => "getTypeInstruction",
20 "statutAutorisation" => "getStatutAutorisation",
21 "typeAutorisation" => "getTypeAutorisation",
22 "dateEvenementDocument" => "getDateEvenementDocument",
23 "groupeInstruction" => 'getGroupeInstruction',
24 "title" => 'getTitle',
25 ),
26 "fichier" => array(
27 "dossier" => "getDossier",
28 "dossier_version" => "getDossierVersion",
29 "numDemandeAutor" => "getNumDemandeAutor",
30 "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
31 "typeInstruction" => "getTypeInstruction",
32 "statutAutorisation" => "getStatutAutorisation",
33 "typeAutorisation" => "getTypeAutorisation",
34 "dateEvenementDocument" => "getDateEvenementDocument",
35 "groupeInstruction" => 'getGroupeInstruction',
36 "title" => 'getTitle',
37 ),
38 );
39
40 function consultation($id,&$db,$debug) {
41 $this->constructeur($id,$db,$debug);
42 }// fin constructeur
43
44 // {{{ Gestion de la confidentialité des données spécifiques
45
46 /**
47 * Surcharge pour gérer les actions disponibles dans le portlet
48 */
49 function checkAccessibility() {
50 //
51 parent::checkAccessibility();
52 // Si l'utilisateur est un intructeur qui en correspond pas à la
53 // division du dossier
54 if ($this->f->isUserInstructeur()
55 && isset($this->f->om_utilisateur["division"])
56 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
57 //
58 $this->parameters["actions"]["modifier"] = NULL;
59 $this->parameters["actions"]["supprimer"] = NULL;
60 $this->actions_sup["finalisation"] = NULL;
61 $this->actions_sup["definalisation"] = NULL;
62 $this->actions_sup["lu"] = NULL;
63 }
64 // Si une action 'lu' est présente et que le champ lu est à true
65 // on supprime l'action
66 if (isset($this->actions_sup["lu"])
67 && isset($this->val[array_search("lu", $this->champs)])
68 && $this->val[array_search("lu", $this->champs)]== "t") {
69 unset($this->actions_sup["lu"]);
70 }
71
72 //Si le document est déjà finalisé, le lien de l'édition est celui du stockage
73 $om_final_consultation = $this->getVal("om_final_consultation");
74 if ( $om_final_consultation== "t" ){
75
76 //On affiche le bon lien pour l'édition
77 $this->actions_sup["pdfetat"]["lien"] = "../spg/file.php?id=";
78 $this->actions_sup["pdfetat"]["id"] =
79 "&amp;obj=consultation&amp;champ=om_fichier_consultation";
80 //On cache les liens d'action
81 $this->parameters["actions"]["modifier"] = NULL;
82 $this->parameters["actions"]["supprimer"] = NULL;
83 $this->actions_sup["finalisation"] = NULL;
84 }
85 //Si le document n'est pas finalisé, le lien de l'édition est le lien de
86 //génération à la volée
87 if ( $om_final_consultation!= "t" ){
88
89 //On affiche le bon lien pour l'édition
90 $this->actions_sup["pdfetat"]["lien"] = "../app/pdf_consultation.php?idx=";
91 $this->actions_sup["pdfetat"]["id"] = "&obj=consultation";
92 $this->actions_sup["definalisation"] = NULL;
93 if( $this->f->isUserInstructeur() ){
94 $this->parameters["actions"]["modifier"] = NULL;
95 }
96 }
97
98 $idxformulaire = $this->getParameter("idxformulaire");
99 $retourformulaire = $this->getParameter("retourformulaire");
100 //Si le dossier d'instruction auquel est rattachée la consultation est
101 //cloturé, on affiche pas les liens du portlet
102 if ( $idxformulaire != '' &&
103 (
104 $retourformulaire == 'dossier' ||
105 $retourformulaire == 'dossier_instruction' ||
106 $retourformulaire == 'dossier_instruction_mes_encours' ||
107 $retourformulaire == 'dossier_instruction_tous_encours' ||
108 $retourformulaire == 'dossier_instruction_mes_clotures' ||
109 $retourformulaire == 'dossier_instruction_tous_clotures'
110 )){
111
112 //On récuppère le statut du dossier d'instruction
113 $statut = $this->f->getStatutDossier($idxformulaire);
114 if ( $this->f->isUserInstructeur() && $statut == "cloture" ){
115
116 //On cache le lien de modification
117 $this->parameters["actions"]["modifier"] = NULL;
118 $this->parameters["actions"]["supprimer"] = NULL;
119 $this->actions_sup["finalisation"] = NULL;
120 $this->actions_sup["definalisation"] = NULL;
121 $this->actions_sup["lu"] = NULL;
122 }
123 }
124 }
125
126 /**
127 * Cette methode est à surcharger elle permet de tester dans chaque classe
128 * des droits des droits spécifiques en fonction des données
129 */
130 function canAccess() {
131 // Si l'utilisateur est un utilisateur de service externe
132 // on vérifie qu'il peut accéder à la consultation
133 if ($this->f->isUserService()) {
134 // On compare l'id du service de la consultation
135 // aux id des services de utilisateur connecté
136 foreach($this->f->om_utilisateur['service'] as $service) {
137 if($this->val[array_search("service",$this->champs)]===$service['service']) {
138 return true;
139 }
140 }
141 //
142 $this->f->addToLog("canAccess(): utilisateur de service sur une consultation d'un autre service", EXTRA_VERBOSE_MODE);
143 return false;
144 }
145 // Si l'utilisateur est un intructeur qui ne correspond pas à la
146 // division du dossier
147 if ($this->f->isUserInstructeur()
148 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
149 && $this->getParameter("maj") != 3) {
150 //
151 $this->f->addToLog("canAccess(): utilisateur instructeur sur un dossier d'une autre division", EXTRA_VERBOSE_MODE);
152 return false;
153 }
154
155 $retourformulaire = $this->getParameter("retourformulaire");
156 // Si l'utilisateur est un instructeur et que le dossier est cloturé
157 if ( $this->f->isUserInstructeur() &&
158 $this->f->getStatutDossier($this->getParameter("idxformulaire")) == "cloture" &&
159 (
160 $retourformulaire == 'dossier' ||
161 $retourformulaire == 'dossier_instruction' ||
162 $retourformulaire == 'dossier_instruction_mes_encours' ||
163 $retourformulaire == 'dossier_instruction_tous_encours' ||
164 $retourformulaire == 'dossier_instruction_mes_clotures' ||
165 $retourformulaire == 'dossier_instruction_tous_clotures'
166 ) &&
167 $this->getParameter("maj") != 3) {
168
169 return false;
170 }
171 //
172 return true;
173 }
174
175 /**
176 * Cette variable permet de stocker le résultat de la méthode
177 * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
178 * ces appels.
179 * @var string Code de la division du dossier en cours
180 */
181 var $_division_from_dossier = NULL;
182
183 /**
184 * Cette méthode permet de récupérer le code de division correspondant
185 * au dossier sur lequel on se trouve.
186 *
187 * @return string Code de la division du dossier en cours
188 */
189 function getDivisionFromDossier() {
190
191 // Cette méthode peut être appelée plusieurs fois lors d'une requête.
192 // Pour éviter de refaire le traitement de recherche de la division
193 // alors on vérifie si nous ne l'avons pas déjà calculé.
194 if ($this->_division_from_dossier != NULL) {
195 // Logger
196 $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
197 // On retourne la valeur déjà calculée
198 return $this->_division_from_dossier;
199 }
200
201 // Par défaut, on définit la valeur du dossier à NULL
202 $dossier = NULL;
203 // Test sur le mode et le contexte du formulaire
204 if ($this->getParameter("maj") == 0
205 && ($this->getParameter("retourformulaire") == "dossier"
206 || $this->getParameter("retourformulaire") == "dossier_instruction"
207 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
208 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
209 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
210 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures")) {
211 // Si on se trouve en mode AJOUT (seul mode où l'enregistrement
212 // n'existe pas en base de données) ET que nous nous trouvons
213 // dans le contexte d'un dossier d'instruction alors on récupère
214 // le numéro de dossier depuis le paramètre 'idxformulaire'
215 $dossier = $this->getParameter("idxformulaire");
216 } else {
217 // Sinon on récupère le numéro de dossier dans le champs dossier de
218 // l'enregistrement (en base de données)
219 $dossier = $this->getVal("dossier");
220 }
221
222 // On appelle la méthode de la classe utils qui renvoi le code de la
223 // division d'un dossier, on la stocke pour ne pas refaire le calcul au
224 // prochain appel de cette méthode
225 $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
226 // Logger
227 $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
228 // On retourne la valeur retournée
229 return $this->_division_from_dossier;
230
231 }
232
233 // }}}
234
235 function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){
236 // ajout du retourformulaire aux attributs de l'objet
237 $this->retourformulaire = $retourformulaire;
238 if ($validation==0) {
239 if ($maj == 0){
240 $form->setVal("dossier", $idxformulaire);
241 $form->setVal("date_envoi",date('d/m/Y'));
242 }
243 if($maj == 1) {
244 if($this->f->isAccredited('consultation_retour_avis_suivi') OR
245 $this->f->isAccredited('consultation_retour_avis_service')) {
246 $form->setVal("date_retour",date('d/m/Y'));
247 }
248 }
249 }
250 }
251
252 function setVal(&$form, $maj, $validation, &$db) {
253 if($maj == 1) {
254 $form->setVal("date_retour",date('d/m/Y'));
255 }
256 }
257
258 function setvalF($val) {
259 //
260 parent::setValF($val);
261 //
262 if ($this->getParameter('maj') == 0) {
263 //
264 if (isset($this->valF["date_envoi"])) {
265 $this->valF["date_reception"] = $this->valF["date_envoi"];
266 }
267 //
268 $this->valF["lu"] = true;
269 }
270
271 // Si un retour d'avis est modifie on passe "lu" a false
272 if($this->getParameter('maj')==1 AND (
273 $this->val[array_search("avis_consultation",$this->champs)] != $val["avis_consultation"] OR
274 $this->val[array_search("date_retour",$this->champs)] != $val["date_retour"] OR
275 $this->val[array_search("motivation",$this->champs)] != $val["motivation"] OR
276 $this->val[array_search("fichier",$this->champs)] != $val["fichier"])
277 ) {
278 $this->valF["lu"]=false;
279 }
280 }
281
282 function setLib(&$form, $maj) {
283 //
284 parent::setLib($form, $maj);
285 //
286 $form->setLib($this->clePrimaire, _("id"));
287 }
288
289 function setType(&$form,$maj) {
290 // Appel du parent
291 parent::setType($form,$maj);
292 $form->setType('dossier', 'hidden');
293 // MODE - AJOUTER
294 if ($maj == 0) {
295 // On cache alors tous les champs que nous ne voulons pas voir
296 // apparaître dans le formulaire d'ajout (principalement les
297 // informations sur le retour d'avis)
298 $form->setType('date_retour', 'hiddendate');
299 $form->setType('date_reception', 'hiddendate');
300 $form->setType('date_limite', 'hiddendate');
301 $form->setType('avis_consultation', 'hidden');
302 $form->setType('motivation', 'hidden');
303 $form->setType('fichier', 'hidden');
304 $form->setType('lu', 'hidden');
305 // On permet la modification de certains champs
306 $form->setType('dossier_libelle', 'hiddenstatic');
307 $form->setType('service', 'select');
308 $form->setType('date_envoi', 'date2');
309 }
310 // MODE - MODIFIER
311 if ($maj == 1) {
312
313 // On affiche en statique les informations qui ne sont plus
314 // modifiables
315 $form->setType('dossier_libelle', 'hiddenstatic');
316 $form->setType('date_envoi', 'hiddenstaticdate');
317 $form->setType('date_limite', 'hiddenstaticdate');
318 $form->setType('service', 'selecthiddenstatic');
319
320 // La date de réception ne peut être modifiée que par un
321 // utilisateur en ayant spécifiquement la permission
322 if($this->f->isAccredited('consultation_modifier_date_reception')) {
323 $form->setType('date_reception', 'date2');
324 } else {
325 $form->setType('date_reception', 'hiddenstaticdate');
326 }
327
328 // Le marqueur lu/non lu ne peut être modifié que par un
329 // utilisateur en ayant spécifiquement la permission
330 if ($this->f->isAccredited('consultation_modifier_lu')) {
331 $form->setType('lu', 'checkbox');
332 } else {
333 $form->setType('lu', 'hidden');
334 }
335
336 // Gestion du type du widget sur le champ fichier
337 if($this->getVal("fichier") == "" OR
338 $this->f->isAccredited('consultation_modifier_fichier')) {
339 // Si il n'y a jamais eu de fichier enregistré ou que
340 // l'utilisateur a spécifiquement les droits pour modifier
341 // un fichier déjà enregistré alors on positionne un type
342 // de widget modifiable
343 if($this->retourformulaire == "demande_avis_encours") {
344 $form->setType('fichier', 'upload2');
345 } else {
346 $form->setType('fichier', 'upload');
347 }
348 } else {
349 // Si non on affiche uniquement le nom du fichier
350 $form->setType('fichier', 'file');
351 }
352
353 // Modification layout : écran de retour d'avis permettant
354 // uniquement la saisie des trois champs : avis, motivation et fichier
355 if (!$this->f->isAccredited('consultation_consulter_autre_que_retour_avis')) {
356
357 // On cache alors tous les champs que nous ne voulons pas voir
358 $form->setType('dossier_libelle', 'hidden');
359 $form->setType('service', 'hidden');
360 $form->setType('date_envoi', 'hiddendate');
361 $form->setType('date_retour', 'hiddendate');
362 $form->setType('date_reception', 'hiddendate');
363 $form->setType('date_limite', 'hiddendate');
364 $form->setType('lu', 'hidden');
365
366 }
367
368 }
369 // Mode supprimer
370 if ($maj == 2) {
371 $form->setType('fichier', 'filestatic');
372 }
373 // MODE - CONSULTER
374 if ( $maj == 3 ) {
375 $form->setType('fichier', 'file');
376 }
377 //// On cache la clé primaire
378 //$form->setType('consultation', 'hidden');
379 //
380 if ($this->getParameter("retourformulaire") == "dossier"
381 || $this->getParameter("retourformulaire") == "dossier_instruction"
382 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
383 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
384 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
385 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures") {
386 //
387 $form->setType('dossier_libelle', 'hidden');
388 }
389
390 $form->setType('code_barres', 'hidden');
391
392 //Cache les champs pour la finalisation
393 $form->setType('om_fichier_consultation', 'hidden');
394 $form->setType('om_final_consultation', 'hidden');
395 }
396
397 // Cette méthode permet de calculer la date limite en fonction de la date
398 // de réception et du délai de consultation du service consulté
399 function calculDateLimite() {
400 // mise a jour instruction avec evenement [return delay]
401 if ($this->valF["date_reception"] != "") {
402 //
403 $sql = " select delai from ".DB_PREFIXE."service ";
404 $sql .= " where service='".$this->valF["service"]."' ";
405 //
406 $delai = $this->db->getOne($sql);
407 $this->addToLog("triggerajouter(): db->getone(\"".$sql."\")", VERBOSE_MODE);
408 //
409 $this->valF["date_limite"] = $this->f->mois_date($this->valF["date_reception"], $delai);
410 //
411 $this->addToMessage(_("delai")." ".
412 _("retour")." ".$delai." "._("mois")." -> ".
413 _("retour")." ".date("d/m/Y", strtotime($this->valF["date_limite"])));
414 }
415 }
416
417 // TRIGGER AVANT MODIFICATION DE DONNEES
418 // trigger before modification data
419 function triggerajouter($id,&$db,$val,$DEBUG) {
420 //
421 $this->calculDateLimite();
422
423 // Identifiant du type de courrier
424 $idTypeCourrier = '12';
425 $idCourrier = str_pad($this->valF["consultation"], 10, "0", STR_PAD_LEFT);
426 // Code barres
427 $this->valF["code_barres"] = $idTypeCourrier . $idCourrier;
428 }
429
430 //
431 function triggermodifier($id,&$db,$val,$DEBUG) {
432 //
433 $this->calculDateLimite();
434 }
435
436 //
437 function triggerajouterapres($id,&$db,$val,$DEBUG) {
438
439 // Verification de la demande de notif par mail
440 $sql= "SELECT abrege, libelle, notification_email, email FROM ".DB_PREFIXE.
441 "service WHERE service ='".$this->valF['service']."'";
442 $res=$db->query($sql);
443 $notif = $res->fetchrow(DB_FETCHMODE_ASSOC);
444 if (database :: isError($sql))die($res->getMessage()."erreur ".$sql);
445 if ($notif['notification_email']=='t') {
446
447 // Recuperation des infos du dossier
448 $sql= "SELECT dossier, terrain_adresse_voie_numero, terrain_adresse_voie, terrain_adresse_code_postal, terrain_adresse_localite
449 FROM ".DB_PREFIXE."dossier WHERE dossier ='".$this->valF['dossier']."'";
450 $res=$db->query($sql);
451 $dossier = $res->fetchrow(DB_FETCHMODE_ASSOC);
452
453 // Definition des parametres d'envoi du mail
454 $title=_("Consultation de services : dossier no")." ".$dossier['dossier'];
455 $corps=_("Votre service est consulte concernant le dossier no")." ".$dossier['dossier']."<br/>".
456 _("Il concerne le terrain situe a l'adresse :")." ".$dossier['terrain_adresse_voie_numero'].
457 " ".$dossier['terrain_adresse_voie']." ".$dossier['terrain_adresse_code_postal']." ".$dossier['terrain_adresse_localite']."<br/>".
458 _("Vous pouvez y acceder et rendre votre avis a l'adresse")." <a href='".$this->f->getParameter('services_consultes_lien_interne').
459 "scr/form.php?obj=consultation&action=3&idx=".$this->valF['consultation']."' >".
460 _("Lien interne (services VDM)")."</a> "._("ou")." <a href='".$this->f->getParameter('services_consultes_lien_externe').
461 "scr/form.php?obj=consultation&action=3&idx=".$this->valF['consultation']."' >".
462 _("Lien externe (hors VDM)")."</a>";
463 // Envoi du mail avec message de retour
464 if($this->f->sendMail(iconv("UTF-8", "CP1252", $title), iconv("UTF-8", "CP1252", $corps), iconv("UTF-8", "CP1252", $notif['email']))) {
465 $this->addToMessage(_("Envoi d'un mail de notification au service")." \"(".$notif['abrege'].") ".$notif["libelle"]."\"");
466 } else {
467 $this->addToMessage(_("L'envoi du mail de notification a echoue"));
468 }
469 }
470
471
472 // verification si envoi vers ERP est active
473 if ($this->f->getParameter('option_erp') != "") {
474 // s'il s'agit de la consultation ERP Secu, ERP Accessibilite, ou
475 // deenvoie un
476 // message a ERP
477 $dossier_erp = $this->getFromDB("SELECT erp FROM ".DB_PREFIXE.
478 "dossier WHERE dossier = '" .$this->valF['dossier'] . "'");
479 $dossier_nature = $this->getFromDB("SELECT dossier_autorisation_type_detaille.code FROM ".DB_PREFIXE.
480 "dossier
481 INNER JOIN ".DB_PREFIXE."dossier_autorisation
482 ON dossier.dossier_autorisation=dossier_autorisation.dossier_autorisation
483 INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
484 ON dossier_autorisation.dossier_autorisation_type_detaille
485 = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
486 WHERE dossier = '" . $this->valF['dossier'] . "'");
487 if ($dossier_erp == 't'
488 && substr($dossier_nature, 0, 2) == $this->f->getParameter('erp_dossier_nature_pc')) {
489 // envoi du message "Demande d'instruction d'un dossier PC pour un ERP"
490 if (($this->valF['service'] == $this->f->getParameter('erp_service_accessibilite')
491 || $this->valF['service'] == $this->f->getParameter('erp_service_securite'))) {
492 $msgenque = new MessageEnqueuer();
493 $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
494 $msgenque->setConsultationIdentifier($this->valF['consultation']);
495 $return = $msgenque->enqueueMessage($msgenque::$ERP_DEMANDE_INSTRUCTION_PC);
496 //Si une erreur s'est produite on arrête le traitement et on
497 //retourne une erreur
498 if ($return !== 0){
499
500 $this->addToMessage(_("Une erreur s'est produite lors de ".
501 "l'envoi du message au referentiel ERP. Merci de ".
502 "contacter votre administrateur"));
503 //On ne valide pas le formulaire
504 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
505 $this->correct = false;
506 return false;
507 }
508 else {
509 $this->addToMessage(_("Le message a ete transmis au ".
510 "referentiel ERP."));
511 }
512 }
513
514 // envoi du message "Consultation ERP pour conformite" en cas de creation de la
515 // consultation du service ERP Conformite
516 if ($this->valF['service'] == $this->f->getParameter('erp_service_conformite')) {
517 $msgenque = new MessageEnqueuer();
518 $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
519 $msgenque->setConsultationIdentifier($this->valF['consultation']);
520 $return = $msgenque->enqueueMessage($msgenque::$ERP_CONSULTATION_CONFORMITE);
521 //Si une erreur s'est produite on arrête le traitement et on
522 //retourne une erreur
523 if ($return !== 0){
524
525 $this->addToMessage(_("Une erreur s'est produite lors de ".
526 "l'envoi du message au referentiel ERP. Merci de ".
527 "contacter votre administrateur"));
528 //On ne valide pas le formulaire
529 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
530 $this->correct = false;
531 return false;
532 }
533 else {
534 $this->addToMessage(_("Le message a ete transmis au ".
535 "referentiel ERP."));
536 }
537 }
538 }
539 } // fin de if($this->f->getParameter('option_erp'))
540
541 // Finalisation du document
542 $this->finaliserAjouter();
543 }
544
545 /**
546 * Fait une requette sql pour extraire la valeur d'un champ, et retourne
547 * cette valeur
548 * @param string $sql La requete sql a executer
549 * @return La valeur du champs cherche, sinon NULL. En cas d'erreur de la BD
550 * l'execution s'arrete.
551 */
552 function getFromDB($sql) {
553 //$sql = "SELECT libelle FROM ".DB_PREFIXE."dossier WHERE dossier = '" . $dossier . "'";
554 $res = $this->db->limitquery($sql, 0, 1);
555 $this->f->addToLog("getDossierERPSpecification(): db->limitquery(\"".
556 str_replace(",",", ",$sql)."\", 0, 1);", VERBOSE_MODE);
557 // Si une erreur survient on die
558 if (database::isError($res, true)) {
559 // Appel de la methode de recuperation des erreurs
560 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), 'instruction');
561 }
562 // retourne la nature du dossier
563 while ($row =& $res->fetchRow()) {
564 return $row[0];
565 }
566 // la nature n'etait pas trouve, ce qui ne devrait pas se passer
567 return NULL;
568
569 }
570
571 // =============================================
572 // Ajout du fielset
573 // Add fieldset
574 // =============================================
575 function setLayout(&$form, $maj){
576
577 // Modification layout : écran de retour d'avis permettant
578 // uniquement la saisie des trois champs : avis, motivation et fichier
579 if ($this->f->isAccredited('consultation_consulter_autre_que_retour_avis')) {
580
581 //Champs sur lequel s'ouvre le fieldset
582 $form->setBloc('dossier','D',"");
583 $form->setFieldset('dossier','D',_('Consultation'));
584
585 //Champs sur lequel se ferme le fieldset
586 $form->setFieldset('date_envoi','F','');
587 $form->setBloc('date_envoi','F');
588
589 }
590
591 // MODE - autre que AJOUTER alors on affiche un fieldset retour
592 // d'avis
593 if ($maj != 0) {
594
595 //Champs sur lequel s'ouvre le fieldset
596 $form->setBloc('date_reception','D',"");
597 $form->setFieldset('date_reception','D',_('Retour d\'avis'));
598
599 //Champs sur lequel se ferme le fieldset
600 $form->setFieldset('lu','F','');
601 $form->setBloc('lu','F');
602
603 }
604 }
605
606 /** Surcharge de la methode retour afin de retourner sur la page de saisie de
607 * code barre si besoin
608 **/
609 function retour($premier = 0, $recherche = "", $tricol = "") {
610 $params ="obj=".get_class($this);
611 if($this->getParameter("retour")=="form") {
612 $params .= "&amp;idx=".$this->getParameter("idx");
613 $params .= "&amp;action=3";
614 }
615 $params .= "&amp;premier=".$this->getParameter("premier");
616 $params .= "&amp;tricol=".$this->getParameter("tricol");
617 $params .= "&amp;recherche=".$this->getParameter("recherche");
618 $params .= "&amp;selectioncol=".$this->getParameter("selectioncol");
619 $params .= "&amp;advs_id=".$this->getParameter("advs_id");
620 $params .= "&amp;valide=".$this->getParameter("valide");
621 echo "\n<a class=\"retour\" ";
622 echo "href=\"";
623 //
624
625 if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
626 echo "form.php?".$params;
627 } elseif($this->getParameter("retour")=="suivi_retours_de_consultation") {
628 echo "../app/suivi_retours_de_consultation.php";
629 } else {
630 echo "tab.php?".$params;
631 }
632 //
633 echo "\"";
634 echo ">";
635 //
636 echo _("Retour");
637 //
638 echo "</a>\n";
639 }
640
641 /**
642 * Surcharge du bouton retour pour popup
643 */
644 function retoursousformulaire($idxformulaire, $retourformulaire, $val,
645 $objsf, $premiersf, $tricolsf, $validation,
646 $idx, $maj, $retour) {
647 if($retourformulaire === "demande_avis_encours") {
648 echo "\n<a class=\"retour\" ";
649 echo "href=\"";
650 echo "#";
651 echo "\" ";
652 echo ">";
653 //
654 echo _("Retour");
655 //
656 echo "</a>\n";
657 } else {
658 parent::retoursousformulaire($idxformulaire, $retourformulaire, $val,
659 $objsf, $premiersf, $tricolsf, $validation,
660 $idx, $maj, $retour);
661 }
662 }
663
664 /**
665 * Ajout des contraintes spécifiques pour l'ajout d'un fichier en retour de
666 * consultation
667 */
668 function setSelect(&$form, $maj,&$db,$debug) {
669 if(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc.php"))
670 include ("../sql/".$db->phptype."/".$this->table.".form.inc.php");
671 elseif(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc"))
672 include ("../sql/".$db->phptype."/".$this->table.".form.inc");
673
674 // avis_consultation
675 $this->init_select($form, $db, $maj, $debug, "avis_consultation",
676 $sql_avis_consultation, $sql_avis_consultation_by_id, true);
677
678 // service
679 $this->init_select($form, $db, $maj, $debug, "service",
680 $sql_service, $sql_service_by_id, true);
681
682 //Seulement dans le cas d'un retour d'avis
683 if($this->retourformulaire == "demande_avis_encours") {
684
685 //Tableau des contraintes spécifiques
686 $params = array(
687 "constraint" => array(
688 "size_max" => 2,
689 "extension" => ".pdf"
690 ),
691 );
692
693 $form->setSelect("fichier", $params);
694 }
695 }
696
697 /**
698 * Finalisation du document lors de l'ajout d'une consultation
699 */
700 function finaliserAjouter(){
701
702 //Génération du PDF
703 $_GET['output'] = "string";
704 $_GET['obj'] = "consultation";
705 $_GET['idx'] = $this->valF[$this->clePrimaire];
706 $f = $this->f;
707 include '../app/pdf_consultation.php';
708
709 //Métadonnées du document
710 $metadata = array(
711 'filename' => 'consultation_'.$idx.'.pdf',
712 'mimetype' => 'application/pdf',
713 'size' => strlen($pdf_output)
714 );
715
716 // Récupération des métadonnées calculées après validation
717 $spe_metadata = $this->getMetadata("om_fichier_consultation");
718
719 $metadata = array_merge($metadata, $spe_metadata);
720
721 //On ajoute le document et on récupère son uid
722 $uid = $this->f->storage->create($pdf_output, $metadata);
723
724 //Mise à jour des données
725 if ( $uid != '' && $uid != 'OP_FAILURE' ){
726 // Logger
727 $this->addToLog("finaliserAjouter() - begin", EXTRA_VERBOSE_MODE);
728
729 $valF = array(
730 "om_final_consultation"=> TRUE,
731 "om_fichier_consultation"=>$uid);
732
733 // Execution de la requête de modification des donnees de l'attribut
734 // valF de l'objet dans l'attribut table de l'objet
735 $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF,
736 DB_AUTOQUERY_UPDATE, $this->getCle($idx));
737 $this->addToLog("finaliserAjouter() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($idx)."\")", VERBOSE_MODE);
738 // Si une erreur survient
739 if (database::isError($res)) {
740 // Appel de la methode de recuperation des erreurs
741 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
742 } else {
743 // Log
744 $this->addToLog(_("Requete executee"), VERBOSE_MODE);
745 // Log
746 $message = _("Enregistrement")."&nbsp;".$idx."&nbsp;";
747 $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
748 $message .= "[&nbsp;".$this->db->affectedRows()."&nbsp;";
749 $message .= _("enregistrement(s) mis a jour")."&nbsp;]";
750 $this->addToLog($message, VERBOSE_MODE);
751 }
752 }
753 }
754
755 /**
756 * Finalisation des documents.
757 * @param string $champ champ du fichier à finaliser
758 * @param booleen $status permet de définir si on finalise ou définalise
759 * @param string $sousform permet de savoir si se trouve dans un sousformulaire (passé au javascript)
760 */
761 function finaliser($champ = '', $status, $sousform, $retourformulaire) {
762
763 // Si on finalise le document
764 if ($status == 1) {
765
766 // Génération du PDF
767 $_GET['output'] = "string";
768 $f = $this->f;
769 include '../app/pdf_consultation.php';
770
771 // Métadonnées du document
772 $metadata = array(
773 'filename' => 'consultation_'.$idx.'.pdf',
774 'mimetype' => 'application/pdf',
775 'size' => strlen($pdf_output)
776 );
777
778 // Récupération des métadonnées calculées après validation
779 $spe_metadata = $this->getMetadata("om_fichier_consultation");
780
781 $metadata = array_merge($metadata, $spe_metadata);
782
783 // Si le document a déjà été finalisé
784 if ( $this->getVal("om_fichier_consultation") != '' ){
785
786 // Met à jour le document mais pas son uid
787 $uid = $this->f->storage->update(
788 $this->getVal("om_fichier_consultation"), $pdf_output, $metadata);
789 }
790 // Sinon, ajoute le document et récupère son uid
791 else {
792
793 // Stockage du PDF
794 $uid = $this->f->storage->create($pdf_output, $metadata);
795 }
796
797 }
798 //
799 else {
800
801 //Récupération de l'uid du document finalisé
802 $uid = $this->getVal("om_fichier_consultation");
803
804 //On dé-finalise avant de finaliser
805 if ( $uid == '' || $uid == 'OP_FAILURE' ){
806 return -1;
807 }
808 }
809
810 //Mise à jour des données
811 if ($uid != '' && $uid != 'OP_FAILURE') {
812
813 // Logger
814 $this->addToLog("finaliser() - begin", EXTRA_VERBOSE_MODE);
815
816 // Recuperation de la valeur de la cle primaire de l'objet
817 if ($this->getVal($this->clePrimaire) != '') {
818 //
819 $id = $this->getVal($this->clePrimaire);
820 }
821 else {
822 //
823 $id=$this->id;
824 }
825
826 $actions = array();
827
828 // Tableau contenant le lien vers le PDF et lien du portlet pour la
829 // mise à jour de l'interface
830 if ($status == 0) {
831
832 // Lien pour ouvrir le PDF
833 $lien = '../app/pdf_consultation.php?idx='.$id;
834
835 //
836 if ($this->f->isAccredited('consultation') ||
837 $this->f->isAccredited('consultation_modifier')) {
838
839 $actions["modifier"] = ($sousform!='')?
840 '<li><a href="#" onclick="ajaxIt(\'consultation\',
841 \'../scr/sousform.php?obj=consultation&amp;action=1&amp;idx='.
842 $this->getVal($this->clePrimaire).
843 '&amp;premiersf=0&amp;trisf=&amp;retourformulaire='.$retourformulaire.'&amp;idxformulaire='.
844 $this->getVal("dossier").
845 '&amp;retour=form\');">
846 <span class="om-prev-icon om-icon-16 edit-16" title="'.
847 _('Modifier').'">'.
848 _('Modifier').
849 '</span></a></li>':
850 '<li>
851 <a href="form.php?obj=consultation&amp;action=1'.'&amp;idx='.
852 $this->getVal($this->clePrimaire).
853 '&amp;premier=&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=form">
854 <span class="om-prev-icon om-icon-16 edit-16" title="'.
855 _('Modifier').'">'.
856 _('Modifier').
857 '</span></a></li>';
858 }
859
860 //Si l'utilisateur a le droit de supprimer l'objet
861 if ( $this->f->isAccredited('consultation') ||
862 $this->f->isAccredited('consultation_supprimer') ){
863
864 $actions["supprimer"] = ($sousform!='')?
865 '<li><a href="#" onclick="ajaxIt(\'consultation\',
866 \'../scr/sousform.php?obj=consultation&amp;action=2&amp;idx='.
867 $this->getVal($this->clePrimaire).
868 '&amp;premiersf=0&amp;trisf=&amp;retourformulaire='.$retourformulaire.'&amp;idxformulaire='.
869 $this->getVal("dossier").
870 '&amp;retour=form\');">
871 <span class="om-prev-icon om-icon-16 delete-16" title="'.
872 _('Supprimer').'">'.
873 _('Supprimer').
874 '</span></a></li>':
875 '<li>
876 <a href="form.php?obj=consultation&amp;action=1'.'&amp;idx='.
877 $this->getVal($this->clePrimaire).
878 '&amp;premier=&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=form">
879 <span class="om-prev-icon om-icon-16 delete-16" title="'.
880 _('Supprimer').'">'.
881 _('Supprimer').
882 '</span></a></li>';
883 }
884 }
885 else {
886
887 // Lien permettant d'afficher le PDF
888 $lien = '../spg/file.php?obj=consultation&'.
889 'champ=om_fichier_consultation&id='.$id;
890 }
891
892 //
893 $retour = array(
894 "portlet"=> "<a href=\"#\" onclick=\"finalizeDocument(".
895 $id.", 'consultation', '".$sousform."', ".(($status==0)?1:0).")\">
896 <span class=\"om-prev-icon om-icon-16 om-icon-fix "
897 .(($status==1)?"de":"")."finalise\" title=\"".
898 (($status==1)?_("Reprendre la redaction du document"):_("Finaliser le document"))."\">".
899 (($status==1)?_("Reprendre la redaction du document"):_("Finaliser le document"))."</span>
900 </a>",
901 "pdf" => $lien,
902 "actions" => $actions
903 );
904
905 foreach ($this->champs as $key => $value) {
906 //
907 $val[$value] = $this->val[$key];
908 }
909
910 $this->setvalF($val);
911
912 // Verification de la validite des donnees
913 $this->verifier($this->val, $this->db, DEBUG);
914 // Verification du verrou
915 $this->testverrou();
916 // Si les verifications precedentes sont correctes, on procede a
917 // la modification, sinon on ne fait rien et on retourne une erreur
918 if ($this->correct) {
919
920 // Execution du trigger 'before' specifique au MODE 'update'
921 $this->triggermodifier( $id, $this->db, $this->val, DEBUG);
922
923 //
924 $valF = '';
925 $valF["om_final_consultation"] = ($status==1)?TRUE:FALSE;
926 $valF["om_fichier_consultation"] = $uid;
927
928 // Execution de la requête de modification des donnees de l'attribut
929 // valF de l'objet dans l'attribut table de l'objet
930 $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF,
931 DB_AUTOQUERY_UPDATE, $this->getCle($id));
932 $this->addToLog("finaliser() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id)."\")", VERBOSE_MODE);
933
934 // Si une erreur survient
935 if (database::isError($res)) {
936
937 // Appel de la methode de recuperation des erreurs
938 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
939 } else {
940
941 // Log
942 $this->addToLog(_("Requete executee"), VERBOSE_MODE);
943 // Log
944 $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
945 $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
946 $message .= "[&nbsp;".$this->db->affectedRows()."&nbsp;";
947 $message .= _("enregistrement(s) mis a jour")."&nbsp;]";
948 $this->addToLog($message, VERBOSE_MODE);
949 // Mise en place du verrou pour ne pas finaliser plusieurs fois
950 // le meme document
951 $this->verrouille();
952 // Execution du trigger 'after' specifique au MODE 'update'
953 $this->triggermodifierapres($id, $this->db, $this->val, DEBUG);
954
955 return $retour;
956 }
957 //
958 } else {
959
960 // Message d'echec (saut d'une ligne supplementaire avant le
961 // message pour qu'il soit mis en evidence)
962 $this->addToLog(_("Finalisation non enregistree"));
963 return -1;
964 }
965 }
966 // Si le document n'a pas été stocké
967 else{
968
969 return -1;
970 }
971 }
972
973
974 /**
975 * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
976 * @return string numéro de dossier d'instruction
977 */
978 protected function getDossier() {
979 if(empty($this->specificMetadata)) {
980 $this->getSpecificMetadata();
981 }
982 return $this->specificMetadata->dossier;
983 }
984 /**
985 * Récupération la version du dossier d'instruction à ajouter aux métadonnées
986 * @return int Version
987 */
988 protected function getDossierVersion() {
989 if(empty($this->specificMetadata)) {
990 $this->getSpecificMetadata();
991 }
992 return $this->specificMetadata->version;
993 }
994 /**
995 * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
996 * @return string numéro de dossier d'autorisation
997 */
998 protected function getNumDemandeAutor() {
999 if(empty($this->specificMetadata)) {
1000 $this->getSpecificMetadata();
1001 }
1002 return $this->specificMetadata->dossier_autorisation;
1003 }
1004 /**
1005 * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
1006 * @return date demande initiale
1007 */
1008 protected function getAnneemoisDemandeAutor() {
1009 if(empty($this->specificMetadata)) {
1010 $this->getSpecificMetadata();
1011 }
1012 return $this->specificMetadata->date_demande_initiale;
1013 }
1014 /**
1015 * Récupération du type de dossier d'instruction à ajouter aux métadonnées
1016 * @return string type de dossier d'instruction
1017 */
1018 protected function getTypeInstruction() {
1019 if(empty($this->specificMetadata)) {
1020 $this->getSpecificMetadata();
1021 }
1022 return $this->specificMetadata->dossier_instruction_type;
1023 }
1024 /**
1025 * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
1026 * @return string avis
1027 */
1028 protected function getStatutAutorisation() {
1029 if(empty($this->specificMetadata)) {
1030 $this->getSpecificMetadata();
1031 }
1032 return $this->specificMetadata->statut;
1033 }
1034 /**
1035 * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
1036 * @return string type d'autorisation
1037 */
1038 protected function getTypeAutorisation() {
1039 if(empty($this->specificMetadata)) {
1040 $this->getSpecificMetadata();
1041 }
1042 return $this->specificMetadata->dossier_autorisation_type;
1043 }
1044 /**
1045 * Récupération de la date d'ajout de document à ajouter aux métadonnées
1046 * @return date de l'évènement
1047 */
1048 protected function getDateEvenementDocument() {
1049 return date("Y-m-d");
1050 }
1051 /**
1052 * Récupération du groupe d'instruction à ajouter aux métadonnées
1053 * @return string Groupe d'instruction
1054 */
1055 protected function getGroupeInstruction() {
1056 if(empty($this->specificMetadata)) {
1057 $this->getSpecificMetadata();
1058 }
1059 return $this->specificMetadata->groupe_instruction;
1060 }
1061 /**
1062 * Récupération du type de document à ajouter aux métadonnées
1063 * @return string Type de document
1064 */
1065 protected function getTitle() {
1066 if ($this->retourformulaire == "demande_avis_encours") {
1067 return 'Retour de consultation';
1068 } else {
1069 return 'Demande de consultation';
1070 }
1071 }
1072
1073 /**
1074 * Cette méthode permet de stocker en attribut toutes les métadonnées
1075 * nécessaire à l'ajout d'un document.
1076 */
1077 public function getSpecificMetadata() {
1078 if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
1079 $dossier = $this->valF["dossier"];
1080 } else {
1081 $dossier = $this->getVal("dossier");
1082 }
1083 //Requête pour récupérer les informations essentiels sur le dossier d'instruction
1084 $sql = "SELECT dossier.dossier as dossier,
1085 dossier_autorisation.dossier_autorisation as dossier_autorisation,
1086 to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
1087 dossier_instruction_type.code as dossier_instruction_type,
1088 etat_dossier_autorisation.libelle as statut,
1089 dossier_autorisation_type.code as dossier_autorisation_type,
1090 groupe.code as groupe_instruction
1091 FROM ".DB_PREFIXE."dossier
1092 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
1093 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1094 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
1095 ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
1096 LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
1097 ON dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
1098 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
1099 ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1100 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
1101 ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
1102 LEFT JOIN ".DB_PREFIXE."groupe
1103 ON dossier_autorisation_type.groupe = groupe.groupe
1104 WHERE dossier.dossier = '".$dossier."'";
1105 $res = $this->db->query($sql);
1106 $this->f->addToLog("obj/document_numerise.class.php : db->query(".$sql.")", VERBOSE_MODE);
1107 if ( database::isError($res)){
1108 die();
1109 }
1110
1111 //Le résultat est récupéré dans un objet
1112 $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
1113
1114 //Si il y a un résultat
1115 if ($row !== null) {
1116
1117 //Génération du numéro de version
1118 $sql = "SELECT
1119 count(*)
1120 FROM
1121 ".DB_PREFIXE."dossier
1122 LEFT JOIN
1123 ".DB_PREFIXE."dossier_autorisation
1124 ON
1125 dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
1126 LEFT JOIN
1127 ".DB_PREFIXE."dossier_instruction_type
1128 ON
1129 dossier_instruction_type.dossier_instruction_type = dossier.dossier_instruction_type
1130 WHERE
1131 dossier_autorisation.dossier_autorisation = '".$row->dossier_autorisation."'
1132 AND
1133 dossier_instruction_type.code = '".$row->dossier_instruction_type."'";
1134 $row->version = $this->db->getOne($sql);
1135 $this->f->addToLog("getInfosForFoldername(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
1136 if ( database::isError($row->version)){
1137 $this->f->addToError("", $row->version, $row->version);
1138 return false;
1139 }
1140
1141 //Formatage du numéro de version
1142 $row->version = str_pad($row->version, 2, "0", STR_PAD_LEFT);
1143
1144 //Alors on créé l'objet dossier_instruction
1145 $this->specificMetadata = $row;
1146
1147 }
1148 }
1149
1150 }// fin classe
1151 ?>

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26