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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26