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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1908 - (hide annotations)
Mon May 27 07:54:33 2013 UTC (11 years, 8 months ago) by fmichon
File size: 63490 byte(s)
Correction de la gestion des permissions en fonction de la division sur les objets en onglet dans le contexte d'un dossier d'instruction.

1 fraynaud 3 <?php
2 fmichon 1540 /**
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 fraynaud 3
23 fmichon 1540 //
24     require_once "../gen/obj/instruction.class.php";
25    
26     //
27     require_once "../services/outgoing/messageenqueuer.php";
28    
29     //
30 fraynaud 3 class instruction extends instruction_gen {
31    
32 fraynaud 20 var $archive_date_depot; // specific
33     var $retourformulaire; // specific
34     var $idxformulaire; // specific
35 nhaye 1724 var $valEvenement;
36 fraynaud 3
37 fmichon 1540 function instruction($id, &$db, $debug) {
38     $this->constructeur($id, $db, $debug);
39     }
40 fraynaud 20
41 fmichon 944 // {{{ Gestion de la confidentialité des données spécifiques
42    
43     /**
44     * Surcharge pour gérer les actions disponibles dans le portlet
45     */
46     function checkAccessibility() {
47     //
48     parent::checkAccessibility();
49 fmichon 1540 // Si l'utilisateur est un intructeur qui ne correspond pas à la
50 fmichon 944 // division du dossier
51     if ($this->f->isUserInstructeur()
52     && isset($this->f->om_utilisateur["division"])
53     && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
54     //
55     $this->actions_sup = array();
56     $this->setParameter("actions", array());
57     }
58     // Si une action 'lu' est présente et que le champ lu est à true
59     // on supprime l'action
60     if (isset($this->actions_sup["lu"])
61     && isset($this->val[array_search("lu", $this->champs)])
62     && $this->val[array_search("lu", $this->champs)]== "t") {
63     unset($this->actions_sup["lu"]);
64     }
65 vpihour 1899
66     //Si le document est déjà finalisé, on affiche uniquement le lien de
67     //dé-finalisation
68     if ( isset($this->actions_sup["finalisation"]) &&
69     isset($this->val[array_search("om_final_instruction", $this->champs)])
70     && $this->val[array_search("om_final_instruction", $this->champs)]== "t" ){
71     unset($this->actions_sup["finalisation"]);
72     }
73     //Si le document n'est pas finalisé, on affiche uniquement le lien de
74     //finalisation
75     if ( isset($this->actions_sup["definalisation"]) &&
76     isset($this->val[array_search("om_final_instruction", $this->champs)])
77     && $this->val[array_search("om_final_instruction", $this->champs)]!= "t" ){
78     unset($this->actions_sup["definalisation"]);
79     }
80 fmichon 944 }
81    
82     /**
83     * Cette methode est à surcharger elle permet de tester dans chaque classe
84     * des droits des droits spécifiques en fonction des données
85     */
86     function canAccess() {
87     // Si l'utilisateur est un intructeur qui ne correspond pas à la
88     // division du dossier
89     if ($this->f->isUserInstructeur()
90     && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
91     && $this->getParameter("maj") != 3) {
92     //
93 fmichon 1908 $this->addToLog("canAccess(): utilisateur instructeur sur un dossier d'une autre division", EXTRA_VERBOSE_MODE);
94 fmichon 944 return false;
95     }
96     //
97     return true;
98     }
99    
100     /**
101 fmichon 1908 * Cette variable permet de stocker le résultat de la méthode
102     * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
103     * ces appels.
104     * @var string Code de la division du dossier en cours
105 fmichon 944 */
106 fmichon 1908 var $_division_from_dossier = NULL;
107    
108     /**
109     * Cette méthode permet de récupérer le code de division correspondant
110     * au dossier sur lequel on se trouve.
111     *
112     * @return string Code de la division du dossier en cours
113     */
114 fmichon 944 function getDivisionFromDossier() {
115 fmichon 1908
116     // Cette méthode peut être appelée plusieurs fois lors d'une requête.
117     // Pour éviter de refaire le traitement de recherche de la division
118     // alors on vérifie si nous ne l'avons pas déjà calculé.
119     if ($this->_division_from_dossier != NULL) {
120     // Logger
121     $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
122     // On retourne la valeur déjà calculée
123     return $this->_division_from_dossier;
124 fmichon 944 }
125 fmichon 1908
126     // Par défaut, on définit la valeur du dossier à NULL
127     $dossier = NULL;
128     // Test sur le mode et le contexte du formulaire
129     if ($this->getParameter("maj") == 0
130     && ($this->getParameter("retourformulaire") == "dossier"
131     || $this->getParameter("retourformulaire") == "dossier_instruction"
132     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
133     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
134     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
135     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures")) {
136     // Si on se trouve en mode AJOUT (seul mode où l'enregistrement
137     // n'existe pas en base de données) ET que nous nous trouvons
138     // dans le contexte d'un dossier d'instruction alors on récupère
139     // le numéro de dossier depuis le paramètre 'idxformulaire'
140     $dossier = $this->getParameter("idxformulaire");
141     } else {
142     // Sinon on récupère le numéro de dossier dans le champs dossier de
143     // l'enregistrement (en base de données)
144     $dossier = $this->getVal("dossier");
145     }
146    
147     // On appelle la méthode de la classe utils qui renvoi le code de la
148     // division d'un dossier, on la stocke pour ne pas refaire le calcul au
149     // prochain appel de cette méthode
150     $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
151     // Logger
152     $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
153     // On retourne la valeur retournée
154     return $this->_division_from_dossier;
155    
156 fmichon 944 }
157    
158 nhaye 1643 /**
159     * Cette méthode permet de récupérer le dossier d'autorisation d'un dossier
160     */
161     function getDossierAutorisationFromDossier($id) {
162     //
163     if (!isset($id)) {
164     return NULL;
165     }
166     //
167     $sql = "select dossier_autorisation from ".DB_PREFIXE."dossier ";
168     $sql .= " where dossier='".$id."'";
169     //
170     $dossier_autorisation = $this->db->getOne($sql);
171     $this->addToLog("getDossierAutorisationFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
172     database::isError($dossier_autorisation);
173     //
174     return $dossier_autorisation;
175     }
176    
177 fmichon 944 // }}}
178    
179 fmichon 1540 function setType(&$form, $maj) {
180     //
181     parent::setType($form, $maj);
182     // On cache tous les champs
183     // XXX
184 fraynaud 20 $form->setType('complement3', 'hidden');
185     $form->setType('bible3', 'hidden');
186     $form->setType('complement4', 'hidden');
187     $form->setType('bible4', 'hidden');
188     $form->setType('complement5', 'hidden');
189     $form->setType('bible5', 'hidden');
190     $form->setType('complement6', 'hidden');
191     $form->setType('bible6', 'hidden');
192     $form->setType('complement7', 'hidden');
193     $form->setType('bible7', 'hidden');
194     $form->setType('complement8', 'hidden');
195     $form->setType('bible8', 'hidden');
196     $form->setType('complement9', 'hidden');
197     $form->setType('bible9', 'hidden');
198     $form->setType('complement10', 'hidden');
199     $form->setType('bible10', 'hidden');
200     $form->setType('complement11', 'hidden');
201     $form->setType('bible11', 'hidden');
202     $form->setType('complement12', 'hidden');
203     $form->setType('bible12', 'hidden');
204     $form->setType('complement13', 'hidden');
205     $form->setType('bible13', 'hidden');
206     $form->setType('complement14', 'hidden');
207     $form->setType('bible14', 'hidden');
208     $form->setType('complement15', 'hidden');
209     $form->setType('bible15', 'hidden');
210 fmichon 1540 //
211 fraynaud 20 $form->setType('delai', 'hidden');
212     $form->setType('etat', 'hidden');
213     $form->setType('accord_tacite', 'hidden');
214     $form->setType('action', 'hidden');
215     $form->setType('delai_notification', 'hidden');
216 vpihour 489 $form->setType('avis_decision', 'hidden');
217 fmichon 1540 //
218 fraynaud 20 $form->setType('archive_delai', 'hidden');
219     $form->setType('archive_etat', 'hidden');
220     $form->setType('archive_accord_tacite', 'hidden');
221     $form->setType('archive_avis', 'hidden');
222     $form->setType('archive_date_complet', 'hidden');
223 nhaye 1571 $form->setType('archive_date_dernier_depot', 'hidden');
224 fraynaud 20 $form->setType('archive_date_rejet', 'hidden');
225     $form->setType('archive_date_limite', 'hidden');
226     $form->setType('archive_date_notification_delai', 'hidden');
227     $form->setType('archive_date_decision', 'hidden');
228     $form->setType('archive_date_validite', 'hidden');
229     $form->setType('archive_date_achevement', 'hidden');
230     $form->setType('archive_date_conformite', 'hidden');
231 nhaye 428 $form->setType('archive_date_chantier', 'hidden');
232 fmichon 1540 //
233 vpihour 1307 $form->setType('numero_arrete', 'hidden');
234 vpihour 1784 //
235     $form->setType('code_barres', 'hidden');
236 fmichon 1540
237     //
238 nhaye 1717 $form->setType('archive_incompletude','hidden');
239     $form->setType('archive_evenement_suivant_tacite','hidden');
240     $form->setType('archive_evenement_suivant_tacite_incompletude','hidden');
241     $form->setType('archive_etat_pendant_incompletude','hidden');
242     $form->setType('archive_date_limite_incompletude','hidden');
243     $form->setType('archive_delai_incompletude','hidden');
244 fmichon 1540 if ($maj < 2) { //ajouter et modifier
245     $form->setType('destinataire', 'hidden');
246     $form->setType('lettretype', 'hiddenstatic');
247     $form->setType('complement', 'textarea');
248     $form->setType('complement2', 'textarea');
249     $form->setType('bible_auto', 'httpclick');
250     $form->setType('bible', 'httpclick');
251     $form->setType('bible2', 'httpclick');
252     $form->setType('dossier', 'hidden');
253     $form->setType('libelle', 'hiddenstatic');
254     $form->setType('signataire_arrete','select');
255 nhaye 1564 $form->setType('date_envoi_signature','datedisabled');
256     $form->setType('date_retour_signature','datedisabled');
257     $form->setType('date_envoi_rar','datedisabled');
258     $form->setType('date_retour_rar','datedisabled');
259     $form->setType('date_envoi_controle_legalite','datedisabled');
260     $form->setType('date_retour_controle_legalite','datedisabled');
261 fmichon 1540 if($maj==0){ // add
262     $form->setType('instruction', 'hiddenstatic');
263     $form->setType('evenement', 'select');
264     $form->setType('date_evenement', 'date2');
265     }else{ // modify
266     $form->setType('instruction', 'hiddenstatic');
267     $form->setType('evenement', 'selecthiddenstatic');
268     //$form->setType('date_evenement', 'hiddenstaticdate');
269     $form->setType('date_evenement', 'date2');
270     // necessaire pour calcul de date en modification
271     //$form->setType('delai', 'hiddenstatic');
272     }
273     } elseif($maj==2){
274     $form->setType('dossier', 'hidden');
275     $form->setType('bible_auto', 'hidden');
276     $form->setType('bible', 'hidden');
277     $form->setType('bible2', 'hidden');
278     }else {
279     $form->setType('destinataire', 'hidden');
280     $form->setType('dossier', 'hidden');
281     $form->setType('bible_auto', 'hidden');
282     $form->setType('bible', 'hidden');
283     $form->setType('bible2', 'hidden');
284     }
285 vpihour 1899
286     //Cache les champs pour la finalisation
287     $form->setType('om_fichier_instruction', 'hidden');
288     $form->setType('om_final_instruction', 'hidden');
289 fraynaud 20 }
290 fmichon 1540
291     function setSelect(&$form, $maj,&$db,$debug) {
292     /**
293     * On ne surcharge pas la méthode parent car une requête sur la table
294     * dossier est mauvaise pour les performances, car la requête qui
295     * concerne evenement est plus complexe que celle générée et car les
296     * champs action, avis_decision et etat ne sont pas utilisés comme des
297     * select
298     */
299 atreal 312 if(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc.php"))
300     include ("../sql/".$db->phptype."/".$this->table.".form.inc.php");
301 fmichon 1540 elseif(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc"))
302     include ("../sql/".$db->phptype."/".$this->table.".form.inc");
303 nhaye 428
304 fmichon 1540 //// action
305     //$this->init_select($form, $db, $maj, $debug, "action",
306     // $sql_action, $sql_action_by_id, false);
307 vpihour 1227
308 fmichon 1540 //// avis_decision
309     //$this->init_select($form, $db, $maj, $debug, "avis_decision",
310     // $sql_avis_decision, $sql_avis_decision_by_id, false);
311 nhaye 1140
312 fmichon 1540 //// dossier
313     //$this->init_select($form, $db, $maj, $debug, "dossier",
314     // $sql_dossier, $sql_dossier_by_id, false);
315 nhaye 428
316 fmichon 1540 //// etat
317     //$this->init_select($form, $db, $maj, $debug, "etat",
318     // $sql_etat, $sql_etat_by_id, false);
319    
320     //// evenement
321     //$this->init_select($form, $db, $maj, $debug, "evenement",
322     // $sql_evenement, $sql_evenement_by_id, false);
323    
324     // signataire_arrete
325     $this->init_select($form, $db, $maj, $debug, "signataire_arrete",
326     $sql_signataire_arrete, $sql_signataire_arrete_by_id, true);
327    
328     /**
329     * Gestion du filtre sur les événements de workflow disponibles
330     * On récupère ici en fonction de l'état du dossier d'instruction en
331     * cours et du type du dossier d'instruction en cours la liste
332     * événements disponibles.
333     */
334     if ($maj == 0) {
335     // Récupération des événements par une jointure entre la table dossier
336     // et la table transition et la table evenement et la table
337     // lien_dossier_instruction_type_evenement en fonction de l'identifiant
338     // du dossier d'instruction en cours
339     $sql = "SELECT
340     evenement.evenement,
341     (evenement.libelle||' ['||evenement.action||']') as lib
342     FROM ".DB_PREFIXE."dossier
343     INNER JOIN ".DB_PREFIXE."lien_dossier_instruction_type_evenement
344     ON dossier.dossier_instruction_type=lien_dossier_instruction_type_evenement.dossier_instruction_type
345     INNER JOIN ".DB_PREFIXE."evenement
346     ON evenement.evenement=lien_dossier_instruction_type_evenement.evenement
347     INNER JOIN ".DB_PREFIXE."transition
348     ON evenement.evenement = transition.evenement
349     AND dossier.etat=transition.etat
350     WHERE dossier.dossier='".$this->idxformulaire."'
351     ORDER BY evenement.action";
352     $res = $db->query($sql);
353     $this->addToLog("setSelect(): db->query(\"".$sql."\");", VERBOSE_MODE);
354     if (database::isError($res)) {
355     die($res->getMessage());
356 fraynaud 20 }
357 fmichon 1540 // Remplissage du tableau du select
358     $contenu = array(
359     0 => array("",),
360     1 => array(_('choisir')." "._('evenement'),)
361     );
362     while ($row=& $res->fetchRow()) {
363     $contenu[0][] = $row[0];
364     $contenu[1][] = $row[1];
365     }
366     $form->setSelect("evenement", $contenu);
367     } else {
368     $sql = "SELECT
369     (evenement.libelle||' ['||evenement.action||']') as lib
370     FROM ".DB_PREFIXE."evenement
371     WHERE evenement.evenement=".$this->getVal("evenement")."";
372     $res = $db->getone($sql);
373     $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
374     if (database::isError($res)) {
375     die($res->getMessage());
376     }
377     //
378     $contenu = array(
379     0 => array($this->getVal("evenement"),),
380     1 => array($res,)
381     );
382     $form->setSelect("evenement", $contenu);
383 fraynaud 20 }
384 fmichon 1540
385     /**
386     * Gesion des liens vers la bible
387     */
388     // lien bible_auto
389     $contenu = array(_("automatique"));
390 nhaye 428 $form->setSelect("bible_auto",$contenu);
391     // lien bible1
392 fmichon 1540 $contenu = array(_("bible"));
393 nhaye 428 $form->setSelect("bible",$contenu);
394     // lien bible2
395 fmichon 1540 $contenu = array(_("bible"));
396 nhaye 428 $form->setSelect("bible2",$contenu);
397 fmichon 1540 }
398 fraynaud 20
399 fmichon 1540 function cleSecondaire($id, &$db, $val, $DEBUG) {
400     //
401     parent::cleSecondaire($id, $db, $val, $DEBUG);
402    
403     /**
404     * Vérification que l'élément supprimé est le dernier pour pouvoir
405     * remodifier les données de manière itérative.
406     */
407     // Initialisation
408     $dernierevenement = "";
409     // Récupération du dernier élément de la table d'instruction qui
410     // concerne le dossier en cours
411     $sql = "SELECT max(instruction)
412     FROM ".DB_PREFIXE."instruction
413     WHERE dossier ='".$this->idxformulaire."'";
414     $dernierevenement = $db->getOne($sql);
415     $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
416     if (database::isError($dernierevenement)) {
417     die($dernierevenement->getMessage());
418     }
419     // Si on se trouve effectivement sur le dernier evenement d'instruction
420     if ($dernierevenement == $id) {
421     // Alors on valide la suppression
422     $this->correct = true;
423     $this->addToMessage(_('Destruction_chronologique'));
424     } else {
425     // Alors on annule la suppression
426     $this->correct = false;
427     $this->addToMessage(_("Seul le dernier evenement d'instruction peut etre supprime."));
428     }
429     }
430    
431 nhaye 1564 // Vérification de la non modification des dates de suivi
432     function updateDate($champ) {
433     if($this->valF[$champ] != "") {
434     if($this->getVal($champ) != "" AND $this->getVal($champ) != $this->valF[$champ]) {
435     $this->correct = false;
436     $this->addToMessage(_("Les dates de suivis ne peuvent etre modifiees"));
437     }
438     }
439     }
440    
441 fmichon 1540 // Sélectionne le signataire_arrete par défaut
442     function setVal(&$form,$maj,$validation){
443    
444     // Ajout
445     if($maj == 0) {
446    
447     // Création de la requête
448     $sql = "SELECT signataire_arrete
449     FROM ".DB_PREFIXE."signataire_arrete
450     WHERE defaut IS TRUE";
451    
452     // Exécution de la requête
453 vpihour 1777 $res = $this->f->db->query($sql);
454 fmichon 1540 $this->f->addToLog("deleteAllLienDossierInstructionTypeEvenementEvenement(): db->query(\"".$sql."\");", VERBOSE_MODE);
455 vpihour 1777 if ( database::isError($res)){
456     die();
457     }
458 fmichon 1540
459     $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
460    
461     if ( isset($row['signataire_arrete']) && is_numeric($row['signataire_arrete'])){
462    
463     $form->setVal("signataire_arrete",$row['signataire_arrete']);
464     }
465     }
466     }
467    
468     /*Met des valeurs par défaut dans certains des sous-formulaire*/
469     function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){
470     if ($validation==0 and $maj<2) {
471     if ($maj == 0){
472     $form->setVal("destinataire", $idxformulaire);
473     $form->setVal("dossier", $idxformulaire);
474     $form->setVal("date_evenement", date('Y-m-d'));
475     }
476     $form->setVal("bible_auto","bible_auto()");
477     $form->setVal("bible","bible()");
478     $form->setVal("bible2","bible2()");
479     }
480     $this->retourformulaire=$retourformulaire;
481     $this->idxformulaire=$idxformulaire;
482     }
483    
484    
485 nhaye 1439 function setLayout(&$form, $maj){
486     if ( $maj < 2 OR $maj == 3 ) {
487     /*Champ sur lequel s'ouvre le bloc 1 */
488     $form->setBloc('evenement','D',"","col_12");
489 fraynaud 20
490 nhaye 1439 $form->setFieldset('evenement','D',_('Evenement'));
491     $form->setFieldset('lettretype','F','');
492    
493     $form->setBloc('lettretype','F');
494    
495     $form->setBloc('date_finalisation_courrier','D',"","col_12");
496    
497     $form->setFieldset('date_finalisation_courrier','D',_('Dates'));
498     $form->setBloc('date_finalisation_courrier','D',"","col_6");
499     $form->setBloc('date_envoi_controle_legalite','F');
500    
501     $form->setBloc('signataire_arrete','D',"","col_6");
502     $form->setBloc('date_retour_controle_legalite','F');
503     $form->setFieldset('date_retour_controle_legalite','F','');
504    
505     $form->setBloc('date_retour_controle_legalite','F');
506    
507     $form->setBloc('complement','D',"","col_12");
508     $form->setFieldset('complement','D',_('Complement'));
509     $form->setFieldset('bible','F','');
510     $form->setBloc('bible','F');
511    
512     $form->setBloc('complement2','D',"","col_12");
513     $form->setFieldset('complement2','D',_('Complement 2'));
514     $form->setFieldset('bible2','F','');
515     $form->setBloc('bible2','F');
516     }
517 fraynaud 20 }
518    
519 fmichon 1540 function setLib(&$form, $maj) {
520     //
521     parent::setLib($form, $maj);
522     //
523     $form->setLib('bible_auto', "");
524     $form->setLib('bible', "");
525     $form->setLib('bible2', "");
526 fraynaud 20 }
527    
528 fmichon 1540 function triggerajouter($id, &$db, $val, $DEBUG) {
529     /**
530     * Le code suivant permet de récupérer des valeurs des tables evenement
531     * et dossier pour les stocker dans l'instruction :
532     * DEPUIS L'EVENEMENT
533     * - action
534     * - delai
535     * - accord_tacite
536     * - etat
537     * - avis_decision
538     * - delai_notification
539     * - lettretype
540     * DEPUIS LE DOSSIER D'INSTRUCTION
541     * - archive_delai
542     * - archive_accord_tacite
543     * - archive_etat
544     * - archive_avis
545     * - date_complet
546     * - date_rejet
547     * - date_limite
548     * - date_notification_delai
549     * - date_decision
550     * - date_validite
551     * - date_achevement
552     * - date_chantier
553     * - date_conformite
554     * Il permet également de stocker la date_depot du dossier d'instruction
555     * dans l'attribut $this->archive_date_depot de la classe.
556     */
557     // Récupération de tous les paramètres de l'événement sélectionné
558     $sql = "SELECT * FROM ".DB_PREFIXE."evenement
559     WHERE evenement=".$this->valF['evenement'];
560 fraynaud 20 $res = $db->query($sql);
561 fmichon 1540 $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
562     if (database::isError($res)) {
563     die($res->getMessage());
564     }
565     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
566     // Récupération de l'identifiant de l'action
567     // si une action est paramétrée dans l'événement
568     $this->valF['action'] = NULL;
569     if (isset($row['action']) and !empty($row['action'])) {
570 nhaye 460 $this->valF['action']=$row['action'];
571     }
572 fmichon 1540 // Récupération de la valeur du délai
573     $this->valF['delai'] = $row['delai'];
574     // Récupération de l'identifiant de l'état
575     // si un état est paramétré dans l'événement
576     $this->valF['etat']=NULL;
577     if (isset($row['etat']) and !empty($row['etat'])) {
578 nhaye 460 $this->valF['etat']=$row['etat'];
579     }
580 fmichon 1540 // Récupération de la valeur d'accord tacite
581 fraynaud 20 $this->valF['accord_tacite']=$row['accord_tacite'];
582 fmichon 1540 // Récupération de la valeur du délai de notification
583 fraynaud 20 $this->valF['delai_notification']=$row['delai_notification'];
584 fmichon 1540 // Récupération de l'identifiant de l'avis
585     // si un avis est paramétré dans l'événement
586     $this->valF['avis_decision'] = NULL;
587 vpihour 489 if(isset($row['avis_decision']) and !empty($row['avis_decision'])) {
588     $this->valF['avis_decision']=$row['avis_decision'];
589 fmichon 1540 }
590     // Récupération de la valeur de la lettre type
591     // Sinon on lui affecte lavaleur par défaut standard
592     if ($row['lettretype'] != "") {
593     $this->valF['lettretype']=$row['lettretype'];
594 nhaye 460 } else {
595 fmichon 1540 $this->valF['lettretype'] = "standard"; // XXX
596 nhaye 460 }
597 fraynaud 20 }
598 fmichon 1540 // Récupération de toutes les valeurs du dossier d'instruction en cours
599     $sql = "SELECT * FROM ".DB_PREFIXE."dossier
600     WHERE dossier='".$this->valF['dossier']."'";
601 fraynaud 20 $res = $db->query($sql);
602 fmichon 1540 $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
603     if (database::isError($res)) {
604 fraynaud 20 die($res->getMessage());
605 fmichon 1540 }
606     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
607     // XXX On stocke la date de dépôt actuelle du dossier d'instruction
608     // dans un attribut de la classe
609 fraynaud 20 $this->archive_date_depot = $row['date_depot'];
610 fmichon 1540 // Récupération de la valeur actuelle du délai, de l'accord tacite,
611     // de l'état et de l'avis du dossier d'instruction
612 fraynaud 20 $this->valF['archive_delai']=$row['delai'];
613     $this->valF['archive_accord_tacite']=$row['accord_tacite'];
614     $this->valF['archive_etat']=$row['etat'];
615 vpihour 489 $this->valF['archive_avis']=$row['avis_decision'];
616 fmichon 1540 // Récupération de la valeur actuelle des 9 dates du dossier
617     // d'instruction
618     if ($row['date_complet'] != '') {
619     $this->valF['archive_date_complet']=$row['date_complet'];
620     }
621 nhaye 1571 if ($row['date_dernier_depot'] != '') {
622     $this->valF['archive_date_dernier_depot']=$row['date_dernier_depot'];
623     }
624 fmichon 1540 if ($row['date_rejet']!='') {
625     $this->valF['archive_date_rejet']= $row['date_rejet'];
626     }
627     if ($row['date_limite']!='') {
628     $this->valF['archive_date_limite']= $row['date_limite'];
629     }
630     if ($row['date_notification_delai']!='') {
631     $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];
632     }
633     if ($row['date_decision']!='') {
634     $this->valF['archive_date_decision']= $row['date_decision'];
635     }
636     if ($row['date_validite']!='') {
637     $this->valF['archive_date_validite']= $row['date_validite'];
638     }
639     if ($row['date_achevement']!='') {
640     $this->valF['archive_date_achevement']= $row['date_achevement'];
641     }
642     if ($row['date_chantier']!='') {
643     $this->valF['archive_date_chantier']= $row['date_chantier'];
644     }
645     if ($row['date_conformite']!='') {
646     $this->valF['archive_date_conformite']= $row['date_conformite'];
647     }
648 nhaye 1724 if ($row['incompletude']!='') {
649     $this->valF['archive_incompletude']= $row['incompletude'];
650     }
651     if ($row['evenement_suivant_tacite']!='') {
652     $this->valF['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];
653     }
654     if ($row['evenement_suivant_tacite_incompletude']!='') {
655     $this->valF['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];
656     }
657     if ($row['etat_pendant_incompletude']!='') {
658     $this->valF['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];
659     }
660     if ($row['date_limite_incompletude']!='') {
661     $this->valF['archive_date_limite_incompletude']= $row['date_limite_incompletude'];
662     }
663     if ($row['delai_incompletude']!='') {
664     $this->valF['archive_delai_incompletude']= $row['delai_incompletude'];
665     }
666 fraynaud 20 }
667 vpihour 1784
668     // Identifiant du type de courrier
669     $idTypeCourrier = '11';
670     $idCourrier = str_pad($this->valF["instruction"], 10, "0", STR_PAD_LEFT);
671     // Code barres
672     $this->valF["code_barres"] = $idTypeCourrier . $idCourrier;
673 fraynaud 20 }
674    
675 vpihour 1137 // Test si une restriction est valide
676     // return boolean
677     function restrictionIsValid($restriction){
678    
679     /* Met des espace avant et après les opérateurs puis transforme la chaine en
680     * un tableau */
681     $tabRestriction = str_replace(">="," >= ",
682     str_replace("<="," <= ",
683     str_replace("-"," - ",
684     str_replace("+"," + ",$restriction))));
685     $tabRestriction = explode( " ", $tabRestriction);
686    
687     //Variables de résultat
688     $res = array();
689     $i = 0;
690     $comp = "";
691    
692    
693     //Test que le tableau n'est pas vide
694     if ( count($tabRestriction) > 0 ){
695    
696     $res[0] = $this->getRestrictionValue($tabRestriction[0]);
697    
698     //Calcul des variables
699     for ( $j = 1 ; $j < count($tabRestriction) ; $j += 2 ) {
700    
701     //Variable de comparaison
702     if ( strcmp( ">=", $tabRestriction[$j] ) == 0 ||
703     strcmp( "<=", $tabRestriction[$j]) ==0 ){
704    
705     $comp = $tabRestriction[$j];
706     $res[++$i] = $this->getRestrictionValue($tabRestriction[$j+1]);
707     }
708     // Fait l'addition
709     elseif ( strcmp( "+", $tabRestriction[$j]) == 0 ){
710    
711     $res[$i] = $this->moisdate( $res[$i], $this->getRestrictionValue($tabRestriction[$j+1]) );
712     }
713     }
714     }
715    
716     // Effectue le test
717     if ( strcmp($comp, ">=") == 0 ){
718    
719     if ( $res[0] >= $res[1] || $res[0] == "" ){
720    
721     return true;
722     }
723     else {
724    
725     return false;
726     }
727     }
728     elseif ( strcmp($comp, "<=") == 0 ){
729    
730     if ( $res[0] <= $res[1] || $res[1] == "" ){
731    
732     return true;
733     }
734     else {
735    
736     return false;
737     }
738     }
739    
740     return true;
741     }
742    
743     //Retourne la valeur de valF si $restrictionValue n'est pas un chiffre, le chiffre sinon
744     function getRestrictionValue($restrictionValue){
745    
746     return ( is_numeric($restrictionValue) ) ?
747     $restrictionValue :
748     $this->valF[$restrictionValue];
749     }
750    
751 fraynaud 123 function regle($regle){
752     $temp = explode ("+",$regle);
753 atreal 208 //echo '|'.$regle;
754 fraynaud 124 // cas rejet
755 fraynaud 129 if($regle=="null") // 1 dimension -> null
756 fraynaud 124 return null;
757     if(sizeof($temp)==1) // 1 dimension
758     if($temp[0]=="archive_date_depot") // initialisation avec le depot
759 fraynaud 123 return $this->$regle;
760 fraynaud 124 else // cas general
761 fraynaud 123 return $this->valF[$regle];
762 fraynaud 124 if(sizeof($temp)==2){ // 2 dimensions
763     if($temp[0]=="archive_date_depot") //initialisation avec le depot
764 fraynaud 123 if(is_numeric($temp[1]))
765     return $this->moisdate($this->$temp[0], $temp[1]);
766     else
767     return $this->moisdate($this->$temp[0], $this->valF[$temp[1]]);
768 fraynaud 124 if($temp[0]=="archive_delai") // majoration de delai
769     return $this->valF[$temp[0]]+$this->valF[$temp[1]];
770     // cas general 2 dimensions
771 fraynaud 123 if(is_numeric($temp[1]))
772     return $this->moisdate($this->valF[$temp[0]], $temp[1]);
773     else
774     return $this->moisdate($this->valF[$temp[0]], $this->valF[$temp[1]]);
775     }
776 fraynaud 124 if(sizeof($temp)==3){ // 3 dimensions
777     // cas date de validite de sursis
778     if(is_numeric($temp[1]))
779     $temp1 = $this->moisdate($this->valF[$temp[0]], $temp[1]);
780     else
781     $temp1 = $this->moisdate($this->valF[$temp[0]], $this->valF[$temp[1]]);
782     if(is_numeric($temp[2]))
783     return $this->moisdate($temp1, $temp[2]);
784     else
785     return $this->moisdate($temp1, $this->valF[$temp[2]]);
786     }
787 fraynaud 123 }
788    
789    
790 fmichon 1540
791 fraynaud 20 function triggerajouterapres($id,&$db,$val,$DEBUG) {
792 fmichon 1540 /**
793     * Mise à jour des valeurs du dossier en fonction des valeurs calculées
794     * par l'action
795     */
796 nhaye 1724 $this->getValEvenement();
797 fmichon 1540 // Initialisation
798     $valF = "";
799 nhaye 1741 // état de complétude actuel du dossier
800     $incompletude = $this->dossierIncomplet();
801    
802     if($incompletude === FALSE) {
803     // Si l'événement d'instruction est de type incompletude
804     if($this->valEvenement['type'] == "incompletude") {
805     // On marque le dossier en incomplétude pour application des actions
806     $incompletude = TRUE;
807     // Set du flag incomplétude de la table dossier
808     $valF['incompletude'] = TRUE;
809     // Enregistrement de l'état dans la variable provisoire
810     $valF['etat_pendant_incompletude'] = $this->valF['archive_etat'];
811     }
812     } else {
813     // Si l'evenement d'instruction est de type retour ou contient une
814     // decision, on sort d'incomplétude
815     if($this->valEvenement['type'] == "retour" OR
816     $this->valEvenement['avis_decision'] != NULL) {
817     // On enlève la marque d'incomplétude pour application des actions
818     $incompletude = FALSE;
819     // On enlève le flag d'incomplétude sur l'enregistrement de la table dossier
820     $valF['incompletude'] = FALSE;
821     // Restauration de l'état depuis l'état provisoire
822     $valF['etat'] = $this->valF['archive_etat_pendant_incompletude'];
823     // On vide la variable provisoire ainsi que le délai de complétude
824     // et la date limite de complétude
825     $valF['etat_pendant_incompletude'] = NULL;
826     $valF['delai_incompletude'] = NULL;
827     $valF['date_limite_incompletude'] = NULL;
828     }
829     }
830 fmichon 1540 // Récupération des paramètres de l'action
831     $sql = "SELECT * FROM ".DB_PREFIXE."action
832     WHERE action='".$this->valF['action']."'";
833     $res = $db->query($sql);
834     $this->addToLog("triggerajouterapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
835     if (database::isError($res)) {
836     die($res->getMessage());
837     }
838     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
839 nhaye 1724
840 fmichon 1540 // pour chacune des regles, on applique la regle
841     if($row['regle_delai']!=''){
842     $valF['delai'] = $this->regle($row['regle_delai']);
843     }
844     if($row['regle_accord_tacite']!=''){
845     $valF['accord_tacite'] = $this->regle($row['regle_accord_tacite']);
846     }
847     if($row['regle_avis']!=''){
848     $valF['avis_decision'] = $this->regle($row['regle_avis']);
849     }
850     if($row['regle_date_limite']!=''){
851     $valF['date_limite']= $this->regle($row['regle_date_limite']);
852     }
853     if($row['regle_date_complet']!=''){
854     $valF['date_complet']= $this->regle($row['regle_date_complet']);
855     }
856 nhaye 1571 if($row['regle_date_dernier_depot']!=''){
857     $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot']);
858     }
859 fmichon 1540 if($row['regle_date_notification_delai']!=''){
860     $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);
861     }
862     if($row['regle_date_decision']!=''){
863     $valF['date_decision']= $this->regle($row['regle_date_decision']);
864     }
865     if($row['regle_date_rejet']!=''){
866     $valF['date_rejet']= $this->regle($row['regle_date_rejet']);
867     }
868     if($row['regle_date_validite']!=''){
869     $valF['date_validite']= $this->regle($row['regle_date_validite']);
870     }
871     if($row['regle_date_chantier']!=''){
872     $valF['date_chantier']= $this->regle($row['regle_date_chantier']);
873     }
874     if($row['regle_date_achevement']!=''){
875     $valF['date_achevement']= $this->regle($row['regle_date_achevement']);
876     }
877     if($row['regle_date_conformite']!=''){
878     $valF['date_conformite']= $this->regle($row['regle_date_conformite']);
879     }
880 nhaye 1731 if($row['regle_date_limite_incompletude']!=''){
881     $valF['date_limite_incompletude']= $this->regle($row['regle_date_limite_incompletude']);
882     }
883     if($row['regle_delai_incompletude']!=''){
884     $valF['delai_incompletude']= $this->regle($row['regle_delai_incompletude']);
885     }
886 nhaye 1741 if($row['regle_etat']!=''){
887     // Si on est dans le cas général ou qu'on est en incomplétude et
888     // qu'on a un événement de type incomplétude alors : on stocke
889     // l'état dans la variable courante
890     if ($incompletude == FALSE OR $this->valEvenement['type'] == "incompletude") {
891     $valF['etat'] = $this->regle($row['regle_etat']);
892     } else {
893     $valF['etat_pendant_incompletude'] = $this->regle($row['regle_etat']);
894     }
895     }
896    
897     if($this->valEvenement['evenement_suivant_tacite'] != '') {
898     // Si on est pas en incomplétude on stocke l'événement tacite
899     //de l'événement dans la variable courante
900     if ($incompletude == FALSE) {
901     $valF['evenement_suivant_tacite'] = $this->valEvenement['evenement_suivant_tacite'];
902     } else {
903     $valF['evenement_suivant_tacite_incompletude'] = $this->valEvenement['evenement_suivant_tacite'];
904     }
905     }
906 fmichon 1540 }
907     // Si des valeurs ont été calculées alors on met à jour l'enregistrement
908     if ($valF != "") {
909     // On met à jour le dossier
910     $cle = " dossier='".$this->valF['dossier']."'";
911     $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
912     $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
913     if (database::isError($res1)) {
914 fraynaud 20 die($res->getMessage());
915 fmichon 1540 }
916     // Affichage d'informations à l'utilisateur
917     $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
918 fraynaud 20 }
919 fmichon 1540
920     /**
921     * REFERENTIEL ERP
922     */
923 fmichon 1005 // verification si envoi vers ERP est active
924     if ($this->f->getParameter('option_erp') != "") {
925     // la nature du dossier
926     $nature_dossier = substr($this->idxformulaire,0,2);
927 fmichon 1540 //
928     $sql = "SELECT erp
929     FROM ".DB_PREFIXE."dossier
930     WHERE dossier='".$this->valF['dossier']."'";
931     $dossier_erp = $this->db->getone($sql);
932     $this->addToLog("triggerajouterapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
933     if (database::isError($res)) {
934     die($res->getMessage());
935     }
936     //
937     $sql = "SELECT libelle
938     FROM ".DB_PREFIXE."evenement
939     WHERE evenement='".$this->valF['evenement']."'";
940     $evenement_libelle = $this->db->getone($sql);
941     $this->addToLog("triggerajouterapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
942     if (database::isError($res)) {
943     die($res->getMessage());
944     }
945     //
946 fmichon 1005 if ($dossier_erp == 't') {
947     // envoi du message en cas d'un PC qui est ERP et sur lequel un evenement
948     // d'acceptation etait fait
949     if ($nature_dossier ==
950     $this->f->getParameter('erp_evenement_accepter_dossier_PC')
951     && $this->valF['evenement'] ==
952     $this->f->getParameter('erp_evenement_accepter_sans_reserve')) {
953     $msgenque = new MessageEnqueuer();
954     $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
955     $msgenque->setDecision($evenement_libelle);
956     $msgenque->enqueueMessage($msgenque::$ERP_ARRETE_PC_EFFECTUE);
957     }
958     if ($this->valF['evenement'] ==
959     $this->f->getParameter('erp_evenement_refuser_dossier')) {
960     $msgenque = new MessageEnqueuer();
961     $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
962     $msgenque->enqueueMessage($msgenque::$ERP_DECISION_CONFORMITE_EFFECTUE);
963     }
964 mlimic 936 }
965 fmichon 1005 } // fin de if ($this->f->getParameter('option_erp') != "")
966 nhaye 1643
967     // Mise à jour des données du dossier d'autorisation
968     require_once "../obj/dossier_autorisation.class.php";
969     $da = new dossier_autorisation($this->getDossierAutorisationFromDossier($this->valF['dossier']), $this->db, DEBUG);
970     $da->majDossierAutorisation();
971 fmichon 1540 }
972 fraynaud 129
973     function triggermodifierapres($id,&$db,$val,$DEBUG) {
974 fmichon 1540 /**
975     * L'objectif ici est d'effectuer les recalculs de date dans le dossier
976     * si la date de l'evenement est modifiee
977     */
978     // Initialisation
979     $valF = "";
980     // Récupération de l'action correspondante à l'événement
981     $sql = "SELECT action
982     FROM ".DB_PREFIXE."evenement
983     WHERE evenement=".$this->valF['evenement'];
984 fraynaud 129 $action = $db->getOne($sql);
985 fmichon 1540 $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
986     if (database::isError($action)) {
987     die($action->getMessage());
988     }
989 nhaye 1564
990     // Récupération de tous les paramètres de l'événement sélectionné
991     $sql = "SELECT * FROM ".DB_PREFIXE."evenement
992     WHERE evenement=".$this->valF['evenement'];
993     $res = $db->query($sql);
994     $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
995     if (database::isError($res)) {
996     die($res->getMessage());
997     }
998     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
999 nhaye 1657 // Si la date de retour signature est éditée on vérifie si il existe un événement automatique
1000 vpihour 1823 if ($this->getVal('date_retour_signature') == "" AND
1001     $this->valF['date_retour_signature'] != "" AND
1002     $row['evenement_retour_signature'] != "") {
1003 nhaye 1564 $new_instruction = new instruction("]", $db, $DEBUG);
1004 nhaye 1657 // Création d'un tableau avec la liste des champs de l'instruction
1005 nhaye 1564 foreach($new_instruction->champs as $champ) {
1006     $valNewInstr[$champ] = "";
1007     }
1008 nhaye 1657 // Définition des valeurs de la nouvelle instruction
1009 nhaye 1564 $valNewInstr["evenement"] = $row['evenement_retour_signature'];
1010     $valNewInstr["destinataire"] = $this->valF['destinataire'];
1011     $valNewInstr["dossier"] = $this->valF['dossier'];
1012     $valNewInstr["date_evenement"] = date("d/m/Y");
1013     $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1014     }
1015 nhaye 1657 // Si la date de retour AR est éditée on vérifie si il existe un événement automatique
1016 vpihour 1823 if ($this->getVal('date_retour_rar') == "" AND
1017     $this->valF['date_retour_rar'] != "" AND
1018     $row['evenement_retour_ar'] != "" ) {
1019 nhaye 1657 $new_instruction = new instruction("]", $db, $DEBUG);
1020     // Création d'un tableau avec la liste des champs de l'instruction
1021     foreach($new_instruction->champs as $champ) {
1022     $valNewInstr[$champ] = "";
1023     }
1024     // Définition des valeurs de la nouvelle instruction
1025     $valNewInstr["evenement"] = $row['evenement_retour_ar'];
1026     $valNewInstr["destinataire"] = $this->valF['destinataire'];
1027     $valNewInstr["dossier"] = $this->valF['dossier'];
1028     $valNewInstr["date_evenement"] = date("d/m/Y");
1029     $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1030     }
1031 nhaye 1564 }
1032    
1033 fmichon 1540 // Récupération des paramètres de l'action
1034     $sql = "SELECT * FROM ".DB_PREFIXE."action
1035     WHERE action='".$action."'";
1036 fraynaud 129 $res = $db->query($sql);
1037 fmichon 1540 $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1038     if (database::isError($res)) {
1039     die($res->getMessage());
1040     }
1041 fraynaud 129 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
1042     // application des regles sur le courrier + delai
1043 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_limite'])){
1044 fraynaud 129 $valF['date_limite']= $this->regle($row['regle_date_limite']);
1045     }
1046 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_complet'])){
1047 fraynaud 129 $valF['date_complet']= $this->regle($row['regle_date_complet']);
1048     }
1049 nhaye 1571 if(preg_match("/date_evenement/",$row['regle_date_dernier_depot'])){
1050     $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot']);
1051     }
1052 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_notification_delai'])){
1053 fraynaud 129 $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);
1054     }
1055 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_decision'])){
1056 fraynaud 129 $valF['date_decision']= $this->regle($row['regle_date_decision']);
1057     }
1058 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_rejet'])){
1059 fraynaud 129 $valF['date_rejet']= $this->regle($row['regle_date_rejet']);
1060     }
1061 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_validite'])){
1062 fraynaud 129 $valF['date_validite']= $this->regle($row['regle_date_validite']);
1063     }
1064 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_chantier'])){
1065 fraynaud 129 $valF['date_chantier']= $this->regle($row['regle_date_chantier']);
1066     }
1067 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_achevement'])){
1068 fraynaud 129 $valF['date_achevement']= $this->regle($row['regle_date_achevement']);
1069     }
1070 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_conformite'])){
1071 fraynaud 129 $valF['date_conformite']= $this->regle($row['regle_date_conformite']);
1072     }
1073 fmichon 1540 }
1074     // Si des valeurs ont été calculées alors on met à jour l'enregistrement
1075     if ($valF != "") {
1076     // On met à jour le dossier
1077     $cle = " dossier='".$this->valF['dossier']."'";
1078     $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1079     $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1080     if (database::isError($res1)) {
1081 fraynaud 129 die($res->getMessage());
1082 fmichon 1540 }
1083     // Affichage d'informations à l'utilisateur
1084     $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1085 fraynaud 129 }
1086 nhaye 1299
1087 fmichon 1540 /**
1088     * REFERENTIEL ARRETE
1089     */
1090     if ($this->f->getParameter('option_referentiel_arrete') != "") {
1091     if ($this->valF['date_retour_signature'] != $this->getVal('date_retour_signature')) {
1092     $msgenque = new MessageEnqueuer();
1093     $sqlArrete = "SELECT instruction.signataire_arrete as \"ws_DA_In_Signataire\",
1094     signataire_arrete.nom as \"ws_DA_In_Sign_Nom\",
1095     signataire_arrete.prenom as \"ws_DA_In_Sign_Prenom\",
1096     signataire_arrete.qualite as \"ws_DA_In_Sign_Qualite\",
1097     instruction.date_evenement as \"ws_DA_In_Dte_Redac\",
1098     '' as \"ws_DA_In_lieu_Redac\",
1099     instruction.dossier as \"ws_DA_In_N_Doss_DAS\",
1100     '' as \"ws_DA_In_Sigle\",
1101     instruction.etat as \"ws_DA_In_Decision\",
1102     dossier.date_depot as \"ws_DA_In_Dte_Depot_Dem\",
1103     dossier.terrain_numero as \"ws_DA_In_N_Voie\",
1104     '' as \"ws_DA_In_Type_Voie\",
1105     dossier.complement as \"ws_DA_In_Adresse1\",
1106     dossier.terrain_adresse_lieu_dit as \"ws_DA_In_Adresse2\",
1107     dossier.terrain_adresse_code_postal as \"ws_DA_In_CP\",
1108     dossier.terrain_adresse_localite as \"ws_DA_In_Ville\",
1109     dossier.terrain_references_cadastrales as \"ws_DA_In_Nb_Parcelle\",
1110     '' as \"ws_DA_In_Detail_Parcelle\",
1111     CONCAT(donnees_techniques.am_projet_desc,' ',donnees_techniques.co_projet_desc) as \"ws_DA_In_Nature_Trvx\",
1112     '' as \"ws_DA_In_Destination_Trvx\",
1113     dossier_autorisation_type_detaille.code as \"ws_DA_In_Type_Dos_Autoris\",
1114     COALESCE(particulier_nom,personne_morale_raison_sociale) as \"ws_DA_In_Nom_Petition\",
1115     COALESCE(particulier_prenom, personne_morale_denomination) as \"ws_DA_In_Prenom_Petition\",
1116     '' as \"ws_DA_In_Piece_GED\",
1117     instruction.date_retour_signature as \"ws_DA_In_Dte_Signature\"
1118     FROM ".DB_PREFIXE."instruction
1119     LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
1120     instruction.signataire_arrete = signataire_arrete.signataire_arrete
1121     LEFT JOIN ".DB_PREFIXE."dossier ON
1122     instruction.dossier = dossier.dossier
1123     LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur ON
1124     lien_dossier_demandeur.dossier = dossier.dossier
1125     LEFT JOIN ".DB_PREFIXE."demandeur ON
1126     lien_dossier_demandeur.demandeur = demandeur.demandeur
1127     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type ON
1128     dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1129     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille ON
1130     dossier_instruction_type.dossier_autorisation_type_detaille =
1131     dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1132     LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
1133     donnees_techniques.dossier_instruction = dossier.dossier
1134     WHERE instruction.instruction = ".$this->valF['instruction'];
1135     $resArrete = $this->db->query($sqlArrete);
1136     $this->f->addToLog("triggerModifierApres(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
1137 vpihour 1777 if ( database::isError($resArrete)){
1138     die();
1139     }
1140 fmichon 1540
1141     $rowArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
1142     $msgenque->setArreteInfo($rowArrete);
1143     $msgenque->enqueueMessage($msgenque::$ARRETE_ENVOI);
1144     }
1145 nhaye 1299 }
1146 nhaye 1643
1147     // Mise à jour des données du dossier d'autorisation
1148     require_once "../obj/dossier_autorisation.class.php";
1149     $da = new dossier_autorisation($this->getDossierAutorisationFromDossier($this->valF['dossier']), $this->db, DEBUG);
1150     $da->majDossierAutorisation();
1151 fraynaud 129 }
1152    
1153 fraynaud 20 function triggersupprimer($id,&$db,$val,$DEBUG) {
1154 fmichon 1540 /**
1155     * L'objectif ici est de repositionner les valeurs récupérées en
1156     * archive dans le dossier d'instruction avant de supprimer l'événement
1157     * d'instruction
1158     */
1159 fmichon 1618 // Mise à jour des 4 valeurs modifiées par l'action
1160     $valF['delai'] = $val['archive_delai'];
1161     $valF['accord_tacite'] = $val['archive_accord_tacite'];
1162     $valF['etat'] = $val['archive_etat'];
1163     if ($val['archive_avis'] != '') {
1164     $valF['avis_decision'] = $val['archive_avis'];
1165     } else {
1166     $valF['avis_decision'] = NULL;
1167     }
1168     // Mise à jour des 10 dates avec la valeur présente dans le formulaire
1169     // de suppression. Si la valeur de la date est vide alors on fixe
1170     // à la valeur NULL
1171     //
1172     if ($val['archive_date_complet'] != '') {
1173     $valF['date_complet'] = $val['archive_date_complet'];
1174     } else {
1175     $valF['date_complet'] = NULL;
1176     }
1177     if ($val['archive_date_dernier_depot'] != '') {
1178     $valF['date_dernier_depot'] = $val['archive_date_dernier_depot'];
1179     } else {
1180     $valF['date_dernier_depot'] = NULL;
1181     }
1182     if ($val['archive_date_rejet'] != '') {
1183     $valF['date_rejet'] = $val['archive_date_rejet'];
1184     } else {
1185     $valF['date_rejet'] = NULL;
1186     }
1187     if ($val['archive_date_limite'] != '') {
1188     $valF['date_limite'] = $val['archive_date_limite'];
1189     } else {
1190     $valF['date_limite'] = NULL;
1191     }
1192     if ($val['archive_date_notification_delai'] != '') {
1193     $valF['date_notification_delai'] = $val['archive_date_notification_delai'];
1194     } else {
1195     $valF['date_notification_delai'] = NULL;
1196     }
1197     if ($val['archive_date_decision'] != '') {
1198     $valF['date_decision'] = $val['archive_date_decision'];
1199     } else {
1200     $valF['date_decision'] = NULL;
1201     }
1202     if ($val['archive_date_validite'] != '') {
1203     $valF['date_validite'] = $val['archive_date_validite'];
1204     } else {
1205     $valF['date_validite'] = NULL;
1206     }
1207     if ($val['archive_date_achevement'] != '') {
1208     $valF['date_achevement'] = $val['archive_date_achevement'];
1209     } else {
1210     $valF['date_achevement'] = NULL;
1211     }
1212     if ($val['archive_date_chantier'] != '') {
1213     $valF['date_chantier'] = $val['archive_date_chantier'];
1214     } else {
1215     $valF['date_chantier'] = NULL;
1216     }
1217     if ($val['archive_date_conformite'] != '') {
1218     $valF['date_conformite'] = $val['archive_date_conformite'];
1219     } else {
1220     $valF['date_conformite'] = NULL;
1221     }
1222 nhaye 1724 if ($val['archive_incompletude'] != '') {
1223     $valF['incompletude'] = $val['archive_incompletude'];
1224     } else {
1225     $valF['incompletude'] = NULL;
1226     }
1227     if ($val['archive_evenement_suivant_tacite'] != '') {
1228     $valF['evenement_suivant_tacite'] = $val['archive_evenement_suivant_tacite'];
1229     } else {
1230     $valF['evenement_suivant_tacite'] = NULL;
1231     }
1232     if ($val['archive_evenement_suivant_tacite_incompletude'] != '') {
1233     $valF['evenement_suivant_tacite_incompletude'] = $val['archive_evenement_suivant_tacite_incompletude'];
1234     } else {
1235     $valF['evenement_suivant_tacite_incompletude'] = NULL;
1236     }
1237     if ($val['archive_etat_pendant_incompletude'] != '') {
1238     $valF['etat_pendant_incompletude'] = $val['archive_etat_pendant_incompletude'];
1239     } else {
1240     $valF['etat_pendant_incompletude'] = NULL;
1241     }
1242     if ($val['archive_date_limite_incompletude'] != '') {
1243     $valF['date_limite_incompletude'] = $val['archive_date_limite_incompletude'];
1244     } else {
1245     $valF['date_limite_incompletude'] = NULL;
1246     }
1247     if ($val['archive_delai_incompletude'] != '') {
1248     $valF['delai_incompletude'] = $val['archive_delai_incompletude'];
1249     } else {
1250     $valF['delai_incompletude'] = NULL;
1251     }
1252 fmichon 1540 // On met à jour le dossier
1253     $cle = " dossier='".$val['dossier']."'";
1254 fmichon 1618 $res = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1255 nhaye 1571 $this->addToLog("triggersupprimer(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1256 fmichon 1618 if (database::isError($res)) {
1257 fraynaud 20 die($res->getMessage());
1258     }
1259 fmichon 1540 // Affichage d'informations à l'utilisateur
1260 nhaye 1571 $this->addToMessage(_("Suppression de l'instruction")." [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1261 nhaye 1643
1262 fraynaud 20 }
1263 fmichon 1540
1264 nhaye 1643 function triggersupprimerapres($id,&$db,$val,$DEBUG) {
1265    
1266     // Mise à jour des données du dossier d'autorisation
1267     require_once "../obj/dossier_autorisation.class.php";
1268     $da = new dossier_autorisation($this->getDossierAutorisationFromDossier($val["dossier"]), $this->db, DEBUG);
1269     $da->majDossierAutorisation();
1270     }
1271    
1272 fraynaud 20 // =============================================
1273     // calcul de date avec ajout de mois (delais)
1274     // [add months (delay) and calculation final date]
1275     // LIMITE DE LA FONCTION si delai >24 MOIS
1276     // [limit : delay < 24 month]
1277     // =============================================
1278     function moisdate($date,$delaimois) {
1279     $temp = explode("-" , $date);
1280     $jour = (int) $temp[2];
1281     $mois = (int) $temp[1];
1282     $annee = (int) $temp[0];
1283     // calcul si delai superieur à 12 (limite 24) [delay > 24 month]
1284     if($delaimois>=12){
1285     $delaimois=$delaimois-12;
1286     $annee=$annee+1;
1287     }
1288     if($delaimois>=12){
1289     $delaimois=$delaimois-12;
1290     $annee=$annee+1;
1291     }
1292     // mois
1293     $mois=$mois+$delaimois;
1294     // calcul mois annee [calculation number of years if > 12 month]
1295     // nb de mois > à 12
1296     if ($mois>12){
1297     $mois=$mois-12;
1298     $annee=$annee+1;
1299     }
1300     // Calcul du nombre de jours dans le mois sélectionné [calculation number of days]
1301     switch($mois) {
1302     case "2":
1303     if ($annee % 4 == 0 && $annee % 100 != 0 || $annee % 400 == 0)
1304     $jourmax = 29;
1305     else
1306     $jourmax = 28;
1307     break;
1308     case "4":
1309     case "6":
1310     case "9":
1311     case "11":
1312     $jourmax = 30;
1313     break;
1314     default:
1315     $jourmax = 31;
1316     }
1317     if ($jour > $jourmax)
1318     $jour = $jourmax;
1319     //$dateretour=$annee."-".$mois."-".$jour;
1320     return $annee."-".$mois."-".$jour ;
1321     }
1322    
1323 vpihour 1137 // Vérifie la restriction sur l'événement
1324     function verifier($val = array(), &$db, $DEBUG){
1325 nhaye 1186 parent::verifier($val, $db, $DEBUG);
1326 vpihour 1784
1327     if ( isset($val['evenement']) && is_numeric($val['evenement'])){
1328 vpihour 1137 //Récupère la restriction
1329 vpihour 1784 $sql= "SELECT
1330     restriction
1331     FROM
1332     ".DB_PREFIXE."evenement
1333     WHERE
1334     evenement =".$val['evenement'];
1335    
1336     $res = $db->query($sql);
1337     $this->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
1338     if (database::isError($res)) {
1339     die($res->getMessage());
1340     }
1341     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
1342    
1343     //Test qu'une restriction est présente
1344     if ( isset($row['restriction']) && $row['restriction'] != "" ){
1345 vpihour 1137
1346 vpihour 1784 //Test si la restriction est valide
1347     if ( !$this->restrictionIsValid($row['restriction']) ){
1348    
1349     $this->correct=false;
1350     $this->addToMessage(_("Restriction non valide"));
1351     }
1352     else {
1353    
1354     $this->correct = true;
1355     }
1356 vpihour 1137 }
1357     }
1358 vpihour 1784
1359 nhaye 1564 $this->updateDate("date_envoi_signature");
1360     $this->updateDate("date_retour_signature");
1361     $this->updateDate("date_envoi_rar");
1362     $this->updateDate("date_retour_rar");
1363     $this->updateDate("date_envoi_controle_legalite");
1364     $this->updateDate("date_retour_controle_legalite");
1365 vpihour 1137 }
1366 vpihour 1284
1367 nhaye 1724 /**
1368     * Méthode permettant de récupérer toutes les valeurs de l'événement
1369     * sélectionné après validation du formulaire d'instruction
1370     *
1371     * @return array() veleurs de l'événement lié
1372     */
1373    
1374     private function getValEvenement() {
1375     if(!empty($this->valEvenement)) {
1376     return $this->valEvenement;
1377     } else {
1378     $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1379     WHERE evenement=".$this->valF['evenement'];
1380     $res = $this->db->query($sql);
1381     $this->addToLog("getValEvenement(): db->query(\"".$sql."\");", VERBOSE_MODE);
1382     if (database::isError($res)) {
1383     die($res->getMessage());
1384     }
1385     $this->valEvenement = $res->fetchRow(DB_FETCHMODE_ASSOC);
1386     return $this->valEvenement;
1387     }
1388     }
1389    
1390     /**
1391     * Méthode permettant de savoir si le dossier lié à l'instruction à le flag
1392     * incompletude à true après validation du formulaire d'instruction
1393     *
1394     * @return boolean
1395     */
1396     private function dossierIncomplet() {
1397     $sql = "SELECT incompletude FROM ".DB_PREFIXE."dossier
1398     WHERE dossier='".$this->valF['dossier']."'";
1399     $incompletude = $this->db->getOne($sql);
1400     $this->addToLog("dossierIncomplet(): db->query(\"".$sql."\");", VERBOSE_MODE);
1401     if (database::isError($incompletude)) {
1402     die($incompletude->getMessage());
1403     }
1404     if ($incompletude == 't') {
1405     return true;
1406     } else {
1407     return false;
1408     }
1409     }
1410    
1411 fraynaud 3 }// fin classe
1412 atreal 208 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26