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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1540 - (show annotations)
Thu Mar 21 06:50:50 2013 UTC (11 years, 10 months ago) by fmichon
File size: 50289 byte(s)
Nettoyage de la classe instruction + Ajout d'un select multiple pour sélectionner les états depuis le formulaire de l'événement

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26