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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26