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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3972 - (hide annotations)
Thu Apr 14 15:41:02 2016 UTC (8 years, 9 months ago) by nmeucci
File size: 214456 byte(s)
Amélioration r3971

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26