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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4108 - (hide annotations)
Wed May 11 10:26:54 2016 UTC (8 years, 8 months ago) by nmeucci
File size: 222132 byte(s)
Nouvelle action sur l'instruction permettant de notifier par mail les communes.

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26