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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3021 - (hide annotations)
Tue May 13 14:33:05 2014 UTC (10 years, 8 months ago) by nhaye
File size: 114069 byte(s)
Ajout d'informations dans le log des erreurs lors de la finalisation

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 softime 2771 * - function mois_date : pour ajouter des mois a une date
16 fmichon 1540 * [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 nhaye 2905 var $restriction_valid = null;
37 nhaye 1945 // Tableau contenant une partie des métadonnées arrêtés
38     var $metadonneesArrete;
39 fraynaud 3
40 nhaye 1928 var $metadata = array(
41 nhaye 1938 "om_fichier_instruction" => array(
42 nhaye 1928 "dossier" => "getDossier",
43 softime 2016 "dossier_version" => "getDossierVersion",
44 softime 2025 "numDemandeAutor" => "getNumDemandeAutor",
45     "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
46     "typeInstruction" => "getTypeInstruction",
47     "statutAutorisation" => "getStatutAutorisation",
48     "typeAutorisation" => "getTypeAutorisation",
49     "dateEvenementDocument" => "getDateEvenementDocument",
50 softime 2016 "groupeInstruction" => 'getGroupeInstruction',
51 softime 2025 "title" => 'getTitle',
52 nhaye 1928 ),
53     );
54    
55 nhaye 1945
56 nhaye 2561 function __construct($id, &$db, $debug) {
57 fmichon 1540 $this->constructeur($id, $db, $debug);
58     }
59 fraynaud 20
60 fmichon 944 // {{{ Gestion de la confidentialité des données spécifiques
61    
62     /**
63     * Surcharge pour gérer les actions disponibles dans le portlet
64     */
65     function checkAccessibility() {
66     //
67     parent::checkAccessibility();
68 fmichon 1540 // Si l'utilisateur est un intructeur qui ne correspond pas à la
69 fmichon 944 // division du dossier
70     if ($this->f->isUserInstructeur()
71     && isset($this->f->om_utilisateur["division"])
72     && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
73     //
74 vpihour 2104 //On cache les liens d'action
75     $this->parameters["actions"]["modifier"] = NULL;
76     $this->parameters["actions"]["supprimer"] = NULL;
77     $this->actions_sup["finalisation"] = NULL;
78 fmichon 944 }
79     // Si une action 'lu' est présente et que le champ lu est à true
80     // on supprime l'action
81     if (isset($this->actions_sup["lu"])
82     && isset($this->val[array_search("lu", $this->champs)])
83     && $this->val[array_search("lu", $this->champs)]== "t") {
84     unset($this->actions_sup["lu"]);
85     }
86 nhaye 2815
87     //Si pas de lettretype associée
88     if($this->getVal("lettretype") == "") {
89     // Suppression des actions sur fichier dans le portlet actions
90     $this->actions_sup["pdfetat"] = NULL;
91     $this->actions_sup["finalisation"] = NULL;
92     $this->actions_sup["definalisation"] = NULL;
93     }
94 vpihour 1899
95     //Si le document est déjà finalisé, on affiche uniquement le lien de
96     //dé-finalisation
97 vpihour 1931 $om_final_instruction = $this->getVal("om_final_instruction");
98 vpihour 1899 if ( isset($this->actions_sup["finalisation"]) &&
99 vpihour 1931 $om_final_instruction== "t" ){
100 vpihour 1921
101 vpihour 1986 //On cache les liens d'action
102     $this->parameters["actions"]["modifier"] = NULL;
103     $this->parameters["actions"]["supprimer"] = NULL;
104 vpihour 1921 //On cache le lien de finalisation et on affiche le bon lien pour l'édition
105 vpihour 1986 $this->actions_sup["finalisation"] = NULL;
106 vpihour 1921 $this->actions_sup["pdfetat"]["lien"] = "../spg/file.php?id=";
107     $this->actions_sup["pdfetat"]["id"] =
108 vpihour 1927 "&amp;obj=instruction&amp;champ=om_fichier_instruction";
109 vpihour 1899 }
110     //Si le document n'est pas finalisé, on affiche uniquement le lien de
111     //finalisation
112     if ( isset($this->actions_sup["definalisation"]) &&
113 vpihour 1931 $om_final_instruction!= "t" ){
114 vpihour 1921
115     //On cache le lien de finalisation et on affiche le bon lien pour l'édition
116 vpihour 1986 $this->actions_sup["definalisation"] = NULL;
117 vpihour 1921 $this->actions_sup["pdfetat"]["lien"] = "../app/pdf_instruction.php?idx=";
118     $this->actions_sup["pdfetat"]["id"] = "";
119 vpihour 1899 }
120 vpihour 1978
121     $idxformulaire = $this->getParameter("idxformulaire");
122     $retourformulaire = $this->getParameter("retourformulaire");
123     //Si le dossier d'instruction auquel est rattachée l'instruction est cloturé,
124     //on affiche pas les liens du portlet
125     if ( $idxformulaire != '' &&
126     (
127     $retourformulaire == 'dossier' ||
128     $retourformulaire == 'dossier_instruction' ||
129     $retourformulaire == 'dossier_instruction_mes_encours' ||
130     $retourformulaire == 'dossier_instruction_tous_encours' ||
131     $retourformulaire == 'dossier_instruction_mes_clotures' ||
132     $retourformulaire == 'dossier_instruction_tous_clotures'
133     )){
134    
135     //On récuppère le statut du dossier d'instruction
136 softime 2025 $statut = $this->getStatutAutorisationDossier($idxformulaire);
137 softime 2613 // Si l'utilisateur est un instructeur, que le statut est clôturé
138     // et que l'événement n'est pas identifié comme non verrouillable
139     if ( $this->f->isUserInstructeur() && $statut == "cloture"
140     && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false){
141 vpihour 1978
142 softime 2613 //On cache les liens du portlet
143 vpihour 1978 $this->parameters["actions"]["modifier"] = NULL;
144     $this->actions_sup["finalisation"] = NULL;
145     $this->actions_sup["definalisation"] = NULL;
146     }
147     }
148 fmichon 944 }
149    
150     /**
151     * Cette methode est à surcharger elle permet de tester dans chaque classe
152     * des droits des droits spécifiques en fonction des données
153     */
154     function canAccess() {
155     // Si l'utilisateur est un intructeur qui ne correspond pas à la
156     // division du dossier
157     if ($this->f->isUserInstructeur()
158     && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
159     && $this->getParameter("maj") != 3) {
160     //
161 fmichon 1908 $this->addToLog("canAccess(): utilisateur instructeur sur un dossier d'une autre division", EXTRA_VERBOSE_MODE);
162 fmichon 944 return false;
163     }
164 vpihour 1978
165     $retourformulaire = $this->getParameter("retourformulaire");
166 softime 2613 // Si l'utilisateur est un instructeur, que le dossier est cloturé,
167     // que l'utilisateur est dans un sous formulaire précis, que le
168     // formulaire n'est pas en mode consulter ou ajouter et que l'événement
169     // n'est pas identifié comme non verrouillable
170 vpihour 1978 if ( $this->f->isUserInstructeur() &&
171 softime 2613 $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
172     && (
173 vpihour 1978 $retourformulaire == 'dossier' ||
174     $retourformulaire == 'dossier_instruction' ||
175     $retourformulaire == 'dossier_instruction_mes_encours' ||
176     $retourformulaire == 'dossier_instruction_tous_encours' ||
177     $retourformulaire == 'dossier_instruction_mes_clotures' ||
178     $retourformulaire == 'dossier_instruction_tous_clotures'
179     )
180 softime 2613 && $this->getParameter("maj") != 3
181     && $this->getParameter("maj") != 0
182     && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
183    
184 vpihour 1978 return false;
185     }
186 fmichon 944 //
187     return true;
188     }
189    
190     /**
191 fmichon 1908 * Cette variable permet de stocker le résultat de la méthode
192     * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
193     * ces appels.
194     * @var string Code de la division du dossier en cours
195 fmichon 944 */
196 fmichon 1908 var $_division_from_dossier = NULL;
197    
198     /**
199     * Cette méthode permet de récupérer le code de division correspondant
200     * au dossier sur lequel on se trouve.
201     *
202     * @return string Code de la division du dossier en cours
203     */
204 fmichon 944 function getDivisionFromDossier() {
205 fmichon 1908
206     // Cette méthode peut être appelée plusieurs fois lors d'une requête.
207     // Pour éviter de refaire le traitement de recherche de la division
208     // alors on vérifie si nous ne l'avons pas déjà calculé.
209     if ($this->_division_from_dossier != NULL) {
210     // Logger
211     $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
212     // On retourne la valeur déjà calculée
213     return $this->_division_from_dossier;
214 fmichon 944 }
215 fmichon 1908
216     // Par défaut, on définit la valeur du dossier à NULL
217     $dossier = NULL;
218     // Test sur le mode et le contexte du formulaire
219     if ($this->getParameter("maj") == 0
220     && ($this->getParameter("retourformulaire") == "dossier"
221     || $this->getParameter("retourformulaire") == "dossier_instruction"
222     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
223     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
224     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
225     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures")) {
226     // Si on se trouve en mode AJOUT (seul mode où l'enregistrement
227     // n'existe pas en base de données) ET que nous nous trouvons
228     // dans le contexte d'un dossier d'instruction alors on récupère
229     // le numéro de dossier depuis le paramètre 'idxformulaire'
230     $dossier = $this->getParameter("idxformulaire");
231     } else {
232     // Sinon on récupère le numéro de dossier dans le champs dossier de
233     // l'enregistrement (en base de données)
234     $dossier = $this->getVal("dossier");
235     }
236    
237     // On appelle la méthode de la classe utils qui renvoi le code de la
238     // division d'un dossier, on la stocke pour ne pas refaire le calcul au
239     // prochain appel de cette méthode
240     $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
241     // Logger
242     $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
243     // On retourne la valeur retournée
244     return $this->_division_from_dossier;
245    
246 fmichon 944 }
247    
248 nhaye 1643 /**
249     * Cette méthode permet de récupérer le dossier d'autorisation d'un dossier
250     */
251 softime 2025 function getNumDemandeAutorFromDossier($id) {
252 nhaye 1643 //
253     if (!isset($id)) {
254     return NULL;
255     }
256     //
257     $sql = "select dossier_autorisation from ".DB_PREFIXE."dossier ";
258     $sql .= " where dossier='".$id."'";
259     //
260     $dossier_autorisation = $this->db->getOne($sql);
261 softime 2025 $this->addToLog("getNumDemandeAutorFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
262 nhaye 1643 database::isError($dossier_autorisation);
263     //
264     return $dossier_autorisation;
265     }
266    
267 fmichon 944 // }}}
268    
269 fmichon 1540 function setType(&$form, $maj) {
270     //
271     parent::setType($form, $maj);
272     // On cache tous les champs
273     // XXX
274 nhaye 2644 $form->setType('complement3_om_html', 'hidden');
275 fraynaud 20 $form->setType('bible3', 'hidden');
276 nhaye 2644 $form->setType('complement4_om_html', 'hidden');
277 fraynaud 20 $form->setType('bible4', 'hidden');
278 nhaye 2644 $form->setType('complement5_om_html', 'hidden');
279 fraynaud 20 $form->setType('bible5', 'hidden');
280 nhaye 2644 $form->setType('complement6_om_html', 'hidden');
281 fraynaud 20 $form->setType('bible6', 'hidden');
282 nhaye 2644 $form->setType('complement7_om_html', 'hidden');
283 fraynaud 20 $form->setType('bible7', 'hidden');
284 nhaye 2644 $form->setType('complement8_om_html', 'hidden');
285 fraynaud 20 $form->setType('bible8', 'hidden');
286 nhaye 2644 $form->setType('complement9_om_html', 'hidden');
287 fraynaud 20 $form->setType('bible9', 'hidden');
288 nhaye 2644 $form->setType('complement10_om_html', 'hidden');
289 fraynaud 20 $form->setType('bible10', 'hidden');
290 nhaye 2644 $form->setType('complement11_om_html', 'hidden');
291 fraynaud 20 $form->setType('bible11', 'hidden');
292 nhaye 2644 $form->setType('complement12_om_html', 'hidden');
293 fraynaud 20 $form->setType('bible12', 'hidden');
294 nhaye 2644 $form->setType('complement13_om_html', 'hidden');
295 fraynaud 20 $form->setType('bible13', 'hidden');
296 nhaye 2644 $form->setType('complement14_om_html', 'hidden');
297 fraynaud 20 $form->setType('bible14', 'hidden');
298 nhaye 2644 $form->setType('complement15_om_html', 'hidden');
299 fraynaud 20 $form->setType('bible15', 'hidden');
300 fmichon 1540 //
301 fraynaud 20 $form->setType('delai', 'hidden');
302     $form->setType('etat', 'hidden');
303     $form->setType('accord_tacite', 'hidden');
304     $form->setType('action', 'hidden');
305     $form->setType('delai_notification', 'hidden');
306 vpihour 489 $form->setType('avis_decision', 'hidden');
307 nhaye 2099 $form->setType('autorite_competente', 'hidden');
308 fmichon 1540 //
309 fraynaud 20 $form->setType('archive_delai', 'hidden');
310     $form->setType('archive_etat', 'hidden');
311     $form->setType('archive_accord_tacite', 'hidden');
312     $form->setType('archive_avis', 'hidden');
313 nmeucci 2838 $form->setType('archive_date_complet', 'hiddendate');
314     $form->setType('archive_date_dernier_depot', 'hiddendate');
315     $form->setType('archive_date_rejet', 'hiddendate');
316     $form->setType('archive_date_limite', 'hiddendate');
317     $form->setType('archive_date_notification_delai', 'hiddendate');
318     $form->setType('archive_date_decision', 'hiddendate');
319     $form->setType('archive_date_validite', 'hiddendate');
320     $form->setType('archive_date_achevement', 'hiddendate');
321     $form->setType('archive_date_conformite', 'hiddendate');
322     $form->setType('archive_date_chantier', 'hiddendate');
323 nhaye 2099 $form->setType('archive_autorite_competente','hidden');
324 fmichon 1540 //
325 vpihour 1307 $form->setType('numero_arrete', 'hidden');
326 vpihour 1784 //
327     $form->setType('code_barres', 'hidden');
328 fmichon 1540
329     //
330 nhaye 1717 $form->setType('archive_incompletude','hidden');
331     $form->setType('archive_evenement_suivant_tacite','hidden');
332     $form->setType('archive_evenement_suivant_tacite_incompletude','hidden');
333     $form->setType('archive_etat_pendant_incompletude','hidden');
334 nmeucci 2857 $form->setType('archive_date_limite_incompletude','hiddendate');
335 nhaye 1717 $form->setType('archive_delai_incompletude','hidden');
336 softime 2142
337     //
338     $form->setType('duree_validite','hidden');
339     $form->setType('duree_validite_parametrage','hidden');
340 fmichon 1540 if ($maj < 2) { //ajouter et modifier
341     $form->setType('destinataire', 'hidden');
342     $form->setType('lettretype', 'hiddenstatic');
343 nhaye 2644 $form->setType('complement_om_html', 'html');
344     $form->setType('complement2_om_html', 'html');
345 fmichon 1540 $form->setType('bible_auto', 'httpclick');
346     $form->setType('bible', 'httpclick');
347     $form->setType('bible2', 'httpclick');
348     $form->setType('dossier', 'hidden');
349     $form->setType('libelle', 'hiddenstatic');
350     $form->setType('signataire_arrete','select');
351 nhaye 1564 $form->setType('date_envoi_signature','datedisabled');
352     $form->setType('date_retour_signature','datedisabled');
353     $form->setType('date_envoi_rar','datedisabled');
354     $form->setType('date_retour_rar','datedisabled');
355     $form->setType('date_envoi_controle_legalite','datedisabled');
356     $form->setType('date_retour_controle_legalite','datedisabled');
357 vpihour 1966 $form->setType('date_finalisation_courrier','datedisabled');
358 softime 2049
359 nmeucci 2805
360 softime 2049
361 fmichon 1540 if($maj==0){ // add
362 nmeucci 2805 $form->setType('instruction', 'hidden');
363     $form->setType('lettretype', 'hidden');
364 fmichon 1540 $form->setType('evenement', 'select');
365     $form->setType('date_evenement', 'date2');
366     }else{ // modify
367     $form->setType('instruction', 'hiddenstatic');
368     $form->setType('evenement', 'selecthiddenstatic');
369     //$form->setType('date_evenement', 'hiddenstaticdate');
370     $form->setType('date_evenement', 'date2');
371     // necessaire pour calcul de date en modification
372     //$form->setType('delai', 'hiddenstatic');
373 nmeucci 2944 // les administrateurs technique et fonctionnel peuvent
374     // modifier tous les champs de date
375     if ($this->f->isAccredited("instruction_modification_dates")) {
376     $form->setType('date_envoi_signature', 'date');
377     $form->setType('date_retour_signature', 'date');
378     $form->setType('date_envoi_rar', 'date');
379     $form->setType('date_retour_rar', 'date');
380     $form->setType('date_envoi_controle_legalite', 'date');
381     $form->setType('date_retour_controle_legalite', 'date');
382     $form->setType('date_finalisation_courrier', 'date');
383 nmeucci 2805 }
384 fmichon 1540 }
385     } elseif($maj==2){
386     $form->setType('dossier', 'hidden');
387     $form->setType('bible_auto', 'hidden');
388     $form->setType('bible', 'hidden');
389     $form->setType('bible2', 'hidden');
390     }else {
391     $form->setType('destinataire', 'hidden');
392     $form->setType('dossier', 'hidden');
393     $form->setType('bible_auto', 'hidden');
394     $form->setType('bible', 'hidden');
395     $form->setType('bible2', 'hidden');
396     }
397 vpihour 1899
398     //Cache les champs pour la finalisation
399     $form->setType('om_fichier_instruction', 'hidden');
400     $form->setType('om_final_instruction', 'hidden');
401 nhaye 1945 // Cache le document arrêté
402 softime 2030 $form->setType('document_numerise', 'hidden');
403 vpihour 2069
404     //Masquer les champs date_envoi_controle_legalite et
405     //date_retour_controle_legalite si ce n'est pas un arrêté
406     if ( !is_numeric($this->getVal("avis_decision"))){
407    
408 nmeucci 2838 $form->setType("date_envoi_controle_legalite", "hiddendate");
409     $form->setType("date_retour_controle_legalite", "hiddendate");
410 vpihour 2069 }
411 fraynaud 20 }
412 fmichon 1540
413     function setSelect(&$form, $maj,&$db,$debug) {
414     /**
415     * On ne surcharge pas la méthode parent car une requête sur la table
416     * dossier est mauvaise pour les performances, car la requête qui
417     * concerne evenement est plus complexe que celle générée et car les
418     * champs action, avis_decision et etat ne sont pas utilisés comme des
419     * select
420     */
421 atreal 312 if(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc.php"))
422     include ("../sql/".$db->phptype."/".$this->table.".form.inc.php");
423 fmichon 1540 elseif(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc"))
424     include ("../sql/".$db->phptype."/".$this->table.".form.inc");
425 nhaye 428
426 fmichon 1540 //// action
427     //$this->init_select($form, $db, $maj, $debug, "action",
428     // $sql_action, $sql_action_by_id, false);
429 vpihour 1227
430 fmichon 1540 //// avis_decision
431     //$this->init_select($form, $db, $maj, $debug, "avis_decision",
432     // $sql_avis_decision, $sql_avis_decision_by_id, false);
433 nhaye 1140
434 fmichon 1540 //// dossier
435     //$this->init_select($form, $db, $maj, $debug, "dossier",
436     // $sql_dossier, $sql_dossier_by_id, false);
437 nhaye 428
438 fmichon 1540 //// etat
439     //$this->init_select($form, $db, $maj, $debug, "etat",
440     // $sql_etat, $sql_etat_by_id, false);
441    
442     //// evenement
443     //$this->init_select($form, $db, $maj, $debug, "evenement",
444     // $sql_evenement, $sql_evenement_by_id, false);
445    
446     // signataire_arrete
447     $this->init_select($form, $db, $maj, $debug, "signataire_arrete",
448     $sql_signataire_arrete, $sql_signataire_arrete_by_id, true);
449    
450     /**
451     * Gestion du filtre sur les événements de workflow disponibles
452     * On récupère ici en fonction de l'état du dossier d'instruction en
453     * cours et du type du dossier d'instruction en cours la liste
454     * événements disponibles.
455     */
456     if ($maj == 0) {
457     // Récupération des événements par une jointure entre la table dossier
458     // et la table transition et la table evenement et la table
459     // lien_dossier_instruction_type_evenement en fonction de l'identifiant
460     // du dossier d'instruction en cours
461     $sql = "SELECT
462     evenement.evenement,
463 nmeucci 2853 evenement.libelle as lib
464 fmichon 1540 FROM ".DB_PREFIXE."dossier
465     INNER JOIN ".DB_PREFIXE."lien_dossier_instruction_type_evenement
466     ON dossier.dossier_instruction_type=lien_dossier_instruction_type_evenement.dossier_instruction_type
467     INNER JOIN ".DB_PREFIXE."evenement
468     ON evenement.evenement=lien_dossier_instruction_type_evenement.evenement
469     INNER JOIN ".DB_PREFIXE."transition
470     ON evenement.evenement = transition.evenement
471     AND dossier.etat=transition.etat
472     WHERE dossier.dossier='".$this->idxformulaire."'
473 vpihour 2614 ORDER BY evenement.libelle, evenement.action";
474 fmichon 1540 $res = $db->query($sql);
475     $this->addToLog("setSelect(): db->query(\"".$sql."\");", VERBOSE_MODE);
476     if (database::isError($res)) {
477     die($res->getMessage());
478 fraynaud 20 }
479 fmichon 1540 // Remplissage du tableau du select
480     $contenu = array(
481     0 => array("",),
482     1 => array(_('choisir')." "._('evenement'),)
483     );
484     while ($row=& $res->fetchRow()) {
485     $contenu[0][] = $row[0];
486     $contenu[1][] = $row[1];
487     }
488     $form->setSelect("evenement", $contenu);
489     } else {
490     $sql = "SELECT
491 nmeucci 2853 evenement.libelle as lib
492 fmichon 1540 FROM ".DB_PREFIXE."evenement
493     WHERE evenement.evenement=".$this->getVal("evenement")."";
494     $res = $db->getone($sql);
495     $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
496     if (database::isError($res)) {
497     die($res->getMessage());
498     }
499     //
500     $contenu = array(
501     0 => array($this->getVal("evenement"),),
502     1 => array($res,)
503     );
504     $form->setSelect("evenement", $contenu);
505 fraynaud 20 }
506 fmichon 1540
507     /**
508     * Gesion des liens vers la bible
509     */
510     // lien bible_auto
511     $contenu = array(_("automatique"));
512 nhaye 428 $form->setSelect("bible_auto",$contenu);
513     // lien bible1
514 fmichon 1540 $contenu = array(_("bible"));
515 nhaye 428 $form->setSelect("bible",$contenu);
516     // lien bible2
517 fmichon 1540 $contenu = array(_("bible"));
518 nhaye 428 $form->setSelect("bible2",$contenu);
519 fmichon 1540 }
520 fraynaud 20
521 fmichon 1540 function cleSecondaire($id, &$db, $val, $DEBUG) {
522     //
523     parent::cleSecondaire($id, $db, $val, $DEBUG);
524 vpihour 2000
525 vpihour 2606 $id = $this->getVal($this->clePrimaire);
526 vpihour 2604
527 vpihour 2603
528 softime 2633 //Requête de vérification que cet événement d'instruction n'est pas lié
529 vpihour 2606 //à la création d'un dossier d'instruction
530     $sql = "SELECT demande_type.dossier_instruction_type
531     FROM ".DB_PREFIXE."demande_type
532     LEFT JOIN ".DB_PREFIXE."demande
533     ON demande.demande_type = demande_type.demande_type
534     WHERE demande.instruction_recepisse = ".$id;
535     $res = $this->db->getOne($sql);
536     $this->addToLog("cleSecondaire(): db->getone(\"".$sql."\");", VERBOSE_MODE);
537     if (database::isError($res)) {
538     die($res->getMessage());
539     }
540    
541     // Aucune clé secondaire n'a été trouvée ou c'est un événement sans
542     //création de dossier d'instruction, l'événement d'instruction peut être
543     //supprimé
544 vpihour 2603 if ( $this->correct !== false || $res == null || $res == ""){
545 vpihour 2606
546 softime 2633 // Requête de vérification que cet événement d'instruction est lié
547     // à une demande
548     $sql = "SELECT demande
549     FROM ".DB_PREFIXE."demande
550     WHERE instruction_recepisse = ".$id;
551     $res = $this->db->getOne($sql);
552     $this->addToLog("cleSecondaire(): db->getone(\"".$sql."\");", VERBOSE_MODE);
553     if (database::isError($res)) {
554     die($res->getMessage());
555     }
556    
557 vpihour 2606 //Si c'est un événement d'instruction lié à une demande
558 softime 2633 if ($res != null || $res != ""){
559 vpihour 2603
560 vpihour 2606 require_once "../obj/demande.class.php";
561     $demande = new demande($res, $this->db, DEBUG);
562    
563     //On met à jour la demande en supprimant la liaison vers
564     //l'événement d'instruction
565     $demande->setParameter("maj", 1);
566     $valF = array();
567     foreach($demande->champs as $identifiant => $champ) {
568     $valF[$champ] = $demande->val[$identifiant];
569     }
570     $valF['date_demande']=$demande->dateDBToForm($valF['date_demande']);
571     $valF['instruction_recepisse']=NULL;
572     $ret = $demande->modifier($valF, $this->db, DEBUG);
573 vpihour 2603 }
574    
575 vpihour 2000 /**
576     * Vérification que l'élément supprimé est le dernier pour pouvoir
577     * remodifier les données de manière itérative.
578     */
579     // Initialisation
580     $dernierevenement = "";
581     // Récupération du dernier élément de la table d'instruction qui
582     // concerne le dossier en cours
583     $sql = "SELECT max(instruction)
584     FROM ".DB_PREFIXE."instruction
585     WHERE dossier ='".$this->idxformulaire."'";
586     $dernierevenement = $db->getOne($sql);
587     $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
588     if (database::isError($dernierevenement)) {
589     die($dernierevenement->getMessage());
590     }
591     // Si on se trouve effectivement sur le dernier evenement d'instruction
592     if ($dernierevenement == $id) {
593     // Alors on valide la suppression
594     $this->correct = true;
595     $this->addToMessage(_('Destruction_chronologique'));
596     } else {
597     // Alors on annule la suppression
598     $this->correct = false;
599     $this->addToMessage(_("Seul le dernier evenement d'instruction peut etre supprime."));
600     }
601 fmichon 1540 }
602     }
603    
604 nhaye 2412 /**
605     * Vérification de la possibilité ou non de modifier des dates de suivi
606     * @param string $champ champ date à vérifier
607     */
608 nhaye 1564 function updateDate($champ) {
609 nhaye 2412
610 softime 2562 //Si le retourformulaire est "dossier_instruction"
611     if ($this->retourformulaire == "dossier_instruction") {
612    
613     // Vérification de la possibilité de modifier les dates si déjà éditées
614     if($this->valF[$champ] != "" AND !$this->f->user_is_admin) {
615     // si l'utilisateur n'est pas un admin
616     if($this->getVal($champ) != "" AND $this->getVal($champ) != $this->valF[$champ]) {
617     $this->correct = false;
618     $this->addToMessage(_("Les dates de suivis ne peuvent etre modifiees"));
619     }
620 nhaye 1564 }
621     }
622 softime 2562
623     //
624 nhaye 2412 return true;
625 nhaye 1564 }
626    
627 fmichon 1540 // Sélectionne le signataire_arrete par défaut
628     function setVal(&$form,$maj,$validation){
629    
630     // Ajout
631     if($maj == 0) {
632    
633     // Création de la requête
634     $sql = "SELECT signataire_arrete
635     FROM ".DB_PREFIXE."signataire_arrete
636     WHERE defaut IS TRUE";
637    
638     // Exécution de la requête
639 vpihour 1777 $res = $this->f->db->query($sql);
640 vpihour 2456 $this->f->addToLog("setVal(): db->query(\"".$sql."\");", VERBOSE_MODE);
641 vpihour 1777 if ( database::isError($res)){
642     die();
643     }
644 fmichon 1540
645     $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
646    
647     if ( isset($row['signataire_arrete']) && is_numeric($row['signataire_arrete'])){
648    
649     $form->setVal("signataire_arrete",$row['signataire_arrete']);
650     }
651     }
652     }
653    
654     /*Met des valeurs par défaut dans certains des sous-formulaire*/
655     function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){
656     if ($validation==0 and $maj<2) {
657     if ($maj == 0){
658     $form->setVal("destinataire", $idxformulaire);
659     $form->setVal("dossier", $idxformulaire);
660     $form->setVal("date_evenement", date('Y-m-d'));
661     }
662     $form->setVal("bible_auto","bible_auto()");
663     $form->setVal("bible","bible()");
664     $form->setVal("bible2","bible2()");
665     }
666     $this->retourformulaire=$retourformulaire;
667     $this->idxformulaire=$idxformulaire;
668     }
669    
670    
671 nhaye 1439 function setLayout(&$form, $maj){
672     if ( $maj < 2 OR $maj == 3 ) {
673     /*Champ sur lequel s'ouvre le bloc 1 */
674     $form->setBloc('evenement','D',"","col_12");
675 fraynaud 20
676 nhaye 1439 $form->setFieldset('evenement','D',_('Evenement'));
677     $form->setFieldset('lettretype','F','');
678    
679     $form->setBloc('lettretype','F');
680    
681     $form->setBloc('date_finalisation_courrier','D',"","col_12");
682    
683     $form->setFieldset('date_finalisation_courrier','D',_('Dates'));
684     $form->setBloc('date_finalisation_courrier','D',"","col_6");
685     $form->setBloc('date_envoi_controle_legalite','F');
686    
687     $form->setBloc('signataire_arrete','D',"","col_6");
688     $form->setBloc('date_retour_controle_legalite','F');
689     $form->setFieldset('date_retour_controle_legalite','F','');
690    
691     $form->setBloc('date_retour_controle_legalite','F');
692    
693 nhaye 2644 $form->setBloc('complement_om_html','D',"","col_12");
694     $form->setFieldset('complement_om_html','D',_('Complement'));
695 nhaye 1439 $form->setFieldset('bible','F','');
696     $form->setBloc('bible','F');
697    
698 nhaye 2644 $form->setBloc('complement2_om_html','D',"","col_12");
699     $form->setFieldset('complement2_om_html','D',_('Complement 2'));
700 nhaye 1439 $form->setFieldset('bible2','F','');
701     $form->setBloc('bible2','F');
702     }
703 fraynaud 20 }
704    
705 fmichon 1540 function setLib(&$form, $maj) {
706     //
707     parent::setLib($form, $maj);
708     //
709     $form->setLib('bible_auto', "");
710     $form->setLib('bible', "");
711     $form->setLib('bible2', "");
712 fraynaud 20 }
713    
714 fmichon 1540 function triggerajouter($id, &$db, $val, $DEBUG) {
715     /**
716     * Le code suivant permet de récupérer des valeurs des tables evenement
717     * et dossier pour les stocker dans l'instruction :
718     * DEPUIS L'EVENEMENT
719     * - action
720     * - delai
721     * - accord_tacite
722     * - etat
723     * - avis_decision
724     * - delai_notification
725     * - lettretype
726 nhaye 2099 * - autorite_competente
727 fmichon 1540 * DEPUIS LE DOSSIER D'INSTRUCTION
728     * - archive_delai
729     * - archive_accord_tacite
730     * - archive_etat
731     * - archive_avis
732     * - date_complet
733     * - date_rejet
734     * - date_limite
735     * - date_notification_delai
736     * - date_decision
737     * - date_validite
738     * - date_achevement
739     * - date_chantier
740     * - date_conformite
741 nhaye 2099 * - avis_decision
742 fmichon 1540 * Il permet également de stocker la date_depot du dossier d'instruction
743     * dans l'attribut $this->archive_date_depot de la classe.
744     */
745     // Récupération de tous les paramètres de l'événement sélectionné
746     $sql = "SELECT * FROM ".DB_PREFIXE."evenement
747     WHERE evenement=".$this->valF['evenement'];
748 fraynaud 20 $res = $db->query($sql);
749 fmichon 1540 $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
750     if (database::isError($res)) {
751     die($res->getMessage());
752     }
753     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
754     // Récupération de l'identifiant de l'action
755     // si une action est paramétrée dans l'événement
756     $this->valF['action'] = NULL;
757     if (isset($row['action']) and !empty($row['action'])) {
758 nhaye 460 $this->valF['action']=$row['action'];
759     }
760 fmichon 1540 // Récupération de la valeur du délai
761     $this->valF['delai'] = $row['delai'];
762     // Récupération de l'identifiant de l'état
763     // si un état est paramétré dans l'événement
764     $this->valF['etat']=NULL;
765     if (isset($row['etat']) and !empty($row['etat'])) {
766 nhaye 460 $this->valF['etat']=$row['etat'];
767     }
768 fmichon 1540 // Récupération de la valeur d'accord tacite
769 fraynaud 20 $this->valF['accord_tacite']=$row['accord_tacite'];
770 fmichon 1540 // Récupération de la valeur du délai de notification
771 fraynaud 20 $this->valF['delai_notification']=$row['delai_notification'];
772 fmichon 1540 // Récupération de l'identifiant de l'avis
773     // si un avis est paramétré dans l'événement
774     $this->valF['avis_decision'] = NULL;
775 vpihour 489 if(isset($row['avis_decision']) and !empty($row['avis_decision'])) {
776     $this->valF['avis_decision']=$row['avis_decision'];
777 fmichon 1540 }
778 nhaye 2099 // Récupération de la valeur de l'autorité compétente
779     // si l'autorité compétente est paramétré dans l'événement
780     $this->valF['autorite_competente'] = NULL;
781     if(isset($row['autorite_competente']) and !empty($row['autorite_competente'])) {
782     $this->valF['autorite_competente']=$row['autorite_competente'];
783     }
784 fmichon 1540 // Récupération de la valeur de la lettre type
785 nhaye 2815 $this->valF['lettretype']=$row['lettretype'];
786 fraynaud 20 }
787 fmichon 1540 // Récupération de toutes les valeurs du dossier d'instruction en cours
788     $sql = "SELECT * FROM ".DB_PREFIXE."dossier
789     WHERE dossier='".$this->valF['dossier']."'";
790 fraynaud 20 $res = $db->query($sql);
791 fmichon 1540 $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
792     if (database::isError($res)) {
793 fraynaud 20 die($res->getMessage());
794 fmichon 1540 }
795 vpihour 2643 $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
796     $this->updateArchiveData($row);
797     $this->archive_date_depot = $row['date_depot'];
798    
799 softime 2142 // Récupération de la duree de validite du dossier d'autorisation
800     $sql = "SELECT duree_validite_parametrage
801     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
802     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
803     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
804     LEFT JOIN ".DB_PREFIXE."dossier
805     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
806     WHERE dossier.dossier='".$this->valF['dossier']."'";
807     $duree_validite_parametrage = $db->getOne($sql);
808     $this->addToLog("triggerajouter(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
809     database::isError($duree_validite_parametrage);
810     if ($duree_validite_parametrage != '') {
811     $this->valF['duree_validite_parametrage']= $duree_validite_parametrage;
812     }
813 vpihour 1784
814     // Identifiant du type de courrier
815     $idTypeCourrier = '11';
816     $idCourrier = str_pad($this->valF["instruction"], 10, "0", STR_PAD_LEFT);
817     // Code barres
818     $this->valF["code_barres"] = $idTypeCourrier . $idCourrier;
819 fraynaud 20 }
820    
821 vpihour 1137 // Test si une restriction est valide
822     // return boolean
823     function restrictionIsValid($restriction){
824 nhaye 2905 if($this->restriction_valid != null) {
825     return $this->restriction_valid;
826     }
827 softime 2305 // Liste des opérateurs possible
828     $operateurs = array(">=", "<=", "+", "-");
829     // Liste des opérateurs avec espace
830     $operateurs_blank = array(" >= ", " <= ", " + ", " - ");
831    
832     // Supprime tous les espaces de la chaîne de caractère
833     $restriction = str_replace(' ', '', $restriction);
834 vpihour 1137
835 softime 2305 // Met des espace avant et après les opérateurs puis transforme la
836     // chaine en un tableau
837     $tabRestriction = str_replace($operateurs, $operateurs_blank,
838     $restriction);
839     $tabRestriction = explode(" ", $tabRestriction);
840    
841     // Tableau comprenant les résultat
842 vpihour 1137 $res = array();
843 softime 2305 // Compteur pour les résultat
844     // commence à 1 car le 0 doit rester inchangé tout au long du traitement
845     $j = 1;
846     // Comparateur du calcul
847     $comparateur = '';
848     // Booléen retourné
849     $res_bool = true;
850    
851 softime 2692 // S'il y a un comparateur
852     if (in_array(">=", $tabRestriction)
853     || in_array("<=", $tabRestriction)) {
854 softime 2305
855 softime 2692 // Si le tableau n'est pas vide
856     if (count($tabRestriction) > 0) {
857    
858     // Boucle dans le tableau pour récupérer seulement les valeurs
859     foreach ($tabRestriction as $key => $value) {
860    
861     //
862     if (!in_array($value, $operateurs)) {
863     if ($this->getRestrictionValue($value) != false) {
864     $res[] = $this->getRestrictionValue($value);
865     } else {
866     // Message d'erreur
867     $error_message = sprintf(_("Le champ %s de l'instruction %s est vide"), "<span class='bold'>".$value."</span>", "<span class='bold'>".$this->valF["instruction"]."</span>");
868     $this->addToMessage($error_message);
869     // Arrête le traitement
870     return false;
871     }
872 softime 2305 }
873 vpihour 1137 }
874 softime 2305
875 softime 2692 // Boucle dans le tableau
876     // commence à 1 car le 0 doit rester inchangé tout au long du
877     // traitement
878     for ($i = 1; $i<count($tabRestriction); $i++) {
879    
880     // Récupère le comparateur
881     if ($tabRestriction[$i] === ">="
882     || $tabRestriction[$i] === "<=") {
883     $comparateur = $tabRestriction[$i];
884     }
885 softime 2305
886 softime 2692 // Si l'opérateur qui suit est un "+"
887     if ($tabRestriction[$i] === "+") {
888 softime 2771 $dateDep = $res[$j];
889 softime 2692 unset($res[$j]);$j++;
890     $duree = $res[$j];
891     unset($res[$j]);
892 softime 2771 $res[$j] = $this->f->mois_date($dateDep, $duree, "+");
893 softime 2692 }
894 softime 2305
895 softime 2692 // Si l'opérateur qui suit est un "-"
896     if ($tabRestriction[$i] === "-") {
897 softime 2771 $dateDep = $res[$j];
898 softime 2692 unset($res[$j]);$j++;
899     $duree = $res[$j];
900     unset($res[$j]);
901 softime 2771 $res[$j] = $this->f->mois_date($dateDep, $duree, "-");
902 softime 2692 }
903 softime 2305 }
904 softime 2692
905 vpihour 1137 }
906    
907 softime 2692 // Si les tableau des résultats n'est pas vide
908     if (count($res) > 0) {
909 softime 2305 //
910 softime 2692 $res_bool = false;
911     // Effectue le test
912     if ($comparateur === ">=") {
913     //
914     if (strtotime($res[0]) >= strtotime($res[$j])) {
915     $res_bool = true;
916     }
917 softime 2305 }
918 softime 2692 if ($comparateur === "<=") {
919 vpihour 1137
920 softime 2692 if (strtotime($res[0]) <= strtotime($res[$j])) {
921     $res_bool = true;
922     }
923 softime 2305 }
924 vpihour 1137 }
925 softime 2692 // Sinon une erreur s'affiche
926     } else {
927    
928     // Message d'erreur
929     $error_message = _("La restriction est sans comparateur");
930     $this->addToMessage($error_message);
931     // Arrête le traitement
932     return false;
933 vpihour 1137 }
934    
935 softime 2305 return $res_bool;
936    
937 vpihour 1137 }
938 softime 2373
939     /**
940 nhaye 2905 * Permet de définir si l'événement passé en paramètre est un événement retour.
941     * @param integer $evenement événement à tester
942     *
943     * @return boolean retourne true si événement retour sinon false
944     */
945     function is_evenement_retour($evenement) {
946     if(empty($evenement) || !is_numeric($evenement)) {
947     return "";
948     }
949     $sql = "SELECT retour
950     FROM ".DB_PREFIXE."evenement
951     WHERE evenement = ".$evenement;
952     $retour = $this->db->getOne($sql);
953     $this->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
954     if (database::isError($retour)) {
955     die($retour->getMessage());
956     }
957     if ($retour == 't') {
958     return true;
959     } else {
960     return false;
961     }
962     }
963    
964     /**
965     * Retourne le champ restriction de l'événement passé en paramètre.
966     *
967     * @param integer $evenement id de l'événement sur lequel récupérer la restriction
968     *
969     * @return string contenu du champ restriction
970     */
971     function get_restriction($evenement) {
972     if(empty($evenement) || !is_numeric($evenement)) {
973     return "";
974     }
975     //Récupère la restriction
976     $sql= "SELECT
977     restriction
978     FROM
979     ".DB_PREFIXE."evenement
980     WHERE
981     evenement =".$evenement;
982    
983     $restriction = $this->db->getOne($sql);
984     $this->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
985     if (database::isError($restriction)) {
986     die($restriction->getMessage());
987     }
988     return $restriction;
989     }
990    
991     /**
992 vpihour 2792 * Récupère la valeur du champ dans la restriction
993     * @param string $restrictionValue Nom du champ
994     * @return mixed Valeur du champ
995     */
996     function getRestrictionValue($restrictionValue){
997    
998     // Initialisation de la valeur de retour
999     $return = false;
1000    
1001     // Récupére les valeurs du dossier
1002     $value_dossier = $this->get_dossier_actual();
1003    
1004     //
1005     if (is_numeric($restrictionValue)) {
1006     $return = $restrictionValue;
1007     }elseif (isset($value_dossier[$restrictionValue])) {
1008     $return = $value_dossier[$restrictionValue];
1009     }elseif (isset($this->valF[$restrictionValue])) {
1010     $return = $this->valF[$restrictionValue];
1011     }
1012    
1013     // Retourne la valeur du champ
1014     return $return;
1015     }
1016    
1017     /**
1018 softime 2787 * Calcul des règle d'action.
1019     * @param string $rule Règle d'action
1020     * @param string $rule_name Nom de la règle
1021     * @param string $type Type de la règle
1022     *
1023     * @return mixed Résultat de la règle
1024 softime 2373 */
1025 softime 2787 function regle($rule, $rule_name, $type = null) {
1026 softime 2305
1027 softime 2787 // Supprime tous les espaces de la chaîne de caractère
1028     $rule = str_replace(' ', '', $rule);
1029     // Coupe la chaîne au niveau de l'opérateur
1030     $operands = explode ("+", $rule);
1031     // Nombre d'opérande
1032     $nb_operands = count($operands);
1033 softime 2305
1034 softime 2787 // Règle à null
1035     if ($rule == "null") {
1036     return null;
1037     }
1038 softime 2373
1039 softime 2787 // Si c'est une règle spécifique
1040     if ($rule_name == "regle_autorite_competente"
1041     || $rule_name == "regle_etat"
1042     || $rule_name == "regle_accord_tacite"
1043     || $rule_name == "regle_avis") {
1044     //
1045     return $this->valF[$rule];
1046 softime 2305 }
1047    
1048 softime 2787 // Tableau des champs de type date
1049     $rule_type_date = array(
1050     "regle_date_limite",
1051     "regle_date_notification_delai",
1052     "regle_date_complet",
1053     "regle_date_validite",
1054     "regle_date_decision",
1055     "regle_date_chantier",
1056     "regle_date_achevement",
1057     "regle_date_conformite",
1058     "regle_date_rejet",
1059     "regle_date_dernier_depot",
1060     "regle_date_limite_incompletude",
1061     );
1062     // Tableau des champs de type numérique
1063     $rule_type_numeric = array(
1064     "regle_delai",
1065     "regle_delai_incompletude",
1066     );
1067    
1068     // Définit le type du champ
1069     if (in_array($rule_name, $rule_type_date) == true) {
1070     $type = "date";
1071 fraynaud 123 }
1072 softime 2787 if (in_array($rule_name, $rule_type_numeric) == true) {
1073     $type = "numeric";
1074 fraynaud 124 }
1075 softime 2787
1076     // Initialisation des variables
1077     $key_date = 0;
1078     $total_numeric = 0;
1079    
1080     // Pour chaque opérande
1081     foreach ($operands as $key => $operand) {
1082    
1083     // Si c'est une règle de type date
1084     if ($type == 'date') {
1085     // Vérifie si au moins une des opérandes est une date
1086     if (!is_numeric($operand)
1087     && isset($this->valF[$operand])
1088     && $this->f->check_date($this->valF[$operand]) == true) {
1089     // Récupère la position de la date
1090     $key_date = $key;
1091     }
1092     // Les autres opérandes doivent être que des numériques
1093     if (is_numeric($operand) == true) {
1094     // Ajoute l'opérande au total
1095     $total_numeric += $operand;
1096     }
1097     if (!is_numeric($operand)
1098     && isset($this->valF[$operand])
1099     && is_numeric($this->valF[$operand]) == true) {
1100     // Ajoute l'opérande au total
1101     $total_numeric += $this->valF[$operand];
1102     }
1103     }
1104    
1105     // Si c'est une règle de type numérique
1106     if ($type == 'numeric') {
1107     // Les opérandes doivent être que des numériques
1108     if (is_numeric($operand) == true) {
1109     // Ajoute l'opérande au total
1110     $total_numeric += $operand;
1111     }
1112     if (!is_numeric($operand)
1113     && isset($this->valF[$operand])
1114     && is_numeric($this->valF[$operand]) == true) {
1115     // Ajoute l'opérande au total
1116     $total_numeric += $this->valF[$operand];
1117     }
1118     }
1119     }
1120    
1121     // Résultat pour une règle de type date
1122     if ($type == 'date') {
1123     // Retourne le calcul de la date
1124     return $this->f->mois_date($this->valF[$operands[$key_date]],
1125     $total_numeric, "+");
1126     }
1127    
1128     // Résultat pour une règle de type numérique
1129     if ($type == 'numeric') {
1130     // Retourne le calcul
1131     return $total_numeric;
1132     }
1133    
1134 fraynaud 123 }
1135 fmichon 1540
1136 fraynaud 20 function triggerajouterapres($id,&$db,$val,$DEBUG) {
1137 fmichon 1540 /**
1138     * Mise à jour des valeurs du dossier en fonction des valeurs calculées
1139     * par l'action
1140     */
1141 nhaye 1724 $this->getValEvenement();
1142 fmichon 1540 // Initialisation
1143     $valF = "";
1144 nhaye 1741 // état de complétude actuel du dossier
1145     $incompletude = $this->dossierIncomplet();
1146    
1147     if($incompletude === FALSE) {
1148     // Si l'événement d'instruction est de type incompletude
1149     if($this->valEvenement['type'] == "incompletude") {
1150     // On marque le dossier en incomplétude pour application des actions
1151     $incompletude = TRUE;
1152     // Set du flag incomplétude de la table dossier
1153     $valF['incompletude'] = TRUE;
1154     // Enregistrement de l'état dans la variable provisoire
1155     $valF['etat_pendant_incompletude'] = $this->valF['archive_etat'];
1156     }
1157     } else {
1158     // Si l'evenement d'instruction est de type retour ou contient une
1159     // decision, on sort d'incomplétude
1160     if($this->valEvenement['type'] == "retour" OR
1161     $this->valEvenement['avis_decision'] != NULL) {
1162     // On enlève la marque d'incomplétude pour application des actions
1163     $incompletude = FALSE;
1164     // On enlève le flag d'incomplétude sur l'enregistrement de la table dossier
1165     $valF['incompletude'] = FALSE;
1166     // Restauration de l'état depuis l'état provisoire
1167     $valF['etat'] = $this->valF['archive_etat_pendant_incompletude'];
1168     // On vide la variable provisoire ainsi que le délai de complétude
1169     // et la date limite de complétude
1170     $valF['etat_pendant_incompletude'] = NULL;
1171     $valF['delai_incompletude'] = NULL;
1172     $valF['date_limite_incompletude'] = NULL;
1173     }
1174     }
1175 fmichon 1540 // Récupération des paramètres de l'action
1176     $sql = "SELECT * FROM ".DB_PREFIXE."action
1177     WHERE action='".$this->valF['action']."'";
1178     $res = $db->query($sql);
1179     $this->addToLog("triggerajouterapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1180     if (database::isError($res)) {
1181     die($res->getMessage());
1182     }
1183     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1184 nhaye 1724
1185 fmichon 1540 // pour chacune des regles, on applique la regle
1186     if($row['regle_delai']!=''){
1187 softime 2787 $valF['delai'] = $this->regle($row['regle_delai'], 'regle_delai');
1188 fmichon 1540 }
1189     if($row['regle_accord_tacite']!=''){
1190 softime 2787 $valF['accord_tacite'] = $this->regle($row['regle_accord_tacite'], 'regle_accord_tacite');
1191 fmichon 1540 }
1192     if($row['regle_avis']!=''){
1193 softime 2787 $valF['avis_decision'] = $this->regle($row['regle_avis'], 'regle_avis');
1194 fmichon 1540 }
1195     if($row['regle_date_limite']!=''){
1196 softime 2787 $valF['date_limite']= $this->regle($row['regle_date_limite'], 'regle_date_limite');
1197 fmichon 1540 }
1198     if($row['regle_date_complet']!=''){
1199 softime 2787 $valF['date_complet']= $this->regle($row['regle_date_complet'], 'regle_date_complet');
1200 fmichon 1540 }
1201 nhaye 1571 if($row['regle_date_dernier_depot']!=''){
1202 softime 2787 $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot'], 'regle_date_dernier_depot');
1203 nhaye 1571 }
1204 fmichon 1540 if($row['regle_date_notification_delai']!=''){
1205 softime 2787 $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai'], 'regle_date_notification_delai');
1206 fmichon 1540 }
1207     if($row['regle_date_decision']!=''){
1208 softime 2787 $valF['date_decision']= $this->regle($row['regle_date_decision'], 'regle_date_decision');
1209 fmichon 1540 }
1210     if($row['regle_date_rejet']!=''){
1211 softime 2787 $valF['date_rejet']= $this->regle($row['regle_date_rejet'], 'regle_date_rejet');
1212 fmichon 1540 }
1213     if($row['regle_date_validite']!=''){
1214 softime 2787 $valF['date_validite']= $this->regle($row['regle_date_validite'], 'regle_date_validite');
1215 fmichon 1540 }
1216     if($row['regle_date_chantier']!=''){
1217 softime 2787 $valF['date_chantier']= $this->regle($row['regle_date_chantier'], 'regle_date_chantier');
1218 fmichon 1540 }
1219     if($row['regle_date_achevement']!=''){
1220 softime 2787 $valF['date_achevement']= $this->regle($row['regle_date_achevement'], 'regle_date_achevement');
1221 fmichon 1540 }
1222     if($row['regle_date_conformite']!=''){
1223 softime 2787 $valF['date_conformite']= $this->regle($row['regle_date_conformite'], 'regle_date_conformite');
1224 fmichon 1540 }
1225 nhaye 1731 if($row['regle_date_limite_incompletude']!=''){
1226 softime 2787 $valF['date_limite_incompletude']= $this->regle($row['regle_date_limite_incompletude'], 'regle_date_limite_incompletude');
1227 nhaye 1731 }
1228     if($row['regle_delai_incompletude']!=''){
1229 softime 2787 $valF['delai_incompletude']= $this->regle($row['regle_delai_incompletude'], 'regle_delai_incompletude');
1230 nhaye 1731 }
1231 nhaye 2099 if($row['regle_autorite_competente']!=''){
1232 softime 2787 $valF['autorite_competente']= $this->regle($row['regle_autorite_competente'], 'regle_autorite_competente');
1233 nhaye 2099 }
1234 nhaye 1741 if($row['regle_etat']!=''){
1235     // Si on est dans le cas général ou qu'on est en incomplétude et
1236     // qu'on a un événement de type incomplétude alors : on stocke
1237     // l'état dans la variable courante
1238     if ($incompletude == FALSE OR $this->valEvenement['type'] == "incompletude") {
1239 softime 2787 $valF['etat'] = $this->regle($row['regle_etat'], 'regle_etat');
1240 nhaye 1741 } else {
1241 softime 2787 $valF['etat_pendant_incompletude'] = $this->regle($row['regle_etat'], 'regle_etat');
1242 nhaye 1741 }
1243     }
1244     if($this->valEvenement['evenement_suivant_tacite'] != '') {
1245     // Si on est pas en incomplétude on stocke l'événement tacite
1246     //de l'événement dans la variable courante
1247     if ($incompletude == FALSE) {
1248     $valF['evenement_suivant_tacite'] = $this->valEvenement['evenement_suivant_tacite'];
1249     } else {
1250     $valF['evenement_suivant_tacite_incompletude'] = $this->valEvenement['evenement_suivant_tacite'];
1251     }
1252     }
1253 fmichon 1540 }
1254     // Si des valeurs ont été calculées alors on met à jour l'enregistrement
1255     if ($valF != "") {
1256     // On met à jour le dossier
1257     $cle = " dossier='".$this->valF['dossier']."'";
1258     $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1259     $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1260     if (database::isError($res1)) {
1261 fraynaud 20 die($res->getMessage());
1262 fmichon 1540 }
1263     // Affichage d'informations à l'utilisateur
1264     $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1265 fraynaud 20 }
1266 fmichon 1540
1267     /**
1268     * REFERENTIEL ERP
1269     */
1270 fmichon 1005 // verification si envoi vers ERP est active
1271     if ($this->f->getParameter('option_erp') != "") {
1272     // la nature du dossier
1273     $nature_dossier = substr($this->idxformulaire,0,2);
1274 fmichon 1540 //
1275     $sql = "SELECT erp
1276     FROM ".DB_PREFIXE."dossier
1277     WHERE dossier='".$this->valF['dossier']."'";
1278     $dossier_erp = $this->db->getone($sql);
1279     $this->addToLog("triggerajouterapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1280     if (database::isError($res)) {
1281     die($res->getMessage());
1282     }
1283     //
1284     $sql = "SELECT libelle
1285     FROM ".DB_PREFIXE."evenement
1286     WHERE evenement='".$this->valF['evenement']."'";
1287     $evenement_libelle = $this->db->getone($sql);
1288     $this->addToLog("triggerajouterapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1289     if (database::isError($res)) {
1290     die($res->getMessage());
1291     }
1292     //
1293 fmichon 1005 if ($dossier_erp == 't') {
1294     // envoi du message en cas d'un PC qui est ERP et sur lequel un evenement
1295     // d'acceptation etait fait
1296     if ($nature_dossier ==
1297     $this->f->getParameter('erp_evenement_accepter_dossier_PC')
1298     && $this->valF['evenement'] ==
1299     $this->f->getParameter('erp_evenement_accepter_sans_reserve')) {
1300     $msgenque = new MessageEnqueuer();
1301     $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
1302     $msgenque->setDecision($evenement_libelle);
1303 vpihour 2842 $return = $msgenque->enqueueMessage($msgenque::$ERP_ARRETE_PC_EFFECTUE);
1304     //Si une erreur s'est produite on arrête le traitement et on
1305     //retourne une erreur
1306     if ($return !== 0){
1307    
1308     $this->addToMessage(_("Une erreur s'est produite lors de ".
1309     "l'envoi du message au referentiel ERP. Merci de ".
1310     "contacter votre administrateur"));
1311     //On ne valide pas le formulaire
1312 vpihour 2877 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1313     $this->correct = false;
1314     return false;
1315 vpihour 2842 }
1316     else {
1317     $this->addToMessage(_("Le message a ete transmis au ".
1318     "referentiel ERP."));
1319     }
1320 fmichon 1005 }
1321     if ($this->valF['evenement'] ==
1322     $this->f->getParameter('erp_evenement_refuser_dossier')) {
1323     $msgenque = new MessageEnqueuer();
1324     $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
1325 vpihour 2842 $return = $msgenque->enqueueMessage($msgenque::$ERP_DECISION_CONFORMITE_EFFECTUE);
1326     //Si une erreur s'est produite on arrête le traitement et on
1327     //retourne une erreur
1328     if ($return !== 0){
1329    
1330     $this->addToMessage(_("Une erreur s'est produite lors de ".
1331     "l'envoi du message au referentiel ERP. Merci de ".
1332     "contacter votre administrateur"));
1333     //On ne valide pas le formulaire
1334 vpihour 2877 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1335     $this->correct = false;
1336     return false;
1337 vpihour 2842 }
1338     else {
1339     $this->addToMessage(_("Le message a ete transmis au ".
1340     "referentiel ERP."));
1341     }
1342 fmichon 1005 }
1343 mlimic 936 }
1344 fmichon 1005 } // fin de if ($this->f->getParameter('option_erp') != "")
1345 nhaye 1643
1346     // Mise à jour des données du dossier d'autorisation
1347     require_once "../obj/dossier_autorisation.class.php";
1348 softime 2025 $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($this->valF['dossier']), $this->db, DEBUG);
1349 nhaye 2806 if($da->majDossierAutorisation() === false) {
1350 nhaye 2824 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
1351 nhaye 2806 $this->correct = false;
1352     return false;
1353     }
1354 fmichon 1540 }
1355 softime 2030
1356 fraynaud 129 function triggermodifierapres($id,&$db,$val,$DEBUG) {
1357 fmichon 1540 /**
1358     * L'objectif ici est d'effectuer les recalculs de date dans le dossier
1359     * si la date de l'evenement est modifiee
1360     */
1361     // Initialisation
1362     $valF = "";
1363 nhaye 2561 // Initialisation du type d'événement
1364     $type_evmt = "";
1365 fmichon 1540 // Récupération de l'action correspondante à l'événement
1366     $sql = "SELECT action
1367     FROM ".DB_PREFIXE."evenement
1368     WHERE evenement=".$this->valF['evenement'];
1369 fraynaud 129 $action = $db->getOne($sql);
1370 fmichon 1540 $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1371     if (database::isError($action)) {
1372     die($action->getMessage());
1373     }
1374 nhaye 1564
1375 fmichon 1540 // Récupération des paramètres de l'action
1376     $sql = "SELECT * FROM ".DB_PREFIXE."action
1377     WHERE action='".$action."'";
1378 fraynaud 129 $res = $db->query($sql);
1379 fmichon 1540 $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1380     if (database::isError($res)) {
1381     die($res->getMessage());
1382     }
1383 fraynaud 129 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
1384     // application des regles sur le courrier + delai
1385 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_limite'])){
1386 softime 2787 $valF['date_limite']= $this->regle($row['regle_date_limite'], 'regle_date_limite');
1387 fraynaud 129 }
1388 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_complet'])){
1389 softime 2787 $valF['date_complet']= $this->regle($row['regle_date_complet'], 'regle_date_complet');
1390 fraynaud 129 }
1391 nhaye 1571 if(preg_match("/date_evenement/",$row['regle_date_dernier_depot'])){
1392 softime 2787 $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot'], 'regle_date_dernier_depot');
1393 nhaye 1571 }
1394 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_notification_delai'])){
1395 softime 2787 $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai'], 'regle_date_notification_delai');
1396 fraynaud 129 }
1397 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_decision'])){
1398 softime 2787 $valF['date_decision']= $this->regle($row['regle_date_decision'], 'regle_date_decision');
1399 fraynaud 129 }
1400 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_rejet'])){
1401 softime 2787 $valF['date_rejet']= $this->regle($row['regle_date_rejet'], 'regle_date_rejet');
1402 fraynaud 129 }
1403 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_validite'])){
1404 softime 2787 $valF['date_validite']= $this->regle($row['regle_date_validite'], 'regle_date_validite');
1405 fraynaud 129 }
1406 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_chantier'])){
1407 softime 2787 $valF['date_chantier']= $this->regle($row['regle_date_chantier'], 'regle_date_chantier');
1408 fraynaud 129 }
1409 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_achevement'])){
1410 softime 2787 $valF['date_achevement']= $this->regle($row['regle_date_achevement'], 'regle_date_achevement');
1411 fraynaud 129 }
1412 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_conformite'])){
1413 softime 2787 $valF['date_conformite']= $this->regle($row['regle_date_conformite'], 'regle_date_conformite');
1414 fraynaud 129 }
1415 fmichon 1540 }
1416     // Si des valeurs ont été calculées alors on met à jour l'enregistrement
1417     if ($valF != "") {
1418     // On met à jour le dossier
1419     $cle = " dossier='".$this->valF['dossier']."'";
1420     $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1421 softime 2562 $this->addToLog("triggermodifierapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1422 fmichon 1540 if (database::isError($res1)) {
1423 fraynaud 129 die($res->getMessage());
1424 fmichon 1540 }
1425     // Affichage d'informations à l'utilisateur
1426     $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1427 fraynaud 129 }
1428 nhaye 1299
1429 nhaye 2905 $restriction = $this->get_restriction($val['evenement']);
1430 vpihour 2920 $this->restriction_valid = $this->restrictionIsValid($restriction);
1431 nhaye 2905
1432 vpihour 2920 if($restriction == "" || $this->restriction_valid ){
1433 nhaye 2905 // Récupération de tous les paramètres de l'événement sélectionné
1434     $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1435     WHERE evenement=".$this->valF['evenement'];
1436     $res = $db->query($sql);
1437     $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1438     if (database::isError($res)) {
1439     die($res->getMessage());
1440 softime 2562 }
1441 nhaye 2905 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1442     // Si la date de retour signature est éditée on vérifie si il existe un événement automatique
1443     if ($this->getVal('date_retour_signature') == "" AND
1444     $this->valF['date_retour_signature'] != "" AND
1445     $row['evenement_retour_signature'] != "") {
1446     $new_instruction = new instruction("]", $db, $DEBUG);
1447     // Création d'un tableau avec la liste des champs de l'instruction
1448     foreach($new_instruction->champs as $champ) {
1449     $valNewInstr[$champ] = "";
1450     }
1451     // Définition des valeurs de la nouvelle instruction
1452     $valNewInstr["evenement"] = $row['evenement_retour_signature'];
1453     $valNewInstr["destinataire"] = $this->valF['destinataire'];
1454     $valNewInstr["dossier"] = $this->valF['dossier'];
1455     $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_signature']);
1456     $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
1457     $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
1458     $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
1459     $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
1460     $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
1461     $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
1462     $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1463    
1464 vpihour 2920 //Si une erreur s'est produite et qu'il s'agit d'un problème
1465     //de restriction
1466     if ($retour == false && !$new_instruction->restriction_valid){
1467     $this->msg .= $new_instruction->msg;
1468     $this->addToLog("triggermodifierapres() : evenement retour ".
1469     "instruction ".$this->valF[$this->clePrimaire]." : ".
1470     $new_instruction->msg);
1471     }
1472     //Si une erreur s'est produite après le test de la restriction
1473     elseif ($retour == false && $new_instruction->restriction_valid){
1474 nhaye 2905 $this->correct = false ;
1475     $this->msg .= $new_instruction->msg;
1476     return false;
1477     }
1478 softime 2562 }
1479 nhaye 2905 // Si la date de retour AR est éditée on vérifie si il existe un événement automatique
1480     if ($this->getVal('date_retour_rar') == "" AND
1481     $this->valF['date_retour_rar'] != "" AND
1482     $row['evenement_retour_ar'] != "" ) {
1483     $new_instruction = new instruction("]", $db, $DEBUG);
1484     // Création d'un tableau avec la liste des champs de l'instruction
1485     foreach($new_instruction->champs as $champ) {
1486     $valNewInstr[$champ] = "";
1487     }
1488     // Définition des valeurs de la nouvelle instruction
1489     $valNewInstr["evenement"] = $row['evenement_retour_ar'];
1490     $valNewInstr["destinataire"] = $this->valF['destinataire'];
1491     $valNewInstr["dossier"] = $this->valF['dossier'];
1492     $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_rar']);
1493     $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
1494     $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
1495     $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
1496     $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
1497     $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
1498     $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
1499     $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1500    
1501 vpihour 2920 //Si une erreur s'est produite et qu'il s'agit d'un problème
1502     //de restriction
1503     if ($retour == false && !$new_instruction->restriction_valid){
1504     $this->msg .= $new_instruction->msg;
1505     $this->addToLog("triggermodifierapres() : evenement retour ".
1506     "instruction ".$this->valF[$this->clePrimaire]." : ".
1507     $new_instruction->msg);
1508     }
1509     //Si une erreur s'est produite après le test de la restriction
1510     elseif ($retour == false && $new_instruction->restriction_valid){
1511 nhaye 2905 $this->correct = false ;
1512     $this->msg .= $new_instruction->msg;
1513     return false;
1514     }
1515 vpihour 2829 }
1516 softime 2562 }
1517     }
1518    
1519 vpihour 2877 //Récupération du type de l'événement
1520     $sql = "SELECT type
1521     FROM ".DB_PREFIXE."evenement
1522     WHERE evenement=".$this->valF['evenement'];
1523     $type_evmt = $db->getOne($sql);
1524     $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1525     if (database::isError($type_evmt)) {
1526     die($type_evmt->getMessage());
1527     }
1528    
1529 fmichon 1540 /**
1530     * REFERENTIEL ARRETE
1531     */
1532 nhaye 2561 // Si l'option référentiel arrêté est activé et l'événement est de type
1533     // arrêté
1534 vpihour 2877
1535 nhaye 2561 if ($this->f->getParameter('option_referentiel_arrete') != "" AND
1536     $type_evmt == "arrete") {
1537 fmichon 1540 if ($this->valF['date_retour_signature'] != $this->getVal('date_retour_signature')) {
1538     $msgenque = new MessageEnqueuer();
1539     $sqlArrete = "SELECT instruction.signataire_arrete as \"ws_DA_In_Signataire\",
1540     signataire_arrete.nom as \"ws_DA_In_Sign_Nom\",
1541     signataire_arrete.prenom as \"ws_DA_In_Sign_Prenom\",
1542     signataire_arrete.qualite as \"ws_DA_In_Sign_Qualite\",
1543     instruction.date_evenement as \"ws_DA_In_Dte_Redac\",
1544     '' as \"ws_DA_In_lieu_Redac\",
1545     instruction.dossier as \"ws_DA_In_N_Doss_DAS\",
1546     '' as \"ws_DA_In_Sigle\",
1547     instruction.etat as \"ws_DA_In_Decision\",
1548     dossier.date_depot as \"ws_DA_In_Dte_Depot_Dem\",
1549 nhaye 2561 dossier.terrain_adresse_voie_numero as \"ws_DA_In_N_Voie\",
1550 fmichon 1540 '' as \"ws_DA_In_Type_Voie\",
1551 softime 2061 dossier.terrain_adresse_voie as \"ws_DA_In_Adresse1\",
1552 fmichon 1540 dossier.terrain_adresse_lieu_dit as \"ws_DA_In_Adresse2\",
1553     dossier.terrain_adresse_code_postal as \"ws_DA_In_CP\",
1554     dossier.terrain_adresse_localite as \"ws_DA_In_Ville\",
1555     dossier.terrain_references_cadastrales as \"ws_DA_In_Nb_Parcelle\",
1556     '' as \"ws_DA_In_Detail_Parcelle\",
1557     CONCAT(donnees_techniques.am_projet_desc,' ',donnees_techniques.co_projet_desc) as \"ws_DA_In_Nature_Trvx\",
1558     '' as \"ws_DA_In_Destination_Trvx\",
1559     dossier_autorisation_type_detaille.code as \"ws_DA_In_Type_Dos_Autoris\",
1560     COALESCE(particulier_nom,personne_morale_raison_sociale) as \"ws_DA_In_Nom_Petition\",
1561     COALESCE(particulier_prenom, personne_morale_denomination) as \"ws_DA_In_Prenom_Petition\",
1562     '' as \"ws_DA_In_Piece_GED\",
1563     instruction.date_retour_signature as \"ws_DA_In_Dte_Signature\"
1564     FROM ".DB_PREFIXE."instruction
1565     LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
1566     instruction.signataire_arrete = signataire_arrete.signataire_arrete
1567     LEFT JOIN ".DB_PREFIXE."dossier ON
1568     instruction.dossier = dossier.dossier
1569     LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur ON
1570     lien_dossier_demandeur.dossier = dossier.dossier
1571     LEFT JOIN ".DB_PREFIXE."demandeur ON
1572     lien_dossier_demandeur.demandeur = demandeur.demandeur
1573     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type ON
1574     dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1575     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille ON
1576     dossier_instruction_type.dossier_autorisation_type_detaille =
1577     dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1578     LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
1579     donnees_techniques.dossier_instruction = dossier.dossier
1580     WHERE instruction.instruction = ".$this->valF['instruction'];
1581     $resArrete = $this->db->query($sqlArrete);
1582 softime 2562 $this->f->addToLog("triggermodifierapres(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
1583 vpihour 1777 if ( database::isError($resArrete)){
1584     die();
1585     }
1586 fmichon 1540
1587     $rowArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
1588     $msgenque->setArreteInfo($rowArrete);
1589 vpihour 2842 $return = $msgenque->enqueueMessage($msgenque::$ARRETE_ENVOI);
1590     //Si une erreur s'est produite on arrête le traitement et on
1591     //retourne une erreur
1592     if ($return !== 0){
1593    
1594 vpihour 2877 //On supprime les messages précédents
1595     $this->msg = '';
1596 vpihour 2842 $this->addToMessage(_("Une erreur s'est produite lors de ".
1597     "l'envoi du message au referentiel arrêté. Merci de ".
1598 vpihour 2877 "contacter votre administrateur."));
1599 vpihour 2842 //On ne valide pas le formulaire
1600 vpihour 2877 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1601     $this->correct = false;
1602     return false;
1603 vpihour 2842 }
1604     else {
1605     $this->addToMessage(_("Le message a ete transmis au ".
1606     "referentiel arrêté."));
1607     }
1608 fmichon 1540 }
1609 nhaye 1299 }
1610 nhaye 1643
1611     // Mise à jour des données du dossier d'autorisation
1612     require_once "../obj/dossier_autorisation.class.php";
1613 softime 2025 $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($this->valF['dossier']), $this->db, DEBUG);
1614 nhaye 2806 if($da->majDossierAutorisation() === false) {
1615 nhaye 2824 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
1616 nhaye 2806 $this->correct = false;
1617     return false;
1618     }
1619 fraynaud 129 }
1620    
1621 fraynaud 20 function triggersupprimer($id,&$db,$val,$DEBUG) {
1622 fmichon 1540 /**
1623     * L'objectif ici est de repositionner les valeurs récupérées en
1624     * archive dans le dossier d'instruction avant de supprimer l'événement
1625     * d'instruction
1626     */
1627 vpihour 2603
1628     // Mise à jour des 4 valeurs modifiées par l'action
1629     $valF['delai'] = $val['archive_delai'];
1630     $valF['accord_tacite'] = $val['archive_accord_tacite'];
1631     $valF['etat'] = $val['archive_etat'];
1632     if ($val['archive_avis'] != '') {
1633     $valF['avis_decision'] = $val['archive_avis'];
1634     } else {
1635     $valF['avis_decision'] = NULL;
1636     }
1637     // Mise à jour des 10 dates avec la valeur présente dans le formulaire
1638     // de suppression. Si la valeur de la date est vide alors on fixe
1639     // à la valeur NULL
1640     //
1641     if ($val['archive_date_complet'] != '') {
1642     $valF['date_complet'] = $val['archive_date_complet'];
1643     } else {
1644     $valF['date_complet'] = NULL;
1645     }
1646     if ($val['archive_date_dernier_depot'] != '') {
1647     $valF['date_dernier_depot'] = $val['archive_date_dernier_depot'];
1648     } else {
1649     $valF['date_dernier_depot'] = NULL;
1650     }
1651     if ($val['archive_date_rejet'] != '') {
1652     $valF['date_rejet'] = $val['archive_date_rejet'];
1653     } else {
1654     $valF['date_rejet'] = NULL;
1655     }
1656     if ($val['archive_date_limite'] != '') {
1657     $valF['date_limite'] = $val['archive_date_limite'];
1658     } else {
1659     $valF['date_limite'] = NULL;
1660     }
1661     if ($val['archive_date_notification_delai'] != '') {
1662     $valF['date_notification_delai'] = $val['archive_date_notification_delai'];
1663     } else {
1664     $valF['date_notification_delai'] = NULL;
1665     }
1666     if ($val['archive_date_decision'] != '') {
1667     $valF['date_decision'] = $val['archive_date_decision'];
1668     } else {
1669     $valF['date_decision'] = NULL;
1670     }
1671     if ($val['archive_date_validite'] != '') {
1672     $valF['date_validite'] = $val['archive_date_validite'];
1673     } else {
1674     $valF['date_validite'] = NULL;
1675     }
1676     if ($val['archive_date_achevement'] != '') {
1677     $valF['date_achevement'] = $val['archive_date_achevement'];
1678     } else {
1679     $valF['date_achevement'] = NULL;
1680     }
1681     if ($val['archive_date_chantier'] != '') {
1682     $valF['date_chantier'] = $val['archive_date_chantier'];
1683     } else {
1684     $valF['date_chantier'] = NULL;
1685     }
1686     if ($val['archive_date_conformite'] != '') {
1687     $valF['date_conformite'] = $val['archive_date_conformite'];
1688     } else {
1689     $valF['date_conformite'] = NULL;
1690     }
1691     if ($val['archive_incompletude'] != '') {
1692     $valF['incompletude'] = $val['archive_incompletude'];
1693     } else {
1694     $valF['incompletude'] = NULL;
1695     }
1696     if ($val['archive_evenement_suivant_tacite'] != '') {
1697     $valF['evenement_suivant_tacite'] = $val['archive_evenement_suivant_tacite'];
1698     } else {
1699     $valF['evenement_suivant_tacite'] = NULL;
1700     }
1701     if ($val['archive_evenement_suivant_tacite_incompletude'] != '') {
1702     $valF['evenement_suivant_tacite_incompletude'] = $val['archive_evenement_suivant_tacite_incompletude'];
1703     } else {
1704     $valF['evenement_suivant_tacite_incompletude'] = NULL;
1705     }
1706     if ($val['archive_etat_pendant_incompletude'] != '') {
1707     $valF['etat_pendant_incompletude'] = $val['archive_etat_pendant_incompletude'];
1708     } else {
1709     $valF['etat_pendant_incompletude'] = NULL;
1710     }
1711     if ($val['archive_date_limite_incompletude'] != '') {
1712     $valF['date_limite_incompletude'] = $val['archive_date_limite_incompletude'];
1713     } else {
1714     $valF['date_limite_incompletude'] = NULL;
1715     }
1716     if ($val['archive_delai_incompletude'] != '') {
1717     $valF['delai_incompletude'] = $val['archive_delai_incompletude'];
1718     } else {
1719     $valF['delai_incompletude'] = NULL;
1720     }
1721     if ($val['archive_autorite_competente'] != '') {
1722     $valF['autorite_competente'] = $val['archive_autorite_competente'];
1723     } else {
1724     $valF['autorite_competente'] = NULL;
1725     }
1726     // On met à jour le dossier
1727     $cle = " dossier='".$val['dossier']."'";
1728     $res = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1729     $this->addToLog("triggersupprimer(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1730     if (database::isError($res)) {
1731     die($res->getMessage());
1732     }
1733     // Affichage d'informations à l'utilisateur
1734     $this->addToMessage(_("Suppression de l'instruction")." [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1735    
1736     // Mise à jour de la demande si un récépissé d'instruction correspond à l'instruction à supprimer
1737 fraynaud 20 }
1738 fmichon 1540
1739 nhaye 1643 function triggersupprimerapres($id,&$db,$val,$DEBUG) {
1740    
1741     // Mise à jour des données du dossier d'autorisation
1742     require_once "../obj/dossier_autorisation.class.php";
1743 softime 2025 $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($val["dossier"]), $this->db, DEBUG);
1744 nhaye 2806 if($da->majDossierAutorisation() === false) {
1745 nhaye 2824 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
1746 nhaye 2806 $this->correct = false;
1747     return false;
1748     }
1749 nhaye 1643 }
1750    
1751 vpihour 1137 // Vérifie la restriction sur l'événement
1752     function verifier($val = array(), &$db, $DEBUG){
1753 nhaye 1186 parent::verifier($val, $db, $DEBUG);
1754 vpihour 1784
1755     if ( isset($val['evenement']) && is_numeric($val['evenement'])){
1756 nhaye 2905 $restriction = $this->get_restriction($val['evenement']);
1757 vpihour 1784
1758     //Test qu'une restriction est présente
1759 nhaye 2905 if ($restriction != "" ){
1760 vpihour 1137
1761 vpihour 1784 //Test si la restriction est valide
1762 vpihour 2920 $this->restriction_valid = $this->restrictionIsValid($restriction);
1763     if ( !$this->restriction_valid ){
1764 vpihour 1784
1765     $this->addToMessage(_("Restriction non valide"));
1766 vpihour 2920 $this->correct = false;
1767     return false;
1768 vpihour 1784 }
1769 softime 2305
1770     // Liste des opérateurs possible
1771     $operateurs = array(">=", "<=", "+", "-");
1772    
1773     // Supprime tous les espaces de la chaîne de caractère
1774     $restriction = str_replace(' ', '', $restriction);
1775    
1776     // Met des espace avant et après les opérateurs puis transforme la
1777     // chaine en un tableau
1778     $tabRestriction = str_replace($operateurs, " ", $restriction);
1779     // Tableau des champ
1780     $tabRestriction = explode(" ", $tabRestriction);
1781     // Supprime les numériques du tableau
1782     foreach ($tabRestriction as $key => $value) {
1783     if (is_numeric($value)) {
1784     unset($tabRestriction[$key]);
1785     }
1786     }
1787    
1788     // Vérifie les champs utilisés pour la restriction
1789     $check_field_exist = $this->f->check_field_exist($tabRestriction, 'instruction');
1790     if ($check_field_exist !== true) {
1791    
1792     // Liste des champs en erreur
1793     $string_error_fields = implode(", ", $check_field_exist);
1794    
1795     // Message d'erreur
1796     $error_message = _("Le champ %s n'est pas utilisable pour le champ %s");
1797     if (count($check_field_exist) > 1) {
1798     $error_message = _("Les champs %s ne sont pas utilisable pour le champ %s");
1799     }
1800    
1801     // Affiche l'erreur
1802     $this->correct=false;
1803     $this->addToMessage(sprintf($error_message, $string_error_fields, _("restriction")));
1804     $this->addToMessage(_("Veuillez contacter votre administrateur."));
1805     }
1806 vpihour 1137 }
1807 softime 2305
1808 vpihour 1137 }
1809 nhaye 2412 if(!$this->updateDate("date_envoi_signature")) {
1810     return false;
1811     }
1812     if(!$this->updateDate("date_retour_signature")) {
1813     return false;
1814     }
1815     if(!$this->updateDate("date_envoi_rar")) {
1816     return false;
1817     }
1818     if(!$this->updateDate("date_retour_rar")) {
1819     return false;
1820     }
1821     if(!$this->updateDate("date_envoi_controle_legalite")) {
1822     return false;
1823     }
1824     if(!$this->updateDate("date_retour_controle_legalite")) {
1825     return false;
1826     }
1827 vpihour 1921
1828 vpihour 1137 }
1829 vpihour 1284
1830 nhaye 1724 /**
1831     * Méthode permettant de récupérer toutes les valeurs de l'événement
1832     * sélectionné après validation du formulaire d'instruction
1833     *
1834     * @return array() veleurs de l'événement lié
1835     */
1836    
1837     private function getValEvenement() {
1838     if(!empty($this->valEvenement)) {
1839     return $this->valEvenement;
1840     } else {
1841     $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1842     WHERE evenement=".$this->valF['evenement'];
1843     $res = $this->db->query($sql);
1844     $this->addToLog("getValEvenement(): db->query(\"".$sql."\");", VERBOSE_MODE);
1845     if (database::isError($res)) {
1846     die($res->getMessage());
1847     }
1848     $this->valEvenement = $res->fetchRow(DB_FETCHMODE_ASSOC);
1849     return $this->valEvenement;
1850     }
1851     }
1852    
1853     /**
1854     * Méthode permettant de savoir si le dossier lié à l'instruction à le flag
1855     * incompletude à true après validation du formulaire d'instruction
1856     *
1857     * @return boolean
1858     */
1859     private function dossierIncomplet() {
1860     $sql = "SELECT incompletude FROM ".DB_PREFIXE."dossier
1861     WHERE dossier='".$this->valF['dossier']."'";
1862     $incompletude = $this->db->getOne($sql);
1863     $this->addToLog("dossierIncomplet(): db->query(\"".$sql."\");", VERBOSE_MODE);
1864     if (database::isError($incompletude)) {
1865     die($incompletude->getMessage());
1866     }
1867     if ($incompletude == 't') {
1868     return true;
1869     } else {
1870     return false;
1871     }
1872     }
1873 vpihour 1921
1874     /**
1875 nhaye 1949 * Finalisation des documents.
1876     * @param string $champ champ du fichier à finaliser
1877     * @param booleen $status permet de définir si on finalise ou définalise
1878     * @param string $sousform permet de savoir si se trouve dans un sousformulaire (passé au javascript)
1879 vpihour 1921 */
1880 vpihour 1986 function finaliser( $champ = '', $status, $sousform, $retourformulaire){
1881 nhaye 1724
1882 vpihour 1921 //Si on finalise le document
1883     if ( $status == 1 ){
1884    
1885     //Génération du PDF
1886     $_GET['output'] = "string";
1887     $f = $this->f;
1888     include '../app/pdf_instruction.php';
1889    
1890     //Métadonnées du document
1891     $metadata = array(
1892 vpihour 1927 'filename' => 'instruction_'.$idx.'.pdf',
1893 vpihour 1921 'mimetype' => 'application/pdf',
1894     'size' => strlen($pdf_output)
1895     );
1896    
1897 nhaye 1928 // Récupération des métadonnées calculées après validation
1898 nhaye 1938 $spe_metadata = $this->getMetadata("om_fichier_instruction");
1899 nhaye 1928
1900     $metadata = array_merge($metadata, $spe_metadata);
1901 vpihour 1921 //Si le document a déjà été finalisé
1902     //on met à jour le document mais pas son uid
1903 vpihour 1927 if ( $this->getVal("om_fichier_instruction") != '' ){
1904     $uid = $this->f->storage->update(
1905     $this->getVal("om_fichier_instruction"), $pdf_output, $metadata);
1906 vpihour 1921 }
1907     //Sinon, on joute le document et on récupère son uid
1908     else {
1909     //Stockage du PDF
1910     $uid = $this->f->storage->create($pdf_output, $metadata);
1911     }
1912     }
1913     else {
1914     //Récupération de l'uid du document finalisé
1915 vpihour 1927 $uid = $this->getVal("om_fichier_instruction");
1916 vpihour 1921
1917     //On dé-finalise avant de finaliser
1918 vpihour 2603 if ( $uid == '' || $uid == 'OP_FAILURE' ){
1919 vpihour 1921 return -1;
1920     }
1921     }
1922 nhaye 3021 // Recuperation de la valeur de la cle primaire de l'objet
1923     if($this->getVal($this->clePrimaire) != '')
1924     $id = $this->getVal($this->clePrimaire);
1925     else
1926     $id=$this->id;
1927 vpihour 1921 //Mise à jour des données
1928 vpihour 2789 if ( $uid != '' && $uid != 'OP_FAILURE' ){
1929 vpihour 1921 // Logger
1930 vpihour 1927 $this->addToLog("finaliser() - begin", EXTRA_VERBOSE_MODE);
1931 vpihour 1986
1932     $actions = array();
1933 vpihour 1921 //Tableau contenant le lien vers le PDF et lien du portlet pour la mise
1934     //à jour de l'interface
1935     if ( $status == 0 ){
1936     $lien = '../app/pdf_instruction.php?idx='.$id;
1937 vpihour 1986
1938     //Ajout des actions
1939     //Si l'utilisateur a le droit de modifier l'objet
1940     if ( $this->f->isAccredited('instruction') ||
1941     $this->f->isAccredited('instruction_modifier') ){
1942    
1943     $actions["modifier"] = ($sousform!='')?
1944     '<li><a href="#" onclick="ajaxIt(\'instruction\',
1945     \'../scr/sousform.php?obj=instruction&amp;action=1&amp;idx='.
1946     $this->getVal($this->clePrimaire).
1947     '&amp;premiersf=0&amp;trisf=&amp;retourformulaire='.$retourformulaire.'&amp;idxformulaire='.
1948     $this->getVal("dossier").
1949     '&amp;retour=form\');">
1950     <span class="om-prev-icon om-icon-16 edit-16" title="'.
1951     _('Modifier').'">'.
1952     _('Modifier').
1953     '</span></a></li>':
1954     '<li>
1955     <a href="form.php?obj=instruction&amp;action=1'.'&amp;idx='.
1956     $this->getVal($this->clePrimaire).
1957     '&amp;premier=&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=form">
1958     <span class="om-prev-icon om-icon-16 edit-16" title="'.
1959     _('Modifier').'">'.
1960     _('Modifier').
1961     '</span></a></li>';
1962     }
1963 softime 1994 //Si l'utilisateur a le droit de supprimer l'objet
1964 vpihour 1986 if ( $this->f->isAccredited('instruction') ||
1965     $this->f->isAccredited('instruction_supprimer') ){
1966    
1967     $actions["supprimer"] = ($sousform!='')?
1968     '<li><a href="#" onclick="ajaxIt(\'instruction\',
1969     \'../scr/sousform.php?obj=instruction&amp;action=2&amp;idx='.
1970     $this->getVal($this->clePrimaire).
1971     '&amp;premiersf=0&amp;trisf=&amp;retourformulaire='.$retourformulaire.'&amp;idxformulaire='.
1972     $this->getVal("dossier").
1973     '&amp;retour=form\');">
1974     <span class="om-prev-icon om-icon-16 delete-16" title="'.
1975     _('Supprimer').'">'.
1976     _('Supprimer').
1977     '</span></a></li>':
1978     '<li>
1979     <a href="form.php?obj=instruction&amp;action=1'.'&amp;idx='.
1980     $this->getVal($this->clePrimaire).
1981     '&amp;premier=&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=form">
1982     <span class="om-prev-icon om-icon-16 delete-16" title="'.
1983     _('Supprimer').'">'.
1984     _('Supprimer').
1985     '</span></a></li>';
1986     }
1987 vpihour 1921 }
1988     else {
1989     $lien = '../spg/file.php?obj=instruction&'.
1990     'champ=om_fichier_instruction&id='.$id;
1991     }
1992    
1993     $retour = array(
1994     "portlet"=> "<a href=\"#\" onclick=\"finalizeDocument(".
1995     $id.", 'instruction', '".$sousform."', ".(($status==0)?1:0).")\">
1996 vpihour 1986 <span class=\"om-prev-icon om-icon-16 om-icon-fix "
1997 vpihour 1921 .(($status==1)?"de":"")."finalise\" title=\"".
1998     (($status==1)?_("Reprendre la redaction du document"):_("Finaliser le document"))."\">".
1999     (($status==1)?_("Reprendre la redaction du document"):_("Finaliser le document"))."</span>
2000     </a>",
2001 vpihour 1986 "pdf" => $lien,
2002     "actions" => $actions
2003 vpihour 1921 );
2004    
2005     foreach ( $this->champs as $key=>$value )
2006     $val[$value] = $this->val[$key];
2007     $val['date_evenement']=$this->dateDBToForm($val['date_evenement']);
2008     $val['archive_date_complet']=$this->dateDBToForm($val['archive_date_complet']);
2009     $val['archive_date_rejet']=$this->dateDBToForm($val['archive_date_rejet']);
2010     $val['archive_date_limite']=$this->dateDBToForm($val['archive_date_limite']);
2011     $val['archive_date_notification_delai']=$this->dateDBToForm($val['archive_date_notification_delai']);
2012     $val['archive_date_decision']=$this->dateDBToForm($val['archive_date_decision']);
2013     $val['archive_date_validite']=$this->dateDBToForm($val['archive_date_validite']);
2014     $val['archive_date_achevement']=$this->dateDBToForm($val['archive_date_achevement']);
2015     $val['archive_date_chantier']=$this->dateDBToForm($val['archive_date_chantier']);
2016     $val['archive_date_conformite']=$this->dateDBToForm($val['archive_date_conformite']);
2017     $val['archive_date_dernier_depot']=$this->dateDBToForm($val['archive_date_dernier_depot']);
2018     $val['archive_date_limite_incompletude']=$this->dateDBToForm($val['archive_date_limite_incompletude']);
2019     $val['date_finalisation_courrier']=$this->dateDBToForm($val['date_finalisation_courrier']);
2020     $val['date_envoi_signature']=$this->dateDBToForm($val['date_envoi_signature']);
2021     $val['date_retour_signature']=$this->dateDBToForm($val['date_retour_signature']);
2022     $val['date_envoi_rar']=$this->dateDBToForm($val['date_envoi_rar']);
2023     $val['date_retour_rar']=$this->dateDBToForm($val['date_retour_rar']);
2024     $val['date_envoi_controle_legalite']=$this->dateDBToForm($val['date_envoi_controle_legalite']);
2025     $val['date_retour_controle_legalite']=$this->dateDBToForm($val['date_retour_controle_legalite']);
2026    
2027     $this->setvalF($val);
2028    
2029     // Verification de la validite des donnees
2030     $this->verifier($this->val, $this->db, DEBUG);
2031     // Verification du verrou
2032     $this->testverrou();
2033     // Si les verifications precedentes sont correctes, on procede a
2034     // la modification, sinon on ne fait rien et on retourne une erreur
2035     if ($this->correct) {
2036     // Execution du trigger 'before' specifique au MODE 'update'
2037     $this->triggermodifier( $id, $this->db, $this->val, DEBUG);
2038     $valF = array(
2039     "om_final_instruction"=> ($status==1)?TRUE:FALSE,
2040 vpihour 1966 "om_fichier_instruction"=>$uid,
2041     "date_finalisation_courrier"=>date('Y-m-d'));
2042 vpihour 1921 // Execution de la requête de modification des donnees de l'attribut
2043     // valF de l'objet dans l'attribut table de l'objet
2044     $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF,
2045     DB_AUTOQUERY_UPDATE, $this->getCle($id));
2046 vpihour 1927 $this->addToLog("finaliser() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id)."\")", VERBOSE_MODE);
2047 vpihour 1921 // Si une erreur survient
2048     if (database::isError($res)) {
2049     // Appel de la methode de recuperation des erreurs
2050     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
2051     } else {
2052     // Log
2053     $this->addToLog(_("Requete executee"), VERBOSE_MODE);
2054     // Log
2055     $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
2056     $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
2057     $message .= "[&nbsp;".$this->db->affectedRows()."&nbsp;";
2058     $message .= _("enregistrement(s) mis a jour")."&nbsp;]";
2059     $this->addToLog($message, VERBOSE_MODE);
2060     // Mise en place du verrou pour ne pas finaliser plusieurs fois
2061     // le meme document
2062     $this->verrouille();
2063     // Execution du trigger 'after' specifique au MODE 'update'
2064     //$this->triggermodifierapres($id, $this->db, $val, DEBUG);
2065    
2066     return $retour;
2067     }
2068     } else {
2069     // Message d'echec (saut d'une ligne supplementaire avant le
2070     // message pour qu'il soit mis en evidence)
2071 nhaye 3021 $this->addToLog(
2072     _("Finalisation non enregistree")." - ".
2073     _("id instruction")." = ".$id." - ".
2074     _("uid fichier")." = ".$uid
2075     );
2076 vpihour 1921 return -1;
2077     }
2078     }
2079     // Si le document n'a pas été stocké
2080     else{
2081 nhaye 3021 $this->addToLog(
2082     _("Finalisation non enregistree")." - ".
2083     _("id instruction")." = ".$id." - ".
2084     _("uid fichier")." = ".$uid
2085     );
2086 vpihour 1921 return -1;
2087     }
2088     }
2089 vpihour 1927
2090     /**
2091 nhaye 1928 * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
2092 nhaye 1949 * @return string numéro de dossier d'instruction
2093 nhaye 1928 */
2094     protected function getDossier() {
2095     if(empty($this->specificMetadata)) {
2096     $this->getSpecificMetadata();
2097     }
2098     return $this->specificMetadata->dossier;
2099     }
2100     /**
2101 softime 2016 * Récupération la version du dossier d'instruction à ajouter aux métadonnées
2102     * @return int Version
2103     */
2104     protected function getDossierVersion() {
2105     if(empty($this->specificMetadata)) {
2106     $this->getSpecificMetadata();
2107     }
2108     return $this->specificMetadata->version;
2109     }
2110     /**
2111 nhaye 1928 * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
2112 nhaye 1949 * @return string numéro de dossier d'autorisation
2113 nhaye 1928 */
2114 softime 2025 protected function getNumDemandeAutor() {
2115 nhaye 1928 if(empty($this->specificMetadata)) {
2116     $this->getSpecificMetadata();
2117     }
2118     return $this->specificMetadata->dossier_autorisation;
2119     }
2120     /**
2121     * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
2122 nhaye 1949 * @return date de la demande initiale
2123 nhaye 1928 */
2124 softime 2025 protected function getAnneemoisDemandeAutor() {
2125 nhaye 1928 if(empty($this->specificMetadata)) {
2126     $this->getSpecificMetadata();
2127     }
2128     return $this->specificMetadata->date_demande_initiale;
2129     }
2130     /**
2131     * Récupération du type de dossier d'instruction à ajouter aux métadonnées
2132 nhaye 1949 * @return string type du dossier d'instruction
2133 nhaye 1928 */
2134 softime 2025 protected function getTypeInstruction() {
2135 nhaye 1928 if(empty($this->specificMetadata)) {
2136     $this->getSpecificMetadata();
2137     }
2138     return $this->specificMetadata->dossier_instruction_type;
2139     }
2140     /**
2141     * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
2142 nhaye 1949 * @return string avis
2143 nhaye 1928 */
2144 softime 2025 protected function getStatutAutorisation() {
2145 nhaye 1928 if(empty($this->specificMetadata)) {
2146     $this->getSpecificMetadata();
2147     }
2148     return $this->specificMetadata->statut;
2149     }
2150     /**
2151     * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
2152 nhaye 1949 * @return string type du dossier d'autorisation
2153 nhaye 1928 */
2154 softime 2025 protected function getTypeAutorisation() {
2155 nhaye 1928 if(empty($this->specificMetadata)) {
2156     $this->getSpecificMetadata();
2157     }
2158     return $this->specificMetadata->dossier_autorisation_type;
2159     }
2160     /**
2161     * Récupération de la date d'ajout de document à ajouter aux métadonnées
2162 nhaye 1949 * @return date de l'évènement
2163 nhaye 1928 */
2164 softime 2025 protected function getDateEvenementDocument() {
2165 softime 2046 return date("Y-m-d");
2166 nhaye 1928 }
2167     /**
2168     * Récupération du groupe d'instruction à ajouter aux métadonnées
2169     * @return string Groupe d'instruction
2170     */
2171     protected function getGroupeInstruction() {
2172     if(empty($this->specificMetadata)) {
2173     $this->getSpecificMetadata();
2174     }
2175     return $this->specificMetadata->groupe_instruction;
2176     }
2177 softime 2002 /**
2178     * Récupération du libellé du type du document à ajouter aux métadonnées
2179     * @return string Groupe d'instruction
2180     */
2181 softime 2025 protected function getTitle() {
2182 nhaye 1928
2183 softime 2002 // Récupère le champ événement
2184     if (isset($this->valF["evenement"]) AND $this->valF["evenement"] != "") {
2185     $evenement = $this->valF["evenement"];
2186     } else {
2187     $evenement = $this->getVal("evenement");
2188     }
2189    
2190     // Requête sql
2191     $sql = "SELECT libelle FROM ".DB_PREFIXE."evenement
2192     WHERE evenement=".$evenement;
2193     $evenement_libelle = $this->db->getOne($sql);
2194 softime 2025 $this->addToLog("getTitle(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2195 softime 2002 if (database::isError($evenement_libelle)) {
2196     die();
2197     }
2198    
2199     // Retourne le libelle de l'événement
2200     return $evenement_libelle;
2201     }
2202    
2203 nhaye 1928 /**
2204     * Cette méthode permet de stocker en attribut toutes les métadonnées
2205     * nécessaire à l'ajout d'un document.
2206     */
2207     public function getSpecificMetadata() {
2208     if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
2209     $dossier = $this->valF["dossier"];
2210     } else {
2211     $dossier = $this->getVal("dossier");
2212     }
2213     //Requête pour récupérer les informations essentiels sur le dossier d'instruction
2214     $sql = "SELECT dossier.dossier as dossier,
2215     dossier_autorisation.dossier_autorisation as dossier_autorisation,
2216     to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
2217     dossier_instruction_type.code as dossier_instruction_type,
2218     etat_dossier_autorisation.libelle as statut,
2219     dossier_autorisation_type.code as dossier_autorisation_type,
2220     groupe.code as groupe_instruction
2221     FROM ".DB_PREFIXE."dossier
2222     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
2223     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2224     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
2225     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
2226     LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
2227     ON dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
2228     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
2229     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2230     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
2231     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
2232     LEFT JOIN ".DB_PREFIXE."groupe
2233     ON dossier_autorisation_type.groupe = groupe.groupe
2234     WHERE dossier.dossier = '".$dossier."'";
2235     $res = $this->db->query($sql);
2236 softime 2030 $this->f->addToLog("getSpecificMetadata() : db->query(".$sql.")", VERBOSE_MODE);
2237 nhaye 1928 if ( database::isError($res)){
2238     die();
2239     }
2240    
2241     //Le résultat est récupéré dans un objet
2242     $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
2243    
2244     //Si il y a un résultat
2245     if ($row !== null) {
2246 vpihour 2119
2247     //Génération du numéro de version
2248     $sql = "SELECT
2249     count(*)
2250     FROM
2251     ".DB_PREFIXE."dossier
2252     LEFT JOIN
2253     ".DB_PREFIXE."dossier_autorisation
2254     ON
2255     dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
2256     LEFT JOIN
2257     ".DB_PREFIXE."dossier_instruction_type
2258     ON
2259     dossier_instruction_type.dossier_instruction_type = dossier.dossier_instruction_type
2260     WHERE
2261 vpihour 2124 dossier_autorisation.dossier_autorisation = '".$row->dossier_autorisation."'
2262 vpihour 2119 AND
2263 vpihour 2124 dossier_instruction_type.code = '".$row->dossier_instruction_type."'";
2264     $row->version = $this->db->getOne($sql);
2265 vpihour 2119 $this->f->addToLog("getSpecificMetadata(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
2266 vpihour 2124 if ( database::isError($row->version)){
2267     $this->f->addToError("", $row->version, $row->version);
2268 vpihour 2119 return false;
2269     }
2270    
2271     //Formatage du numéro de version
2272 vpihour 2124 $row->version = str_pad($row->version, 2, "0", STR_PAD_LEFT);
2273 nhaye 1928
2274     //Alors on créé l'objet dossier_instruction
2275     $this->specificMetadata = $row;
2276    
2277     }
2278     }
2279 vpihour 1978
2280     /**
2281     * Retourne le statut du dossier d'instruction
2282     * @param string $idx Identifiant du dossier d'instruction
2283     * @return string Le statut du dossier d'instruction
2284     */
2285 softime 2025 function getStatutAutorisationDossier($idx){
2286 vpihour 1978
2287     $statut = '';
2288    
2289     //Si l'identifiant du dossier d'instruction fourni est correct
2290     if ( $idx != '' ){
2291    
2292     //On récupère le statut de l'état du dossier à partir de l'identifiant du
2293     //dossier
2294     $sql = "SELECT etat.statut
2295     FROM ".DB_PREFIXE."dossier
2296     LEFT JOIN
2297     ".DB_PREFIXE."etat
2298     ON
2299     dossier.etat = etat.etat
2300     WHERE dossier ='".$idx."'";
2301     $statut = $this->db->getOne($sql);
2302 softime 2025 $this->f->addToLog("getStatutAutorisationDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
2303 vpihour 1978 if ( database::isError($statut)){
2304     die();
2305     }
2306     }
2307     return $statut;
2308     }
2309 softime 2373
2310     /**
2311     * Récupère les données du dossier
2312     * @return array
2313     */
2314     function get_dossier_actual() {
2315    
2316     // Initialisation de la valeur de retour
2317     $return = array();
2318    
2319     // Récupération de toutes les valeurs du dossier d'instruction en cours
2320     $sql = "SELECT * FROM ".DB_PREFIXE."dossier
2321     WHERE dossier='".$this->valF['dossier']."'";
2322     $res = $this->db->query($sql);
2323     $this->addToLog("get_dossier_actual(): db->query(\"".$sql."\");", VERBOSE_MODE);
2324     $this->f->isDatabaseError($res);
2325    
2326     //
2327     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
2328    
2329     // Récupération de la valeur actuelle du délai, de l'accord tacite,
2330     // de l'état et de l'avis du dossier d'instruction
2331     $return['archive_delai']=$row['delai'];
2332     $return['archive_accord_tacite']=$row['accord_tacite'];
2333     $return['archive_etat']=$row['etat'];
2334     $return['archive_avis']=$row['avis_decision'];
2335     // Récupération de la valeur actuelle des 9 dates du dossier
2336     // d'instruction
2337     $return['archive_date_complet']=$row['date_complet'];
2338     $return['archive_date_dernier_depot']=$row['date_dernier_depot'];
2339     $return['archive_date_rejet']= $row['date_rejet'];
2340     $return['archive_date_limite']= $row['date_limite'];
2341     $return['archive_date_notification_delai']= $row['date_notification_delai'];
2342     $return['archive_date_decision']= $row['date_decision'];
2343     $return['archive_date_validite']= $row['date_validite'];
2344     $return['archive_date_achevement']= $row['date_achevement'];
2345     $return['archive_date_chantier']= $row['date_chantier'];
2346     $return['archive_date_conformite']= $row['date_conformite'];
2347     $return['archive_incompletude']= $row['incompletude'];
2348     $return['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];
2349     $return['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];
2350     $return['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];
2351     $return['archive_date_limite_incompletude']= $row['date_limite_incompletude'];
2352     $return['archive_delai_incompletude']= $row['delai_incompletude'];
2353     $return['archive_autorite_competente']= $row['autorite_competente'];
2354     $return['duree_validite']= $row['duree_validite'];
2355     }
2356    
2357     // Retour de la fonction
2358     return $return;
2359    
2360     }
2361    
2362 softime 2613 /**
2363     * Permet de vérifier qu'un événement est verrouillable
2364     * @param integer $idx Identifiant de l'instruction
2365     * @return boolean
2366     */
2367     function checkEvenementNonVerrouillable($idx) {
2368    
2369     // Initialisation du résultat
2370     $non_verrouillable = false;
2371    
2372     // Si la condition n'est pas vide
2373     if ($idx != "") {
2374    
2375     // Requête SQL
2376     $sql = "SELECT evenement.non_verrouillable
2377     FROM ".DB_PREFIXE."evenement
2378     LEFT JOIN ".DB_PREFIXE."instruction
2379     ON instruction.evenement = evenement.evenement
2380     WHERE instruction.instruction = $idx";
2381     $this->f->addToLog("checkEvenementNonVerrouillable() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
2382     $res = $this->db->getOne($sql);
2383     $this->f->isDatabaseError($res);
2384    
2385     // Si le retour de la requête est true
2386     if ($res == 't') {
2387     //
2388     $non_verrouillable = true;
2389     }
2390     }
2391    
2392     // Retourne résultat
2393     return $non_verrouillable;
2394     }
2395 vpihour 2643
2396     /**
2397     * Mise à jour des champs archive_*
2398     * @param mixed $row La ligne de données
2399     */
2400     public function updateArchiveData($row){
2401    
2402     // Récupération de la valeur actuelle du délai, de l'accord tacite,
2403     // de l'état et de l'avis du dossier d'instruction
2404     $this->valF['archive_delai']=$row['delai'];
2405     $this->valF['archive_accord_tacite']=$row['accord_tacite'];
2406     $this->valF['archive_etat']=$row['etat'];
2407     $this->valF['archive_avis']=$row['avis_decision'];
2408     // Récupération de la valeur actuelle des 9 dates du dossier
2409     // d'instruction
2410     if ($row['date_complet'] != '') {
2411     $this->valF['archive_date_complet']=$row['date_complet'];
2412     }
2413     if ($row['date_dernier_depot'] != '') {
2414     $this->valF['archive_date_dernier_depot']=$row['date_dernier_depot'];
2415     }
2416     if ($row['date_rejet']!='') {
2417     $this->valF['archive_date_rejet']= $row['date_rejet'];
2418     }
2419     if ($row['date_limite']!='') {
2420     $this->valF['archive_date_limite']= $row['date_limite'];
2421     }
2422     if ($row['date_notification_delai']!='') {
2423     $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];
2424     }
2425     if ($row['date_decision']!='') {
2426     $this->valF['archive_date_decision']= $row['date_decision'];
2427     }
2428     if ($row['date_validite']!='') {
2429     $this->valF['archive_date_validite']= $row['date_validite'];
2430     }
2431     if ($row['date_achevement']!='') {
2432     $this->valF['archive_date_achevement']= $row['date_achevement'];
2433     }
2434     if ($row['date_chantier']!='') {
2435     $this->valF['archive_date_chantier']= $row['date_chantier'];
2436     }
2437     if ($row['date_conformite']!='') {
2438     $this->valF['archive_date_conformite']= $row['date_conformite'];
2439     }
2440     if ($row['incompletude']!='') {
2441     $this->valF['archive_incompletude']= $row['incompletude'];
2442     }
2443     if ($row['evenement_suivant_tacite']!='') {
2444     $this->valF['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];
2445     }
2446     if ($row['evenement_suivant_tacite_incompletude']!='') {
2447     $this->valF['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];
2448     }
2449     if ($row['etat_pendant_incompletude']!='') {
2450     $this->valF['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];
2451     }
2452     if ($row['date_limite_incompletude']!='') {
2453     $this->valF['archive_date_limite_incompletude']= $row['date_limite_incompletude'];
2454     }
2455     if ($row['delai_incompletude']!='') {
2456     $this->valF['archive_delai_incompletude']= $row['delai_incompletude'];
2457     }
2458     if ($row['autorite_competente']!='') {
2459     $this->valF['archive_autorite_competente']= $row['autorite_competente'];
2460     }
2461     if ($row['duree_validite']!='') {
2462     $this->valF['duree_validite']= $row['duree_validite'];
2463     }
2464     }
2465 fraynaud 3 }// fin classe
2466 atreal 208 ?>

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26