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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3876 - (hide annotations)
Thu Apr 7 13:25:59 2016 UTC (8 years, 9 months ago) by nmeucci
File size: 211674 byte(s)
* Ajout du log des événements d'instruction dans leur DI

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26