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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3453 - (hide annotations)
Thu Apr 30 16:28:49 2015 UTC (9 years, 9 months ago) by softime
File size: 180200 byte(s)
* Correction de la gestion des droits dans la classe instruction.
1 fraynaud 3 <?php
2 fmichon 1540 /**
3     *
4     *
5     * specific :
6     * - cle secondaire
7     * destruction autorisée que pour le dernier evenement
8     * [delete the last event ]
9     * - variable globale [global variables]
10     * var $archive_date_depot;
11     * var $retourformulaire;
12     * var $idxformulaire;
13     * - modification des données dans dossier trigger avant
14     * [modify dossier data with trigger function]
15 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 vpihour 3025 "arrete" => array(
54     "numArrete" => "getNumArrete",
55     "ReglementaireArrete" => "getReglementaireArrete",
56     "NotificationArrete" => "getNotificationArrete",
57     "dateNotificationArrete" => "getDateNotificationArrete",
58     "controleLegalite" => "getControleLegalite",
59     "dateSignature" => "getDateSignature",
60     "nomSignataire" => "getNomSignataire",
61     "qualiteSignataire" => "getQualiteSignataire",
62     "ap_numRue" => "getAp_numRue",
63     "ap_nomDeLaVoie" => "getAp_nomDeLaVoie",
64     "ap_codePostal" => "getAp_codePostal",
65     "ap_ville" => "getAp_ville",
66     "activite" => "getActivite",
67     "dateControleLegalite" => "getDateControleLegalite",
68     ),
69 nhaye 1928 );
70 softime 3411 /** @var boolean Les nouvelles actions sont activées sur cet objet */
71     var $activate_class_action;
72 nhaye 1928
73 nhaye 2561 function __construct($id, &$db, $debug) {
74 softime 3411 //On active les nouvelles actions
75     $this->activate_class_action = true;
76 fmichon 1540 $this->constructeur($id, $db, $debug);
77     }
78 fraynaud 20
79 fmichon 944 // {{{ Gestion de la confidentialité des données spécifiques
80 softime 3411
81 fmichon 944 /**
82 softime 3411 * Définition des actions disponibles sur la classe.
83     *
84     * @return void
85 fmichon 944 */
86 softime 3411 function init_class_actions() {
87 nhaye 2815
88 softime 3411 parent::init_class_actions();
89    
90     // ACTION - 000 - ajouter
91     // Modifie la condition d'affichage du bouton ajouter
92     $this->class_actions[0]["condition"] = "is_addable_editable_and_deletable";
93    
94     // ACTION - 001 - modifier
95     // Modifie la condition et le libellé du bouton modifier
96 softime 3453 $this->class_actions[1]["condition"] = array("is_editable", "is_finalizable_without_bypass");
97 softime 3411 $this->class_actions[1]["portlet"]["libelle"] = _("Modifier");
98 vpihour 1978
99 softime 3411 // ACTION - 002 - supprimer
100     // Modifie la condition et le libellé du bouton supprimer
101 softime 3453 $this->class_actions[2]["condition"] = array("is_deletable", "is_finalizable_without_bypass");
102 softime 3411 $this->class_actions[2]["portlet"]["libelle"] = _("Supprimer");
103 vpihour 1978
104 softime 3411 // ACTION - 100 - finaliser
105     // Finalise l'enregistrement
106     $this->class_actions[100] = array(
107     "identifier" => "finaliser",
108     "portlet" => array(
109     "type" => "action-direct",
110     "libelle" => _("Finaliser le document"),
111     "order" => 110,
112     "class" => "finalise",
113     ),
114     "view" => "formulaire",
115     "method" => "finalize",
116     "button" => "finaliser",
117     "permission_suffix" => "finaliser",
118 softime 3453 "condition" => array("is_finalizable", "is_finalizable_without_bypass", "has_an_edition"),
119 softime 3411 );
120 fmichon 944
121 softime 3411 // ACTION - 110 - definaliser
122     // Finalise l'enregistrement
123     $this->class_actions[110] = array(
124     "identifier" => "definaliser",
125     "portlet" => array(
126     "type" => "action-direct",
127     "libelle" => _("Reprendre la redaction du document"),
128     "order" => 110,
129     "class" => "definalise",
130     ),
131     "view" => "formulaire",
132     "method" => "unfinalize",
133     "button" => "definaliser",
134     "permission_suffix" => "definaliser",
135 softime 3453 "condition" => array("is_unfinalizable", "is_unfinalizable_without_bypass"),
136 softime 3411 );
137 vpihour 1978
138 softime 3411 // ACTION - 120 - edition
139     // Affiche l'édition
140     $this->class_actions[120] = array(
141     "identifier" => "edition",
142     "portlet" => array(
143     "type" => "action-blank",
144     "libelle" => _("Edition"),
145     "order" => 100,
146     "class" => "pdf-16",
147     ),
148     "view" => "view_edition",
149     "condition" => "has_an_edition",
150     "permission_suffix" => "om_fichier_instruction_telecharger",
151     );
152 softime 3425
153     // ACTION - 130 - bible
154     // Affiche la bible
155     $this->class_actions[130] = array(
156     "identifier" => "bible",
157     "view" => "view_bible",
158     "permission_suffix" => "modifier",
159     );
160    
161     // ACTION - 140 - bible_auto
162     // Active la bible automatique
163     $this->class_actions[140] = array(
164     "identifier" => "bible_auto",
165     "view" => "view_bible_auto",
166     "permission_suffix" => "modifier",
167     );
168    
169     // ACTION - 150 - suivi_bordereaux
170     // Imprimer un bordereau d'envoi
171     $this->class_actions[150] = array(
172     "identifier" => "suivi_bordereaux",
173     "view" => "view_suivi_bordereaux",
174     "permission_suffix" => "consulter",
175     );
176    
177     // ACTION - 160 - suivi_envoi_lettre_rar
178     // Imprimer un bordereau d'envoi
179     $this->class_actions[160] = array(
180     "identifier" => "suivi_envoi_lettre_rar",
181     "view" => "view_suivi_envoi_lettre_rar",
182     "permission_suffix" => "consulter",
183     );
184    
185     // ACTION - 170 - suivi_mise_a_jour_des_dates
186     // Mettre à jour les dates de l'instruction
187     $this->class_actions[170] = array(
188     "identifier" => "suivi_mise_a_jour_des_dates",
189     "view" => "view_suivi_mise_a_jour_des_dates",
190     "permission_suffix" => "consulter",
191     );
192    
193     // ACTION - 180 - pdf_lettre_rar
194     // Génère PDF sur bordereaux de lettres RAR
195     $this->class_actions[180] = array(
196     "identifier" => "pdf_lettre_rar",
197     "view" => "view_pdf_lettre_rar",
198     "permission_suffix" => "consulter",
199     );
200 fmichon 944 }
201    
202     /**
203 fmichon 1908 * Cette variable permet de stocker le résultat de la méthode
204     * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
205     * ces appels.
206     * @var string Code de la division du dossier en cours
207 fmichon 944 */
208 fmichon 1908 var $_division_from_dossier = NULL;
209    
210     /**
211     * Cette méthode permet de récupérer le code de division correspondant
212     * au dossier sur lequel on se trouve.
213     *
214     * @return string Code de la division du dossier en cours
215     */
216 fmichon 944 function getDivisionFromDossier() {
217 fmichon 1908
218     // Cette méthode peut être appelée plusieurs fois lors d'une requête.
219     // Pour éviter de refaire le traitement de recherche de la division
220     // alors on vérifie si nous ne l'avons pas déjà calculé.
221     if ($this->_division_from_dossier != NULL) {
222     // Logger
223     $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
224     // On retourne la valeur déjà calculée
225     return $this->_division_from_dossier;
226 fmichon 944 }
227 fmichon 1908
228     // Par défaut, on définit la valeur du dossier à NULL
229     $dossier = NULL;
230     // Test sur le mode et le contexte du formulaire
231     if ($this->getParameter("maj") == 0
232     && ($this->getParameter("retourformulaire") == "dossier"
233     || $this->getParameter("retourformulaire") == "dossier_instruction"
234     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
235     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
236     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
237     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures")) {
238     // Si on se trouve en mode AJOUT (seul mode où l'enregistrement
239     // n'existe pas en base de données) ET que nous nous trouvons
240     // dans le contexte d'un dossier d'instruction alors on récupère
241     // le numéro de dossier depuis le paramètre 'idxformulaire'
242     $dossier = $this->getParameter("idxformulaire");
243     } else {
244     // Sinon on récupère le numéro de dossier dans le champs dossier de
245     // l'enregistrement (en base de données)
246     $dossier = $this->getVal("dossier");
247     }
248    
249     // On appelle la méthode de la classe utils qui renvoi le code de la
250     // division d'un dossier, on la stocke pour ne pas refaire le calcul au
251     // prochain appel de cette méthode
252     $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
253     // Logger
254     $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
255     // On retourne la valeur retournée
256     return $this->_division_from_dossier;
257    
258 fmichon 944 }
259    
260 nhaye 1643 /**
261     * Cette méthode permet de récupérer le dossier d'autorisation d'un dossier
262     */
263 softime 2025 function getNumDemandeAutorFromDossier($id) {
264 nhaye 1643 //
265     if (!isset($id)) {
266     return NULL;
267     }
268     //
269     $sql = "select dossier_autorisation from ".DB_PREFIXE."dossier ";
270     $sql .= " where dossier='".$id."'";
271     //
272     $dossier_autorisation = $this->db->getOne($sql);
273 softime 2025 $this->addToLog("getNumDemandeAutorFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
274 nhaye 1643 database::isError($dossier_autorisation);
275     //
276     return $dossier_autorisation;
277     }
278    
279 fmichon 944 // }}}
280    
281 fmichon 1540 function setType(&$form, $maj) {
282     //
283     parent::setType($form, $maj);
284     // On cache tous les champs
285     // XXX
286 nhaye 2644 $form->setType('complement5_om_html', 'hidden');
287 fraynaud 20 $form->setType('bible5', 'hidden');
288 nhaye 2644 $form->setType('complement6_om_html', 'hidden');
289 fraynaud 20 $form->setType('bible6', 'hidden');
290 nhaye 2644 $form->setType('complement7_om_html', 'hidden');
291 fraynaud 20 $form->setType('bible7', 'hidden');
292 nhaye 2644 $form->setType('complement8_om_html', 'hidden');
293 fraynaud 20 $form->setType('bible8', 'hidden');
294 nhaye 2644 $form->setType('complement9_om_html', 'hidden');
295 fraynaud 20 $form->setType('bible9', 'hidden');
296 nhaye 2644 $form->setType('complement10_om_html', 'hidden');
297 fraynaud 20 $form->setType('bible10', 'hidden');
298 nhaye 2644 $form->setType('complement11_om_html', 'hidden');
299 fraynaud 20 $form->setType('bible11', 'hidden');
300 nhaye 2644 $form->setType('complement12_om_html', 'hidden');
301 fraynaud 20 $form->setType('bible12', 'hidden');
302 nhaye 2644 $form->setType('complement13_om_html', 'hidden');
303 fraynaud 20 $form->setType('bible13', 'hidden');
304 nhaye 2644 $form->setType('complement14_om_html', 'hidden');
305 fraynaud 20 $form->setType('bible14', 'hidden');
306 nhaye 2644 $form->setType('complement15_om_html', 'hidden');
307 fraynaud 20 $form->setType('bible15', 'hidden');
308 fmichon 1540 //
309 fraynaud 20 $form->setType('delai', 'hidden');
310     $form->setType('etat', 'hidden');
311     $form->setType('accord_tacite', 'hidden');
312     $form->setType('action', 'hidden');
313     $form->setType('delai_notification', 'hidden');
314 vpihour 489 $form->setType('avis_decision', 'hidden');
315 nhaye 2099 $form->setType('autorite_competente', 'hidden');
316 fmichon 1540 //
317 fraynaud 20 $form->setType('archive_delai', 'hidden');
318     $form->setType('archive_etat', 'hidden');
319     $form->setType('archive_accord_tacite', 'hidden');
320     $form->setType('archive_avis', 'hidden');
321 nmeucci 2838 $form->setType('archive_date_complet', 'hiddendate');
322     $form->setType('archive_date_dernier_depot', 'hiddendate');
323     $form->setType('archive_date_rejet', 'hiddendate');
324     $form->setType('archive_date_limite', 'hiddendate');
325     $form->setType('archive_date_notification_delai', 'hiddendate');
326     $form->setType('archive_date_decision', 'hiddendate');
327     $form->setType('archive_date_validite', 'hiddendate');
328     $form->setType('archive_date_achevement', 'hiddendate');
329     $form->setType('archive_date_conformite', 'hiddendate');
330     $form->setType('archive_date_chantier', 'hiddendate');
331 nhaye 2099 $form->setType('archive_autorite_competente','hidden');
332 fmichon 1540 //
333 vpihour 1307 $form->setType('numero_arrete', 'hidden');
334 vpihour 1784 //
335     $form->setType('code_barres', 'hidden');
336 fmichon 1540
337     //
338 nhaye 1717 $form->setType('archive_incompletude','hidden');
339 nhaye 3059 $form->setType('archive_incomplet_notifie','hidden');
340 nhaye 1717 $form->setType('archive_evenement_suivant_tacite','hidden');
341     $form->setType('archive_evenement_suivant_tacite_incompletude','hidden');
342     $form->setType('archive_etat_pendant_incompletude','hidden');
343 nmeucci 2857 $form->setType('archive_date_limite_incompletude','hiddendate');
344 nhaye 1717 $form->setType('archive_delai_incompletude','hidden');
345 softime 2142
346     //
347     $form->setType('duree_validite','hidden');
348     $form->setType('duree_validite_parametrage','hidden');
349 fmichon 1540 if ($maj < 2) { //ajouter et modifier
350     $form->setType('destinataire', 'hidden');
351     $form->setType('lettretype', 'hiddenstatic');
352 nhaye 2644 $form->setType('complement_om_html', 'html');
353     $form->setType('complement2_om_html', 'html');
354 vpihour 3373 $form->setType('complement3_om_html', 'html');
355     $form->setType('complement4_om_html', 'html');
356 fmichon 1540 $form->setType('bible_auto', 'httpclick');
357     $form->setType('bible', 'httpclick');
358     $form->setType('bible2', 'httpclick');
359 vpihour 3373 $form->setType('bible3', 'httpclick');
360     $form->setType('bible4', 'httpclick');
361 fmichon 1540 $form->setType('dossier', 'hidden');
362     $form->setType('libelle', 'hiddenstatic');
363     $form->setType('signataire_arrete','select');
364 nhaye 1564 $form->setType('date_envoi_signature','datedisabled');
365     $form->setType('date_retour_signature','datedisabled');
366     $form->setType('date_envoi_rar','datedisabled');
367     $form->setType('date_retour_rar','datedisabled');
368     $form->setType('date_envoi_controle_legalite','datedisabled');
369     $form->setType('date_retour_controle_legalite','datedisabled');
370 vpihour 1966 $form->setType('date_finalisation_courrier','datedisabled');
371 softime 2049
372 nmeucci 2805
373 softime 2049
374 fmichon 1540 if($maj==0){ // add
375 nmeucci 2805 $form->setType('instruction', 'hidden');
376     $form->setType('lettretype', 'hidden');
377 fmichon 1540 $form->setType('evenement', 'select');
378     $form->setType('date_evenement', 'date2');
379     }else{ // modify
380     $form->setType('instruction', 'hiddenstatic');
381     $form->setType('evenement', 'selecthiddenstatic');
382     //$form->setType('date_evenement', 'hiddenstaticdate');
383     $form->setType('date_evenement', 'date2');
384     // necessaire pour calcul de date en modification
385     //$form->setType('delai', 'hiddenstatic');
386 nmeucci 2944 // les administrateurs technique et fonctionnel peuvent
387     // modifier tous les champs de date
388     if ($this->f->isAccredited("instruction_modification_dates")) {
389     $form->setType('date_envoi_signature', 'date');
390     $form->setType('date_retour_signature', 'date');
391     $form->setType('date_envoi_rar', 'date');
392     $form->setType('date_retour_rar', 'date');
393     $form->setType('date_envoi_controle_legalite', 'date');
394     $form->setType('date_retour_controle_legalite', 'date');
395     $form->setType('date_finalisation_courrier', 'date');
396 nmeucci 2805 }
397 fmichon 1540 }
398     } elseif($maj==2){
399     $form->setType('dossier', 'hidden');
400     $form->setType('bible_auto', 'hidden');
401     $form->setType('bible', 'hidden');
402     $form->setType('bible2', 'hidden');
403 vpihour 3373 $form->setType('bible3', 'hidden');
404     $form->setType('bible4', 'hidden');
405 fmichon 1540 }else {
406     $form->setType('destinataire', 'hidden');
407     $form->setType('dossier', 'hidden');
408     $form->setType('bible_auto', 'hidden');
409     $form->setType('bible', 'hidden');
410     $form->setType('bible2', 'hidden');
411 vpihour 3373 $form->setType('bible3', 'hidden');
412     $form->setType('bible4', 'hidden');
413 fmichon 1540 }
414 vpihour 1899
415     //Cache les champs pour la finalisation
416     $form->setType('om_fichier_instruction', 'hidden');
417     $form->setType('om_final_instruction', 'hidden');
418 nhaye 1945 // Cache le document arrêté
419 softime 2030 $form->setType('document_numerise', 'hidden');
420 vpihour 2069
421     //Masquer les champs date_envoi_controle_legalite et
422 vpihour 3158 //date_retour_controle_legalite si ce n'est pas un arrêté et si ce n'est
423     //pas un utilisateur ayant le droit spécifique
424     if ( !is_numeric($this->getVal("avis_decision"))&&
425     !$this->f->isAccredited("instruction_modification_dates")){
426 vpihour 2069
427 nmeucci 2838 $form->setType("date_envoi_controle_legalite", "hiddendate");
428     $form->setType("date_retour_controle_legalite", "hiddendate");
429 vpihour 2069 }
430 softime 3411
431     // Pour les actions finalize et unfinalize
432     if($maj == 100 || $maj == 110) {
433     //
434     foreach ($this->champs as $value) {
435     // Cache tous les champs
436     $form->setType($value, 'hidden');
437     }
438     }
439 fraynaud 20 }
440 fmichon 1540
441     function setSelect(&$form, $maj,&$db,$debug) {
442     /**
443     * On ne surcharge pas la méthode parent car une requête sur la table
444     * dossier est mauvaise pour les performances, car la requête qui
445     * concerne evenement est plus complexe que celle générée et car les
446     * champs action, avis_decision et etat ne sont pas utilisés comme des
447     * select
448     */
449 fmichon 3172 if(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php"))
450     include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php");
451     elseif(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc"))
452     include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc");
453 nhaye 428
454 fmichon 1540 //// action
455     //$this->init_select($form, $db, $maj, $debug, "action",
456     // $sql_action, $sql_action_by_id, false);
457 vpihour 1227
458 fmichon 1540 //// avis_decision
459     //$this->init_select($form, $db, $maj, $debug, "avis_decision",
460     // $sql_avis_decision, $sql_avis_decision_by_id, false);
461 nhaye 1140
462 fmichon 1540 //// dossier
463     //$this->init_select($form, $db, $maj, $debug, "dossier",
464     // $sql_dossier, $sql_dossier_by_id, false);
465 nhaye 428
466 fmichon 1540 //// etat
467     //$this->init_select($form, $db, $maj, $debug, "etat",
468     // $sql_etat, $sql_etat_by_id, false);
469    
470     //// evenement
471     //$this->init_select($form, $db, $maj, $debug, "evenement",
472     // $sql_evenement, $sql_evenement_by_id, false);
473    
474     // signataire_arrete
475     $this->init_select($form, $db, $maj, $debug, "signataire_arrete",
476     $sql_signataire_arrete, $sql_signataire_arrete_by_id, true);
477    
478     /**
479     * Gestion du filtre sur les événements de workflow disponibles
480     * On récupère ici en fonction de l'état du dossier d'instruction en
481     * cours et du type du dossier d'instruction en cours la liste
482     * événements disponibles.
483     */
484     if ($maj == 0) {
485     // Récupération des événements par une jointure entre la table dossier
486     // et la table transition et la table evenement et la table
487     // lien_dossier_instruction_type_evenement en fonction de l'identifiant
488     // du dossier d'instruction en cours
489     $sql = "SELECT
490     evenement.evenement,
491 nmeucci 2853 evenement.libelle as lib
492 fmichon 1540 FROM ".DB_PREFIXE."dossier
493     INNER JOIN ".DB_PREFIXE."lien_dossier_instruction_type_evenement
494     ON dossier.dossier_instruction_type=lien_dossier_instruction_type_evenement.dossier_instruction_type
495     INNER JOIN ".DB_PREFIXE."evenement
496     ON evenement.evenement=lien_dossier_instruction_type_evenement.evenement
497     INNER JOIN ".DB_PREFIXE."transition
498     ON evenement.evenement = transition.evenement
499     AND dossier.etat=transition.etat
500     WHERE dossier.dossier='".$this->idxformulaire."'
501 vpihour 2614 ORDER BY evenement.libelle, evenement.action";
502 fmichon 1540 $res = $db->query($sql);
503     $this->addToLog("setSelect(): db->query(\"".$sql."\");", VERBOSE_MODE);
504     if (database::isError($res)) {
505     die($res->getMessage());
506 fraynaud 20 }
507 fmichon 1540 // Remplissage du tableau du select
508     $contenu = array(
509     0 => array("",),
510     1 => array(_('choisir')." "._('evenement'),)
511     );
512     while ($row=& $res->fetchRow()) {
513     $contenu[0][] = $row[0];
514     $contenu[1][] = $row[1];
515     }
516     $form->setSelect("evenement", $contenu);
517     } else {
518     $sql = "SELECT
519 nmeucci 2853 evenement.libelle as lib
520 fmichon 1540 FROM ".DB_PREFIXE."evenement
521     WHERE evenement.evenement=".$this->getVal("evenement")."";
522     $res = $db->getone($sql);
523     $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
524     if (database::isError($res)) {
525     die($res->getMessage());
526     }
527     //
528     $contenu = array(
529     0 => array($this->getVal("evenement"),),
530     1 => array($res,)
531     );
532     $form->setSelect("evenement", $contenu);
533 fraynaud 20 }
534 fmichon 1540
535     /**
536     * Gesion des liens vers la bible
537     */
538     // lien bible_auto
539     $contenu = array(_("automatique"));
540 nhaye 428 $form->setSelect("bible_auto",$contenu);
541     // lien bible1
542 fmichon 1540 $contenu = array(_("bible"));
543 nhaye 428 $form->setSelect("bible",$contenu);
544     // lien bible2
545 fmichon 1540 $contenu = array(_("bible"));
546 nhaye 428 $form->setSelect("bible2",$contenu);
547 vpihour 3373 // lien bible3
548     $contenu = array(_("bible"));
549     $form->setSelect("bible3",$contenu);
550     // lien bible4
551     $contenu = array(_("bible"));
552     $form->setSelect("bible4",$contenu);
553 fmichon 1540 }
554 fraynaud 20
555 fmichon 1540 function cleSecondaire($id, &$db, $val, $DEBUG) {
556     //
557     parent::cleSecondaire($id, $db, $val, $DEBUG);
558 vpihour 2000
559 vpihour 2606 $id = $this->getVal($this->clePrimaire);
560 vpihour 2604
561 vpihour 2603
562 softime 2633 //Requête de vérification que cet événement d'instruction n'est pas lié
563 vpihour 2606 //à la création d'un dossier d'instruction
564     $sql = "SELECT demande_type.dossier_instruction_type
565     FROM ".DB_PREFIXE."demande_type
566     LEFT JOIN ".DB_PREFIXE."demande
567     ON demande.demande_type = demande_type.demande_type
568     WHERE demande.instruction_recepisse = ".$id;
569     $res = $this->db->getOne($sql);
570     $this->addToLog("cleSecondaire(): db->getone(\"".$sql."\");", VERBOSE_MODE);
571     if (database::isError($res)) {
572     die($res->getMessage());
573     }
574    
575     // Aucune clé secondaire n'a été trouvée ou c'est un événement sans
576     //création de dossier d'instruction, l'événement d'instruction peut être
577     //supprimé
578 vpihour 2603 if ( $this->correct !== false || $res == null || $res == ""){
579 vpihour 2606
580 softime 2633 // Requête de vérification que cet événement d'instruction est lié
581     // à une demande
582     $sql = "SELECT demande
583     FROM ".DB_PREFIXE."demande
584     WHERE instruction_recepisse = ".$id;
585     $res = $this->db->getOne($sql);
586     $this->addToLog("cleSecondaire(): db->getone(\"".$sql."\");", VERBOSE_MODE);
587     if (database::isError($res)) {
588     die($res->getMessage());
589     }
590    
591 vpihour 2606 //Si c'est un événement d'instruction lié à une demande
592 softime 2633 if ($res != null || $res != ""){
593 vpihour 2603
594 vpihour 2606 require_once "../obj/demande.class.php";
595     $demande = new demande($res, $this->db, DEBUG);
596    
597     //On met à jour la demande en supprimant la liaison vers
598     //l'événement d'instruction
599     $demande->setParameter("maj", 1);
600     $valF = array();
601     foreach($demande->champs as $identifiant => $champ) {
602     $valF[$champ] = $demande->val[$identifiant];
603     }
604     $valF['date_demande']=$demande->dateDBToForm($valF['date_demande']);
605     $valF['instruction_recepisse']=NULL;
606     $ret = $demande->modifier($valF, $this->db, DEBUG);
607 vpihour 2603 }
608    
609 vpihour 2000 /**
610     * Vérification que l'élément supprimé est le dernier pour pouvoir
611     * remodifier les données de manière itérative.
612     */
613     // Initialisation
614     $dernierevenement = "";
615     // Récupération du dernier élément de la table d'instruction qui
616     // concerne le dossier en cours
617     $sql = "SELECT max(instruction)
618     FROM ".DB_PREFIXE."instruction
619     WHERE dossier ='".$this->idxformulaire."'";
620     $dernierevenement = $db->getOne($sql);
621     $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
622     if (database::isError($dernierevenement)) {
623     die($dernierevenement->getMessage());
624     }
625     // Si on se trouve effectivement sur le dernier evenement d'instruction
626     if ($dernierevenement == $id) {
627     // Alors on valide la suppression
628     $this->correct = true;
629     $this->addToMessage(_('Destruction_chronologique'));
630     } else {
631     // Alors on annule la suppression
632     $this->correct = false;
633     $this->addToMessage(_("Seul le dernier evenement d'instruction peut etre supprime."));
634     }
635 fmichon 1540 }
636     }
637    
638 nhaye 2412 /**
639     * Vérification de la possibilité ou non de modifier des dates de suivi
640     * @param string $champ champ date à vérifier
641     */
642 nhaye 1564 function updateDate($champ) {
643 nhaye 2412
644 softime 2562 //Si le retourformulaire est "dossier_instruction"
645     if ($this->retourformulaire == "dossier_instruction") {
646    
647     // Vérification de la possibilité de modifier les dates si déjà éditées
648     if($this->valF[$champ] != "" AND !$this->f->user_is_admin) {
649     // si l'utilisateur n'est pas un admin
650     if($this->getVal($champ) != "" AND $this->getVal($champ) != $this->valF[$champ]) {
651     $this->correct = false;
652     $this->addToMessage(_("Les dates de suivis ne peuvent etre modifiees"));
653     }
654 nhaye 1564 }
655     }
656 softime 2562
657     //
658 nhaye 2412 return true;
659 nhaye 1564 }
660    
661 fmichon 1540 // Sélectionne le signataire_arrete par défaut
662     function setVal(&$form,$maj,$validation){
663    
664     // Ajout
665     if($maj == 0) {
666    
667     // Création de la requête
668     $sql = "SELECT signataire_arrete
669     FROM ".DB_PREFIXE."signataire_arrete
670     WHERE defaut IS TRUE";
671    
672     // Exécution de la requête
673 vpihour 1777 $res = $this->f->db->query($sql);
674 vpihour 2456 $this->f->addToLog("setVal(): db->query(\"".$sql."\");", VERBOSE_MODE);
675 vpihour 1777 if ( database::isError($res)){
676     die();
677     }
678 fmichon 1540
679     $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
680    
681     if ( isset($row['signataire_arrete']) && is_numeric($row['signataire_arrete'])){
682    
683     $form->setVal("signataire_arrete",$row['signataire_arrete']);
684     }
685     }
686     }
687    
688     /*Met des valeurs par défaut dans certains des sous-formulaire*/
689     function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){
690     if ($validation==0 and $maj<2) {
691     if ($maj == 0){
692     $form->setVal("destinataire", $idxformulaire);
693     $form->setVal("dossier", $idxformulaire);
694     $form->setVal("date_evenement", date('Y-m-d'));
695     }
696     $form->setVal("bible_auto","bible_auto()");
697 vpihour 3373 $form->setVal("bible","bible(1)");
698     $form->setVal("bible2","bible(2)");
699     $form->setVal("bible3","bible(3)");
700     $form->setVal("bible4","bible(4)");
701 fmichon 1540 }
702     $this->retourformulaire=$retourformulaire;
703     $this->idxformulaire=$idxformulaire;
704     }
705    
706    
707 nhaye 1439 function setLayout(&$form, $maj){
708     if ( $maj < 2 OR $maj == 3 ) {
709     /*Champ sur lequel s'ouvre le bloc 1 */
710     $form->setBloc('evenement','D',"","col_12");
711 fraynaud 20
712 vpihour 3373 $form->setFieldset('evenement','D',_('Evenement'));
713     $form->setFieldset('lettretype','F','');
714 nhaye 1439
715     $form->setBloc('lettretype','F');
716    
717     $form->setBloc('date_finalisation_courrier','D',"","col_12");
718    
719 vpihour 3373 $form->setFieldset('date_finalisation_courrier','D',_('Dates'));
720     $form->setBloc('date_finalisation_courrier','D',"","col_6");
721     $form->setBloc('date_envoi_controle_legalite','F');
722 nhaye 1439
723 vpihour 3373 $form->setBloc('signataire_arrete','D',"","col_6");
724     $form->setBloc('date_retour_controle_legalite','F');
725     $form->setFieldset('date_retour_controle_legalite','F','');
726 nhaye 1439
727     $form->setBloc('date_retour_controle_legalite','F');
728    
729 nhaye 2644 $form->setBloc('complement_om_html','D',"","col_12");
730 vpihour 3373 $form->setFieldset('complement_om_html','D',_('Complement'));
731     $form->setFieldset('bible','F','');
732 nhaye 1439 $form->setBloc('bible','F');
733    
734 nhaye 2644 $form->setBloc('complement2_om_html','D',"","col_12");
735 vpihour 3373 $form->setFieldset('complement2_om_html','D',_('Complement 2'));
736     $form->setFieldset('bible2','F','');
737 nhaye 1439 $form->setBloc('bible2','F');
738 vpihour 3373
739     $form->setBloc('complement3_om_html','D',"","col_12");
740     $form->setFieldset('complement3_om_html','D',_('Complement 3'));
741     $form->setFieldset('bible3','F','');
742     $form->setBloc('bible3','F');
743    
744     $form->setBloc('complement4_om_html','D',"","col_12");
745     $form->setFieldset('complement4_om_html','D',_('Complement 4'));
746     $form->setFieldset('bible4','F','');
747     $form->setBloc('bible4','F');
748 nhaye 1439 }
749 fraynaud 20 }
750    
751 fmichon 1540 function setLib(&$form, $maj) {
752     //
753     parent::setLib($form, $maj);
754     //
755     $form->setLib('bible_auto', "");
756     $form->setLib('bible', "");
757     $form->setLib('bible2', "");
758 vpihour 3373 $form->setLib('bible3', "");
759     $form->setLib('bible4', "");
760 fraynaud 20 }
761    
762 fmichon 1540 function triggerajouter($id, &$db, $val, $DEBUG) {
763     /**
764     * Le code suivant permet de récupérer des valeurs des tables evenement
765     * et dossier pour les stocker dans l'instruction :
766     * DEPUIS L'EVENEMENT
767     * - action
768     * - delai
769     * - accord_tacite
770     * - etat
771     * - avis_decision
772     * - delai_notification
773     * - lettretype
774 nhaye 2099 * - autorite_competente
775 fmichon 1540 * DEPUIS LE DOSSIER D'INSTRUCTION
776     * - archive_delai
777     * - archive_accord_tacite
778     * - archive_etat
779     * - archive_avis
780     * - date_complet
781     * - date_rejet
782     * - date_limite
783     * - date_notification_delai
784     * - date_decision
785     * - date_validite
786     * - date_achevement
787     * - date_chantier
788     * - date_conformite
789 nhaye 2099 * - avis_decision
790 fmichon 1540 * Il permet également de stocker la date_depot du dossier d'instruction
791     * dans l'attribut $this->archive_date_depot de la classe.
792     */
793     // Récupération de tous les paramètres de l'événement sélectionné
794     $sql = "SELECT * FROM ".DB_PREFIXE."evenement
795     WHERE evenement=".$this->valF['evenement'];
796 fraynaud 20 $res = $db->query($sql);
797 fmichon 1540 $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
798     if (database::isError($res)) {
799     die($res->getMessage());
800     }
801     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
802     // Récupération de l'identifiant de l'action
803     // si une action est paramétrée dans l'événement
804     $this->valF['action'] = NULL;
805     if (isset($row['action']) and !empty($row['action'])) {
806 nhaye 460 $this->valF['action']=$row['action'];
807     }
808 fmichon 1540 // Récupération de la valeur du délai
809     $this->valF['delai'] = $row['delai'];
810     // Récupération de l'identifiant de l'état
811     // si un état est paramétré dans l'événement
812     $this->valF['etat']=NULL;
813     if (isset($row['etat']) and !empty($row['etat'])) {
814 nhaye 460 $this->valF['etat']=$row['etat'];
815     }
816 fmichon 1540 // Récupération de la valeur d'accord tacite
817 fraynaud 20 $this->valF['accord_tacite']=$row['accord_tacite'];
818 fmichon 1540 // Récupération de la valeur du délai de notification
819 fraynaud 20 $this->valF['delai_notification']=$row['delai_notification'];
820 fmichon 1540 // Récupération de l'identifiant de l'avis
821     // si un avis est paramétré dans l'événement
822     $this->valF['avis_decision'] = NULL;
823 vpihour 489 if(isset($row['avis_decision']) and !empty($row['avis_decision'])) {
824     $this->valF['avis_decision']=$row['avis_decision'];
825 fmichon 1540 }
826 nhaye 2099 // Récupération de la valeur de l'autorité compétente
827     // si l'autorité compétente est paramétré dans l'événement
828     $this->valF['autorite_competente'] = NULL;
829     if(isset($row['autorite_competente']) and !empty($row['autorite_competente'])) {
830     $this->valF['autorite_competente']=$row['autorite_competente'];
831     }
832 fmichon 1540 // Récupération de la valeur de la lettre type
833 nhaye 2815 $this->valF['lettretype']=$row['lettretype'];
834 fraynaud 20 }
835 fmichon 1540 // Récupération de toutes les valeurs du dossier d'instruction en cours
836     $sql = "SELECT * FROM ".DB_PREFIXE."dossier
837     WHERE dossier='".$this->valF['dossier']."'";
838 fraynaud 20 $res = $db->query($sql);
839 fmichon 1540 $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
840     if (database::isError($res)) {
841 fraynaud 20 die($res->getMessage());
842 fmichon 1540 }
843 vpihour 2643 $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
844     $this->updateArchiveData($row);
845     $this->archive_date_depot = $row['date_depot'];
846    
847 softime 2142 // Récupération de la duree de validite du dossier d'autorisation
848     $sql = "SELECT duree_validite_parametrage
849     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
850     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
851     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
852     LEFT JOIN ".DB_PREFIXE."dossier
853     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
854     WHERE dossier.dossier='".$this->valF['dossier']."'";
855     $duree_validite_parametrage = $db->getOne($sql);
856     $this->addToLog("triggerajouter(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
857     database::isError($duree_validite_parametrage);
858     if ($duree_validite_parametrage != '') {
859     $this->valF['duree_validite_parametrage']= $duree_validite_parametrage;
860     }
861 vpihour 1784
862     // Identifiant du type de courrier
863     $idTypeCourrier = '11';
864     $idCourrier = str_pad($this->valF["instruction"], 10, "0", STR_PAD_LEFT);
865     // Code barres
866     $this->valF["code_barres"] = $idTypeCourrier . $idCourrier;
867 fraynaud 20 }
868    
869 vpihour 1137 // Test si une restriction est valide
870     // return boolean
871     function restrictionIsValid($restriction){
872 nhaye 2905 if($this->restriction_valid != null) {
873     return $this->restriction_valid;
874     }
875 nhaye 3050 if(empty($restriction)) {
876     $this->restriction_valid = true;
877     return $this->restriction_valid;
878     }
879 softime 2305 // Liste des opérateurs possible
880     $operateurs = array(">=", "<=", "+", "-");
881     // Liste des opérateurs avec espace
882     $operateurs_blank = array(" >= ", " <= ", " + ", " - ");
883    
884     // Supprime tous les espaces de la chaîne de caractère
885     $restriction = str_replace(' ', '', $restriction);
886 vpihour 1137
887 softime 2305 // Met des espace avant et après les opérateurs puis transforme la
888     // chaine en un tableau
889     $tabRestriction = str_replace($operateurs, $operateurs_blank,
890     $restriction);
891     $tabRestriction = explode(" ", $tabRestriction);
892    
893     // Tableau comprenant les résultat
894 vpihour 1137 $res = array();
895 softime 2305 // Compteur pour les résultat
896     // commence à 1 car le 0 doit rester inchangé tout au long du traitement
897     $j = 1;
898     // Comparateur du calcul
899     $comparateur = '';
900     // Booléen retourné
901     $res_bool = true;
902    
903 softime 2692 // S'il y a un comparateur
904     if (in_array(">=", $tabRestriction)
905     || in_array("<=", $tabRestriction)) {
906 softime 2305
907 softime 2692 // Si le tableau n'est pas vide
908     if (count($tabRestriction) > 0) {
909    
910     // Boucle dans le tableau pour récupérer seulement les valeurs
911     foreach ($tabRestriction as $key => $value) {
912    
913     //
914     if (!in_array($value, $operateurs)) {
915     if ($this->getRestrictionValue($value) != false) {
916     $res[] = $this->getRestrictionValue($value);
917     } else {
918     // Message d'erreur
919     $error_message = sprintf(_("Le champ %s de l'instruction %s est vide"), "<span class='bold'>".$value."</span>", "<span class='bold'>".$this->valF["instruction"]."</span>");
920     $this->addToMessage($error_message);
921     // Arrête le traitement
922     return false;
923     }
924 softime 2305 }
925 vpihour 1137 }
926 softime 2305
927 softime 2692 // Boucle dans le tableau
928     // commence à 1 car le 0 doit rester inchangé tout au long du
929     // traitement
930     for ($i = 1; $i<count($tabRestriction); $i++) {
931    
932     // Récupère le comparateur
933     if ($tabRestriction[$i] === ">="
934     || $tabRestriction[$i] === "<=") {
935     $comparateur = $tabRestriction[$i];
936     }
937 softime 2305
938 softime 2692 // Si l'opérateur qui suit est un "+"
939     if ($tabRestriction[$i] === "+") {
940 softime 2771 $dateDep = $res[$j];
941 softime 2692 unset($res[$j]);$j++;
942     $duree = $res[$j];
943     unset($res[$j]);
944 softime 2771 $res[$j] = $this->f->mois_date($dateDep, $duree, "+");
945 softime 2692 }
946 softime 2305
947 softime 2692 // Si l'opérateur qui suit est un "-"
948     if ($tabRestriction[$i] === "-") {
949 softime 2771 $dateDep = $res[$j];
950 softime 2692 unset($res[$j]);$j++;
951     $duree = $res[$j];
952     unset($res[$j]);
953 softime 2771 $res[$j] = $this->f->mois_date($dateDep, $duree, "-");
954 softime 2692 }
955 softime 2305 }
956 softime 2692
957 vpihour 1137 }
958    
959 softime 2692 // Si les tableau des résultats n'est pas vide
960     if (count($res) > 0) {
961 softime 2305 //
962 softime 2692 $res_bool = false;
963     // Effectue le test
964     if ($comparateur === ">=") {
965     //
966     if (strtotime($res[0]) >= strtotime($res[$j])) {
967     $res_bool = true;
968     }
969 softime 2305 }
970 softime 2692 if ($comparateur === "<=") {
971 vpihour 1137
972 softime 2692 if (strtotime($res[0]) <= strtotime($res[$j])) {
973     $res_bool = true;
974     }
975 softime 2305 }
976 vpihour 1137 }
977 softime 2692 // Sinon une erreur s'affiche
978     } else {
979    
980     // Message d'erreur
981 nhaye 3050 $error_message = _("Mauvais parametrage de la restriction.")." ".
982     _("Contactez votre administrateur");
983 softime 2692 $this->addToMessage($error_message);
984     // Arrête le traitement
985     return false;
986 vpihour 1137 }
987    
988 softime 2305 return $res_bool;
989    
990 vpihour 1137 }
991 softime 2373
992     /**
993 nhaye 2905 * Permet de définir si l'événement passé en paramètre est un événement retour.
994     * @param integer $evenement événement à tester
995     *
996     * @return boolean retourne true si événement retour sinon false
997     */
998     function is_evenement_retour($evenement) {
999     if(empty($evenement) || !is_numeric($evenement)) {
1000     return "";
1001     }
1002     $sql = "SELECT retour
1003     FROM ".DB_PREFIXE."evenement
1004     WHERE evenement = ".$evenement;
1005     $retour = $this->db->getOne($sql);
1006     $this->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
1007     if (database::isError($retour)) {
1008     die($retour->getMessage());
1009     }
1010     if ($retour == 't') {
1011     return true;
1012     } else {
1013     return false;
1014     }
1015     }
1016    
1017     /**
1018     * Retourne le champ restriction de l'événement passé en paramètre.
1019     *
1020     * @param integer $evenement id de l'événement sur lequel récupérer la restriction
1021     *
1022     * @return string contenu du champ restriction
1023     */
1024     function get_restriction($evenement) {
1025     if(empty($evenement) || !is_numeric($evenement)) {
1026     return "";
1027     }
1028     //Récupère la restriction
1029     $sql= "SELECT
1030     restriction
1031     FROM
1032     ".DB_PREFIXE."evenement
1033     WHERE
1034     evenement =".$evenement;
1035    
1036     $restriction = $this->db->getOne($sql);
1037     $this->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
1038     if (database::isError($restriction)) {
1039     die($restriction->getMessage());
1040     }
1041     return $restriction;
1042     }
1043    
1044     /**
1045 vpihour 2792 * Récupère la valeur du champ dans la restriction
1046     * @param string $restrictionValue Nom du champ
1047     * @return mixed Valeur du champ
1048     */
1049     function getRestrictionValue($restrictionValue){
1050    
1051     // Initialisation de la valeur de retour
1052     $return = false;
1053    
1054     // Récupére les valeurs du dossier
1055     $value_dossier = $this->get_dossier_actual();
1056    
1057     //
1058     if (is_numeric($restrictionValue)) {
1059     $return = $restrictionValue;
1060     }elseif (isset($value_dossier[$restrictionValue])) {
1061     $return = $value_dossier[$restrictionValue];
1062     }elseif (isset($this->valF[$restrictionValue])) {
1063     $return = $this->valF[$restrictionValue];
1064     }
1065    
1066     // Retourne la valeur du champ
1067     return $return;
1068     }
1069    
1070     /**
1071 softime 2787 * Calcul des règle d'action.
1072     * @param string $rule Règle d'action
1073     * @param string $rule_name Nom de la règle
1074     * @param string $type Type de la règle
1075     *
1076     * @return mixed Résultat de la règle
1077 softime 2373 */
1078 softime 2787 function regle($rule, $rule_name, $type = null) {
1079 softime 2305
1080 softime 2787 // Supprime tous les espaces de la chaîne de caractère
1081     $rule = str_replace(' ', '', $rule);
1082     // Coupe la chaîne au niveau de l'opérateur
1083     $operands = explode ("+", $rule);
1084     // Nombre d'opérande
1085     $nb_operands = count($operands);
1086 softime 2305
1087 softime 2787 // Règle à null
1088     if ($rule == "null") {
1089     return null;
1090     }
1091 softime 2373
1092 softime 2787 // Si c'est une règle spécifique
1093     if ($rule_name == "regle_autorite_competente"
1094     || $rule_name == "regle_etat"
1095     || $rule_name == "regle_accord_tacite"
1096     || $rule_name == "regle_avis") {
1097     //
1098     return $this->valF[$rule];
1099 softime 2305 }
1100    
1101 softime 2787 // Tableau des champs de type date
1102     $rule_type_date = array(
1103     "regle_date_limite",
1104     "regle_date_notification_delai",
1105     "regle_date_complet",
1106     "regle_date_validite",
1107     "regle_date_decision",
1108     "regle_date_chantier",
1109     "regle_date_achevement",
1110     "regle_date_conformite",
1111     "regle_date_rejet",
1112     "regle_date_dernier_depot",
1113     "regle_date_limite_incompletude",
1114     );
1115     // Tableau des champs de type numérique
1116     $rule_type_numeric = array(
1117     "regle_delai",
1118     "regle_delai_incompletude",
1119     );
1120    
1121     // Définit le type du champ
1122     if (in_array($rule_name, $rule_type_date) == true) {
1123     $type = "date";
1124 fraynaud 123 }
1125 softime 2787 if (in_array($rule_name, $rule_type_numeric) == true) {
1126     $type = "numeric";
1127 fraynaud 124 }
1128 softime 2787
1129     // Initialisation des variables
1130     $key_date = 0;
1131     $total_numeric = 0;
1132    
1133     // Pour chaque opérande
1134     foreach ($operands as $key => $operand) {
1135    
1136     // Si c'est une règle de type date
1137     if ($type == 'date') {
1138     // Vérifie si au moins une des opérandes est une date
1139     if (!is_numeric($operand)
1140     && isset($this->valF[$operand])
1141     && $this->f->check_date($this->valF[$operand]) == true) {
1142     // Récupère la position de la date
1143     $key_date = $key;
1144     }
1145     // Les autres opérandes doivent être que des numériques
1146     if (is_numeric($operand) == true) {
1147     // Ajoute l'opérande au total
1148     $total_numeric += $operand;
1149     }
1150     if (!is_numeric($operand)
1151     && isset($this->valF[$operand])
1152     && is_numeric($this->valF[$operand]) == true) {
1153     // Ajoute l'opérande au total
1154     $total_numeric += $this->valF[$operand];
1155     }
1156     }
1157    
1158     // Si c'est une règle de type numérique
1159     if ($type == 'numeric') {
1160     // Les opérandes doivent être que des numériques
1161     if (is_numeric($operand) == true) {
1162     // Ajoute l'opérande au total
1163     $total_numeric += $operand;
1164     }
1165     if (!is_numeric($operand)
1166     && isset($this->valF[$operand])
1167     && is_numeric($this->valF[$operand]) == true) {
1168     // Ajoute l'opérande au total
1169     $total_numeric += $this->valF[$operand];
1170     }
1171     }
1172     }
1173    
1174     // Résultat pour une règle de type date
1175     if ($type == 'date') {
1176     // Retourne le calcul de la date
1177     return $this->f->mois_date($this->valF[$operands[$key_date]],
1178     $total_numeric, "+");
1179     }
1180    
1181     // Résultat pour une règle de type numérique
1182     if ($type == 'numeric') {
1183     // Retourne le calcul
1184     return $total_numeric;
1185     }
1186    
1187 fraynaud 123 }
1188 fmichon 1540
1189 fraynaud 20 function triggerajouterapres($id,&$db,$val,$DEBUG) {
1190 fmichon 1540 /**
1191     * Mise à jour des valeurs du dossier en fonction des valeurs calculées
1192     * par l'action
1193     */
1194 nhaye 1724 $this->getValEvenement();
1195 fmichon 1540 // Initialisation
1196     $valF = "";
1197 nhaye 1741 // état de complétude actuel du dossier
1198     $incompletude = $this->dossierIncomplet();
1199    
1200     if($incompletude === FALSE) {
1201     // Si l'événement d'instruction est de type incompletude
1202     if($this->valEvenement['type'] == "incompletude") {
1203     // On marque le dossier en incomplétude pour application des actions
1204     $incompletude = TRUE;
1205     // Set du flag incomplétude de la table dossier
1206     $valF['incompletude'] = TRUE;
1207     // Enregistrement de l'état dans la variable provisoire
1208     $valF['etat_pendant_incompletude'] = $this->valF['archive_etat'];
1209     }
1210     } else {
1211     // Si l'evenement d'instruction est de type retour ou contient une
1212     // decision, on sort d'incomplétude
1213     if($this->valEvenement['type'] == "retour" OR
1214     $this->valEvenement['avis_decision'] != NULL) {
1215     // On enlève la marque d'incomplétude pour application des actions
1216     $incompletude = FALSE;
1217     // On enlève le flag d'incomplétude sur l'enregistrement de la table dossier
1218     $valF['incompletude'] = FALSE;
1219 nhaye 3059 $valF['incomplet_notifie'] = FALSE;
1220 nhaye 1741 // Restauration de l'état depuis l'état provisoire
1221     $valF['etat'] = $this->valF['archive_etat_pendant_incompletude'];
1222     // On vide la variable provisoire ainsi que le délai de complétude
1223     // et la date limite de complétude
1224     $valF['etat_pendant_incompletude'] = NULL;
1225     $valF['delai_incompletude'] = NULL;
1226     $valF['date_limite_incompletude'] = NULL;
1227 nhaye 3045 $valF['evenement_suivant_tacite_incompletude'] = NULL;
1228 nhaye 1741 }
1229     }
1230 fmichon 1540 // Récupération des paramètres de l'action
1231     $sql = "SELECT * FROM ".DB_PREFIXE."action
1232     WHERE action='".$this->valF['action']."'";
1233     $res = $db->query($sql);
1234     $this->addToLog("triggerajouterapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1235     if (database::isError($res)) {
1236     die($res->getMessage());
1237     }
1238     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1239 nhaye 1724
1240 fmichon 1540 // pour chacune des regles, on applique la regle
1241     if($row['regle_delai']!=''){
1242 softime 2787 $valF['delai'] = $this->regle($row['regle_delai'], 'regle_delai');
1243 fmichon 1540 }
1244     if($row['regle_accord_tacite']!=''){
1245 softime 2787 $valF['accord_tacite'] = $this->regle($row['regle_accord_tacite'], 'regle_accord_tacite');
1246 fmichon 1540 }
1247     if($row['regle_avis']!=''){
1248 softime 2787 $valF['avis_decision'] = $this->regle($row['regle_avis'], 'regle_avis');
1249 fmichon 1540 }
1250     if($row['regle_date_limite']!=''){
1251 softime 2787 $valF['date_limite']= $this->regle($row['regle_date_limite'], 'regle_date_limite');
1252 fmichon 1540 }
1253     if($row['regle_date_complet']!=''){
1254 softime 2787 $valF['date_complet']= $this->regle($row['regle_date_complet'], 'regle_date_complet');
1255 fmichon 1540 }
1256 nhaye 1571 if($row['regle_date_dernier_depot']!=''){
1257 softime 2787 $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot'], 'regle_date_dernier_depot');
1258 nhaye 1571 }
1259 fmichon 1540 if($row['regle_date_notification_delai']!=''){
1260 softime 2787 $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai'], 'regle_date_notification_delai');
1261 fmichon 1540 }
1262     if($row['regle_date_decision']!=''){
1263 softime 2787 $valF['date_decision']= $this->regle($row['regle_date_decision'], 'regle_date_decision');
1264 fmichon 1540 }
1265     if($row['regle_date_rejet']!=''){
1266 softime 2787 $valF['date_rejet']= $this->regle($row['regle_date_rejet'], 'regle_date_rejet');
1267 fmichon 1540 }
1268     if($row['regle_date_validite']!=''){
1269 softime 2787 $valF['date_validite']= $this->regle($row['regle_date_validite'], 'regle_date_validite');
1270 fmichon 1540 }
1271     if($row['regle_date_chantier']!=''){
1272 softime 2787 $valF['date_chantier']= $this->regle($row['regle_date_chantier'], 'regle_date_chantier');
1273 fmichon 1540 }
1274     if($row['regle_date_achevement']!=''){
1275 softime 2787 $valF['date_achevement']= $this->regle($row['regle_date_achevement'], 'regle_date_achevement');
1276 fmichon 1540 }
1277     if($row['regle_date_conformite']!=''){
1278 softime 2787 $valF['date_conformite']= $this->regle($row['regle_date_conformite'], 'regle_date_conformite');
1279 fmichon 1540 }
1280 nhaye 1731 if($row['regle_date_limite_incompletude']!=''){
1281 softime 2787 $valF['date_limite_incompletude']= $this->regle($row['regle_date_limite_incompletude'], 'regle_date_limite_incompletude');
1282 nhaye 1731 }
1283     if($row['regle_delai_incompletude']!=''){
1284 softime 2787 $valF['delai_incompletude']= $this->regle($row['regle_delai_incompletude'], 'regle_delai_incompletude');
1285 nhaye 1731 }
1286 nhaye 2099 if($row['regle_autorite_competente']!=''){
1287 softime 2787 $valF['autorite_competente']= $this->regle($row['regle_autorite_competente'], 'regle_autorite_competente');
1288 nhaye 2099 }
1289 nhaye 1741 if($row['regle_etat']!=''){
1290     // Si on est dans le cas général ou qu'on est en incomplétude et
1291     // qu'on a un événement de type incomplétude alors : on stocke
1292     // l'état dans la variable courante
1293     if ($incompletude == FALSE OR $this->valEvenement['type'] == "incompletude") {
1294 softime 2787 $valF['etat'] = $this->regle($row['regle_etat'], 'regle_etat');
1295 nhaye 1741 } else {
1296 softime 2787 $valF['etat_pendant_incompletude'] = $this->regle($row['regle_etat'], 'regle_etat');
1297 nhaye 1741 }
1298     }
1299 fmichon 1540 }
1300 nhaye 3045 if($this->valEvenement['evenement_suivant_tacite'] != '') {
1301 softime 3411 // Si on est pas en incomplétude on stocke l'événement tacite
1302     //de l'événement dans la variable courante
1303    
1304     if ($incompletude == FALSE OR $this->valEvenement['type'] != "incompletude") {
1305     $valF['evenement_suivant_tacite'] = $this->valEvenement['evenement_suivant_tacite'];
1306     } else {
1307     $valF['evenement_suivant_tacite_incompletude'] = $this->valEvenement['evenement_suivant_tacite'];
1308     }
1309 nhaye 3045 }
1310 fmichon 1540 // Si des valeurs ont été calculées alors on met à jour l'enregistrement
1311     if ($valF != "") {
1312     // On met à jour le dossier
1313     $cle = " dossier='".$this->valF['dossier']."'";
1314     $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1315     $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1316     if (database::isError($res1)) {
1317 fraynaud 20 die($res->getMessage());
1318 fmichon 1540 }
1319     // Affichage d'informations à l'utilisateur
1320     $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1321 fraynaud 20 }
1322 fmichon 1540
1323     /**
1324     * REFERENTIEL ERP
1325     */
1326 fmichon 1005 // verification si envoi vers ERP est active
1327 vpihour 3126 if ($this->f->getParameter('option_erp') === 'true') {
1328 fmichon 1005 // la nature du dossier
1329     $nature_dossier = substr($this->idxformulaire,0,2);
1330 fmichon 1540 //
1331     $sql = "SELECT erp
1332     FROM ".DB_PREFIXE."dossier
1333     WHERE dossier='".$this->valF['dossier']."'";
1334     $dossier_erp = $this->db->getone($sql);
1335     $this->addToLog("triggerajouterapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1336     if (database::isError($res)) {
1337     die($res->getMessage());
1338     }
1339     //
1340     $sql = "SELECT libelle
1341     FROM ".DB_PREFIXE."evenement
1342     WHERE evenement='".$this->valF['evenement']."'";
1343     $evenement_libelle = $this->db->getone($sql);
1344     $this->addToLog("triggerajouterapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1345     if (database::isError($res)) {
1346     die($res->getMessage());
1347     }
1348     //
1349 fmichon 1005 if ($dossier_erp == 't') {
1350     // envoi du message en cas d'un PC qui est ERP et sur lequel un evenement
1351     // d'acceptation etait fait
1352     if ($nature_dossier ==
1353     $this->f->getParameter('erp_evenement_accepter_dossier_PC')
1354     && $this->valF['evenement'] ==
1355     $this->f->getParameter('erp_evenement_accepter_sans_reserve')) {
1356     $msgenque = new MessageEnqueuer();
1357     $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
1358     $msgenque->setDecision($evenement_libelle);
1359 vpihour 2842 $return = $msgenque->enqueueMessage($msgenque::$ERP_ARRETE_PC_EFFECTUE);
1360     //Si une erreur s'est produite on arrête le traitement et on
1361     //retourne une erreur
1362     if ($return !== 0){
1363    
1364     $this->addToMessage(_("Une erreur s'est produite lors de ".
1365     "l'envoi du message au referentiel ERP. Merci de ".
1366     "contacter votre administrateur"));
1367     //On ne valide pas le formulaire
1368 vpihour 2877 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1369     $this->correct = false;
1370     return false;
1371 vpihour 2842 }
1372     else {
1373     $this->addToMessage(_("Le message a ete transmis au ".
1374     "referentiel ERP."));
1375     }
1376 fmichon 1005 }
1377     if ($this->valF['evenement'] ==
1378     $this->f->getParameter('erp_evenement_refuser_dossier')) {
1379     $msgenque = new MessageEnqueuer();
1380     $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
1381 vpihour 2842 $return = $msgenque->enqueueMessage($msgenque::$ERP_DECISION_CONFORMITE_EFFECTUE);
1382     //Si une erreur s'est produite on arrête le traitement et on
1383     //retourne une erreur
1384     if ($return !== 0){
1385    
1386     $this->addToMessage(_("Une erreur s'est produite lors de ".
1387     "l'envoi du message au referentiel ERP. Merci de ".
1388     "contacter votre administrateur"));
1389     //On ne valide pas le formulaire
1390 vpihour 2877 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1391     $this->correct = false;
1392     return false;
1393 vpihour 2842 }
1394     else {
1395     $this->addToMessage(_("Le message a ete transmis au ".
1396     "referentiel ERP."));
1397     }
1398 fmichon 1005 }
1399 mlimic 936 }
1400 vpihour 3126 } // fin de if ($this->f->getParameter('option_erp') === 'true')
1401 nhaye 1643
1402     // Mise à jour des données du dossier d'autorisation
1403     require_once "../obj/dossier_autorisation.class.php";
1404 softime 2025 $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($this->valF['dossier']), $this->db, DEBUG);
1405 nhaye 2806 if($da->majDossierAutorisation() === false) {
1406 nhaye 2824 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
1407 nhaye 2806 $this->correct = false;
1408     return false;
1409     }
1410 fmichon 1540 }
1411 softime 2030
1412 fraynaud 129 function triggermodifierapres($id,&$db,$val,$DEBUG) {
1413 fmichon 1540 /**
1414     * L'objectif ici est d'effectuer les recalculs de date dans le dossier
1415     * si la date de l'evenement est modifiee
1416     */
1417     // Initialisation
1418     $valF = "";
1419 nhaye 2561 // Initialisation du type d'événement
1420     $type_evmt = "";
1421 fmichon 1540 // Récupération de l'action correspondante à l'événement
1422     $sql = "SELECT action
1423     FROM ".DB_PREFIXE."evenement
1424     WHERE evenement=".$this->valF['evenement'];
1425 fraynaud 129 $action = $db->getOne($sql);
1426 fmichon 1540 $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1427     if (database::isError($action)) {
1428     die($action->getMessage());
1429     }
1430 nhaye 1564
1431 fmichon 1540 // Récupération des paramètres de l'action
1432     $sql = "SELECT * FROM ".DB_PREFIXE."action
1433     WHERE action='".$action."'";
1434 fraynaud 129 $res = $db->query($sql);
1435 fmichon 1540 $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1436     if (database::isError($res)) {
1437     die($res->getMessage());
1438     }
1439 fraynaud 129 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
1440     // application des regles sur le courrier + delai
1441 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_limite'])){
1442 softime 2787 $valF['date_limite']= $this->regle($row['regle_date_limite'], 'regle_date_limite');
1443 fraynaud 129 }
1444 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_complet'])){
1445 softime 2787 $valF['date_complet']= $this->regle($row['regle_date_complet'], 'regle_date_complet');
1446 fraynaud 129 }
1447 nhaye 1571 if(preg_match("/date_evenement/",$row['regle_date_dernier_depot'])){
1448 softime 2787 $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot'], 'regle_date_dernier_depot');
1449 nhaye 1571 }
1450 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_notification_delai'])){
1451 softime 2787 $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai'], 'regle_date_notification_delai');
1452 fraynaud 129 }
1453 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_decision'])){
1454 softime 2787 $valF['date_decision']= $this->regle($row['regle_date_decision'], 'regle_date_decision');
1455 fraynaud 129 }
1456 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_rejet'])){
1457 softime 2787 $valF['date_rejet']= $this->regle($row['regle_date_rejet'], 'regle_date_rejet');
1458 fraynaud 129 }
1459 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_validite'])){
1460 softime 2787 $valF['date_validite']= $this->regle($row['regle_date_validite'], 'regle_date_validite');
1461 fraynaud 129 }
1462 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_chantier'])){
1463 softime 2787 $valF['date_chantier']= $this->regle($row['regle_date_chantier'], 'regle_date_chantier');
1464 fraynaud 129 }
1465 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_achevement'])){
1466 softime 2787 $valF['date_achevement']= $this->regle($row['regle_date_achevement'], 'regle_date_achevement');
1467 fraynaud 129 }
1468 vpihour 1127 if(preg_match("/date_evenement/",$row['regle_date_conformite'])){
1469 softime 2787 $valF['date_conformite']= $this->regle($row['regle_date_conformite'], 'regle_date_conformite');
1470 fraynaud 129 }
1471 fmichon 1540 }
1472     // Si des valeurs ont été calculées alors on met à jour l'enregistrement
1473     if ($valF != "") {
1474     // On met à jour le dossier
1475     $cle = " dossier='".$this->valF['dossier']."'";
1476     $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1477 softime 2562 $this->addToLog("triggermodifierapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1478 fmichon 1540 if (database::isError($res1)) {
1479 fraynaud 129 die($res->getMessage());
1480 fmichon 1540 }
1481     // Affichage d'informations à l'utilisateur
1482     $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1483 fraynaud 129 }
1484 nhaye 1299
1485 nhaye 2905 $restriction = $this->get_restriction($val['evenement']);
1486 vpihour 2920 $this->restriction_valid = $this->restrictionIsValid($restriction);
1487 nhaye 2905
1488 vpihour 2920 if($restriction == "" || $this->restriction_valid ){
1489 nhaye 2905 // Récupération de tous les paramètres de l'événement sélectionné
1490     $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1491     WHERE evenement=".$this->valF['evenement'];
1492     $res = $db->query($sql);
1493     $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1494     if (database::isError($res)) {
1495     die($res->getMessage());
1496 softime 2562 }
1497 nhaye 2905 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1498     // Si la date de retour signature est éditée on vérifie si il existe un événement automatique
1499     if ($this->getVal('date_retour_signature') == "" AND
1500     $this->valF['date_retour_signature'] != "" AND
1501     $row['evenement_retour_signature'] != "") {
1502     $new_instruction = new instruction("]", $db, $DEBUG);
1503     // Création d'un tableau avec la liste des champs de l'instruction
1504     foreach($new_instruction->champs as $champ) {
1505     $valNewInstr[$champ] = "";
1506     }
1507     // Définition des valeurs de la nouvelle instruction
1508     $valNewInstr["evenement"] = $row['evenement_retour_signature'];
1509     $valNewInstr["destinataire"] = $this->valF['destinataire'];
1510     $valNewInstr["dossier"] = $this->valF['dossier'];
1511     $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_signature']);
1512     $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
1513     $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
1514     $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
1515     $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
1516     $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
1517     $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
1518     $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1519    
1520 vpihour 2920 //Si une erreur s'est produite et qu'il s'agit d'un problème
1521     //de restriction
1522     if ($retour == false && !$new_instruction->restriction_valid){
1523     $this->msg .= $new_instruction->msg;
1524     $this->addToLog("triggermodifierapres() : evenement retour ".
1525     "instruction ".$this->valF[$this->clePrimaire]." : ".
1526     $new_instruction->msg);
1527     }
1528     //Si une erreur s'est produite après le test de la restriction
1529     elseif ($retour == false && $new_instruction->restriction_valid){
1530 nhaye 2905 $this->correct = false ;
1531     $this->msg .= $new_instruction->msg;
1532     return false;
1533     }
1534 softime 2562 }
1535 nhaye 2905 // Si la date de retour AR est éditée on vérifie si il existe un événement automatique
1536     if ($this->getVal('date_retour_rar') == "" AND
1537 nhaye 3061 $this->valF['date_retour_rar'] != "") {
1538    
1539     if($row['evenement_retour_ar'] != "") {
1540     $new_instruction = new instruction("]", $db, $DEBUG);
1541     // Création d'un tableau avec la liste des champs de l'instruction
1542     foreach($new_instruction->champs as $champ) {
1543     $valNewInstr[$champ] = "";
1544     }
1545     // Définition des valeurs de la nouvelle instruction
1546     $valNewInstr["evenement"] = $row['evenement_retour_ar'];
1547     $valNewInstr["destinataire"] = $this->valF['destinataire'];
1548     $valNewInstr["dossier"] = $this->valF['dossier'];
1549     $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_rar']);
1550     $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
1551     $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
1552     $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
1553     $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
1554     $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
1555     $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
1556     $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1557    
1558 softime 3411 //Si une erreur s'est produite et qu'il s'agit d'un problème
1559 nhaye 3061 //de restriction
1560     if ($retour == false && !$new_instruction->restriction_valid){
1561     $this->msg .= $new_instruction->msg;
1562     $this->addToLog("triggermodifierapres() : evenement retour ".
1563     "instruction ".$this->valF[$this->clePrimaire]." : ".
1564     $new_instruction->msg);
1565     }
1566     //Si une erreur s'est produite après le test de la restriction
1567     elseif ($retour == false && $new_instruction->restriction_valid){
1568     $this->correct = false ;
1569     $this->msg .= $new_instruction->msg;
1570     return false;
1571     }
1572 nhaye 2905 }
1573 vpihour 3113 // Mise à jour du flag incomplet_notifie dans dossier si la
1574     // date limite d'instruction n'est pas dépassée
1575     if($row['type']=='incompletude' &&
1576 vpihour 3140 ($this->valF['archive_date_notification_delai'] >= $this->valF['date_retour_rar'] ||
1577     $this->valF['archive_date_notification_delai'] == "")) {
1578 nhaye 3059 $valFIncomp['incomplet_notifie'] = true;
1579     $cle = " dossier='".$val['dossier']."'";
1580 nhaye 3061 $resIncomp = $db->autoExecute(
1581 nhaye 3059 DB_PREFIXE.'dossier',
1582 nhaye 3061 $valFIncomp,
1583 nhaye 3059 DB_AUTOQUERY_UPDATE,
1584     $cle
1585     );
1586     $this->addToLog(
1587     "triggersupprimer(): db->autoexecute(\"".
1588 nhaye 3061 DB_PREFIXE."dossier\", ".print_r($valFIncomp, true).
1589 nhaye 3059 ", DB_AUTOQUERY_UPDATE, \"".$cle."\");",
1590     VERBOSE_MODE
1591     );
1592 nhaye 3061 if (database::isError($resIncomp)) {
1593     die($resIncomp->getMessage());
1594 nhaye 3059 }
1595     }
1596 vpihour 2829 }
1597 softime 2562 }
1598     }
1599    
1600 vpihour 2877 //Récupération du type de l'événement
1601     $sql = "SELECT type
1602     FROM ".DB_PREFIXE."evenement
1603     WHERE evenement=".$this->valF['evenement'];
1604     $type_evmt = $db->getOne($sql);
1605     $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1606     if (database::isError($type_evmt)) {
1607     die($type_evmt->getMessage());
1608     }
1609    
1610 fmichon 1540 /**
1611     * REFERENTIEL ARRETE
1612     */
1613 nhaye 2561 // Si l'option référentiel arrêté est activé et l'événement est de type
1614     // arrêté
1615 vpihour 2877
1616 vpihour 3126 if ($this->f->getParameter('option_referentiel_arrete') === 'true' AND
1617 nhaye 2561 $type_evmt == "arrete") {
1618 fmichon 1540 if ($this->valF['date_retour_signature'] != $this->getVal('date_retour_signature')) {
1619     $msgenque = new MessageEnqueuer();
1620     $sqlArrete = "SELECT instruction.signataire_arrete as \"ws_DA_In_Signataire\",
1621     signataire_arrete.nom as \"ws_DA_In_Sign_Nom\",
1622     signataire_arrete.prenom as \"ws_DA_In_Sign_Prenom\",
1623     signataire_arrete.qualite as \"ws_DA_In_Sign_Qualite\",
1624     instruction.date_evenement as \"ws_DA_In_Dte_Redac\",
1625     '' as \"ws_DA_In_lieu_Redac\",
1626     instruction.dossier as \"ws_DA_In_N_Doss_DAS\",
1627     '' as \"ws_DA_In_Sigle\",
1628     instruction.etat as \"ws_DA_In_Decision\",
1629     dossier.date_depot as \"ws_DA_In_Dte_Depot_Dem\",
1630 nhaye 2561 dossier.terrain_adresse_voie_numero as \"ws_DA_In_N_Voie\",
1631 fmichon 1540 '' as \"ws_DA_In_Type_Voie\",
1632 softime 2061 dossier.terrain_adresse_voie as \"ws_DA_In_Adresse1\",
1633 fmichon 1540 dossier.terrain_adresse_lieu_dit as \"ws_DA_In_Adresse2\",
1634     dossier.terrain_adresse_code_postal as \"ws_DA_In_CP\",
1635     dossier.terrain_adresse_localite as \"ws_DA_In_Ville\",
1636     dossier.terrain_references_cadastrales as \"ws_DA_In_Nb_Parcelle\",
1637     '' as \"ws_DA_In_Detail_Parcelle\",
1638     CONCAT(donnees_techniques.am_projet_desc,' ',donnees_techniques.co_projet_desc) as \"ws_DA_In_Nature_Trvx\",
1639     '' as \"ws_DA_In_Destination_Trvx\",
1640     dossier_autorisation_type_detaille.code as \"ws_DA_In_Type_Dos_Autoris\",
1641     COALESCE(particulier_nom,personne_morale_raison_sociale) as \"ws_DA_In_Nom_Petition\",
1642     COALESCE(particulier_prenom, personne_morale_denomination) as \"ws_DA_In_Prenom_Petition\",
1643     '' as \"ws_DA_In_Piece_GED\",
1644     instruction.date_retour_signature as \"ws_DA_In_Dte_Signature\"
1645     FROM ".DB_PREFIXE."instruction
1646     LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
1647     instruction.signataire_arrete = signataire_arrete.signataire_arrete
1648     LEFT JOIN ".DB_PREFIXE."dossier ON
1649     instruction.dossier = dossier.dossier
1650     LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur ON
1651     lien_dossier_demandeur.dossier = dossier.dossier
1652     LEFT JOIN ".DB_PREFIXE."demandeur ON
1653     lien_dossier_demandeur.demandeur = demandeur.demandeur
1654     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type ON
1655     dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1656     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille ON
1657     dossier_instruction_type.dossier_autorisation_type_detaille =
1658     dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1659     LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
1660     donnees_techniques.dossier_instruction = dossier.dossier
1661     WHERE instruction.instruction = ".$this->valF['instruction'];
1662     $resArrete = $this->db->query($sqlArrete);
1663 softime 2562 $this->f->addToLog("triggermodifierapres(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
1664 vpihour 1777 if ( database::isError($resArrete)){
1665     die();
1666     }
1667 fmichon 1540
1668     $rowArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
1669     $msgenque->setArreteInfo($rowArrete);
1670 vpihour 2842 $return = $msgenque->enqueueMessage($msgenque::$ARRETE_ENVOI);
1671     //Si une erreur s'est produite on arrête le traitement et on
1672     //retourne une erreur
1673     if ($return !== 0){
1674    
1675 vpihour 2877 //On supprime les messages précédents
1676     $this->msg = '';
1677 vpihour 2842 $this->addToMessage(_("Une erreur s'est produite lors de ".
1678     "l'envoi du message au referentiel arrêté. Merci de ".
1679 vpihour 2877 "contacter votre administrateur."));
1680 vpihour 2842 //On ne valide pas le formulaire
1681 vpihour 2877 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1682     $this->correct = false;
1683     return false;
1684 vpihour 2842 }
1685     else {
1686     $this->addToMessage(_("Le message a ete transmis au ".
1687     "referentiel arrêté."));
1688     }
1689 fmichon 1540 }
1690 nhaye 1299 }
1691 nhaye 1643
1692     // Mise à jour des données du dossier d'autorisation
1693     require_once "../obj/dossier_autorisation.class.php";
1694 softime 2025 $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($this->valF['dossier']), $this->db, DEBUG);
1695 nhaye 2806 if($da->majDossierAutorisation() === false) {
1696 nhaye 2824 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
1697 nhaye 2806 $this->correct = false;
1698     return false;
1699     }
1700 fraynaud 129 }
1701    
1702 fraynaud 20 function triggersupprimer($id,&$db,$val,$DEBUG) {
1703 fmichon 1540 /**
1704     * L'objectif ici est de repositionner les valeurs récupérées en
1705     * archive dans le dossier d'instruction avant de supprimer l'événement
1706     * d'instruction
1707     */
1708 vpihour 2603
1709     // Mise à jour des 4 valeurs modifiées par l'action
1710     $valF['delai'] = $val['archive_delai'];
1711     $valF['accord_tacite'] = $val['archive_accord_tacite'];
1712     $valF['etat'] = $val['archive_etat'];
1713     if ($val['archive_avis'] != '') {
1714     $valF['avis_decision'] = $val['archive_avis'];
1715     } else {
1716     $valF['avis_decision'] = NULL;
1717     }
1718     // Mise à jour des 10 dates avec la valeur présente dans le formulaire
1719     // de suppression. Si la valeur de la date est vide alors on fixe
1720     // à la valeur NULL
1721     //
1722     if ($val['archive_date_complet'] != '') {
1723     $valF['date_complet'] = $val['archive_date_complet'];
1724     } else {
1725     $valF['date_complet'] = NULL;
1726     }
1727     if ($val['archive_date_dernier_depot'] != '') {
1728     $valF['date_dernier_depot'] = $val['archive_date_dernier_depot'];
1729     } else {
1730     $valF['date_dernier_depot'] = NULL;
1731     }
1732     if ($val['archive_date_rejet'] != '') {
1733     $valF['date_rejet'] = $val['archive_date_rejet'];
1734     } else {
1735     $valF['date_rejet'] = NULL;
1736     }
1737     if ($val['archive_date_limite'] != '') {
1738     $valF['date_limite'] = $val['archive_date_limite'];
1739     } else {
1740     $valF['date_limite'] = NULL;
1741     }
1742     if ($val['archive_date_notification_delai'] != '') {
1743     $valF['date_notification_delai'] = $val['archive_date_notification_delai'];
1744     } else {
1745     $valF['date_notification_delai'] = NULL;
1746     }
1747     if ($val['archive_date_decision'] != '') {
1748     $valF['date_decision'] = $val['archive_date_decision'];
1749     } else {
1750     $valF['date_decision'] = NULL;
1751     }
1752     if ($val['archive_date_validite'] != '') {
1753     $valF['date_validite'] = $val['archive_date_validite'];
1754     } else {
1755     $valF['date_validite'] = NULL;
1756     }
1757     if ($val['archive_date_achevement'] != '') {
1758     $valF['date_achevement'] = $val['archive_date_achevement'];
1759     } else {
1760     $valF['date_achevement'] = NULL;
1761     }
1762     if ($val['archive_date_chantier'] != '') {
1763     $valF['date_chantier'] = $val['archive_date_chantier'];
1764     } else {
1765     $valF['date_chantier'] = NULL;
1766     }
1767     if ($val['archive_date_conformite'] != '') {
1768     $valF['date_conformite'] = $val['archive_date_conformite'];
1769     } else {
1770     $valF['date_conformite'] = NULL;
1771     }
1772     if ($val['archive_incompletude'] != '') {
1773     $valF['incompletude'] = $val['archive_incompletude'];
1774     } else {
1775     $valF['incompletude'] = NULL;
1776     }
1777 nhaye 3059 if ($val['archive_incomplet_notifie'] != '') {
1778     $valF['incomplet_notifie'] = $val['archive_incomplet_notifie'];
1779     } else {
1780     $valF['incomplet_notifie'] = NULL;
1781     }
1782 vpihour 2603 if ($val['archive_evenement_suivant_tacite'] != '') {
1783     $valF['evenement_suivant_tacite'] = $val['archive_evenement_suivant_tacite'];
1784     } else {
1785     $valF['evenement_suivant_tacite'] = NULL;
1786     }
1787     if ($val['archive_evenement_suivant_tacite_incompletude'] != '') {
1788     $valF['evenement_suivant_tacite_incompletude'] = $val['archive_evenement_suivant_tacite_incompletude'];
1789     } else {
1790     $valF['evenement_suivant_tacite_incompletude'] = NULL;
1791     }
1792     if ($val['archive_etat_pendant_incompletude'] != '') {
1793     $valF['etat_pendant_incompletude'] = $val['archive_etat_pendant_incompletude'];
1794     } else {
1795     $valF['etat_pendant_incompletude'] = NULL;
1796     }
1797     if ($val['archive_date_limite_incompletude'] != '') {
1798     $valF['date_limite_incompletude'] = $val['archive_date_limite_incompletude'];
1799     } else {
1800     $valF['date_limite_incompletude'] = NULL;
1801     }
1802     if ($val['archive_delai_incompletude'] != '') {
1803     $valF['delai_incompletude'] = $val['archive_delai_incompletude'];
1804     } else {
1805     $valF['delai_incompletude'] = NULL;
1806     }
1807     if ($val['archive_autorite_competente'] != '') {
1808     $valF['autorite_competente'] = $val['archive_autorite_competente'];
1809     } else {
1810     $valF['autorite_competente'] = NULL;
1811     }
1812     // On met à jour le dossier
1813     $cle = " dossier='".$val['dossier']."'";
1814     $res = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1815     $this->addToLog("triggersupprimer(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1816     if (database::isError($res)) {
1817     die($res->getMessage());
1818     }
1819     // Affichage d'informations à l'utilisateur
1820     $this->addToMessage(_("Suppression de l'instruction")." [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1821    
1822     // Mise à jour de la demande si un récépissé d'instruction correspond à l'instruction à supprimer
1823 fraynaud 20 }
1824 fmichon 1540
1825 nhaye 1643 function triggersupprimerapres($id,&$db,$val,$DEBUG) {
1826    
1827     // Mise à jour des données du dossier d'autorisation
1828     require_once "../obj/dossier_autorisation.class.php";
1829 softime 2025 $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($val["dossier"]), $this->db, DEBUG);
1830 nhaye 2806 if($da->majDossierAutorisation() === false) {
1831 nhaye 2824 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
1832 nhaye 2806 $this->correct = false;
1833     return false;
1834     }
1835 nhaye 1643 }
1836    
1837 vpihour 1137 // Vérifie la restriction sur l'événement
1838     function verifier($val = array(), &$db, $DEBUG){
1839 nhaye 1186 parent::verifier($val, $db, $DEBUG);
1840 vpihour 1784
1841     if ( isset($val['evenement']) && is_numeric($val['evenement'])){
1842 nhaye 2905 $restriction = $this->get_restriction($val['evenement']);
1843 vpihour 1784
1844     //Test qu'une restriction est présente
1845 nhaye 2905 if ($restriction != "" ){
1846 vpihour 1137
1847 vpihour 1784 //Test si la restriction est valide
1848 vpihour 2920 $this->restriction_valid = $this->restrictionIsValid($restriction);
1849     if ( !$this->restriction_valid ){
1850 vpihour 1784
1851     $this->addToMessage(_("Restriction non valide"));
1852 vpihour 2920 $this->correct = false;
1853     return false;
1854 vpihour 1784 }
1855 softime 2305
1856     // Liste des opérateurs possible
1857     $operateurs = array(">=", "<=", "+", "-");
1858    
1859     // Supprime tous les espaces de la chaîne de caractère
1860     $restriction = str_replace(' ', '', $restriction);
1861    
1862     // Met des espace avant et après les opérateurs puis transforme la
1863     // chaine en un tableau
1864     $tabRestriction = str_replace($operateurs, " ", $restriction);
1865     // Tableau des champ
1866     $tabRestriction = explode(" ", $tabRestriction);
1867     // Supprime les numériques du tableau
1868     foreach ($tabRestriction as $key => $value) {
1869     if (is_numeric($value)) {
1870     unset($tabRestriction[$key]);
1871     }
1872     }
1873    
1874     // Vérifie les champs utilisés pour la restriction
1875     $check_field_exist = $this->f->check_field_exist($tabRestriction, 'instruction');
1876     if ($check_field_exist !== true) {
1877    
1878     // Liste des champs en erreur
1879     $string_error_fields = implode(", ", $check_field_exist);
1880    
1881     // Message d'erreur
1882     $error_message = _("Le champ %s n'est pas utilisable pour le champ %s");
1883     if (count($check_field_exist) > 1) {
1884     $error_message = _("Les champs %s ne sont pas utilisable pour le champ %s");
1885     }
1886    
1887     // Affiche l'erreur
1888     $this->correct=false;
1889     $this->addToMessage(sprintf($error_message, $string_error_fields, _("restriction")));
1890     $this->addToMessage(_("Veuillez contacter votre administrateur."));
1891     }
1892 vpihour 1137 }
1893 softime 2305
1894 vpihour 1137 }
1895 nhaye 2412 if(!$this->updateDate("date_envoi_signature")) {
1896     return false;
1897     }
1898     if(!$this->updateDate("date_retour_signature")) {
1899     return false;
1900     }
1901     if(!$this->updateDate("date_envoi_rar")) {
1902     return false;
1903     }
1904     if(!$this->updateDate("date_retour_rar")) {
1905     return false;
1906     }
1907     if(!$this->updateDate("date_envoi_controle_legalite")) {
1908     return false;
1909     }
1910     if(!$this->updateDate("date_retour_controle_legalite")) {
1911     return false;
1912     }
1913 vpihour 1921
1914 vpihour 1137 }
1915 vpihour 1284
1916 nhaye 1724 /**
1917     * Méthode permettant de récupérer toutes les valeurs de l'événement
1918     * sélectionné après validation du formulaire d'instruction
1919     *
1920     * @return array() veleurs de l'événement lié
1921     */
1922    
1923     private function getValEvenement() {
1924     if(!empty($this->valEvenement)) {
1925     return $this->valEvenement;
1926     } else {
1927     $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1928     WHERE evenement=".$this->valF['evenement'];
1929     $res = $this->db->query($sql);
1930     $this->addToLog("getValEvenement(): db->query(\"".$sql."\");", VERBOSE_MODE);
1931     if (database::isError($res)) {
1932     die($res->getMessage());
1933     }
1934     $this->valEvenement = $res->fetchRow(DB_FETCHMODE_ASSOC);
1935     return $this->valEvenement;
1936     }
1937     }
1938    
1939     /**
1940     * Méthode permettant de savoir si le dossier lié à l'instruction à le flag
1941     * incompletude à true après validation du formulaire d'instruction
1942     *
1943     * @return boolean
1944     */
1945     private function dossierIncomplet() {
1946     $sql = "SELECT incompletude FROM ".DB_PREFIXE."dossier
1947     WHERE dossier='".$this->valF['dossier']."'";
1948     $incompletude = $this->db->getOne($sql);
1949     $this->addToLog("dossierIncomplet(): db->query(\"".$sql."\");", VERBOSE_MODE);
1950     if (database::isError($incompletude)) {
1951     die($incompletude->getMessage());
1952     }
1953     if ($incompletude == 't') {
1954     return true;
1955     } else {
1956     return false;
1957     }
1958     }
1959 vpihour 1921
1960     /**
1961 nhaye 1949 * Finalisation des documents.
1962     * @param string $champ champ du fichier à finaliser
1963     * @param booleen $status permet de définir si on finalise ou définalise
1964     * @param string $sousform permet de savoir si se trouve dans un sousformulaire (passé au javascript)
1965 vpihour 1921 */
1966 softime 3411 function manage_finalizing($mode = null, $val = array()) {
1967    
1968     // Si le mode n'existe pas on retourne false
1969     if ($mode != "finalize" && $mode != "unfinalize") {
1970     return false;
1971     }
1972    
1973 vpihour 3027 // Recuperation de la valeur de la cle primaire de l'objet
1974 softime 3411 $id = $this->getVal($this->clePrimaire);
1975    
1976     // Si on finalise le document
1977     if ($mode == "finalize"){
1978    
1979     // Génération du PDF
1980     $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'));
1981     $pdf_output = $result['pdf_output'];
1982 vpihour 1921
1983     //Métadonnées du document
1984     $metadata = array(
1985 softime 3411 'filename' => 'instruction_'.$id.'.pdf',
1986 vpihour 1921 'mimetype' => 'application/pdf',
1987     'size' => strlen($pdf_output)
1988     );
1989    
1990 nhaye 1928 // Récupération des métadonnées calculées après validation
1991 nhaye 1938 $spe_metadata = $this->getMetadata("om_fichier_instruction");
1992 nhaye 1928
1993 vpihour 3025 //On vérifie si l'instruction à finaliser a un événement de type arrete
1994     $sql = "SELECT type
1995     FROM ".DB_PREFIXE."evenement
1996     WHERE evenement = ".$this->getVal("evenement");
1997     $typeEvenement = $this->db->getOne($sql);
1998 softime 3411 $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
1999     if (database::isError($typeEvenement, true)) {
2000 vpihour 3025 die();
2001     }
2002    
2003     //Initialisation de la variable
2004     $arrete_metadata = array();
2005     // Si l'événement est de type arrete, on ajoute les métadonnées spécifiques
2006     if ( $typeEvenement === 'arrete' ){
2007     $arrete_metadata = $this->getMetadata("arrete");
2008     }
2009    
2010     $metadata = array_merge($metadata, $spe_metadata, $arrete_metadata);
2011 softime 3411
2012     // Si le document a déjà été finalisé
2013     // met à jour le document mais pas son uid
2014     if ($this->getVal("om_fichier_instruction") != ''){
2015    
2016     // Met à jour le document
2017 vpihour 1927 $uid = $this->f->storage->update(
2018     $this->getVal("om_fichier_instruction"), $pdf_output, $metadata);
2019 vpihour 1921 }
2020 softime 3411 //Sinon, ajoute le document et récupère son uid
2021 vpihour 1921 else {
2022 softime 3411
2023 vpihour 1921 //Stockage du PDF
2024     $uid = $this->f->storage->create($pdf_output, $metadata);
2025     }
2026     }
2027 softime 3411
2028     // Si on finalise le document
2029     if ($mode == "unfinalize") {
2030    
2031     // Récupération de l'uid du document finalisé
2032 vpihour 1927 $uid = $this->getVal("om_fichier_instruction");
2033 vpihour 1921 }
2034    
2035 softime 3411 //
2036     if ($uid == '' || $uid == 'OP_FAILURE' ) {
2037     // Stop le traitement
2038     return false;
2039    
2040     // Message d'echec (saut d'une ligne supplementaire avant le
2041     // message pour qu'il soit mis en evidence)
2042     $this->addToLog(
2043     _("Finalisation non enregistree")." - ".
2044     _("id instruction")." = ".$id." - ".
2045     _("uid fichier")." = ".$uid
2046 vpihour 1921 );
2047 softime 3411 }
2048 vpihour 1921
2049 softime 3411 // Logger
2050     $this->addToLog(__METHOD__."() - begin", EXTRA_VERBOSE_MODE);
2051 vpihour 1921
2052 softime 3411 //
2053     foreach ($this->champs as $key => $champ) {
2054     //
2055     $val[$champ] = $this->val[$key];
2056     }
2057 vpihour 1921
2058 softime 3411 //
2059     $val['date_evenement']=$this->dateDBToForm($val['date_evenement']);
2060     $val['archive_date_complet']=$this->dateDBToForm($val['archive_date_complet']);
2061     $val['archive_date_rejet']=$this->dateDBToForm($val['archive_date_rejet']);
2062     $val['archive_date_limite']=$this->dateDBToForm($val['archive_date_limite']);
2063     $val['archive_date_notification_delai']=$this->dateDBToForm($val['archive_date_notification_delai']);
2064     $val['archive_date_decision']=$this->dateDBToForm($val['archive_date_decision']);
2065     $val['archive_date_validite']=$this->dateDBToForm($val['archive_date_validite']);
2066     $val['archive_date_achevement']=$this->dateDBToForm($val['archive_date_achevement']);
2067     $val['archive_date_chantier']=$this->dateDBToForm($val['archive_date_chantier']);
2068     $val['archive_date_conformite']=$this->dateDBToForm($val['archive_date_conformite']);
2069     $val['archive_date_dernier_depot']=$this->dateDBToForm($val['archive_date_dernier_depot']);
2070     $val['archive_date_limite_incompletude']=$this->dateDBToForm($val['archive_date_limite_incompletude']);
2071     $val['date_finalisation_courrier']=$this->dateDBToForm($val['date_finalisation_courrier']);
2072     $val['date_envoi_signature']=$this->dateDBToForm($val['date_envoi_signature']);
2073     $val['date_retour_signature']=$this->dateDBToForm($val['date_retour_signature']);
2074     $val['date_envoi_rar']=$this->dateDBToForm($val['date_envoi_rar']);
2075     $val['date_retour_rar']=$this->dateDBToForm($val['date_retour_rar']);
2076     $val['date_envoi_controle_legalite']=$this->dateDBToForm($val['date_envoi_controle_legalite']);
2077     $val['date_retour_controle_legalite']=$this->dateDBToForm($val['date_retour_controle_legalite']);
2078    
2079     $this->setvalF($val);
2080    
2081     // Verification de la validite des donnees
2082     $this->verifier($this->val, $this->db, DEBUG);
2083     // Verification du verrou
2084     $this->testverrou();
2085     // Si les verifications precedentes sont correctes, on procede a
2086     // la modification, sinon on ne fait rien et on retourne une erreur
2087     if ($this->correct) {
2088     // Execution du trigger 'before' specifique au MODE 'update'
2089     $this->triggermodifier($id, $this->db, $this->val, DEBUG);
2090    
2091     //
2092     $valF = array(
2093     "om_fichier_instruction" => $uid,
2094     "date_finalisation_courrier" => date('Y-m-d')
2095     );
2096     //
2097     if($mode=="finalize") {
2098     $valF["om_final_instruction"] = 't';
2099 vpihour 1921 } else {
2100 softime 3411 $valF["om_final_instruction"] = 'f';
2101 vpihour 1921 }
2102 softime 3411
2103     // Execution de la requête de modification des donnees de l'attribut
2104     // valF de l'objet dans l'attribut table de l'objet
2105     $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF,
2106     DB_AUTOQUERY_UPDATE, $this->getCle($id));
2107     $this->addToLog(__METHOD__."() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id)."\")", VERBOSE_MODE);
2108     // Si une erreur survient
2109     if (database::isError($res, true)) {
2110     // Appel de la methode de recuperation des erreurs
2111     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
2112     } else {
2113     // Log
2114     $this->addToLog(_("Requete executee"), VERBOSE_MODE);
2115     // Log
2116     $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
2117     $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
2118     $message .= "[&nbsp;".$this->db->affectedRows()."&nbsp;";
2119     $message .= _("enregistrement(s) mis a jour")."&nbsp;]";
2120     $this->addToLog($message, VERBOSE_MODE);
2121     // Mise en place du verrou pour ne pas finaliser plusieurs fois
2122     // le meme document
2123     $this->verrouille();
2124     // Execution du trigger 'after' specifique au MODE 'update'
2125     //$this->triggermodifierapres($id, $this->db, $val, DEBUG);
2126    
2127     if($mode == "finalize") {
2128     $etat = _('finalisation');
2129     } else {
2130     $etat = _('definalisation');
2131     }
2132     $this->msg = "";
2133     $this->addToMessage(sprintf(_("La %s du document s'est effectuee avec succes."), $etat));
2134    
2135     return true;
2136     }
2137     } else {
2138     // Message d'echec (saut d'une ligne supplementaire avant le
2139     // message pour qu'il soit mis en evidence)
2140 nhaye 3021 $this->addToLog(
2141     _("Finalisation non enregistree")." - ".
2142     _("id instruction")." = ".$id." - ".
2143     _("uid fichier")." = ".$uid
2144     );
2145 softime 3411 return false;
2146 vpihour 1921 }
2147     }
2148 vpihour 1927
2149     /**
2150 nhaye 1928 * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
2151 nhaye 1949 * @return string numéro de dossier d'instruction
2152 nhaye 1928 */
2153     protected function getDossier() {
2154     if(empty($this->specificMetadata)) {
2155     $this->getSpecificMetadata();
2156     }
2157     return $this->specificMetadata->dossier;
2158     }
2159     /**
2160 softime 2016 * Récupération la version du dossier d'instruction à ajouter aux métadonnées
2161     * @return int Version
2162     */
2163     protected function getDossierVersion() {
2164     if(empty($this->specificMetadata)) {
2165     $this->getSpecificMetadata();
2166     }
2167     return $this->specificMetadata->version;
2168     }
2169     /**
2170 nhaye 1928 * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
2171 nhaye 1949 * @return string numéro de dossier d'autorisation
2172 nhaye 1928 */
2173 softime 2025 protected function getNumDemandeAutor() {
2174 nhaye 1928 if(empty($this->specificMetadata)) {
2175     $this->getSpecificMetadata();
2176     }
2177     return $this->specificMetadata->dossier_autorisation;
2178     }
2179     /**
2180     * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
2181 nhaye 1949 * @return date de la demande initiale
2182 nhaye 1928 */
2183 softime 2025 protected function getAnneemoisDemandeAutor() {
2184 nhaye 1928 if(empty($this->specificMetadata)) {
2185     $this->getSpecificMetadata();
2186     }
2187     return $this->specificMetadata->date_demande_initiale;
2188     }
2189     /**
2190     * Récupération du type de dossier d'instruction à ajouter aux métadonnées
2191 nhaye 1949 * @return string type du dossier d'instruction
2192 nhaye 1928 */
2193 softime 2025 protected function getTypeInstruction() {
2194 nhaye 1928 if(empty($this->specificMetadata)) {
2195     $this->getSpecificMetadata();
2196     }
2197     return $this->specificMetadata->dossier_instruction_type;
2198     }
2199     /**
2200     * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
2201 nhaye 1949 * @return string avis
2202 nhaye 1928 */
2203 softime 2025 protected function getStatutAutorisation() {
2204 nhaye 1928 if(empty($this->specificMetadata)) {
2205     $this->getSpecificMetadata();
2206     }
2207     return $this->specificMetadata->statut;
2208     }
2209     /**
2210     * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
2211 nhaye 1949 * @return string type du dossier d'autorisation
2212 nhaye 1928 */
2213 softime 2025 protected function getTypeAutorisation() {
2214 nhaye 1928 if(empty($this->specificMetadata)) {
2215     $this->getSpecificMetadata();
2216     }
2217     return $this->specificMetadata->dossier_autorisation_type;
2218     }
2219     /**
2220     * Récupération de la date d'ajout de document à ajouter aux métadonnées
2221 nhaye 1949 * @return date de l'évènement
2222 nhaye 1928 */
2223 softime 2025 protected function getDateEvenementDocument() {
2224 softime 2046 return date("Y-m-d");
2225 nhaye 1928 }
2226     /**
2227     * Récupération du groupe d'instruction à ajouter aux métadonnées
2228     * @return string Groupe d'instruction
2229     */
2230     protected function getGroupeInstruction() {
2231     if(empty($this->specificMetadata)) {
2232     $this->getSpecificMetadata();
2233     }
2234     return $this->specificMetadata->groupe_instruction;
2235     }
2236 softime 2002 /**
2237     * Récupération du libellé du type du document à ajouter aux métadonnées
2238     * @return string Groupe d'instruction
2239     */
2240 softime 2025 protected function getTitle() {
2241 nhaye 1928
2242 softime 2002 // Récupère le champ événement
2243     if (isset($this->valF["evenement"]) AND $this->valF["evenement"] != "") {
2244     $evenement = $this->valF["evenement"];
2245     } else {
2246     $evenement = $this->getVal("evenement");
2247     }
2248    
2249     // Requête sql
2250     $sql = "SELECT libelle FROM ".DB_PREFIXE."evenement
2251     WHERE evenement=".$evenement;
2252     $evenement_libelle = $this->db->getOne($sql);
2253 softime 2025 $this->addToLog("getTitle(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2254 softime 2002 if (database::isError($evenement_libelle)) {
2255     die();
2256     }
2257    
2258     // Retourne le libelle de l'événement
2259     return $evenement_libelle;
2260     }
2261    
2262 nhaye 1928 /**
2263     * Cette méthode permet de stocker en attribut toutes les métadonnées
2264     * nécessaire à l'ajout d'un document.
2265     */
2266     public function getSpecificMetadata() {
2267     if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
2268     $dossier = $this->valF["dossier"];
2269     } else {
2270     $dossier = $this->getVal("dossier");
2271     }
2272     //Requête pour récupérer les informations essentiels sur le dossier d'instruction
2273     $sql = "SELECT dossier.dossier as dossier,
2274     dossier_autorisation.dossier_autorisation as dossier_autorisation,
2275     to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
2276     dossier_instruction_type.code as dossier_instruction_type,
2277     etat_dossier_autorisation.libelle as statut,
2278     dossier_autorisation_type.code as dossier_autorisation_type,
2279     groupe.code as groupe_instruction
2280     FROM ".DB_PREFIXE."dossier
2281     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
2282     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2283     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
2284     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
2285     LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
2286     ON dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
2287     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
2288     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2289     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
2290     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
2291     LEFT JOIN ".DB_PREFIXE."groupe
2292     ON dossier_autorisation_type.groupe = groupe.groupe
2293     WHERE dossier.dossier = '".$dossier."'";
2294     $res = $this->db->query($sql);
2295 softime 2030 $this->f->addToLog("getSpecificMetadata() : db->query(".$sql.")", VERBOSE_MODE);
2296 nhaye 1928 if ( database::isError($res)){
2297     die();
2298     }
2299    
2300     //Le résultat est récupéré dans un objet
2301     $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
2302    
2303     //Si il y a un résultat
2304     if ($row !== null) {
2305 vpihour 2119
2306     //Génération du numéro de version
2307     $sql = "SELECT
2308     count(*)
2309     FROM
2310     ".DB_PREFIXE."dossier
2311     LEFT JOIN
2312     ".DB_PREFIXE."dossier_autorisation
2313     ON
2314     dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
2315     LEFT JOIN
2316     ".DB_PREFIXE."dossier_instruction_type
2317     ON
2318     dossier_instruction_type.dossier_instruction_type = dossier.dossier_instruction_type
2319     WHERE
2320 vpihour 2124 dossier_autorisation.dossier_autorisation = '".$row->dossier_autorisation."'
2321 vpihour 2119 AND
2322 vpihour 2124 dossier_instruction_type.code = '".$row->dossier_instruction_type."'";
2323     $row->version = $this->db->getOne($sql);
2324 vpihour 2119 $this->f->addToLog("getSpecificMetadata(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
2325 vpihour 2124 if ( database::isError($row->version)){
2326     $this->f->addToError("", $row->version, $row->version);
2327 vpihour 2119 return false;
2328     }
2329    
2330     //Formatage du numéro de version
2331 vpihour 2124 $row->version = str_pad($row->version, 2, "0", STR_PAD_LEFT);
2332 nhaye 1928
2333     //Alors on créé l'objet dossier_instruction
2334     $this->specificMetadata = $row;
2335    
2336     }
2337     }
2338 vpihour 1978
2339     /**
2340     * Retourne le statut du dossier d'instruction
2341     * @param string $idx Identifiant du dossier d'instruction
2342     * @return string Le statut du dossier d'instruction
2343     */
2344 softime 2025 function getStatutAutorisationDossier($idx){
2345 vpihour 1978
2346     $statut = '';
2347    
2348     //Si l'identifiant du dossier d'instruction fourni est correct
2349     if ( $idx != '' ){
2350    
2351     //On récupère le statut de l'état du dossier à partir de l'identifiant du
2352     //dossier
2353     $sql = "SELECT etat.statut
2354     FROM ".DB_PREFIXE."dossier
2355     LEFT JOIN
2356     ".DB_PREFIXE."etat
2357     ON
2358     dossier.etat = etat.etat
2359     WHERE dossier ='".$idx."'";
2360     $statut = $this->db->getOne($sql);
2361 softime 2025 $this->f->addToLog("getStatutAutorisationDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
2362 vpihour 1978 if ( database::isError($statut)){
2363     die();
2364     }
2365     }
2366     return $statut;
2367     }
2368 softime 2373
2369     /**
2370     * Récupère les données du dossier
2371     * @return array
2372     */
2373     function get_dossier_actual() {
2374    
2375     // Initialisation de la valeur de retour
2376     $return = array();
2377    
2378     // Récupération de toutes les valeurs du dossier d'instruction en cours
2379     $sql = "SELECT * FROM ".DB_PREFIXE."dossier
2380     WHERE dossier='".$this->valF['dossier']."'";
2381     $res = $this->db->query($sql);
2382     $this->addToLog("get_dossier_actual(): db->query(\"".$sql."\");", VERBOSE_MODE);
2383     $this->f->isDatabaseError($res);
2384    
2385     //
2386     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
2387    
2388     // Récupération de la valeur actuelle du délai, de l'accord tacite,
2389     // de l'état et de l'avis du dossier d'instruction
2390     $return['archive_delai']=$row['delai'];
2391     $return['archive_accord_tacite']=$row['accord_tacite'];
2392     $return['archive_etat']=$row['etat'];
2393     $return['archive_avis']=$row['avis_decision'];
2394     // Récupération de la valeur actuelle des 9 dates du dossier
2395     // d'instruction
2396     $return['archive_date_complet']=$row['date_complet'];
2397     $return['archive_date_dernier_depot']=$row['date_dernier_depot'];
2398     $return['archive_date_rejet']= $row['date_rejet'];
2399     $return['archive_date_limite']= $row['date_limite'];
2400     $return['archive_date_notification_delai']= $row['date_notification_delai'];
2401     $return['archive_date_decision']= $row['date_decision'];
2402     $return['archive_date_validite']= $row['date_validite'];
2403     $return['archive_date_achevement']= $row['date_achevement'];
2404     $return['archive_date_chantier']= $row['date_chantier'];
2405 nhaye 3059 $return['archive_date_conformite']= $row['date_conformite'];
2406     $return['archive_incompletude']= $row['incompletude'];
2407     $return['archive_incomplet_notifie']= $row['incomplet_notifie'];
2408     $return['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];
2409     $return['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];
2410     $return['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];
2411     $return['archive_date_limite_incompletude']= $row['date_limite_incompletude'];
2412     $return['archive_delai_incompletude']= $row['delai_incompletude'];
2413     $return['archive_autorite_competente']= $row['autorite_competente'];
2414     $return['duree_validite']= $row['duree_validite'];
2415 softime 2373 }
2416    
2417     // Retour de la fonction
2418     return $return;
2419    
2420     }
2421    
2422 softime 2613 /**
2423     * Permet de vérifier qu'un événement est verrouillable
2424     * @param integer $idx Identifiant de l'instruction
2425     * @return boolean
2426     */
2427     function checkEvenementNonVerrouillable($idx) {
2428    
2429     // Initialisation du résultat
2430     $non_verrouillable = false;
2431    
2432     // Si la condition n'est pas vide
2433     if ($idx != "") {
2434    
2435     // Requête SQL
2436     $sql = "SELECT evenement.non_verrouillable
2437     FROM ".DB_PREFIXE."evenement
2438     LEFT JOIN ".DB_PREFIXE."instruction
2439     ON instruction.evenement = evenement.evenement
2440     WHERE instruction.instruction = $idx";
2441     $this->f->addToLog("checkEvenementNonVerrouillable() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
2442     $res = $this->db->getOne($sql);
2443     $this->f->isDatabaseError($res);
2444    
2445     // Si le retour de la requête est true
2446     if ($res == 't') {
2447     //
2448     $non_verrouillable = true;
2449     }
2450     }
2451    
2452     // Retourne résultat
2453     return $non_verrouillable;
2454     }
2455 vpihour 2643
2456     /**
2457     * Mise à jour des champs archive_*
2458     * @param mixed $row La ligne de données
2459     */
2460     public function updateArchiveData($row){
2461    
2462     // Récupération de la valeur actuelle du délai, de l'accord tacite,
2463     // de l'état et de l'avis du dossier d'instruction
2464     $this->valF['archive_delai']=$row['delai'];
2465     $this->valF['archive_accord_tacite']=$row['accord_tacite'];
2466     $this->valF['archive_etat']=$row['etat'];
2467     $this->valF['archive_avis']=$row['avis_decision'];
2468     // Récupération de la valeur actuelle des 9 dates du dossier
2469     // d'instruction
2470     if ($row['date_complet'] != '') {
2471     $this->valF['archive_date_complet']=$row['date_complet'];
2472     }
2473     if ($row['date_dernier_depot'] != '') {
2474     $this->valF['archive_date_dernier_depot']=$row['date_dernier_depot'];
2475     }
2476     if ($row['date_rejet']!='') {
2477     $this->valF['archive_date_rejet']= $row['date_rejet'];
2478     }
2479     if ($row['date_limite']!='') {
2480     $this->valF['archive_date_limite']= $row['date_limite'];
2481     }
2482     if ($row['date_notification_delai']!='') {
2483     $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];
2484     }
2485     if ($row['date_decision']!='') {
2486     $this->valF['archive_date_decision']= $row['date_decision'];
2487     }
2488     if ($row['date_validite']!='') {
2489     $this->valF['archive_date_validite']= $row['date_validite'];
2490     }
2491     if ($row['date_achevement']!='') {
2492     $this->valF['archive_date_achevement']= $row['date_achevement'];
2493     }
2494     if ($row['date_chantier']!='') {
2495     $this->valF['archive_date_chantier']= $row['date_chantier'];
2496     }
2497     if ($row['date_conformite']!='') {
2498     $this->valF['archive_date_conformite']= $row['date_conformite'];
2499     }
2500     if ($row['incompletude']!='') {
2501     $this->valF['archive_incompletude']= $row['incompletude'];
2502     }
2503 nhaye 3059 if ($row['incomplet_notifie']!='') {
2504     $this->valF['archive_incomplet_notifie']= $row['incomplet_notifie'];
2505     }
2506 vpihour 2643 if ($row['evenement_suivant_tacite']!='') {
2507     $this->valF['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];
2508     }
2509     if ($row['evenement_suivant_tacite_incompletude']!='') {
2510     $this->valF['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];
2511     }
2512     if ($row['etat_pendant_incompletude']!='') {
2513     $this->valF['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];
2514     }
2515     if ($row['date_limite_incompletude']!='') {
2516     $this->valF['archive_date_limite_incompletude']= $row['date_limite_incompletude'];
2517     }
2518     if ($row['delai_incompletude']!='') {
2519     $this->valF['archive_delai_incompletude']= $row['delai_incompletude'];
2520     }
2521     if ($row['autorite_competente']!='') {
2522     $this->valF['archive_autorite_competente']= $row['autorite_competente'];
2523     }
2524     if ($row['duree_validite']!='') {
2525     $this->valF['duree_validite']= $row['duree_validite'];
2526     }
2527     }
2528 vpihour 3025
2529     // {{{
2530     // Méthodes de récupération des métadonnées arrêté
2531     /**
2532     * @return string Retourne le numéro d'arrêté
2533     */
2534     function getNumArrete() {
2535     return $this->getVal("numero_arrete");
2536     }
2537     /**
2538     * @return chaîne vide
2539     */
2540     function getReglementaireArrete() {
2541     return 'true';
2542     }
2543     /**
2544     * @return boolean de notification au pétitionnaire
2545     */
2546     function getNotificationArrete() {
2547     return 'true';
2548     }
2549     /**
2550     * @return date de notification au pétitionnaire
2551     */
2552     function getDateNotificationArrete() {
2553     if (empty($this->metadonneesArrete)) {
2554     $this->getArreteMetadata();
2555     }
2556     return $this->metadonneesArrete["datenotification"];
2557     }
2558     /**
2559     * @return boolean check si le document est passé au contrôle de légalité
2560     */
2561     function getControleLegalite() {
2562     return 'true';
2563     }
2564     /**
2565     * @return date de signature de l'arrêté
2566     */
2567     function getDateSignature() {
2568     if (empty($this->metadonneesArrete)) {
2569     $this->getArreteMetadata();
2570     }
2571     return $this->metadonneesArrete["datesignaturearrete"];
2572     }
2573     /**
2574     * @return string nom du signataire
2575     */
2576     function getNomSignataire() {
2577     if (empty($this->metadonneesArrete)) {
2578     $this->getArreteMetadata();
2579     }
2580     return $this->metadonneesArrete["nomsignataire"];
2581     }
2582     /**
2583     * @return string qualité du signataire
2584     */
2585     function getQualiteSignataire() {
2586     if (empty($this->metadonneesArrete)) {
2587     $this->getArreteMetadata();
2588     }
2589     return $this->metadonneesArrete["qualitesignataire"];
2590     }
2591     /**
2592     * @return string numéro du terrain
2593     */
2594     function getAp_numRue() {
2595     if (empty($this->metadonneesArrete)) {
2596     $this->getArreteMetadata();
2597     }
2598     return $this->metadonneesArrete["ap_numrue"];
2599     }
2600     /**
2601     * @return string nom de la rue du terrain
2602     */
2603     function getAp_nomDeLaVoie() {
2604     if (empty($this->metadonneesArrete)) {
2605     $this->getArreteMetadata();
2606     }
2607     return $this->metadonneesArrete["ap_nomdelavoie"];
2608     }
2609     /**
2610     * @return string code postal du terrain
2611     */
2612     function getAp_codePostal() {
2613     if (empty($this->metadonneesArrete)) {
2614     $this->getArreteMetadata();
2615     }
2616     return $this->metadonneesArrete["ap_codepostal"];
2617     }
2618     /**
2619     * @return string ville du terrain
2620     */
2621     function getAp_ville() {
2622     if (empty($this->metadonneesArrete)) {
2623     $this->getArreteMetadata();
2624     }
2625     return $this->metadonneesArrete["ap_ville"];
2626     }
2627     /**
2628     * @return string activité
2629     */
2630     function getActivite() {
2631     return "Droit du sol";
2632     }
2633     /**
2634     * @return string date du retour de controle légalité
2635     */
2636     function getDateControleLegalite() {
2637     if (empty($this->metadonneesArrete)) {
2638     $this->getArreteMetadata();
2639     }
2640     return $this->metadonneesArrete["datecontrolelegalite"];
2641     }
2642    
2643     // Fin des méthodes de récupération des métadonnées
2644     // }}}
2645    
2646     /**
2647     * Méthode de récupération des métadonnées arrêtés dans la base de données,
2648     * les données sont stockés dans l'attribut $this->metadonneesArrete
2649     */
2650     function getArreteMetadata() {
2651    
2652     //Récupération de la dernière instruction dont l'événement est de type 'arrete'
2653     $this->metadonneesArrete = array("nomsignataire"=>"", "qualitesignataire"=>"",
2654     "decisionarrete"=>"", "datenotification"=>"", "datesignaturearrete"=>"",
2655     "datecontrolelegalite"=>"", "ap_numrue"=>"", "ap_nomdelavoie"=>"",
2656     "ap_codepostal"=>"", "ap_ville"=>"");
2657    
2658     $sqlArrete = "SELECT signataire_arrete.nom as \"nomsignataire\",
2659     signataire_arrete.qualite as \"qualitesignataire\",
2660     instruction.etat as \"decisionarrete\",
2661     instruction.date_retour_rar as \"datenotification\",
2662     instruction.date_retour_signature as \"datesignaturearrete\",
2663     instruction.date_retour_controle_legalite as \"datecontrolelegalite\",
2664     dossier.terrain_adresse_voie_numero as \"ap_numrue\",
2665     dossier.terrain_adresse_voie as \"ap_nomdelavoie\",
2666     dossier.terrain_adresse_code_postal as \"ap_codepostal\",
2667     dossier.terrain_adresse_localite as \"ap_ville\"
2668     FROM ".DB_PREFIXE."instruction
2669     LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
2670     instruction.signataire_arrete = signataire_arrete.signataire_arrete
2671     LEFT JOIN ".DB_PREFIXE."dossier ON
2672     instruction.dossier = dossier.dossier
2673     LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
2674     donnees_techniques.dossier_instruction = dossier.dossier
2675     WHERE instruction.instruction = ".$this->getVal("instruction");
2676     $resArrete = $this->db->query($sqlArrete);
2677     $this->f->addToLog("getArreteMetadata(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
2678     if ( database::isError($resArrete)){
2679     die();
2680     }
2681    
2682     $this->metadonneesArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
2683     }
2684    
2685 softime 3411 /**
2686     * CONDITION - has_an_edition.
2687     *
2688     * Condition pour afficher le bouton de visualisation de l'édition.
2689     *
2690     * @return boolean
2691     */
2692     function has_an_edition() {
2693     // Récupère la valeur du champ lettretype
2694     $lettretype = $this->getVal("lettretype");
2695     // Si le champ est vide
2696     if (empty($lettretype)) {
2697     //
2698     return false;
2699     }
2700    
2701     //
2702     return true;
2703     }
2704    
2705     /**
2706 softime 3453 * CONDITION - is_editable.
2707 softime 3411 *
2708 softime 3453 * Condition pour la modification.
2709     *
2710 softime 3411 * @return boolean
2711     */
2712 softime 3453 function is_editable() {
2713     // Contrôle si l'utilisateur possède un bypass
2714     $bypass = $this->f->isAccredited(get_class()."_modifier_bypass");
2715 softime 3411 //
2716 softime 3453 if ($bypass == true) {
2717 softime 3419
2718 softime 3453 //
2719     return true;
2720     }
2721 softime 3419
2722 softime 3453 // Si l'utilisateur est un intructeur qui ne correspond pas à la
2723     // division du dossier
2724     if ($this->f->isUserInstructeur()
2725     && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
2726    
2727 softime 3419 //
2728 softime 3411 return false;
2729     }
2730 softime 3419
2731 softime 3453 // Si l'utilisateur est un instructeur, que le dossier est cloturé et
2732     // que l'événement n'est pas identifié comme non verrouillable
2733     if ($this->f->isUserInstructeur()
2734     && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
2735     && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
2736    
2737 softime 3419 //
2738 softime 3453 return false;
2739     }
2740 softime 3419
2741 softime 3453 //
2742     return true;
2743     }
2744 softime 3419
2745 softime 3453 /**
2746     * CONDITION - is_deletable.
2747     *
2748     * Condition pour lma modification.
2749     *
2750     * @return boolean
2751     */
2752     function is_deletable() {
2753     // Contrôle si l'utilisateur possède un bypass
2754     $bypass = $this->f->isAccredited(get_class()."_supprimer_bypass");
2755     //
2756     if ($bypass == true) {
2757    
2758 softime 3419 //
2759 softime 3453 return true;
2760     }
2761 softime 3419
2762 softime 3453 // Si l'utilisateur est un intructeur qui ne correspond pas à la
2763     // division du dossier
2764     if ($this->f->isUserInstructeur()
2765     && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
2766    
2767     //
2768     return false;
2769 softime 3411 }
2770 softime 3419
2771 softime 3411 //
2772     return true;
2773     }
2774    
2775     /**
2776 softime 3453 * CONDITION - is_addable.
2777     *
2778     * Condition pour afficher les boutons modifier et supprimer.
2779     *
2780     * @return boolean
2781     */
2782     function is_addable() {
2783     // Contrôle si l'utilisateur possède un bypass
2784     $bypass = $this->f->isAccredited(get_class()."_ajouter_bypass");
2785     //
2786     if ($bypass == true) {
2787    
2788     //
2789     return true;
2790     }
2791    
2792     // Si l'utilisateur est un intructeur qui ne correspond pas à la
2793     // division du dossier
2794     if($this->f->isUserInstructeur()
2795     && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()){
2796    
2797     //
2798     return false;
2799     }
2800    
2801     //
2802     return true;
2803     }
2804    
2805     /**
2806 softime 3411 * CONDITION - is_finalizable.
2807     *
2808     * Condition pour afficher le bouton.
2809     *
2810     * @return boolean
2811     */
2812     function is_finalizable() {
2813 softime 3453 // Contrôle si l'utilisateur possède un bypass
2814     $bypass = $this->f->isAccredited(get_class()."_finaliser_bypass");
2815     //
2816     if ($bypass == true) {
2817 softime 3411
2818 softime 3453 //
2819     return true;
2820     }
2821    
2822     // Si l'utilisateur est un intructeur qui ne correspond pas à la
2823     // division du dossier
2824     if($this->f->isUserInstructeur()
2825     && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()){
2826    
2827     //
2828     return false;
2829     }
2830    
2831     // Si l'utilisateur est un instructeur, que le dossier est cloturé et
2832     // que l'événement n'est pas identifié comme non verrouillable
2833     if ($this->f->isUserInstructeur()
2834     && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
2835     && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
2836    
2837     //
2838     return false;
2839     }
2840    
2841     //
2842     return true;
2843     }
2844    
2845     /**
2846     * CONDITION - is_finalize_without_bypass.
2847     *
2848     * Condition pour afficher le bouton sans le bypass.
2849     *
2850     * @return boolean [description]
2851     */
2852     function is_finalizable_without_bypass() {
2853 softime 3411 // Récupère la valeur du champ finalisé
2854     $om_final_instruction = $this->getVal('om_final_instruction');
2855    
2856     // Si le rapport n'est pas finalisé
2857 softime 3453 if (empty($om_final_instruction)
2858     || $om_final_instruction == 'f') {
2859 softime 3411 //
2860     return true;
2861     }
2862    
2863     //
2864     return false;
2865     }
2866    
2867     /**
2868     * CONDITION - is_unfinalizable.
2869     *
2870     * Condition pour afficher le bouton.
2871     *
2872     * @return boolean
2873     */
2874     function is_unfinalizable(){
2875 softime 3453 // Contrôle si l'utilisateur possède un bypass
2876     $bypass = $this->f->isAccredited(get_class()."_definaliser_bypass");
2877     //
2878     if ($bypass == true) {
2879 softime 3411
2880 softime 3453 //
2881     return true;
2882     }
2883    
2884     // Si l'utilisateur est un intructeur qui ne correspond pas à la
2885     // division du dossier
2886     if($this->f->isUserInstructeur()
2887     && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()){
2888    
2889     //
2890     return false;
2891     }
2892    
2893     // Si l'utilisateur est un instructeur, que le dossier est cloturé et
2894     // que l'événement n'est pas identifié comme non verrouillable
2895     if ($this->f->isUserInstructeur()
2896     && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
2897     && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
2898    
2899     //
2900     return false;
2901     }
2902    
2903     //
2904     return true;
2905     }
2906    
2907     /**
2908     * CONDITION - is_unfinalizable_without_bypass.
2909     *
2910     * Condition pour afficher le bouton sans le bypass.
2911     *
2912     * @return boolean
2913     */
2914     function is_unfinalizable_without_bypass() {
2915 softime 3411 // Récupère la valeur du champ finalisé
2916     $om_final_instruction = $this->getVal('om_final_instruction');
2917    
2918 softime 3453 // Si l'instruction est finalisée
2919 softime 3411 if ($om_final_instruction == 't') {
2920     //
2921     return true;
2922     }
2923    
2924     //
2925     return false;
2926     }
2927    
2928     /**
2929     * TREATMENT - finalize.
2930     *
2931     * Permet de finaliser un enregistrement.
2932     *
2933     * @param array $val valeurs soumises par le formulaire
2934     *
2935     * @return boolean
2936     */
2937     function finalize($val = array()) {
2938    
2939 softime 3428 // Cette méthode permet d'exécuter une routine en début des méthodes
2940     // dites de TREATMENT.
2941     $this->begin_treatment(__METHOD__);
2942    
2943     // Traitement de la finalisation
2944     $ret = $this->manage_finalizing("finalize", $val);
2945    
2946     // Si le traitement retourne une erreur
2947     if ($ret !== true) {
2948    
2949     // Termine le traitement
2950     $this->end_treatment(__METHOD__, false);
2951     }
2952    
2953     // Termine le traitement
2954     return $this->end_treatment(__METHOD__, true);
2955 softime 3411 }
2956    
2957     /**
2958     * TREATMENT - unfinalize.
2959     *
2960     * Permet de définaliser un enregistrement.
2961     *
2962     * @param array $val valeurs soumises par le formulaire
2963     *
2964     * @return boolean
2965     */
2966     function unfinalize($val = array()) {
2967    
2968 softime 3428 // Cette méthode permet d'exécuter une routine en début des méthodes
2969     // dites de TREATMENT.
2970     $this->begin_treatment(__METHOD__);
2971    
2972     // Traitement de la finalisation
2973     $ret = $this->manage_finalizing("unfinalize", $val);
2974    
2975     // Si le traitement retourne une erreur
2976     if ($ret !== true) {
2977    
2978     // Termine le traitement
2979     $this->end_treatment(__METHOD__, false);
2980     }
2981    
2982     // Termine le traitement
2983     return $this->end_treatment(__METHOD__, true);
2984 softime 3411 }
2985    
2986     /**
2987     * VIEW - view_edition
2988     *
2989     * Edite l'édition de l'instruction ou affiche celle contenue dans le stockage.
2990     *
2991     * @return null Si l'action est incorrecte
2992     */
2993     function view_edition() {
2994    
2995     // Si l'instruction est finalisée
2996     if($this->getVal("om_final_instruction") == 't'
2997     && $this->getVal("om_final_instruction") != null) {
2998    
2999     // Ouvre le document
3000     $lien = '../spg/file.php?obj='.$this->table.'&'.
3001     'champ=om_fichier_instruction&id='.$this->getVal($this->clePrimaire);
3002     //
3003     header("Location: ".$lien);
3004     } else {
3005    
3006 softime 3453 // Paramètre du PDF
3007 softime 3434 $params = array(
3008     "watermark" => true,
3009     "specific" => array(
3010     "mode" => "previsualisation",
3011     ),
3012     );
3013    
3014 softime 3411 // Génération du PDF
3015 softime 3434 $result = $this->compute_pdf_output('lettretype', $this->getVal("lettretype"), null, null, $params);
3016 softime 3411 // Affichage du PDF
3017     $this->expose_pdf_output(
3018     $result['pdf_output'],
3019     $result['filename']
3020     );
3021     }
3022     }
3023 softime 3425
3024     /**
3025     * VIEW - view_bible
3026     *
3027     * Affiche la bible manuelle.
3028     *
3029     * @return void
3030     */
3031     function view_bible() {
3032     // Vérification de l'accessibilité sur l'élément
3033     $this->checkAccessibility();
3034    
3035     // XXX APP
3036    
3037     $f = $this->f;
3038    
3039     /**
3040     * Affichage de la structure HTML
3041     */
3042     //
3043     if ($f->isAjaxRequest()) {
3044     //
3045     header("Content-type: text/html; charset=".HTTPCHARSET."");
3046     } else {
3047     //
3048     $f->setFlag("htmlonly");
3049     $f->display();
3050     }
3051     //
3052     $f->displayStartContent();
3053     //
3054     $f->setTitle(_("Liste des éléments de la bible en lien avec un evenement"));
3055     $f->displayTitle();
3056    
3057     /**
3058     *
3059     */
3060     //
3061     ($f->get_submitted_get_value("ev") ? $evenement = $f->get_submitted_get_value("ev") : $evenement = "");
3062     $evenement = intval($evenement);
3063     //
3064     ($f->get_submitted_get_value("idx") ? $idx = $f->get_submitted_get_value("idx") : $idx = "");
3065     $nature = substr($idx, 0, 2);
3066     //
3067     ($f->get_submitted_get_value("complement") ? $complement = $f->get_submitted_get_value("complement") : $complement = "1");
3068    
3069     /**
3070     *
3071     */
3072     //
3073     $sql = "SELECT *, bible.libelle as bible_lib
3074     FROM ".DB_PREFIXE."bible
3075     LEFT OUTER JOIN ".DB_PREFIXE."dossier_autorisation_type
3076     ON bible.dossier_autorisation_type=dossier_autorisation_type.dossier_autorisation_type
3077     WHERE evenement=".$evenement."
3078     AND complement=".$complement."
3079     AND (bible.dossier_autorisation_type IS NULL
3080     OR dossier_autorisation_type.code ='".$nature."')
3081     ORDER BY bible_lib ASC";
3082     $res = $f->db->query($sql);
3083     $f->addToLog(__METHOD__.": db->query(\"".$sql."\");", VERBOSE_MODE);
3084     $f->isDatabaseError($res);
3085     //
3086     echo "<form method=\"post\" name=\"f3\" action=\"#\">\n";
3087     //
3088     if ($res->numrows() > 0) {
3089     //
3090     echo "\t<table id='tab-bible' width='100%'>\n";
3091     //
3092     echo "\t\t<tr class=\"ui-tabs-nav ui-accordion ui-state-default tab-title\">";
3093     echo "<th>"._("Choisir")."</th>";
3094     echo "<th>"._("Libelle")."</th>";
3095     echo "</tr>\n";
3096     //
3097     $i = 0;
3098     //
3099     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
3100     //
3101     echo "\t\t<tr";
3102     echo " class=\"".($i % 2 == 0 ? "odd" : "even")."\"";
3103     echo ">";
3104     //
3105     echo "<td class=\"center\"><input type=\"checkbox\" name=\"choix[]\" value=\"".$i."\" id=\"checkbox".$i."\" /></td>";
3106     // XXX utilisation de l'attribut titre pour afficher une infobulle
3107     echo "<td><span class=\"content\" title=\"".htmlentities($row['contenu'])."\" id=\"content".$i."\">".$row['bible_lib']."</span></td>";
3108     //
3109     echo "</tr>\n";
3110     //
3111     $i++;
3112     }
3113     echo "\t</table>\n";
3114     //
3115     echo "<div class=\"formControls\">\n";
3116     $f->layout->display_form_button(array(
3117     "value" => _("Valider"),
3118     "onclick" => "bible_return('f2', 'complement".($complement == "1" ? "" : $complement)."_om_html'); return false;",
3119     ));
3120     $f->displayLinkJsCloseWindow();
3121     echo "</div>\n";
3122    
3123     } else {
3124     //
3125     $message_class = "error";
3126     $message = _("Aucun element dans la bible pour l'evenement")." : ".$evenement;
3127     $f->displayMessage($message_class, $message);
3128     //
3129     echo "<div class=\"formControls\">\n";
3130     $f->displayLinkJsCloseWindow();
3131     echo "</div>\n";
3132     }
3133     //
3134     echo "</form>\n";
3135    
3136     /**
3137     * Affichage de la structure HTML
3138     */
3139     //
3140     $f->displayEndContent();
3141     }
3142    
3143     /**
3144     * VIEW - view_bible
3145     *
3146     * Affiche la bible manuelle.
3147     *
3148     * @return void
3149     */
3150     function view_bible_auto() {
3151     // Vérification de l'accessibilité sur l'élément
3152     $this->checkAccessibility();
3153    
3154     // XXX APP
3155    
3156     $f = $this->f;
3157    
3158     //
3159     $f->disableLog();
3160    
3161     $formatDate="AAAA-MM-JJ";
3162    
3163     // Récupération des paramètres
3164     $idx = $f->get_submitted_get_value('idx');
3165     $evenement = $f->get_submitted_get_value('ev');
3166    
3167     // Initialisation de la variable de retour
3168     $retour['complement_om_html'] = '';
3169     $retour['complement2_om_html'] = '';
3170     $retour['complement3_om_html'] = '';
3171     $retour['complement4_om_html'] = '';
3172     // Vérification d'une consultation liée à l'événement
3173     $consultation = $f->db->getOne(
3174     "select consultation from ".DB_PREFIXE."evenement where evenement=".$evenement
3175     );
3176     $f->isDatabaseError($consultation);
3177     // Si consultation liée, récupération du retour d'avis
3178     if($consultation=='Oui'){
3179     $sql="select date_retour,avis_consultation.libelle as avis_consultation,
3180     service.libelle as service
3181     from ".DB_PREFIXE."consultation inner join ".DB_PREFIXE."service
3182     on consultation.service =service.service
3183     left join ".DB_PREFIXE."avis_consultation on
3184     consultation.avis_consultation = avis_consultation.avis_consultation
3185     where dossier ='".$idx."'";
3186     $res = $f->db->query($sql);
3187     $f->isDatabaseError($res);
3188     // Récupération des consultations
3189     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
3190     $correct=false;
3191     // date retour
3192     if ($row['date_retour']<>""){
3193     if ($formatDate=="AAAA-MM-JJ"){
3194     $date = explode("-", $row['date_retour']);
3195     // controle de date
3196     if (count($date) == 3 and
3197     checkdate($date[1], $date[2], $date[0])) {
3198     $date_retour_f= $date[2]."/".$date[1]."/".$date[0];
3199     $correct=true;
3200     }else{
3201     $msg= $msg."<br>La date ".$row['date_retour']." n'est pas une date.";
3202     $correct=false;
3203     }
3204     }
3205     }
3206     //
3207     $temp="Vu l'avis ".$row['avis_consultation']." du service ".$row['service'];
3208     if($correct == true){
3209     $temp=$temp." du ".$date_retour_f;
3210     }
3211     // Concaténation des retours d'avis de consultation
3212     $retour['complement_om_html'] .= $temp;
3213     } // while
3214    
3215     } // consultation
3216     // Récupération des bibles automatiques pour le champ complement_om_html
3217     $retour['complement_om_html'] .= $this->getBible($f, $evenement, $idx, '1');
3218     // Récupération des bibles automatiques pour le champ complement2_om_html
3219     $retour['complement2_om_html'] .= $this->getBible($f, $evenement, $idx, '2');
3220     // Récupération des bibles automatiques pour le champ complement3_om_html
3221     $retour['complement3_om_html'] .= $this->getBible($f, $evenement, $idx, '3');
3222     // Récupération des bibles automatiques pour le champ complement4_om_html
3223     $retour['complement4_om_html'] .= $this->getBible($f, $evenement, $idx, '4');
3224    
3225    
3226    
3227     echo json_encode($retour);
3228     }
3229    
3230     /**
3231     * Récupération des éléments de bible.
3232     *
3233     * @param utils $f handler de om_application
3234     * @param integer $event id de l'événement
3235     * @param string $idx id du dossier
3236     * @param integer $compnb numéro du champ complement
3237     *
3238     * @return string Chaîne de texte à insérer dans le champ complement
3239     */
3240     function getBible($f, $event, $idx, $compnb) {
3241     $sql = "SELECT * FROM ".DB_PREFIXE."bible
3242     LEFT OUTER JOIN ".DB_PREFIXE."dossier_autorisation_type
3243     ON bible.dossier_autorisation_type=
3244     dossier_autorisation_type.dossier_autorisation_type
3245     WHERE evenement =".$event." and
3246     complement=".$compnb." and
3247     automatique='Oui' and
3248     (dossier_autorisation_type.code ='".substr($idx, 0, 2)."' or
3249     bible.dossier_autorisation_type IS NULL)";
3250    
3251     $res = $f->db->query($sql);
3252     $f->isDatabaseError($res);
3253     $temp = "";
3254     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
3255     // Remplacement des retours à la ligne par des br
3256     $temp .= preg_replace(
3257     '#(\\\r|\\\r\\\n|\\\n)#', '<br/>', $row['contenu']
3258     );
3259     } // fin while
3260     return $temp;
3261     }
3262    
3263     /**
3264     * VIEW - view_suivi_bordereaux.
3265     *
3266     * Vu pour imprimer un bordereau d'envoi.
3267     *
3268     * @return void
3269     */
3270     function view_suivi_bordereaux() {
3271     // Vérification de l'accessibilité sur l'élément
3272     $this->checkAccessibility();
3273    
3274     // XXX APP
3275    
3276     $f = $this->f;
3277    
3278     /**
3279     * Validation du formulaire
3280     */
3281     // Si le formulaire a été validé
3282     if ($f->get_submitted_post_value("validation") !== null) {
3283     // Si un bordereau à été sélectionné
3284     if ($f->get_submitted_post_value("bordereau") !== null && $f->get_submitted_post_value("bordereau") == "" ) {
3285     // Si aucun bordereau n'a été sélectionné
3286     $message_class = "error";
3287     $message = _("Veuillez selectionner un bordereau.");
3288     }
3289     // Sinon si les dates ne sont pas valide
3290     elseif (($f->get_submitted_post_value("date_bordereau_debut") !== null
3291     && $f->get_submitted_post_value("date_bordereau_debut") == "")
3292     || ($f->get_submitted_post_value("date_bordereau_fin") !== null
3293     && $f->get_submitted_post_value("date_bordereau_fin") == "")) {
3294     // Si aucune date n'a été saisie
3295     $message_class = "error";
3296     $message = _("Veuillez saisir une date valide.");
3297     }
3298     // Affiche le message de validation
3299     else {
3300     // On récupère le libellé du bordereau pour l'afficher à l'utilisateur
3301     $sql = "SELECT om_etat.libelle
3302     FROM ".DB_PREFIXE."om_etat
3303     WHERE om_etat.id = '".$f->get_submitted_post_value("bordereau")."'";
3304     $res = $f->db->getone($sql);
3305     $f->addToLog(__METHOD__.": db->getone(\"".$sql."\")", VERBOSE_MODE);
3306     $f->isDatabaseError($res);
3307     //
3308     $message_class = "valid";
3309     $message = _("Cliquez sur le lien ci-dessous pour telecharger votre bordereau");
3310     $message .= " : <br/><br/>";
3311     $message .= "<a class='om-prev-icon pdf-16'";
3312     $message .= " title=\""._("Bordereau")."\"";
3313     $message .= " href='../pdf/pdfetat.php?obj=".$f->get_submitted_post_value("bordereau")."&date_bordereau_debut=".$f->get_submitted_post_value("date_bordereau_debut")."&date_bordereau_fin=".$f->get_submitted_post_value("date_bordereau_fin")."'";
3314     $message .= " target='_blank'>";
3315     $message .= $res." "._("du")." ".$f->get_submitted_post_value("date_bordereau_debut")
3316     ." "._("au")." ".$f->get_submitted_post_value("date_bordereau_fin");
3317     $message .= "</a>";
3318     }
3319     }
3320    
3321     /**
3322     * Affichage des messages et du formulaire
3323     */
3324     // Affichage du message de validation ou d'erreur
3325     if (isset($message) && isset($message_class) && $message != "") {
3326     $f->displayMessage($message_class, $message);
3327     }
3328     // Inclusion de la classe de gestion des formulaires
3329     require_once "../obj/om_formulaire.class.php";
3330     // Ouverture du formulaire
3331     printf("\t<form");
3332     printf(" method=\"post\"");
3333     printf(" id=\"suivi_bordereaux_form\"");
3334     printf(" action=\"\"");
3335     printf(">\n");
3336     // Paramétrage des champs du formulaire
3337     $champs = array("date_bordereau_debut", "date_bordereau_fin", "bordereau");
3338     // Création d'un nouvel objet de type formulaire
3339     $form = new formulaire(NULL, 0, 0, $champs);
3340     // Paramétrage du champ date_bordereau_debut
3341     $form->setLib("date_bordereau_debut", _("date_bordereau_debut"));
3342     $form->setType("date_bordereau_debut", "date");
3343     $form->setTaille("date_bordereau_debut", 12);
3344     $form->setMax("date_bordereau_debut", 12);
3345     $form->setRequired("date_bordereau_debut");
3346     $form->setOnchange("date_bordereau_debut", "fdate(this)");
3347     $form->setVal("date_bordereau_debut", date("d/m/Y"));
3348     // Paramétrage du champ date_bordereau_fin
3349     $form->setLib("date_bordereau_fin", _("date_bordereau_fin"));
3350     $form->setType("date_bordereau_fin", "date");
3351     $form->setTaille("date_bordereau_fin", 12);
3352     $form->setMax("date_bordereau_fin", 12);
3353     $form->setRequired("date_bordereau_fin");
3354     $form->setOnchange("date_bordereau_fin", "fdate(this)");
3355     $form->setVal("date_bordereau_fin", date("d/m/Y"));
3356     // Paramétrage du champ bordereau
3357     $form->setLib("bordereau", _("bordereau"));
3358     $form->setType("bordereau", "select");
3359     $form->setRequired("bordereau");
3360     // Valeurs des champs
3361     if ($f->get_submitted_post_value("validation") !== null) {
3362     $form->setVal("date_bordereau_debut", $f->get_submitted_post_value("date_bordereau_debut"));
3363     $form->setVal("date_bordereau_fin", $f->get_submitted_post_value("date_bordereau_fin"));
3364     $form->setVal("bordereau", $f->get_submitted_post_value("bordereau"));
3365     }
3366     // Données du select - On récupère ici la liste de tous les états disponibles
3367     // dans la table om_etat qui ont un id qui commence par la cahine de caractères
3368     // 'bordereau_'
3369     $sql = "SELECT om_etat.id, om_etat.libelle
3370     FROM ".DB_PREFIXE."om_etat
3371     WHERE om_etat.id LIKE 'bordereau_%'
3372     ORDER BY om_etat.id";
3373     $res = $f->db->query($sql);
3374     $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
3375     $f->isDatabaseError($res);
3376     // Données du select
3377     $contenu = array(
3378     0 => array("", ),
3379     1 => array(_("choisir bordereau")),
3380     );
3381     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
3382     $contenu[0][] = $row['id'];
3383     $contenu[1][] = $row['libelle'];
3384     }
3385     $form->setSelect("bordereau", $contenu);
3386     // Affichage du formulaire
3387     $form->entete();
3388     $form->afficher($champs, 0, false, false);
3389     $form->enpied();
3390     // Affichage du bouton
3391     printf("\t<div class=\"formControls\">\n");
3392     $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
3393     printf("\t</div>\n");
3394     // Fermeture du formulaire
3395     printf("\t</form>\n");
3396    
3397     }
3398    
3399     /**
3400     * VIEW - view_suivi_envoi_lettre_rar.
3401     *
3402     * Vu pour imprimer les RAR.
3403     *
3404     * @return void
3405     */
3406     function view_suivi_envoi_lettre_rar() {
3407     // Vérification de l'accessibilité sur l'élément
3408     $this->checkAccessibility();
3409    
3410     // XXX APP
3411    
3412     $f = $this->f;
3413    
3414     //
3415     if ($f->get_submitted_post_value("date") !== null) {
3416     $date = $f->get_submitted_post_value("date");
3417     } else {
3418     $date = "";
3419     }
3420     //
3421     if ($f->get_submitted_post_value("liste_code_barres_instruction") !== null) {
3422     $liste_code_barres_instruction = $f->get_submitted_post_value("liste_code_barres_instruction");
3423     } else {
3424     $liste_code_barres_instruction = "";
3425     }
3426    
3427     // Compteur du nombre de page générées
3428     $nbLettres = 0;
3429     // Liste d'id des instructions
3430     $id4Gen = array();
3431     //
3432     $error = "";
3433    
3434     /**
3435     * Validation du formulaire
3436     */
3437     // Si le formulaire a été validé
3438     if ($f->get_submitted_post_value('validation') !== null) {
3439     //
3440     if (empty($date) || empty($liste_code_barres_instruction)) {
3441     //
3442     $message_class = "error";
3443     $message = _("Tous les champs doivent etre remplis.");
3444     } else {
3445     // Création d'un tableau d'instruction
3446     $liste = explode("\r\n", $f->get_submitted_post_value("liste_code_barres_instruction"));
3447     //
3448     foreach ($liste as $code_barres) {
3449     // On enlève les éventuels espaces saisis
3450     $code_barres = trim($code_barres);
3451     // Vérification de l'existence de l'instruction
3452     if ($code_barres != "") {
3453     // Si la valeur transmise est numérique
3454     if (is_numeric($code_barres)) {
3455     //
3456     $sql = "SELECT count(*) FROM ".DB_PREFIXE."instruction WHERE code_barres='".$code_barres."'";
3457     $nbInstr = $f->db->getone($sql);
3458     $f->addToLog(__METHOD__.": db->getone(\"".$sql."\")", VERBOSE_MODE);
3459     $f->isDatabaseError($nbInstr);
3460     //
3461     if ($nbInstr == "1") {
3462     // Récupération de la date d'envoi de l'instruction bippé
3463     $sql = "SELECT to_char(date_envoi_rar,'DD/MM/YYYY') as date_envoi_rar, instruction FROM ".DB_PREFIXE."instruction WHERE code_barres='".$code_barres."'";
3464     $res = $f->db->query($sql);
3465     $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
3466     $f->isDatabaseError($res);
3467     $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
3468     // Si pas de date ou correspond à la date du formulaire on
3469     // effectue le traitement
3470     if ($row["date_envoi_rar"] == "" || $row["date_envoi_rar"] == $date) {
3471    
3472     require_once '../obj/instruction.class.php';
3473    
3474     $instr = new instruction($row['instruction'], $f->db, DEBUG);
3475     $valF = array();
3476     foreach($instr->champs as $id => $champ) {
3477     $valF[$champ] = $instr->val[$id];
3478     }
3479     $valF['date_evenement']=
3480     $instr->dateDBToForm($valF['date_evenement']);
3481     $valF['archive_date_complet']=
3482     $instr->dateDBToForm($valF['archive_date_complet']);
3483     $valF['archive_date_rejet']=
3484     $instr->dateDBToForm($valF['archive_date_rejet']);
3485     $valF['archive_date_limite']=
3486     $instr->dateDBToForm($valF['archive_date_limite']);
3487     $valF['archive_date_notification_delai']=
3488     $instr->dateDBToForm($valF['archive_date_notification_delai']);
3489     $valF['archive_date_decision']=
3490     $instr->dateDBToForm($valF['archive_date_decision']);
3491     $valF['archive_date_validite']=
3492     $instr->dateDBToForm($valF['archive_date_validite']);
3493     $valF['archive_date_achevement']=
3494     $instr->dateDBToForm($valF['archive_date_achevement']);
3495     $valF['archive_date_chantier']=
3496     $instr->dateDBToForm($valF['archive_date_chantier']);
3497     $valF['archive_date_conformite']=
3498     $instr->dateDBToForm($valF['archive_date_conformite']);
3499     $valF['archive_date_dernier_depot']=
3500     $instr->dateDBToForm($valF['archive_date_dernier_depot']);
3501     $valF['archive_date_limite_incompletude']=
3502     $instr->dateDBToForm($valF['archive_date_limite_incompletude']);
3503     $valF['date_finalisation_courrier']=
3504     $instr->dateDBToForm($valF['date_finalisation_courrier']);
3505     $valF['date_envoi_signature']=
3506     $instr->dateDBToForm($valF['date_envoi_signature']);
3507     $valF['date_retour_signature']=
3508     $instr->dateDBToForm($valF['date_retour_signature']);
3509     $valF['date_envoi_rar']=
3510     $instr->dateDBToForm($valF['date_envoi_rar']);
3511     $valF['date_retour_rar']=
3512     $instr->dateDBToForm($valF['date_retour_rar']);
3513     $valF['date_envoi_controle_legalite']=
3514     $instr->dateDBToForm($valF['date_envoi_controle_legalite']);
3515     $valF['date_retour_controle_legalite']=
3516     $instr->dateDBToForm($valF['date_retour_controle_legalite']);
3517    
3518     $valF['date_envoi_rar'] = $date;
3519    
3520     // Vérification de la finalisation du document
3521     // correspondant au code barres
3522     if($instr->getVal("om_final_instruction") === 't') {
3523     if ($instr->modifier($valF, $f->db, DEBUG) == true) {
3524     $id4Gen[] = $code_barres;
3525     $nbLettres ++;
3526     } else {
3527     //
3528     if ($error != "") {
3529     $error .= "<br/>";
3530     }
3531     $error .= sprintf(_("Une erreur s'est produite lors de la modification de l'instruction %s."),
3532     $code_barres);
3533     $error .= " ";
3534     $error .= _("Veuillez contacter votre administrateur.");
3535     }
3536     } else {
3537     //
3538     if ($error != "") {
3539     $error .= "<br/>";
3540     }
3541     $error .= sprintf(_("Le document correspondant au
3542     code barres %s n'est pas finalise,
3543     le bordereau ne sera pas genere."),
3544     $code_barres);
3545     }
3546    
3547     } else {
3548     //
3549     if ($error != "") {
3550     $error .= "<br/>";
3551     }
3552     $error .= _("Une lettre correspondante a l'instruction ayant pour code barres")." ".$code_barres." "._("a deja ete envoyee, le bordereau ne sera pas genere.");
3553     }
3554     } else {
3555     //
3556     if ($error != "") {
3557     $error .= "<br/>";
3558     }
3559     $error .= _("Le numero")." ".$code_barres." "._("ne correspond a aucun code barres d'instruction.");
3560     }
3561     } else {
3562     //
3563     if ($error != "") {
3564     $error .= "<br/>";
3565     }
3566     $error .= _("Le code barres d'instruction")." ".$code_barres." "._("n'est pas valide.");
3567     }
3568     }
3569     }
3570     }
3571     }
3572    
3573     /**
3574     * Affichage des messages et du formulaire
3575     */
3576     // Affichage du message de validation ou d'erreur
3577     if (isset($message) && isset($message_class) && $message != "") {
3578     $f->displayMessage($message_class, $message);
3579     }
3580     // Affichage du message d'erreur
3581     if(!empty($error)) {
3582     $f->displayMessage("error", $error);
3583     }
3584     // Affichage du message de validation de la saisie
3585     if ($nbLettres > 0) {
3586     //
3587     $message_class = "valid";
3588     $message = _("Cliquez sur le lien ci-dessous pour telecharger votre document");
3589     $message .= " : <br/><br/>";
3590     $message .= "<a class='om-prev-icon pdf-16'";
3591     $message .= " title=\""._("imprimer les RAR")."\"";
3592     $message .= " href=\"../../scr/form.php?obj=instruction&action=180&idx=0&liste=".implode(",",$id4Gen)."\"";
3593     $message .= " target='_blank'>";
3594     $message .= _("Telecharger le document pour")." ".$nbLettres." "._("RAR");
3595     $message .= "</a>";
3596     $f->displayMessage($message_class, $message);
3597     }
3598     // Inclusion de la classe de gestion des formulaires
3599     require_once "../obj/om_formulaire.class.php";
3600     // Ouverture du formulaire
3601     echo "\t<form";
3602     echo " method=\"post\"";
3603     echo " id=\"suivi_envoi_lettre_rar_form\"";
3604     echo " action=\"\"";
3605     echo ">\n";
3606     // Paramétrage des champs du formulaire
3607     $champs = array("date", "liste_code_barres_instruction");
3608     // Création d'un nouvel objet de type formulaire
3609     $form = new formulaire(NULL, 0, 0, $champs);
3610     // Paramétrage du champ date du formulaire
3611     $form->setLib("date", _("Date")."* :");
3612     $form->setType("date", "date");
3613     $form->setOnchange("date", "fdate(this)");
3614     $form->setVal("date", ($date == "" ? date("d/m/Y") : $date));
3615     $form->setTaille("date", 10);
3616     $form->setMax("date", 10);
3617     // Paramétrage du champ liste_code_barres_instruction du formulaire
3618     $form->setLib("liste_code_barres_instruction", _("Liste des codes barres d'instructions scannes")."* :");
3619     $form->setType("liste_code_barres_instruction", "textarea");
3620     $form->setVal("liste_code_barres_instruction", $liste_code_barres_instruction);
3621     $form->setTaille("liste_code_barres_instruction", 20);
3622     $form->setMax("liste_code_barres_instruction", 20);
3623     // Affichage du formulaire
3624     $form->entete();
3625     $form->afficher($champs, 0, false, false);
3626     $form->enpied();
3627     // Affichage du bouton
3628     echo "\t<div class=\"formControls\">\n";
3629     $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
3630     echo "\t</div>\n";
3631     // Fermeture du formulaire
3632     echo "\t</form>\n";
3633     }
3634    
3635     /**
3636     * VIEW - view_suivi_mise_a_jour_des_dates.
3637     *
3638     * Vu pour mettre à jour les dates de suivi de l'instruction.
3639     *
3640     * @return void
3641     */
3642     function view_suivi_mise_a_jour_des_dates() {
3643     // Vérification de l'accessibilité sur l'élément
3644     $this->checkAccessibility();
3645    
3646     // XXX APP
3647    
3648     $f = $this->f;
3649    
3650     // Récupération des valeur passées en POST ou GET
3651     if($f->get_submitted_post_value("type_mise_a_jour") !== null) {
3652     $type_mise_a_jour = $f->get_submitted_post_value("type_mise_a_jour");
3653     } elseif($f->get_submitted_get_value('type_mise_a_jour') !== null) {
3654     $type_mise_a_jour = $f->get_submitted_get_value('type_mise_a_jour');
3655     } else {
3656     $type_mise_a_jour = "";
3657     }
3658     if($f->get_submitted_post_value('date') !== null) {
3659     $date = $f->get_submitted_post_value('date');
3660     } elseif($f->get_submitted_get_value('date') !== null) {
3661     $date = $f->get_submitted_get_value('date');
3662     } else {
3663     $date = "";
3664     }
3665     if($f->get_submitted_post_value('code_barres') !== null) {
3666     $code_barres = $f->get_submitted_post_value('code_barres');
3667     } elseif($f->get_submitted_get_value('code_barres') !== null) {
3668     $code_barres = $f->get_submitted_get_value('code_barres');
3669     } else {
3670     $code_barres = "";
3671     }
3672     // Booléen permettant de définir si un enregistrement à eu lieu
3673     $correct = false;
3674     // Booléen permettant de définir si les dates peuvent êtres enregistrées
3675     $date_error = false;
3676     // Champs date à mettre à jour
3677     $liste_champs=array();
3678    
3679     // Si le formulaire a été validé
3680     if ($f->get_submitted_post_value('validation') !== null) {
3681     if(!empty($type_mise_a_jour) and !empty($date) and !empty($code_barres)) {
3682    
3683     //Vérification de l'existance de l'instruction
3684     $sql = "SELECT instruction FROM ".DB_PREFIXE."instruction WHERE code_barres='".$code_barres."'";
3685     $res = $f->db->query($sql);
3686     $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
3687     $f->isDatabaseError($res);
3688    
3689     if($res->numrows() == 1) {
3690     $liste_champs = explode(";", $type_mise_a_jour);
3691     // Mise à jour des dates après l'écran de verification
3692     if($f->get_submitted_post_value('is_valid') !== null and $f->get_submitted_post_value('is_valid') == "true") {
3693     require_once '../obj/instruction.class.php';
3694     $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
3695     $instr = new instruction($row['instruction'], $f->db, DEBUG);
3696     $valF = array();
3697     foreach($instr->champs as $id => $champ) {
3698     $valF[$champ] = $instr->val[$id];
3699     }
3700     $valF['date_evenement']=$instr->dateDBToForm($valF['date_evenement']);
3701     $valF['archive_date_complet']=$instr->dateDBToForm($valF['archive_date_complet']);
3702     $valF['archive_date_rejet']=$instr->dateDBToForm($valF['archive_date_rejet']);
3703     $valF['archive_date_limite']=$instr->dateDBToForm($valF['archive_date_limite']);
3704     $valF['archive_date_notification_delai']=$instr->dateDBToForm($valF['archive_date_notification_delai']);
3705     $valF['archive_date_decision']=$instr->dateDBToForm($valF['archive_date_decision']);
3706     $valF['archive_date_validite']=$instr->dateDBToForm($valF['archive_date_validite']);
3707     $valF['archive_date_achevement']=$instr->dateDBToForm($valF['archive_date_achevement']);
3708     $valF['archive_date_chantier']=$instr->dateDBToForm($valF['archive_date_chantier']);
3709     $valF['archive_date_conformite']=$instr->dateDBToForm($valF['archive_date_conformite']);
3710     $valF['archive_date_dernier_depot']=$instr->dateDBToForm($valF['archive_date_dernier_depot']);
3711     $valF['archive_date_limite_incompletude']=$instr->dateDBToForm($valF['archive_date_limite_incompletude']);
3712     $valF['date_finalisation_courrier']=$instr->dateDBToForm($valF['date_finalisation_courrier']);
3713     $valF['date_envoi_signature']=$instr->dateDBToForm($valF['date_envoi_signature']);
3714     $valF['date_retour_signature']=$instr->dateDBToForm($valF['date_retour_signature']);
3715     $valF['date_envoi_rar']=$instr->dateDBToForm($valF['date_envoi_rar']);
3716     $valF['date_retour_rar']=$instr->dateDBToForm($valF['date_retour_rar']);
3717     $valF['date_envoi_controle_legalite']=$instr->dateDBToForm($valF['date_envoi_controle_legalite']);
3718     $valF['date_retour_controle_legalite']=$instr->dateDBToForm($valF['date_retour_controle_legalite']);
3719    
3720     foreach(explode(";", $type_mise_a_jour) as $maj_date) {
3721     $valF[$maj_date]=$date;
3722     }
3723    
3724     // Vérification de la finalisation du document
3725     // correspondant au code barres
3726     if($valF["om_final_instruction"] === 't' or
3727     $valF["lettretype"] == '') {
3728     $code_barres = "";
3729    
3730     //Désactivation de l'autocommit
3731     $f->db->autoCommit(false);
3732    
3733     //On modifie les valeurs de l'instruction
3734     $retour = $instr->modifier($valF, $f->db, DEBUG);
3735    
3736     //Si une erreur s'est produite, on défait les modifications
3737     //qui ont été faites
3738     if (!$retour){
3739     $instr->undoValidation();
3740     }
3741     //Sinon, on valide en base de données les modifications
3742     else {
3743     $f->db->commit();
3744     }
3745    
3746     // Variable correct retourné depuis la classe instruction
3747     $correct = $instr->correct;
3748    
3749     // Si la modification sur l'instruction a échoué
3750     if ($correct === false) {
3751    
3752     // Message d'erreur de la classe instruction
3753     $error = $instr->msg;
3754     }
3755    
3756     } else {
3757     // Indique que le traitement est en erreur
3758     $correct = false;
3759     // Message d'erreur
3760     $error = sprintf(_("Le document n'est pas finalise."),
3761     "<span class='bold'>".$code_barres."</span>");
3762     }
3763     } else {
3764     // Récupération des infos du dossier
3765     $sqlInfo = "SELECT dossier.dossier_libelle,
3766     evenement.libelle as evenement,
3767     autorite_competente.code as autorite_competente_code,
3768     autorite_competente.libelle as autorite_competente,
3769     evenement.type as evenement_type,
3770     to_char(date_envoi_signature,'DD/MM/YYYY') as date_envoi_signature,
3771     to_char(date_retour_signature,'DD/MM/YYYY') as date_retour_signature,
3772     to_char(date_envoi_controle_legalite,'DD/MM/YYYY') as date_envoi_controle_legalite,
3773     to_char(date_retour_controle_legalite,'DD/MM/YYYY') as date_retour_controle_legalite,
3774     to_char(date_envoi_rar,'DD/MM/YYYY') as date_envoi_rar,
3775     to_char(date_retour_rar,'DD/MM/YYYY') as date_retour_rar
3776     FROM ".DB_PREFIXE."instruction
3777     INNER JOIN ".DB_PREFIXE."dossier ON
3778     dossier.dossier=instruction.dossier
3779     LEFT JOIN ".DB_PREFIXE."autorite_competente ON
3780     dossier.autorite_competente=autorite_competente.autorite_competente
3781     INNER JOIN ".DB_PREFIXE."evenement ON
3782     instruction.evenement=evenement.evenement
3783     WHERE code_barres='".$code_barres."'";
3784     $resInfo = $f->db->query($sqlInfo);
3785     $f->isDatabaseError($resInfo);
3786     $infos = $resInfo->fetchRow(DB_FETCHMODE_ASSOC);
3787    
3788     // Vérification de la non modification des dates de suivi
3789     foreach(explode(";", $type_mise_a_jour) as $champ) {
3790     if($infos[$champ] != "" AND $infos[$champ] != $date) {
3791     $error = _("Les dates de suivis ne peuvent etre modifiees");
3792     $date_error = true;
3793     }
3794     }
3795     }
3796     } else {
3797     $error = _("Le numero saisi ne correspond a aucun code barres d'instruction.");
3798     }
3799    
3800     } else {
3801     $error = _("Tous les champs doivent etre remplis.");
3802     }
3803     }
3804    
3805     /**
3806     * Affichage des messages et du formulaire
3807     */
3808     // Affichage du message de validation ou d'erreur
3809     if (isset($message) && isset($message_class) && $message != "") {
3810     $f->displayMessage($message_class, $message);
3811     }
3812     // Affichage du message d'erreur
3813     if(!empty($error)) {
3814     $f->displayMessage("error", $error);
3815     }
3816    
3817     // Affichage du message de validation de la saisie
3818     if($correct === true) {
3819     $f->displayMessage("ok", _("Saisie enregistree"));
3820     }
3821     // Inclusion de la classe de gestion des formulaires
3822     require_once "../obj/om_formulaire.class.php";
3823     // Ouverture du formulaire
3824     echo "\t<form";
3825     echo " method=\"post\"";
3826     echo " id=\"suivi_mise_a_jour_des_dates_form\"";
3827     echo " action=\"\"";
3828     echo ">\n";
3829     // Paramétrage des champs du formulaire
3830     if(isset($infos)) {
3831     $champs = array("type_mise_a_jour", "date", "code_barres", "dossier_libelle", "evenement"
3832     , "autorite_competente", "date_envoi_signature",
3833     "date_retour_signature", "date_envoi_controle_legalite",
3834     "date_retour_controle_legalite", "date_envoi_rar",
3835     "date_retour_rar", "is_valid");
3836     } else {
3837     $champs = array("type_mise_a_jour", "date", "code_barres");
3838     }
3839     // Création d'un nouvel objet de type formulaire
3840     $form = new formulaire(NULL, 0, 0, $champs);
3841     // Paramétrage des champs du formulaire
3842     // Parametrage du champ type_mise_a_jour
3843     $form->setLib("type_mise_a_jour", _("Date a mettre a jour")."* :");
3844     if(isset($infos)) {
3845     $form->setType("type_mise_a_jour", "selecthiddenstatic");
3846    
3847     } else {
3848     $form->setType("type_mise_a_jour", "select");
3849    
3850     }
3851     $form->setVal("type_mise_a_jour", $type_mise_a_jour);
3852     $contenu = array();
3853    
3854     $contenu[0][0] = "date_envoi_signature";
3855     $contenu[1][0] = _("date d'envoi pour signature Mairie/Prefet");
3856    
3857     $contenu[0][1] = "date_retour_signature";
3858     $contenu[1][1] = _("date de retour de signature Mairie/Prefet");
3859    
3860     $contenu[0][2] = "date_retour_signature;date_envoi_controle_legalite";
3861     $contenu[1][2] = _("date de retour de signature + Envoi controle legalite");
3862    
3863     $contenu[0][3] = "date_envoi_controle_legalite";
3864     $contenu[1][3] = _("date d'envoi au controle de legalite");
3865    
3866     $contenu[0][4] = "date_retour_controle_legalite";
3867     $contenu[1][4] = _("date de retour de controle de legalite");
3868    
3869     $contenu[0][5] = "date_retour_rar";
3870     $contenu[1][5] = _("date de retour de l'AR");
3871    
3872     $form->setSelect("type_mise_a_jour", $contenu);
3873    
3874     // Parametrage du champ date
3875     $form->setLib("date", _("Date")."* :");
3876     if(isset($infos)) {
3877     $form->setType("date", "hiddenstaticdate");
3878    
3879     } else {
3880     $form->setType("date", "date");
3881     }
3882     $form->setVal("date", $date);
3883     $form->setTaille("date", 10);
3884     $form->setMax("date", 10);
3885    
3886     // Parametrage du champ code_barres
3887     $form->setLib("code_barres", _("Code barres d'instruction")."* :");
3888     if(isset($infos)) {
3889     $form->setType("code_barres", "hiddenstatic");
3890     } else {
3891     $form->setType("code_barres", "text");
3892     }
3893     $form->setVal("code_barres", $code_barres);
3894     $form->setTaille("code_barres", 20);
3895     $form->setMax("code_barres", 20);
3896    
3897     // Ajout des infos du dossier correspondantes à l'instruction séléctionnée
3898     if(isset($infos)) {
3899    
3900     // Tous les champs sont défini par defaut à static
3901     foreach ($infos as $key => $value) {
3902     $form->setType($key, "static");
3903     if(in_array($key, $liste_champs)) {
3904     $form->setVal($key, $date);
3905     } else {
3906     $form->setVal($key, $value);
3907     }
3908     }
3909    
3910     // Les champs dont on viens de définir la valeur sont en gras
3911     foreach ($liste_champs as $value) {
3912     $form->setBloc($value,'DF',"",'bold');
3913     }
3914    
3915     // Parametrage du champ dossier
3916     $form->setLib("dossier_libelle", _("dossier_libelle")." :");
3917     $form->setType("dossier_libelle", "static");
3918     $form->setVal("dossier_libelle", $infos['dossier_libelle']);
3919    
3920     // Parametrage du champ evenement
3921     $form->setLib("evenement", _("evenement")." :");
3922     $form->setType("evenement", "static");
3923     $form->setVal("evenement", $infos['evenement']);
3924    
3925     // Parametrage du champ autorite_competente
3926     $form->setLib("autorite_competente", _("Autorite competente")." :");
3927     $form->setType("autorite_competente", "static");
3928     $form->setVal("autorite_competente", $infos['autorite_competente']);
3929    
3930     // Parametrage des libellés d'envoi avec RAR
3931     $form->setLib("date_envoi_rar", _("date_envoi_rar")." :");
3932     $form->setLib("date_retour_rar", _("date_retour_rar")." :");
3933    
3934     $form->setLib("date_envoi_signature", _("date_envoi_signature")." :");
3935     $form->setLib("date_retour_signature", _("date_retour_signature")." :");
3936     $form->setLib("date_envoi_controle_legalite", _("date_envoi_controle_legalite")." :");
3937     $form->setLib("date_retour_controle_legalite", _("date_retour_controle_legalite")." :");
3938     // Configuration des libellé en fonction de l'autorité compétente
3939     if($infos['autorite_competente_code'] == 'ETAT') {
3940     $form->setType("date_envoi_controle_legalite", "hiddendate");
3941     $form->setType("date_retour_controle_legalite", "hiddendate");
3942     }
3943    
3944     // Ajout d'un champ hidden permettant de savoir que le formulaire précédant est celui de vérification
3945     $form->setLib("is_valid", _("Valide")." :");
3946     $form->setType("is_valid", "hidden");
3947     $form->setVal("is_valid", 'true');
3948    
3949     $form->setFieldset('dossier_libelle','D',_('Synthese'));
3950     $form->setFieldset('is_valid','F');
3951    
3952     }
3953    
3954    
3955     // Création du fieldset regroupant les champs permettant la mise à jour des date
3956     $form->setFieldset('type_mise_a_jour','D',_('Mise a jour'));
3957     $form->setFieldset('code_barres','F');
3958     // Affichage du formulaire
3959     $form->entete();
3960     $form->afficher($champs, 0, false, false);
3961     $form->enpied();
3962     // Affichage du bouton
3963     echo "\t<div class=\"formControls\">\n";
3964     //
3965     if(!$date_error) {
3966     $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
3967     }
3968     // Si pas sur l'écran de validation
3969     if(isset($infos)) {
3970     echo "<a class=\"retour\" href=\"../scr/form.php?obj=instruction_suivi_mise_a_jour_des_dates&action=170&idx=0";
3971     echo "&amp;type_mise_a_jour=".$type_mise_a_jour."&amp;date=".$date."&amp;code_barres=".$code_barres;
3972     echo "\">Retour</a>";
3973     }
3974     echo "\t</div>\n";
3975     // Fermeture du formulaire
3976     echo "\t</form>\n";
3977     }
3978    
3979     /**
3980     * [view_pdf_lettre_rar description]
3981     *
3982     * @return [type] [description]
3983     */
3984     function view_pdf_lettre_rar() {
3985     // Vérification de l'accessibilité sur l'élément
3986     $this->checkAccessibility();
3987    
3988     // XXX APP
3989    
3990     $f = $this->f;
3991    
3992     $f->disableLog();
3993    
3994     if($f->get_submitted_get_value('liste') != null) {
3995     $listeCodeBarres = explode(',',$f->get_submitted_get_value('liste'));
3996    
3997     // Classe permettant la mise en page de l'édition pdf
3998     require_once "../obj/pdf_lettre_rar.class.php";
3999     $pdf_lettre_rar = new pdf_lettre_rar('P', 'mm', 'A4');
4000     // Initialisation de la mise en page
4001     $pdf_lettre_rar->init($f);
4002    
4003     foreach ($listeCodeBarres as $code_barres) {
4004    
4005     // Test si l'evenement est de type arrete et si un délégataire a été nommé
4006     $sql = "SELECT
4007     dossier.dossier_libelle,
4008     evenement.type,
4009     count(lien_dossier_demandeur) as nbdemandeur
4010     FROM ".DB_PREFIXE."instruction
4011     LEFT JOIN ".DB_PREFIXE."dossier
4012     ON instruction.dossier = dossier.dossier
4013     INNER JOIN ".DB_PREFIXE."evenement ON
4014     instruction.evenement=evenement.evenement
4015     inner JOIN ".DB_PREFIXE."lien_dossier_demandeur ON
4016     instruction.dossier=lien_dossier_demandeur.dossier
4017     inner join ".DB_PREFIXE."demandeur on
4018     demandeur.demandeur=lien_dossier_demandeur.demandeur
4019     WHERE code_barres='".$code_barres."'
4020     AND ((lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='petitionnaire')
4021     OR demandeur.type_demandeur='delegataire')
4022     GROUP BY dossier.dossier_libelle, evenement.type";
4023    
4024     $res = $f->db->query($sql);
4025     $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
4026     $f->isDatabaseError($res);
4027     $testDemandeur = $res->fetchrow(DB_FETCHMODE_ASSOC);
4028    
4029    
4030     // Recuperation de l'adresse de destination
4031     $sqlAdresse = "SELECT
4032     CASE WHEN demandeur.qualite = 'particulier' THEN
4033     trim(concat(pc.libelle,' ',demandeur.particulier_nom,' ',demandeur.particulier_prenom))
4034     WHEN demandeur.qualite = 'personne_morale' THEN
4035     trim(concat(demandeur.personne_morale_denomination))
4036     END as ligne1,
4037     trim(concat(demandeur.numero,' ',demandeur.voie)) as ligne2,
4038     CASE demandeur.complement
4039     WHEN null THEN ''
4040     ELSE trim(demandeur.complement)
4041     END as ligne3,
4042     CASE demandeur.lieu_dit
4043     WHEN null THEN ''
4044     ELSE trim(demandeur.lieu_dit)
4045     END as ligne4,
4046     trim(concat(demandeur.code_postal,' ',demandeur.localite,' ',demandeur.bp,' ',demandeur.cedex)) as ligne5,
4047     code_barres as code_barres
4048     FROM ".DB_PREFIXE."instruction
4049     INNER JOIN ".DB_PREFIXE."dossier ON dossier.dossier = instruction.dossier
4050     INNER JOIN ".DB_PREFIXE."lien_dossier_demandeur ON dossier.dossier = lien_dossier_demandeur.dossier
4051     INNER JOIN ".DB_PREFIXE."demandeur ON lien_dossier_demandeur.demandeur = demandeur.demandeur
4052     LEFT OUTER JOIN ".DB_PREFIXE."civilite as pc ON demandeur.particulier_civilite = pc.civilite
4053     WHERE instruction.code_barres ='".$code_barres."'";
4054    
4055     // Envoi pour delegataire ou petitionnaire principal selon le type d'evenement
4056     if($testDemandeur['type'] != 'arrete' AND $testDemandeur['nbdemandeur'] > 1) {
4057     $sqlAdresse .= " AND demandeur.type_demandeur='delegataire'";
4058     } else {
4059     $sqlAdresse .= " AND lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='petitionnaire'";
4060     }
4061    
4062     $resAdresse = $f->db->query($sqlAdresse);
4063     $adresse_dest = $resAdresse->fetchrow(DB_FETCHMODE_ASSOC);
4064     $f->addToLog(__METHOD__.": db->query(\"".$sqlAdresse."\")", VERBOSE_MODE);
4065     $f->isDatabaseError($resAdresse);
4066    
4067     // Création adresse destinataire sans ligne vide
4068     $adresse_destinataire = array();
4069     $adresse_destinataire[] = $adresse_dest['ligne1'];
4070     $adresse_destinataire[] = $adresse_dest['ligne2'];
4071     if (!empty($adresse_dest['ligne3'])) {
4072     $adresse_destinataire[] = $adresse_dest['ligne3'];
4073     }
4074     if (!empty($adresse_dest['ligne4'])) {
4075     $adresse_destinataire[] = $adresse_dest['ligne4'];
4076     }
4077     $adresse_destinataire[] = $adresse_dest['ligne5'];
4078    
4079     // Création du champ specifique
4080     $specifique_content = array();
4081     $specifique_content[] = $adresse_dest['ligne1'];
4082     $specifique_content[] = $testDemandeur['dossier_libelle'];
4083     $specifique_content[] = "|||||".$adresse_dest['code_barres']."|||||";
4084     unset($adresse_dest['code_barres']);
4085    
4086     // Ajout d'une page aux pdf
4087     $pdf_lettre_rar->addLetter($adresse_destinataire, $specifique_content);
4088    
4089     }
4090     $pdf_lettre_rar->output("lettre_rar".date("dmYHis").".pdf","D");
4091     }
4092     }
4093    
4094 fraynaud 3 }// fin classe
4095 atreal 208 ?>

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26