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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3892 - (hide annotations)
Fri Apr 8 13:48:30 2016 UTC (8 years, 9 months ago) by fmichon
File size: 211020 byte(s)
Merge de la branche de correctif 'merge_3.14.x' :
* Correction - Les métadonnées des fichiers enregistrés sur le filestorage sont
  désormais correctes.
* Correction - Lorsque l'avis d'une consultation est automatiquement passé à
  tacite, le champ "lu" est désormais positionné à non lu. Cela permet de
  l'afficher dans le widget "consultation" du tableau de bord de l'instructeur.
* Correction - L'aide à la saisie sur le formulaire des pétitionnaires et des
  architectes permettant de chercher dans les "fréquents" prends en compte
  désormais le caractère '*' dans la chaîne recherchée.

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26