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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1642 - (show annotations)
Wed Apr 10 17:11:04 2013 UTC (11 years, 9 months ago) by nhaye
File size: 49460 byte(s)
Finalisation de la méthode de mise à jour des données du DA
Nettoyage des anciennes méthodes de maj des données des DA

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
36 function instruction($id, &$db, $debug) {
37 $this->constructeur($id, $db, $debug);
38 }
39
40 // {{{ Gestion de la confidentialité des données spécifiques
41
42 /**
43 * Surcharge pour gérer les actions disponibles dans le portlet
44 */
45 function checkAccessibility() {
46 //
47 parent::checkAccessibility();
48 // Si l'utilisateur est un intructeur qui ne correspond pas à la
49 // division du dossier
50 if ($this->f->isUserInstructeur()
51 && isset($this->f->om_utilisateur["division"])
52 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
53 //
54 $this->actions_sup = array();
55 $this->setParameter("actions", array());
56 }
57 // Si une action 'lu' est présente et que le champ lu est à true
58 // on supprime l'action
59 if (isset($this->actions_sup["lu"])
60 && isset($this->val[array_search("lu", $this->champs)])
61 && $this->val[array_search("lu", $this->champs)]== "t") {
62 unset($this->actions_sup["lu"]);
63 }
64 }
65
66 /**
67 * Cette methode est à surcharger elle permet de tester dans chaque classe
68 * des droits des droits spécifiques en fonction des données
69 */
70 function canAccess() {
71 // Si l'utilisateur est un intructeur qui ne correspond pas à la
72 // division du dossier
73 if ($this->f->isUserInstructeur()
74 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
75 && $this->getParameter("maj") != 3) {
76 //
77 return false;
78 }
79 //
80 return true;
81 }
82
83 /**
84 * Cette méthode permet de récupérer la division d'un dossier
85 */
86 function getDivisionFromDossier() {
87 //
88 if (!isset($this->val[array_search("dossier", $this->champs)])) {
89 return NULL;
90 }
91 //
92 $sql = "select division from ".DB_PREFIXE."dossier ";
93 $sql .= " where dossier='".$this->val[array_search("dossier", $this->champs)]."'";
94 //
95 $division = $this->db->getOne($sql);
96 $this->addToLog("getDivisionFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
97 database::isError($division);
98 //
99 return $division;
100 }
101
102 // }}}
103
104 function setType(&$form, $maj) {
105 //
106 parent::setType($form, $maj);
107 // On cache tous les champs
108 // XXX
109 $form->setType('complement3', 'hidden');
110 $form->setType('bible3', 'hidden');
111 $form->setType('complement4', 'hidden');
112 $form->setType('bible4', 'hidden');
113 $form->setType('complement5', 'hidden');
114 $form->setType('bible5', 'hidden');
115 $form->setType('complement6', 'hidden');
116 $form->setType('bible6', 'hidden');
117 $form->setType('complement7', 'hidden');
118 $form->setType('bible7', 'hidden');
119 $form->setType('complement8', 'hidden');
120 $form->setType('bible8', 'hidden');
121 $form->setType('complement9', 'hidden');
122 $form->setType('bible9', 'hidden');
123 $form->setType('complement10', 'hidden');
124 $form->setType('bible10', 'hidden');
125 $form->setType('complement11', 'hidden');
126 $form->setType('bible11', 'hidden');
127 $form->setType('complement12', 'hidden');
128 $form->setType('bible12', 'hidden');
129 $form->setType('complement13', 'hidden');
130 $form->setType('bible13', 'hidden');
131 $form->setType('complement14', 'hidden');
132 $form->setType('bible14', 'hidden');
133 $form->setType('complement15', 'hidden');
134 $form->setType('bible15', 'hidden');
135 //
136 $form->setType('delai', 'hidden');
137 $form->setType('etat', 'hidden');
138 $form->setType('accord_tacite', 'hidden');
139 $form->setType('action', 'hidden');
140 $form->setType('delai_notification', 'hidden');
141 $form->setType('avis_decision', 'hidden');
142 //
143 $form->setType('archive_delai', 'hidden');
144 $form->setType('archive_etat', 'hidden');
145 $form->setType('archive_accord_tacite', 'hidden');
146 $form->setType('archive_avis', 'hidden');
147 $form->setType('archive_date_complet', 'hidden');
148 $form->setType('archive_date_dernier_depot', 'hidden');
149 $form->setType('archive_date_rejet', 'hidden');
150 $form->setType('archive_date_limite', 'hidden');
151 $form->setType('archive_date_notification_delai', 'hidden');
152 $form->setType('archive_date_decision', 'hidden');
153 $form->setType('archive_date_validite', 'hidden');
154 $form->setType('archive_date_achevement', 'hidden');
155 $form->setType('archive_date_conformite', 'hidden');
156 $form->setType('archive_date_chantier', 'hidden');
157 //
158 $form->setType('numero_arrete', 'hidden');
159
160 //
161 if ($maj < 2) { //ajouter et modifier
162 $form->setType('destinataire', 'hidden');
163 $form->setType('lettretype', 'hiddenstatic');
164 $form->setType('complement', 'textarea');
165 $form->setType('complement2', 'textarea');
166 $form->setType('bible_auto', 'httpclick');
167 $form->setType('bible', 'httpclick');
168 $form->setType('bible2', 'httpclick');
169 $form->setType('dossier', 'hidden');
170 $form->setType('libelle', 'hiddenstatic');
171 $form->setType('signataire_arrete','select');
172 $form->setType('date_envoi_signature','datedisabled');
173 $form->setType('date_retour_signature','datedisabled');
174 $form->setType('date_envoi_rar','datedisabled');
175 $form->setType('date_retour_rar','datedisabled');
176 $form->setType('date_envoi_controle_legalite','datedisabled');
177 $form->setType('date_retour_controle_legalite','datedisabled');
178 if($maj==0){ // add
179 $form->setType('instruction', 'hiddenstatic');
180 $form->setType('evenement', 'select');
181 $form->setType('date_evenement', 'date2');
182 }else{ // modify
183 $form->setType('instruction', 'hiddenstatic');
184 $form->setType('evenement', 'selecthiddenstatic');
185 //$form->setType('date_evenement', 'hiddenstaticdate');
186 $form->setType('date_evenement', 'date2');
187 // necessaire pour calcul de date en modification
188 //$form->setType('delai', 'hiddenstatic');
189 }
190 } elseif($maj==2){
191 $form->setType('dossier', 'hidden');
192 $form->setType('bible_auto', 'hidden');
193 $form->setType('bible', 'hidden');
194 $form->setType('bible2', 'hidden');
195 }else {
196 $form->setType('destinataire', 'hidden');
197 $form->setType('dossier', 'hidden');
198 $form->setType('bible_auto', 'hidden');
199 $form->setType('bible', 'hidden');
200 $form->setType('bible2', 'hidden');
201 }
202 }
203
204 function setSelect(&$form, $maj,&$db,$debug) {
205 /**
206 * On ne surcharge pas la méthode parent car une requête sur la table
207 * dossier est mauvaise pour les performances, car la requête qui
208 * concerne evenement est plus complexe que celle générée et car les
209 * champs action, avis_decision et etat ne sont pas utilisés comme des
210 * select
211 */
212 if(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc.php"))
213 include ("../sql/".$db->phptype."/".$this->table.".form.inc.php");
214 elseif(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc"))
215 include ("../sql/".$db->phptype."/".$this->table.".form.inc");
216
217 //// action
218 //$this->init_select($form, $db, $maj, $debug, "action",
219 // $sql_action, $sql_action_by_id, false);
220
221 //// avis_decision
222 //$this->init_select($form, $db, $maj, $debug, "avis_decision",
223 // $sql_avis_decision, $sql_avis_decision_by_id, false);
224
225 //// dossier
226 //$this->init_select($form, $db, $maj, $debug, "dossier",
227 // $sql_dossier, $sql_dossier_by_id, false);
228
229 //// etat
230 //$this->init_select($form, $db, $maj, $debug, "etat",
231 // $sql_etat, $sql_etat_by_id, false);
232
233 //// evenement
234 //$this->init_select($form, $db, $maj, $debug, "evenement",
235 // $sql_evenement, $sql_evenement_by_id, false);
236
237 // signataire_arrete
238 $this->init_select($form, $db, $maj, $debug, "signataire_arrete",
239 $sql_signataire_arrete, $sql_signataire_arrete_by_id, true);
240
241 /**
242 * Gestion du filtre sur les événements de workflow disponibles
243 * On récupère ici en fonction de l'état du dossier d'instruction en
244 * cours et du type du dossier d'instruction en cours la liste
245 * événements disponibles.
246 */
247 if ($maj == 0) {
248 // Récupération des événements par une jointure entre la table dossier
249 // et la table transition et la table evenement et la table
250 // lien_dossier_instruction_type_evenement en fonction de l'identifiant
251 // du dossier d'instruction en cours
252 $sql = "SELECT
253 evenement.evenement,
254 (evenement.libelle||' ['||evenement.action||']') as lib
255 FROM ".DB_PREFIXE."dossier
256 INNER JOIN ".DB_PREFIXE."lien_dossier_instruction_type_evenement
257 ON dossier.dossier_instruction_type=lien_dossier_instruction_type_evenement.dossier_instruction_type
258 INNER JOIN ".DB_PREFIXE."evenement
259 ON evenement.evenement=lien_dossier_instruction_type_evenement.evenement
260 INNER JOIN ".DB_PREFIXE."transition
261 ON evenement.evenement = transition.evenement
262 AND dossier.etat=transition.etat
263 WHERE dossier.dossier='".$this->idxformulaire."'
264 ORDER BY evenement.action";
265 $res = $db->query($sql);
266 $this->addToLog("setSelect(): db->query(\"".$sql."\");", VERBOSE_MODE);
267 if (database::isError($res)) {
268 die($res->getMessage());
269 }
270 // Remplissage du tableau du select
271 $contenu = array(
272 0 => array("",),
273 1 => array(_('choisir')." "._('evenement'),)
274 );
275 while ($row=& $res->fetchRow()) {
276 $contenu[0][] = $row[0];
277 $contenu[1][] = $row[1];
278 }
279 $form->setSelect("evenement", $contenu);
280 } else {
281 $sql = "SELECT
282 (evenement.libelle||' ['||evenement.action||']') as lib
283 FROM ".DB_PREFIXE."evenement
284 WHERE evenement.evenement=".$this->getVal("evenement")."";
285 $res = $db->getone($sql);
286 $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
287 if (database::isError($res)) {
288 die($res->getMessage());
289 }
290 //
291 $contenu = array(
292 0 => array($this->getVal("evenement"),),
293 1 => array($res,)
294 );
295 $form->setSelect("evenement", $contenu);
296 }
297
298 /**
299 * Gesion des liens vers la bible
300 */
301 // lien bible_auto
302 $contenu = array(_("automatique"));
303 $form->setSelect("bible_auto",$contenu);
304 // lien bible1
305 $contenu = array(_("bible"));
306 $form->setSelect("bible",$contenu);
307 // lien bible2
308 $contenu = array(_("bible"));
309 $form->setSelect("bible2",$contenu);
310 }
311
312 function cleSecondaire($id, &$db, $val, $DEBUG) {
313 //
314 parent::cleSecondaire($id, $db, $val, $DEBUG);
315
316 /**
317 * Vérification que l'élément supprimé est le dernier pour pouvoir
318 * remodifier les données de manière itérative.
319 */
320 // Initialisation
321 $dernierevenement = "";
322 // Récupération du dernier élément de la table d'instruction qui
323 // concerne le dossier en cours
324 $sql = "SELECT max(instruction)
325 FROM ".DB_PREFIXE."instruction
326 WHERE dossier ='".$this->idxformulaire."'";
327 $dernierevenement = $db->getOne($sql);
328 $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
329 if (database::isError($dernierevenement)) {
330 die($dernierevenement->getMessage());
331 }
332 // Si on se trouve effectivement sur le dernier evenement d'instruction
333 if ($dernierevenement == $id) {
334 // Alors on valide la suppression
335 $this->correct = true;
336 $this->addToMessage(_('Destruction_chronologique'));
337 } else {
338 // Alors on annule la suppression
339 $this->correct = false;
340 $this->addToMessage(_("Seul le dernier evenement d'instruction peut etre supprime."));
341 }
342 }
343
344 // Vérification de la non modification des dates de suivi
345 function updateDate($champ) {
346 if($this->valF[$champ] != "") {
347 if($this->getVal($champ) != "" AND $this->getVal($champ) != $this->valF[$champ]) {
348 $this->correct = false;
349 $this->addToMessage(_("Les dates de suivis ne peuvent etre modifiees"));
350 }
351 }
352 }
353
354 // Sélectionne le signataire_arrete par défaut
355 function setVal(&$form,$maj,$validation){
356
357 // Ajout
358 if($maj == 0) {
359
360 // Création de la requête
361 $sql = "SELECT signataire_arrete
362 FROM ".DB_PREFIXE."signataire_arrete
363 WHERE defaut IS TRUE";
364
365 // Exécution de la requête
366 $this->f->addToLog("deleteAllLienDossierInstructionTypeEvenementEvenement(): db->query(\"".$sql."\");", VERBOSE_MODE);
367 $res = $this->f->db->query($sql);
368 $this->f->isDatabaseError();
369
370 $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
371
372 if ( isset($row['signataire_arrete']) && is_numeric($row['signataire_arrete'])){
373
374 $form->setVal("signataire_arrete",$row['signataire_arrete']);
375 }
376 }
377 }
378
379 /*Met des valeurs par défaut dans certains des sous-formulaire*/
380 function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){
381 if ($validation==0 and $maj<2) {
382 if ($maj == 0){
383 $form->setVal("destinataire", $idxformulaire);
384 $form->setVal("dossier", $idxformulaire);
385 $form->setVal("date_evenement", date('Y-m-d'));
386 }
387 $form->setVal("bible_auto","bible_auto()");
388 $form->setVal("bible","bible()");
389 $form->setVal("bible2","bible2()");
390 }
391 $this->retourformulaire=$retourformulaire;
392 $this->idxformulaire=$idxformulaire;
393 }
394
395
396 function setLayout(&$form, $maj){
397 if ( $maj < 2 OR $maj == 3 ) {
398 /*Champ sur lequel s'ouvre le bloc 1 */
399 $form->setBloc('evenement','D',"","col_12");
400
401 $form->setFieldset('evenement','D',_('Evenement'));
402 $form->setFieldset('lettretype','F','');
403
404 $form->setBloc('lettretype','F');
405
406 $form->setBloc('date_finalisation_courrier','D',"","col_12");
407
408 $form->setFieldset('date_finalisation_courrier','D',_('Dates'));
409 $form->setBloc('date_finalisation_courrier','D',"","col_6");
410 $form->setBloc('date_envoi_controle_legalite','F');
411
412 $form->setBloc('signataire_arrete','D',"","col_6");
413 $form->setBloc('date_retour_controle_legalite','F');
414 $form->setFieldset('date_retour_controle_legalite','F','');
415
416 $form->setBloc('date_retour_controle_legalite','F');
417
418 $form->setBloc('complement','D',"","col_12");
419 $form->setFieldset('complement','D',_('Complement'));
420 $form->setFieldset('bible','F','');
421 $form->setBloc('bible','F');
422
423 $form->setBloc('complement2','D',"","col_12");
424 $form->setFieldset('complement2','D',_('Complement 2'));
425 $form->setFieldset('bible2','F','');
426 $form->setBloc('bible2','F');
427 }
428 }
429
430 function setLib(&$form, $maj) {
431 //
432 parent::setLib($form, $maj);
433 //
434 $form->setLib('bible_auto', "");
435 $form->setLib('bible', "");
436 $form->setLib('bible2', "");
437 }
438
439 function triggerajouter($id, &$db, $val, $DEBUG) {
440 /**
441 * Le code suivant permet de récupérer des valeurs des tables evenement
442 * et dossier pour les stocker dans l'instruction :
443 * DEPUIS L'EVENEMENT
444 * - action
445 * - delai
446 * - accord_tacite
447 * - etat
448 * - avis_decision
449 * - delai_notification
450 * - lettretype
451 * DEPUIS LE DOSSIER D'INSTRUCTION
452 * - archive_delai
453 * - archive_accord_tacite
454 * - archive_etat
455 * - archive_avis
456 * - date_complet
457 * - date_rejet
458 * - date_limite
459 * - date_notification_delai
460 * - date_decision
461 * - date_validite
462 * - date_achevement
463 * - date_chantier
464 * - date_conformite
465 * Il permet également de stocker la date_depot du dossier d'instruction
466 * dans l'attribut $this->archive_date_depot de la classe.
467 */
468 // Récupération de tous les paramètres de l'événement sélectionné
469 $sql = "SELECT * FROM ".DB_PREFIXE."evenement
470 WHERE evenement=".$this->valF['evenement'];
471 $res = $db->query($sql);
472 $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
473 if (database::isError($res)) {
474 die($res->getMessage());
475 }
476 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
477 // Récupération de l'identifiant de l'action
478 // si une action est paramétrée dans l'événement
479 $this->valF['action'] = NULL;
480 if (isset($row['action']) and !empty($row['action'])) {
481 $this->valF['action']=$row['action'];
482 }
483 // Récupération de la valeur du délai
484 $this->valF['delai'] = $row['delai'];
485 // Récupération de l'identifiant de l'état
486 // si un état est paramétré dans l'événement
487 $this->valF['etat']=NULL;
488 if (isset($row['etat']) and !empty($row['etat'])) {
489 $this->valF['etat']=$row['etat'];
490 }
491 // Récupération de la valeur d'accord tacite
492 $this->valF['accord_tacite']=$row['accord_tacite'];
493 // Récupération de la valeur du délai de notification
494 $this->valF['delai_notification']=$row['delai_notification'];
495 // Récupération de l'identifiant de l'avis
496 // si un avis est paramétré dans l'événement
497 $this->valF['avis_decision'] = NULL;
498 if(isset($row['avis_decision']) and !empty($row['avis_decision'])) {
499 $this->valF['avis_decision']=$row['avis_decision'];
500 }
501 // Récupération de la valeur de la lettre type
502 // Sinon on lui affecte lavaleur par défaut standard
503 if ($row['lettretype'] != "") {
504 $this->valF['lettretype']=$row['lettretype'];
505 } else {
506 $this->valF['lettretype'] = "standard"; // XXX
507 }
508 }
509 // Récupération de toutes les valeurs du dossier d'instruction en cours
510 $sql = "SELECT * FROM ".DB_PREFIXE."dossier
511 WHERE dossier='".$this->valF['dossier']."'";
512 $res = $db->query($sql);
513 $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
514 if (database::isError($res)) {
515 die($res->getMessage());
516 }
517 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
518 // XXX On stocke la date de dépôt actuelle du dossier d'instruction
519 // dans un attribut de la classe
520 $this->archive_date_depot = $row['date_depot'];
521 // Récupération de la valeur actuelle du délai, de l'accord tacite,
522 // de l'état et de l'avis du dossier d'instruction
523 $this->valF['archive_delai']=$row['delai'];
524 $this->valF['archive_accord_tacite']=$row['accord_tacite'];
525 $this->valF['archive_etat']=$row['etat'];
526 $this->valF['archive_avis']=$row['avis_decision'];
527 // Récupération de la valeur actuelle des 9 dates du dossier
528 // d'instruction
529 if ($row['date_complet'] != '') {
530 $this->valF['archive_date_complet']=$row['date_complet'];
531 }
532 if ($row['date_dernier_depot'] != '') {
533 $this->valF['archive_date_dernier_depot']=$row['date_dernier_depot'];
534 }
535 if ($row['date_rejet']!='') {
536 $this->valF['archive_date_rejet']= $row['date_rejet'];
537 }
538 if ($row['date_limite']!='') {
539 $this->valF['archive_date_limite']= $row['date_limite'];
540 }
541 if ($row['date_notification_delai']!='') {
542 $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];
543 }
544 if ($row['date_decision']!='') {
545 $this->valF['archive_date_decision']= $row['date_decision'];
546 }
547 if ($row['date_validite']!='') {
548 $this->valF['archive_date_validite']= $row['date_validite'];
549 }
550 if ($row['date_achevement']!='') {
551 $this->valF['archive_date_achevement']= $row['date_achevement'];
552 }
553 if ($row['date_chantier']!='') {
554 $this->valF['archive_date_chantier']= $row['date_chantier'];
555 }
556 if ($row['date_conformite']!='') {
557 $this->valF['archive_date_conformite']= $row['date_conformite'];
558 }
559 }
560 }
561
562 // Test si une restriction est valide
563 // return boolean
564 function restrictionIsValid($restriction){
565
566 /* Met des espace avant et après les opérateurs puis transforme la chaine en
567 * un tableau */
568 $tabRestriction = str_replace(">="," >= ",
569 str_replace("<="," <= ",
570 str_replace("-"," - ",
571 str_replace("+"," + ",$restriction))));
572 $tabRestriction = explode( " ", $tabRestriction);
573
574 //Variables de résultat
575 $res = array();
576 $i = 0;
577 $comp = "";
578
579
580 //Test que le tableau n'est pas vide
581 if ( count($tabRestriction) > 0 ){
582
583 $res[0] = $this->getRestrictionValue($tabRestriction[0]);
584
585 //Calcul des variables
586 for ( $j = 1 ; $j < count($tabRestriction) ; $j += 2 ) {
587
588 //Variable de comparaison
589 if ( strcmp( ">=", $tabRestriction[$j] ) == 0 ||
590 strcmp( "<=", $tabRestriction[$j]) ==0 ){
591
592 $comp = $tabRestriction[$j];
593 $res[++$i] = $this->getRestrictionValue($tabRestriction[$j+1]);
594 }
595 // Fait l'addition
596 elseif ( strcmp( "+", $tabRestriction[$j]) == 0 ){
597
598 $res[$i] = $this->moisdate( $res[$i], $this->getRestrictionValue($tabRestriction[$j+1]) );
599 }
600 }
601 }
602
603 // Effectue le test
604 if ( strcmp($comp, ">=") == 0 ){
605
606 if ( $res[0] >= $res[1] || $res[0] == "" ){
607
608 return true;
609 }
610 else {
611
612 return false;
613 }
614 }
615 elseif ( strcmp($comp, "<=") == 0 ){
616
617 if ( $res[0] <= $res[1] || $res[1] == "" ){
618
619 return true;
620 }
621 else {
622
623 return false;
624 }
625 }
626
627 return true;
628 }
629
630 //Retourne la valeur de valF si $restrictionValue n'est pas un chiffre, le chiffre sinon
631 function getRestrictionValue($restrictionValue){
632
633 return ( is_numeric($restrictionValue) ) ?
634 $restrictionValue :
635 $this->valF[$restrictionValue];
636 }
637
638 function regle($regle){
639 $temp = explode ("+",$regle);
640 //echo '|'.$regle;
641 // cas rejet
642 if($regle=="null") // 1 dimension -> null
643 return null;
644 if(sizeof($temp)==1) // 1 dimension
645 if($temp[0]=="archive_date_depot") // initialisation avec le depot
646 return $this->$regle;
647 else // cas general
648 return $this->valF[$regle];
649 if(sizeof($temp)==2){ // 2 dimensions
650 if($temp[0]=="archive_date_depot") //initialisation avec le depot
651 if(is_numeric($temp[1]))
652 return $this->moisdate($this->$temp[0], $temp[1]);
653 else
654 return $this->moisdate($this->$temp[0], $this->valF[$temp[1]]);
655 if($temp[0]=="archive_delai") // majoration de delai
656 return $this->valF[$temp[0]]+$this->valF[$temp[1]];
657 // cas general 2 dimensions
658 if(is_numeric($temp[1]))
659 return $this->moisdate($this->valF[$temp[0]], $temp[1]);
660 else
661 return $this->moisdate($this->valF[$temp[0]], $this->valF[$temp[1]]);
662 }
663 if(sizeof($temp)==3){ // 3 dimensions
664 // cas date de validite de sursis
665 if(is_numeric($temp[1]))
666 $temp1 = $this->moisdate($this->valF[$temp[0]], $temp[1]);
667 else
668 $temp1 = $this->moisdate($this->valF[$temp[0]], $this->valF[$temp[1]]);
669 if(is_numeric($temp[2]))
670 return $this->moisdate($temp1, $temp[2]);
671 else
672 return $this->moisdate($temp1, $this->valF[$temp[2]]);
673 }
674 }
675
676
677
678 function triggerajouterapres($id,&$db,$val,$DEBUG) {
679 /**
680 * Mise à jour des valeurs du dossier en fonction des valeurs calculées
681 * par l'action
682 */
683 // Initialisation
684 $valF = "";
685 // Récupération des paramètres de l'action
686 $sql = "SELECT * FROM ".DB_PREFIXE."action
687 WHERE action='".$this->valF['action']."'";
688 $res = $db->query($sql);
689 $this->addToLog("triggerajouterapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
690 if (database::isError($res)) {
691 die($res->getMessage());
692 }
693 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
694 // pour chacune des regles, on applique la regle
695 if($row['regle_etat']!=''){
696 $valF['etat'] = $this->regle($row['regle_etat']);
697 }
698 if($row['regle_delai']!=''){
699 $valF['delai'] = $this->regle($row['regle_delai']);
700 }
701 if($row['regle_accord_tacite']!=''){
702 $valF['accord_tacite'] = $this->regle($row['regle_accord_tacite']);
703 }
704 if($row['regle_avis']!=''){
705 $valF['avis_decision'] = $this->regle($row['regle_avis']);
706 }
707 if($row['regle_date_limite']!=''){
708 $valF['date_limite']= $this->regle($row['regle_date_limite']);
709 }
710 if($row['regle_date_complet']!=''){
711 $valF['date_complet']= $this->regle($row['regle_date_complet']);
712 }
713 if($row['regle_date_dernier_depot']!=''){
714 $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot']);
715 }
716 if($row['regle_date_notification_delai']!=''){
717 $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);
718 }
719 if($row['regle_date_decision']!=''){
720 $valF['date_decision']= $this->regle($row['regle_date_decision']);
721 }
722 if($row['regle_date_rejet']!=''){
723 $valF['date_rejet']= $this->regle($row['regle_date_rejet']);
724 }
725 if($row['regle_date_validite']!=''){
726 $valF['date_validite']= $this->regle($row['regle_date_validite']);
727 }
728 if($row['regle_date_chantier']!=''){
729 $valF['date_chantier']= $this->regle($row['regle_date_chantier']);
730 }
731 if($row['regle_date_achevement']!=''){
732 $valF['date_achevement']= $this->regle($row['regle_date_achevement']);
733 }
734 if($row['regle_date_conformite']!=''){
735 $valF['date_conformite']= $this->regle($row['regle_date_conformite']);
736 }
737 // Appel des méthode stockées dans le champ methode_trigger
738 if ($row['methode_trigger'] != "") {
739 foreach (explode(";", $row['methode_trigger']) as $methode) {
740 if (method_exists($this, $methode)) {
741 $this->$methode();
742 }
743 }
744 }
745 }
746 // Si des valeurs ont été calculées alors on met à jour l'enregistrement
747 if ($valF != "") {
748 // On met à jour le dossier
749 $cle = " dossier='".$this->valF['dossier']."'";
750 $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
751 $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
752 if (database::isError($res1)) {
753 die($res->getMessage());
754 }
755 // Affichage d'informations à l'utilisateur
756 $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
757 }
758
759 /**
760 * REFERENTIEL ERP
761 */
762 // verification si envoi vers ERP est active
763 if ($this->f->getParameter('option_erp') != "") {
764 // la nature du dossier
765 $nature_dossier = substr($this->idxformulaire,0,2);
766 //
767 $sql = "SELECT erp
768 FROM ".DB_PREFIXE."dossier
769 WHERE dossier='".$this->valF['dossier']."'";
770 $dossier_erp = $this->db->getone($sql);
771 $this->addToLog("triggerajouterapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
772 if (database::isError($res)) {
773 die($res->getMessage());
774 }
775 //
776 $sql = "SELECT libelle
777 FROM ".DB_PREFIXE."evenement
778 WHERE evenement='".$this->valF['evenement']."'";
779 $evenement_libelle = $this->db->getone($sql);
780 $this->addToLog("triggerajouterapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
781 if (database::isError($res)) {
782 die($res->getMessage());
783 }
784 //
785 if ($dossier_erp == 't') {
786 // envoi du message en cas d'un PC qui est ERP et sur lequel un evenement
787 // d'acceptation etait fait
788 if ($nature_dossier ==
789 $this->f->getParameter('erp_evenement_accepter_dossier_PC')
790 && $this->valF['evenement'] ==
791 $this->f->getParameter('erp_evenement_accepter_sans_reserve')) {
792 $msgenque = new MessageEnqueuer();
793 $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
794 $msgenque->setDecision($evenement_libelle);
795 $msgenque->enqueueMessage($msgenque::$ERP_ARRETE_PC_EFFECTUE);
796 }
797 if ($this->valF['evenement'] ==
798 $this->f->getParameter('erp_evenement_refuser_dossier')) {
799 $msgenque = new MessageEnqueuer();
800 $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
801 $msgenque->enqueueMessage($msgenque::$ERP_DECISION_CONFORMITE_EFFECTUE);
802 }
803 }
804 } // fin de if ($this->f->getParameter('option_erp') != "")
805 }
806
807 function triggermodifierapres($id,&$db,$val,$DEBUG) {
808 /**
809 * L'objectif ici est d'effectuer les recalculs de date dans le dossier
810 * si la date de l'evenement est modifiee
811 */
812 // Initialisation
813 $valF = "";
814 // Récupération de l'action correspondante à l'événement
815 $sql = "SELECT action
816 FROM ".DB_PREFIXE."evenement
817 WHERE evenement=".$this->valF['evenement'];
818 $action = $db->getOne($sql);
819 $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
820 if (database::isError($action)) {
821 die($action->getMessage());
822 }
823
824 // Récupération de tous les paramètres de l'événement sélectionné
825 $sql = "SELECT * FROM ".DB_PREFIXE."evenement
826 WHERE evenement=".$this->valF['evenement'];
827 $res = $db->query($sql);
828 $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
829 if (database::isError($res)) {
830 die($res->getMessage());
831 }
832 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
833 // Ajout d'un événement d'instruction
834
835 if ($this->getVal('date_retour_signature') == "" AND $this->valF['date_retour_signature'] != "") {
836 $new_instruction = new instruction("]", $db, $DEBUG);
837 foreach($new_instruction->champs as $champ) {
838 $valNewInstr[$champ] = "";
839 }
840
841 $valNewInstr["evenement"] = $row['evenement_retour_signature'];
842 $valNewInstr["destinataire"] = $this->valF['destinataire'];
843 $valNewInstr["dossier"] = $this->valF['dossier'];
844 $valNewInstr["date_evenement"] = date("d/m/Y");
845 $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
846 }
847 }
848
849 // Récupération des paramètres de l'action
850 $sql = "SELECT * FROM ".DB_PREFIXE."action
851 WHERE action='".$action."'";
852 $res = $db->query($sql);
853 $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
854 if (database::isError($res)) {
855 die($res->getMessage());
856 }
857 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
858 // application des regles sur le courrier + delai
859 if(preg_match("/date_evenement/",$row['regle_date_limite'])){
860 $valF['date_limite']= $this->regle($row['regle_date_limite']);
861 }
862 if(preg_match("/date_evenement/",$row['regle_date_complet'])){
863 $valF['date_complet']= $this->regle($row['regle_date_complet']);
864 }
865 if(preg_match("/date_evenement/",$row['regle_date_dernier_depot'])){
866 $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot']);
867 }
868 if(preg_match("/date_evenement/",$row['regle_date_notification_delai'])){
869 $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);
870 }
871 if(preg_match("/date_evenement/",$row['regle_date_decision'])){
872 $valF['date_decision']= $this->regle($row['regle_date_decision']);
873 }
874 if(preg_match("/date_evenement/",$row['regle_date_rejet'])){
875 $valF['date_rejet']= $this->regle($row['regle_date_rejet']);
876 }
877 if(preg_match("/date_evenement/",$row['regle_date_validite'])){
878 $valF['date_validite']= $this->regle($row['regle_date_validite']);
879 }
880 if(preg_match("/date_evenement/",$row['regle_date_chantier'])){
881 $valF['date_chantier']= $this->regle($row['regle_date_chantier']);
882 }
883 if(preg_match("/date_evenement/",$row['regle_date_achevement'])){
884 $valF['date_achevement']= $this->regle($row['regle_date_achevement']);
885 }
886 if(preg_match("/date_evenement/",$row['regle_date_conformite'])){
887 $valF['date_conformite']= $this->regle($row['regle_date_conformite']);
888 }
889 }
890 // Si des valeurs ont été calculées alors on met à jour l'enregistrement
891 if ($valF != "") {
892 // On met à jour le dossier
893 $cle = " dossier='".$this->valF['dossier']."'";
894 $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
895 $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
896 if (database::isError($res1)) {
897 die($res->getMessage());
898 }
899 // Affichage d'informations à l'utilisateur
900 $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
901 }
902
903 /**
904 * REFERENTIEL ARRETE
905 */
906 if ($this->f->getParameter('option_referentiel_arrete') != "") {
907 if ($this->valF['date_retour_signature'] != $this->getVal('date_retour_signature')) {
908 $msgenque = new MessageEnqueuer();
909 $sqlArrete = "SELECT instruction.signataire_arrete as \"ws_DA_In_Signataire\",
910 signataire_arrete.nom as \"ws_DA_In_Sign_Nom\",
911 signataire_arrete.prenom as \"ws_DA_In_Sign_Prenom\",
912 signataire_arrete.qualite as \"ws_DA_In_Sign_Qualite\",
913 instruction.date_evenement as \"ws_DA_In_Dte_Redac\",
914 '' as \"ws_DA_In_lieu_Redac\",
915 instruction.dossier as \"ws_DA_In_N_Doss_DAS\",
916 '' as \"ws_DA_In_Sigle\",
917 instruction.etat as \"ws_DA_In_Decision\",
918 dossier.date_depot as \"ws_DA_In_Dte_Depot_Dem\",
919 dossier.terrain_numero as \"ws_DA_In_N_Voie\",
920 '' as \"ws_DA_In_Type_Voie\",
921 dossier.complement as \"ws_DA_In_Adresse1\",
922 dossier.terrain_adresse_lieu_dit as \"ws_DA_In_Adresse2\",
923 dossier.terrain_adresse_code_postal as \"ws_DA_In_CP\",
924 dossier.terrain_adresse_localite as \"ws_DA_In_Ville\",
925 dossier.terrain_references_cadastrales as \"ws_DA_In_Nb_Parcelle\",
926 '' as \"ws_DA_In_Detail_Parcelle\",
927 CONCAT(donnees_techniques.am_projet_desc,' ',donnees_techniques.co_projet_desc) as \"ws_DA_In_Nature_Trvx\",
928 '' as \"ws_DA_In_Destination_Trvx\",
929 dossier_autorisation_type_detaille.code as \"ws_DA_In_Type_Dos_Autoris\",
930 COALESCE(particulier_nom,personne_morale_raison_sociale) as \"ws_DA_In_Nom_Petition\",
931 COALESCE(particulier_prenom, personne_morale_denomination) as \"ws_DA_In_Prenom_Petition\",
932 '' as \"ws_DA_In_Piece_GED\",
933 instruction.date_retour_signature as \"ws_DA_In_Dte_Signature\"
934 FROM ".DB_PREFIXE."instruction
935 LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
936 instruction.signataire_arrete = signataire_arrete.signataire_arrete
937 LEFT JOIN ".DB_PREFIXE."dossier ON
938 instruction.dossier = dossier.dossier
939 LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur ON
940 lien_dossier_demandeur.dossier = dossier.dossier
941 LEFT JOIN ".DB_PREFIXE."demandeur ON
942 lien_dossier_demandeur.demandeur = demandeur.demandeur
943 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type ON
944 dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
945 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille ON
946 dossier_instruction_type.dossier_autorisation_type_detaille =
947 dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
948 LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
949 donnees_techniques.dossier_instruction = dossier.dossier
950 WHERE instruction.instruction = ".$this->valF['instruction'];
951 $resArrete = $this->db->query($sqlArrete);
952 $this->f->addToLog("triggerModifierApres(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
953 $this->f->isDatabaseError();
954
955 $rowArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
956 $msgenque->setArreteInfo($rowArrete);
957 $msgenque->enqueueMessage($msgenque::$ARRETE_ENVOI);
958 }
959 }
960 }
961
962 function triggersupprimer($id,&$db,$val,$DEBUG) {
963 /**
964 * L'objectif ici est de repositionner les valeurs récupérées en
965 * archive dans le dossier d'instruction avant de supprimer l'événement
966 * d'instruction
967 */
968 // Mise à jour des 4 valeurs modifiées par l'action
969 $valF['delai'] = $val['archive_delai'];
970 $valF['accord_tacite'] = $val['archive_accord_tacite'];
971 $valF['etat'] = $val['archive_etat'];
972 if ($val['archive_avis'] != '') {
973 $valF['avis_decision'] = $val['archive_avis'];
974 } else {
975 $valF['avis_decision'] = NULL;
976 }
977 // Mise à jour des 10 dates avec la valeur présente dans le formulaire
978 // de suppression. Si la valeur de la date est vide alors on fixe
979 // à la valeur NULL
980 //
981 if ($val['archive_date_complet'] != '') {
982 $valF['date_complet'] = $val['archive_date_complet'];
983 } else {
984 $valF['date_complet'] = NULL;
985 }
986 if ($val['archive_date_dernier_depot'] != '') {
987 $valF['date_dernier_depot'] = $val['archive_date_dernier_depot'];
988 } else {
989 $valF['date_dernier_depot'] = NULL;
990 }
991 if ($val['archive_date_rejet'] != '') {
992 $valF['date_rejet'] = $val['archive_date_rejet'];
993 } else {
994 $valF['date_rejet'] = NULL;
995 }
996 if ($val['archive_date_limite'] != '') {
997 $valF['date_limite'] = $val['archive_date_limite'];
998 } else {
999 $valF['date_limite'] = NULL;
1000 }
1001 if ($val['archive_date_notification_delai'] != '') {
1002 $valF['date_notification_delai'] = $val['archive_date_notification_delai'];
1003 } else {
1004 $valF['date_notification_delai'] = NULL;
1005 }
1006 if ($val['archive_date_decision'] != '') {
1007 $valF['date_decision'] = $val['archive_date_decision'];
1008 } else {
1009 $valF['date_decision'] = NULL;
1010 }
1011 if ($val['archive_date_validite'] != '') {
1012 $valF['date_validite'] = $val['archive_date_validite'];
1013 } else {
1014 $valF['date_validite'] = NULL;
1015 }
1016 if ($val['archive_date_achevement'] != '') {
1017 $valF['date_achevement'] = $val['archive_date_achevement'];
1018 } else {
1019 $valF['date_achevement'] = NULL;
1020 }
1021 if ($val['archive_date_chantier'] != '') {
1022 $valF['date_chantier'] = $val['archive_date_chantier'];
1023 } else {
1024 $valF['date_chantier'] = NULL;
1025 }
1026 if ($val['archive_date_conformite'] != '') {
1027 $valF['date_conformite'] = $val['archive_date_conformite'];
1028 } else {
1029 $valF['date_conformite'] = NULL;
1030 }
1031 // On met à jour le dossier
1032 $cle = " dossier='".$val['dossier']."'";
1033 $res = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1034 $this->addToLog("triggersupprimer(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1035 if (database::isError($res)) {
1036 die($res->getMessage());
1037 }
1038 // Affichage d'informations à l'utilisateur
1039 $this->addToMessage(_("Suppression de l'instruction")." [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1040 }
1041
1042 // =============================================
1043 // calcul de date avec ajout de mois (delais)
1044 // [add months (delay) and calculation final date]
1045 // LIMITE DE LA FONCTION si delai >24 MOIS
1046 // [limit : delay < 24 month]
1047 // =============================================
1048 function moisdate($date,$delaimois) {
1049 $temp = explode("-" , $date);
1050 $jour = (int) $temp[2];
1051 $mois = (int) $temp[1];
1052 $annee = (int) $temp[0];
1053 // calcul si delai superieur à 12 (limite 24) [delay > 24 month]
1054 if($delaimois>=12){
1055 $delaimois=$delaimois-12;
1056 $annee=$annee+1;
1057 }
1058 if($delaimois>=12){
1059 $delaimois=$delaimois-12;
1060 $annee=$annee+1;
1061 }
1062 // mois
1063 $mois=$mois+$delaimois;
1064 // calcul mois annee [calculation number of years if > 12 month]
1065 // nb de mois > à 12
1066 if ($mois>12){
1067 $mois=$mois-12;
1068 $annee=$annee+1;
1069 }
1070 // Calcul du nombre de jours dans le mois sélectionné [calculation number of days]
1071 switch($mois) {
1072 case "2":
1073 if ($annee % 4 == 0 && $annee % 100 != 0 || $annee % 400 == 0)
1074 $jourmax = 29;
1075 else
1076 $jourmax = 28;
1077 break;
1078 case "4":
1079 case "6":
1080 case "9":
1081 case "11":
1082 $jourmax = 30;
1083 break;
1084 default:
1085 $jourmax = 31;
1086 }
1087 if ($jour > $jourmax)
1088 $jour = $jourmax;
1089 //$dateretour=$annee."-".$mois."-".$jour;
1090 return $annee."-".$mois."-".$jour ;
1091 }
1092
1093 // Vérifie la restriction sur l'événement
1094 function verifier($val = array(), &$db, $DEBUG){
1095 parent::verifier($val, $db, $DEBUG);
1096 //Récupère la restriction
1097 $sql= "SELECT
1098 restriction
1099 FROM
1100 ".DB_PREFIXE."evenement
1101 WHERE
1102 evenement =".$this->valF['evenement'];
1103
1104 $res = $db->query($sql);
1105 $this->f->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
1106 $this->f->isDatabaseError();
1107
1108 $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
1109
1110 //Test qu'une restriction est présente
1111 if ( isset($row['restriction']) && $row['restriction'] != "" ){
1112
1113 //Test si la restriction est valide
1114 if ( !$this->restrictionIsValid($row['restriction']) ){
1115
1116 $this->correct=false;
1117 $this->addToMessage(_("Restriction non valide"));
1118 }
1119 else {
1120
1121 $this->correct = true;
1122 }
1123 }
1124
1125 $this->updateDate("date_envoi_signature");
1126 $this->updateDate("date_retour_signature");
1127 $this->updateDate("date_envoi_rar");
1128 $this->updateDate("date_retour_rar");
1129 $this->updateDate("date_envoi_controle_legalite");
1130 $this->updateDate("date_retour_controle_legalite");
1131 }
1132
1133 }// fin classe
1134 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26