/[openfoncier]/branches/3.14.1/obj/instruction.class.php
ViewVC logotype

Contents of /branches/3.14.1/obj/instruction.class.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2564 - (show annotations)
Tue Dec 3 14:17:35 2013 UTC (11 years, 2 months ago) by softime
Original Path: trunk/obj/instruction.class.php
File size: 99471 byte(s)
Petite amélioration dans la fonction regele() de la classe Instruction pour prendre en compte les espaces dans les règles de calcul.
+ Modification des tests pour écrire une règle avec des espaces

1 <?php
2 /**
3 *
4 *
5 * specific :
6 * - cle secondaire
7 * destruction autorisée que pour le dernier evenement
8 * [delete the last event ]
9 * - variable globale [global variables]
10 * var $archive_date_depot;
11 * var $retourformulaire;
12 * var $idxformulaire;
13 * - modification des données dans dossier trigger avant
14 * [modify dossier data with trigger function]
15 * - function moisdate : pour ajouter des mois a une date
16 * [add months (delay) and calculation final date]
17 * - voir script_lang.js : bible ...
18 *
19 * @package openfoncier
20 * @version SVN : $Id$
21 */
22
23 //
24 require_once "../gen/obj/instruction.class.php";
25
26 //
27 require_once "../services/outgoing/messageenqueuer.php";
28
29 //
30 class instruction extends instruction_gen {
31
32 var $archive_date_depot; // specific
33 var $retourformulaire; // specific
34 var $idxformulaire; // specific
35 var $valEvenement;
36 // Tableau contenant une partie des métadonnées arrêtés
37 var $metadonneesArrete;
38
39 var $metadata = array(
40 "om_fichier_instruction" => array(
41 "dossier" => "getDossier",
42 "dossier_version" => "getDossierVersion",
43 "numDemandeAutor" => "getNumDemandeAutor",
44 "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
45 "typeInstruction" => "getTypeInstruction",
46 "statutAutorisation" => "getStatutAutorisation",
47 "typeAutorisation" => "getTypeAutorisation",
48 "dateEvenementDocument" => "getDateEvenementDocument",
49 "groupeInstruction" => 'getGroupeInstruction',
50 "title" => 'getTitle',
51 ),
52 );
53
54
55 function __construct($id, &$db, $debug) {
56 $this->constructeur($id, $db, $debug);
57 }
58
59 // {{{ Gestion de la confidentialité des données spécifiques
60
61 /**
62 * Surcharge pour gérer les actions disponibles dans le portlet
63 */
64 function checkAccessibility() {
65 //
66 parent::checkAccessibility();
67 // Si l'utilisateur est un intructeur qui ne correspond pas à la
68 // division du dossier
69 if ($this->f->isUserInstructeur()
70 && isset($this->f->om_utilisateur["division"])
71 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
72 //
73 //On cache les liens d'action
74 $this->parameters["actions"]["modifier"] = NULL;
75 $this->parameters["actions"]["supprimer"] = NULL;
76 $this->actions_sup["finalisation"] = NULL;
77 }
78 // Si une action 'lu' est présente et que le champ lu est à true
79 // on supprime l'action
80 if (isset($this->actions_sup["lu"])
81 && isset($this->val[array_search("lu", $this->champs)])
82 && $this->val[array_search("lu", $this->champs)]== "t") {
83 unset($this->actions_sup["lu"]);
84 }
85
86 //Si le document est déjà finalisé, on affiche uniquement le lien de
87 //dé-finalisation
88 $om_final_instruction = $this->getVal("om_final_instruction");
89 if ( isset($this->actions_sup["finalisation"]) &&
90 $om_final_instruction== "t" ){
91
92 //On cache les liens d'action
93 $this->parameters["actions"]["modifier"] = NULL;
94 $this->parameters["actions"]["supprimer"] = NULL;
95 //On cache le lien de finalisation et on affiche le bon lien pour l'édition
96 $this->actions_sup["finalisation"] = NULL;
97 $this->actions_sup["pdfetat"]["lien"] = "../spg/file.php?id=";
98 $this->actions_sup["pdfetat"]["id"] =
99 "&amp;obj=instruction&amp;champ=om_fichier_instruction";
100 }
101 //Si le document n'est pas finalisé, on affiche uniquement le lien de
102 //finalisation
103 if ( isset($this->actions_sup["definalisation"]) &&
104 $om_final_instruction!= "t" ){
105
106 //On cache le lien de finalisation et on affiche le bon lien pour l'édition
107 $this->actions_sup["definalisation"] = NULL;
108 $this->actions_sup["pdfetat"]["lien"] = "../app/pdf_instruction.php?idx=";
109 $this->actions_sup["pdfetat"]["id"] = "";
110 }
111
112 $idxformulaire = $this->getParameter("idxformulaire");
113 $retourformulaire = $this->getParameter("retourformulaire");
114 //Si le dossier d'instruction auquel est rattachée l'instruction est cloturé,
115 //on affiche pas les liens du portlet
116 if ( $idxformulaire != '' &&
117 (
118 $retourformulaire == 'dossier' ||
119 $retourformulaire == 'dossier_instruction' ||
120 $retourformulaire == 'dossier_instruction_mes_encours' ||
121 $retourformulaire == 'dossier_instruction_tous_encours' ||
122 $retourformulaire == 'dossier_instruction_mes_clotures' ||
123 $retourformulaire == 'dossier_instruction_tous_clotures'
124 )){
125
126 //On récuppère le statut du dossier d'instruction
127 $statut = $this->getStatutAutorisationDossier($idxformulaire);
128 if ( $this->f->isUserInstructeur() && $statut == "cloture" ){
129
130 //On cache le lien de modification
131 $this->parameters["actions"]["modifier"] = NULL;
132 $this->actions_sup["finalisation"] = NULL;
133 $this->actions_sup["definalisation"] = NULL;
134 }
135 }
136 }
137
138 /**
139 * Cette methode est à surcharger elle permet de tester dans chaque classe
140 * des droits des droits spécifiques en fonction des données
141 */
142 function canAccess() {
143 // Si l'utilisateur est un intructeur qui ne correspond pas à la
144 // division du dossier
145 if ($this->f->isUserInstructeur()
146 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
147 && $this->getParameter("maj") != 3) {
148 //
149 $this->addToLog("canAccess(): utilisateur instructeur sur un dossier d'une autre division", EXTRA_VERBOSE_MODE);
150 return false;
151 }
152
153 $retourformulaire = $this->getParameter("retourformulaire");
154 // Si l'utilisateur est un instructeur et que le dossier est cloturé
155 if ( $this->f->isUserInstructeur() &&
156 $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture" &&
157 (
158 $retourformulaire == 'dossier' ||
159 $retourformulaire == 'dossier_instruction' ||
160 $retourformulaire == 'dossier_instruction_mes_encours' ||
161 $retourformulaire == 'dossier_instruction_tous_encours' ||
162 $retourformulaire == 'dossier_instruction_mes_clotures' ||
163 $retourformulaire == 'dossier_instruction_tous_clotures'
164 )
165 && $this->getParameter("maj") != 3 && $this->getParameter("maj") != 0 ) {
166
167 return false;
168 }
169 //
170 return true;
171 }
172
173 /**
174 * Cette variable permet de stocker le résultat de la méthode
175 * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
176 * ces appels.
177 * @var string Code de la division du dossier en cours
178 */
179 var $_division_from_dossier = NULL;
180
181 /**
182 * Cette méthode permet de récupérer le code de division correspondant
183 * au dossier sur lequel on se trouve.
184 *
185 * @return string Code de la division du dossier en cours
186 */
187 function getDivisionFromDossier() {
188
189 // Cette méthode peut être appelée plusieurs fois lors d'une requête.
190 // Pour éviter de refaire le traitement de recherche de la division
191 // alors on vérifie si nous ne l'avons pas déjà calculé.
192 if ($this->_division_from_dossier != NULL) {
193 // Logger
194 $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
195 // On retourne la valeur déjà calculée
196 return $this->_division_from_dossier;
197 }
198
199 // Par défaut, on définit la valeur du dossier à NULL
200 $dossier = NULL;
201 // Test sur le mode et le contexte du formulaire
202 if ($this->getParameter("maj") == 0
203 && ($this->getParameter("retourformulaire") == "dossier"
204 || $this->getParameter("retourformulaire") == "dossier_instruction"
205 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
206 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
207 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
208 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures")) {
209 // Si on se trouve en mode AJOUT (seul mode où l'enregistrement
210 // n'existe pas en base de données) ET que nous nous trouvons
211 // dans le contexte d'un dossier d'instruction alors on récupère
212 // le numéro de dossier depuis le paramètre 'idxformulaire'
213 $dossier = $this->getParameter("idxformulaire");
214 } else {
215 // Sinon on récupère le numéro de dossier dans le champs dossier de
216 // l'enregistrement (en base de données)
217 $dossier = $this->getVal("dossier");
218 }
219
220 // On appelle la méthode de la classe utils qui renvoi le code de la
221 // division d'un dossier, on la stocke pour ne pas refaire le calcul au
222 // prochain appel de cette méthode
223 $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
224 // Logger
225 $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
226 // On retourne la valeur retournée
227 return $this->_division_from_dossier;
228
229 }
230
231 /**
232 * Cette méthode permet de récupérer le dossier d'autorisation d'un dossier
233 */
234 function getNumDemandeAutorFromDossier($id) {
235 //
236 if (!isset($id)) {
237 return NULL;
238 }
239 //
240 $sql = "select dossier_autorisation from ".DB_PREFIXE."dossier ";
241 $sql .= " where dossier='".$id."'";
242 //
243 $dossier_autorisation = $this->db->getOne($sql);
244 $this->addToLog("getNumDemandeAutorFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
245 database::isError($dossier_autorisation);
246 //
247 return $dossier_autorisation;
248 }
249
250 // }}}
251
252 function setType(&$form, $maj) {
253 //
254 parent::setType($form, $maj);
255 // On cache tous les champs
256 // XXX
257 $form->setType('complement3', 'hidden');
258 $form->setType('bible3', 'hidden');
259 $form->setType('complement4', 'hidden');
260 $form->setType('bible4', 'hidden');
261 $form->setType('complement5', 'hidden');
262 $form->setType('bible5', 'hidden');
263 $form->setType('complement6', 'hidden');
264 $form->setType('bible6', 'hidden');
265 $form->setType('complement7', 'hidden');
266 $form->setType('bible7', 'hidden');
267 $form->setType('complement8', 'hidden');
268 $form->setType('bible8', 'hidden');
269 $form->setType('complement9', 'hidden');
270 $form->setType('bible9', 'hidden');
271 $form->setType('complement10', 'hidden');
272 $form->setType('bible10', 'hidden');
273 $form->setType('complement11', 'hidden');
274 $form->setType('bible11', 'hidden');
275 $form->setType('complement12', 'hidden');
276 $form->setType('bible12', 'hidden');
277 $form->setType('complement13', 'hidden');
278 $form->setType('bible13', 'hidden');
279 $form->setType('complement14', 'hidden');
280 $form->setType('bible14', 'hidden');
281 $form->setType('complement15', 'hidden');
282 $form->setType('bible15', 'hidden');
283 //
284 $form->setType('delai', 'hidden');
285 $form->setType('etat', 'hidden');
286 $form->setType('accord_tacite', 'hidden');
287 $form->setType('action', 'hidden');
288 $form->setType('delai_notification', 'hidden');
289 $form->setType('avis_decision', 'hidden');
290 $form->setType('autorite_competente', 'hidden');
291 //
292 $form->setType('archive_delai', 'hidden');
293 $form->setType('archive_etat', 'hidden');
294 $form->setType('archive_accord_tacite', 'hidden');
295 $form->setType('archive_avis', 'hidden');
296 $form->setType('archive_date_complet', 'hidden');
297 $form->setType('archive_date_dernier_depot', 'hidden');
298 $form->setType('archive_date_rejet', 'hidden');
299 $form->setType('archive_date_limite', 'hidden');
300 $form->setType('archive_date_notification_delai', 'hidden');
301 $form->setType('archive_date_decision', 'hidden');
302 $form->setType('archive_date_validite', 'hidden');
303 $form->setType('archive_date_achevement', 'hidden');
304 $form->setType('archive_date_conformite', 'hidden');
305 $form->setType('archive_date_chantier', 'hidden');
306 $form->setType('archive_autorite_competente','hidden');
307 //
308 $form->setType('numero_arrete', 'hidden');
309 //
310 $form->setType('code_barres', 'hidden');
311
312 //
313 $form->setType('archive_incompletude','hidden');
314 $form->setType('archive_evenement_suivant_tacite','hidden');
315 $form->setType('archive_evenement_suivant_tacite_incompletude','hidden');
316 $form->setType('archive_etat_pendant_incompletude','hidden');
317 $form->setType('archive_date_limite_incompletude','hidden');
318 $form->setType('archive_delai_incompletude','hidden');
319
320 //
321 $form->setType('duree_validite','hidden');
322 $form->setType('duree_validite_parametrage','hidden');
323 if ($maj < 2) { //ajouter et modifier
324 $form->setType('destinataire', 'hidden');
325 $form->setType('lettretype', 'hiddenstatic');
326 $form->setType('complement', 'textarea');
327 $form->setType('complement2', 'textarea');
328 $form->setType('bible_auto', 'httpclick');
329 $form->setType('bible', 'httpclick');
330 $form->setType('bible2', 'httpclick');
331 $form->setType('dossier', 'hidden');
332 $form->setType('libelle', 'hiddenstatic');
333 $form->setType('signataire_arrete','select');
334 $form->setType('date_envoi_signature','datedisabled');
335 $form->setType('date_retour_signature','datedisabled');
336 $form->setType('date_envoi_rar','datedisabled');
337 $form->setType('date_retour_rar','datedisabled');
338 $form->setType('date_envoi_controle_legalite','datedisabled');
339 $form->setType('date_retour_controle_legalite','datedisabled');
340 $form->setType('date_finalisation_courrier','datedisabled');
341
342 // l'administrateur peut modifier les champs de retour de date
343 if ($this->f->user_is_admin == true) {
344 $form->setType('date_retour_signature','date');
345 $form->setType('date_retour_rar','date');
346 $form->setType('date_retour_controle_legalite','date');
347 }
348
349 if($maj==0){ // add
350 $form->setType('instruction', 'hiddenstatic');
351 $form->setType('evenement', 'select');
352 $form->setType('date_evenement', 'date2');
353 }else{ // modify
354 $form->setType('instruction', 'hiddenstatic');
355 $form->setType('evenement', 'selecthiddenstatic');
356 //$form->setType('date_evenement', 'hiddenstaticdate');
357 $form->setType('date_evenement', 'date2');
358 // necessaire pour calcul de date en modification
359 //$form->setType('delai', 'hiddenstatic');
360 }
361 } elseif($maj==2){
362 $form->setType('dossier', 'hidden');
363 $form->setType('bible_auto', 'hidden');
364 $form->setType('bible', 'hidden');
365 $form->setType('bible2', 'hidden');
366 }else {
367 $form->setType('destinataire', 'hidden');
368 $form->setType('dossier', 'hidden');
369 $form->setType('bible_auto', 'hidden');
370 $form->setType('bible', 'hidden');
371 $form->setType('bible2', 'hidden');
372 }
373
374 //Cache les champs pour la finalisation
375 $form->setType('om_fichier_instruction', 'hidden');
376 $form->setType('om_final_instruction', 'hidden');
377 // Cache le document arrêté
378 $form->setType('document_numerise', 'hidden');
379
380 //Masquer les champs date_envoi_controle_legalite et
381 //date_retour_controle_legalite si ce n'est pas un arrêté
382 if ( !is_numeric($this->getVal("avis_decision"))){
383
384 $form->setType("date_envoi_controle_legalite", "hidden");
385 $form->setType("date_retour_controle_legalite", "hidden");
386 }
387 }
388
389 function setSelect(&$form, $maj,&$db,$debug) {
390 /**
391 * On ne surcharge pas la méthode parent car une requête sur la table
392 * dossier est mauvaise pour les performances, car la requête qui
393 * concerne evenement est plus complexe que celle générée et car les
394 * champs action, avis_decision et etat ne sont pas utilisés comme des
395 * select
396 */
397 if(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc.php"))
398 include ("../sql/".$db->phptype."/".$this->table.".form.inc.php");
399 elseif(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc"))
400 include ("../sql/".$db->phptype."/".$this->table.".form.inc");
401
402 //// action
403 //$this->init_select($form, $db, $maj, $debug, "action",
404 // $sql_action, $sql_action_by_id, false);
405
406 //// avis_decision
407 //$this->init_select($form, $db, $maj, $debug, "avis_decision",
408 // $sql_avis_decision, $sql_avis_decision_by_id, false);
409
410 //// dossier
411 //$this->init_select($form, $db, $maj, $debug, "dossier",
412 // $sql_dossier, $sql_dossier_by_id, false);
413
414 //// etat
415 //$this->init_select($form, $db, $maj, $debug, "etat",
416 // $sql_etat, $sql_etat_by_id, false);
417
418 //// evenement
419 //$this->init_select($form, $db, $maj, $debug, "evenement",
420 // $sql_evenement, $sql_evenement_by_id, false);
421
422 // signataire_arrete
423 $this->init_select($form, $db, $maj, $debug, "signataire_arrete",
424 $sql_signataire_arrete, $sql_signataire_arrete_by_id, true);
425
426 /**
427 * Gestion du filtre sur les événements de workflow disponibles
428 * On récupère ici en fonction de l'état du dossier d'instruction en
429 * cours et du type du dossier d'instruction en cours la liste
430 * événements disponibles.
431 */
432 if ($maj == 0) {
433 // Récupération des événements par une jointure entre la table dossier
434 // et la table transition et la table evenement et la table
435 // lien_dossier_instruction_type_evenement en fonction de l'identifiant
436 // du dossier d'instruction en cours
437 $sql = "SELECT
438 evenement.evenement,
439 CONCAT(evenement.libelle, ' ['||evenement.action||']') as lib
440 FROM ".DB_PREFIXE."dossier
441 INNER JOIN ".DB_PREFIXE."lien_dossier_instruction_type_evenement
442 ON dossier.dossier_instruction_type=lien_dossier_instruction_type_evenement.dossier_instruction_type
443 INNER JOIN ".DB_PREFIXE."evenement
444 ON evenement.evenement=lien_dossier_instruction_type_evenement.evenement
445 INNER JOIN ".DB_PREFIXE."transition
446 ON evenement.evenement = transition.evenement
447 AND dossier.etat=transition.etat
448 WHERE dossier.dossier='".$this->idxformulaire."'
449 ORDER BY evenement.action";
450 $res = $db->query($sql);
451 $this->addToLog("setSelect(): db->query(\"".$sql."\");", VERBOSE_MODE);
452 if (database::isError($res)) {
453 die($res->getMessage());
454 }
455 // Remplissage du tableau du select
456 $contenu = array(
457 0 => array("",),
458 1 => array(_('choisir')." "._('evenement'),)
459 );
460 while ($row=& $res->fetchRow()) {
461 $contenu[0][] = $row[0];
462 $contenu[1][] = $row[1];
463 }
464 $form->setSelect("evenement", $contenu);
465 } else {
466 $sql = "SELECT
467 CONCAT(evenement.libelle, ' ['||evenement.action||']') as lib
468 FROM ".DB_PREFIXE."evenement
469 WHERE evenement.evenement=".$this->getVal("evenement")."";
470 $res = $db->getone($sql);
471 $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
472 if (database::isError($res)) {
473 die($res->getMessage());
474 }
475 //
476 $contenu = array(
477 0 => array($this->getVal("evenement"),),
478 1 => array($res,)
479 );
480 $form->setSelect("evenement", $contenu);
481 }
482
483 /**
484 * Gesion des liens vers la bible
485 */
486 // lien bible_auto
487 $contenu = array(_("automatique"));
488 $form->setSelect("bible_auto",$contenu);
489 // lien bible1
490 $contenu = array(_("bible"));
491 $form->setSelect("bible",$contenu);
492 // lien bible2
493 $contenu = array(_("bible"));
494 $form->setSelect("bible2",$contenu);
495 }
496
497 function cleSecondaire($id, &$db, $val, $DEBUG) {
498 //
499 parent::cleSecondaire($id, $db, $val, $DEBUG);
500
501 // Aucune clé secondaire n'a été trouvée, l'instruction peut être supprimée
502 if ( $this->correct !== false ){
503
504 /**
505 * Vérification que l'élément supprimé est le dernier pour pouvoir
506 * remodifier les données de manière itérative.
507 */
508 // Initialisation
509 $dernierevenement = "";
510 // Récupération du dernier élément de la table d'instruction qui
511 // concerne le dossier en cours
512 $sql = "SELECT max(instruction)
513 FROM ".DB_PREFIXE."instruction
514 WHERE dossier ='".$this->idxformulaire."'";
515 $dernierevenement = $db->getOne($sql);
516 $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
517 if (database::isError($dernierevenement)) {
518 die($dernierevenement->getMessage());
519 }
520 // Si on se trouve effectivement sur le dernier evenement d'instruction
521 if ($dernierevenement == $id) {
522 // Alors on valide la suppression
523 $this->correct = true;
524 $this->addToMessage(_('Destruction_chronologique'));
525 } else {
526 // Alors on annule la suppression
527 $this->correct = false;
528 $this->addToMessage(_("Seul le dernier evenement d'instruction peut etre supprime."));
529 }
530 }
531 }
532
533 /**
534 * Vérification de la possibilité ou non de modifier des dates de suivi
535 * @param string $champ champ date à vérifier
536 */
537 function updateDate($champ) {
538
539 //Si le retourformulaire est "dossier_instruction"
540 if ($this->retourformulaire == "dossier_instruction") {
541
542 // Vérification de la possibilité de modifier les dates si déjà éditées
543 if($this->valF[$champ] != "" AND !$this->f->user_is_admin) {
544 // si l'utilisateur n'est pas un admin
545 if($this->getVal($champ) != "" AND $this->getVal($champ) != $this->valF[$champ]) {
546 $this->correct = false;
547 $this->addToMessage(_("Les dates de suivis ne peuvent etre modifiees"));
548 }
549 }
550 }
551
552 //
553 return true;
554 }
555
556 // Sélectionne le signataire_arrete par défaut
557 function setVal(&$form,$maj,$validation){
558
559 // Ajout
560 if($maj == 0) {
561
562 // Création de la requête
563 $sql = "SELECT signataire_arrete
564 FROM ".DB_PREFIXE."signataire_arrete
565 WHERE defaut IS TRUE";
566
567 // Exécution de la requête
568 $res = $this->f->db->query($sql);
569 $this->f->addToLog("setVal(): db->query(\"".$sql."\");", VERBOSE_MODE);
570 if ( database::isError($res)){
571 die();
572 }
573
574 $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
575
576 if ( isset($row['signataire_arrete']) && is_numeric($row['signataire_arrete'])){
577
578 $form->setVal("signataire_arrete",$row['signataire_arrete']);
579 }
580 }
581 }
582
583 /*Met des valeurs par défaut dans certains des sous-formulaire*/
584 function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){
585 if ($validation==0 and $maj<2) {
586 if ($maj == 0){
587 $form->setVal("destinataire", $idxformulaire);
588 $form->setVal("dossier", $idxformulaire);
589 $form->setVal("date_evenement", date('Y-m-d'));
590 }
591 $form->setVal("bible_auto","bible_auto()");
592 $form->setVal("bible","bible()");
593 $form->setVal("bible2","bible2()");
594 }
595 $this->retourformulaire=$retourformulaire;
596 $this->idxformulaire=$idxformulaire;
597 }
598
599
600 function setLayout(&$form, $maj){
601 if ( $maj < 2 OR $maj == 3 ) {
602 /*Champ sur lequel s'ouvre le bloc 1 */
603 $form->setBloc('evenement','D',"","col_12");
604
605 $form->setFieldset('evenement','D',_('Evenement'));
606 $form->setFieldset('lettretype','F','');
607
608 $form->setBloc('lettretype','F');
609
610 $form->setBloc('date_finalisation_courrier','D',"","col_12");
611
612 $form->setFieldset('date_finalisation_courrier','D',_('Dates'));
613 $form->setBloc('date_finalisation_courrier','D',"","col_6");
614 $form->setBloc('date_envoi_controle_legalite','F');
615
616 $form->setBloc('signataire_arrete','D',"","col_6");
617 $form->setBloc('date_retour_controle_legalite','F');
618 $form->setFieldset('date_retour_controle_legalite','F','');
619
620 $form->setBloc('date_retour_controle_legalite','F');
621
622 $form->setBloc('complement','D',"","col_12");
623 $form->setFieldset('complement','D',_('Complement'));
624 $form->setFieldset('bible','F','');
625 $form->setBloc('bible','F');
626
627 $form->setBloc('complement2','D',"","col_12");
628 $form->setFieldset('complement2','D',_('Complement 2'));
629 $form->setFieldset('bible2','F','');
630 $form->setBloc('bible2','F');
631 }
632 }
633
634 function setLib(&$form, $maj) {
635 //
636 parent::setLib($form, $maj);
637 //
638 $form->setLib('bible_auto', "");
639 $form->setLib('bible', "");
640 $form->setLib('bible2', "");
641 }
642
643 function triggerajouter($id, &$db, $val, $DEBUG) {
644 /**
645 * Le code suivant permet de récupérer des valeurs des tables evenement
646 * et dossier pour les stocker dans l'instruction :
647 * DEPUIS L'EVENEMENT
648 * - action
649 * - delai
650 * - accord_tacite
651 * - etat
652 * - avis_decision
653 * - delai_notification
654 * - lettretype
655 * - autorite_competente
656 * DEPUIS LE DOSSIER D'INSTRUCTION
657 * - archive_delai
658 * - archive_accord_tacite
659 * - archive_etat
660 * - archive_avis
661 * - date_complet
662 * - date_rejet
663 * - date_limite
664 * - date_notification_delai
665 * - date_decision
666 * - date_validite
667 * - date_achevement
668 * - date_chantier
669 * - date_conformite
670 * - avis_decision
671 * Il permet également de stocker la date_depot du dossier d'instruction
672 * dans l'attribut $this->archive_date_depot de la classe.
673 */
674 // Récupération de tous les paramètres de l'événement sélectionné
675 $sql = "SELECT * FROM ".DB_PREFIXE."evenement
676 WHERE evenement=".$this->valF['evenement'];
677 $res = $db->query($sql);
678 $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
679 if (database::isError($res)) {
680 die($res->getMessage());
681 }
682 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
683 // Récupération de l'identifiant de l'action
684 // si une action est paramétrée dans l'événement
685 $this->valF['action'] = NULL;
686 if (isset($row['action']) and !empty($row['action'])) {
687 $this->valF['action']=$row['action'];
688 }
689 // Récupération de la valeur du délai
690 $this->valF['delai'] = $row['delai'];
691 // Récupération de l'identifiant de l'état
692 // si un état est paramétré dans l'événement
693 $this->valF['etat']=NULL;
694 if (isset($row['etat']) and !empty($row['etat'])) {
695 $this->valF['etat']=$row['etat'];
696 }
697 // Récupération de la valeur d'accord tacite
698 $this->valF['accord_tacite']=$row['accord_tacite'];
699 // Récupération de la valeur du délai de notification
700 $this->valF['delai_notification']=$row['delai_notification'];
701 // Récupération de l'identifiant de l'avis
702 // si un avis est paramétré dans l'événement
703 $this->valF['avis_decision'] = NULL;
704 if(isset($row['avis_decision']) and !empty($row['avis_decision'])) {
705 $this->valF['avis_decision']=$row['avis_decision'];
706 }
707 // Récupération de la valeur de l'autorité compétente
708 // si l'autorité compétente est paramétré dans l'événement
709 $this->valF['autorite_competente'] = NULL;
710 if(isset($row['autorite_competente']) and !empty($row['autorite_competente'])) {
711 $this->valF['autorite_competente']=$row['autorite_competente'];
712 }
713 // Récupération de la valeur de la lettre type
714 // Sinon on lui affecte lavaleur par défaut standard
715 if ($row['lettretype'] != "") {
716 $this->valF['lettretype']=$row['lettretype'];
717 } else {
718 $this->valF['lettretype'] = "standard"; // XXX
719 }
720 }
721 // Récupération de toutes les valeurs du dossier d'instruction en cours
722 $sql = "SELECT * FROM ".DB_PREFIXE."dossier
723 WHERE dossier='".$this->valF['dossier']."'";
724 $res = $db->query($sql);
725 $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
726 if (database::isError($res)) {
727 die($res->getMessage());
728 }
729 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
730 // XXX On stocke la date de dépôt actuelle du dossier d'instruction
731 // dans un attribut de la classe
732 $this->archive_date_depot = $row['date_depot'];
733 // Récupération de la valeur actuelle du délai, de l'accord tacite,
734 // de l'état et de l'avis du dossier d'instruction
735 $this->valF['archive_delai']=$row['delai'];
736 $this->valF['archive_accord_tacite']=$row['accord_tacite'];
737 $this->valF['archive_etat']=$row['etat'];
738 $this->valF['archive_avis']=$row['avis_decision'];
739 // Récupération de la valeur actuelle des 9 dates du dossier
740 // d'instruction
741 if ($row['date_complet'] != '') {
742 $this->valF['archive_date_complet']=$row['date_complet'];
743 }
744 if ($row['date_dernier_depot'] != '') {
745 $this->valF['archive_date_dernier_depot']=$row['date_dernier_depot'];
746 }
747 if ($row['date_rejet']!='') {
748 $this->valF['archive_date_rejet']= $row['date_rejet'];
749 }
750 if ($row['date_limite']!='') {
751 $this->valF['archive_date_limite']= $row['date_limite'];
752 }
753 if ($row['date_notification_delai']!='') {
754 $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];
755 }
756 if ($row['date_decision']!='') {
757 $this->valF['archive_date_decision']= $row['date_decision'];
758 }
759 if ($row['date_validite']!='') {
760 $this->valF['archive_date_validite']= $row['date_validite'];
761 }
762 if ($row['date_achevement']!='') {
763 $this->valF['archive_date_achevement']= $row['date_achevement'];
764 }
765 if ($row['date_chantier']!='') {
766 $this->valF['archive_date_chantier']= $row['date_chantier'];
767 }
768 if ($row['date_conformite']!='') {
769 $this->valF['archive_date_conformite']= $row['date_conformite'];
770 }
771 if ($row['incompletude']!='') {
772 $this->valF['archive_incompletude']= $row['incompletude'];
773 }
774 if ($row['evenement_suivant_tacite']!='') {
775 $this->valF['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];
776 }
777 if ($row['evenement_suivant_tacite_incompletude']!='') {
778 $this->valF['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];
779 }
780 if ($row['etat_pendant_incompletude']!='') {
781 $this->valF['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];
782 }
783 if ($row['date_limite_incompletude']!='') {
784 $this->valF['archive_date_limite_incompletude']= $row['date_limite_incompletude'];
785 }
786 if ($row['delai_incompletude']!='') {
787 $this->valF['archive_delai_incompletude']= $row['delai_incompletude'];
788 }
789 if ($row['autorite_competente']!='') {
790 $this->valF['archive_autorite_competente']= $row['autorite_competente'];
791 }
792 if ($row['duree_validite']!='') {
793 $this->valF['duree_validite']= $row['duree_validite'];
794 }
795 }
796 // Récupération de la duree de validite du dossier d'autorisation
797 $sql = "SELECT duree_validite_parametrage
798 FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
799 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
800 ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
801 LEFT JOIN ".DB_PREFIXE."dossier
802 ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
803 WHERE dossier.dossier='".$this->valF['dossier']."'";
804 $duree_validite_parametrage = $db->getOne($sql);
805 $this->addToLog("triggerajouter(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
806 database::isError($duree_validite_parametrage);
807 if ($duree_validite_parametrage != '') {
808 $this->valF['duree_validite_parametrage']= $duree_validite_parametrage;
809 }
810
811 // Identifiant du type de courrier
812 $idTypeCourrier = '11';
813 $idCourrier = str_pad($this->valF["instruction"], 10, "0", STR_PAD_LEFT);
814 // Code barres
815 $this->valF["code_barres"] = $idTypeCourrier . $idCourrier;
816 }
817
818 // Test si une restriction est valide
819 // return boolean
820 function restrictionIsValid($restriction){
821
822 // Liste des opérateurs possible
823 $operateurs = array(">=", "<=", "+", "-");
824 // Liste des opérateurs avec espace
825 $operateurs_blank = array(" >= ", " <= ", " + ", " - ");
826
827 // Supprime tous les espaces de la chaîne de caractère
828 $restriction = str_replace(' ', '', $restriction);
829
830 // Met des espace avant et après les opérateurs puis transforme la
831 // chaine en un tableau
832 $tabRestriction = str_replace($operateurs, $operateurs_blank,
833 $restriction);
834 $tabRestriction = explode(" ", $tabRestriction);
835
836 // Tableau comprenant les résultat
837 $res = array();
838 // Compteur pour les résultat
839 // commence à 1 car le 0 doit rester inchangé tout au long du traitement
840 $j = 1;
841 // Comparateur du calcul
842 $comparateur = '';
843 // Booléen retourné
844 $res_bool = true;
845
846 // Si le tableau n'est pas vide
847 if (count($tabRestriction) > 0) {
848
849 // Boucle dans le tableau pour récupérer seulement les valeurs
850 foreach ($tabRestriction as $key => $value) {
851
852 //
853 if (!in_array($value, $operateurs)) {
854 if ($this->getRestrictionValue($value) != false) {
855 $res[] = $this->getRestrictionValue($value);
856 } else {
857 return false;
858 }
859 }
860 }
861
862 // Boucle dans le tableau
863 // commence à 1 car le 0 doit rester inchangé tout au long du
864 // traitement
865 for ($i = 1; $i<count($tabRestriction); $i++) {
866
867 // Récupère le comparateur
868 if ($tabRestriction[$i] === ">="
869 || $tabRestriction[$i] === "<=") {
870 $comparateur = $tabRestriction[$i];
871 }
872
873 // Si l'opérateur qui suit est un "+"
874 if ($tabRestriction[$i] === "+") {
875 $dateDep = strtotime($res[$j]);
876 unset($res[$j]);$j++;
877 $duree = $res[$j];
878 unset($res[$j]);
879 $res[$j] = date('Y-m-d',
880 strtotime('+'.$duree.' month', $dateDep));
881 }
882
883 // Si l'opérateur qui suit est un "-"
884 if ($tabRestriction[$i] === "-") {
885 $dateDep = strtotime($res[$j]);
886 unset($res[$j]);$j++;
887 $duree = $res[$j];
888 unset($res[$j]);
889 $res[$j] = date('Y-m-d',
890 strtotime('-'.$duree.' month', $dateDep));
891 }
892 }
893
894 }
895
896 // Si les tableau des résultats n'est pas vide
897 if (count($res) > 0) {
898 //
899 $res_bool = false;
900 // Effectue le test
901 if ($comparateur === ">=") {
902 //
903 if (strtotime($res[0]) >= strtotime($res[$j])) {
904 $res_bool = true;
905 }
906 }
907 if ($comparateur === "<=") {
908
909 if (strtotime($res[0]) <= strtotime($res[$j])) {
910 $res_bool = true;
911 }
912 }
913 }
914
915 return $res_bool;
916
917 }
918
919 /**
920 * Récupère la valeur du champ dans la restriction
921 * @param string $restrictionValue Nom du champ
922 * @return mixed Valeur du champ
923 */
924 function getRestrictionValue($restrictionValue){
925
926 // Initialisation de la valeur de retour
927 $return = false;
928
929 // Récupére les valeurs du dossier
930 $value_dossier = $this->get_dossier_actual();
931
932 //
933 if (is_numeric($restrictionValue)) {
934 $return = $restrictionValue;
935 }elseif (isset($value_dossier[$restrictionValue])) {
936 $return = $value_dossier[$restrictionValue];
937 }elseif (isset($this->valF[$restrictionValue])) {
938 $return = $this->valF[$restrictionValue];
939 }
940
941 // Retourne la valeur du champ
942 return $return;
943 }
944
945 function regle($regle){
946 // Supprime tous les espaces de la chaîne de caractère
947 $regle = str_replace(' ', '', $regle);
948 // Coupe la chaîne au niveau des "+"
949 $temp = explode ("+",$regle);
950 //echo '|'.$regle;
951 // cas rejet
952 if($regle=="null") // 1 dimension -> null
953 return null;
954 if(sizeof($temp)==1) // 1 dimension
955 if($temp[0]=="archive_date_depot") // initialisation avec le depot
956 return $this->$regle;
957 else // cas general
958 return $this->valF[$regle];
959 if(sizeof($temp)==2){ // 2 dimensions
960 if($temp[0]=="archive_date_depot") //initialisation avec le depot
961 if(is_numeric($temp[1]))
962 return $this->moisdate($this->$temp[0], $temp[1]);
963 else
964 return $this->moisdate($this->$temp[0], $this->valF[$temp[1]]);
965 if($temp[0]=="archive_delai") // majoration de delai
966 return $this->valF[$temp[0]]+$this->valF[$temp[1]];
967 // cas general 2 dimensions
968 if(is_numeric($temp[1]))
969 return $this->moisdate($this->valF[$temp[0]], $temp[1]);
970 else
971 return $this->moisdate($this->valF[$temp[0]], $this->valF[$temp[1]]);
972 }
973 if(sizeof($temp)==3){ // 3 dimensions
974 // cas date de validite de sursis
975 if(is_numeric($temp[1]))
976 $temp1 = $this->moisdate($this->valF[$temp[0]], $temp[1]);
977 else
978 $temp1 = $this->moisdate($this->valF[$temp[0]], $this->valF[$temp[1]]);
979 if(is_numeric($temp[2]))
980 return $this->moisdate($temp1, $temp[2]);
981 else
982 return $this->moisdate($temp1, $this->valF[$temp[2]]);
983 }
984 }
985
986
987
988 function triggerajouterapres($id,&$db,$val,$DEBUG) {
989 /**
990 * Mise à jour des valeurs du dossier en fonction des valeurs calculées
991 * par l'action
992 */
993 $this->getValEvenement();
994 // Initialisation
995 $valF = "";
996 // état de complétude actuel du dossier
997 $incompletude = $this->dossierIncomplet();
998
999 if($incompletude === FALSE) {
1000 // Si l'événement d'instruction est de type incompletude
1001 if($this->valEvenement['type'] == "incompletude") {
1002 // On marque le dossier en incomplétude pour application des actions
1003 $incompletude = TRUE;
1004 // Set du flag incomplétude de la table dossier
1005 $valF['incompletude'] = TRUE;
1006 // Enregistrement de l'état dans la variable provisoire
1007 $valF['etat_pendant_incompletude'] = $this->valF['archive_etat'];
1008 }
1009 } else {
1010 // Si l'evenement d'instruction est de type retour ou contient une
1011 // decision, on sort d'incomplétude
1012 if($this->valEvenement['type'] == "retour" OR
1013 $this->valEvenement['avis_decision'] != NULL) {
1014 // On enlève la marque d'incomplétude pour application des actions
1015 $incompletude = FALSE;
1016 // On enlève le flag d'incomplétude sur l'enregistrement de la table dossier
1017 $valF['incompletude'] = FALSE;
1018 // Restauration de l'état depuis l'état provisoire
1019 $valF['etat'] = $this->valF['archive_etat_pendant_incompletude'];
1020 // On vide la variable provisoire ainsi que le délai de complétude
1021 // et la date limite de complétude
1022 $valF['etat_pendant_incompletude'] = NULL;
1023 $valF['delai_incompletude'] = NULL;
1024 $valF['date_limite_incompletude'] = NULL;
1025 }
1026 }
1027 // Récupération des paramètres de l'action
1028 $sql = "SELECT * FROM ".DB_PREFIXE."action
1029 WHERE action='".$this->valF['action']."'";
1030 $res = $db->query($sql);
1031 $this->addToLog("triggerajouterapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1032 if (database::isError($res)) {
1033 die($res->getMessage());
1034 }
1035 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1036
1037 // pour chacune des regles, on applique la regle
1038 if($row['regle_delai']!=''){
1039 $valF['delai'] = $this->regle($row['regle_delai']);
1040 }
1041 if($row['regle_accord_tacite']!=''){
1042 $valF['accord_tacite'] = $this->regle($row['regle_accord_tacite']);
1043 }
1044 if($row['regle_avis']!=''){
1045 $valF['avis_decision'] = $this->regle($row['regle_avis']);
1046 }
1047 if($row['regle_date_limite']!=''){
1048 $valF['date_limite']= $this->regle($row['regle_date_limite']);
1049 }
1050 if($row['regle_date_complet']!=''){
1051 $valF['date_complet']= $this->regle($row['regle_date_complet']);
1052 }
1053 if($row['regle_date_dernier_depot']!=''){
1054 $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot']);
1055 }
1056 if($row['regle_date_notification_delai']!=''){
1057 $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);
1058 }
1059 if($row['regle_date_decision']!=''){
1060 $valF['date_decision']= $this->regle($row['regle_date_decision']);
1061 }
1062 if($row['regle_date_rejet']!=''){
1063 $valF['date_rejet']= $this->regle($row['regle_date_rejet']);
1064 }
1065 if($row['regle_date_validite']!=''){
1066 $valF['date_validite']= $this->regle($row['regle_date_validite']);
1067 }
1068 if($row['regle_date_chantier']!=''){
1069 $valF['date_chantier']= $this->regle($row['regle_date_chantier']);
1070 }
1071 if($row['regle_date_achevement']!=''){
1072 $valF['date_achevement']= $this->regle($row['regle_date_achevement']);
1073 }
1074 if($row['regle_date_conformite']!=''){
1075 $valF['date_conformite']= $this->regle($row['regle_date_conformite']);
1076 }
1077 if($row['regle_date_limite_incompletude']!=''){
1078 $valF['date_limite_incompletude']= $this->regle($row['regle_date_limite_incompletude']);
1079 }
1080 if($row['regle_delai_incompletude']!=''){
1081 $valF['delai_incompletude']= $this->regle($row['regle_delai_incompletude']);
1082 }
1083 if($row['regle_autorite_competente']!=''){
1084 $valF['autorite_competente']= $this->regle($row['regle_autorite_competente']);
1085 }
1086 if($row['regle_etat']!=''){
1087 // Si on est dans le cas général ou qu'on est en incomplétude et
1088 // qu'on a un événement de type incomplétude alors : on stocke
1089 // l'état dans la variable courante
1090 if ($incompletude == FALSE OR $this->valEvenement['type'] == "incompletude") {
1091 $valF['etat'] = $this->regle($row['regle_etat']);
1092 } else {
1093 $valF['etat_pendant_incompletude'] = $this->regle($row['regle_etat']);
1094 }
1095 }
1096 if($this->valEvenement['evenement_suivant_tacite'] != '') {
1097 // Si on est pas en incomplétude on stocke l'événement tacite
1098 //de l'événement dans la variable courante
1099 if ($incompletude == FALSE) {
1100 $valF['evenement_suivant_tacite'] = $this->valEvenement['evenement_suivant_tacite'];
1101 } else {
1102 $valF['evenement_suivant_tacite_incompletude'] = $this->valEvenement['evenement_suivant_tacite'];
1103 }
1104 }
1105 }
1106 // Si des valeurs ont été calculées alors on met à jour l'enregistrement
1107 if ($valF != "") {
1108 // On met à jour le dossier
1109 $cle = " dossier='".$this->valF['dossier']."'";
1110 $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1111 $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1112 if (database::isError($res1)) {
1113 die($res->getMessage());
1114 }
1115 // Affichage d'informations à l'utilisateur
1116 $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1117 }
1118
1119 /**
1120 * REFERENTIEL ERP
1121 */
1122 // verification si envoi vers ERP est active
1123 if ($this->f->getParameter('option_erp') != "") {
1124 // la nature du dossier
1125 $nature_dossier = substr($this->idxformulaire,0,2);
1126 //
1127 $sql = "SELECT erp
1128 FROM ".DB_PREFIXE."dossier
1129 WHERE dossier='".$this->valF['dossier']."'";
1130 $dossier_erp = $this->db->getone($sql);
1131 $this->addToLog("triggerajouterapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1132 if (database::isError($res)) {
1133 die($res->getMessage());
1134 }
1135 //
1136 $sql = "SELECT libelle
1137 FROM ".DB_PREFIXE."evenement
1138 WHERE evenement='".$this->valF['evenement']."'";
1139 $evenement_libelle = $this->db->getone($sql);
1140 $this->addToLog("triggerajouterapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1141 if (database::isError($res)) {
1142 die($res->getMessage());
1143 }
1144 //
1145 if ($dossier_erp == 't') {
1146 // envoi du message en cas d'un PC qui est ERP et sur lequel un evenement
1147 // d'acceptation etait fait
1148 if ($nature_dossier ==
1149 $this->f->getParameter('erp_evenement_accepter_dossier_PC')
1150 && $this->valF['evenement'] ==
1151 $this->f->getParameter('erp_evenement_accepter_sans_reserve')) {
1152 $msgenque = new MessageEnqueuer();
1153 $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
1154 $msgenque->setDecision($evenement_libelle);
1155 $msgenque->enqueueMessage($msgenque::$ERP_ARRETE_PC_EFFECTUE);
1156 }
1157 if ($this->valF['evenement'] ==
1158 $this->f->getParameter('erp_evenement_refuser_dossier')) {
1159 $msgenque = new MessageEnqueuer();
1160 $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
1161 $msgenque->enqueueMessage($msgenque::$ERP_DECISION_CONFORMITE_EFFECTUE);
1162 }
1163 }
1164 } // fin de if ($this->f->getParameter('option_erp') != "")
1165
1166 // Mise à jour des données du dossier d'autorisation
1167 require_once "../obj/dossier_autorisation.class.php";
1168 $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($this->valF['dossier']), $this->db, DEBUG);
1169 $da->majDossierAutorisation();
1170 }
1171
1172 function triggermodifierapres($id,&$db,$val,$DEBUG) {
1173 /**
1174 * L'objectif ici est d'effectuer les recalculs de date dans le dossier
1175 * si la date de l'evenement est modifiee
1176 */
1177 // Initialisation
1178 $valF = "";
1179 // Initialisation du type d'événement
1180 $type_evmt = "";
1181 // Récupération de l'action correspondante à l'événement
1182 $sql = "SELECT action
1183 FROM ".DB_PREFIXE."evenement
1184 WHERE evenement=".$this->valF['evenement'];
1185 $action = $db->getOne($sql);
1186 $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1187 if (database::isError($action)) {
1188 die($action->getMessage());
1189 }
1190
1191 // Récupération des paramètres de l'action
1192 $sql = "SELECT * FROM ".DB_PREFIXE."action
1193 WHERE action='".$action."'";
1194 $res = $db->query($sql);
1195 $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1196 if (database::isError($res)) {
1197 die($res->getMessage());
1198 }
1199 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
1200 // application des regles sur le courrier + delai
1201 if(preg_match("/date_evenement/",$row['regle_date_limite'])){
1202 $valF['date_limite']= $this->regle($row['regle_date_limite']);
1203 }
1204 if(preg_match("/date_evenement/",$row['regle_date_complet'])){
1205 $valF['date_complet']= $this->regle($row['regle_date_complet']);
1206 }
1207 if(preg_match("/date_evenement/",$row['regle_date_dernier_depot'])){
1208 $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot']);
1209 }
1210 if(preg_match("/date_evenement/",$row['regle_date_notification_delai'])){
1211 $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);
1212 }
1213 if(preg_match("/date_evenement/",$row['regle_date_decision'])){
1214 $valF['date_decision']= $this->regle($row['regle_date_decision']);
1215 }
1216 if(preg_match("/date_evenement/",$row['regle_date_rejet'])){
1217 $valF['date_rejet']= $this->regle($row['regle_date_rejet']);
1218 }
1219 if(preg_match("/date_evenement/",$row['regle_date_validite'])){
1220 $valF['date_validite']= $this->regle($row['regle_date_validite']);
1221 }
1222 if(preg_match("/date_evenement/",$row['regle_date_chantier'])){
1223 $valF['date_chantier']= $this->regle($row['regle_date_chantier']);
1224 }
1225 if(preg_match("/date_evenement/",$row['regle_date_achevement'])){
1226 $valF['date_achevement']= $this->regle($row['regle_date_achevement']);
1227 }
1228 if(preg_match("/date_evenement/",$row['regle_date_conformite'])){
1229 $valF['date_conformite']= $this->regle($row['regle_date_conformite']);
1230 }
1231 }
1232 // Si des valeurs ont été calculées alors on met à jour l'enregistrement
1233 if ($valF != "") {
1234 // On met à jour le dossier
1235 $cle = " dossier='".$this->valF['dossier']."'";
1236 $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1237 $this->addToLog("triggermodifierapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1238 if (database::isError($res1)) {
1239 die($res->getMessage());
1240 }
1241 // Affichage d'informations à l'utilisateur
1242 $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1243 }
1244
1245 // Récupération de tous les paramètres de l'événement sélectionné
1246 $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1247 WHERE evenement=".$this->valF['evenement'];
1248 $res = $db->query($sql);
1249 $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1250 if (database::isError($res)) {
1251 die($res->getMessage());
1252 }
1253 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1254 // Si la date de retour signature est éditée on vérifie si il existe un événement automatique
1255 if ($this->getVal('date_retour_signature') == "" AND
1256 $this->valF['date_retour_signature'] != "" AND
1257 $row['evenement_retour_signature'] != "") {
1258 $new_instruction = new instruction("]", $db, $DEBUG);
1259 // Création d'un tableau avec la liste des champs de l'instruction
1260 foreach($new_instruction->champs as $champ) {
1261 $valNewInstr[$champ] = "";
1262 }
1263 // Définition des valeurs de la nouvelle instruction
1264 $valNewInstr["evenement"] = $row['evenement_retour_signature'];
1265 $valNewInstr["destinataire"] = $this->valF['destinataire'];
1266 $valNewInstr["dossier"] = $this->valF['dossier'];
1267 $valNewInstr["date_evenement"] = date("d/m/Y");
1268 $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
1269 $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
1270 $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
1271 $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
1272 $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
1273 $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
1274 $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1275 }
1276 // Si la date de retour AR est éditée on vérifie si il existe un événement automatique
1277 if ($this->getVal('date_retour_rar') == "" AND
1278 $this->valF['date_retour_rar'] != "" AND
1279 $row['evenement_retour_ar'] != "" ) {
1280 $new_instruction = new instruction("]", $db, $DEBUG);
1281 // Création d'un tableau avec la liste des champs de l'instruction
1282 foreach($new_instruction->champs as $champ) {
1283 $valNewInstr[$champ] = "";
1284 }
1285 // Définition des valeurs de la nouvelle instruction
1286 $valNewInstr["evenement"] = $row['evenement_retour_ar'];
1287 $valNewInstr["destinataire"] = $this->valF['destinataire'];
1288 $valNewInstr["dossier"] = $this->valF['dossier'];
1289 $valNewInstr["date_evenement"] = date("d/m/Y");
1290 $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
1291 $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
1292 $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
1293 $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
1294 $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
1295 $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
1296 $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1297 }
1298 }
1299
1300 /**
1301 * REFERENTIEL ARRETE
1302 */
1303 // Si l'option référentiel arrêté est activé et l'événement est de type
1304 // arrêté
1305 if ($this->f->getParameter('option_referentiel_arrete') != "" AND
1306 $type_evmt == "arrete") {
1307 if ($this->valF['date_retour_signature'] != $this->getVal('date_retour_signature')) {
1308 $msgenque = new MessageEnqueuer();
1309 $sqlArrete = "SELECT instruction.signataire_arrete as \"ws_DA_In_Signataire\",
1310 signataire_arrete.nom as \"ws_DA_In_Sign_Nom\",
1311 signataire_arrete.prenom as \"ws_DA_In_Sign_Prenom\",
1312 signataire_arrete.qualite as \"ws_DA_In_Sign_Qualite\",
1313 instruction.date_evenement as \"ws_DA_In_Dte_Redac\",
1314 '' as \"ws_DA_In_lieu_Redac\",
1315 instruction.dossier as \"ws_DA_In_N_Doss_DAS\",
1316 '' as \"ws_DA_In_Sigle\",
1317 instruction.etat as \"ws_DA_In_Decision\",
1318 dossier.date_depot as \"ws_DA_In_Dte_Depot_Dem\",
1319 dossier.terrain_adresse_voie_numero as \"ws_DA_In_N_Voie\",
1320 '' as \"ws_DA_In_Type_Voie\",
1321 dossier.terrain_adresse_voie as \"ws_DA_In_Adresse1\",
1322 dossier.terrain_adresse_lieu_dit as \"ws_DA_In_Adresse2\",
1323 dossier.terrain_adresse_code_postal as \"ws_DA_In_CP\",
1324 dossier.terrain_adresse_localite as \"ws_DA_In_Ville\",
1325 dossier.terrain_references_cadastrales as \"ws_DA_In_Nb_Parcelle\",
1326 '' as \"ws_DA_In_Detail_Parcelle\",
1327 CONCAT(donnees_techniques.am_projet_desc,' ',donnees_techniques.co_projet_desc) as \"ws_DA_In_Nature_Trvx\",
1328 '' as \"ws_DA_In_Destination_Trvx\",
1329 dossier_autorisation_type_detaille.code as \"ws_DA_In_Type_Dos_Autoris\",
1330 COALESCE(particulier_nom,personne_morale_raison_sociale) as \"ws_DA_In_Nom_Petition\",
1331 COALESCE(particulier_prenom, personne_morale_denomination) as \"ws_DA_In_Prenom_Petition\",
1332 '' as \"ws_DA_In_Piece_GED\",
1333 instruction.date_retour_signature as \"ws_DA_In_Dte_Signature\"
1334 FROM ".DB_PREFIXE."instruction
1335 LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
1336 instruction.signataire_arrete = signataire_arrete.signataire_arrete
1337 LEFT JOIN ".DB_PREFIXE."dossier ON
1338 instruction.dossier = dossier.dossier
1339 LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur ON
1340 lien_dossier_demandeur.dossier = dossier.dossier
1341 LEFT JOIN ".DB_PREFIXE."demandeur ON
1342 lien_dossier_demandeur.demandeur = demandeur.demandeur
1343 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type ON
1344 dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1345 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille ON
1346 dossier_instruction_type.dossier_autorisation_type_detaille =
1347 dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1348 LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
1349 donnees_techniques.dossier_instruction = dossier.dossier
1350 WHERE instruction.instruction = ".$this->valF['instruction'];
1351 $resArrete = $this->db->query($sqlArrete);
1352 $this->f->addToLog("triggermodifierapres(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
1353 if ( database::isError($resArrete)){
1354 die();
1355 }
1356
1357 $rowArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
1358 $msgenque->setArreteInfo($rowArrete);
1359 $msgenque->enqueueMessage($msgenque::$ARRETE_ENVOI);
1360 }
1361 }
1362
1363 // Mise à jour des données du dossier d'autorisation
1364 require_once "../obj/dossier_autorisation.class.php";
1365 $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($this->valF['dossier']), $this->db, DEBUG);
1366 $da->majDossierAutorisation();
1367 }
1368
1369 function triggersupprimer($id,&$db,$val,$DEBUG) {
1370 /**
1371 * L'objectif ici est de repositionner les valeurs récupérées en
1372 * archive dans le dossier d'instruction avant de supprimer l'événement
1373 * d'instruction
1374 */
1375 // Mise à jour des 4 valeurs modifiées par l'action
1376 $valF['delai'] = $val['archive_delai'];
1377 $valF['accord_tacite'] = $val['archive_accord_tacite'];
1378 $valF['etat'] = $val['archive_etat'];
1379 if ($val['archive_avis'] != '') {
1380 $valF['avis_decision'] = $val['archive_avis'];
1381 } else {
1382 $valF['avis_decision'] = NULL;
1383 }
1384 // Mise à jour des 10 dates avec la valeur présente dans le formulaire
1385 // de suppression. Si la valeur de la date est vide alors on fixe
1386 // à la valeur NULL
1387 //
1388 if ($val['archive_date_complet'] != '') {
1389 $valF['date_complet'] = $val['archive_date_complet'];
1390 } else {
1391 $valF['date_complet'] = NULL;
1392 }
1393 if ($val['archive_date_dernier_depot'] != '') {
1394 $valF['date_dernier_depot'] = $val['archive_date_dernier_depot'];
1395 } else {
1396 $valF['date_dernier_depot'] = NULL;
1397 }
1398 if ($val['archive_date_rejet'] != '') {
1399 $valF['date_rejet'] = $val['archive_date_rejet'];
1400 } else {
1401 $valF['date_rejet'] = NULL;
1402 }
1403 if ($val['archive_date_limite'] != '') {
1404 $valF['date_limite'] = $val['archive_date_limite'];
1405 } else {
1406 $valF['date_limite'] = NULL;
1407 }
1408 if ($val['archive_date_notification_delai'] != '') {
1409 $valF['date_notification_delai'] = $val['archive_date_notification_delai'];
1410 } else {
1411 $valF['date_notification_delai'] = NULL;
1412 }
1413 if ($val['archive_date_decision'] != '') {
1414 $valF['date_decision'] = $val['archive_date_decision'];
1415 } else {
1416 $valF['date_decision'] = NULL;
1417 }
1418 if ($val['archive_date_validite'] != '') {
1419 $valF['date_validite'] = $val['archive_date_validite'];
1420 } else {
1421 $valF['date_validite'] = NULL;
1422 }
1423 if ($val['archive_date_achevement'] != '') {
1424 $valF['date_achevement'] = $val['archive_date_achevement'];
1425 } else {
1426 $valF['date_achevement'] = NULL;
1427 }
1428 if ($val['archive_date_chantier'] != '') {
1429 $valF['date_chantier'] = $val['archive_date_chantier'];
1430 } else {
1431 $valF['date_chantier'] = NULL;
1432 }
1433 if ($val['archive_date_conformite'] != '') {
1434 $valF['date_conformite'] = $val['archive_date_conformite'];
1435 } else {
1436 $valF['date_conformite'] = NULL;
1437 }
1438 if ($val['archive_incompletude'] != '') {
1439 $valF['incompletude'] = $val['archive_incompletude'];
1440 } else {
1441 $valF['incompletude'] = NULL;
1442 }
1443 if ($val['archive_evenement_suivant_tacite'] != '') {
1444 $valF['evenement_suivant_tacite'] = $val['archive_evenement_suivant_tacite'];
1445 } else {
1446 $valF['evenement_suivant_tacite'] = NULL;
1447 }
1448 if ($val['archive_evenement_suivant_tacite_incompletude'] != '') {
1449 $valF['evenement_suivant_tacite_incompletude'] = $val['archive_evenement_suivant_tacite_incompletude'];
1450 } else {
1451 $valF['evenement_suivant_tacite_incompletude'] = NULL;
1452 }
1453 if ($val['archive_etat_pendant_incompletude'] != '') {
1454 $valF['etat_pendant_incompletude'] = $val['archive_etat_pendant_incompletude'];
1455 } else {
1456 $valF['etat_pendant_incompletude'] = NULL;
1457 }
1458 if ($val['archive_date_limite_incompletude'] != '') {
1459 $valF['date_limite_incompletude'] = $val['archive_date_limite_incompletude'];
1460 } else {
1461 $valF['date_limite_incompletude'] = NULL;
1462 }
1463 if ($val['archive_delai_incompletude'] != '') {
1464 $valF['delai_incompletude'] = $val['archive_delai_incompletude'];
1465 } else {
1466 $valF['delai_incompletude'] = NULL;
1467 }
1468 if ($val['archive_autorite_competente'] != '') {
1469 $valF['autorite_competente'] = $val['archive_autorite_competente'];
1470 } else {
1471 $valF['autorite_competente'] = NULL;
1472 }
1473 // On met à jour le dossier
1474 $cle = " dossier='".$val['dossier']."'";
1475 $res = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1476 $this->addToLog("triggersupprimer(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1477 if (database::isError($res)) {
1478 die($res->getMessage());
1479 }
1480 // Affichage d'informations à l'utilisateur
1481 $this->addToMessage(_("Suppression de l'instruction")." [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1482
1483 // Mise à jour de la demande si un récépissé d'instruction correspond à l'instruction à supprimer
1484 }
1485
1486 function triggersupprimerapres($id,&$db,$val,$DEBUG) {
1487
1488 // Mise à jour des données du dossier d'autorisation
1489 require_once "../obj/dossier_autorisation.class.php";
1490 $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($val["dossier"]), $this->db, DEBUG);
1491 $da->majDossierAutorisation();
1492 }
1493
1494 // =============================================
1495 // calcul de date avec ajout de mois (delais)
1496 // [add months (delay) and calculation final date]
1497 // LIMITE DE LA FONCTION si delai >24 MOIS
1498 // [limit : delay < 24 month]
1499 // =============================================
1500 function moisdate($date,$delaimois) {
1501 $temp = explode("-" , $date);
1502 $jour = (int) $temp[2];
1503 $mois = (int) $temp[1];
1504 $annee = (int) $temp[0];
1505 // calcul si delai superieur à 12 (limite 24) [delay > 24 month]
1506 if($delaimois>=12){
1507 $delaimois=$delaimois-12;
1508 $annee=$annee+1;
1509 }
1510 if($delaimois>=12){
1511 $delaimois=$delaimois-12;
1512 $annee=$annee+1;
1513 }
1514 // mois
1515 $mois=$mois+$delaimois;
1516 // calcul mois annee [calculation number of years if > 12 month]
1517 // nb de mois > à 12
1518 if ($mois>12){
1519 $mois=$mois-12;
1520 $annee=$annee+1;
1521 }
1522 // Calcul du nombre de jours dans le mois sélectionné [calculation number of days]
1523 switch($mois) {
1524 case "2":
1525 if ($annee % 4 == 0 && $annee % 100 != 0 || $annee % 400 == 0)
1526 $jourmax = 29;
1527 else
1528 $jourmax = 28;
1529 break;
1530 case "4":
1531 case "6":
1532 case "9":
1533 case "11":
1534 $jourmax = 30;
1535 break;
1536 default:
1537 $jourmax = 31;
1538 }
1539 if ($jour > $jourmax)
1540 $jour = $jourmax;
1541 //$dateretour=$annee."-".$mois."-".$jour;
1542 return $annee."-".$mois."-".$jour ;
1543 }
1544
1545 // Vérifie la restriction sur l'événement
1546 function verifier($val = array(), &$db, $DEBUG){
1547 parent::verifier($val, $db, $DEBUG);
1548
1549 if ( isset($val['evenement']) && is_numeric($val['evenement'])){
1550 //Récupère la restriction
1551 $sql= "SELECT
1552 restriction
1553 FROM
1554 ".DB_PREFIXE."evenement
1555 WHERE
1556 evenement =".$val['evenement'];
1557
1558 $res = $db->query($sql);
1559 $this->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
1560 if (database::isError($res)) {
1561 die($res->getMessage());
1562 }
1563 $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
1564
1565 //Test qu'une restriction est présente
1566 if ( isset($row['restriction']) && $row['restriction'] != "" ){
1567
1568 $restriction = $row['restriction'];
1569
1570 //Test si la restriction est valide
1571 if ( !$this->restrictionIsValid($restriction) ){
1572
1573 $this->correct=false;
1574 $this->addToMessage(_("Restriction non valide"));
1575 }
1576 else {
1577
1578 $this->correct = true;
1579 }
1580
1581 // Liste des opérateurs possible
1582 $operateurs = array(">=", "<=", "+", "-");
1583
1584 // Supprime tous les espaces de la chaîne de caractère
1585 $restriction = str_replace(' ', '', $restriction);
1586
1587 // Met des espace avant et après les opérateurs puis transforme la
1588 // chaine en un tableau
1589 $tabRestriction = str_replace($operateurs, " ", $restriction);
1590 // Tableau des champ
1591 $tabRestriction = explode(" ", $tabRestriction);
1592 // Supprime les numériques du tableau
1593 foreach ($tabRestriction as $key => $value) {
1594 if (is_numeric($value)) {
1595 unset($tabRestriction[$key]);
1596 }
1597 }
1598
1599 // Vérifie les champs utilisés pour la restriction
1600 $check_field_exist = $this->f->check_field_exist($tabRestriction, 'instruction');
1601 if ($check_field_exist !== true) {
1602
1603 // Liste des champs en erreur
1604 $string_error_fields = implode(", ", $check_field_exist);
1605
1606 // Message d'erreur
1607 $error_message = _("Le champ %s n'est pas utilisable pour le champ %s");
1608 if (count($check_field_exist) > 1) {
1609 $error_message = _("Les champs %s ne sont pas utilisable pour le champ %s");
1610 }
1611
1612 // Affiche l'erreur
1613 $this->correct=false;
1614 $this->addToMessage(sprintf($error_message, $string_error_fields, _("restriction")));
1615 $this->addToMessage(_("Veuillez contacter votre administrateur."));
1616 }
1617 }
1618
1619 }
1620 if(!$this->updateDate("date_envoi_signature")) {
1621 return false;
1622 }
1623 if(!$this->updateDate("date_retour_signature")) {
1624 return false;
1625 }
1626 if(!$this->updateDate("date_envoi_rar")) {
1627 return false;
1628 }
1629 if(!$this->updateDate("date_retour_rar")) {
1630 return false;
1631 }
1632 if(!$this->updateDate("date_envoi_controle_legalite")) {
1633 return false;
1634 }
1635 if(!$this->updateDate("date_retour_controle_legalite")) {
1636 return false;
1637 }
1638
1639 }
1640
1641 /**
1642 * Méthode permettant de récupérer toutes les valeurs de l'événement
1643 * sélectionné après validation du formulaire d'instruction
1644 *
1645 * @return array() veleurs de l'événement lié
1646 */
1647
1648 private function getValEvenement() {
1649 if(!empty($this->valEvenement)) {
1650 return $this->valEvenement;
1651 } else {
1652 $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1653 WHERE evenement=".$this->valF['evenement'];
1654 $res = $this->db->query($sql);
1655 $this->addToLog("getValEvenement(): db->query(\"".$sql."\");", VERBOSE_MODE);
1656 if (database::isError($res)) {
1657 die($res->getMessage());
1658 }
1659 $this->valEvenement = $res->fetchRow(DB_FETCHMODE_ASSOC);
1660 return $this->valEvenement;
1661 }
1662 }
1663
1664 /**
1665 * Méthode permettant de savoir si le dossier lié à l'instruction à le flag
1666 * incompletude à true après validation du formulaire d'instruction
1667 *
1668 * @return boolean
1669 */
1670 private function dossierIncomplet() {
1671 $sql = "SELECT incompletude FROM ".DB_PREFIXE."dossier
1672 WHERE dossier='".$this->valF['dossier']."'";
1673 $incompletude = $this->db->getOne($sql);
1674 $this->addToLog("dossierIncomplet(): db->query(\"".$sql."\");", VERBOSE_MODE);
1675 if (database::isError($incompletude)) {
1676 die($incompletude->getMessage());
1677 }
1678 if ($incompletude == 't') {
1679 return true;
1680 } else {
1681 return false;
1682 }
1683 }
1684
1685 /**
1686 * Finalisation des documents.
1687 * @param string $champ champ du fichier à finaliser
1688 * @param booleen $status permet de définir si on finalise ou définalise
1689 * @param string $sousform permet de savoir si se trouve dans un sousformulaire (passé au javascript)
1690 */
1691 function finaliser( $champ = '', $status, $sousform, $retourformulaire){
1692
1693 //Si on finalise le document
1694 if ( $status == 1 ){
1695
1696 //Génération du PDF
1697 $_GET['output'] = "string";
1698 $f = $this->f;
1699 include '../app/pdf_instruction.php';
1700
1701 //Métadonnées du document
1702 $metadata = array(
1703 'filename' => 'instruction_'.$idx.'.pdf',
1704 'mimetype' => 'application/pdf',
1705 'size' => strlen($pdf_output)
1706 );
1707
1708 // Récupération des métadonnées calculées après validation
1709 $spe_metadata = $this->getMetadata("om_fichier_instruction");
1710
1711 $metadata = array_merge($metadata, $spe_metadata);
1712 //Si le document a déjà été finalisé
1713 //on met à jour le document mais pas son uid
1714 if ( $this->getVal("om_fichier_instruction") != '' ){
1715 $uid = $this->f->storage->update(
1716 $this->getVal("om_fichier_instruction"), $pdf_output, $metadata);
1717 }
1718 //Sinon, on joute le document et on récupère son uid
1719 else {
1720 //Stockage du PDF
1721 $uid = $this->f->storage->create($pdf_output, $metadata);
1722 }
1723 }
1724 else {
1725 //Récupération de l'uid du document finalisé
1726 $uid = $this->getVal("om_fichier_instruction");
1727
1728 //On dé-finalise avant de finaliser
1729 if ( $uid == '' ){
1730 return -1;
1731 }
1732 }
1733
1734 //Mise à jour des données
1735 if ( $uid != '' ){
1736 // Logger
1737 $this->addToLog("finaliser() - begin", EXTRA_VERBOSE_MODE);
1738 // Recuperation de la valeur de la cle primaire de l'objet
1739 if($this->getVal($this->clePrimaire) != '')
1740 $id = $this->getVal($this->clePrimaire);
1741 else
1742 $id=$this->id;
1743
1744 $actions = array();
1745 //Tableau contenant le lien vers le PDF et lien du portlet pour la mise
1746 //à jour de l'interface
1747 if ( $status == 0 ){
1748 $lien = '../app/pdf_instruction.php?idx='.$id;
1749
1750 //Ajout des actions
1751 //Si l'utilisateur a le droit de modifier l'objet
1752 if ( $this->f->isAccredited('instruction') ||
1753 $this->f->isAccredited('instruction_modifier') ){
1754
1755 $actions["modifier"] = ($sousform!='')?
1756 '<li><a href="#" onclick="ajaxIt(\'instruction\',
1757 \'../scr/sousform.php?obj=instruction&amp;action=1&amp;idx='.
1758 $this->getVal($this->clePrimaire).
1759 '&amp;premiersf=0&amp;trisf=&amp;retourformulaire='.$retourformulaire.'&amp;idxformulaire='.
1760 $this->getVal("dossier").
1761 '&amp;retour=form\');">
1762 <span class="om-prev-icon om-icon-16 edit-16" title="'.
1763 _('Modifier').'">'.
1764 _('Modifier').
1765 '</span></a></li>':
1766 '<li>
1767 <a href="form.php?obj=instruction&amp;action=1'.'&amp;idx='.
1768 $this->getVal($this->clePrimaire).
1769 '&amp;premier=&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=form">
1770 <span class="om-prev-icon om-icon-16 edit-16" title="'.
1771 _('Modifier').'">'.
1772 _('Modifier').
1773 '</span></a></li>';
1774 }
1775 //Si l'utilisateur a le droit de supprimer l'objet
1776 if ( $this->f->isAccredited('instruction') ||
1777 $this->f->isAccredited('instruction_supprimer') ){
1778
1779 $actions["supprimer"] = ($sousform!='')?
1780 '<li><a href="#" onclick="ajaxIt(\'instruction\',
1781 \'../scr/sousform.php?obj=instruction&amp;action=2&amp;idx='.
1782 $this->getVal($this->clePrimaire).
1783 '&amp;premiersf=0&amp;trisf=&amp;retourformulaire='.$retourformulaire.'&amp;idxformulaire='.
1784 $this->getVal("dossier").
1785 '&amp;retour=form\');">
1786 <span class="om-prev-icon om-icon-16 delete-16" title="'.
1787 _('Supprimer').'">'.
1788 _('Supprimer').
1789 '</span></a></li>':
1790 '<li>
1791 <a href="form.php?obj=instruction&amp;action=1'.'&amp;idx='.
1792 $this->getVal($this->clePrimaire).
1793 '&amp;premier=&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=form">
1794 <span class="om-prev-icon om-icon-16 delete-16" title="'.
1795 _('Supprimer').'">'.
1796 _('Supprimer').
1797 '</span></a></li>';
1798 }
1799 }
1800 else {
1801 $lien = '../spg/file.php?obj=instruction&'.
1802 'champ=om_fichier_instruction&id='.$id;
1803 }
1804
1805 $retour = array(
1806 "portlet"=> "<a href=\"#\" onclick=\"finalizeDocument(".
1807 $id.", 'instruction', '".$sousform."', ".(($status==0)?1:0).")\">
1808 <span class=\"om-prev-icon om-icon-16 om-icon-fix "
1809 .(($status==1)?"de":"")."finalise\" title=\"".
1810 (($status==1)?_("Reprendre la redaction du document"):_("Finaliser le document"))."\">".
1811 (($status==1)?_("Reprendre la redaction du document"):_("Finaliser le document"))."</span>
1812 </a>",
1813 "pdf" => $lien,
1814 "actions" => $actions
1815 );
1816
1817 foreach ( $this->champs as $key=>$value )
1818 $val[$value] = $this->val[$key];
1819 $val['date_evenement']=$this->dateDBToForm($val['date_evenement']);
1820 $val['archive_date_complet']=$this->dateDBToForm($val['archive_date_complet']);
1821 $val['archive_date_rejet']=$this->dateDBToForm($val['archive_date_rejet']);
1822 $val['archive_date_limite']=$this->dateDBToForm($val['archive_date_limite']);
1823 $val['archive_date_notification_delai']=$this->dateDBToForm($val['archive_date_notification_delai']);
1824 $val['archive_date_decision']=$this->dateDBToForm($val['archive_date_decision']);
1825 $val['archive_date_validite']=$this->dateDBToForm($val['archive_date_validite']);
1826 $val['archive_date_achevement']=$this->dateDBToForm($val['archive_date_achevement']);
1827 $val['archive_date_chantier']=$this->dateDBToForm($val['archive_date_chantier']);
1828 $val['archive_date_conformite']=$this->dateDBToForm($val['archive_date_conformite']);
1829 $val['archive_date_dernier_depot']=$this->dateDBToForm($val['archive_date_dernier_depot']);
1830 $val['archive_date_limite_incompletude']=$this->dateDBToForm($val['archive_date_limite_incompletude']);
1831 $val['date_finalisation_courrier']=$this->dateDBToForm($val['date_finalisation_courrier']);
1832 $val['date_envoi_signature']=$this->dateDBToForm($val['date_envoi_signature']);
1833 $val['date_retour_signature']=$this->dateDBToForm($val['date_retour_signature']);
1834 $val['date_envoi_rar']=$this->dateDBToForm($val['date_envoi_rar']);
1835 $val['date_retour_rar']=$this->dateDBToForm($val['date_retour_rar']);
1836 $val['date_envoi_controle_legalite']=$this->dateDBToForm($val['date_envoi_controle_legalite']);
1837 $val['date_retour_controle_legalite']=$this->dateDBToForm($val['date_retour_controle_legalite']);
1838
1839 $this->setvalF($val);
1840
1841 // Verification de la validite des donnees
1842 $this->verifier($this->val, $this->db, DEBUG);
1843 // Verification du verrou
1844 $this->testverrou();
1845 // Si les verifications precedentes sont correctes, on procede a
1846 // la modification, sinon on ne fait rien et on retourne une erreur
1847 if ($this->correct) {
1848 // Execution du trigger 'before' specifique au MODE 'update'
1849 $this->triggermodifier( $id, $this->db, $this->val, DEBUG);
1850 $valF = array(
1851 "om_final_instruction"=> ($status==1)?TRUE:FALSE,
1852 "om_fichier_instruction"=>$uid,
1853 "date_finalisation_courrier"=>date('Y-m-d'));
1854 // Execution de la requête de modification des donnees de l'attribut
1855 // valF de l'objet dans l'attribut table de l'objet
1856 $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF,
1857 DB_AUTOQUERY_UPDATE, $this->getCle($id));
1858 $this->addToLog("finaliser() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id)."\")", VERBOSE_MODE);
1859 // Si une erreur survient
1860 if (database::isError($res)) {
1861 // Appel de la methode de recuperation des erreurs
1862 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
1863 } else {
1864 // Log
1865 $this->addToLog(_("Requete executee"), VERBOSE_MODE);
1866 // Log
1867 $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
1868 $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
1869 $message .= "[&nbsp;".$this->db->affectedRows()."&nbsp;";
1870 $message .= _("enregistrement(s) mis a jour")."&nbsp;]";
1871 $this->addToLog($message, VERBOSE_MODE);
1872 // Mise en place du verrou pour ne pas finaliser plusieurs fois
1873 // le meme document
1874 $this->verrouille();
1875 // Execution du trigger 'after' specifique au MODE 'update'
1876 //$this->triggermodifierapres($id, $this->db, $val, DEBUG);
1877
1878 return $retour;
1879 }
1880 } else {
1881 // Message d'echec (saut d'une ligne supplementaire avant le
1882 // message pour qu'il soit mis en evidence)
1883 $this->addToLog(_("Finalisation non enregistree"));
1884 return -1;
1885 }
1886 }
1887 // Si le document n'a pas été stocké
1888 else{
1889 return -1;
1890 }
1891 }
1892
1893 /**
1894 * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
1895 * @return string numéro de dossier d'instruction
1896 */
1897 protected function getDossier() {
1898 if(empty($this->specificMetadata)) {
1899 $this->getSpecificMetadata();
1900 }
1901 return $this->specificMetadata->dossier;
1902 }
1903 /**
1904 * Récupération la version du dossier d'instruction à ajouter aux métadonnées
1905 * @return int Version
1906 */
1907 protected function getDossierVersion() {
1908 if(empty($this->specificMetadata)) {
1909 $this->getSpecificMetadata();
1910 }
1911 return $this->specificMetadata->version;
1912 }
1913 /**
1914 * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
1915 * @return string numéro de dossier d'autorisation
1916 */
1917 protected function getNumDemandeAutor() {
1918 if(empty($this->specificMetadata)) {
1919 $this->getSpecificMetadata();
1920 }
1921 return $this->specificMetadata->dossier_autorisation;
1922 }
1923 /**
1924 * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
1925 * @return date de la demande initiale
1926 */
1927 protected function getAnneemoisDemandeAutor() {
1928 if(empty($this->specificMetadata)) {
1929 $this->getSpecificMetadata();
1930 }
1931 return $this->specificMetadata->date_demande_initiale;
1932 }
1933 /**
1934 * Récupération du type de dossier d'instruction à ajouter aux métadonnées
1935 * @return string type du dossier d'instruction
1936 */
1937 protected function getTypeInstruction() {
1938 if(empty($this->specificMetadata)) {
1939 $this->getSpecificMetadata();
1940 }
1941 return $this->specificMetadata->dossier_instruction_type;
1942 }
1943 /**
1944 * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
1945 * @return string avis
1946 */
1947 protected function getStatutAutorisation() {
1948 if(empty($this->specificMetadata)) {
1949 $this->getSpecificMetadata();
1950 }
1951 return $this->specificMetadata->statut;
1952 }
1953 /**
1954 * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
1955 * @return string type du dossier d'autorisation
1956 */
1957 protected function getTypeAutorisation() {
1958 if(empty($this->specificMetadata)) {
1959 $this->getSpecificMetadata();
1960 }
1961 return $this->specificMetadata->dossier_autorisation_type;
1962 }
1963 /**
1964 * Récupération de la date d'ajout de document à ajouter aux métadonnées
1965 * @return date de l'évènement
1966 */
1967 protected function getDateEvenementDocument() {
1968 return date("Y-m-d");
1969 }
1970 /**
1971 * Récupération du groupe d'instruction à ajouter aux métadonnées
1972 * @return string Groupe d'instruction
1973 */
1974 protected function getGroupeInstruction() {
1975 if(empty($this->specificMetadata)) {
1976 $this->getSpecificMetadata();
1977 }
1978 return $this->specificMetadata->groupe_instruction;
1979 }
1980 /**
1981 * Récupération du libellé du type du document à ajouter aux métadonnées
1982 * @return string Groupe d'instruction
1983 */
1984 protected function getTitle() {
1985
1986 // Récupère le champ événement
1987 if (isset($this->valF["evenement"]) AND $this->valF["evenement"] != "") {
1988 $evenement = $this->valF["evenement"];
1989 } else {
1990 $evenement = $this->getVal("evenement");
1991 }
1992
1993 // Requête sql
1994 $sql = "SELECT libelle FROM ".DB_PREFIXE."evenement
1995 WHERE evenement=".$evenement;
1996 $evenement_libelle = $this->db->getOne($sql);
1997 $this->addToLog("getTitle(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
1998 if (database::isError($evenement_libelle)) {
1999 die();
2000 }
2001
2002 // Retourne le libelle de l'événement
2003 return $evenement_libelle;
2004 }
2005
2006 /**
2007 * Cette méthode permet de stocker en attribut toutes les métadonnées
2008 * nécessaire à l'ajout d'un document.
2009 */
2010 public function getSpecificMetadata() {
2011 if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
2012 $dossier = $this->valF["dossier"];
2013 } else {
2014 $dossier = $this->getVal("dossier");
2015 }
2016 //Requête pour récupérer les informations essentiels sur le dossier d'instruction
2017 $sql = "SELECT dossier.dossier as dossier,
2018 dossier_autorisation.dossier_autorisation as dossier_autorisation,
2019 to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
2020 dossier_instruction_type.code as dossier_instruction_type,
2021 etat_dossier_autorisation.libelle as statut,
2022 dossier_autorisation_type.code as dossier_autorisation_type,
2023 groupe.code as groupe_instruction
2024 FROM ".DB_PREFIXE."dossier
2025 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
2026 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2027 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
2028 ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
2029 LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
2030 ON dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
2031 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
2032 ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2033 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
2034 ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
2035 LEFT JOIN ".DB_PREFIXE."groupe
2036 ON dossier_autorisation_type.groupe = groupe.groupe
2037 WHERE dossier.dossier = '".$dossier."'";
2038 $res = $this->db->query($sql);
2039 $this->f->addToLog("getSpecificMetadata() : db->query(".$sql.")", VERBOSE_MODE);
2040 if ( database::isError($res)){
2041 die();
2042 }
2043
2044 //Le résultat est récupéré dans un objet
2045 $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
2046
2047 //Si il y a un résultat
2048 if ($row !== null) {
2049
2050 //Génération du numéro de version
2051 $sql = "SELECT
2052 count(*)
2053 FROM
2054 ".DB_PREFIXE."dossier
2055 LEFT JOIN
2056 ".DB_PREFIXE."dossier_autorisation
2057 ON
2058 dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
2059 LEFT JOIN
2060 ".DB_PREFIXE."dossier_instruction_type
2061 ON
2062 dossier_instruction_type.dossier_instruction_type = dossier.dossier_instruction_type
2063 WHERE
2064 dossier_autorisation.dossier_autorisation = '".$row->dossier_autorisation."'
2065 AND
2066 dossier_instruction_type.code = '".$row->dossier_instruction_type."'";
2067 $row->version = $this->db->getOne($sql);
2068 $this->f->addToLog("getSpecificMetadata(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
2069 if ( database::isError($row->version)){
2070 $this->f->addToError("", $row->version, $row->version);
2071 return false;
2072 }
2073
2074 //Formatage du numéro de version
2075 $row->version = str_pad($row->version, 2, "0", STR_PAD_LEFT);
2076
2077 //Alors on créé l'objet dossier_instruction
2078 $this->specificMetadata = $row;
2079
2080 }
2081 }
2082
2083 /**
2084 * Retourne le statut du dossier d'instruction
2085 * @param string $idx Identifiant du dossier d'instruction
2086 * @return string Le statut du dossier d'instruction
2087 */
2088 function getStatutAutorisationDossier($idx){
2089
2090 $statut = '';
2091
2092 //Si l'identifiant du dossier d'instruction fourni est correct
2093 if ( $idx != '' ){
2094
2095 //On récupère le statut de l'état du dossier à partir de l'identifiant du
2096 //dossier
2097 $sql = "SELECT etat.statut
2098 FROM ".DB_PREFIXE."dossier
2099 LEFT JOIN
2100 ".DB_PREFIXE."etat
2101 ON
2102 dossier.etat = etat.etat
2103 WHERE dossier ='".$idx."'";
2104 $statut = $this->db->getOne($sql);
2105 $this->f->addToLog("getStatutAutorisationDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
2106 if ( database::isError($statut)){
2107 die();
2108 }
2109 }
2110 return $statut;
2111 }
2112
2113 /**
2114 * Récupère les données du dossier
2115 * @return array
2116 */
2117 function get_dossier_actual() {
2118
2119 // Initialisation de la valeur de retour
2120 $return = array();
2121
2122 // Récupération de toutes les valeurs du dossier d'instruction en cours
2123 $sql = "SELECT * FROM ".DB_PREFIXE."dossier
2124 WHERE dossier='".$this->valF['dossier']."'";
2125 $res = $this->db->query($sql);
2126 $this->addToLog("get_dossier_actual(): db->query(\"".$sql."\");", VERBOSE_MODE);
2127 $this->f->isDatabaseError($res);
2128
2129 //
2130 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
2131
2132 // Récupération de la valeur actuelle du délai, de l'accord tacite,
2133 // de l'état et de l'avis du dossier d'instruction
2134 $return['archive_delai']=$row['delai'];
2135 $return['archive_accord_tacite']=$row['accord_tacite'];
2136 $return['archive_etat']=$row['etat'];
2137 $return['archive_avis']=$row['avis_decision'];
2138 // Récupération de la valeur actuelle des 9 dates du dossier
2139 // d'instruction
2140 $return['archive_date_complet']=$row['date_complet'];
2141 $return['archive_date_dernier_depot']=$row['date_dernier_depot'];
2142 $return['archive_date_rejet']= $row['date_rejet'];
2143 $return['archive_date_limite']= $row['date_limite'];
2144 $return['archive_date_notification_delai']= $row['date_notification_delai'];
2145 $return['archive_date_decision']= $row['date_decision'];
2146 $return['archive_date_validite']= $row['date_validite'];
2147 $return['archive_date_achevement']= $row['date_achevement'];
2148 $return['archive_date_chantier']= $row['date_chantier'];
2149 $return['archive_date_conformite']= $row['date_conformite'];
2150 $return['archive_incompletude']= $row['incompletude'];
2151 $return['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];
2152 $return['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];
2153 $return['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];
2154 $return['archive_date_limite_incompletude']= $row['date_limite_incompletude'];
2155 $return['archive_delai_incompletude']= $row['delai_incompletude'];
2156 $return['archive_autorite_competente']= $row['autorite_competente'];
2157 $return['duree_validite']= $row['duree_validite'];
2158 }
2159
2160 // Retour de la fonction
2161 return $return;
2162
2163 }
2164
2165 }// fin classe
2166 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26