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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1284 - (show annotations)
Fri Feb 22 14:48:29 2013 UTC (11 years, 11 months ago) by vpihour
File size: 44035 byte(s)
Mis à jour de l'état du dossier d'autorisation selon les actions

1 <?php
2 //$Id$
3 //gen openMairie le 10/02/2011 20:34
4 /*
5 $Id: instruction.class.php,v 1.29 2010-10-27 10:52:20 fraynaud Exp $
6 specific :
7 - cle secondaire
8 destruction autorisée que pour le dernier evenement
9 [delete the last event ]
10 - variable globale [global variables]
11 var $archive_date_depot;
12 var $retourformulaire;
13 var $idxformulaire;
14 - modification des données dans dossier trigger avant
15 [modify dossier data with trigger function]
16 - function moisdate : pour ajouter des mois a une date
17 [add months (delay) and calculation final date]
18 - voir script_lang.js : bible ...
19 */
20 require_once ("../gen/obj/instruction.class.php");
21 require_once("../services/outgoing/messageenqueuer.php");
22
23 class instruction extends instruction_gen {
24
25 var $archive_date_depot; // specific
26 var $retourformulaire; // specific
27 var $idxformulaire; // specific
28
29 function instruction($id,&$db,$debug) {
30 $this->constructeur($id,$db,$debug);
31 }// fin constructeur
32
33 // {{{ Gestion de la confidentialité des données spécifiques
34
35 /**
36 * Surcharge pour gérer les actions disponibles dans le portlet
37 */
38 function checkAccessibility() {
39 //
40 parent::checkAccessibility();
41 // Si l'utilisateur est un intructeur qui en correspond pas à la
42 // division du dossier
43 if ($this->f->isUserInstructeur()
44 && isset($this->f->om_utilisateur["division"])
45 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
46 //
47 $this->actions_sup = array();
48 $this->setParameter("actions", array());
49 }
50 // Si une action 'lu' est présente et que le champ lu est à true
51 // on supprime l'action
52 if (isset($this->actions_sup["lu"])
53 && isset($this->val[array_search("lu", $this->champs)])
54 && $this->val[array_search("lu", $this->champs)]== "t") {
55 unset($this->actions_sup["lu"]);
56 }
57 }
58
59 /**
60 * Cette methode est à surcharger elle permet de tester dans chaque classe
61 * des droits des droits spécifiques en fonction des données
62 */
63 function canAccess() {
64 // Si l'utilisateur est un intructeur qui ne correspond pas à la
65 // division du dossier
66 if ($this->f->isUserInstructeur()
67 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
68 && $this->getParameter("maj") != 3) {
69 //
70 return false;
71 }
72 //
73 return true;
74 }
75
76 /**
77 * Cette méthode permet de récupérer la division d'un dossier
78 */
79 function getDivisionFromDossier() {
80 //
81 if (!isset($this->val[array_search("dossier", $this->champs)])) {
82 return NULL;
83 }
84 //
85 $sql = "select division from ".DB_PREFIXE."dossier ";
86 $sql .= " where dossier='".$this->val[array_search("dossier", $this->champs)]."'";
87 //
88 $division = $this->db->getOne($sql);
89 $this->addToLog("getDivisionFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
90 database::isError($division);
91 //
92 return $division;
93 }
94
95 // }}}
96
97 function cleSecondaire($id,&$db,$val,$DEBUG) {
98 parent::cleSecondaire($id,$db,$val,$DEBUG);
99 // controle suppression cle secondaire [secondary key delete control]
100 // ------------------------------------------------------------------------------------
101 // specifique detruire que le dernier [specific instruction : delete the last event ]
102 // ------------------------------------------------------------------------------------
103 $dernierevenement='';
104 $sql="select max(instruction) from ".DB_PREFIXE."instruction where dossier ='".
105 $this->idxformulaire."'";
106 $dernierevenement = $db->getOne($sql);
107 if($dernierevenement==$id){
108 $this->correct=true;
109 $this->addToMessage(_('Destruction_chronologique'));
110 }else{
111 $this->addToMessage(_('Destruction_evenement')." : ".$dernierevenement);
112 $this->addToMessage(_('Destruction_chronologique'));
113 $this->correct=false;
114 }
115 }
116
117 // Sélectionne le signataire_arrete par défaut
118 function setVal(&$form,$maj,$validation){
119
120 // Ajout
121 if($maj == 0) {
122
123 // Création de la requête
124 $sql = "SELECT signataire_arrete
125 FROM ".DB_PREFIXE."signataire_arrete
126 WHERE defaut IS TRUE";
127
128 // Exécution de la requête
129 $this->f->addToLog("deleteAllLienDossierInstructionTypeEvenementEvenement(): db->query(\"".$sql."\");", VERBOSE_MODE);
130 $res = $this->f->db->query($sql);
131 $this->f->isDatabaseError();
132
133 $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
134
135 if ( isset($row['signataire_arrete']) && is_numeric($row['signataire_arrete'])){
136
137 $form->setVal("signataire_arrete",$row['signataire_arrete']);
138 }
139 }
140 }
141
142 /*Met des valeurs par défaut dans certains des sous-formulaire*/
143 function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){
144 if ($validation==0 and $maj<2) {
145 if ($maj == 0){
146 $form->setVal("destinataire", $idxformulaire);
147 $form->setVal("dossier", $idxformulaire);
148 $form->setVal("date_evenement", date('Y-m-d'));
149 }
150 $form->setVal("bible_auto","bible_auto()");
151 $form->setVal("bible","bible()");
152 $form->setVal("bible2","bible2()");
153 }
154 $this->retourformulaire=$retourformulaire;
155 $this->idxformulaire=$idxformulaire;
156 }
157
158 /*Affecte un type à certains champs*/
159 function setType(&$form,$maj) {
160 parent::setType($form,$maj);
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', 'hiddenstatic');
170 $form->setType('libelle', 'hiddenstatic');
171 $form->setType('signataire_arrete','select');
172 if($maj==0){ // add
173 $form->setType('instruction', 'hiddenstatic');
174 $form->setType('evenement', 'select');
175 $form->setType('date_evenement', 'date2');
176 }else{ // modify
177 $form->setType('instruction', 'hiddenstatic');
178 $form->setType('evenement', 'hiddenstatic');
179 //$form->setType('date_evenement', 'hiddenstaticdate');
180 $form->setType('date_evenement', 'date2');
181 // necessaire pour calcul de date en modification
182 $form->setType('delai', 'hiddenstatic');
183 }
184 } elseif($maj==2){
185 $form->setType('dossier', 'hiddenstatic');
186 $form->setType('bible_auto', 'hidden');
187 $form->setType('bible', 'hidden');
188 $form->setType('bible2', 'hidden');
189 }else {
190 $form->setType('destinataire', 'hidden');
191 $form->setType('dossier', 'static');
192 $form->setType('bible_auto', 'hidden');
193 $form->setType('bible', 'hidden');
194 $form->setType('bible2', 'hidden');
195 }
196 $form->setType('complement3', 'hidden');
197 $form->setType('bible3', 'hidden');
198 $form->setType('complement4', 'hidden');
199 $form->setType('bible4', 'hidden');
200 $form->setType('complement5', 'hidden');
201 $form->setType('bible5', 'hidden');
202 $form->setType('complement6', 'hidden');
203 $form->setType('bible6', 'hidden');
204 $form->setType('complement7', 'hidden');
205 $form->setType('bible7', 'hidden');
206 $form->setType('complement8', 'hidden');
207 $form->setType('bible8', 'hidden');
208 $form->setType('complement9', 'hidden');
209 $form->setType('bible9', 'hidden');
210 $form->setType('complement10', 'hidden');
211 $form->setType('bible10', 'hidden');
212 $form->setType('complement11', 'hidden');
213 $form->setType('bible11', 'hidden');
214 $form->setType('complement12', 'hidden');
215 $form->setType('bible12', 'hidden');
216 $form->setType('complement13', 'hidden');
217 $form->setType('bible13', 'hidden');
218 $form->setType('complement14', 'hidden');
219 $form->setType('bible14', 'hidden');
220 $form->setType('complement15', 'hidden');
221 $form->setType('bible15', 'hidden');
222 $form->setType('delai', 'hidden');
223 $form->setType('etat', 'hidden');
224 $form->setType('accord_tacite', 'hidden');
225 $form->setType('action', 'hidden');
226 $form->setType('delai_notification', 'hidden');
227 $form->setType('avis_decision', 'hidden');
228 $form->setType('archive_delai', 'hidden');
229 $form->setType('archive_etat', 'hidden');
230 $form->setType('archive_accord_tacite', 'hidden');
231 $form->setType('archive_avis', 'hidden');
232 $form->setType('archive_date_complet', 'hidden');
233 $form->setType('archive_date_rejet', 'hidden');
234 $form->setType('archive_date_limite', 'hidden');
235 $form->setType('archive_date_notification_delai', 'hidden');
236 $form->setType('archive_date_decision', 'hidden');
237 $form->setType('archive_date_validite', 'hidden');
238 $form->setType('archive_date_achevement', 'hidden');
239 $form->setType('archive_date_conformite', 'hidden');
240 $form->setType('archive_date_chantier', 'hidden');
241 }
242
243 /*Met des valeurs choisies dans certains select du formulaire*/
244 function setSelect(&$form, $maj,&$db,$DEBUG) {
245 if(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc.php"))
246 include ("../sql/".$db->phptype."/".$this->table.".form.inc.php");
247
248 parent::setSelect($form, $maj, $db, $DEBUG);
249
250 // *** evenement ***
251 $contenu=array();
252 // etat du dossier
253 $sql="select etat from ".DB_PREFIXE."dossier where dossier ='".
254 $this->idxformulaire."'";
255 $etat_dossier = $db->getOne($sql);
256 // nature du dossier d'autorisation
257 $sql="select code from ".DB_PREFIXE."dossier
258 INNER JOIN ".DB_PREFIXE."dossier_autorisation ON
259 dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
260 INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille ON
261 dossier_autorisation.dossier_autorisation_type_detaille =
262 dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
263 WHERE dossier ='".
264 $this->idxformulaire."'";
265 $nature_dossier = $db->getOne($sql);
266
267 // recherche des evenement de transition
268 // XXX modifier la requète après la modification de structure du workflow
269 $sql= $sql_transition." where transition.etat ='".$etat_dossier."' and dossier='".
270 $this->idxformulaire."' order by evenement.action";
271
272 // *** attention en dur le CU
273 $this->addToLog("setSelect(): db->query(\"".$sql."\");", VERBOSE_MODE);
274
275 $res = $db->query($sql);
276 if (database::isError($res))
277 die($res->getMessage());
278 $contenu[0][0]="";
279 $contenu[1][0]=_('choisir')." "._('evenement');
280 $k=1;
281 while ($row=& $res->fetchRow()){
282 if($maj==0){ // ajouter
283 $contenu[0][$k]=$row[0];
284 $contenu[1][$k]=$row[1];
285 $k++;
286 }else{
287 // select hiddenstatic
288 $contenu[0][$k]=$row[0];
289 $contenu[1][$k]=$row[1];
290 $k++;
291 }
292 }
293 $form->setSelect("evenement",$contenu);
294 // lien bible_auto [link]
295 $contenu=array();
296 $contenu[0]=" automatique ";
297 $form->setSelect("bible_auto",$contenu);
298 // lien bible1
299 $contenu=array();
300 $contenu[0]=" Bible ";
301 $form->setSelect("bible",$contenu);
302 // lien bible2
303 $contenu=array();
304 $contenu[0]=" Bible ";
305 $form->setSelect("bible2",$contenu);
306 } // function select
307
308 function setGroupe(&$form,$maj){
309 $form->setGroupe('evenement','D');
310 $form->setGroupe('libelle','G');
311 $form->setGroupe('date_evenement','G');
312 $form->setGroupe('lettretype','F');
313 }
314
315 function setRegroupe(&$form,$maj){
316 $form->setRegroupe('evenement','D',_('evenement'), "collapsible");
317 $form->setRegroupe('libelle','G','');
318 $form->setRegroupe('date_evenement','G','');
319 $form->setRegroupe('lettretype','F','');
320 $form->setRegroupe('complement','D',_('complement'), "collapsible");
321 $form->setRegroupe('bible_auto','G','');
322 $form->setRegroupe('bible','F','');
323 $form->setRegroupe('complement2','D',_('complement2'), "startClosed");
324 $form->setRegroupe('bible2','F','');
325 }
326
327 /*Change le libellé de certains champs*/
328 function setLib(&$form,$maj) {
329 parent :: setLib($form,$maj);
330 $form->setLib('libelle',' ');
331 $form->setLib('bible_auto',"");
332 $form->setLib('bible',"");
333 $form->setLib('bible2',"");
334 $form->setLib('lettretype',"->"._(" courrier "));
335 $form->setLib('date_evenement',_(" du "));
336 }
337
338 // ==================================================================
339 // trigger avant modification des données [trigger before modify data]
340 // ==================================================================
341 function triggerajouter($id,&$db,$val,$DEBUG) {
342 // mise a jour instruction avec evenement
343 // [modify instruction with evenement]
344 $sql= "select * from ".DB_PREFIXE."evenement where evenement =".$this->valF['evenement'];
345
346 $res = $db->query($sql);
347 if (database::isError($res)) die($res->getMessage());
348
349 if ($DEBUG == 1)
350 echo " la requete ".$sql." est exécutée<br>";
351
352 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
353
354 if(isset($row['action']) and !empty($row['action'])) {
355 $this->valF['action']=$row['action'];
356 } else {
357 $this->valF['action']=NULL;
358 }
359 $this->valF['delai']=$row['delai'];
360 if(isset($row['etat']) and !empty($row['etat'])) {
361 $this->valF['etat']=$row['etat'];
362 } else {
363 $this->valF['etat']=NULL;
364 }
365 $this->valF['accord_tacite']=$row['accord_tacite'];
366 $this->valF['delai_notification']=$row['delai_notification'];
367 if(isset($row['avis_decision']) and !empty($row['avis_decision'])) {
368 $this->valF['avis_decision']=$row['avis_decision'];
369 } else {
370 $this->valF['avis_decision']=NULL;
371 }
372 if($row['lettretype']!="")
373 $this->valF['lettretype']=$row['lettretype'];
374 else
375 $this->valF['lettretype']="standard";
376
377 }
378 $sql= "select * from ".DB_PREFIXE."dossier where dossier = '".$this->valF['dossier']."'";
379 $res = $db->query($sql);
380 if (database::isError($res))
381 die($res->getMessage());
382 if ($DEBUG == 1)
383 echo " la requete ".$sql." est exécutée<br>";
384 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
385 //
386 $this->archive_date_depot = $row['date_depot'];
387 // archive en instruction (si suppression)
388 $this->valF['archive_delai']=$row['delai'];
389 $this->valF['archive_accord_tacite']=$row['accord_tacite'];
390 $this->valF['archive_etat']=$row['etat'];
391 $this->valF['archive_avis']=$row['avis_decision'];
392 // compatibilite pgsql
393 if($row['date_complet']!='')
394 $this->valF['archive_date_complet']=$row['date_complet'];
395 if($row['date_rejet']!='')
396 $this->valF['archive_date_rejet']= $row['date_rejet'];
397 if($row['date_limite']!='')
398 $this->valF['archive_date_limite']= $row['date_limite'];
399 if($row['date_notification_delai']!='')
400 $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];
401 if($row['date_decision']!='')
402 $this->valF['archive_date_decision']= $row['date_decision'];
403 if($row['date_validite']!='')
404 $this->valF['archive_date_validite']= $row['date_validite'];
405 if($row['date_achevement']!='')
406 $this->valF['archive_date_achevement']= $row['date_achevement'];
407 if($row['date_chantier']!='')
408 $this->valF['archive_date_chantier']= $row['date_chantier'];
409 if($row['date_conformite']!='')
410 $this->valF['archive_date_conformite']= $row['date_conformite'];
411 }
412 }
413
414 // Test si une restriction est valide
415 // return boolean
416 function restrictionIsValid($restriction){
417
418 /* Met des espace avant et après les opérateurs puis transforme la chaine en
419 * un tableau */
420 $tabRestriction = str_replace(">="," >= ",
421 str_replace("<="," <= ",
422 str_replace("-"," - ",
423 str_replace("+"," + ",$restriction))));
424 $tabRestriction = explode( " ", $tabRestriction);
425
426 //Variables de résultat
427 $res = array();
428 $i = 0;
429 $comp = "";
430
431
432 //Test que le tableau n'est pas vide
433 if ( count($tabRestriction) > 0 ){
434
435 $res[0] = $this->getRestrictionValue($tabRestriction[0]);
436
437 //Calcul des variables
438 for ( $j = 1 ; $j < count($tabRestriction) ; $j += 2 ) {
439
440 //Variable de comparaison
441 if ( strcmp( ">=", $tabRestriction[$j] ) == 0 ||
442 strcmp( "<=", $tabRestriction[$j]) ==0 ){
443
444 $comp = $tabRestriction[$j];
445 $res[++$i] = $this->getRestrictionValue($tabRestriction[$j+1]);
446 }
447 // Fait l'addition
448 elseif ( strcmp( "+", $tabRestriction[$j]) == 0 ){
449
450 $res[$i] = $this->moisdate( $res[$i], $this->getRestrictionValue($tabRestriction[$j+1]) );
451 }
452 }
453 }
454
455 // Effectue le test
456 if ( strcmp($comp, ">=") == 0 ){
457
458 if ( $res[0] >= $res[1] || $res[0] == "" ){
459
460 return true;
461 }
462 else {
463
464 return false;
465 }
466 }
467 elseif ( strcmp($comp, "<=") == 0 ){
468
469 if ( $res[0] <= $res[1] || $res[1] == "" ){
470
471 return true;
472 }
473 else {
474
475 return false;
476 }
477 }
478
479 return true;
480 }
481
482 //Retourne la valeur de valF si $restrictionValue n'est pas un chiffre, le chiffre sinon
483 function getRestrictionValue($restrictionValue){
484
485 return ( is_numeric($restrictionValue) ) ?
486 $restrictionValue :
487 $this->valF[$restrictionValue];
488 }
489
490 function regle($regle){
491 $temp = explode ("+",$regle);
492 //echo '|'.$regle;
493 // cas rejet
494 if($regle=="null") // 1 dimension -> null
495 return null;
496 if(sizeof($temp)==1) // 1 dimension
497 if($temp[0]=="archive_date_depot") // initialisation avec le depot
498 return $this->$regle;
499 else // cas general
500 return $this->valF[$regle];
501 if(sizeof($temp)==2){ // 2 dimensions
502 if($temp[0]=="archive_date_depot") //initialisation avec le depot
503 if(is_numeric($temp[1]))
504 return $this->moisdate($this->$temp[0], $temp[1]);
505 else
506 return $this->moisdate($this->$temp[0], $this->valF[$temp[1]]);
507 if($temp[0]=="archive_delai") // majoration de delai
508 return $this->valF[$temp[0]]+$this->valF[$temp[1]];
509 // cas general 2 dimensions
510 if(is_numeric($temp[1]))
511 return $this->moisdate($this->valF[$temp[0]], $temp[1]);
512 else
513 return $this->moisdate($this->valF[$temp[0]], $this->valF[$temp[1]]);
514 }
515 if(sizeof($temp)==3){ // 3 dimensions
516 // cas date de validite de sursis
517 if(is_numeric($temp[1]))
518 $temp1 = $this->moisdate($this->valF[$temp[0]], $temp[1]);
519 else
520 $temp1 = $this->moisdate($this->valF[$temp[0]], $this->valF[$temp[1]]);
521 if(is_numeric($temp[2]))
522 return $this->moisdate($temp1, $temp[2]);
523 else
524 return $this->moisdate($temp1, $this->valF[$temp[2]]);
525 }
526 }
527
528
529
530 // ==================================================================
531 // valeur dossier apres modification [values dossier after action]
532 // ==================================================================
533 function triggerajouterapres($id,&$db,$val,$DEBUG) {
534 // mise a null au lieu de "" / voir compatibilite mysql
535 // voir parametrage CU en dur
536 // voir parametrage des actions en dur
537 $param=1;
538 if($param==1){
539 $sql="select * from ".DB_PREFIXE."action where action = '".$this->valF['action']."'";
540 $res = $db->query($sql);
541 if (database::isError($res))
542 die($res->getMessage());
543 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
544 if($row['regle_etat']!=''){
545 $valF['etat']= $this->regle($row['regle_etat']);
546 }
547 if($row['regle_delai']!=''){
548 $valF['delai']= $this->regle($row['regle_delai']);
549 }
550 if($row['regle_accord_tacite']!=''){
551 $valF['accord_tacite']= $this->regle($row['regle_accord_tacite']);
552 }
553 if($row['regle_avis']!=''){
554 $valF['avis_decision']= $this->regle($row['regle_avis']);
555 }
556 if($row['regle_date_limite']!=''){
557 $valF['date_limite']= $this->regle($row['regle_date_limite']);
558 }
559 if($row['regle_date_complet']!=''){
560 $valF['date_complet']= $this->regle($row['regle_date_complet']);
561 }
562 if($row['regle_date_notification_delai']!=''){
563 $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);
564 }
565 if($row['regle_date_decision']!=''){
566 $valF['date_decision']= $this->regle($row['regle_date_decision']);
567 }
568 if($row['regle_date_rejet']!=''){
569 $valF['date_rejet']= $this->regle($row['regle_date_rejet']);
570 }
571 if($row['regle_date_validite']!=''){
572 $valF['date_validite']= $this->regle($row['regle_date_validite']);
573 }
574 if($row['regle_date_chantier']!=''){
575 $valF['date_chantier']= $this->regle($row['regle_date_chantier']);
576 }
577 if($row['regle_date_achevement']!=''){
578 $valF['date_achevement']= $this->regle($row['regle_date_achevement']);
579 }
580 if($row['regle_date_conformite']!=''){
581 $valF['date_conformite']= $this->regle($row['regle_date_conformite']);
582 }
583
584 // Appel des méthode stockées dans le champ methode_trigger
585 if($row['methode_trigger'] != "") {
586 foreach (explode(";", $row['methode_trigger']) as $methode) {
587 if(method_exists($this, $methode)) {
588 $this->$methode();
589 }
590
591 }
592 }
593 }
594 }else{
595 switch ($this->valF['action']) {
596 case "initialisation" :
597 $valF['delai']= $this->valF['delai'];
598 $valF['etat']= $this->valF['etat'];
599 $valF['accord_tacite']= $this->valF['accord_tacite'];
600 // la date_complet est la date de depot
601 $valF['date_complet']= $this->archive_date_depot; // ****
602 $valF['date_limite'] = $this->moisdate($valF['date_complet'],$valF['delai']);
603 $valF['date_notification_delai'] = $this->moisdate($valF['date_complet'],1);
604 break;
605 case "notification" :
606 $valF['delai']= $this->valF['delai'];
607 $valF['etat']= $this->valF['etat'];
608 $valF['accord_tacite']= $this->valF['accord_tacite'];
609 // la date_complet est celle precedemment saisie
610 $valF['date_complet']=$this->valF['archive_date_complet'];
611 $valF['date_limite'] = $this->moisdate($valF['date_complet'],$valF['delai']);
612 $valF['date_notification_delai'] = $this->moisdate($valF['date_complet'],1);
613 // la date du courrier ne doit pas etre depasse par rapport au delai de
614 // notification [verify notification date]
615 if($this->valF['archive_date_notification_delai']<$this->valF['date_evenement'])
616 $this->msg=$this->msg."<br><img src='../img/erreur.gif'> "._("date_notification_delai")." ".
617 $this->valF['archive_date_notification_delai']." < "._('date_evenement');
618 //
619 break;
620 case "retour" :
621 $valF['delai']= $this->valF['delai'];
622 $valF['etat']= $this->valF['etat'];
623 $valF['accord_tacite']= $this->valF['accord_tacite'];
624 // la date_complet est celle de l evenement
625 $valF['date_complet']= $this->valF['date_evenement'];
626 $valF['date_limite'] = $this->moisdate($valF['date_complet'],$valF['delai']);
627 $valF['date_notification_delai'] = $this->moisdate($valF['date_complet'],1);
628 break;
629 case "rejet" :
630 //$valF['delai']=0; // *** delai a garder pour etat dpc
631 $valF['etat']= $this->valF['etat'];
632 $valF['accord_tacite']= $this->valF['accord_tacite'];
633 // la date rejet est initialisee
634 $valF['date_rejet']= $this->valF['date_evenement'];
635 // les dates de depart et fin d instruction sont annulées
636 $valF['date_limite'] =null;
637 $valF['date_notification_delai'] =null;
638 $valF['date_complet']=null;
639 break;
640 case "majoration" :
641 $valF['delai']= $this->valF['archive_delai']+$this->valF['delai'];
642 $valF['etat']= $this->valF['etat'];
643 $valF['accord_tacite']= $this->valF['accord_tacite'];
644 $valF['date_complet']=$this->valF['archive_date_complet'];
645 // majoration de la date limite
646 $valF['date_limite'] = $this->moisdate($valF['date_complet'],$valF['delai']);
647 $valF['date_notification_delai'] = $this->moisdate($valF['date_complet'],1);
648 // la date du courrier ne doit pas etre depasse par rapport au delai de
649 // notification
650 if($this->valF['archive_date_notification_delai']<$this->valF['date_evenement'])
651 $this->msg=$this->msg."<br><img src='../img/erreur.gif'>"._("date_notification_delai").
652 $this->valF['archive_date_notification_delai']." < "._('date_evenement');
653 break;
654 case "acceptation" :
655 $valF['etat']= $this->valF['etat'];
656 $valF['date_decision']= $this->valF['date_evenement'];
657 $valF['avis_decision']= $this->valF['avis_decision'];
658 // date de validite = date de l evenement + delai
659 $valF['date_validite'] = $this->moisdate($this->valF['date_evenement'],$this->valF['delai']);
660 break;
661 case "refus" :
662 $valF['etat']= $this->valF['etat'];
663 $valF['date_decision']= $this->valF['date_evenement'];
664 $valF['avis_decision']= $this->valF['avis_decision'];
665 break;
666 case "prolongation" :
667 $valF['date_validite'] = $this->moisdate($this->valF['archive_date_validite'],$this->valF['delai']);
668 break;
669 case "sursis" :
670 $valF['date_limite'] = $this->moisdate($this->valF['date_evenement'],$this->valF['delai']);
671 $valF['etat']= $this->valF['etat'];
672 $valF['accord_tacite']= $this->valF['accord_tacite'];
673 $valF['avis_decision']= $this->valF['avis_decision'];
674 $valF['date_decision']= $this->valF['date_evenement'];
675 $temp = $valF['date_limite'];
676 $valF['date_validite']= $this->moisdate($temp,2);
677 break;
678 case "execution" :
679 $valF['etat']= $this->valF['etat'];
680 $valF['date_chantier'] = $this->valF['date_evenement'];
681 //echo $this->msg=$this->msg.$valF['date_chantier']."";
682 break;
683 case "achevement" :
684 $valF['etat']= $this->valF['etat'];
685 $valF['date_achevement'] = $this->valF['date_evenement'];
686 break;
687 case "archivage" :
688 $valF['etat']= $this->valF['etat'];
689 $valF['date_conformite'] = $this->valF['date_evenement'];
690 break;
691
692 default:
693 if ($this->valF['etat']!="")
694 $valF['etat']= $this->valF['etat'];
695 }// end switch
696 } // end param
697 if($valF!=""){
698 $cle= " dossier = '".$this->valF['dossier']."'";
699 $res1= $db->autoExecute(DB_PREFIXE.'dossier',$valF,DB_AUTOQUERY_UPDATE,$cle);
700 if (database::isError($res1))
701 die($res->getMessage());
702 if ($DEBUG == 1)
703 echo "La requête de mise à jour est effectuée.<br>";
704 $this->msg=$this->msg."<br>"._('enregistrement')." ".
705 $this->valF['dossier']." "._('table')." dossier [".
706 $db->affectedRows()." "._('enregistrement').
707 " "._('mis_a_jour')."]" ;
708 }
709 // verification si envoi vers ERP est active
710 if ($this->f->getParameter('option_erp') != "") {
711 // la nature du dossier
712 $nature_dossier = substr($this->idxformulaire,0,2);
713 $dossier_erp = $this->getFromDB("SELECT erp FROM ".DB_PREFIXE."dossier WHERE dossier = '" .
714 $this->valF['dossier'] . "'");
715 $evenement_libelle = $this->getFromDB(
716 "SELECT libelle FROM ".DB_PREFIXE."evenement WHERE evenement = '" .
717 $this->valF['evenement'] . "'");
718 if ($dossier_erp == 't') {
719 // envoi du message en cas d'un PC qui est ERP et sur lequel un evenement
720 // d'acceptation etait fait
721 if ($nature_dossier ==
722 $this->f->getParameter('erp_evenement_accepter_dossier_PC')
723 && $this->valF['evenement'] ==
724 $this->f->getParameter('erp_evenement_accepter_sans_reserve')) {
725 $msgenque = new MessageEnqueuer();
726 $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
727 $msgenque->setDecision($evenement_libelle);
728 $msgenque->enqueueMessage($msgenque::$ERP_ARRETE_PC_EFFECTUE);
729 }
730 if ($this->valF['evenement'] ==
731 $this->f->getParameter('erp_evenement_refuser_dossier')) {
732 $msgenque = new MessageEnqueuer();
733 $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
734 $msgenque->enqueueMessage($msgenque::$ERP_DECISION_CONFORMITE_EFFECTUE);
735 }
736 }
737 } // fin de if ($this->f->getParameter('option_erp') != "")
738 }
739
740
741 /**
742 * Fait une requette sql pour extraire la valeur d'un champ, et retourne
743 * cette valeur
744 * @param string $sql La requete sql a executer
745 * @return La valeur du champs cherche, sinon NULL. En cas d'erreur de la BD
746 * l'execution s'arrete.
747 */
748 function getFromDB($sql) {
749 //$sql = "SELECT libelle FROM ".DB_PREFIXE."dossier WHERE dossier = '" . $dossier . "'";
750 $res = $this->db->limitquery($sql, 0, 1);
751 $this->addToLog("getDossierERPSpecification(): db->limitquery(\"".
752 str_replace(",",", ",$sql)."\", 0, 1);", VERBOSE_MODE);
753 // Si une erreur survient on die
754 if (database::isError($res, true)) {
755 // Appel de la methode de recuperation des erreurs
756 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), 'instruction');
757 }
758 // retourne la nature du dossier
759 while ($row =& $res->fetchRow()) {
760 return $row[0];
761 }
762 // la nature n'etait pas trouve, ce qui ne devrait pas se passer
763 return NULL;
764
765 }
766
767
768 function triggermodifierapres($id,&$db,$val,$DEBUG) {
769 /*
770 * cette fonction a pour objet de permettre de modifier la date courrier
771 */
772 $valF=array();
773 $sql= "select action from ".DB_PREFIXE."evenement where evenement =".$this->valF['evenement'];
774 $action = $db->getOne($sql);
775 if (database::isError($action)) die($action->getMessage().$sql);
776 $sql="select * from ".DB_PREFIXE."action where action = '".$action."'";
777 $res = $db->query($sql);
778 if (database::isError($res)) die($res->getMessage().$sql);
779 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
780 // application des regles sur le courrier + delai
781 if(preg_match("/date_evenement/",$row['regle_date_limite'])){
782 $valF['date_limite']= $this->regle($row['regle_date_limite']);
783 }
784 if(preg_match("/date_evenement/",$row['regle_date_complet'])){
785 $valF['date_complet']= $this->regle($row['regle_date_complet']);
786 }
787 if(preg_match("/date_evenement/",$row['regle_date_notification_delai'])){
788 $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);
789 }
790 if(preg_match("/date_evenement/",$row['regle_date_decision'])){
791 $valF['date_decision']= $this->regle($row['regle_date_decision']);
792 }
793 if(preg_match("/date_evenement/",$row['regle_date_rejet'])){
794 $valF['date_rejet']= $this->regle($row['regle_date_rejet']);
795 }
796 if(preg_match("/date_evenement/",$row['regle_date_validite'])){
797 $valF['date_validite']= $this->regle($row['regle_date_validite']);
798 }
799 if(preg_match("/date_evenement/",$row['regle_date_chantier'])){
800 $valF['date_chantier']= $this->regle($row['regle_date_chantier']);
801 }
802 if(preg_match("/date_evenement/",$row['regle_date_achevement'])){
803 $valF['date_achevement']= $this->regle($row['regle_date_achevement']);
804 }
805 if(preg_match("/date_evenement/",$row['regle_date_conformite'])){
806 $valF['date_conformite']= $this->regle($row['regle_date_conformite']);
807 }
808 } // while
809 if($valF!=array()){
810 $cle= " dossier = '".$this->valF['dossier']."'";
811 $res1= $db->autoExecute(DB_PREFIXE.'dossier',$valF,DB_AUTOQUERY_UPDATE,$cle);
812 if (database::isError($res1))
813 die($res->getMessage());
814 if ($DEBUG == 1)
815 echo "La requête de mise à jour est effectuée.<br>";
816 $this->msg=$this->msg."<br>"._('enregistrement')." ".
817 $this->valF['dossier']." "._('table')." dossier [".
818 $db->affectedRows()." "._('enregistrement').
819 " "._('mis_a_jour')."]" ;
820 }
821 }
822
823
824
825 // trigger before delete
826 function triggersupprimer($id,&$db,$val,$DEBUG) {
827 // archive en instruction (si suppression) [archive if delete instruction]
828 $valF['delai']=$val['archive_delai'];
829 $valF['accord_tacite']=$val['archive_accord_tacite'];
830 $valF['etat']=$val['archive_etat'];
831 if($val['archive_avis']=='')
832 $valF['avis_decision']= null;
833 else
834 $valF['avis_decision']=$val['archive_avis'];
835 // if= compatibilite pgsql
836 if($val['archive_date_complet']!='')
837 $valF['date_complet']=$val['archive_date_complet'];
838 if($val['archive_date_rejet']!='')
839 $valF['date_rejet']= $val['archive_date_rejet'];
840 if($val['archive_date_limite']!='')
841 $valF['date_limite']= $val['archive_date_limite'];
842 if($val['archive_date_notification_delai']!='')
843 $valF['date_notification_delai']= $val['archive_date_notification_delai'];
844 if($val['archive_date_decision']!='')
845 $valF['date_decision']= $val['archive_date_decision'];
846 if($val['archive_date_validite']!='')
847 $valF['date_validite']= $val['archive_date_validite'];
848 if($val['archive_date_achevement']!='')
849 $valF['date_achevement']= $val['archive_date_achevement'];
850 if($val['archive_date_chantier']!='')
851 $valF['date_chantier']= $val['archive_date_chantier'];
852 if($val['archive_date_conformite']!='')
853 $valF['date_conformite']= $val['archive_date_conformite'];
854
855 $cle= " dossier = '".$val['dossier']."'";
856 $res= $db->autoExecute(DB_PREFIXE.'dossier',$valF,DB_AUTOQUERY_UPDATE,$cle);
857 if (database::isError($res))
858 die($res->getMessage());
859 else{
860 if ($DEBUG == 1)
861 echo "La requête de mise à jour est effectuée.<br>";
862 }
863 }
864 // =============================================
865 // calcul de date avec ajout de mois (delais)
866 // [add months (delay) and calculation final date]
867 // LIMITE DE LA FONCTION si delai >24 MOIS
868 // [limit : delay < 24 month]
869 // =============================================
870 function moisdate($date,$delaimois) {
871 $temp = explode("-" , $date);
872 $jour = (int) $temp[2];
873 $mois = (int) $temp[1];
874 $annee = (int) $temp[0];
875 // calcul si delai superieur à 12 (limite 24) [delay > 24 month]
876 if($delaimois>=12){
877 $delaimois=$delaimois-12;
878 $annee=$annee+1;
879 }
880 if($delaimois>=12){
881 $delaimois=$delaimois-12;
882 $annee=$annee+1;
883 }
884 // mois
885 $mois=$mois+$delaimois;
886 // calcul mois annee [calculation number of years if > 12 month]
887 // nb de mois > à 12
888 if ($mois>12){
889 $mois=$mois-12;
890 $annee=$annee+1;
891 }
892 // Calcul du nombre de jours dans le mois sélectionné [calculation number of days]
893 switch($mois) {
894 case "2":
895 if ($annee % 4 == 0 && $annee % 100 != 0 || $annee % 400 == 0)
896 $jourmax = 29;
897 else
898 $jourmax = 28;
899 break;
900 case "4":
901 case "6":
902 case "9":
903 case "11":
904 $jourmax = 30;
905 break;
906 default:
907 $jourmax = 31;
908 }
909 if ($jour > $jourmax)
910 $jour = $jourmax;
911 //$dateretour=$annee."-".$mois."-".$jour;
912 return $annee."-".$mois."-".$jour ;
913 }
914
915 // Vérifie la restriction sur l'événement
916 function verifier($val = array(), &$db, $DEBUG){
917 parent::verifier($val, $db, $DEBUG);
918 //Récupère la restriction
919 $sql= "SELECT
920 restriction
921 FROM
922 ".DB_PREFIXE."evenement
923 WHERE
924 evenement =".$this->valF['evenement'];
925
926 $res = $db->query($sql);
927 $this->f->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
928 $this->f->isDatabaseError();
929
930 $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
931
932 //Test qu'une restriction est présente
933 if ( isset($row['restriction']) && $row['restriction'] != "" ){
934
935 //Test si la restriction est valide
936 if ( !$this->restrictionIsValid($row['restriction']) ){
937
938 $this->correct=false;
939 $this->addToMessage(_("Restriction non valide"));
940 }
941 else {
942
943 $this->correct = true;
944 }
945 }
946 }
947
948 /**
949 * Méthode permettant de mettre à jour l'état d'un DA
950 */
951 function majEtatDA() {
952 if($this->valF['action'] == 'accepter' AND $this->valF['avis_decision'] == 8) {
953 $val['etat']=5;
954 } elseif($this->valF['action'] == 'accepter' AND $this->valF['avis_decision'] == 15) {
955 $val['etat']=3;
956 } elseif($this->valF['action'] == 'accepter') {
957 $val['etat']=2;
958 } elseif($this->valF['action'] == 'rejeter') {
959 $val['etat']=4;
960 } elseif($this->valF['action'] == 'terminer') {
961 $val['etat']=8;
962 } elseif($this->valF['action'] == 'majorer') {
963 $val['etat']=6;
964 } else {
965 $val['etat']=7;
966 }
967
968 //Récupération du numéro de dossier d'autorisation lié au dossier d'instruction
969 $sql = "SELECT
970 dossier_autorisation.dossier_autorisation
971 FROM
972 ".DB_PREFIXE."dossier_autorisation
973 LEFT JOIN
974 ".DB_PREFIXE."dossier
975 ON
976 dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
977 WHERE
978 dossier.dossier = '".$this->valF['dossier']."'";
979
980 $IDdossier_autorisation = $this->db->getOne($sql);
981 $this->addToLog("majEtatDA(): db->getone(\"".$sql."\")", VERBOSE_MODE);
982 database::isError($IDdossier_autorisation);
983
984 // Mis à jour de l'état du dossier d'autorisation
985 require_once '../obj/dossier_autorisation.class.php';
986 $dossier_autorisation = new dossier_autorisation($IDdossier_autorisation,$this->db,DEBUG);
987
988 $dossier_autorisation->val[array_search("etat", $dossier_autorisation->champs)] = $val['etat'];
989
990 //Récupération des données
991 $valDossierAutorisation = array();
992 for ( $i=0 ; $i<count($dossier_autorisation->champs); $i++){
993
994 $valDossierAutorisation[$dossier_autorisation->champs[$i]]=
995 $dossier_autorisation->val[$i];
996 }
997
998 $dossier_autorisation->modifier($valDossierAutorisation, $this->db, DEBUG);
999 }
1000
1001 /**
1002 * Méthode permettant de mettre à jour les données d'un DA
1003 */
1004 function majDataDA() {
1005
1006 }
1007 }// fin classe
1008 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26