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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 8640 - (hide annotations)
Wed Mar 27 11:49:05 2019 UTC (5 years, 10 months ago) by softime
File size: 278893 byte(s)
* Merge de la branche d'intégration 4.11.0-develop dans le trunk

1 mbroquet 3730 <?php
2     /**
3 softime 7996 * DBFORM - 'instruction' - Surcharge gen.
4     *
5 mbroquet 3730 * specific :
6     * - cle secondaire
7     * destruction autorisée que pour le dernier evenement
8     * [delete the last event ]
9     * - variable globale [global variables]
10     * var $retourformulaire;
11     * var $idxformulaire;
12     * - modification des données dans dossier trigger avant
13     * [modify dossier data with trigger function]
14     * - function mois_date : pour ajouter des mois a une date
15     * [add months (delay) and calculation final date]
16     * - voir script_lang.js : bible ...
17 softime 7996 *
18 mbroquet 3730 * @package openfoncier
19 nhaye 5254 * @version SVN : $Id$
20 mbroquet 3730 */
21    
22     //
23     require_once "../gen/obj/instruction.class.php";
24    
25     //
26     class instruction extends instruction_gen {
27    
28     // Champs contenant les UID des fichiers
29     var $abstract_type = array(
30     "om_fichier_instruction" => "file",
31     );
32    
33     var $retourformulaire; // specific
34     var $idxformulaire; // specific
35     var $valEvenement;
36     var $restriction_valid = null;
37     // Tableau contenant une partie des métadonnées arrêtés
38     var $metadonneesArrete;
39    
40 fmichon 3892 /**
41     * Instance de la classe dossier
42     *
43     * @var mixed
44     */
45     var $inst_dossier = null;
46    
47 softime 5169 /**
48     * Instance de la classe instructeur
49     *
50     * @var mixed
51     */
52     var $inst_instructeur = null;
53    
54     /**
55     * Instance de la classe om_utilisateur
56     *
57     * @var mixed
58     */
59     var $inst_om_utilisateur = null;
60    
61 mbroquet 3730 var $metadata = array(
62     "om_fichier_instruction" => array(
63     "dossier" => "getDossier",
64     "dossier_version" => "getDossierVersion",
65     "numDemandeAutor" => "getNumDemandeAutor",
66     "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
67     "typeInstruction" => "getTypeInstruction",
68     "statutAutorisation" => "getStatutAutorisation",
69     "typeAutorisation" => "getTypeAutorisation",
70     "dateEvenementDocument" => "getDateEvenementDocument",
71     "groupeInstruction" => 'getGroupeInstruction',
72     "title" => 'getTitle',
73 softime 6272 'concerneERP' => 'get_concerne_erp',
74 mbroquet 3730 ),
75     "arrete" => array(
76     "numArrete" => "getNumArrete",
77     "ReglementaireArrete" => "getReglementaireArrete",
78     "NotificationArrete" => "getNotificationArrete",
79     "dateNotificationArrete" => "getDateNotificationArrete",
80     "controleLegalite" => "getControleLegalite",
81     "dateSignature" => "getDateSignature",
82     "nomSignataire" => "getNomSignataire",
83     "qualiteSignataire" => "getQualiteSignataire",
84     "ap_numRue" => "getAp_numRue",
85     "ap_nomDeLaVoie" => "getAp_nomDeLaVoie",
86     "ap_codePostal" => "getAp_codePostal",
87     "ap_ville" => "getAp_ville",
88     "activite" => "getActivite",
89     "dateControleLegalite" => "getDateControleLegalite",
90     ),
91     );
92    
93     // {{{ Gestion de la confidentialité des données spécifiques
94    
95     /**
96     * Définition des actions disponibles sur la classe.
97     *
98     * @return void
99     */
100     function init_class_actions() {
101    
102     parent::init_class_actions();
103    
104     // ACTION - 000 - ajouter
105     // Modifie la condition d'affichage du bouton ajouter
106 softime 6565 $this->class_actions[0]["condition"] = array("is_addable", "can_user_access_dossier_contexte_ajout");
107 mbroquet 3730
108     // ACTION - 001 - modifier
109     // Modifie la condition et le libellé du bouton modifier
110 softime 6565 $this->class_actions[1]["condition"] = array(
111     "is_editable",
112     "is_finalizable_without_bypass",
113     "can_user_access_dossier_contexte_modification",
114     );
115 mbroquet 3730 $this->class_actions[1]["portlet"]["libelle"] = _("Modifier");
116    
117     // ACTION - 002 - supprimer
118     // Modifie la condition et le libellé du bouton supprimer
119 softime 6565 $this->class_actions[2]["condition"] = array(
120     "is_deletable",
121     "is_finalizable_without_bypass",
122     "can_user_access_dossier_contexte_modification"
123     );
124 mbroquet 3730 $this->class_actions[2]["portlet"]["libelle"] = _("Supprimer");
125    
126 softime 6565 // ACTION - 003 - consulter
127     //
128     $this->class_actions[3]["condition"] = "can_user_access_dossier_contexte_modification";
129    
130 mbroquet 3730 // ACTION - 100 - finaliser
131     // Finalise l'enregistrement
132     $this->class_actions[100] = array(
133     "identifier" => "finaliser",
134     "portlet" => array(
135     "type" => "action-direct",
136     "libelle" => _("Finaliser le document"),
137     "order" => 110,
138     "class" => "finalise",
139     ),
140     "view" => "formulaire",
141     "method" => "finalize",
142     "button" => "finaliser",
143     "permission_suffix" => "finaliser",
144 softime 6565 "condition" => array(
145     "is_finalizable",
146     "is_finalizable_without_bypass",
147     "has_an_edition",
148     "can_user_access_dossier_contexte_modification",
149     ),
150 mbroquet 3730 );
151    
152     // ACTION - 110 - definaliser
153     // Finalise l'enregistrement
154     $this->class_actions[110] = array(
155     "identifier" => "definaliser",
156     "portlet" => array(
157     "type" => "action-direct",
158     "libelle" => _("Reprendre la redaction du document"),
159     "order" => 110,
160     "class" => "definalise",
161     ),
162     "view" => "formulaire",
163     "method" => "unfinalize",
164     "button" => "definaliser",
165     "permission_suffix" => "definaliser",
166 softime 6565 "condition" => array(
167     "is_unfinalizable",
168     "is_unfinalizable_without_bypass",
169     "can_user_access_dossier_contexte_modification",
170     ),
171 mbroquet 3730 );
172    
173     // ACTION - 120 - edition
174     // Affiche l'édition
175     $this->class_actions[120] = array(
176     "identifier" => "edition",
177     "portlet" => array(
178     "type" => "action-blank",
179     "libelle" => _("Edition"),
180     "order" => 100,
181     "class" => "pdf-16",
182     ),
183     "view" => "view_edition",
184 softime 6565 "condition" => array("has_an_edition", "can_user_access_dossier_contexte_modification"),
185 mbroquet 3730 "permission_suffix" => "om_fichier_instruction_telecharger",
186     );
187    
188     // ACTION - 125 - modifier_suivi
189     // Suivi des dates
190     $this->class_actions[125] = array(
191     "identifier" => "modifier_suivi",
192     "portlet" => array(
193     "type" => "action-self",
194     "libelle" => _("Suivi des dates"),
195     "order" => 125,
196     "class" => "suivi-dates-16",
197     ),
198     "crud" => "update",
199 softime 6565 "condition" => array("can_monitoring_dates", "can_user_access_dossier_contexte_modification"),
200 mbroquet 3730 "permission_suffix" => "modification_dates",
201     );
202    
203     // ACTION - 130 - bible
204     // Affiche la bible
205     $this->class_actions[130] = array(
206     "identifier" => "bible",
207     "view" => "view_bible",
208     "permission_suffix" => "modifier",
209     );
210    
211     // ACTION - 140 - bible_auto
212     // Active la bible automatique
213     $this->class_actions[140] = array(
214     "identifier" => "bible_auto",
215     "view" => "view_bible_auto",
216     "permission_suffix" => "modifier",
217     );
218    
219     // ACTION - 150 - suivi_bordereaux
220     // Imprimer un bordereau d'envoi
221     $this->class_actions[150] = array(
222     "identifier" => "suivi_bordereaux",
223     "view" => "view_suivi_bordereaux",
224     "permission_suffix" => "consulter",
225     );
226    
227     // ACTION - 160 - suivi_envoi_lettre_rar
228     // Imprimer un bordereau d'envoi
229     $this->class_actions[160] = array(
230     "identifier" => "suivi_envoi_lettre_rar",
231     "view" => "view_suivi_envoi_lettre_rar",
232     "permission_suffix" => "consulter",
233     );
234    
235     // ACTION - 170 - suivi_mise_a_jour_des_dates
236     // Mettre à jour les dates de l'instruction
237     $this->class_actions[170] = array(
238     "identifier" => "suivi_mise_a_jour_des_dates",
239     "view" => "view_suivi_mise_a_jour_des_dates",
240     "permission_suffix" => "consulter",
241     );
242    
243     // ACTION - 180 - pdf_lettre_rar
244     // Génère PDF sur bordereaux de lettres RAR
245     $this->class_actions[180] = array(
246     "identifier" => "pdf_lettre_rar",
247     "view" => "view_pdf_lettre_rar",
248     "permission_suffix" => "consulter",
249     );
250    
251     // ACTION - 190 - bordereau_envoi_maire
252     // Formulaire pour générer le bordereau d'envoi au maire
253     // Met à jour la date d'envoi à signature du maire
254     $this->class_actions[190] = array(
255     "identifier" => "bordereau_envoi_maire",
256     "view" => "view_bordereau_envoi_maire",
257     "permission_suffix" => "bordereau_envoi_maire",
258     );
259    
260     // ACTION - 200 - generate_bordereau_envoi_maire
261     // Génère PDF bordereau d'envoi au maire
262     $this->class_actions[200] = array(
263     "identifier" => "generate_bordereau_envoi_maire",
264     "view" => "view_generate_bordereau_envoi_maire",
265     "permission_suffix" => "bordereau_envoi_maire",
266     );
267 nmeucci 4108
268     // ACTION - 210 - notifier_commune
269     // Notifie la commune par mail d'un évément d'instruction finalisé
270     $this->class_actions[210] = array(
271     "identifier" => "notifier_commune",
272     "portlet" => array(
273     "type" => "action-direct-with-confirmation",
274     "libelle" => _("Notifier la commune par courriel"),
275     "order" => 210,
276     "class" => "notifier_commune-16",
277     ),
278     "view" => "formulaire",
279     "method" => "notifier_commune",
280     "permission_suffix" => "notifier_commune",
281 softime 6565 "condition" => array("is_notifiable", "can_user_access_dossier_contexte_modification"),
282 nmeucci 4108 );
283 nmeucci 4317
284     // ACTION - 220 - generate_suivi_bordereaux
285     // GénÚre PDF bordereaux
286     $this->class_actions[220] = array(
287     "identifier" => "generate_suivi_bordereaux",
288     "view" => "view_generate_suivi_bordereaux",
289 softime 6565 "permission_suffix" => "consulter",
290     );
291 softime 7521
292     // ACTION - 777 - pdf_temp
293     // Crée un PDF temporaire et affiche son contenu en base64
294     $this->class_actions[777] = array(
295     "identifier" => "pdf_temp",
296     "view" => "view_pdf_temp",
297     "permission_suffix" => "modifier",
298     "condition" => array("can_user_access_dossier_contexte_modification"),
299     );
300 softime 8593
301     // ACTION - 701
302     $this->class_actions[701] = array(
303     "identifier" => "enable-edition-integrale",
304     "portlet" => array(
305     "type" => "action-direct-with-confirmation",
306     "libelle" => _("Rédaction libre"),
307     "order" => 50,
308     "class" => "redac-libre-16",
309     ),
310     "view" => "formulaire",
311     "method" => "enable_edition_integrale",
312     "permission_suffix" => "modifier",
313     "condition" => array(
314     "is_editable",
315     "is_finalizable_without_bypass",
316     "can_user_access_dossier_contexte_modification",
317     "is_edition_integrale_not_enabled",
318     "is_option_redaction_libre_enabled",
319     "has_an_edition",
320     ),
321     );
322     // ACTION - 702
323     $this->class_actions[702] = array(
324     "identifier" => "disable-edition-integrale",
325     "portlet" => array(
326     "type" => "action-direct-with-confirmation",
327     "libelle" => _("Rédaction par compléments"),
328     "order" => 50,
329     "class" => "redac-complement-16",
330     ),
331     "view" => "formulaire",
332     "method" => "disable_edition_integrale",
333     "permission_suffix" => "modifier",
334     "condition" => array(
335     "is_editable",
336     "is_finalizable_without_bypass",
337     "can_user_access_dossier_contexte_modification",
338     "is_edition_integrale_enabled",
339     "is_option_redaction_libre_enabled",
340     "has_an_edition",
341     ),
342     );
343     // ACTION - 300 - evenement_has_an_edition_json
344     //
345     $this->class_actions[300] = array(
346     "identifier" => "evenement_has_an_edition_json",
347     "view" => "view_evenement_has_an_edition_json",
348     "permission_suffix" => "consulter",
349     );
350 mbroquet 3730 }
351    
352 softime 8593 /**
353     * CONDITION - is_edition_integrale_enabled
354     *
355     * Vérifie que la rédaction libre est activée sur l'instruction en cours.
356     *
357     * @return boolean
358     */
359     function is_edition_integrale_enabled() {
360     if ($this->getVal("flag_edition_integrale") == 't') {
361     return true;
362     }
363     return false;
364     }
365 mbroquet 3730
366     /**
367 softime 8593 * CONDITION - is_edition_integrale_not_enabled
368     *
369     * Vérifie que la rédaction libre est désactivée sur l'instruction en cours.
370     *
371     * @return boolean
372     */
373     function is_edition_integrale_not_enabled() {
374     return !$this->is_edition_integrale_enabled();
375     }
376    
377     /**
378     * CONDITION - is_option_redaction_libre_enabled
379     *
380     * Vérifie que l'option de rédaction libre est activée.
381     *
382     * @return boolean
383     */
384     function is_option_redaction_libre_enabled() {
385     $collectivite_di = $this->get_dossier_instruction_om_collectivite();
386     return $this->f->is_option_redaction_libre_enabled($collectivite_di);
387     }
388    
389     /**
390     * TREATMENT - disable_edition_integrale.
391     *
392     * Cette methode permet de passer la consultation en "lu"
393     *
394     * @return boolean true si maj effectué false sinon
395     */
396     function disable_edition_integrale() {
397     // Cette méthode permet d'exécuter une routine en début des méthodes
398     // dites de TREATMENT.
399     $this->begin_treatment(__METHOD__);
400     $this->correct = true;
401     $valF = array(
402     "flag_edition_integrale" => false,
403     "titre_om_htmletat" => null,
404     "corps_om_htmletatex" => null,
405     );
406     $res = $this->f->db->autoExecute(
407     DB_PREFIXE.$this->table,
408     $valF,
409     DB_AUTOQUERY_UPDATE,
410     $this->clePrimaire."=".$this->getVal($this->clePrimaire)
411     );
412     if ($this->f->isDatabaseError($res, true)) {
413     // Appel de la methode de recuperation des erreurs
414     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
415     $this->correct = false;
416     // Termine le traitement
417     return $this->end_treatment(__METHOD__, false);
418     } else {
419     $this->addToMessage(_("Rédaction par compléments activé."));
420     return $this->end_treatment(__METHOD__, true);
421     }
422    
423     // Termine le traitement
424     return $this->end_treatment(__METHOD__, false);
425     }
426    
427     /**
428     * TREATMENT - enable_edition_integrale.
429     *
430     * Cette methode permet de passer la consultation en "lu"
431     *
432     * @return boolean true si maj effectué false sinon
433     */
434     function enable_edition_integrale() {
435     // Cette méthode permet d'exécuter une routine en début des méthodes
436     // dites de TREATMENT.
437     $this->begin_treatment(__METHOD__);
438     $this->correct = true;
439    
440     // Récupère la collectivite du dossier d'instruction
441     $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
442     $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
443     //
444     $params = array(
445     "specific" => array(
446     "corps" => array(
447     "mode" => "get",
448     )
449     ),
450     );
451     $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'), $collectivite, null, $params);
452     $corps = $result['pdf_output'];
453     //
454     $params = array(
455     "specific" => array(
456     "titre" => array(
457     "mode" => "get",
458     )
459     ),
460     );
461     $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'), $collectivite, null, $params);
462     $titre = $result['pdf_output'];
463     //
464     $valF = array(
465     "flag_edition_integrale" => true,
466     "titre_om_htmletat" => $titre,
467     "corps_om_htmletatex" => $corps,
468     );
469     $res = $this->f->db->autoExecute(
470     DB_PREFIXE.$this->table,
471     $valF,
472     DB_AUTOQUERY_UPDATE,
473     $this->clePrimaire."=".$this->getVal($this->clePrimaire)
474     );
475     if ($this->f->isDatabaseError($res, true)) {
476     // Appel de la methode de recuperation des erreurs
477     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
478     $this->correct = false;
479     // Termine le traitement
480     return $this->end_treatment(__METHOD__, false);
481     } else {
482     $this->addToMessage(_("Rédaction libre activé."));
483     return $this->end_treatment(__METHOD__, true);
484     }
485    
486     // Termine le traitement
487     return $this->end_treatment(__METHOD__, false);
488     }
489    
490     /**
491 mbroquet 3730 * Cette méthode permet de récupérer le dossier d'autorisation d'un dossier
492     */
493     function getNumDemandeAutorFromDossier($id) {
494     //
495     if (!isset($id)) {
496     return NULL;
497     }
498     //
499     $sql = "select dossier_autorisation from ".DB_PREFIXE."dossier ";
500     $sql .= " where dossier='".$id."'";
501     //
502     $dossier_autorisation = $this->db->getOne($sql);
503     $this->addToLog("getNumDemandeAutorFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
504     database::isError($dossier_autorisation);
505     //
506     return $dossier_autorisation;
507     }
508    
509     // }}}
510    
511     function setType(&$form, $maj) {
512 softime 8593 // Récupération du mode de l'action
513     $crud = $this->get_action_crud($maj);
514     // Récupère la collectivité du dossier d'instruction
515     $collectivite_di = $this->get_dossier_instruction_om_collectivite();
516 mbroquet 3730
517 softime 8593 // Cache tous les champs
518     foreach ($this->champs as $value) {
519     $form->setType($value, 'hidden');
520     }
521 softime 6565
522 softime 8593 // MODE AJOUTER
523     if ($this->getParameter('maj') == 0) {
524     $form->setType("date_evenement", "date");
525     if ($this->is_in_context_of_foreign_key("evenement", $this->retourformulaire)) {
526     $form->setType("evenement", "selecthiddenstatic");
527     } else {
528     $form->setType("evenement", "select");
529     }
530     if ($this->is_in_context_of_foreign_key("signataire_arrete", $this->retourformulaire)) {
531     $form->setType("signataire_arrete", "selecthiddenstatic");
532     } else {
533     $form->setType("signataire_arrete", "select");
534     }
535     if ($this->is_option_redaction_libre_enabled() === true) {
536     $form->setType("flag_edition_integrale", "select");
537     }
538 mbroquet 3730 }
539    
540 softime 8593 // MODE MODIFIER
541     if ($this->getParameter('maj') == 1) {
542     $form->setType("date_evenement", "date");
543     $form->setType("evenement", "selecthiddenstatic");
544     if ($this->has_an_edition() === true) {
545     $form->setType('lettretype', 'hiddenstatic');
546     if ($this->is_in_context_of_foreign_key("signataire_arrete", $this->retourformulaire)) {
547     $form->setType("signataire_arrete", "selecthiddenstatic");
548     } else {
549     $form->setType("signataire_arrete", "select");
550     }
551     if ($this->getVal("flag_edition_integrale") == "t") {
552     $form->setType("titre_om_htmletat", "htmlEtat");
553     $form->setType("corps_om_htmletatex", "htmlEtatEx");
554     } else {
555     $form->setType("complement_om_html", "html");
556     $form->setType("complement2_om_html", "html");
557     $form->setType("complement3_om_html", "html");
558     $form->setType("complement4_om_html", "html");
559     $form->setType('bible_auto', 'httpclick');
560     $form->setType('bible', 'httpclick');
561     $form->setType('bible2', 'httpclick');
562     $form->setType('bible3', 'httpclick');
563     $form->setType('bible4', 'httpclick');
564     }
565     if ($this->f->is_option_preview_pdf_enabled($collectivite_di) === true) {
566     //
567     $form->setType('btn_refresh', 'httpclickbutton');
568     $form->setType('btn_preview', 'httpclickbutton');
569     $form->setType('btn_redaction', 'httpclickbutton');
570 softime 7521 $form->setType('live_preview', 'pdf');
571     }
572 softime 8593
573 mbroquet 3730 // necessaire pour calcul de date en modification
574     //$form->setType('delai', 'hiddenstatic');
575     // les administrateurs technique et fonctionnel peuvent
576     // modifier tous les champs de date
577     // si l'instruction a déjà été finalisée au moins une fois
578 softime 7996 if (($this->f->isAccredited(array($this->get_absolute_class_name(), $this->get_absolute_class_name()."modification_dates"), "OR")
579 softime 6565 || $this->f->isAccredited(array('instruction', 'instruction_modification_dates'), "OR"))
580 mbroquet 3730 && $this->getVal("date_finalisation_courrier") != '') {
581 softime 8593 //
582 mbroquet 3730 $form->setType('date_envoi_signature', 'date');
583     $form->setType('date_retour_signature', 'date');
584     $form->setType('date_envoi_rar', 'date');
585     $form->setType('date_retour_rar', 'date');
586     $form->setType('date_envoi_controle_legalite', 'date');
587     $form->setType('date_retour_controle_legalite', 'date');
588     $form->setType('date_finalisation_courrier', 'date');
589     }
590     }
591     }
592    
593 softime 8593 // MODE CONSULTER + SUPPRIMER + SUIVI DES DATES 125
594     if ($this->getParameter('maj') == 3
595     || $this->getParameter('maj') == 2
596     || $this->getParameter('maj') == 125) {
597     //
598     $form->setType("date_evenement", "datestatic");
599     $form->setType("evenement", "selecthiddenstatic");
600     if ($this->has_an_edition() === true) {
601     $form->setType('lettretype', 'hiddenstatic');
602     $form->setType("signataire_arrete", "selecthiddenstatic");
603     if ($this->getVal("om_final_instruction") == 't') {
604     $form->setType('om_final_instruction_utilisateur', 'textareastatic');
605     } else {
606     $form->setType('om_final_instruction_utilisateur', 'hidden');
607     }
608     }
609 mbroquet 3730 }
610    
611 softime 8593 // MODE CONSULTER + SUPPRIMER
612     if ($this->getParameter('maj') == 3 || $this->getParameter('maj') == 2) {
613     if ($this->has_an_edition() === true) {
614     if ($this->getVal("flag_edition_integrale") == "t") {
615     $form->setType("titre_om_htmletat", "htmlstatic");
616     $form->setType("corps_om_htmletatex", "htmlstatic");
617     } else {
618     $form->setType("complement_om_html", "htmlstatic");
619     $form->setType("complement2_om_html", "htmlstatic");
620     $form->setType("complement3_om_html", "htmlstatic");
621     $form->setType("complement4_om_html", "htmlstatic");
622     }
623 mbroquet 3730 }
624 softime 8593 $form->setType('date_envoi_signature', 'datestatic');
625     $form->setType('date_retour_signature', 'datestatic');
626     $form->setType('date_envoi_rar', 'datestatic');
627     $form->setType('date_retour_rar', 'datestatic');
628     $form->setType('date_envoi_controle_legalite', 'datestatic');
629     $form->setType('date_retour_controle_legalite', 'datestatic');
630     $form->setType('date_finalisation_courrier', 'datestatic');
631 mbroquet 3730 }
632 softime 8593
633     // MODE SUIVI DES DATES 125
634     if ($this->getParameter('maj') == 125) {
635     $form->setType("date_evenement", "hiddenstaticdate");
636     $form->setType('om_final_instruction_utilisateur', 'hiddenstatic');
637     $form->setType('date_envoi_signature', 'date');
638     $form->setType('date_retour_signature', 'date');
639     $form->setType('date_envoi_rar', 'date');
640     $form->setType('date_retour_rar', 'date');
641     $form->setType('date_envoi_controle_legalite', 'date');
642     $form->setType('date_retour_controle_legalite', 'date');
643     $form->setType('date_finalisation_courrier', 'date');
644     }
645 mbroquet 3730 }
646    
647 softime 8593 function setOnchange(&$form,$maj){
648     parent::setOnchange($form,$maj);
649    
650     // MODE AJOUTER
651     if ($this->getParameter('maj') == 0) {
652     $form->setOnchange("evenement", "manage_instruction_evenement_lettretype(this.value, '".addslashes($this->getParameter('idxformulaire'))."');");
653     }
654     }
655    
656     function evenement_has_an_edition($evenement_id) {
657     $evenement = $this->get_inst_evenement($evenement_id);
658     $lettretype = $evenement->getVal('lettretype');
659     if ($lettretype !== '' && $lettretype !== null) {
660     return true;
661     }
662     return false;
663     }
664    
665     function view_evenement_has_an_edition_json() {
666     $json_return = array(
667     "lettretype" => $this->evenement_has_an_edition($this->f->get_submitted_get_value('evenement_id')),
668     "option_redaction_libre_enabled" => $this->is_option_redaction_libre_enabled(),
669     );
670     echo json_encode($json_return);
671     }
672    
673 softime 6929 function setSelect(&$form, $maj, &$db = null, $debug = null) {
674 mbroquet 3730 /**
675     * On ne surcharge pas la méthode parent car une requête sur la table
676     * dossier est mauvaise pour les performances, car la requête qui
677     * concerne evenement est plus complexe que celle générée et car les
678     * champs action, avis_decision et etat ne sont pas utilisés comme des
679     * select
680     */
681     if(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php"))
682     include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php");
683     elseif(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc"))
684     include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc");
685    
686     //// action
687     //$this->init_select($form, $db, $maj, $debug, "action",
688     // $sql_action, $sql_action_by_id, false);
689    
690     //// avis_decision
691     //$this->init_select($form, $db, $maj, $debug, "avis_decision",
692     // $sql_avis_decision, $sql_avis_decision_by_id, false);
693    
694     //// dossier
695     //$this->init_select($form, $db, $maj, $debug, "dossier",
696     // $sql_dossier, $sql_dossier_by_id, false);
697    
698     //// etat
699     //$this->init_select($form, $db, $maj, $debug, "etat",
700     // $sql_etat, $sql_etat_by_id, false);
701    
702     //// evenement
703     //$this->init_select($form, $db, $maj, $debug, "evenement",
704     // $sql_evenement, $sql_evenement_by_id, false);
705    
706     // signataire_arrete
707     // si contexte DI
708     if ($this->getParameter("retourformulaire") == "dossier"
709     || $this->getParameter("retourformulaire") == "dossier_instruction"
710     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
711     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
712     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
713 softime 6565 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures"
714     || $this->getParameter("retourformulaire") == "dossier_contentieux_mes_infractions"
715     || $this->getParameter("retourformulaire") == "dossier_contentieux_toutes_infractions"
716     || $this->getParameter("retourformulaire") == "dossier_contentieux_mes_recours"
717     || $this->getParameter("retourformulaire") == "dossier_contentieux_tous_recours") {
718 mbroquet 3730 // on recupère les signataires de la multicollectivité et de celle du DI
719 softime 7996 $di = $this->f->get_inst__om_dbform(array(
720     "obj" => "dossier_instruction",
721     "idx" => $this->getParameter('idxformulaire'),
722     ));
723 mbroquet 3730 $sql_signataire_arrete_by_di = str_replace('<collectivite_di>', $di->getVal("om_collectivite"), $sql_signataire_arrete_by_di);
724     $this->init_select($form, $db, $maj, $debug, "signataire_arrete",
725     $sql_signataire_arrete_by_di, $sql_signataire_arrete_by_id, true);
726     } else {
727     $this->init_select($form, $db, $maj, $debug, "signataire_arrete",
728     $sql_signataire_arrete, $sql_signataire_arrete_by_id, true);
729     }
730    
731     /**
732     * Gestion du filtre sur les événements de workflow disponibles
733     * On récupère ici en fonction de l'état du dossier d'instruction en
734     * cours et du type du dossier d'instruction en cours la liste
735     * événements disponibles.
736     */
737     if ($maj == 0) {
738     // Récupération des événements par une jointure entre la table dossier
739     // et la table transition et la table evenement et la table
740     // lien_dossier_instruction_type_evenement en fonction de l'identifiant
741     // du dossier d'instruction en cours
742     $sql = "SELECT
743     evenement.evenement,
744     evenement.libelle as lib
745     FROM ".DB_PREFIXE."dossier
746     INNER JOIN ".DB_PREFIXE."lien_dossier_instruction_type_evenement
747     ON dossier.dossier_instruction_type=lien_dossier_instruction_type_evenement.dossier_instruction_type
748     INNER JOIN ".DB_PREFIXE."evenement
749     ON evenement.evenement=lien_dossier_instruction_type_evenement.evenement
750     INNER JOIN ".DB_PREFIXE."transition
751     ON evenement.evenement = transition.evenement
752     AND dossier.etat=transition.etat
753     WHERE dossier.dossier='".$this->idxformulaire."' ";
754    
755     // Si changement de décision par instructeur commune
756     if($this->f->isUserInstructeur() === true
757 softime 6565 && $this->getDivisionFromDossier($this->idxformulaire) != $_SESSION["division"]
758     && $this->isInstrCanChangeDecision($this->idxformulaire) === true) {
759 mbroquet 3730 $sql .= "AND evenement.type IN ('arrete', 'changement_decision') ";
760     }
761     $sql .= "ORDER BY evenement.libelle, evenement.action";
762     $res = $db->query($sql);
763     $this->addToLog("setSelect(): db->query(\"".$sql."\");", VERBOSE_MODE);
764     if (database::isError($res)) {
765     die($res->getMessage());
766     }
767     // Remplissage du tableau du select
768     $contenu = array(
769     0 => array("",),
770     1 => array(_('choisir')." "._('evenement'),)
771     );
772     while ($row=& $res->fetchRow()) {
773     $contenu[0][] = $row[0];
774     $contenu[1][] = $row[1];
775     }
776     $form->setSelect("evenement", $contenu);
777 softime 8593
778 mbroquet 3730 } else {
779     $sql = "SELECT
780     evenement.libelle as lib
781     FROM ".DB_PREFIXE."evenement
782     WHERE evenement.evenement=".$this->getVal("evenement")."";
783     $res = $db->getone($sql);
784     $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
785     if (database::isError($res)) {
786     die($res->getMessage());
787     }
788     //
789     $contenu = array(
790     0 => array($this->getVal("evenement"),),
791     1 => array($res,)
792     );
793     $form->setSelect("evenement", $contenu);
794     }
795    
796     /**
797     * Gesion des liens vers la bible
798     */
799     // lien bible_auto
800     $contenu = array(_("automatique"));
801     $form->setSelect("bible_auto",$contenu);
802     // lien bible1
803     $contenu = array(_("bible"));
804     $form->setSelect("bible",$contenu);
805     // lien bible2
806     $contenu = array(_("bible"));
807     $form->setSelect("bible2",$contenu);
808     // lien bible3
809     $contenu = array(_("bible"));
810     $form->setSelect("bible3",$contenu);
811     // lien bible4
812     $contenu = array(_("bible"));
813     $form->setSelect("bible4",$contenu);
814 softime 7521
815     if ($maj == 1) {
816     $base64 = $this->init_pdf_temp();
817     $form->setSelect('live_preview', array('base64'=>$base64));
818 softime 8593 $form->setSelect("btn_refresh", array(_('Prévisualiser')));
819     $form->setSelect("btn_preview", array(_('Prévisualiser >>')));
820     $form->setSelect("btn_redaction", array(_('<< Rédiger')));
821 softime 7521 }
822 softime 8593
823     // Selection du type de rédaction à l'ajout
824     $content = array(
825     0 => array('f', 't', ),
826     1 => array(_('Rédaction par compléments'), _('Rédaction libre'), ),
827     );
828     $form->setSelect('flag_edition_integrale', $content);
829 mbroquet 3730 }
830    
831 softime 6929 function cleSecondaire($id, &$db = null, $val = array(), $DEBUG = null) {
832 mbroquet 3730 //
833     parent::cleSecondaire($id, $db, $val, $DEBUG);
834    
835     $id = $this->getVal($this->clePrimaire);
836    
837    
838     //Requête de vérification que cet événement d'instruction n'est pas lié
839     //à la création d'un dossier d'instruction
840     $sql = "SELECT demande_type.dossier_instruction_type
841     FROM ".DB_PREFIXE."demande_type
842     LEFT JOIN ".DB_PREFIXE."demande
843     ON demande.demande_type = demande_type.demande_type
844     WHERE demande.instruction_recepisse = ".$id;
845     $res = $this->db->getOne($sql);
846     $this->addToLog("cleSecondaire(): db->getone(\"".$sql."\");", VERBOSE_MODE);
847     if (database::isError($res)) {
848     die($res->getMessage());
849     }
850    
851     // Aucune clé secondaire n'a été trouvée ou c'est un événement sans
852     //création de dossier d'instruction, l'événement d'instruction peut être
853     //supprimé
854     if ( $this->correct !== false || $res == null || $res == ""){
855    
856     // Requête de vérification que cet événement d'instruction est lié
857     // à une demande
858     $sql = "SELECT demande
859     FROM ".DB_PREFIXE."demande
860     WHERE instruction_recepisse = ".$id;
861     $res = $this->db->getOne($sql);
862     $this->addToLog("cleSecondaire(): db->getone(\"".$sql."\");", VERBOSE_MODE);
863     if (database::isError($res)) {
864     die($res->getMessage());
865     }
866    
867     //Si c'est un événement d'instruction lié à une demande
868     if ($res != null || $res != ""){
869 softime 7996 $demande = $this->f->get_inst__om_dbform(array(
870     "obj" => "demande",
871     "idx" => $res,
872     ));
873 mbroquet 3730
874     //On met à jour la demande en supprimant la liaison vers
875     //l'événement d'instruction
876     $demande->setParameter("maj", 1);
877     $valF = array();
878     foreach($demande->champs as $identifiant => $champ) {
879     $valF[$champ] = $demande->val[$identifiant];
880     }
881     $valF['date_demande']=$demande->dateDBToForm($valF['date_demande']);
882     $valF['instruction_recepisse']=NULL;
883     $ret = $demande->modifier($valF, $this->db, DEBUG);
884     }
885    
886     /**
887     * Vérification que l'élément supprimé est le dernier pour pouvoir
888     * remodifier les données de manière itérative.
889     */
890     // Initialisation
891     $dernierevenement = "";
892     // Récupération du dernier élément de la table d'instruction qui
893     // concerne le dossier en cours
894     $sql = "SELECT max(instruction)
895     FROM ".DB_PREFIXE."instruction
896     WHERE dossier ='".$this->idxformulaire."'";
897     $dernierevenement = $db->getOne($sql);
898     $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
899     if (database::isError($dernierevenement)) {
900     die($dernierevenement->getMessage());
901     }
902     // Si on se trouve effectivement sur le dernier evenement d'instruction
903     if ($dernierevenement == $id) {
904     // Alors on valide la suppression
905     $this->correct = true;
906     $this->addToMessage(_('Destruction_chronologique'));
907     } else {
908     // Alors on annule la suppression
909     $this->correct = false;
910     $this->addToMessage(_("Seul le dernier evenement d'instruction peut etre supprime."));
911     }
912     }
913     }
914    
915     /**
916     * Vérification de la possibilité ou non de modifier des dates de suivi
917     * @param string $champ champ date à vérifier
918     */
919     function updateDate($champ) {
920    
921     //Si le retourformulaire est "dossier_instruction"
922     if ($this->getParameter("retourformulaire") == "dossier"
923     || $this->getParameter("retourformulaire") == "dossier_instruction"
924     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
925     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
926     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
927 softime 6565 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures"
928     || $this->getParameter("retourformulaire") == "dossier_contentieux_mes_infractions"
929     || $this->getParameter("retourformulaire") == "dossier_contentieux_toutes_infractions"
930     || $this->getParameter("retourformulaire") == "dossier_contentieux_mes_recours"
931     || $this->getParameter("retourformulaire") == "dossier_contentieux_tous_recours") {
932 mbroquet 3730
933     // Vérification de la possibilité de modifier les dates si déjà éditées
934     if($this->valF[$champ] != "" AND !$this->f->user_is_admin) {
935     // si l'utilisateur n'est pas un admin
936     if($this->getVal($champ) != "" AND $this->getVal($champ) != $this->valF[$champ]) {
937     $this->correct = false;
938     $this->addToMessage(_("Les dates de suivis ne peuvent etre modifiees"));
939     }
940     }
941     }
942    
943     //
944     return true;
945     }
946    
947     /*Met des valeurs par défaut dans certains des sous-formulaire*/
948 softime 6929 function setValsousformulaire(&$form, $maj, $validation, $idxformulaire, $retourformulaire, $typeformulaire, &$db = null, $DEBUG = null) {
949 mbroquet 3730
950     //
951     $this->retourformulaire=$retourformulaire;
952     $this->idxformulaire=$idxformulaire;
953     // Ajout
954     if ($maj == 0) {
955     $form->setVal("destinataire", $idxformulaire);
956     $form->setVal("dossier", $idxformulaire);
957     }
958     //
959     $this->set_form_default_values($form, $maj, $validation);
960     }
961    
962     /**
963     * Permet de pré-remplir les valeurs des formulaires.
964     *
965     * @param [object] $form formulaire
966     * @param [integer] $maj mode
967     * @param [integer] $validation validation
968     */
969     function set_form_default_values(&$form, $maj, $validation) {
970    
971     // Ajout
972     if ($maj == 0) {
973     if(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php"))
974     include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php");
975     elseif(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc"))
976     include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc");
977     // si contexte DI
978     if ($this->getParameter("retourformulaire") == "dossier"
979     || $this->getParameter("retourformulaire") == "dossier_instruction"
980     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
981     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
982     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
983 softime 6565 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures"
984     || $this->getParameter("retourformulaire") == "dossier_contentieux_mes_infractions"
985     || $this->getParameter("retourformulaire") == "dossier_contentieux_toutes_infractions"
986     || $this->getParameter("retourformulaire") == "dossier_contentieux_mes_recours"
987     || $this->getParameter("retourformulaire") == "dossier_contentieux_tous_recours") {
988 mbroquet 3730 // on recupère les signataires de la multicollectivité et de celle du DI
989 softime 7996 $di = $this->f->get_inst__om_dbform(array(
990     "obj" => "dossier_instruction",
991     "idx" => $this->getParameter('idxformulaire'),
992     ));
993 mbroquet 3730 $sql = str_replace('<collectivite_di>', $di->getVal("om_collectivite"), $sql_signataire_arrete_defaut_by_di);
994     } else {
995     $sql = $sql_signataire_arrete_defaut;
996     }
997     // Date du jour
998     $form->setVal("date_evenement", date('Y-m-d'));
999    
1000     // Exécution de la requête
1001     $res = $this->f->db->query($sql);
1002     $this->f->addToLog("setVal(): db->query(\"".$sql."\");", VERBOSE_MODE);
1003     if ( database::isError($res)){
1004     die();
1005     }
1006    
1007     $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
1008    
1009     if (isset($row['signataire_arrete']) && is_numeric($row['signataire_arrete'])){
1010     $form->setVal("signataire_arrete",$row['signataire_arrete']);
1011     }
1012     }
1013    
1014     // Ajout et modification
1015     if ($maj == 0 || $maj == 1 || $maj == 125) {
1016     $form->setVal("bible_auto","bible_auto()");
1017     $form->setVal("bible","bible(1)");
1018     $form->setVal("bible2","bible(2)");
1019     $form->setVal("bible3","bible(3)");
1020     $form->setVal("bible4","bible(4)");
1021     }
1022 softime 7521
1023     // Récupère la collectivité du dossier d'instruction
1024     $collectivite_di = $this->get_dossier_instruction_om_collectivite();
1025    
1026     // Modification
1027     if ($maj == 1 && $this->f->is_option_preview_pdf_enabled($collectivite_di) === true
1028     && $this->has_an_edition() === true) {
1029     $form->setVal("live_preview",$this->getVal($this->clePrimaire));
1030     $form->setVal("btn_refresh","reload_pdf_viewer()");
1031 softime 8593 $form->setVal("btn_preview","show_instr_preview()");
1032     $form->setVal("btn_redaction","show_instr_redaction()");
1033 softime 7521 }
1034 mbroquet 3730 }
1035    
1036    
1037     function setLayout(&$form, $maj){
1038 softime 8593 $form->setBloc('evenement','D',"","sousform-instruction-action-".$maj);
1039 mbroquet 3730
1040 softime 8593 $form->setFieldset('evenement','D',_('Evenement'));
1041     $form->setFieldset('om_final_instruction_utilisateur','F','');
1042    
1043     $form->setBloc('om_final_instruction_utilisateur','F');
1044 mbroquet 3730
1045 softime 8593 $form->setBloc('date_finalisation_courrier','D',"","");
1046 mbroquet 3730
1047 softime 8593 $form->setFieldset('date_finalisation_courrier','D',_('Dates'));
1048     $form->setBloc('date_finalisation_courrier','D',"","col_6");
1049     $form->setBloc('date_envoi_controle_legalite','F');
1050 mbroquet 3730
1051 softime 8593 $form->setBloc('date_retour_signature','D',"","col_6");
1052     $form->setBloc('date_retour_controle_legalite','F');
1053     $form->setFieldset('date_retour_controle_legalite','F','');
1054    
1055     $form->setBloc('date_retour_controle_legalite','F');
1056 mbroquet 3730
1057 softime 8593 if ($maj == 1) {
1058     // Récupère la collectivité du dossier d'instruction
1059     $collectivite_di = $this->get_dossier_instruction_om_collectivite();
1060 mbroquet 3730
1061 softime 8593 //
1062     if ($this->f->is_option_preview_pdf_enabled($collectivite_di) === true
1063     && $this->has_an_edition() === true) {
1064 softime 7521 //
1065 softime 8593 $form->setBloc('complement_om_html','D',"","container_instr_edition");
1066     $form->setBloc('complement_om_html','D',"","hidelabel box_instr_edition redaction_instr_edition");
1067     $form->setBloc('complement_om_html','D',"","box_instr_edition_main");
1068     $form->setFieldset('complement_om_html','D',_('Complement'));
1069     $form->setFieldset('bible','F','');
1070     $form->setFieldset('complement2_om_html','D',_('Complement 2'));
1071     $form->setFieldset('bible2','F','');
1072     $form->setFieldset('complement3_om_html','D',_('Complement 3'));
1073     $form->setFieldset('bible3','F','');
1074     $form->setFieldset('complement4_om_html','D',_('Complement 4'));
1075     $form->setFieldset('bible4','F','');
1076     $form->setFieldset('titre_om_htmletat','DF',_('Titre'), 'startClosed');
1077     $form->setFieldset('corps_om_htmletatex','DF',_('Corps'));
1078     $form->setBloc('corps_om_htmletatex','F');
1079     $form->setBloc('btn_preview','DF',"","box_instr_edition_btn");
1080     $form->setBloc('btn_preview','F');
1081     $form->setBloc('btn_redaction','D', '',"hidelabel box_instr_edition preview_instr_edition");
1082     $form->setBloc('btn_redaction','DF',"","box_instr_edition_btn");
1083     $form->setFieldset('btn_refresh','D',_('Prévisualisation'), "box_instr_edition_main");
1084     $form->setFieldset('live_preview','F');
1085     $form->setBloc('live_preview','F');
1086     $form->setBloc('live_preview','F');
1087 softime 7521 } else {
1088 softime 8593 $form->setBloc('complement_om_html','D',"","hidelabel");
1089 softime 7521 $form->setFieldset('complement_om_html','D',_('Complement'));
1090     $form->setFieldset('bible','F','');
1091     $form->setFieldset('complement2_om_html','D',_('Complement 2'));
1092     $form->setFieldset('bible2','F','');
1093     $form->setFieldset('complement3_om_html','D',_('Complement 3'));
1094     $form->setFieldset('bible3','F','');
1095     $form->setFieldset('complement4_om_html','D',_('Complement 4'));
1096     $form->setFieldset('bible4','F','');
1097 softime 8593 $form->setFieldset('titre_om_htmletat','DF',_('Titre'), 'startClosed');
1098     $form->setFieldset('corps_om_htmletatex','DF',_('Corps'));
1099     $form->setBloc('corps_om_htmletatex','F');
1100 softime 7521 }
1101 softime 8593 } else {
1102     $form->setBloc('complement_om_html','D',"","hidelabel");
1103     $form->setFieldset('complement_om_html','D',_('Complement'));
1104     $form->setFieldset('bible','F','');
1105     $form->setFieldset('complement2_om_html','D',_('Complement 2'));
1106     $form->setFieldset('bible2','F','');
1107     $form->setFieldset('complement3_om_html','D',_('Complement 3'));
1108     $form->setFieldset('bible3','F','');
1109     $form->setFieldset('complement4_om_html','D',_('Complement 4'));
1110     $form->setFieldset('bible4','F','');
1111     $form->setFieldset('titre_om_htmletat','DF',_('Titre'), 'startClosed');
1112     $form->setFieldset('corps_om_htmletatex','DF',_('Corps'));
1113     $form->setBloc('corps_om_htmletatex','F');
1114 mbroquet 3730 }
1115     }
1116    
1117     function setLib(&$form, $maj) {
1118     //
1119     parent::setLib($form, $maj);
1120     //
1121     $form->setLib('bible_auto', "");
1122     $form->setLib('bible', "");
1123     $form->setLib('bible2', "");
1124     $form->setLib('bible3', "");
1125     $form->setLib('bible4', "");
1126 softime 7521 $form->setLib('btn_refresh', "");
1127 softime 8593 $form->setLib('btn_preview', "");
1128     $form->setLib('btn_redaction', "");
1129 softime 7521 $form->setLib('live_preview', "");
1130 mbroquet 3730 $form->setLib('om_final_instruction_utilisateur', _("finalise par"));
1131 softime 8593
1132     // Ajout d'une infobulle d'aide lorsque le formulaire est en mode
1133     // ajout et que l'option de rédaction libre est activée sur la
1134     // collectivité du dossier
1135     if ($maj === '0' && $this->is_option_redaction_libre_enabled() === true) {
1136     //
1137     $help_text_template = '%s <span class="info-16" title="%s"></span>';
1138     $help_text = _("Attention: le passage du mode 'Rédaction libre' à celui de 'Rédaction par compléments' fait perdre toute la rédaction manuelle effectuée.");
1139     $form->setLib('flag_edition_integrale', sprintf($help_text_template, _("Type de rédaction"), $help_text));
1140     }
1141     else {
1142     $form->setLib('flag_edition_integrale', _("Type de rédaction"));
1143     }
1144    
1145     // Ajout d'une infobulle d'aide lorsque le formulaire est en mode
1146     // modification et que l'option de prévisualisation de l'édition est
1147     // activée sur la collectivité du dossier
1148     if ($maj === '1'
1149     && $this->f->is_option_preview_pdf_enabled($this->get_dossier_instruction_om_collectivite()) === true) {
1150     //
1151     $help_text_template = '%s <span class="info-16" title="%s"></span>';
1152     $help_text = _("Attention la modification de la valeur de ce champ n'est pas prise en compte dans la prévisualisation. Pour que cette valeur soit mise à jour, il suffit de valider le formulaire.");
1153     $form->setLib('date_evenement', sprintf($help_text_template, _('date_evenement'), $help_text));
1154     $form->setLib('signataire_arrete', sprintf($help_text_template, _('signataire_arrete'), $help_text));
1155     }
1156 mbroquet 3730 }
1157    
1158 softime 6929 function triggerajouter($id, &$db = null, $val = array(), $DEBUG = null) {
1159 mbroquet 3730 /**
1160     * Le code suivant permet de récupérer des valeurs des tables evenement
1161     * et dossier pour les stocker dans l'instruction :
1162     * DEPUIS L'EVENEMENT
1163     * - action
1164     * - delai
1165     * - accord_tacite
1166     * - etat
1167     * - avis_decision
1168     * - delai_notification
1169     * - lettretype
1170     * - autorite_competente
1171 softime 6565 * - complement_om_html
1172     * - complement2_om_html
1173     * - complement3_om_html
1174     * - complement4_om_html
1175     * - complement5_om_html
1176 mbroquet 3730 * DEPUIS LE DOSSIER D'INSTRUCTION
1177     * - archive_delai
1178     * - archive_accord_tacite
1179     * - archive_etat
1180     * - archive_avis
1181     * - date_complet
1182     * - date_rejet
1183     * - date_limite
1184     * - date_notification_delai
1185     * - date_decision
1186     * - date_validite
1187     * - date_achevement
1188     * - date_chantier
1189     * - date_conformite
1190     * - avis_decision
1191     */
1192     // Récupération de tous les paramètres de l'événement sélectionné
1193     $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1194     WHERE evenement=".$this->valF['evenement'];
1195     $res = $db->query($sql);
1196     $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
1197     if (database::isError($res)) {
1198     die($res->getMessage());
1199     }
1200     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1201     // Récupération de l'identifiant de l'action
1202     // si une action est paramétrée dans l'événement
1203     $this->valF['action'] = NULL;
1204     if (isset($row['action']) and !empty($row['action'])) {
1205     $this->valF['action']=$row['action'];
1206     }
1207     // Récupération de la valeur du délai
1208     $this->valF['delai'] = $row['delai'];
1209     // Récupération de l'identifiant de l'état
1210     // si un état est paramétré dans l'événement
1211     $this->valF['etat']=NULL;
1212     if (isset($row['etat']) and !empty($row['etat'])) {
1213     $this->valF['etat']=$row['etat'];
1214     }
1215     // Récupération de la valeur d'accord tacite
1216     $this->valF['accord_tacite']=$row['accord_tacite'];
1217     // Récupération de la valeur du délai de notification
1218     $this->valF['delai_notification']=$row['delai_notification'];
1219     // Récupération de l'identifiant de l'avis
1220     // si un avis est paramétré dans l'événement
1221     $this->valF['avis_decision'] = NULL;
1222     if(isset($row['avis_decision']) and !empty($row['avis_decision'])) {
1223     $this->valF['avis_decision']=$row['avis_decision'];
1224     }
1225     // Récupération de la valeur de l'autorité compétente
1226     // si l'autorité compétente est paramétré dans l'événement
1227     $this->valF['autorite_competente'] = NULL;
1228     if(isset($row['autorite_competente']) and !empty($row['autorite_competente'])) {
1229     $this->valF['autorite_competente']=$row['autorite_competente'];
1230     }
1231     // Récupération de la valeur de la lettre type
1232     $this->valF['lettretype']=$row['lettretype'];
1233     }
1234     // Récupération de toutes les valeurs du dossier d'instruction en cours
1235     $sql = "SELECT * FROM ".DB_PREFIXE."dossier
1236     WHERE dossier='".$this->valF['dossier']."'";
1237     $res = $db->query($sql);
1238     $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
1239     if (database::isError($res)) {
1240     die($res->getMessage());
1241     }
1242     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
1243     $this->updateArchiveData($row);
1244    
1245     // Récupération de la duree de validite du dossier d'autorisation
1246     $sql = "SELECT duree_validite_parametrage
1247     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
1248     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
1249     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1250     LEFT JOIN ".DB_PREFIXE."dossier
1251     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
1252     WHERE dossier.dossier='".$this->valF['dossier']."'";
1253     $duree_validite_parametrage = $db->getOne($sql);
1254     $this->addToLog("triggerajouter(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
1255     database::isError($duree_validite_parametrage);
1256     if ($duree_validite_parametrage != '') {
1257     $this->valF['duree_validite_parametrage']= $duree_validite_parametrage;
1258     }
1259    
1260     // Identifiant du type de courrier
1261     $idTypeCourrier = '11';
1262     $idCourrier = str_pad($this->valF["instruction"], 10, "0", STR_PAD_LEFT);
1263     // Code barres
1264     $this->valF["code_barres"] = $idTypeCourrier . $idCourrier;
1265 softime 8593
1266     // Si le mode en rédaction intégrale est activé
1267     if (isset($this->valF['flag_edition_integrale']) === true
1268     && $this->valF['flag_edition_integrale'] === true) {
1269    
1270     // Récupère la collectivite du dossier d'instruction
1271     $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
1272     $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
1273     // Récupère le corps de la lettre type
1274     $params = array(
1275     "specific" => array(
1276     "corps" => array(
1277     "mode" => "get",
1278     )
1279     ),
1280     );
1281     $result = $this->compute_pdf_output('lettretype', $this->valF['lettretype'], $collectivite, null, $params);
1282     $this->valF['corps_om_htmletatex'] = $result['pdf_output'];
1283     // Récupère le titre de la lettre type
1284     $params = array(
1285     "specific" => array(
1286     "titre" => array(
1287     "mode" => "get",
1288     )
1289     ),
1290     );
1291     $result = $this->compute_pdf_output('lettretype', $this->valF['lettretype'], $collectivite, null, $params);
1292     $this->valF['titre_om_htmletat'] = $result['pdf_output'];
1293     }
1294 mbroquet 3730 }
1295    
1296     // Test si une restriction est valide
1297     // return boolean
1298     function restrictionIsValid($restriction){
1299     if($this->restriction_valid != null) {
1300     return $this->restriction_valid;
1301     }
1302     if(empty($restriction)) {
1303     $this->restriction_valid = true;
1304     return $this->restriction_valid;
1305     }
1306 nmeucci 3873 // Liste des opérateurs possibles sans espace
1307     $operateurs = array(">=", "<=", "+", "-", "&&", "||", "==", "!=");
1308     // Liste identique mais avec le marqueur §
1309     $mark = "§";
1310     $operateurs_marked = array();
1311     foreach ($operateurs as $operateur) {
1312     $operateurs_marked[] = $mark.$operateur.$mark;
1313     }
1314 mbroquet 3730
1315     // Supprime tous les espaces de la chaîne de caractère
1316 nmeucci 3873 $restriction = preg_replace('/\s+/', '', $restriction);
1317 mbroquet 3730
1318 nmeucci 3873 // Met un marqueur avant et après les opérateurs
1319     // puis transforme la chaine en un tableau
1320     $restriction = str_replace($operateurs, $operateurs_marked,
1321 mbroquet 3730 $restriction);
1322    
1323 nmeucci 3873 // Pour chaque opérateur logique
1324     foreach (array('&&', '||') as $operator) {
1325    
1326     // S'il est absent on ne fait aucun traitement
1327     if (strpos($restriction, $mark.$operator.$mark) === false) {
1328     continue;
1329     }
1330     // Sinon on vérifie les deux conditions avec le OU/ET logique
1331     $restrictions = explode($mark.$operator.$mark, $restriction);
1332     $restrictions[0] = explode($mark, $restrictions[0]);
1333     $restrictions[1] = explode($mark, $restrictions[1]);
1334     $res_bool = false;
1335     if ($operator == '&&') {
1336     if ($this->is_restriction_satisfied($restrictions[0], $operateurs)
1337     && $this->is_restriction_satisfied($restrictions[1], $operateurs)) {
1338     $res_bool = true;
1339     }
1340     }
1341     if ($operator == '||') {
1342     if ($this->is_restriction_satisfied($restrictions[0], $operateurs)
1343     || $this->is_restriction_satisfied($restrictions[1], $operateurs)) {
1344     $res_bool = true;
1345     }
1346     }
1347     return $res_bool;
1348     }
1349     $tabRestriction = explode($mark, $restriction);
1350     return $this->is_restriction_satisfied($tabRestriction, $operateurs);
1351    
1352     }
1353    
1354     function is_restriction_satisfied($restriction, $operateurs) {
1355 mbroquet 3730 // Tableau comprenant les résultat
1356     $res = array();
1357     // Compteur pour les résultat
1358     // commence à 1 car le 0 doit rester inchangé tout au long du traitement
1359     $j = 1;
1360     // Comparateur du calcul
1361     $comparateur = '';
1362     // Booléen retourné
1363     $res_bool = true;
1364    
1365     // S'il y a un comparateur
1366 nmeucci 3873 if (in_array(">=", $restriction)
1367     || in_array("<=", $restriction)
1368     || in_array("==", $restriction)
1369     || in_array("!=", $restriction)) {
1370 mbroquet 3730
1371     // Si le tableau n'est pas vide
1372 nmeucci 3873 if (count($restriction) > 0) {
1373 mbroquet 3730
1374     // Boucle dans le tableau pour récupérer seulement les valeurs
1375 nmeucci 3873 foreach ($restriction as $key => $value) {
1376 mbroquet 3730 //
1377     if (!in_array($value, $operateurs)) {
1378     if ($this->getRestrictionValue($value) != false) {
1379     $res[] = $this->getRestrictionValue($value);
1380     } else {
1381     // Message d'erreur
1382     $error_message = sprintf(_("Le champ %s de l'instruction %s est vide"), "<span class='bold'>".$value."</span>", "<span class='bold'>".$this->valF["instruction"]."</span>");
1383     $this->addToMessage($error_message);
1384     // Arrête le traitement
1385     return false;
1386     }
1387     }
1388     }
1389    
1390     // Boucle dans le tableau
1391     // commence à 1 car le 0 doit rester inchangé tout au long du
1392     // traitement
1393 nmeucci 3873 for ($i = 1; $i<count($restriction); $i++) {
1394 mbroquet 3730
1395     // Récupère le comparateur
1396 nmeucci 3873 if ($restriction[$i] === ">="
1397     || $restriction[$i] === "<="
1398     || $restriction[$i] === "=="
1399     || $restriction[$i] === "!=") {
1400     $comparateur = $restriction[$i];
1401 mbroquet 3730 }
1402    
1403     // Si l'opérateur qui suit est un "+"
1404 nmeucci 3873 if ($restriction[$i] === "+") {
1405 mbroquet 3730 $dateDep = $res[$j];
1406     unset($res[$j]);$j++;
1407     $duree = $res[$j];
1408     unset($res[$j]);
1409     $res[$j] = $this->f->mois_date($dateDep, $duree, "+");
1410     }
1411    
1412     // Si l'opérateur qui suit est un "-"
1413 nmeucci 3873 if ($restriction[$i] === "-") {
1414 mbroquet 3730 $dateDep = $res[$j];
1415     unset($res[$j]);$j++;
1416     $duree = $res[$j];
1417     unset($res[$j]);
1418     $res[$j] = $this->f->mois_date($dateDep, $duree, "-");
1419     }
1420     }
1421    
1422     }
1423    
1424     // Si les tableau des résultats n'est pas vide
1425     if (count($res) > 0) {
1426     //
1427     $res_bool = false;
1428     // Effectue le test
1429     if ($comparateur === ">=") {
1430     //
1431     if (strtotime($res[0]) >= strtotime($res[$j])) {
1432     $res_bool = true;
1433     }
1434     }
1435     if ($comparateur === "<=") {
1436 nmeucci 3873 //
1437 mbroquet 3730 if (strtotime($res[0]) <= strtotime($res[$j])) {
1438     $res_bool = true;
1439     }
1440     }
1441 nmeucci 3873 if ($comparateur === "==") {
1442     //
1443     if (strtotime($res[0]) == strtotime($res[$j])) {
1444     $res_bool = true;
1445     }
1446     }
1447     if ($comparateur === "!=") {
1448     //
1449     if (strtotime($res[0]) != strtotime($res[$j])) {
1450     $res_bool = true;
1451     }
1452     }
1453 mbroquet 3730 }
1454     // Sinon une erreur s'affiche
1455     } else {
1456    
1457     // Message d'erreur
1458     $error_message = _("Mauvais parametrage de la restriction.")." ".
1459     _("Contactez votre administrateur");
1460     $this->addToMessage($error_message);
1461     // Arrête le traitement
1462     return false;
1463     }
1464    
1465     return $res_bool;
1466    
1467     }
1468    
1469     /**
1470     * Permet de définir si l'événement passé en paramètre est un événement retour.
1471     * @param integer $evenement événement à tester
1472     *
1473     * @return boolean retourne true si événement retour sinon false
1474     */
1475     function is_evenement_retour($evenement) {
1476     if(empty($evenement) || !is_numeric($evenement)) {
1477     return "";
1478     }
1479     $sql = "SELECT retour
1480     FROM ".DB_PREFIXE."evenement
1481     WHERE evenement = ".$evenement;
1482     $retour = $this->db->getOne($sql);
1483     $this->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
1484     if (database::isError($retour)) {
1485     die($retour->getMessage());
1486     }
1487     if ($retour == 't') {
1488     return true;
1489     } else {
1490     return false;
1491     }
1492     }
1493    
1494     /**
1495     * Retourne le champ restriction de l'événement passé en paramètre.
1496     *
1497     * @param integer $evenement id de l'événement sur lequel récupérer la restriction
1498     *
1499     * @return string contenu du champ restriction
1500     */
1501     function get_restriction($evenement) {
1502     if(empty($evenement) || !is_numeric($evenement)) {
1503     return "";
1504     }
1505     //Récupère la restriction
1506     $sql= "SELECT
1507     restriction
1508     FROM
1509     ".DB_PREFIXE."evenement
1510     WHERE
1511     evenement =".$evenement;
1512    
1513     $restriction = $this->db->getOne($sql);
1514     $this->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
1515     if (database::isError($restriction)) {
1516     die($restriction->getMessage());
1517     }
1518     return $restriction;
1519     }
1520    
1521     /**
1522     * Récupère la valeur du champ dans la restriction
1523     * @param string $restrictionValue Nom du champ
1524     * @return mixed Valeur du champ
1525     */
1526     function getRestrictionValue($restrictionValue){
1527    
1528     // Initialisation de la valeur de retour
1529     $return = false;
1530    
1531     // Récupére les valeurs du dossier
1532     $value_dossier = $this->get_dossier_actual();
1533    
1534     //
1535     if (is_numeric($restrictionValue)) {
1536     $return = $restrictionValue;
1537     }elseif (isset($value_dossier[$restrictionValue])) {
1538     $return = $value_dossier[$restrictionValue];
1539     }elseif (isset($this->valF[$restrictionValue])) {
1540     $return = $this->valF[$restrictionValue];
1541     }
1542    
1543     // Retourne la valeur du champ
1544     return $return;
1545     }
1546    
1547 softime 6565
1548 mbroquet 3730 /**
1549 softime 6565 * Calcul des règle d'action selon leur type.
1550     *
1551     * Types de règle :
1552     * - date
1553     * - numeric
1554     * - text
1555     * - bool
1556     * - specific
1557     * - technical_data
1558 mbroquet 3730 *
1559 softime 6565 * @param string $rule Règle d'action.
1560     * @param string $rule_name Nom de la règle.
1561     * @param string $type Type de la règle.
1562     *
1563 mbroquet 3730 * @return mixed Résultat de la règle
1564     */
1565 softime 6565 public function regle($rule, $rule_name, $type = null) {
1566 mbroquet 3730
1567     // Supprime tous les espaces de la chaîne de caractère
1568     $rule = str_replace(' ', '', $rule);
1569     // Coupe la chaîne au niveau de l'opérateur
1570     $operands = explode ("+", $rule);
1571     // Nombre d'opérande
1572     $nb_operands = count($operands);
1573    
1574     // Règle à null
1575     if ($rule == "null") {
1576     return null;
1577     }
1578    
1579     // Tableau des champs de type date
1580     $rule_type_date = array(
1581     "regle_date_limite",
1582     "regle_date_notification_delai",
1583     "regle_date_complet",
1584     "regle_date_validite",
1585     "regle_date_decision",
1586     "regle_date_chantier",
1587     "regle_date_achevement",
1588     "regle_date_conformite",
1589     "regle_date_rejet",
1590     "regle_date_dernier_depot",
1591     "regle_date_limite_incompletude",
1592 softime 6565 "regle_date_cloture_instruction",
1593     "regle_date_premiere_visite",
1594     "regle_date_derniere_visite",
1595     "regle_date_contradictoire",
1596     "regle_date_retour_contradictoire",
1597     "regle_date_ait",
1598     "regle_date_transmission_parquet",
1599 mbroquet 3730 );
1600     // Tableau des champs de type numérique
1601     $rule_type_numeric = array(
1602     "regle_delai",
1603     "regle_delai_incompletude",
1604     );
1605 softime 6565 // Tableau des champs de type text
1606     $rule_type_text = array(
1607     );
1608     // Tableau des champs de type booléen
1609     $rule_type_bool = array(
1610     );
1611     // Tableau des champs spécifiques
1612     $rule_type_specific = array(
1613     "regle_autorite_competente",
1614     "regle_etat",
1615     "regle_accord_tacite",
1616     "regle_avis",
1617     );
1618     // Tableau des champs de données techniques
1619     $rule_type_technical_data = array(
1620     'regle_donnees_techniques1',
1621     'regle_donnees_techniques2',
1622     'regle_donnees_techniques3',
1623     'regle_donnees_techniques4',
1624     'regle_donnees_techniques5',
1625     );
1626 softime 8593 // Tableau des champs simple
1627     $rule_type_simple = array(
1628     "regle_dossier_instruction_type",
1629     );
1630 mbroquet 3730
1631     // Définit le type du champ
1632     if (in_array($rule_name, $rule_type_date) == true) {
1633     $type = "date";
1634     }
1635     if (in_array($rule_name, $rule_type_numeric) == true) {
1636     $type = "numeric";
1637     }
1638 softime 6565 if (in_array($rule_name, $rule_type_text) === true) {
1639     $type = "text";
1640     }
1641     if (in_array($rule_name, $rule_type_bool) === true) {
1642     $type = "bool";
1643     }
1644     if (in_array($rule_name, $rule_type_specific) === true) {
1645     $type = "specific";
1646     }
1647     if (in_array($rule_name, $rule_type_technical_data) === true) {
1648     $type = 'text';
1649     }
1650 softime 8593 if (in_array($rule_name, $rule_type_simple) === true) {
1651     $type = 'simple';
1652     }
1653 mbroquet 3730
1654 softime 6565 // Si c'est un type spécifique ou booléen alors il n'a qu'un opérande
1655     // Récupère directement la valeur de l'opérande
1656     if ($type === 'specific' || $type === 'bool') {
1657     //
1658     return $this->get_value_for_rule($rule);
1659     }
1660    
1661 mbroquet 3730 // Initialisation des variables
1662     $key_date = 0;
1663     $total_numeric = 0;
1664 softime 6565 $res_text = '';
1665 mbroquet 3730
1666     // Pour chaque opérande
1667     foreach ($operands as $key => $operand) {
1668    
1669     // Si c'est une règle de type date
1670     if ($type == 'date') {
1671     // Vérifie si au moins une des opérandes est une date
1672 softime 6565 if (is_numeric($operand) === false
1673     && $this->get_value_for_rule($operand) !== null
1674     && $this->f->check_date($this->get_value_for_rule($operand)) == true) {
1675 mbroquet 3730 // Récupère la position de la date
1676     $key_date = $key;
1677     }
1678     // Les autres opérandes doivent être que des numériques
1679     if (is_numeric($operand) == true) {
1680     // Ajoute l'opérande au total
1681     $total_numeric += $operand;
1682     }
1683 softime 6565 if (is_numeric($operand) === false
1684     && $this->get_value_for_rule($operand) !== null
1685     && is_numeric($this->get_value_for_rule($operand)) == true) {
1686 mbroquet 3730 // Ajoute l'opérande au total
1687 softime 6565 $total_numeric += $this->get_value_for_rule($operand);
1688 mbroquet 3730 }
1689     }
1690    
1691     // Si c'est une règle de type numérique
1692     if ($type == 'numeric') {
1693     // Les opérandes doivent être que des numériques
1694     if (is_numeric($operand) == true) {
1695     // Ajoute l'opérande au total
1696     $total_numeric += $operand;
1697     }
1698 softime 6565 if (is_numeric($operand) === false
1699     && $this->get_value_for_rule($operand) !== null
1700     && is_numeric($this->get_value_for_rule($operand)) == true) {
1701 mbroquet 3730 // Ajoute l'opérande au total
1702 softime 6565 $total_numeric += $this->get_value_for_rule($operand);
1703 mbroquet 3730 }
1704     }
1705 softime 6565
1706     // Si c'est une règle de type text
1707     if ($type === 'text') {
1708     // Concatène toutes les chaînes de caractère
1709     $res_text .= $this->get_value_for_rule($operand);
1710     }
1711 mbroquet 3730 }
1712    
1713     // Résultat pour une règle de type date
1714     if ($type == 'date') {
1715     // Retourne le calcul de la date
1716     return $this->f->mois_date($this->valF[$operands[$key_date]],
1717     $total_numeric, "+");
1718     }
1719    
1720     // Résultat pour une règle de type numérique
1721     if ($type == 'numeric') {
1722     // Retourne le calcul
1723     return $total_numeric;
1724     }
1725 softime 6565
1726     // Résultat pour une règle de type text
1727     if ($type === 'text') {
1728     // Retourne la chaîne de caractère
1729     return $res_text;
1730     }
1731 softime 8593 if ($type === 'simple') {
1732     // Retourne la valeur du champs rule
1733     return $rule;
1734     }
1735 softime 6565 }
1736    
1737    
1738     /**
1739     * Récupère la valeur du champs dans l'instruction ou dans les données
1740     * techniques.
1741     * Spécifique au calcul des règles.
1742     *
1743     * @param string $field Champ
1744     *
1745     * @return mixed Valeur du champ
1746     */
1747     private function get_value_for_rule($field) {
1748     // Si le champ n'existe pas dans la table instruction
1749     if (array_key_exists($field, $this->valF) === false) {
1750     // Récupère l'instance de la classe donnees_techniques
1751     $inst_donnees_techniques = $this->get_inst_donnees_techniques();
1752     // Retourne la valeur de la donnée technique
1753     return $inst_donnees_techniques->getVal($field);
1754     }
1755    
1756     //
1757     return $this->valF[$field];
1758     }
1759    
1760    
1761     /**
1762     * [get_inst_donnees_techniques description]
1763     *
1764     * @param [type] $donnees_techniques [description]
1765     *
1766     * @return [type] [description]
1767     */
1768     function get_inst_donnees_techniques($donnees_techniques = null) {
1769     //
1770     if (isset($this->inst_donnees_techniques) === false or
1771     $this->inst_donnees_techniques === null) {
1772     //
1773     if (is_null($donnees_techniques)) {
1774     $donnees_techniques = $this->getDonneesTechniques();
1775     }
1776     //
1777 softime 7996 $this->inst_donnees_techniques = $this->f->get_inst__om_dbform(array(
1778     "obj" => "donnees_techniques",
1779     "idx" => $donnees_techniques,
1780     ));
1781 softime 6565 }
1782     //
1783     return $this->inst_donnees_techniques;
1784     }
1785    
1786    
1787     /**
1788     * Retourne l'identifiant des données techniques liées du dossier
1789     * @return string L'identifiant des données techniques liées du dossier
1790     */
1791     function getDonneesTechniques() {
1792 mbroquet 3730
1793 softime 6565 $donnees_techniques = '';
1794    
1795     $sql = "SELECT donnees_techniques
1796     FROM ".DB_PREFIXE."donnees_techniques
1797     WHERE dossier_instruction ='".$this->valF["dossier"]."'";
1798     $donnees_techniques = $this->db->getOne($sql);
1799     $this->f->addToLog("getStatut() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
1800     if ( database::isError($donnees_techniques)){
1801     die();
1802     }
1803    
1804     return $donnees_techniques;
1805 mbroquet 3730 }
1806    
1807 softime 6565
1808 fmichon 4708 /**
1809     * TRIGGER - triggerajouterapres.
1810     *
1811     * - Mise à jour des informations liées au workflow sur le dossier
1812     * - Interface avec le référentiel ERP [105][111]
1813     * - Mise à jour du DA
1814     * - Historisation de la vie du DI
1815     *
1816     * @return boolean
1817     */
1818 softime 6929 function triggerajouterapres($id, &$db = null, $val = array(), $DEBUG = null) {
1819 fmichon 4708
1820     // On a besoin de l'instance du dossier lié à l'événement d'instruction
1821     $inst_di = $this->get_inst_dossier($this->valF['dossier']);
1822    
1823     // Instance de la classe evenement
1824     $inst_evenement = $this->get_inst_evenement($this->valF['evenement']);
1825    
1826 mbroquet 3730 /**
1827     * Mise à jour des valeurs du dossier en fonction des valeurs calculées
1828     * par l'action
1829     */
1830 fmichon 4708 // état de complétude actuel du dossier
1831     $incompletude = ($inst_di->getVal('incompletude') == 't' ? true : false);
1832 mbroquet 3730 // Initialisation
1833     $valF = "";
1834 softime 6565 $valF_dt = "";
1835 fmichon 4708 //
1836 mbroquet 3730 if($incompletude === FALSE) {
1837     // Si l'événement d'instruction est de type incompletude
1838 fmichon 4708 if($inst_evenement->getVal('type') == "incompletude") {
1839 mbroquet 3730 // On marque le dossier en incomplétude pour application des actions
1840     $incompletude = TRUE;
1841     // Set du flag incomplétude de la table dossier
1842     $valF['incompletude'] = TRUE;
1843     // Enregistrement de l'état dans la variable provisoire
1844     $valF['etat_pendant_incompletude'] = $this->valF['archive_etat'];
1845     }
1846     } else {
1847     // Si l'evenement d'instruction est de type retour ou contient une
1848     // decision, on sort d'incomplétude
1849 fmichon 4708 if($inst_evenement->getVal('type') == "retour" OR
1850     $inst_evenement->getVal('avis_decision') != NULL) {
1851 mbroquet 3730 // On enlève la marque d'incomplétude pour application des actions
1852     $incompletude = FALSE;
1853     // On enlève le flag d'incomplétude sur l'enregistrement de la table dossier
1854     $valF['incompletude'] = FALSE;
1855     $valF['incomplet_notifie'] = FALSE;
1856     // Restauration de l'état depuis l'état provisoire
1857     $valF['etat'] = $this->valF['archive_etat_pendant_incompletude'];
1858     // On vide la variable provisoire ainsi que le délai de complétude
1859     // et la date limite de complétude
1860     $valF['etat_pendant_incompletude'] = NULL;
1861     $valF['delai_incompletude'] = NULL;
1862     $valF['date_limite_incompletude'] = NULL;
1863     $valF['evenement_suivant_tacite_incompletude'] = NULL;
1864     }
1865     }
1866     // Récupération des paramètres de l'action
1867     $sql = "SELECT * FROM ".DB_PREFIXE."action
1868     WHERE action='".$this->valF['action']."'";
1869     $res = $db->query($sql);
1870     $this->addToLog("triggerajouterapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1871     if (database::isError($res)) {
1872     die($res->getMessage());
1873     }
1874     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1875    
1876     // pour chacune des regles, on applique la regle
1877 softime 6565 if ($row['regle_delai'] != '') {
1878 mbroquet 3730 $valF['delai'] = $this->regle($row['regle_delai'], 'regle_delai');
1879     }
1880 softime 6565 if ($row['regle_accord_tacite'] != '') {
1881 mbroquet 3730 $valF['accord_tacite'] = $this->regle($row['regle_accord_tacite'], 'regle_accord_tacite');
1882     }
1883 softime 6565 if ($row['regle_avis'] != '') {
1884 mbroquet 3730 $valF['avis_decision'] = $this->regle($row['regle_avis'], 'regle_avis');
1885     }
1886 softime 6565 if ($row['regle_date_limite'] != '') {
1887     $valF['date_limite'] = $this->regle($row['regle_date_limite'], 'regle_date_limite');
1888 mbroquet 3730 }
1889 softime 6565 if ($row['regle_date_complet'] != '') {
1890     $valF['date_complet'] = $this->regle($row['regle_date_complet'], 'regle_date_complet');
1891 mbroquet 3730 }
1892 softime 6565 if ($row['regle_date_dernier_depot'] != '') {
1893     $valF['date_dernier_depot'] = $this->regle($row['regle_date_dernier_depot'], 'regle_date_dernier_depot');
1894 mbroquet 3730 }
1895 softime 6565 if ($row['regle_date_notification_delai'] != '') {
1896     $valF['date_notification_delai'] = $this->regle($row['regle_date_notification_delai'], 'regle_date_notification_delai');
1897 mbroquet 3730 }
1898 softime 6565 if ($row['regle_date_decision'] != '') {
1899     $valF['date_decision'] = $this->regle($row['regle_date_decision'], 'regle_date_decision');
1900 mbroquet 3730 }
1901 softime 6565 if ($row['regle_date_rejet'] != '') {
1902     $valF['date_rejet'] = $this->regle($row['regle_date_rejet'], 'regle_date_rejet');
1903 mbroquet 3730 }
1904 softime 6565 if ($row['regle_date_validite'] != '') {
1905     $valF['date_validite'] = $this->regle($row['regle_date_validite'], 'regle_date_validite');
1906 mbroquet 3730 }
1907 softime 6565 if ($row['regle_date_chantier'] != '') {
1908     $valF['date_chantier'] = $this->regle($row['regle_date_chantier'], 'regle_date_chantier');
1909 mbroquet 3730 }
1910 softime 6565 if ($row['regle_date_achevement'] != '') {
1911     $valF['date_achevement'] = $this->regle($row['regle_date_achevement'], 'regle_date_achevement');
1912 mbroquet 3730 }
1913 softime 6565 if ($row['regle_date_conformite'] != '') {
1914     $valF['date_conformite'] = $this->regle($row['regle_date_conformite'], 'regle_date_conformite');
1915 mbroquet 3730 }
1916 softime 6565 if ($row['regle_date_limite_incompletude'] != '') {
1917     $valF['date_limite_incompletude'] = $this->regle($row['regle_date_limite_incompletude'], 'regle_date_limite_incompletude');
1918 mbroquet 3730 }
1919 softime 6565 if ($row['regle_delai_incompletude'] != '') {
1920     $valF['delai_incompletude'] = $this->regle($row['regle_delai_incompletude'], 'regle_delai_incompletude');
1921 mbroquet 3730 }
1922 softime 6565 if ($row['regle_autorite_competente'] != '') {
1923     $valF['autorite_competente'] = $this->regle($row['regle_autorite_competente'], 'regle_autorite_competente');
1924 mbroquet 3730 }
1925 softime 6565 if ($row['regle_etat'] != '') {
1926 mbroquet 3730 // Si on est dans le cas général ou qu'on est en incomplétude et
1927     // qu'on a un événement de type incomplétude alors : on stocke
1928     // l'état dans la variable courante
1929 fmichon 4708 if ($incompletude == FALSE OR $inst_evenement->getVal('type') == "incompletude") {
1930 mbroquet 3730 $valF['etat'] = $this->regle($row['regle_etat'], 'regle_etat');
1931     } else {
1932     $valF['etat_pendant_incompletude'] = $this->regle($row['regle_etat'], 'regle_etat');
1933     }
1934     }
1935 softime 6565 if ($row['regle_date_cloture_instruction'] !== '') {
1936     $valF['date_cloture_instruction'] = $this->regle($row['regle_date_cloture_instruction'], 'regle_date_cloture_instruction');
1937     }
1938     if ($row['regle_date_premiere_visite'] !== '') {
1939     $valF['date_premiere_visite'] = $this->regle($row['regle_date_premiere_visite'], 'regle_date_premiere_visite');
1940     }
1941     if ($row['regle_date_derniere_visite'] !== '') {
1942     $valF['date_derniere_visite'] = $this->regle($row['regle_date_derniere_visite'], 'regle_date_derniere_visite');
1943     }
1944     if ($row['regle_date_contradictoire'] !== '') {
1945     $valF['date_contradictoire'] = $this->regle($row['regle_date_contradictoire'], 'regle_date_contradictoire');
1946     }
1947     if ($row['regle_date_retour_contradictoire'] !== '') {
1948     $valF['date_retour_contradictoire'] = $this->regle($row['regle_date_retour_contradictoire'], 'regle_date_retour_contradictoire');
1949     }
1950     if ($row['regle_date_ait'] !== '') {
1951     $valF['date_ait'] = $this->regle($row['regle_date_ait'], 'regle_date_ait');
1952     }
1953     if ($row['regle_donnees_techniques1'] !== '') {
1954     $valF_dt[$row['cible_regle_donnees_techniques1']] = $this->regle($row['regle_donnees_techniques1'], 'regle_donnees_techniques1');
1955     }
1956     if ($row['regle_donnees_techniques2'] !== '') {
1957     $valF_dt[$row['cible_regle_donnees_techniques2']] = $this->regle($row['regle_donnees_techniques2'], 'regle_donnees_techniques2');
1958     }
1959     if ($row['regle_donnees_techniques3'] !== '') {
1960     $valF_dt[$row['cible_regle_donnees_techniques3']] = $this->regle($row['regle_donnees_techniques3'], 'regle_donnees_techniques3');
1961     }
1962     if ($row['regle_donnees_techniques4'] !== '') {
1963     $valF_dt[$row['cible_regle_donnees_techniques4']] = $this->regle($row['regle_donnees_techniques4'], 'regle_donnees_techniques4');
1964     }
1965     if ($row['regle_donnees_techniques5'] !== '') {
1966     $valF_dt[$row['cible_regle_donnees_techniques5']] = $this->regle($row['regle_donnees_techniques5'], 'regle_donnees_techniques5');
1967     }
1968     if ($row['regle_date_transmission_parquet'] !== '') {
1969     $valF['date_transmission_parquet'] = $this->regle($row['regle_date_transmission_parquet'], 'regle_date_transmission_parquet');
1970     }
1971 softime 8593 if ($row['regle_dossier_instruction_type'] !== '') {
1972     $valF['dossier_instruction_type'] = $this->regle($row['regle_dossier_instruction_type'], 'regle_dossier_instruction_type');
1973     }
1974 mbroquet 3730 }
1975 softime 6063
1976     // Si l'événement a un événement suivant tacite
1977     if($inst_evenement->getVal('evenement_suivant_tacite') != '') {
1978     // Si le DI n'est pas en incomplétude, l'événement tacite est stocké
1979     // dans le champ evenement_suivant_tacite du dossier
1980     if ($incompletude == false OR $inst_evenement->getVal('type') != "incompletude") {
1981     //
1982     $valF['evenement_suivant_tacite'] = $inst_evenement->getVal('evenement_suivant_tacite');
1983 nhaye 5254 } else {
1984 softime 6063 // Sinon l'événement tacite est stocké dans le champ
1985     // evenement_suivant_tacite_incompletude du dossier
1986     $valF['evenement_suivant_tacite_incompletude'] = $inst_evenement->getVal('evenement_suivant_tacite');
1987 nhaye 5254 }
1988 mbroquet 3730 }
1989 softime 6565 // Si des valeurs de données techniques ont été calculées alors on met à jour l'enregistrement
1990     if ($valF_dt != "") {
1991     $dt_id = $this->getDonneesTechniques();
1992     // On met à jour le dossier
1993     $cle = " donnees_techniques='".$dt_id."'";
1994     $res1 = $db->autoExecute(DB_PREFIXE.'donnees_techniques', $valF_dt, DB_AUTOQUERY_UPDATE, $cle);
1995     $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."donnees_techniques\", ".print_r($valF_dt, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1996     if (database::isError($res1)) {
1997     die($res->getMessage());
1998     }
1999     // Affichage d'informations à l'utilisateur
2000     $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
2001     }
2002 mbroquet 3730 // Si des valeurs ont été calculées alors on met à jour l'enregistrement
2003     if ($valF != "") {
2004     // On met à jour le dossier
2005     $cle = " dossier='".$this->valF['dossier']."'";
2006     $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
2007     $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
2008     if (database::isError($res1)) {
2009     die($res->getMessage());
2010     }
2011     // Affichage d'informations à l'utilisateur
2012     $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
2013     }
2014    
2015     /**
2016 fmichon 4708 * Interface avec le référentiel ERP.
2017     *
2018     * (WS->ERP)[105] Arrêté d'un dossier PC effectué -> PC qui concerne un ERP
2019     * (WS->ERP)[111] Décision de conformité effectuée -> PC qui concerne un ERP
2020     * Déclencheur :
2021     * - L'option ERP est activée
2022     * - Le dossier est marqué comme "connecté au référentiel ERP"
2023     * - Le dossier est de type PC
2024     * - Le formulaire d'ajout d'un événement d'instruction est validé
2025     * avec un événement pour lequel les services ERP doivent être
2026     * informé
2027 mbroquet 3730 */
2028 fmichon 4708 //
2029 softime 7521 if ($this->f->is_option_referentiel_erp_enabled() === true
2030 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
2031     && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
2032     && in_array($inst_evenement->getVal($inst_evenement->clePrimaire), explode(";", $this->f->getParameter('erp__evenements__decision__pc')))) {
2033 mbroquet 3730 //
2034 fmichon 4708 $infos = array(
2035     "dossier_instruction" => $this->valF['dossier'],
2036     "decision" => $inst_evenement->getVal("libelle"),
2037     );
2038 mbroquet 3730 //
2039 fmichon 4708 $ret = $this->f->send_message_to_referentiel_erp(105, $infos);
2040     if ($ret !== true) {
2041     $this->cleanMessage();
2042     $this->addToMessage(_("Une erreur s'est produite lors de la notification (105) du référentiel ERP. Contactez votre administrateur."));
2043     return false;
2044 mbroquet 3730 }
2045 fmichon 4708 $this->addToMessage(_("Notification (105) du référentiel ERP OK."));
2046     }
2047 mbroquet 3730
2048 fmichon 4708 /**
2049 softime 7996 * Finalisation automatique de l'instruction si le paramétrage de l'événement l'autorise
2050     */
2051     // Si la finalisation automatique de l'événement est activée
2052     // ET si l'instruction n'a pas déjà été finalisée
2053     // ET s'il existe une lettre type associée
2054     if ($inst_evenement->getVal('finaliser_automatiquement') === 't'
2055     && $inst_evenement->getVal('om_final_instruction') !== 't'
2056     && $inst_evenement->getVal('lettretype') !== ''
2057     && $inst_evenement->getVal('lettretype') !== null) {
2058    
2059     // On instancie l'instruction
2060     $inst_instruction = $this->f->get_inst__om_dbform(array(
2061     "obj" => "instruction",
2062     "idx" => $this->valF[$this->clePrimaire],
2063     ));
2064    
2065     // On finalise l'instruction dans le contexte de finalisation : action 100
2066     $inst_instruction->setParameter('maj', 100);
2067     $finalize = $inst_instruction->finalize($inst_instruction->valF);
2068    
2069     // Une erreur de finalisation renvoie 'false' : ajout dans les logs
2070     // et dans le message d'erreur
2071     if ($finalize === false) {
2072     $this->f->addToLog(__METHOD__."() : ERROR - Impossible de finaliser l'instruction.", DEBUG_MODE);
2073     $this->addToMessage(_("Erreur lors de la finalisation de l'instruction. Contactez votre administrateur."));
2074     return false;
2075     }
2076     }
2077    
2078     /**
2079 softime 7521 * Finalisation automatique des instructions tacites ou retours.
2080     */
2081 softime 7685 // Si l'option de finalisation automatique des instructions tacites ou
2082     // retours est activée et l'événement d'instruction a une lettre type
2083     // associée
2084     $collectivite_di = $this->get_dossier_instruction_om_collectivite($val['dossier']);
2085     if ($this->f->is_option_finalisation_auto_enabled($collectivite_di) === true
2086     && $inst_evenement->getVal('lettretype') !== ''
2087 softime 7521 && $inst_evenement->getVal('lettretype') !== null) {
2088    
2089     // Rècupère l'identifiant de l'événement
2090     $evenement_id = $inst_evenement->getVal($inst_evenement->clePrimaire);
2091    
2092     // Si l'événement d'instruction est identifié comme un événement
2093     // retour
2094     // OU l'événement d'instruction est l'événement suivant tacite du
2095     // dossier d'instruction (incomplétude prise en compte)
2096 softime 7996 // ET l'événement d'instruction n'a pas déjà été finalisé
2097     if (($inst_evenement->getVal("retour") === 't'
2098 softime 7521 || ($inst_di->getVal('evenement_suivant_tacite_incompletude') === $evenement_id
2099 softime 7996 || $inst_di->getVal('evenement_suivant_tacite') === $evenement_id))
2100     && ($inst_evenement->getVal('om_final_instruction') !== 't')) {
2101 softime 7521
2102     // Finalise l'instruction
2103 softime 7996 $inst_instruction = $this->f->get_inst__om_dbform(array(
2104     "obj" => "instruction",
2105     "idx" => $this->valF[$this->clePrimaire],
2106     ));
2107 softime 7521 $inst_instruction->setParameter('maj', 100);
2108     $finalize = $inst_instruction->finalize($inst_instruction->valF);
2109     if ($finalize === false) {
2110     //
2111     return false;
2112     }
2113     }
2114     }
2115    
2116     /**
2117 softime 7996 * Mise à jour de la date de dernière modification du dossier
2118     */
2119     $inst_di->update_last_modification_date();
2120    
2121     /**
2122 softime 8640 * Mise à jour des données du DA.
2123     */
2124     $inst_da = $inst_di->get_inst_dossier_autorisation();
2125     $params = array(
2126     'di_id' => $this->valF['dossier'],
2127     );
2128     if ($inst_da->majDossierAutorisation($params) === false) {
2129     $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
2130     $this->correct = false;
2131     return false;
2132     }
2133    
2134     /**
2135 fmichon 4708 * Historisation de la vie du DI.
2136     */
2137     //
2138 nmeucci 3963 return $this->add_log_to_dossier($id, array_merge($val, $this->valF));
2139 nmeucci 3876 }
2140 mbroquet 3730
2141 softime 6929 function triggermodifierapres($id, &$db = null, $val = array(), $DEBUG = null) {
2142 mbroquet 3730 /**
2143     * L'objectif ici est d'effectuer les recalculs de date dans le dossier
2144     * si la date de l'evenement est modifiee
2145     */
2146     // Initialisation
2147     $valF = "";
2148 softime 6565 $valF_dt = "";
2149 mbroquet 3730 // Initialisation du type d'événement
2150     $type_evmt = "";
2151     // Récupération de l'action correspondante à l'événement
2152     $sql = "SELECT action
2153     FROM ".DB_PREFIXE."evenement
2154     WHERE evenement=".$this->valF['evenement'];
2155     $action = $db->getOne($sql);
2156     $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
2157     if (database::isError($action)) {
2158     die($action->getMessage());
2159     }
2160    
2161     // Récupération des paramètres de l'action
2162     $sql = "SELECT * FROM ".DB_PREFIXE."action
2163     WHERE action='".$action."'";
2164     $res = $db->query($sql);
2165     $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
2166     if (database::isError($res)) {
2167     die($res->getMessage());
2168     }
2169     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
2170     // application des regles sur le courrier + delai
2171     if(preg_match("/date_evenement/",$row['regle_date_limite'])){
2172     $valF['date_limite']= $this->regle($row['regle_date_limite'], 'regle_date_limite');
2173     }
2174     if(preg_match("/date_evenement/",$row['regle_date_complet'])){
2175     $valF['date_complet']= $this->regle($row['regle_date_complet'], 'regle_date_complet');
2176     }
2177     if(preg_match("/date_evenement/",$row['regle_date_dernier_depot'])){
2178     $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot'], 'regle_date_dernier_depot');
2179     }
2180     if(preg_match("/date_evenement/",$row['regle_date_notification_delai'])){
2181     $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai'], 'regle_date_notification_delai');
2182     }
2183     if(preg_match("/date_evenement/",$row['regle_date_decision'])){
2184     $valF['date_decision']= $this->regle($row['regle_date_decision'], 'regle_date_decision');
2185     }
2186     if(preg_match("/date_evenement/",$row['regle_date_rejet'])){
2187     $valF['date_rejet']= $this->regle($row['regle_date_rejet'], 'regle_date_rejet');
2188     }
2189     if(preg_match("/date_evenement/",$row['regle_date_validite'])){
2190     $valF['date_validite']= $this->regle($row['regle_date_validite'], 'regle_date_validite');
2191     }
2192     if(preg_match("/date_evenement/",$row['regle_date_chantier'])){
2193     $valF['date_chantier']= $this->regle($row['regle_date_chantier'], 'regle_date_chantier');
2194     }
2195     if(preg_match("/date_evenement/",$row['regle_date_achevement'])){
2196     $valF['date_achevement']= $this->regle($row['regle_date_achevement'], 'regle_date_achevement');
2197     }
2198     if(preg_match("/date_evenement/",$row['regle_date_conformite'])){
2199     $valF['date_conformite']= $this->regle($row['regle_date_conformite'], 'regle_date_conformite');
2200     }
2201 softime 6565 if(preg_match("/date_evenement/",$row['regle_date_cloture_instruction'])){
2202     $valF['date_cloture_instruction']= $this->regle($row['regle_date_cloture_instruction'], 'regle_date_cloture_instruction');
2203     }
2204     if(preg_match("/date_evenement/",$row['regle_date_premiere_visite'])){
2205     $valF['date_premiere_visite']= $this->regle($row['regle_date_premiere_visite'], 'regle_date_premiere_visite');
2206     }
2207     if(preg_match("/date_evenement/",$row['regle_date_derniere_visite'])){
2208     $valF['date_derniere_visite']= $this->regle($row['regle_date_derniere_visite'], 'regle_date_derniere_visite');
2209     }
2210     if(preg_match("/date_evenement/",$row['regle_date_contradictoire'])){
2211     $valF['date_contradictoire']= $this->regle($row['regle_date_contradictoire'], 'regle_date_contradictoire');
2212     }
2213     if(preg_match("/date_evenement/",$row['regle_date_retour_contradictoire'])){
2214     $valF['date_retour_contradictoire']= $this->regle($row['regle_date_retour_contradictoire'], 'regle_date_retour_contradictoire');
2215     }
2216     if(preg_match("/date_evenement/",$row['regle_date_ait'])){
2217     $valF['date_ait']= $this->regle($row['regle_date_ait'], 'regle_date_ait');
2218     }
2219     if(preg_match("/date_evenement/",$row['regle_date_transmission_parquet'])){
2220     $valF['date_transmission_parquet']= $this->regle($row['regle_date_transmission_parquet'], 'regle_date_transmission_parquet');
2221     }
2222     if ($row['regle_donnees_techniques1'] !== '') {
2223     $valF_dt[$row['cible_regle_donnees_techniques1']] = $this->regle($row['regle_donnees_techniques1'], 'regle_donnees_techniques1');
2224     }
2225     if ($row['regle_donnees_techniques2'] !== '') {
2226     $valF_dt[$row['cible_regle_donnees_techniques2']] = $this->regle($row['regle_donnees_techniques2'], 'regle_donnees_techniques2');
2227     }
2228     if ($row['regle_donnees_techniques3'] !== '') {
2229     $valF_dt[$row['cible_regle_donnees_techniques3']] = $this->regle($row['regle_donnees_techniques3'], 'regle_donnees_techniques3');
2230     }
2231     if ($row['regle_donnees_techniques4'] !== '') {
2232     $valF_dt[$row['cible_regle_donnees_techniques4']] = $this->regle($row['regle_donnees_techniques4'], 'regle_donnees_techniques4');
2233     }
2234     if ($row['regle_donnees_techniques5'] !== '') {
2235     $valF_dt[$row['cible_regle_donnees_techniques5']] = $this->regle($row['regle_donnees_techniques5'], 'regle_donnees_techniques5');
2236     }
2237 softime 8593 if ($row['regle_dossier_instruction_type'] !== '') {
2238     $valF['dossier_instruction_type'] = $this->regle($row['regle_dossier_instruction_type'], 'regle_dossier_instruction_type');
2239     }
2240 mbroquet 3730 }
2241 softime 6565 // Si des valeurs de données techniques ont été calculées alors on met à jour l'enregistrement
2242     if ($valF_dt != "") {
2243     $dt_id = $this->getDonneesTechniques();
2244     // On met à jour le dossier
2245     $cle = " donnees_techniques='".$dt_id."'";
2246     $res1 = $db->autoExecute(DB_PREFIXE.'donnees_techniques', $valF_dt, DB_AUTOQUERY_UPDATE, $cle);
2247     $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."donnees_techniques\", ".print_r($valF_dt, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
2248     if (database::isError($res1)) {
2249     die($res->getMessage());
2250     }
2251     // Affichage d'informations à l'utilisateur
2252     $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
2253     }
2254 mbroquet 3730 // Si des valeurs ont été calculées alors on met à jour l'enregistrement
2255     if ($valF != "") {
2256     // On met à jour le dossier
2257     $cle = " dossier='".$this->valF['dossier']."'";
2258     $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
2259     $this->addToLog("triggermodifierapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
2260     if (database::isError($res1)) {
2261     die($res->getMessage());
2262     }
2263     // Affichage d'informations à l'utilisateur
2264     $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
2265     }
2266    
2267     $restriction = $this->get_restriction($val['evenement']);
2268     $this->restriction_valid = $this->restrictionIsValid($restriction);
2269    
2270     if($restriction == "" || $this->restriction_valid ){
2271     // Récupération de tous les paramètres de l'événement sélectionné
2272     $sql = "SELECT * FROM ".DB_PREFIXE."evenement
2273     WHERE evenement=".$this->valF['evenement'];
2274     $res = $db->query($sql);
2275     $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
2276     if (database::isError($res)) {
2277     die($res->getMessage());
2278     }
2279 nmeucci 3965 $current_id = $this->getVal($this->clePrimaire);
2280 mbroquet 3730 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
2281     // Si la date de retour signature est éditée on vérifie si il existe un événement automatique
2282     if ($this->getVal('date_retour_signature') == "" AND
2283     $this->valF['date_retour_signature'] != "" AND
2284     $row['evenement_retour_signature'] != "") {
2285 softime 7996 $new_instruction = $this->f->get_inst__om_dbform(array(
2286     "obj" => "instruction",
2287     "idx" => "]",
2288     ));
2289 mbroquet 3730 // Création d'un tableau avec la liste des champs de l'instruction
2290     foreach($new_instruction->champs as $champ) {
2291     $valNewInstr[$champ] = "";
2292     }
2293     // Définition des valeurs de la nouvelle instruction
2294     $valNewInstr["evenement"] = $row['evenement_retour_signature'];
2295     $valNewInstr["destinataire"] = $this->valF['destinataire'];
2296     $valNewInstr["dossier"] = $this->valF['dossier'];
2297     $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_signature']);
2298     $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
2299     $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
2300     $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
2301     $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
2302     $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
2303     $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
2304 nmeucci 3965 $new_instruction->setParameter("maj", 0);
2305     $new_instruction->class_actions[0]["identifier"] =
2306     "retour signature de l'instruction $current_id";
2307 mbroquet 3730 $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
2308    
2309     //Si une erreur s'est produite et qu'il s'agit d'un problème
2310     //de restriction
2311     if ($retour == false && !$new_instruction->restriction_valid){
2312     $error_message = $this->get_restriction_error_message($restriction);
2313     $this->f->displayMessage("error", $error_message);
2314     $this->addToLog("triggermodifierapres() : evenement retour ".
2315     "instruction ".$this->valF[$this->clePrimaire]." : ".
2316     $new_instruction->msg);
2317     }
2318     //Si une erreur s'est produite après le test de la restriction
2319     elseif ($retour == false && $new_instruction->restriction_valid){
2320     $this->correct = false ;
2321     $this->msg .= $new_instruction->msg;
2322     return false;
2323     }
2324     }
2325     // Si la date de retour AR est éditée on vérifie si il existe un événement automatique
2326     if ($this->getVal('date_retour_rar') == "" AND
2327     $this->valF['date_retour_rar'] != "") {
2328    
2329     if($row['evenement_retour_ar'] != "") {
2330 softime 7996 $new_instruction = $this->f->get_inst__om_dbform(array(
2331     "obj" => "instruction",
2332     "idx" => "]",
2333     ));
2334 mbroquet 3730 // Création d'un tableau avec la liste des champs de l'instruction
2335     foreach($new_instruction->champs as $champ) {
2336     $valNewInstr[$champ] = "";
2337     }
2338     // Définition des valeurs de la nouvelle instruction
2339     $valNewInstr["evenement"] = $row['evenement_retour_ar'];
2340     $valNewInstr["destinataire"] = $this->valF['destinataire'];
2341     $valNewInstr["dossier"] = $this->valF['dossier'];
2342     $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_rar']);
2343     $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
2344     $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
2345     $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
2346     $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
2347     $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
2348     $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
2349 nmeucci 3965 $new_instruction->setParameter("maj", 0);
2350     $new_instruction->class_actions[0]["identifier"] =
2351     "retour RAR de l'instruction $current_id";
2352 mbroquet 3730 $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
2353    
2354     //Si une erreur s'est produite et qu'il s'agit d'un problème
2355     //de restriction
2356     if ($retour == false && !$new_instruction->restriction_valid) {
2357     $error_message = $this->get_restriction_error_message($restriction);
2358     $this->f->displayMessage("error", $error_message);
2359     $this->addToLog(
2360     "triggermodifierapres() : evenement retour instruction ".
2361     $this->valF[$this->clePrimaire]." : ".
2362     $new_instruction->msg
2363     );
2364     }
2365     //Si une erreur s'est produite après le test de la restriction
2366     elseif ($retour == false && $new_instruction->restriction_valid){
2367     $this->correct = false ;
2368     $this->msg .= $new_instruction->msg;
2369     return false;
2370     }
2371     }
2372     // Mise à jour du flag incomplet_notifie dans dossier si la
2373     // date limite d'instruction n'est pas dépassée
2374     if($row['type']=='incompletude' &&
2375     ($this->valF['archive_date_notification_delai'] >= $this->valF['date_retour_rar'] ||
2376     $this->valF['archive_date_notification_delai'] == "")) {
2377     $valFIncomp['incomplet_notifie'] = true;
2378     $cle = " dossier='".$val['dossier']."'";
2379     $resIncomp = $db->autoExecute(
2380     DB_PREFIXE.'dossier',
2381     $valFIncomp,
2382     DB_AUTOQUERY_UPDATE,
2383     $cle
2384     );
2385     $this->addToLog(
2386     "triggersupprimer(): db->autoexecute(\"".
2387     DB_PREFIXE."dossier\", ".print_r($valFIncomp, true).
2388     ", DB_AUTOQUERY_UPDATE, \"".$cle."\");",
2389     VERBOSE_MODE
2390     );
2391     if (database::isError($resIncomp)) {
2392     die($resIncomp->getMessage());
2393     }
2394     }
2395     }
2396     }
2397     }
2398    
2399 softime 8640 /**
2400     * Mise à jour de la date de dernière modification du dossier
2401     * d'instruction
2402     */
2403     $inst_di = $this->get_inst_dossier($this->getVal('dossier'));
2404     $inst_di->update_last_modification_date();
2405    
2406 mbroquet 3730 // Mise à jour des données du dossier d'autorisation
2407 softime 7996 $da = $this->f->get_inst__om_dbform(array(
2408     "obj" => "dossier_autorisation",
2409     "idx" => $this->getNumDemandeAutorFromDossier($this->valF['dossier']),
2410     ));
2411 softime 8640 $params = array(
2412     'di_id' => $this->getVal('dossier'),
2413     );
2414     if($da->majDossierAutorisation($params) === false) {
2415 mbroquet 3730 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
2416     $this->correct = false;
2417     return false;
2418     }
2419 softime 7996
2420 nmeucci 3933 return $this->add_log_to_dossier($id, $val);
2421 fmichon 4708 }
2422 mbroquet 3730
2423 softime 6929 function triggersupprimer($id, &$db = null, $val = array(), $DEBUG = null) {
2424 mbroquet 3730 /**
2425     * L'objectif ici est de repositionner les valeurs récupérées en
2426     * archive dans le dossier d'instruction avant de supprimer l'événement
2427     * d'instruction
2428     */
2429    
2430 softime 5024 // Mise à jour des 4 valeurs modifiées par l'action
2431     $valF['delai'] = $val['archive_delai'];
2432     $valF['accord_tacite'] = $val['archive_accord_tacite'];
2433     $valF['etat'] = $val['archive_etat'];
2434     if ($val['archive_avis'] != '') {
2435     $valF['avis_decision'] = $val['archive_avis'];
2436     } else {
2437 softime 6565 $valF['avis_decision'] = null;
2438 softime 5024 }
2439 softime 6565 // Mise à jour des dates avec la valeur présente dans le formulaire
2440 softime 5024 // de suppression. Si la valeur de la date est vide alors on fixe
2441 softime 6565 // à la valeur null
2442 softime 5024 if ($val['archive_date_complet'] != '') {
2443     $valF['date_complet'] = $val['archive_date_complet'];
2444     } else {
2445 softime 6565 $valF['date_complet'] = null;
2446 softime 5024 }
2447     if ($val['archive_date_dernier_depot'] != '') {
2448     $valF['date_dernier_depot'] = $val['archive_date_dernier_depot'];
2449     } else {
2450 softime 6565 $valF['date_dernier_depot'] = null;
2451 softime 5024 }
2452     if ($val['archive_date_rejet'] != '') {
2453     $valF['date_rejet'] = $val['archive_date_rejet'];
2454     } else {
2455 softime 6565 $valF['date_rejet'] = null;
2456 softime 5024 }
2457     if ($val['archive_date_limite'] != '') {
2458     $valF['date_limite'] = $val['archive_date_limite'];
2459     } else {
2460 softime 6565 $valF['date_limite'] = null;
2461 softime 5024 }
2462     if ($val['archive_date_notification_delai'] != '') {
2463     $valF['date_notification_delai'] = $val['archive_date_notification_delai'];
2464     } else {
2465 softime 6565 $valF['date_notification_delai'] = null;
2466 softime 5024 }
2467     if ($val['archive_date_decision'] != '') {
2468     $valF['date_decision'] = $val['archive_date_decision'];
2469     } else {
2470 softime 6565 $valF['date_decision'] = null;
2471 softime 5024 }
2472     if ($val['archive_date_validite'] != '') {
2473     $valF['date_validite'] = $val['archive_date_validite'];
2474     } else {
2475 softime 6565 $valF['date_validite'] = null;
2476 softime 5024 }
2477     if ($val['archive_date_achevement'] != '') {
2478     $valF['date_achevement'] = $val['archive_date_achevement'];
2479     } else {
2480 softime 6565 $valF['date_achevement'] = null;
2481 softime 5024 }
2482     if ($val['archive_date_chantier'] != '') {
2483     $valF['date_chantier'] = $val['archive_date_chantier'];
2484     } else {
2485 softime 6565 $valF['date_chantier'] = null;
2486 softime 5024 }
2487     if ($val['archive_date_conformite'] != '') {
2488     $valF['date_conformite'] = $val['archive_date_conformite'];
2489     } else {
2490 softime 6565 $valF['date_conformite'] = null;
2491 softime 5024 }
2492     if ($val['archive_incompletude'] != '') {
2493     $valF['incompletude'] = $val['archive_incompletude'];
2494     } else {
2495 softime 6565 $valF['incompletude'] = null;
2496 softime 5024 }
2497     if ($val['archive_incomplet_notifie'] != '') {
2498     $valF['incomplet_notifie'] = $val['archive_incomplet_notifie'];
2499     } else {
2500 softime 6565 $valF['incomplet_notifie'] = null;
2501 softime 5024 }
2502     if ($val['archive_evenement_suivant_tacite'] != '') {
2503     $valF['evenement_suivant_tacite'] = $val['archive_evenement_suivant_tacite'];
2504     } else {
2505 softime 6565 $valF['evenement_suivant_tacite'] = null;
2506 softime 5024 }
2507     if ($val['archive_evenement_suivant_tacite_incompletude'] != '') {
2508     $valF['evenement_suivant_tacite_incompletude'] = $val['archive_evenement_suivant_tacite_incompletude'];
2509     } else {
2510 softime 6565 $valF['evenement_suivant_tacite_incompletude'] = null;
2511 softime 5024 }
2512     if ($val['archive_etat_pendant_incompletude'] != '') {
2513     $valF['etat_pendant_incompletude'] = $val['archive_etat_pendant_incompletude'];
2514     } else {
2515 softime 6565 $valF['etat_pendant_incompletude'] = null;
2516 softime 5024 }
2517     if ($val['archive_date_limite_incompletude'] != '') {
2518     $valF['date_limite_incompletude'] = $val['archive_date_limite_incompletude'];
2519     } else {
2520 softime 6565 $valF['date_limite_incompletude'] = null;
2521 softime 5024 }
2522     if ($val['archive_delai_incompletude'] != '') {
2523     $valF['delai_incompletude'] = $val['archive_delai_incompletude'];
2524     } else {
2525 softime 6565 $valF['delai_incompletude'] = null;
2526 softime 5024 }
2527     if ($val['archive_autorite_competente'] != '') {
2528     $valF['autorite_competente'] = $val['archive_autorite_competente'];
2529     } else {
2530 softime 6565 $valF['autorite_competente'] = null;
2531 softime 5024 }
2532 softime 6565 $valF['date_cloture_instruction'] = null;
2533     if ($val['archive_date_cloture_instruction'] !== '') {
2534     $valF['date_cloture_instruction'] = $val['archive_date_cloture_instruction'];
2535     }
2536     // Dates concernant les dossiers contentieux
2537     // Date de première visite
2538     $valF['date_premiere_visite'] = null;
2539     if ($val['archive_date_premiere_visite'] !== '') {
2540     $valF['date_premiere_visite'] = $val['archive_date_premiere_visite'];
2541     }
2542     // Date de dernière visite
2543     $valF['date_derniere_visite'] = null;
2544     if ($val['archive_date_derniere_visite'] !== '') {
2545     $valF['date_derniere_visite'] = $val['archive_date_derniere_visite'];
2546     }
2547     // Date contradictoire
2548     $valF['date_contradictoire'] = null;
2549     if ($val['archive_date_contradictoire'] !== '') {
2550     $valF['date_contradictoire'] = $val['archive_date_contradictoire'];
2551     }
2552     // Date de retour contradictoire
2553     $valF['date_retour_contradictoire'] = null;
2554     if ($val['archive_date_retour_contradictoire'] !== '') {
2555     $valF['date_retour_contradictoire'] = $val['archive_date_retour_contradictoire'];
2556     }
2557     // Date de l'AIT
2558     $valF['date_ait'] = null;
2559     if ($val['archive_date_ait'] !== '') {
2560     $valF['date_ait'] = $val['archive_date_ait'];
2561     }
2562     // Date de transmission au parquet
2563     $valF['date_transmission_parquet'] = null;
2564     if ($val['archive_date_transmission_parquet'] !== '') {
2565     $valF['date_transmission_parquet'] = $val['archive_date_transmission_parquet'];
2566     }
2567 softime 8593 // Type du dossier d'instruction
2568     if ($val['archive_dossier_instruction_type'] !== '' && $val['archive_dossier_instruction_type'] !== null) {
2569     $valF['dossier_instruction_type'] = $val['archive_dossier_instruction_type'];
2570     }
2571 softime 6565
2572 softime 5024 // On met à jour le dossier
2573     $cle = " dossier='".$val['dossier']."'";
2574     $res = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
2575     $this->addToLog("triggersupprimer(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
2576     if (database::isError($res)) {
2577     die($res->getMessage());
2578     }
2579     // Affichage d'informations à l'utilisateur
2580     $this->addToMessage(_("Suppression de l'instruction")." [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
2581    
2582     // Mise à jour de la demande si un récépissé d'instruction correspond à l'instruction à supprimer
2583 mbroquet 3730 }
2584    
2585 softime 6929 function triggersupprimerapres($id, &$db = null, $val = array(), $DEBUG = null) {
2586 softime 8640 /**
2587     * Mise à jour de la date de dernière modification du dossier
2588     * d'instruction
2589     */
2590     $inst_di = $this->get_inst_dossier($this->getVal('dossier'));
2591     $inst_di->update_last_modification_date();
2592    
2593     /**
2594     * Mise à jour des données du dossier d'autorisation
2595     */
2596 softime 7996 $da = $this->f->get_inst__om_dbform(array(
2597     "obj" => "dossier_autorisation",
2598     "idx" => $this->getNumDemandeAutorFromDossier($val["dossier"]),
2599     ));
2600 softime 8640 $params = array(
2601     'di_id' => $this->getVal('dossier'),
2602     );
2603     if($da->majDossierAutorisation($params) === false) {
2604 mbroquet 3730 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
2605     $this->correct = false;
2606     return false;
2607     }
2608 softime 7996
2609     //
2610 softime 8640 $val['evenement'] = $this->getVal('evenement');
2611 nmeucci 3933 return $this->add_log_to_dossier($id, $val);
2612 mbroquet 3730 }
2613    
2614     /**
2615     * Permet de composer un message d'erreur sur restriction non valide en
2616     * fonction du contexte.
2617     *
2618     * @param string $restriction formule de la restriction
2619     *
2620     * @return string message d'erreur
2621     */
2622     function get_restriction_error_message($restriction) {
2623     // Affichage du message si la restriction s'applique
2624     // Contexte du suivi des dates (message simple)
2625     $message_restrict = _("Probleme de dates :");
2626     // Split restriction
2627     $champs_restrict = preg_split(
2628     '/(\W+)/',
2629     $restriction,
2630     null,
2631     PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE
2632     );
2633     $formated_restrict = "";
2634     // Ajout des chaînes à traduire
2635     foreach ($champs_restrict as $value) {
2636     $formated_restrict .= _($value)." ";
2637     }
2638     $formated_restrict = substr($formated_restrict, 0, -1);
2639     // Message d'erreur dans le contexte du suivi des dates
2640     if($this->getParameter("maj") == 170) {
2641     $message_restrict .= " "._("contactez l'instructeur du dossier");
2642     $message_restrict .= "<br/>(".$formated_restrict.")";
2643     } else {
2644     // Affichage du message si la restriction s'applique
2645     // Contexte instruction
2646     $message_restrict .= "<br/>".$formated_restrict;
2647     }
2648    
2649     return $message_restrict;
2650     }
2651    
2652     /**
2653     * Vérifie la restriction sur l'événement.
2654     *
2655     * @param array $val valeurs du formulaire
2656     * @param database $db handler database
2657     * @param boolean $DEBUG NA
2658     *
2659     * @return [type] [description]
2660     */
2661 softime 6929 function verifier($val = array(), &$db = null, $DEBUG = null) {
2662 mbroquet 3730 parent::verifier($val, $db, $DEBUG);
2663    
2664     if ( isset($val['evenement']) && is_numeric($val['evenement'])){
2665     $restriction = $this->get_restriction($val['evenement']);
2666    
2667     //Test qu'une restriction est présente
2668     if ($restriction != "" ){
2669    
2670     //Test si la restriction est valide
2671     $this->restriction_valid = $this->restrictionIsValid($restriction);
2672     if ( !$this->restriction_valid ){
2673    
2674     // Affichage du message si la restriction s'applique
2675     $this->addToMessage(
2676     $this->get_restriction_error_message($restriction)
2677     );
2678     $this->correct=false;
2679     return false;
2680     }
2681    
2682     // Liste des opérateurs possible
2683 nmeucci 3873 $operateurs = array(">=", "<=", "+", "-", "&&", "||", "==", "!=");
2684 mbroquet 3730 // Supprime tous les espaces de la chaîne de caractère
2685     $restriction = str_replace(' ', '', $restriction);
2686    
2687     // Met des espace avant et après les opérateurs puis transforme la
2688     // chaine en un tableau
2689     $tabRestriction = str_replace($operateurs, " ", $restriction);
2690     // Tableau des champ
2691     $tabRestriction = explode(" ", $tabRestriction);
2692     // Supprime les numériques du tableau
2693     foreach ($tabRestriction as $key => $value) {
2694     if (is_numeric($value)) {
2695     unset($tabRestriction[$key]);
2696     }
2697     }
2698    
2699     // Vérifie les champs utilisés pour la restriction
2700     $check_field_exist = $this->f->check_field_exist($tabRestriction, 'instruction');
2701     if ($check_field_exist !== true) {
2702    
2703     // Liste des champs en erreur
2704     $string_error_fields = implode(", ", $check_field_exist);
2705    
2706     // Message d'erreur
2707     $error_message = _("Le champ %s n'est pas utilisable pour le champ %s");
2708     if (count($check_field_exist) > 1) {
2709     $error_message = _("Les champs %s ne sont pas utilisable pour le champ %s");
2710     }
2711    
2712     // Affiche l'erreur
2713     $this->correct=false;
2714     $this->addToMessage(sprintf($error_message, $string_error_fields, _("restriction")));
2715     $this->addToMessage(_("Veuillez contacter votre administrateur."));
2716     }
2717     }
2718    
2719     }
2720     if(!$this->updateDate("date_envoi_signature")) {
2721     return false;
2722     }
2723     if(!$this->updateDate("date_retour_signature")) {
2724     return false;
2725     }
2726     if(!$this->updateDate("date_envoi_rar")) {
2727     return false;
2728     }
2729     if(!$this->updateDate("date_retour_rar")) {
2730     return false;
2731     }
2732     if(!$this->updateDate("date_envoi_controle_legalite")) {
2733     return false;
2734     }
2735     if(!$this->updateDate("date_retour_controle_legalite")) {
2736     return false;
2737     }
2738    
2739     }
2740    
2741     /**
2742     * Finalisation des documents.
2743     * @param string $champ champ du fichier à finaliser
2744     * @param booleen $status permet de définir si on finalise ou définalise
2745     * @param string $sousform permet de savoir si se trouve dans un sousformulaire (passé au javascript)
2746     */
2747     function manage_finalizing($mode = null, $val = array()) {
2748 softime 5024 //
2749     $this->begin_treatment(__METHOD__);
2750 mbroquet 3730
2751 softime 5024 //
2752     $id_inst = $this->getVal($this->clePrimaire);
2753 mbroquet 3730
2754 softime 5024 //
2755     $admin_msg_error = _("Veuillez contacter votre administrateur.");
2756     $file_msg_error = _("Erreur de traitement de fichier.")
2757     ." ".$admin_msg_error;
2758     $bdd_msg_error = _("Erreur de base de données.")
2759     ." ".$admin_msg_error;
2760 softime 5169 $log_msg_error = "Finalisation non enregistrée - id instruction = %s - uid fichier = %s";
2761 mbroquet 3730
2762     // Si on finalise le document
2763     if ($mode == "finalize"){
2764 softime 5024 //
2765     $etat = _('finalisation');
2766 mbroquet 3730
2767     // Récupère la collectivite du dossier d'instruction
2768     $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
2769    
2770     //
2771     $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
2772 softime 8593
2773     //
2774     $params = array(
2775     "specific" => array(),
2776     );
2777     // Si la rédaction libre est activée sur l'instruction
2778     if ($this->getVal("flag_edition_integrale") == 't') {
2779     $params["specific"]["corps"] = array(
2780     "mode" => "set",
2781     "value" => $this->getVal("corps_om_htmletatex"),
2782     );
2783     $params["specific"]["titre"] = array(
2784     "mode" => "set",
2785     "value" => $this->getVal("titre_om_htmletat"),
2786     );
2787     }
2788 mbroquet 3730 // Génération du PDF
2789 softime 8593 $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'), $collectivite, null, $params);
2790 mbroquet 3730 $pdf_output = $result['pdf_output'];
2791    
2792     //Métadonnées du document
2793     $metadata = array(
2794 softime 5024 'filename' => 'instruction_'.$id_inst.'.pdf',
2795 mbroquet 3730 'mimetype' => 'application/pdf',
2796     'size' => strlen($pdf_output)
2797     );
2798    
2799     // Récupération des métadonnées calculées après validation
2800     $spe_metadata = $this->getMetadata("om_fichier_instruction");
2801    
2802     //On vérifie si l'instruction à finaliser a un événement de type arrete
2803     $sql = "SELECT type
2804     FROM ".DB_PREFIXE."evenement
2805     WHERE evenement = ".$this->getVal("evenement");
2806     $typeEvenement = $this->db->getOne($sql);
2807     $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2808 softime 5024 if ($this->f->isDatabaseError($typeEvenement, true) === true) {
2809     $this->correct = false;
2810     $this->addToMessage($bdd_msg_error);
2811     return $this->end_treatment(__METHOD__, false);
2812 mbroquet 3730 }
2813    
2814     //Initialisation de la variable
2815     $arrete_metadata = array();
2816     // Si l'événement est de type arrete, on ajoute les métadonnées spécifiques
2817     if ( $typeEvenement === 'arrete' ){
2818     $arrete_metadata = $this->getMetadata("arrete");
2819     }
2820    
2821     $metadata = array_merge($metadata, $spe_metadata, $arrete_metadata);
2822    
2823 softime 5024 // Si le document a déjà été finalisé on le met à jour
2824     // en conservant son UID
2825 mbroquet 3730 if ($this->getVal("om_fichier_instruction") != ''){
2826     $uid = $this->f->storage->update(
2827     $this->getVal("om_fichier_instruction"), $pdf_output, $metadata);
2828     }
2829 softime 5024 // Sinon on crée un nouveau document et dont on récupère l'UID
2830 mbroquet 3730 else {
2831     $uid = $this->f->storage->create($pdf_output, $metadata);
2832     }
2833     }
2834    
2835 softime 5024 // Si on définalise le document
2836 mbroquet 3730 if ($mode == "unfinalize") {
2837 softime 5024 //
2838     $etat = _('définalisation');
2839 mbroquet 3730 // Récupération de l'uid du document finalisé
2840     $uid = $this->getVal("om_fichier_instruction");
2841     }
2842 softime 5024
2843     // Si on définalise l'UID doit être défini
2844     // Si on finalise la création/modification du fichier doit avoir réussi
2845 mbroquet 3730 if ($uid == '' || $uid == 'OP_FAILURE' ) {
2846 softime 5024 $this->correct = false;
2847     $this->addToMessage($file_msg_error);
2848     $this->addToLog(sprintf($log_msg_error, $id_inst, $uid));
2849     return $this->end_treatment(__METHOD__, false);
2850 mbroquet 3730 }
2851    
2852     //
2853     foreach ($this->champs as $key => $champ) {
2854     //
2855     $val[$champ] = $this->val[$key];
2856     }
2857    
2858     //
2859 softime 6565 $val['date_evenement'] = $this->dateDBToForm($val['date_evenement']);
2860     $val['archive_date_complet'] = $this->dateDBToForm($val['archive_date_complet']);
2861     $val['archive_date_rejet'] = $this->dateDBToForm($val['archive_date_rejet']);
2862     $val['archive_date_limite'] = $this->dateDBToForm($val['archive_date_limite']);
2863     $val['archive_date_notification_delai'] = $this->dateDBToForm($val['archive_date_notification_delai']);
2864     $val['archive_date_decision'] = $this->dateDBToForm($val['archive_date_decision']);
2865     $val['archive_date_validite'] = $this->dateDBToForm($val['archive_date_validite']);
2866     $val['archive_date_achevement'] = $this->dateDBToForm($val['archive_date_achevement']);
2867     $val['archive_date_chantier'] = $this->dateDBToForm($val['archive_date_chantier']);
2868     $val['archive_date_conformite'] = $this->dateDBToForm($val['archive_date_conformite']);
2869     $val['archive_date_dernier_depot'] = $this->dateDBToForm($val['archive_date_dernier_depot']);
2870     $val['archive_date_limite_incompletude'] = $this->dateDBToForm($val['archive_date_limite_incompletude']);
2871     $val['date_finalisation_courrier'] = $this->dateDBToForm($val['date_finalisation_courrier']);
2872     $val['date_envoi_signature'] = $this->dateDBToForm($val['date_envoi_signature']);
2873     $val['date_retour_signature'] = $this->dateDBToForm($val['date_retour_signature']);
2874     $val['date_envoi_rar'] = $this->dateDBToForm($val['date_envoi_rar']);
2875     $val['date_retour_rar'] = $this->dateDBToForm($val['date_retour_rar']);
2876     $val['date_envoi_controle_legalite'] = $this->dateDBToForm($val['date_envoi_controle_legalite']);
2877     $val['date_retour_controle_legalite'] = $this->dateDBToForm($val['date_retour_controle_legalite']);
2878     $val['archive_date_cloture_instruction'] = $this->dateDBToForm($val['archive_date_cloture_instruction']);
2879     $val['archive_date_premiere_visite'] = $this->dateDBToForm($val['archive_date_premiere_visite']);
2880     $val['archive_date_derniere_visite'] = $this->dateDBToForm($val['archive_date_derniere_visite']);
2881     $val['archive_date_contradictoire'] = $this->dateDBToForm($val['archive_date_contradictoire']);
2882     $val['archive_date_retour_contradictoire'] = $this->dateDBToForm($val['archive_date_retour_contradictoire']);
2883     $val['archive_date_ait'] = $this->dateDBToForm($val['archive_date_ait']);
2884     $val['archive_date_transmission_parquet'] = $this->dateDBToForm($val['archive_date_transmission_parquet']);
2885 mbroquet 3730 $this->setvalF($val);
2886    
2887     // Verification de la validite des donnees
2888     $this->verifier($this->val, $this->db, DEBUG);
2889     // Si les verifications precedentes sont correctes, on procede a
2890     // la modification, sinon on ne fait rien et on retourne une erreur
2891 softime 5024 if ($this->correct === true) {
2892 mbroquet 3730 //
2893     $valF = array(
2894     "om_fichier_instruction" => $uid,
2895     "date_finalisation_courrier" => date('Y-m-d')
2896     );
2897     //
2898     if($mode=="finalize") {
2899     // état finalisé vrai
2900 softime 5024 $valF["om_final_instruction"] = true;
2901 mbroquet 3730 // ajout log utilisateur
2902     $login = $_SESSION['login'];
2903     $nom = "";
2904     $this->f->getUserInfos();
2905     if (isset($this->f->om_utilisateur["nom"])
2906     && !empty($this->f->om_utilisateur["nom"])) {
2907     $nom = $this->f->om_utilisateur["nom"];
2908     }
2909     $valF["om_final_instruction_utilisateur"] = $_SESSION['login'];
2910     if ($nom != "") {
2911     $valF["om_final_instruction_utilisateur"] .= " (".$nom.")";
2912     }
2913     } else {
2914     // état finalisé faux
2915 softime 5024 $valF["om_final_instruction"] = false;
2916 mbroquet 3730 // suppression log utilisateur
2917     $valF["om_final_instruction_utilisateur"] = '';
2918     }
2919    
2920     // Execution de la requête de modification des donnees de l'attribut
2921     // valF de l'objet dans l'attribut table de l'objet
2922     $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF,
2923 softime 5024 DB_AUTOQUERY_UPDATE, $this->getCle($id_inst));
2924     $this->addToLog(__METHOD__."() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id_inst)."\")", VERBOSE_MODE);
2925     //
2926     if ($this->f->isDatabaseError($res, true) === true) {
2927     $this->correct = false;
2928     $this->addToMessage($bdd_msg_error);
2929     return $this->end_treatment(__METHOD__, false);
2930     }
2931 mbroquet 3730
2932 softime 5024 //
2933     $this->addToMessage(sprintf(_("La %s du document s'est effectuee avec succes."), $etat));
2934     //
2935     if ($this->add_log_to_dossier($id_inst, $val) === false) {
2936     return $this->end_treatment(__METHOD__, false);
2937     }
2938     //
2939     return $this->end_treatment(__METHOD__, true);
2940 mbroquet 3730 }
2941 softime 5024 // L'appel de verifier() a déjà positionné correct à false
2942     // et défini un message d'erreur.
2943     $this->addToLog(sprintf($log_msg_error, $id_inst, $uid));
2944     return $this->end_treatment(__METHOD__, false);
2945 mbroquet 3730 }
2946    
2947     /**
2948     * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
2949     * @return string numéro de dossier d'instruction
2950     */
2951     protected function getDossier() {
2952     if(empty($this->specificMetadata)) {
2953     $this->getSpecificMetadata();
2954     }
2955     return $this->specificMetadata->dossier;
2956     }
2957     /**
2958     * Récupération la version du dossier d'instruction à ajouter aux métadonnées
2959     * @return int Version
2960     */
2961     protected function getDossierVersion() {
2962     if(empty($this->specificMetadata)) {
2963     $this->getSpecificMetadata();
2964     }
2965     return $this->specificMetadata->version;
2966     }
2967     /**
2968     * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
2969     * @return string numéro de dossier d'autorisation
2970     */
2971     protected function getNumDemandeAutor() {
2972     if(empty($this->specificMetadata)) {
2973     $this->getSpecificMetadata();
2974     }
2975     return $this->specificMetadata->dossier_autorisation;
2976     }
2977     /**
2978     * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
2979     * @return date de la demande initiale
2980     */
2981     protected function getAnneemoisDemandeAutor() {
2982     if(empty($this->specificMetadata)) {
2983     $this->getSpecificMetadata();
2984     }
2985     return $this->specificMetadata->date_demande_initiale;
2986     }
2987     /**
2988     * Récupération du type de dossier d'instruction à ajouter aux métadonnées
2989     * @return string type du dossier d'instruction
2990     */
2991     protected function getTypeInstruction() {
2992     if(empty($this->specificMetadata)) {
2993     $this->getSpecificMetadata();
2994     }
2995     return $this->specificMetadata->dossier_instruction_type;
2996     }
2997     /**
2998     * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
2999     * @return string avis
3000     */
3001     protected function getStatutAutorisation() {
3002     if(empty($this->specificMetadata)) {
3003     $this->getSpecificMetadata();
3004     }
3005     return $this->specificMetadata->statut;
3006     }
3007     /**
3008     * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
3009     * @return string type du dossier d'autorisation
3010     */
3011     protected function getTypeAutorisation() {
3012     if(empty($this->specificMetadata)) {
3013     $this->getSpecificMetadata();
3014     }
3015     return $this->specificMetadata->dossier_autorisation_type;
3016     }
3017     /**
3018     * Récupération de la date d'ajout de document à ajouter aux métadonnées
3019     * @return date de l'évènement
3020     */
3021     protected function getDateEvenementDocument() {
3022     return date("Y-m-d");
3023     }
3024     /**
3025     * Récupération du groupe d'instruction à ajouter aux métadonnées
3026     * @return string Groupe d'instruction
3027     */
3028     protected function getGroupeInstruction() {
3029     if(empty($this->specificMetadata)) {
3030     $this->getSpecificMetadata();
3031     }
3032     return $this->specificMetadata->groupe_instruction;
3033     }
3034     /**
3035     * Récupération du libellé du type du document à ajouter aux métadonnées
3036     * @return string Groupe d'instruction
3037     */
3038     protected function getTitle() {
3039    
3040     // Récupère le champ événement
3041     if (isset($this->valF["evenement"]) AND $this->valF["evenement"] != "") {
3042     $evenement = $this->valF["evenement"];
3043     } else {
3044     $evenement = $this->getVal("evenement");
3045     }
3046    
3047     // Requête sql
3048     $sql = "SELECT libelle FROM ".DB_PREFIXE."evenement
3049     WHERE evenement=".$evenement;
3050     $evenement_libelle = $this->db->getOne($sql);
3051     $this->addToLog("getTitle(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
3052     if (database::isError($evenement_libelle)) {
3053     die();
3054     }
3055    
3056     // Retourne le libelle de l'événement
3057     return $evenement_libelle;
3058     }
3059    
3060 softime 6272
3061 mbroquet 3730 /**
3062 softime 6272 * Récupération du champ ERP du dossier d'instruction.
3063     *
3064     * @return boolean
3065     */
3066     public function get_concerne_erp() {
3067     //
3068     if(empty($this->specificMetadata)) {
3069     $this->getSpecificMetadata();
3070     }
3071     //
3072     return $this->specificMetadata->erp;
3073     }
3074    
3075    
3076     /**
3077 mbroquet 3730 * Cette méthode permet de stocker en attribut toutes les métadonnées
3078     * nécessaire à l'ajout d'un document.
3079     */
3080     public function getSpecificMetadata() {
3081     if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
3082     $dossier = $this->valF["dossier"];
3083     } else {
3084     $dossier = $this->getVal("dossier");
3085     }
3086     //Requête pour récupérer les informations essentiels sur le dossier d'instruction
3087     $sql = "SELECT dossier.dossier as dossier,
3088     dossier_autorisation.dossier_autorisation as dossier_autorisation,
3089     to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
3090     dossier_instruction_type.code as dossier_instruction_type,
3091     etat_dossier_autorisation.libelle as statut,
3092     dossier_autorisation_type.code as dossier_autorisation_type,
3093 softime 6272 groupe.code as groupe_instruction,
3094     CASE WHEN dossier.erp IS TRUE
3095     THEN 'true'
3096     ELSE 'false'
3097     END as erp
3098 mbroquet 3730 FROM ".DB_PREFIXE."dossier
3099     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
3100     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
3101     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
3102     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
3103     LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
3104     ON dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
3105     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
3106     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
3107     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
3108     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
3109     LEFT JOIN ".DB_PREFIXE."groupe
3110     ON dossier_autorisation_type.groupe = groupe.groupe
3111     WHERE dossier.dossier = '".$dossier."'";
3112     $res = $this->db->query($sql);
3113     $this->f->addToLog("getSpecificMetadata() : db->query(".$sql.")", VERBOSE_MODE);
3114     if ( database::isError($res)){
3115     die();
3116     }
3117    
3118     //Le résultat est récupéré dans un objet
3119     $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
3120    
3121     //Si il y a un résultat
3122     if ($row !== null) {
3123    
3124 fmichon 3892 // Instrance de la classe dossier
3125     $inst_dossier = $this->get_inst_dossier($dossier);
3126    
3127     // Insère l'attribut version à l'objet
3128     $row->version = $inst_dossier->get_dossier_instruction_version();
3129    
3130 mbroquet 3730 //Alors on créé l'objet dossier_instruction
3131     $this->specificMetadata = $row;
3132    
3133     }
3134     }
3135    
3136     /**
3137     * Retourne le statut du dossier d'instruction
3138     * @param string $idx Identifiant du dossier d'instruction
3139     * @return string Le statut du dossier d'instruction
3140     */
3141     function getStatutAutorisationDossier($idx){
3142    
3143     $statut = '';
3144    
3145     //Si l'identifiant du dossier d'instruction fourni est correct
3146     if ( $idx != '' ){
3147    
3148     //On récupère le statut de l'état du dossier à partir de l'identifiant du
3149     //dossier
3150     $sql = "SELECT etat.statut
3151     FROM ".DB_PREFIXE."dossier
3152     LEFT JOIN
3153     ".DB_PREFIXE."etat
3154     ON
3155     dossier.etat = etat.etat
3156     WHERE dossier ='".$idx."'";
3157     $statut = $this->db->getOne($sql);
3158     $this->f->addToLog("getStatutAutorisationDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
3159     if ( database::isError($statut)){
3160     die();
3161     }
3162     }
3163     return $statut;
3164     }
3165    
3166     /**
3167     * Récupère les données du dossier
3168     * @return array
3169     */
3170     function get_dossier_actual() {
3171    
3172     // Initialisation de la valeur de retour
3173     $return = array();
3174    
3175     // Récupération de toutes les valeurs du dossier d'instruction en cours
3176     $sql = "SELECT * FROM ".DB_PREFIXE."dossier
3177     WHERE dossier='".$this->valF['dossier']."'";
3178     $res = $this->db->query($sql);
3179     $this->addToLog("get_dossier_actual(): db->query(\"".$sql."\");", VERBOSE_MODE);
3180     $this->f->isDatabaseError($res);
3181    
3182     //
3183     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
3184    
3185     // Récupération de la valeur actuelle du délai, de l'accord tacite,
3186     // de l'état et de l'avis du dossier d'instruction
3187 softime 6565 $return['archive_delai'] = $row['delai'];
3188     $return['archive_accord_tacite'] = $row['accord_tacite'];
3189     $return['archive_etat'] = $row['etat'];
3190     $return['archive_avis'] = $row['avis_decision'];
3191     // Récupération de la valeur actuelle des dates du dossier
3192 mbroquet 3730 // d'instruction
3193 softime 6565 $return['archive_date_complet'] = $row['date_complet'];
3194     $return['archive_date_dernier_depot'] = $row['date_dernier_depot'];
3195     $return['archive_date_rejet'] = $row['date_rejet'];
3196     $return['archive_date_limite'] = $row['date_limite'];
3197     $return['archive_date_notification_delai'] = $row['date_notification_delai'];
3198     $return['archive_date_decision'] = $row['date_decision'];
3199     $return['archive_date_validite'] = $row['date_validite'];
3200     $return['archive_date_achevement'] = $row['date_achevement'];
3201     $return['archive_date_chantier'] = $row['date_chantier'];
3202     $return['archive_date_conformite'] = $row['date_conformite'];
3203     $return['archive_incompletude'] = $row['incompletude'];
3204     $return['archive_incomplet_notifie'] = $row['incomplet_notifie'];
3205     $return['archive_evenement_suivant_tacite'] = $row['evenement_suivant_tacite'];
3206     $return['archive_evenement_suivant_tacite_incompletude'] = $row['evenement_suivant_tacite_incompletude'];
3207     $return['archive_etat_pendant_incompletude'] = $row['etat_pendant_incompletude'];
3208     $return['archive_date_limite_incompletude'] = $row['date_limite_incompletude'];
3209     $return['archive_delai_incompletude'] = $row['delai_incompletude'];
3210     $return['archive_autorite_competente'] = $row['autorite_competente'];
3211 softime 8593 $return['archive_dossier_instruction_type'] = $row['dossier_instruction_type'];
3212 softime 6565 $return['duree_validite'] = $row['duree_validite'];
3213     $return['date_depot'] = $row['date_depot'];
3214     $return['archive_date_cloture_instruction'] = $row['date_cloture_instruction'];
3215     $return['archive_date_premiere_visite'] = $row['date_premiere_visite'];
3216     $return['archive_date_derniere_visite'] = $row['date_derniere_visite'];
3217     $return['archive_date_contradictoire'] = $row['date_contradictoire'];
3218     $return['archive_date_retour_contradictoire'] = $row['date_retour_contradictoire'];
3219     $return['archive_date_ait'] = $row['date_ait'];
3220     $return['archive_date_transmission_parquet'] = $row['date_transmission_parquet'];
3221 mbroquet 3730 }
3222    
3223     // Retour de la fonction
3224     return $return;
3225    
3226     }
3227    
3228     /**
3229     * Permet de vérifier qu'un événement est verrouillable
3230     * @param integer $idx Identifiant de l'instruction
3231     * @return boolean
3232     */
3233     function checkEvenementNonVerrouillable($idx) {
3234    
3235     // Initialisation du résultat
3236     $non_verrouillable = false;
3237    
3238     // Si la condition n'est pas vide
3239     if ($idx != "") {
3240    
3241     // Requête SQL
3242     $sql = "SELECT evenement.non_verrouillable
3243     FROM ".DB_PREFIXE."evenement
3244     LEFT JOIN ".DB_PREFIXE."instruction
3245     ON instruction.evenement = evenement.evenement
3246     WHERE instruction.instruction = $idx";
3247     $this->f->addToLog("checkEvenementNonVerrouillable() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
3248     $res = $this->db->getOne($sql);
3249     $this->f->isDatabaseError($res);
3250    
3251     // Si le retour de la requête est true
3252     if ($res == 't') {
3253     //
3254     $non_verrouillable = true;
3255     }
3256     }
3257    
3258     // Retourne résultat
3259     return $non_verrouillable;
3260     }
3261    
3262     /**
3263     * Mise à jour des champs archive_*
3264     * @param mixed $row La ligne de données
3265     */
3266     public function updateArchiveData($row){
3267    
3268     // Récupération de la valeur actuelle du délai, de l'accord tacite,
3269     // de l'état et de l'avis du dossier d'instruction
3270     $this->valF['archive_delai']=$row['delai'];
3271     $this->valF['archive_accord_tacite']=$row['accord_tacite'];
3272     $this->valF['archive_etat']=$row['etat'];
3273     $this->valF['archive_avis']=$row['avis_decision'];
3274     // Récupération de la valeur actuelle des 9 dates du dossier
3275     // d'instruction
3276     if ($row['date_complet'] != '') {
3277     $this->valF['archive_date_complet']=$row['date_complet'];
3278     }
3279     if ($row['date_dernier_depot'] != '') {
3280     $this->valF['archive_date_dernier_depot']=$row['date_dernier_depot'];
3281     }
3282 softime 6565 if ($row['date_rejet'] != '') {
3283 mbroquet 3730 $this->valF['archive_date_rejet']= $row['date_rejet'];
3284     }
3285 softime 6565 if ($row['date_limite'] != '') {
3286 mbroquet 3730 $this->valF['archive_date_limite']= $row['date_limite'];
3287     }
3288 softime 6565 if ($row['date_notification_delai'] != '') {
3289 mbroquet 3730 $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];
3290     }
3291 softime 6565 if ($row['date_decision'] != '') {
3292 mbroquet 3730 $this->valF['archive_date_decision']= $row['date_decision'];
3293     }
3294 softime 6565 if ($row['date_validite'] != '') {
3295 mbroquet 3730 $this->valF['archive_date_validite']= $row['date_validite'];
3296     }
3297 softime 6565 if ($row['date_achevement'] != '') {
3298 mbroquet 3730 $this->valF['archive_date_achevement']= $row['date_achevement'];
3299     }
3300 softime 6565 if ($row['date_chantier'] != '') {
3301 mbroquet 3730 $this->valF['archive_date_chantier']= $row['date_chantier'];
3302     }
3303 softime 6565 if ($row['date_conformite'] != '') {
3304 mbroquet 3730 $this->valF['archive_date_conformite']= $row['date_conformite'];
3305     }
3306 softime 6565 if ($row['incompletude'] != '') {
3307 mbroquet 3730 $this->valF['archive_incompletude']= $row['incompletude'];
3308     }
3309 softime 6565 if ($row['incomplet_notifie'] != '') {
3310 mbroquet 3730 $this->valF['archive_incomplet_notifie']= $row['incomplet_notifie'];
3311     }
3312 softime 6565 if ($row['evenement_suivant_tacite'] != '') {
3313 mbroquet 3730 $this->valF['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];
3314     }
3315 softime 6565 if ($row['evenement_suivant_tacite_incompletude'] != '') {
3316 mbroquet 3730 $this->valF['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];
3317     }
3318 softime 6565 if ($row['etat_pendant_incompletude'] != '') {
3319 mbroquet 3730 $this->valF['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];
3320     }
3321 softime 6565 if ($row['date_limite_incompletude'] != '') {
3322 mbroquet 3730 $this->valF['archive_date_limite_incompletude']= $row['date_limite_incompletude'];
3323     }
3324 softime 6565 if ($row['delai_incompletude'] != '') {
3325 mbroquet 3730 $this->valF['archive_delai_incompletude']= $row['delai_incompletude'];
3326     }
3327 softime 6565 if ($row['autorite_competente'] != '') {
3328 mbroquet 3730 $this->valF['archive_autorite_competente']= $row['autorite_competente'];
3329     }
3330 softime 6565 if ($row['duree_validite'] != '') {
3331 mbroquet 3730 $this->valF['duree_validite']= $row['duree_validite'];
3332     }
3333 softime 6565 if ($row['date_depot'] != '') {
3334 nmeucci 3873 $this->valF['date_depot']= $row['date_depot'];
3335     }
3336 softime 6565 // Dates concernant les dossiers contentieux
3337     if ($row['date_cloture_instruction'] != '') {
3338     $this->valF['archive_date_cloture_instruction']= $row['date_cloture_instruction'];
3339     }
3340     if ($row['date_premiere_visite'] != '') {
3341     $this->valF['archive_date_premiere_visite']= $row['date_premiere_visite'];
3342     }
3343     if ($row['date_derniere_visite'] != '') {
3344     $this->valF['archive_date_derniere_visite']= $row['date_derniere_visite'];
3345     }
3346     if ($row['date_contradictoire'] != '') {
3347     $this->valF['archive_date_contradictoire']= $row['date_contradictoire'];
3348     }
3349     if ($row['date_retour_contradictoire'] != '') {
3350     $this->valF['archive_date_retour_contradictoire']= $row['date_retour_contradictoire'];
3351     }
3352     if ($row['date_ait'] != '') {
3353     $this->valF['archive_date_ait']= $row['date_ait'];
3354     }
3355     if ($row['date_transmission_parquet'] != '') {
3356     $this->valF['archive_date_transmission_parquet']= $row['date_transmission_parquet'];
3357     }
3358 softime 8593 if ($row['dossier_instruction_type'] != '') {
3359     $this->valF['archive_dossier_instruction_type']= $row['dossier_instruction_type'];
3360     }
3361 mbroquet 3730 }
3362    
3363     // {{{
3364     // Méthodes de récupération des métadonnées arrêté
3365     /**
3366     * @return string Retourne le numéro d'arrêté
3367     */
3368     function getNumArrete() {
3369     return $this->getVal("numero_arrete");
3370     }
3371     /**
3372     * @return chaîne vide
3373     */
3374     function getReglementaireArrete() {
3375     return 'true';
3376     }
3377     /**
3378     * @return boolean de notification au pétitionnaire
3379     */
3380     function getNotificationArrete() {
3381     return 'true';
3382     }
3383     /**
3384     * @return date de notification au pétitionnaire
3385     */
3386     function getDateNotificationArrete() {
3387     if (empty($this->metadonneesArrete)) {
3388     $this->getArreteMetadata();
3389     }
3390     return $this->metadonneesArrete["datenotification"];
3391     }
3392     /**
3393     * @return boolean check si le document est passé au contrôle de légalité
3394     */
3395     function getControleLegalite() {
3396     return 'true';
3397     }
3398     /**
3399     * @return date de signature de l'arrêté
3400     */
3401     function getDateSignature() {
3402     if (empty($this->metadonneesArrete)) {
3403     $this->getArreteMetadata();
3404     }
3405     return $this->metadonneesArrete["datesignaturearrete"];
3406     }
3407     /**
3408     * @return string nom du signataire
3409     */
3410     function getNomSignataire() {
3411     if (empty($this->metadonneesArrete)) {
3412     $this->getArreteMetadata();
3413     }
3414     return $this->metadonneesArrete["nomsignataire"];
3415     }
3416     /**
3417     * @return string qualité du signataire
3418     */
3419     function getQualiteSignataire() {
3420     if (empty($this->metadonneesArrete)) {
3421     $this->getArreteMetadata();
3422     }
3423     return $this->metadonneesArrete["qualitesignataire"];
3424     }
3425     /**
3426     * @return string numéro du terrain
3427     */
3428     function getAp_numRue() {
3429     if (empty($this->metadonneesArrete)) {
3430     $this->getArreteMetadata();
3431     }
3432     return $this->metadonneesArrete["ap_numrue"];
3433     }
3434     /**
3435     * @return string nom de la rue du terrain
3436     */
3437     function getAp_nomDeLaVoie() {
3438     if (empty($this->metadonneesArrete)) {
3439     $this->getArreteMetadata();
3440     }
3441     return $this->metadonneesArrete["ap_nomdelavoie"];
3442     }
3443     /**
3444     * @return string code postal du terrain
3445     */
3446     function getAp_codePostal() {
3447     if (empty($this->metadonneesArrete)) {
3448     $this->getArreteMetadata();
3449     }
3450     return $this->metadonneesArrete["ap_codepostal"];
3451     }
3452     /**
3453     * @return string ville du terrain
3454     */
3455     function getAp_ville() {
3456     if (empty($this->metadonneesArrete)) {
3457     $this->getArreteMetadata();
3458     }
3459     return $this->metadonneesArrete["ap_ville"];
3460     }
3461     /**
3462     * @return string activité
3463     */
3464     function getActivite() {
3465     return "Droit du sol";
3466     }
3467     /**
3468     * @return string date du retour de controle légalité
3469     */
3470     function getDateControleLegalite() {
3471     if (empty($this->metadonneesArrete)) {
3472     $this->getArreteMetadata();
3473     }
3474     return $this->metadonneesArrete["datecontrolelegalite"];
3475     }
3476    
3477     // Fin des méthodes de récupération des métadonnées
3478     // }}}
3479    
3480     /**
3481     * Méthode de récupération des métadonnées arrêtés dans la base de données,
3482     * les données sont stockés dans l'attribut $this->metadonneesArrete
3483     */
3484     function getArreteMetadata() {
3485    
3486     //Récupération de la dernière instruction dont l'événement est de type 'arrete'
3487     $this->metadonneesArrete = array("nomsignataire"=>"", "qualitesignataire"=>"",
3488     "decisionarrete"=>"", "datenotification"=>"", "datesignaturearrete"=>"",
3489     "datecontrolelegalite"=>"", "ap_numrue"=>"", "ap_nomdelavoie"=>"",
3490     "ap_codepostal"=>"", "ap_ville"=>"");
3491    
3492     $sqlArrete = "SELECT signataire_arrete.nom as \"nomsignataire\",
3493     signataire_arrete.qualite as \"qualitesignataire\",
3494     instruction.etat as \"decisionarrete\",
3495     instruction.date_retour_rar as \"datenotification\",
3496     instruction.date_retour_signature as \"datesignaturearrete\",
3497     instruction.date_retour_controle_legalite as \"datecontrolelegalite\",
3498     dossier.terrain_adresse_voie_numero as \"ap_numrue\",
3499     dossier.terrain_adresse_voie as \"ap_nomdelavoie\",
3500     dossier.terrain_adresse_code_postal as \"ap_codepostal\",
3501     dossier.terrain_adresse_localite as \"ap_ville\"
3502     FROM ".DB_PREFIXE."instruction
3503     LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
3504     instruction.signataire_arrete = signataire_arrete.signataire_arrete
3505     LEFT JOIN ".DB_PREFIXE."dossier ON
3506     instruction.dossier = dossier.dossier
3507     LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
3508     donnees_techniques.dossier_instruction = dossier.dossier
3509     WHERE instruction.instruction = ".$this->getVal("instruction");
3510     $resArrete = $this->db->query($sqlArrete);
3511     $this->f->addToLog("getArreteMetadata(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
3512     if ( database::isError($resArrete)){
3513     die();
3514     }
3515    
3516     $this->metadonneesArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
3517     }
3518    
3519     /**
3520     * CONDITION - has_an_edition.
3521     *
3522     * Condition pour afficher le bouton de visualisation de l'édition.
3523     *
3524     * @return boolean
3525     */
3526     function has_an_edition() {
3527     // Récupère la valeur du champ lettretype
3528     $lettretype = $this->getVal("lettretype");
3529     // Si le champ est vide
3530 softime 7521 if ($lettretype !== '' && $lettretype !== null) {
3531 mbroquet 3730 //
3532 softime 7521 return true;
3533 mbroquet 3730 }
3534    
3535     //
3536 softime 7521 return false;
3537 mbroquet 3730 }
3538    
3539     /**
3540     * CONDITION - is_editable.
3541     *
3542     * Condition pour la modification.
3543     *
3544     * @return boolean
3545     */
3546     function is_editable() {
3547     // Contrôle si l'utilisateur possède un bypass
3548 softime 7996 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_modifier_bypass");
3549 mbroquet 3730 //
3550     if ($bypass == true) {
3551     //
3552     return true;
3553     }
3554 softime 6565
3555 mbroquet 3730 // Si l'utilisateur est un instructeur, que le dossier est cloturé et
3556     // que l'événement n'est pas identifié comme non verrouillable
3557     if ($this->f->isUserInstructeur()
3558     && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
3559     && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
3560     //
3561     return false;
3562     }
3563    
3564 softime 6565 // Si l'utilisateur est un intructeur qui correspond à la division du
3565     // dossier
3566     if ($this->is_instructeur_from_division_dossier() === true) {
3567     //
3568     return true;
3569     }
3570    
3571     // Si l'utilisateur est instructeur de la commune du dossier et que la
3572     // décision peut être changée par la commune.
3573     if ($this->is_instructeur_from_collectivite_dossier() === true and
3574     $this->isInstrCanChangeDecision($this->getVal('dossier')) === true) {
3575     return true;
3576     }
3577    
3578     // Si l'utilisateur est instructeur de la commune du dossier et que
3579     // l'instruction est créée par un instructeur de la commune
3580     if ($this->is_instructeur_from_collectivite_dossier() === true and
3581     $this->getVal('created_by_commune') === 't') {
3582     return true;
3583     }
3584    
3585 mbroquet 3730 //
3586 softime 6565 return false;
3587 mbroquet 3730 }
3588    
3589     /**
3590     * CONDITION - is_deletable.
3591     *
3592 softime 6864 * Condition pour la suppression.
3593 mbroquet 3730 *
3594     * @return boolean
3595     */
3596     function is_deletable() {
3597 softime 6864 // Contrôle si l'utilisateur possède un bypass intégral
3598 softime 7996 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_supprimer_bypass");
3599 mbroquet 3730 //
3600     if ($bypass == true) {
3601    
3602     //
3603     return true;
3604     }
3605    
3606     // Si l'utilisateur est un intructeur qui ne correspond pas à la
3607 softime 6864 // division du dossier et si l'utilisateur n'a pas la permission bypass
3608     // de la division
3609     if ($this->is_instructeur_from_division_dossier() === false
3610 softime 7996 && $this->f->isAccredited($this->get_absolute_class_name()."_supprimer_bypass_division") === false) {
3611 mbroquet 3730
3612     //
3613     return false;
3614     }
3615 softime 5024
3616     // l'événement est-il le dernier ?
3617     $dernier_evenement = false;
3618     // instanciation dossier
3619 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
3620     "obj" => "dossier",
3621     "idx" => $this->getVal('dossier'),
3622     ));
3623 softime 5024 // récupération dernier événement
3624     $id_dernier_evenement = $dossier->get_dernier_evenement();
3625     if ($id_dernier_evenement == $this->getVal($this->clePrimaire)) {
3626     $dernier_evenement = true;
3627     }
3628 mbroquet 3730
3629 softime 5024 // Si dossier cloturé ou si pas dernier événement
3630     // ou de type retour ou si une date est renseignée
3631     // ET utilisateur non administrateur
3632     if ($this->getStatutAutorisationDossier($this->getVal('dossier')) == 'cloture'
3633     || $dernier_evenement == false
3634     || $this->is_evenement_retour($this->getVal("evenement")) == true
3635     || $this->getVal('date_envoi_signature') != ''
3636     || $this->getVal('date_retour_signature') != ''
3637     || $this->getVal('date_envoi_rar') != ''
3638     || $this->getVal('date_retour_rar') != ''
3639     || $this->getVal('date_envoi_controle_legalite') != ''
3640     || $this->getVal('date_retour_controle_legalite') != '') {
3641     // pas le droit de supprimer
3642     return false;;
3643     }
3644    
3645 mbroquet 3730 //
3646     return true;
3647     }
3648 softime 6565
3649    
3650 mbroquet 3730 /**
3651 softime 6565 * Vérifie que l'utilisateur est instructeur et qu'il est de la division du
3652     * dossier.
3653     *
3654     * @return, boolean true/false
3655     */
3656     function is_instructeur_from_collectivite_dossier() {
3657     if ($this->f->isUserInstructeur() === true and
3658     $this->f->om_utilisateur["om_collectivite"] == $this->get_dossier_instruction_om_collectivite()) {
3659     return true;
3660     }
3661     return false;
3662     }
3663    
3664     /**
3665 mbroquet 3730 * CONDITION - is_addable.
3666     *
3667     * Condition pour afficher les boutons modifier et supprimer.
3668     *
3669     * @return boolean
3670     */
3671     function is_addable() {
3672     // Contrôle si l'utilisateur possède un bypass
3673 softime 7996 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_ajouter_bypass");
3674 mbroquet 3730 //
3675     if ($bypass == true) {
3676    
3677     //
3678     return true;
3679     }
3680 softime 6565 // Si l'utilisateur est un intructeur qui correspond à la
3681     // division du dossier ou qu'il peut changer la décision
3682     if ($this->is_instructeur_from_division_dossier() === true or
3683     $this->isInstrCanChangeDecision($this->getParameter('idxformulaire')) === true) {
3684 mbroquet 3730 //
3685 softime 6565 return true;
3686 mbroquet 3730 }
3687    
3688     //
3689 softime 6565 return false;
3690 mbroquet 3730 }
3691    
3692     /**
3693     * CONDITION - is_finalizable.
3694     *
3695     * Condition pour afficher le bouton.
3696     *
3697     * @return boolean
3698     */
3699     function is_finalizable() {
3700     // Contrôle si l'utilisateur possède un bypass
3701 softime 7996 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_finaliser_bypass");
3702 mbroquet 3730 //
3703     if ($bypass == true) {
3704     //
3705     return true;
3706     }
3707 softime 6565
3708 mbroquet 3730 // Si l'utilisateur est un instructeur, que le dossier est cloturé et
3709     // que l'événement n'est pas identifié comme non verrouillable
3710     if ($this->f->isUserInstructeur()
3711     && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
3712     && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
3713     //
3714     return false;
3715     }
3716 softime 6565
3717     // Si l'utilisateur est un intructeur qui correspond à la division du
3718     // dossier
3719     if ($this->is_instructeur_from_division_dossier() === true) {
3720     //
3721     return true;
3722     }
3723 mbroquet 3730
3724 softime 6565 // Si l'utilisateur est instructeur de la commune du dossier et que la
3725     // décision peut être changée par la commune.
3726     if ($this->is_instructeur_from_collectivite_dossier() === true and
3727     $this->isInstrCanChangeDecision($this->getVal('dossier')) === true) {
3728     return true;
3729     }
3730    
3731     // Si l'utilisateur est instructeur de la commune du dossier et que
3732     // l'instruction est créée par un instructeur de la commune
3733     if ($this->is_instructeur_from_collectivite_dossier() === true and
3734     $this->getVal('created_by_commune') === 't') {
3735     return true;
3736     }
3737    
3738 mbroquet 3730 //
3739 softime 6565 return false;
3740 mbroquet 3730 }
3741    
3742     /**
3743     * CONDITION - is_finalize_without_bypass.
3744     *
3745     * Condition pour afficher le bouton sans le bypass.
3746     *
3747     * @return boolean [description]
3748     */
3749     function is_finalizable_without_bypass() {
3750     // Récupère la valeur du champ finalisé
3751     $om_final_instruction = $this->getVal('om_final_instruction');
3752    
3753     // Si le rapport n'est pas finalisé
3754     if (empty($om_final_instruction)
3755     || $om_final_instruction == 'f') {
3756     //
3757     return true;
3758     }
3759    
3760     //
3761     return false;
3762     }
3763    
3764     /**
3765     * CONDITION - is_unfinalizable.
3766     *
3767     * Condition pour afficher le bouton.
3768     *
3769     * @return boolean
3770     */
3771     function is_unfinalizable(){
3772     // Contrôle si l'utilisateur possède un bypass
3773 softime 7996 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_definaliser_bypass");
3774 mbroquet 3730 //
3775     if ($bypass == true) {
3776     //
3777     return true;
3778     }
3779 softime 6565
3780     // Si l'utilisateur est un instructeur, que le dossier est cloturé et
3781     // que l'événement n'est pas identifié comme non verrouillable
3782 mbroquet 3730 if ($this->f->isUserInstructeur()
3783 softime 6565 && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
3784     && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
3785 mbroquet 3730 //
3786     return false;
3787     }
3788    
3789 softime 6565 // Si l'utilisateur est un intructeur qui correspond à la division du
3790     // dossier
3791     if ($this->is_instructeur_from_division_dossier() === true) {
3792     //
3793     return true;
3794 mbroquet 3730 }
3795    
3796 softime 6565 // Si l'utilisateur est instructeur de la commune du dossier et que la
3797     // décision peut être changée par la commune.
3798     if ($this->is_instructeur_from_collectivite_dossier() === true and
3799     $this->isInstrCanChangeDecision($this->getVal('dossier')) === true) {
3800     return true;
3801     }
3802 mbroquet 3730
3803 softime 6565 // Si l'utilisateur est instructeur de la commune du dossier et que
3804     // l'instruction est créée par un instructeur de la commune
3805     if ($this->is_instructeur_from_collectivite_dossier() === true and
3806     $this->getVal('created_by_commune') === 't') {
3807     return true;
3808 mbroquet 3730 }
3809    
3810     //
3811 softime 6565 return false;
3812 mbroquet 3730 }
3813    
3814     /**
3815     * CONDITION - is_unfinalizable_without_bypass.
3816     *
3817     * Condition pour afficher le bouton sans le bypass.
3818     *
3819     * @return boolean
3820     */
3821     function is_unfinalizable_without_bypass() {
3822     // Récupère la valeur du champ finalisé
3823     $om_final_instruction = $this->getVal('om_final_instruction');
3824    
3825     // Si l'instruction est finalisée
3826     if ($om_final_instruction == 't') {
3827     //
3828     return true;
3829     }
3830    
3831     //
3832     return false;
3833     }
3834    
3835 softime 5169
3836 mbroquet 3730 /**
3837 softime 6565 * Permet de définir si un instructeur commune peut editer une instruction
3838     *
3839     * @return boolean true si il peut
3840     */
3841     function isInstrCanChangeDecision($idx) {
3842    
3843     if ($this->f->isAccredited(array("instruction", "instruction_changer_decision"), "OR") !== true or
3844     $this->f->isUserInstructeur() !== true) {
3845     return false;
3846     }
3847    
3848    
3849    
3850     // Sinon on vérifie l'éligibilité du dossier au changement de décision
3851     $sql =
3852     "SELECT
3853     dossier.dossier
3854     FROM
3855     ".DB_PREFIXE."dossier
3856     JOIN ".DB_PREFIXE."instruction ON instruction.instruction = (
3857     SELECT instruction
3858     FROM ".DB_PREFIXE."instruction
3859     JOIN ".DB_PREFIXE."evenement on instruction.evenement=evenement.evenement
3860     WHERE instruction.dossier = dossier.dossier
3861     AND evenement.retour IS FALSE
3862     ORDER BY date_evenement DESC, instruction DESC
3863     LIMIT 1
3864     )
3865     JOIN ".DB_PREFIXE."evenement ON instruction.evenement=evenement.evenement
3866     JOIN ".DB_PREFIXE."instructeur ON dossier.instructeur=instructeur.instructeur
3867     JOIN ".DB_PREFIXE."om_utilisateur ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
3868     JOIN ".DB_PREFIXE."om_collectivite ON om_collectivite.om_collectivite=om_utilisateur.om_collectivite
3869     JOIN ".DB_PREFIXE."etat ON dossier.etat = etat.etat
3870     WHERE
3871    
3872     (
3873     evenement.type = 'arrete' AND
3874     (
3875     instruction.om_final_instruction IS TRUE
3876     OR instruction.created_by_commune IS TRUE
3877     ) OR
3878     evenement.type = 'changement_decision'
3879     )
3880     AND evenement.retour IS FALSE
3881     AND instruction.date_retour_signature IS NULL
3882     AND instruction.date_envoi_rar IS NULL
3883     AND instruction.date_retour_rar IS NULL
3884     AND instruction.date_envoi_controle_legalite IS NULL
3885     AND instruction.date_retour_controle_legalite IS NULL
3886     AND etat.statut = 'encours'
3887     AND dossier.dossier = '".$idx."'
3888     AND om_collectivite.niveau = '2'
3889     ";
3890    
3891    
3892     // Si collectivité de l'utilisateur niveau mono alors filtre sur celle-ci
3893     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
3894     $sql .= " AND dossier.om_collectivite=".$_SESSION['collectivite'];
3895     }
3896     $res = $this->db->getone($sql);
3897     if (database::isError($res)) {
3898     die();
3899     }
3900     // Si le dossier n'est pas sujet au changement de decision
3901     if($res == null) {
3902     return false;
3903     }
3904     return true;
3905     }
3906    
3907    
3908     /**
3909 softime 5169 * CONDITION - can_monitoring_dates.
3910     *
3911     * Condition pour afficher le bouton de suivi des dates.
3912     *
3913     * @return boolean
3914     */
3915     public function can_monitoring_dates() {
3916     // Récupère la valeur du champ finalisé
3917     $om_final_instruction = $this->getVal('om_final_instruction');
3918    
3919     // Si l'instruction n'est pas finalisée
3920     if ($om_final_instruction !== 't') {
3921     //
3922     return false;
3923     }
3924    
3925     // Contrôle si l'utilisateur possède un bypass
3926 softime 7996 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_modification_dates_bypass");
3927 softime 5169 if ($bypass === true) {
3928     return true;
3929     }
3930    
3931     // On vérifie en premier lieu que le DI n'est pas clôturé
3932     $inst_dossier = $this->get_inst_dossier();
3933     if ($inst_dossier->getStatut() === 'cloture') {
3934     //
3935     return false;
3936     }
3937     // On récupère ses infos
3938     $coll_di = $inst_dossier->getVal('om_collectivite');
3939     $div_di = $this->getDivisionFromDossier();
3940     // et celles de son éventuel instructeur
3941     $instr_di = $inst_dossier->getVal('instructeur');
3942    
3943 softime 6565 // Il faut disposer d'une entrée instructeur
3944     if ($this->f->isUserInstructeur() === false) {
3945     return false;
3946     }
3947    
3948 softime 5169 // Par défaut on prétend que l'instructeur n'est pas multi
3949     $instr_di_coll_multi = false;
3950     // Si un instructeur est affecté au dossier
3951     if ($instr_di !== '' && $instr_di !== null) {
3952     // Vérifie si l'instructeur est de la collectivité de niveau 2
3953 softime 5295 $instr_di_coll = $this->get_instructeur_om_collectivite($instr_di);
3954 softime 5169 if ($this->f->isCollectiviteMono($instr_di_coll) === false) {
3955     //
3956     $instr_di_coll_multi = true;
3957     }
3958     }
3959    
3960 softime 6565 // Il faut qu'il instruise le dossier ou soit de la même division
3961     if ($this->f->om_utilisateur['instructeur'] === $instr_di
3962     || $this->f->om_utilisateur['division'] === $div_di) {
3963 softime 5169 //
3964     return true;
3965     }
3966    
3967 softime 6565 // On donne également le droit s'il est de la même collectivité que
3968     // le dossier ET si l'instruction est déléguée à la communauté
3969     if ($this->f->isCollectiviteMono($this->f->om_utilisateur['om_collectivite']) === true
3970     && $this->f->om_utilisateur['om_collectivite'] === $coll_di
3971     && $instr_di_coll_multi === true) {
3972 softime 5169 //
3973     return true;
3974     }
3975    
3976 softime 6565 // Si l'instructeur ne rentre pas dans les deux cas précédents
3977 softime 5169 return false;
3978     }
3979    
3980    
3981     /**
3982 mbroquet 3730 * TREATMENT - finalize.
3983     *
3984     * Permet de finaliser un enregistrement.
3985     *
3986     * @param array $val valeurs soumises par le formulaire
3987     *
3988     * @return boolean
3989     */
3990     function finalize($val = array()) {
3991    
3992     // Cette méthode permet d'exécuter une routine en début des méthodes
3993     // dites de TREATMENT.
3994     $this->begin_treatment(__METHOD__);
3995    
3996     // Traitement de la finalisation
3997     $ret = $this->manage_finalizing("finalize", $val);
3998    
3999     // Si le traitement retourne une erreur
4000     if ($ret !== true) {
4001    
4002     // Termine le traitement
4003 softime 5024 return $this->end_treatment(__METHOD__, false);
4004 mbroquet 3730 }
4005    
4006     // Termine le traitement
4007     return $this->end_treatment(__METHOD__, true);
4008     }
4009    
4010     /**
4011     * TREATMENT - unfinalize.
4012     *
4013     * Permet de définaliser un enregistrement.
4014     *
4015     * @param array $val valeurs soumises par le formulaire
4016     *
4017     * @return boolean
4018     */
4019     function unfinalize($val = array()) {
4020    
4021     // Cette méthode permet d'exécuter une routine en début des méthodes
4022     // dites de TREATMENT.
4023     $this->begin_treatment(__METHOD__);
4024    
4025     // Traitement de la finalisation
4026     $ret = $this->manage_finalizing("unfinalize", $val);
4027    
4028     // Si le traitement retourne une erreur
4029     if ($ret !== true) {
4030    
4031     // Termine le traitement
4032 softime 5024 return $this->end_treatment(__METHOD__, false);
4033 mbroquet 3730 }
4034    
4035     // Termine le traitement
4036     return $this->end_treatment(__METHOD__, true);
4037     }
4038    
4039     /**
4040     * VIEW - view_edition
4041     *
4042     * Edite l'édition de l'instruction ou affiche celle contenue dans le stockage.
4043     *
4044     * @return null Si l'action est incorrecte
4045     */
4046     function view_edition() {
4047    
4048     // Si l'instruction est finalisée
4049     if($this->getVal("om_final_instruction") == 't'
4050     && $this->getVal("om_final_instruction") != null) {
4051    
4052     // Ouvre le document
4053 softime 7996 $lien = '../app/index.php?module=form&snippet=file&obj='.$this->table.'&'.
4054 mbroquet 3730 'champ=om_fichier_instruction&id='.$this->getVal($this->clePrimaire);
4055     //
4056     header("Location: ".$lien);
4057     } else {
4058    
4059     // Récupère la collectivite du dossier d'instruction
4060     $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
4061    
4062     //
4063     $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
4064    
4065     // Paramètre du PDF
4066     $params = array(
4067     "watermark" => true,
4068     "specific" => array(
4069     "mode" => "previsualisation",
4070     ),
4071     );
4072 softime 8593 // Si la rédaction libre est activée sur l'instruction
4073     if ($this->getVal("flag_edition_integrale") == 't') {
4074     $params["specific"]["corps"] = array(
4075     "mode" => "set",
4076     "value" => $this->getVal("corps_om_htmletatex"),
4077     );
4078     $params["specific"]["titre"] = array(
4079     "mode" => "set",
4080     "value" => $this->getVal("titre_om_htmletat"),
4081     );
4082     }
4083 mbroquet 3730
4084     // Génération du PDF
4085     $result = $this->compute_pdf_output('lettretype', $this->getVal("lettretype"), $collectivite, null, $params);
4086     // Affichage du PDF
4087     $this->expose_pdf_output(
4088     $result['pdf_output'],
4089     $result['filename']
4090     );
4091     }
4092     }
4093    
4094     /**
4095     * Récupère la collectivité du dossier d'instruction.
4096     *
4097 softime 7685 * @param string $dossier_instruction_id Identifiant du DI.
4098     *
4099 mbroquet 3730 * @return integer
4100     */
4101 softime 7685 function get_dossier_instruction_om_collectivite($dossier_instruction_id = null) {
4102 mbroquet 3730
4103 softime 7685 // Si l'identifiant n'est pas renseigné
4104     if ($dossier_instruction_id === null) {
4105 softime 8593 // Récupère la valeur
4106     if ($this->getVal('dossier') !== null && $this->getVal('dossier') !== '') {
4107     $dossier_instruction_id = $this->getVal('dossier');
4108     } elseif ($this->getParameter('idxformulaire') !== null
4109     && $this->getParameter('idxformulaire') !== '') {
4110     //
4111     $dossier_instruction_id = $this->getParameter('idxformulaire');
4112     } elseif ($this->f->get_submitted_get_value('idxformulaire') !== null
4113     && $this->f->get_submitted_get_value('idxformulaire') !== '') {
4114     //
4115     $dossier_instruction_id = $this->f->get_submitted_get_value('idxformulaire');
4116     }
4117 softime 7685 }
4118    
4119 mbroquet 3730 //
4120 softime 7996 $dossier_instruction = $this->f->get_inst__om_dbform(array(
4121     "obj" => "dossier_instruction",
4122     "idx" => $dossier_instruction_id,
4123     ));
4124 mbroquet 3730
4125     //
4126     return $dossier_instruction->getVal('om_collectivite');
4127     }
4128    
4129     /**
4130     * VIEW - view_bible
4131     *
4132     * Affiche la bible manuelle.
4133     *
4134     * @return void
4135     */
4136     function view_bible() {
4137     // Vérification de l'accessibilité sur l'élément
4138     $this->checkAccessibility();
4139    
4140     // XXX APP
4141    
4142     $f = $this->f;
4143    
4144     /**
4145     * Affichage de la structure HTML
4146     */
4147     //
4148     if ($f->isAjaxRequest()) {
4149     //
4150     header("Content-type: text/html; charset=".HTTPCHARSET."");
4151     } else {
4152     //
4153     $f->setFlag("htmlonly");
4154     $f->display();
4155     }
4156     //
4157     $f->displayStartContent();
4158     //
4159     $f->setTitle(_("Liste des éléments de la bible en lien avec un evenement"));
4160     $f->displayTitle();
4161    
4162     /**
4163     *
4164     */
4165     //
4166     ($f->get_submitted_get_value("ev") ? $evenement = $f->get_submitted_get_value("ev") : $evenement = "");
4167     $evenement = intval($evenement);
4168     //
4169     ($f->get_submitted_get_value("idx") ? $idx = $f->get_submitted_get_value("idx") : $idx = "");
4170 softime 5169 // Récupération du code du type de DA
4171     $code_da_type = '';
4172     if (preg_match('/[A-Za-z]{2,3}/', $idx, $matches) !== false) {
4173     $code_da_type = $matches[0];
4174     }
4175 mbroquet 3730 //
4176     ($f->get_submitted_get_value("complement") ? $complement = $f->get_submitted_get_value("complement") : $complement = "1");
4177    
4178     // Récupération de la collectivité du dossier
4179 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
4180     "obj" => "dossier",
4181     "idx" => $idx,
4182     ));
4183 mbroquet 3730
4184     /**
4185     *
4186     */
4187     //
4188     $sql = "SELECT *, bible.libelle as bible_lib
4189     FROM ".DB_PREFIXE."bible
4190     LEFT OUTER JOIN ".DB_PREFIXE."dossier_autorisation_type
4191     ON bible.dossier_autorisation_type=dossier_autorisation_type.dossier_autorisation_type
4192     LEFT JOIN ".DB_PREFIXE."om_collectivite
4193     ON bible.om_collectivite = om_collectivite.om_collectivite
4194 softime 7366 WHERE (evenement=".$evenement." OR evenement IS NULL)
4195 mbroquet 3730 AND complement=".$complement."
4196     AND (bible.dossier_autorisation_type IS NULL
4197 softime 5169 OR dossier_autorisation_type.code ='".$code_da_type."')
4198 mbroquet 3730 AND (om_collectivite.niveau = '2'
4199     OR bible.om_collectivite = ".$dossier->getVal("om_collectivite").")
4200     ORDER BY bible_lib ASC";
4201     $res = $f->db->query($sql);
4202     $f->addToLog(__METHOD__.": db->query(\"".$sql."\");", VERBOSE_MODE);
4203     $f->isDatabaseError($res);
4204     //
4205     echo "<form method=\"post\" name=\"f3\" action=\"#\">\n";
4206     //
4207     if ($res->numrows() > 0) {
4208     //
4209     echo "\t<table id='tab-bible' width='100%'>\n";
4210     //
4211     echo "\t\t<tr class=\"ui-tabs-nav ui-accordion ui-state-default tab-title\">";
4212     echo "<th>"._("Choisir")."</th>";
4213     echo "<th>"._("Libelle")."</th>";
4214     echo "</tr>\n";
4215     //
4216     $i = 0;
4217     //
4218     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
4219     //
4220     echo "\t\t<tr";
4221     echo " class=\"".($i % 2 == 0 ? "odd" : "even")."\"";
4222     echo ">";
4223     //
4224     echo "<td class=\"center\"><input type=\"checkbox\" name=\"choix[]\" value=\"".$i."\" id=\"checkbox".$i."\" /></td>";
4225     // XXX utilisation de l'attribut titre pour afficher une infobulle
4226     echo "<td><span class=\"content\" title=\"".htmlentities($row['contenu'])."\" id=\"content".$i."\">".$row['bible_lib']."</span></td>";
4227     //
4228     echo "</tr>\n";
4229     //
4230     $i++;
4231     }
4232     echo "\t</table>\n";
4233     //
4234     echo "<div class=\"formControls\">\n";
4235     $f->layout->display_form_button(array(
4236     "value" => _("Valider"),
4237     "onclick" => "bible_return('f2', 'complement".($complement == "1" ? "" : $complement)."_om_html'); return false;",
4238     ));
4239     $f->displayLinkJsCloseWindow();
4240     echo "</div>\n";
4241    
4242     } else {
4243     //
4244     $message_class = "error";
4245     $message = _("Aucun element dans la bible pour l'evenement")." : ".$evenement;
4246     $f->displayMessage($message_class, $message);
4247     //
4248     echo "<div class=\"formControls\">\n";
4249     $f->displayLinkJsCloseWindow();
4250     echo "</div>\n";
4251     }
4252     //
4253     echo "</form>\n";
4254    
4255     /**
4256     * Affichage de la structure HTML
4257     */
4258     //
4259     $f->displayEndContent();
4260     }
4261    
4262     /**
4263 softime 5169 * VIEW - view_bible_auto
4264 mbroquet 3730 *
4265 softime 5169 * Renvoie les valeurs de la bible à placer dans les compléments de l'instruction.
4266 mbroquet 3730 *
4267     * @return void
4268     */
4269     function view_bible_auto() {
4270     // Vérification de l'accessibilité sur l'élément
4271     $this->checkAccessibility();
4272    
4273     // XXX APP
4274    
4275     $f = $this->f;
4276    
4277     //
4278     $f->disableLog();
4279    
4280     $formatDate="AAAA-MM-JJ";
4281    
4282     // Récupération des paramètres
4283     $idx = $f->get_submitted_get_value('idx');
4284     $evenement = $f->get_submitted_get_value('ev');
4285    
4286     // Initialisation de la variable de retour
4287     $retour['complement_om_html'] = '';
4288     $retour['complement2_om_html'] = '';
4289     $retour['complement3_om_html'] = '';
4290     $retour['complement4_om_html'] = '';
4291     // Vérification d'une consultation liée à l'événement
4292     $consultation = $f->db->getOne(
4293     "select consultation from ".DB_PREFIXE."evenement where evenement=".$evenement
4294     );
4295     $f->isDatabaseError($consultation);
4296     // Si consultation liée, récupération du retour d'avis
4297     if($consultation=='Oui'){
4298     $sql="select date_retour,avis_consultation.libelle as avis_consultation,
4299     service.libelle as service
4300     from ".DB_PREFIXE."consultation inner join ".DB_PREFIXE."service
4301     on consultation.service =service.service
4302     left join ".DB_PREFIXE."avis_consultation on
4303     consultation.avis_consultation = avis_consultation.avis_consultation
4304     where dossier ='".$idx."'";
4305     $res = $f->db->query($sql);
4306     $f->isDatabaseError($res);
4307     // Récupération des consultations
4308     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
4309     $correct=false;
4310     // date retour
4311     if ($row['date_retour']<>""){
4312     if ($formatDate=="AAAA-MM-JJ"){
4313     $date = explode("-", $row['date_retour']);
4314     // controle de date
4315     if (count($date) == 3 and
4316     checkdate($date[1], $date[2], $date[0])) {
4317     $date_retour_f= $date[2]."/".$date[1]."/".$date[0];
4318     $correct=true;
4319     }else{
4320     $msg= $msg."<br>La date ".$row['date_retour']." n'est pas une date.";
4321     $correct=false;
4322     }
4323     }
4324     }
4325     //
4326     $temp="Vu l'avis ".$row['avis_consultation']." du service ".$row['service'];
4327     if($correct == true){
4328     $temp=$temp." du ".$date_retour_f;
4329     }
4330     // Concaténation des retours d'avis de consultation
4331 softime 7067 $retour['complement_om_html'] .= $temp . "<br/><br/>";
4332 mbroquet 3730 } // while
4333    
4334     } // consultation
4335     // Récupération des bibles automatiques pour le champ complement_om_html
4336     $retour['complement_om_html'] .= $this->getBible($f, $evenement, $idx, '1');
4337     // Récupération des bibles automatiques pour le champ complement2_om_html
4338     $retour['complement2_om_html'] .= $this->getBible($f, $evenement, $idx, '2');
4339     // Récupération des bibles automatiques pour le champ complement3_om_html
4340     $retour['complement3_om_html'] .= $this->getBible($f, $evenement, $idx, '3');
4341     // Récupération des bibles automatiques pour le champ complement4_om_html
4342     $retour['complement4_om_html'] .= $this->getBible($f, $evenement, $idx, '4');
4343    
4344    
4345    
4346     echo json_encode($retour);
4347     }
4348    
4349     /**
4350 softime 7521 * VIEW - view_pdf_temp
4351     *
4352     * @return void
4353     */
4354     function view_pdf_temp() {
4355     $this->checkAccessibility();
4356 softime 8593 // Utilisation de $_POST pour ne pas que les textes soient altérés.
4357 softime 7521 $this->f->set_submitted_value();
4358 softime 8593 $merge_fields = array();
4359     //
4360     if (array_key_exists('c1', $_POST) === true) {
4361     $merge_fields['[complement_instruction]'] = urldecode($_POST['c1']);
4362     $merge_fields['[complement1_instruction]'] = urldecode($_POST['c1']);
4363     }
4364     if (array_key_exists('c2', $_POST) === true) {
4365     $merge_fields['[complement2_instruction]'] = urldecode($_POST['c2']);
4366     }
4367     if (array_key_exists('c3', $_POST) === true) {
4368     $merge_fields['[complement3_instruction]'] = urldecode($_POST['c3']);
4369     }
4370     if (array_key_exists('c4', $_POST) === true) {
4371     $merge_fields['[complement4_instruction]'] = urldecode($_POST['c4']);
4372     }
4373 softime 7521 $params = array(
4374     "watermark" => true,
4375     "specific" => array(
4376     "merge_fields" => $merge_fields,
4377     ),
4378     );
4379 softime 8593 //
4380     if (array_key_exists('corps', $_POST) === true) {
4381     $params["specific"]["corps"] = array(
4382     "mode" => "set",
4383     "value" => urldecode($_POST['corps']),
4384     );
4385     }
4386     if (array_key_exists('titre', $_POST) === true) {
4387     $params["specific"]["titre"] = array(
4388     "mode" => "set",
4389     "value" => urldecode($_POST['titre']),
4390     );
4391     }
4392 softime 7521 $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
4393     $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
4394     $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'), $collectivite, null, $params);
4395     $retour = array(
4396     'base' => base64_encode($result['pdf_output']),
4397     );
4398     echo json_encode($retour);
4399     }
4400    
4401     /**
4402     * Dans le contexte de prévisualisation des éditions, génère le rendu du
4403     * PDF sans prise en compte de la valeur des compléments et le retourne en
4404     * base 64.
4405     *
4406     * @return string Rendu PDF converti en base 64.
4407     */
4408     function init_pdf_temp() {
4409     $params = array(
4410     "watermark" => true,
4411     );
4412 softime 8593 // Si la rédaction libre est activée sur l'instruction
4413     if ($this->getVal("flag_edition_integrale") == 't') {
4414     $params["specific"]["corps"] = array(
4415     "mode" => "set",
4416     "value" => $this->getVal("corps_om_htmletatex"),
4417     );
4418     $params["specific"]["titre"] = array(
4419     "mode" => "set",
4420     "value" => $this->getVal("titre_om_htmletat"),
4421     );
4422     }
4423 softime 7521 $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
4424     $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
4425     $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'), $collectivite, null, $params);
4426    
4427     return base64_encode($result['pdf_output']);
4428     }
4429    
4430     /**
4431 mbroquet 3730 * Récupération des éléments de bible.
4432     *
4433     * @param utils $f handler de om_application
4434     * @param integer $event id de l'événement
4435     * @param string $idx id du dossier
4436     * @param integer $compnb numéro du champ complement
4437     *
4438     * @return string Chaîne de texte à insérer dans le champ complement
4439     */
4440     function getBible($f, $event, $idx, $compnb) {
4441     // Récupération de la collectivité du dossier
4442 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
4443     "obj" => "dossier",
4444     "idx" => $idx,
4445     ));
4446 softime 5169 // Récupération du code du type de DA
4447     $code_da_type = '';
4448     if (preg_match('/[A-Za-z]{2,3}/', $idx, $matches) !== false) {
4449     $code_da_type = $matches[0];
4450     }
4451 mbroquet 3730 //
4452     $sql = "SELECT * FROM ".DB_PREFIXE."bible
4453     LEFT OUTER JOIN ".DB_PREFIXE."dossier_autorisation_type
4454     ON bible.dossier_autorisation_type=
4455     dossier_autorisation_type.dossier_autorisation_type
4456     LEFT JOIN
4457     ".DB_PREFIXE."om_collectivite
4458     ON bible.om_collectivite = om_collectivite.om_collectivite
4459 softime 7366 WHERE (evenement =".$event." or evenement IS NULL) and
4460 mbroquet 3730 complement=".$compnb." and
4461     automatique='Oui' and
4462 softime 5169 (dossier_autorisation_type.code ='".$code_da_type."' or
4463 mbroquet 3730 bible.dossier_autorisation_type IS NULL) and
4464     (om_collectivite.niveau = '2' OR bible.om_collectivite = ".$dossier->getVal("om_collectivite").")";
4465    
4466     $res = $f->db->query($sql);
4467     $f->isDatabaseError($res);
4468     $temp = "";
4469     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
4470     // Remplacement des retours à la ligne par des br
4471     $temp .= preg_replace(
4472     '#(\\\r|\\\r\\\n|\\\n)#', '<br/>', $row['contenu']
4473     );
4474 softime 7521 // Ajout d'un saut de ligne entre chaque bible.
4475     $temp .= '<br/>';
4476 mbroquet 3730 } // fin while
4477     return $temp;
4478     }
4479    
4480     /**
4481     * VIEW - view_suivi_bordereaux.
4482     *
4483 nmeucci 4317 * Formulaire de choix du bordereau de suivi, permettant de générer les 4 bordereaux.
4484     * Si l'utilisateur est d'une collectivité de niveau 2 il a le choix de la
4485     * collectivité des dossiers affichés.
4486 mbroquet 3730 *
4487     * @return void
4488     */
4489     function view_suivi_bordereaux() {
4490     // Vérification de l'accessibilité sur l'élément
4491     $this->checkAccessibility();
4492    
4493     // XXX APP
4494    
4495     $f = $this->f;
4496    
4497     /**
4498     * Validation du formulaire
4499     */
4500     // Si le formulaire a été validé
4501     if ($f->get_submitted_post_value("validation") !== null) {
4502     // Si un bordereau à été sélectionné
4503     if ($f->get_submitted_post_value("bordereau") !== null && $f->get_submitted_post_value("bordereau") == "" ) {
4504     // Si aucun bordereau n'a été sélectionné
4505     $message_class = "error";
4506     $message = _("Veuillez selectionner un bordereau.");
4507     }
4508     // Sinon si les dates ne sont pas valide
4509     elseif (($f->get_submitted_post_value("date_bordereau_debut") !== null
4510     && $f->get_submitted_post_value("date_bordereau_debut") == "")
4511     || ($f->get_submitted_post_value("date_bordereau_fin") !== null
4512     && $f->get_submitted_post_value("date_bordereau_fin") == "")) {
4513     // Si aucune date n'a été saisie
4514     $message_class = "error";
4515     $message = _("Veuillez saisir une date valide.");
4516     }
4517 softime 7366 // Sinon si les dates ne sont pas valides
4518     elseif ($f->get_submitted_post_value("bordereau") === "bordereau_avis_maire_prefet"
4519     && $f->getParameter("id_evenement_bordereau_avis_maire_prefet") == null) {
4520     // Si aucune date n'a été saisie
4521     $message_class = "error";
4522     $message = _("Erreur de parametrage. Contactez votre administrateur.");
4523     }
4524 mbroquet 3730 // Affiche le message de validation
4525     else {
4526     // On récupère le libellé du bordereau pour l'afficher à l'utilisateur
4527     $sql = "SELECT om_etat.libelle
4528     FROM ".DB_PREFIXE."om_etat
4529     WHERE om_etat.id = '".$f->get_submitted_post_value("bordereau")."'";
4530     $res = $f->db->getone($sql);
4531     $f->addToLog(__METHOD__.": db->getone(\"".$sql."\")", VERBOSE_MODE);
4532     $f->isDatabaseError($res);
4533     //
4534     $message_class = "valid";
4535     $message = _("Cliquez sur le lien ci-dessous pour telecharger votre bordereau");
4536     $message .= " : <br/><br/>";
4537     $message .= "<a class='om-prev-icon pdf-16'";
4538     $message .= " title=\""._("Bordereau")."\"";
4539 softime 7996 $message .= "href='".OM_ROUTE_FORM."&obj=instruction";
4540 nmeucci 4317 $message .= "&action=220";
4541     $message .= "&idx=0";
4542     $message .= "&type_bordereau=".$f->get_submitted_post_value("bordereau");
4543     $message .= "&date_bordereau_debut=".$f->get_submitted_post_value("date_bordereau_debut");
4544 mbroquet 3730 $message .= "&date_bordereau_fin=".$f->get_submitted_post_value("date_bordereau_fin");
4545     // Si l'utilisateur est MULTI alors on ajoute le paramètre collectivite
4546     if ($f->get_submitted_post_value("om_collectivite") !== null) {
4547     $message .= "&collectivite=".$f->get_submitted_post_value("om_collectivite");
4548     }
4549     $message .= "'"." target='_blank'>";
4550     $message .= $res." "._("du")." ".$f->get_submitted_post_value("date_bordereau_debut")
4551     ." "._("au")." ".$f->get_submitted_post_value("date_bordereau_fin");
4552     $message .= "</a>";
4553     }
4554     }
4555    
4556     /**
4557     * Affichage des messages et du formulaire
4558     */
4559     // Affichage du message de validation ou d'erreur
4560     if (isset($message) && isset($message_class) && $message != "") {
4561     $f->displayMessage($message_class, $message);
4562     }
4563     // Ouverture du formulaire
4564     printf("\t<form");
4565     printf(" method=\"post\"");
4566     printf(" id=\"suivi_bordereaux_form\"");
4567     printf(" action=\"\"");
4568     printf(">\n");
4569     // Paramétrage des champs du formulaire
4570     $champs = array("date_bordereau_debut", "date_bordereau_fin", "bordereau");
4571     // Si l'utilisateur est d'une collectivité de niveau 2 on affiche un select
4572     // collectivité dans le formulaire
4573     if($_SESSION["niveau"] == 2) {
4574     array_push($champs, "om_collectivite");
4575     }
4576     // Création d'un nouvel objet de type formulaire
4577 softime 7996 $form = $this->f->get_inst__om_formulaire(array(
4578     "validation" => 0,
4579     "maj" => 0,
4580     "champs" => $champs,
4581     ));
4582 mbroquet 3730 // Paramétrage du champ date_bordereau_debut
4583     $form->setLib("date_bordereau_debut", _("date_bordereau_debut"));
4584     $form->setType("date_bordereau_debut", "date");
4585     $form->setTaille("date_bordereau_debut", 12);
4586     $form->setMax("date_bordereau_debut", 12);
4587     $form->setRequired("date_bordereau_debut");
4588     $form->setOnchange("date_bordereau_debut", "fdate(this)");
4589     $form->setVal("date_bordereau_debut", date("d/m/Y"));
4590     // Paramétrage du champ date_bordereau_fin
4591     $form->setLib("date_bordereau_fin", _("date_bordereau_fin"));
4592     $form->setType("date_bordereau_fin", "date");
4593     $form->setTaille("date_bordereau_fin", 12);
4594     $form->setMax("date_bordereau_fin", 12);
4595     $form->setRequired("date_bordereau_fin");
4596     $form->setOnchange("date_bordereau_fin", "fdate(this)");
4597     $form->setVal("date_bordereau_fin", date("d/m/Y"));
4598     // Paramétrage du champ bordereau
4599     $form->setLib("bordereau", _("bordereau"));
4600     $form->setType("bordereau", "select");
4601     $form->setRequired("bordereau");
4602     // Valeurs des champs
4603     if ($f->get_submitted_post_value("validation") !== null) {
4604     $form->setVal("date_bordereau_debut", $f->get_submitted_post_value("date_bordereau_debut"));
4605     $form->setVal("date_bordereau_fin", $f->get_submitted_post_value("date_bordereau_fin"));
4606     $form->setVal("bordereau", $f->get_submitted_post_value("bordereau"));
4607     $form->setVal("om_collectivite", $f->get_submitted_post_value("om_collectivite"));
4608     }
4609     // Données du select - On récupère ici la liste de tous les états disponibles
4610     // dans la table om_etat qui ont un id qui commence par la cahine de caractères
4611     // 'bordereau_'
4612     $sql = "SELECT om_etat.id, om_etat.libelle
4613     FROM ".DB_PREFIXE."om_etat
4614     WHERE om_etat.id LIKE 'bordereau_%'
4615     ORDER BY om_etat.id";
4616     $res = $f->db->query($sql);
4617     $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
4618     $f->isDatabaseError($res);
4619     // Données du select
4620     $contenu = array(
4621     0 => array("", ),
4622     1 => array(_("choisir bordereau")),
4623     );
4624     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
4625     $contenu[0][] = $row['id'];
4626     $contenu[1][] = $row['libelle'];
4627     }
4628     $form->setSelect("bordereau", $contenu);
4629     //
4630     if($_SESSION["niveau"] == 2) {
4631     $form->setLib("om_collectivite", _("collectivite"));
4632     $form->setType("om_collectivite", "select");
4633    
4634     // Données du select - On récupère ici la liste de tous toutes les collectivités
4635     // de niveau 1
4636     $sql = "SELECT om_collectivite, libelle
4637     FROM ".DB_PREFIXE."om_collectivite
4638     WHERE niveau = '1' ORDER BY libelle";
4639     $res = $f->db->query($sql);
4640     $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
4641     $f->isDatabaseError($res);
4642     // La valeur par défaut du select est Toutes
4643     $list_collectivites = array(
4644     0 => array("", ),
4645     1 => array(_("toutes"))
4646     );
4647    
4648     $id_colls = "";
4649     // On stocke dans $id_colls l'id de toutes les collectivités de niveau 1 séparées
4650     // par des virgules, pour un traitement plus facile dans la requête de sous-état
4651     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
4652     if ($id_colls != "") {
4653     $id_colls .= ",";
4654     }
4655     $id_colls .= $row['om_collectivite'];
4656     $list_collectivites[0][] = $row['om_collectivite'];
4657     $list_collectivites[1][] = $row['libelle'];
4658     }
4659     // On affecte la liste d'identifiants à l'option Toutes
4660     $list_collectivites[0][0] = $id_colls ;
4661     $form->setSelect("om_collectivite", $list_collectivites);
4662     }
4663    
4664     // Affichage du formulaire
4665     $form->entete();
4666     $form->afficher($champs, 0, false, false);
4667     $form->enpied();
4668     // Affichage du bouton
4669     printf("\t<div class=\"formControls\">\n");
4670     $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
4671     printf("\t</div>\n");
4672     // Fermeture du formulaire
4673     printf("\t</form>\n");
4674    
4675     }
4676    
4677 nmeucci 4317
4678     /**
4679     * VIEW - view_generate_suivi_bordereaux.
4680     *
4681     * Génère et affiche les bordereaux de suivi.
4682     *
4683     * @return [void]
4684     */
4685     function view_generate_suivi_bordereaux() {
4686     // Vérification de l'accessibilité sur l'élément
4687     $this->checkAccessibility();
4688     // Récupération du type de bordereau
4689     $bordereau = $this->f->get_submitted_get_value('type_bordereau');
4690     // Génération du PDF
4691     $result = $this->compute_pdf_output('etat', $bordereau, null, $this->getVal($this->clePrimaire));
4692     // Affichage du PDF
4693     $this->expose_pdf_output(
4694     $result['pdf_output'],
4695     $result['filename']
4696     );
4697     }
4698    
4699    
4700 mbroquet 3730 /**
4701     * VIEW - view_suivi_envoi_lettre_rar.
4702     *
4703     * Vu pour imprimer les RAR.
4704     *
4705     * @return void
4706     */
4707     function view_suivi_envoi_lettre_rar() {
4708     // Vérification de l'accessibilité sur l'élément
4709     $this->checkAccessibility();
4710    
4711     // XXX APP
4712    
4713     $f = $this->f;
4714    
4715     //
4716     if ($f->get_submitted_post_value("date") !== null) {
4717     $date = $f->get_submitted_post_value("date");
4718     } else {
4719     $date = "";
4720     }
4721     //
4722     if ($f->get_submitted_post_value("liste_code_barres_instruction") !== null) {
4723     $liste_code_barres_instruction = $f->get_submitted_post_value("liste_code_barres_instruction");
4724     } else {
4725     $liste_code_barres_instruction = "";
4726     }
4727    
4728     // Compteur du nombre de page générées
4729     $nbLettres = 0;
4730     // Liste d'id des instructions
4731     $id4Gen = array();
4732     //
4733     $error = "";
4734    
4735 softime 5504 // Initialisation du tableau qui va contenir les DI pour lister les liens
4736     $dossierTab = array();
4737     // On vérifie que l'utilisateur ait les droits pour afficher des consultations
4738     $isAccredited = $this->f->isAccredited(array("dossier_instruction","dossier_instruction_consulter"), "OR");
4739     $hasHidden = true;
4740     // S'il ne peut pas les consulter il aura des dossiers caché
4741     if ($isAccredited === true) {
4742     $hasHidden = false;
4743     }
4744    
4745 mbroquet 3730 /**
4746     * Validation du formulaire
4747     */
4748     // Si le formulaire a été validé
4749     if ($f->get_submitted_post_value('validation') !== null) {
4750     //
4751     if (empty($date) || empty($liste_code_barres_instruction)) {
4752     //
4753     $message_class = "error";
4754     $message = _("Tous les champs doivent etre remplis.");
4755     } else {
4756     // Création d'un tableau d'instruction
4757     $liste = explode("\r\n", $f->get_submitted_post_value("liste_code_barres_instruction"));
4758     //
4759     foreach ($liste as $code_barres) {
4760     // On enlève les éventuels espaces saisis
4761     $code_barres = trim($code_barres);
4762     // Vérification de l'existence de l'instruction
4763     if ($code_barres != "") {
4764     // Si la valeur transmise est numérique
4765     if (is_numeric($code_barres)) {
4766     //
4767 softime 6565 $sql = "SELECT count(*)
4768     FROM ".DB_PREFIXE."instruction
4769     INNER JOIN ".DB_PREFIXE."dossier
4770     ON dossier.dossier=instruction.dossier
4771     INNER JOIN ".DB_PREFIXE."dossier_instruction_type
4772     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
4773     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
4774     ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
4775     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
4776     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
4777     INNER JOIN ".DB_PREFIXE."groupe
4778     ON dossier_autorisation_type.groupe = groupe.groupe
4779     WHERE code_barres='".$this->f->db->escapesimple($code_barres)."'";
4780 softime 7067
4781     // Ajout d'un filtre sur les groupes auxquels l'utilisateur a accès
4782     $group_clause = array();
4783     foreach ($_SESSION["groupe"] as $key => $value) {
4784     $group_clause[$key] = "(groupe.code = '".$key."'";
4785     if($value["confidentiel"] !== true) {
4786     $group_clause[$key] .= " AND dossier_autorisation_type.confidentiel IS NOT TRUE";
4787     }
4788     $group_clause[$key] .= ")";
4789     }
4790     $conditions = implode(" OR ", $group_clause);
4791     $sql .= " AND (" . $conditions . ")";
4792    
4793 mbroquet 3730 $nbInstr = $f->db->getone($sql);
4794     $f->addToLog(__METHOD__.": db->getone(\"".$sql."\")", VERBOSE_MODE);
4795     $f->isDatabaseError($nbInstr);
4796     //
4797     if ($nbInstr == "1") {
4798     // Récupération de la date d'envoi de l'instruction bippé
4799     $sql = "SELECT to_char(date_envoi_rar,'DD/MM/YYYY') as date_envoi_rar, instruction FROM ".DB_PREFIXE."instruction WHERE code_barres='".$code_barres."'";
4800     $res = $f->db->query($sql);
4801     $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
4802     $f->isDatabaseError($res);
4803     $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
4804     // Si pas de date ou correspond à la date du formulaire on
4805     // effectue le traitement
4806     if ($row["date_envoi_rar"] == "" || $row["date_envoi_rar"] == $date) {
4807 softime 7996 $instr = $this->f->get_inst__om_dbform(array(
4808     "obj" => "instruction",
4809     "idx" => $row['instruction'],
4810     ));
4811 mbroquet 3730 $valF = array();
4812     foreach($instr->champs as $id => $champ) {
4813     $valF[$champ] = $instr->val[$id];
4814     }
4815 softime 5504
4816     # Si on peut consulter les dossiers et que le dossier n'existe pas déjà dans la liste
4817     if ($isAccredited === true
4818     && array_key_exists($instr->getVal("dossier"), $dossierTab) === false) {
4819 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
4820     "obj" => "dossier",
4821     "idx" => $instr->getVal("dossier"),
4822     ));
4823 softime 5504 if ($dossier->is_user_from_allowed_collectivite()){
4824     $dossierTab[$instr->getVal("dossier")] = $dossier;
4825     } else {
4826     $hasHidden = true;
4827     }
4828     }
4829    
4830 mbroquet 3730 $valF['date_evenement']=
4831     $instr->dateDBToForm($valF['date_evenement']);
4832     $valF['archive_date_complet']=
4833     $instr->dateDBToForm($valF['archive_date_complet']);
4834     $valF['archive_date_rejet']=
4835     $instr->dateDBToForm($valF['archive_date_rejet']);
4836     $valF['archive_date_limite']=
4837     $instr->dateDBToForm($valF['archive_date_limite']);
4838     $valF['archive_date_notification_delai']=
4839     $instr->dateDBToForm($valF['archive_date_notification_delai']);
4840     $valF['archive_date_decision']=
4841     $instr->dateDBToForm($valF['archive_date_decision']);
4842     $valF['archive_date_validite']=
4843     $instr->dateDBToForm($valF['archive_date_validite']);
4844     $valF['archive_date_achevement']=
4845     $instr->dateDBToForm($valF['archive_date_achevement']);
4846     $valF['archive_date_chantier']=
4847     $instr->dateDBToForm($valF['archive_date_chantier']);
4848     $valF['archive_date_conformite']=
4849     $instr->dateDBToForm($valF['archive_date_conformite']);
4850     $valF['archive_date_dernier_depot']=
4851     $instr->dateDBToForm($valF['archive_date_dernier_depot']);
4852     $valF['archive_date_limite_incompletude']=
4853     $instr->dateDBToForm($valF['archive_date_limite_incompletude']);
4854     $valF['date_finalisation_courrier']=
4855     $instr->dateDBToForm($valF['date_finalisation_courrier']);
4856     $valF['date_envoi_signature']=
4857     $instr->dateDBToForm($valF['date_envoi_signature']);
4858     $valF['date_retour_signature']=
4859     $instr->dateDBToForm($valF['date_retour_signature']);
4860     $valF['date_envoi_rar']=
4861     $instr->dateDBToForm($valF['date_envoi_rar']);
4862     $valF['date_retour_rar']=
4863     $instr->dateDBToForm($valF['date_retour_rar']);
4864     $valF['date_envoi_controle_legalite']=
4865     $instr->dateDBToForm($valF['date_envoi_controle_legalite']);
4866     $valF['date_retour_controle_legalite']=
4867     $instr->dateDBToForm($valF['date_retour_controle_legalite']);
4868     $valF['date_envoi_rar'] = $date;
4869    
4870     // Vérification de la finalisation du document
4871     // correspondant au code barres
4872     if($instr->getVal("om_final_instruction") === 't') {
4873     $instr->setParameter('maj', 1);
4874 nmeucci 3971 $instr->class_actions[1]["identifier"] =
4875     "envoi lettre RAR (depuis le menu suivi des pièces)";
4876 mbroquet 3730 if ($instr->modifier($valF, $f->db, DEBUG) == true) {
4877     $id4Gen[] = $code_barres;
4878     $nbLettres ++;
4879     } else {
4880     //
4881     if ($error != "") {
4882     $error .= "<br/>";
4883     }
4884     $error .= sprintf(_("Une erreur s'est produite lors de la modification de l'instruction %s."),
4885     $code_barres);
4886     $error .= " ";
4887     $error .= _("Veuillez contacter votre administrateur.");
4888     }
4889     } else {
4890     //
4891     if ($error != "") {
4892     $error .= "<br/>";
4893     }
4894     $error .= sprintf(_("Le document correspondant au
4895     code barres %s n'est pas finalise,
4896     le bordereau ne sera pas genere."),
4897     $code_barres);
4898     }
4899    
4900     } else {
4901     //
4902     if ($error != "") {
4903     $error .= "<br/>";
4904     }
4905     $error .= _("Une lettre correspondante a l'instruction ayant pour code barres")." ".$code_barres." "._("a deja ete envoyee, le bordereau ne sera pas genere.");
4906     }
4907     } else {
4908     //
4909     if ($error != "") {
4910     $error .= "<br/>";
4911     }
4912     $error .= _("Le numero")." ".$code_barres." "._("ne correspond a aucun code barres d'instruction.");
4913     }
4914     } else {
4915     //
4916     if ($error != "") {
4917     $error .= "<br/>";
4918     }
4919     $error .= _("Le code barres d'instruction")." ".$code_barres." "._("n'est pas valide.");
4920     }
4921     }
4922     }
4923     }
4924     }
4925    
4926     /**
4927     * Affichage des messages et du formulaire
4928     */
4929     // Affichage du message de validation ou d'erreur
4930     if (isset($message) && isset($message_class) && $message != "") {
4931     $f->displayMessage($message_class, $message);
4932     }
4933     // Affichage du message d'erreur
4934     if(!empty($error)) {
4935     $f->displayMessage("error", $error);
4936     }
4937     // Affichage du message de validation de la saisie
4938     if ($nbLettres > 0) {
4939     //
4940 softime 5504 echo "\n<div class=\"message ui-widget ui-corner-all ui-state-highlight ui-state-valid\" >";
4941     echo "\n<p>";
4942     echo "\n<span class=\"ui-icon ui-icon-info\"></span>";
4943     echo "\n<span class=\"text\">";
4944     echo _("Cliquez sur le lien ci-dessous pour telecharger votre document");
4945     echo " : \n<br/><br/>";
4946     echo "\n<a class='om-prev-icon pdf-16'";
4947     echo "\n title=\""._("imprimer les RAR")."\"";
4948 softime 7996 echo "\n href=\"".OM_ROUTE_FORM."&obj=instruction&action=180&idx=0&liste=".implode(",",$id4Gen)."\"";
4949 softime 5504 echo "\n target='_blank'>";
4950     echo _("Telecharger le document pour")." ".$nbLettres." "._("RAR");
4951     echo "\n</a>";
4952     echo "\n</span>";
4953     echo "\n</p>";
4954     echo "\n<br/>\n";
4955     if ($isAccredited === true) {
4956     echo '<fieldset id="fieldset-form-rar-lien_di" class="cadre ui-corner-all startClosed" style="background-color: inherite;">';
4957     echo "\n<legend class=\"ui-corner-all ui-widget-content ui-state-active\" style=\"background-color: transparent; color: inherit;\">\n";
4958     echo _('Dossiers concernés par ce traitement');
4959     echo "\n</legend>";
4960     echo "\n<div class=\"fieldsetContent\" style=\"display: none;background-color: inherite\">";
4961    
4962     if ($hasHidden === true) {
4963     echo "\n<br/>";
4964     echo "\n<p>";
4965     echo "\n<span class='text'>";
4966     echo _("Certains dossiers ont été omis de la liste ci-dessous car vous ne possédez pas les permissions nécessaires pour y accéder.");
4967     echo "</span>";
4968     echo "\n</p>";
4969     echo "\n<br/>";
4970     }
4971     foreach ($dossierTab as $dossier) {
4972 softime 7067
4973     $inst_da = $this->get_inst_common("dossier_autorisation", $dossier->getVal('dossier_autorisation'));
4974     $inst_datd = $this->get_inst_common("dossier_autorisation_type_detaille", $inst_da->getVal('dossier_autorisation_type_detaille'));
4975     $code_datd = $inst_datd->getVal('code');
4976    
4977     $obj = "dossier_instruction";
4978     if ($code_datd === 'REC' OR $code_datd === 'REG') {
4979     $obj = "dossier_contentieux_tous_recours";
4980     }
4981     if ($code_datd === 'IN') {
4982     $obj = "dossier_contentieux_toutes_infractions";
4983     }
4984    
4985 softime 5504 echo "\n<div class=\"bloc group\">";
4986     echo "\n<div class=\"field field-type-text\">";
4987    
4988     echo "\n<p>";
4989     echo "\n<span class='text'>";
4990     echo "\n<a class=\"om-icon om-icon-16 consult-16\" title=\"" . _('Consulter') . "\"";
4991 softime 7996 echo "\n href=\"".OM_ROUTE_FORM."&obj=dossier_instruction&action=3&idx=";
4992 softime 5504 echo $dossier->getVal("dossier");
4993     echo "\">";
4994     echo "\n</a>";
4995    
4996     echo "\n<a title=\""._("Consulter")."\" style=\"vertical-align:middle;\"";
4997 softime 7996 echo " href=\"".OM_ROUTE_FORM."&obj=";
4998 softime 7067 echo $obj;
4999     echo "&action=3&idx=";
5000 softime 5504 echo $dossier->getVal("dossier");
5001     echo "\">";
5002     echo $dossier->getVal("dossier_libelle");
5003     echo "\n</a>";
5004     echo "\n</span>";
5005     echo "\n</p>";
5006    
5007     echo "\n</div>";
5008     echo "\n</div>";
5009     }
5010     echo "\n</div>";
5011     echo "\n</fieldset>";
5012     }
5013     echo "\n</div>";
5014     echo "\n</div>";
5015 mbroquet 3730 }
5016     // Ouverture du formulaire
5017     echo "\t<form";
5018     echo " method=\"post\"";
5019     echo " id=\"suivi_envoi_lettre_rar_form\"";
5020     echo " action=\"\"";
5021     echo ">\n";
5022     // Paramétrage des champs du formulaire
5023     $champs = array("date", "liste_code_barres_instruction");
5024     // Création d'un nouvel objet de type formulaire
5025 softime 7996 $form = $this->f->get_inst__om_formulaire(array(
5026     "validation" => 0,
5027     "maj" => 0,
5028     "champs" => $champs,
5029     ));
5030 mbroquet 3730 // Paramétrage du champ date du formulaire
5031     $form->setLib("date", _("Date")."* :");
5032     $form->setType("date", "date");
5033     $form->setOnchange("date", "fdate(this)");
5034     $form->setVal("date", ($date == "" ? date("d/m/Y") : $date));
5035     $form->setTaille("date", 10);
5036     $form->setMax("date", 10);
5037     // Paramétrage du champ liste_code_barres_instruction du formulaire
5038     $form->setLib("liste_code_barres_instruction", _("Liste des codes barres d'instructions scannes")."* :");
5039     $form->setType("liste_code_barres_instruction", "textarea");
5040     $form->setVal("liste_code_barres_instruction", $liste_code_barres_instruction);
5041     $form->setTaille("liste_code_barres_instruction", 20);
5042     $form->setMax("liste_code_barres_instruction", 20);
5043     // Affichage du formulaire
5044     $form->entete();
5045     $form->afficher($champs, 0, false, false);
5046     $form->enpied();
5047     // Affichage du bouton
5048     echo "\t<div class=\"formControls\">\n";
5049     $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
5050     echo "\t</div>\n";
5051     // Fermeture du formulaire
5052     echo "\t</form>\n";
5053     }
5054    
5055     /**
5056     * VIEW - view_suivi_mise_a_jour_des_dates.
5057     *
5058     * Vu pour mettre à jour les dates de suivi de l'instruction.
5059     *
5060     * @return void
5061     */
5062     function view_suivi_mise_a_jour_des_dates() {
5063     // Vérification de l'accessibilité sur l'élément
5064     $this->checkAccessibility();
5065    
5066     // XXX APP
5067    
5068     $f = $this->f;
5069    
5070     // Récupération des valeur passées en POST ou GET
5071     if($f->get_submitted_post_value("type_mise_a_jour") !== null) {
5072     $type_mise_a_jour = $f->get_submitted_post_value("type_mise_a_jour");
5073     } elseif($f->get_submitted_get_value('type_mise_a_jour') !== null) {
5074     $type_mise_a_jour = $f->get_submitted_get_value('type_mise_a_jour');
5075     } else {
5076     $type_mise_a_jour = "";
5077     }
5078     if($f->get_submitted_post_value('date') !== null) {
5079     $date = $f->get_submitted_post_value('date');
5080     } elseif($f->get_submitted_get_value('date') !== null) {
5081     $date = $f->get_submitted_get_value('date');
5082     } else {
5083     $date = "";
5084     }
5085     if($f->get_submitted_post_value('code_barres') !== null) {
5086     $code_barres = $f->get_submitted_post_value('code_barres');
5087     } elseif($f->get_submitted_get_value('code_barres') !== null) {
5088     $code_barres = $f->get_submitted_get_value('code_barres');
5089     } else {
5090     $code_barres = "";
5091     }
5092     // Booléen permettant de définir si un enregistrement à eu lieu
5093     $correct = false;
5094     // Booléen permettant de définir si les dates peuvent êtres enregistrées
5095     $date_error = false;
5096     // Champs date à mettre à jour
5097     $liste_champs=array();
5098    
5099     // Si le formulaire a été validé
5100     if ($f->get_submitted_post_value('validation') !== null) {
5101     if(!empty($type_mise_a_jour) and !empty($date) and !empty($code_barres)) {
5102    
5103 softime 6565 // Vérification de l'existence de l'instruction
5104     $sql = "SELECT instruction
5105     FROM ".DB_PREFIXE."instruction
5106     INNER JOIN ".DB_PREFIXE."dossier
5107     ON dossier.dossier=instruction.dossier
5108     INNER JOIN ".DB_PREFIXE."dossier_instruction_type
5109     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
5110     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
5111     ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
5112     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
5113     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
5114     INNER JOIN ".DB_PREFIXE."groupe
5115     ON dossier_autorisation_type.groupe = groupe.groupe
5116     WHERE code_barres='".$this->f->db->escapesimple($code_barres)."'";
5117 softime 7067
5118     // Ajout d'un filtre sur les groupes auxquels l'utilisateur a accès
5119     $group_clause = array();
5120     foreach ($_SESSION["groupe"] as $key => $value) {
5121     $group_clause[$key] = "(groupe.code = '".$key."'";
5122     if($value["confidentiel"] !== true) {
5123     $group_clause[$key] .= " AND dossier_autorisation_type.confidentiel IS NOT TRUE";
5124     }
5125     $group_clause[$key] .= ")";
5126     }
5127     $conditions = implode(" OR ", $group_clause);
5128     $sql .= " AND (" . $conditions . ")";
5129    
5130    
5131 mbroquet 3730 $res = $f->db->query($sql);
5132     $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
5133     $f->isDatabaseError($res);
5134    
5135     if($res->numrows() == 1) {
5136     $liste_champs = explode(";", $type_mise_a_jour);
5137     // Mise à jour des dates après l'écran de verification
5138     if($f->get_submitted_post_value('is_valid') !== null and $f->get_submitted_post_value('is_valid') == "true") {
5139     $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
5140 softime 7996 $instr = $this->f->get_inst__om_dbform(array(
5141     "obj" => "instruction",
5142     "idx" => $row['instruction'],
5143     ));
5144 mbroquet 3730 $valF = array();
5145     foreach($instr->champs as $id => $champ) {
5146     $valF[$champ] = $instr->val[$id];
5147     }
5148 softime 6565 $valF['date_evenement'] = $instr->dateDBToForm($valF['date_evenement']);
5149     $valF['archive_date_complet'] = $instr->dateDBToForm($valF['archive_date_complet']);
5150     $valF['archive_date_rejet'] = $instr->dateDBToForm($valF['archive_date_rejet']);
5151     $valF['archive_date_limite'] = $instr->dateDBToForm($valF['archive_date_limite']);
5152     $valF['archive_date_notification_delai'] = $instr->dateDBToForm($valF['archive_date_notification_delai']);
5153     $valF['archive_date_decision'] = $instr->dateDBToForm($valF['archive_date_decision']);
5154     $valF['archive_date_validite'] = $instr->dateDBToForm($valF['archive_date_validite']);
5155     $valF['archive_date_achevement'] = $instr->dateDBToForm($valF['archive_date_achevement']);
5156     $valF['archive_date_chantier'] = $instr->dateDBToForm($valF['archive_date_chantier']);
5157     $valF['archive_date_conformite'] = $instr->dateDBToForm($valF['archive_date_conformite']);
5158     $valF['archive_date_dernier_depot'] = $instr->dateDBToForm($valF['archive_date_dernier_depot']);
5159     $valF['archive_date_limite_incompletude'] = $instr->dateDBToForm($valF['archive_date_limite_incompletude']);
5160     $valF['date_finalisation_courrier'] = $instr->dateDBToForm($valF['date_finalisation_courrier']);
5161     $valF['date_envoi_signature'] = $instr->dateDBToForm($valF['date_envoi_signature']);
5162     $valF['date_retour_signature'] = $instr->dateDBToForm($valF['date_retour_signature']);
5163     $valF['date_envoi_rar'] = $instr->dateDBToForm($valF['date_envoi_rar']);
5164     $valF['date_retour_rar'] = $instr->dateDBToForm($valF['date_retour_rar']);
5165     $valF['date_envoi_controle_legalite'] = $instr->dateDBToForm($valF['date_envoi_controle_legalite']);
5166     $valF['date_retour_controle_legalite'] = $instr->dateDBToForm($valF['date_retour_controle_legalite']);
5167     $valF['archive_date_cloture_instruction'] = $instr->dateDBToForm($valF['archive_date_cloture_instruction']);
5168     $valF['archive_date_premiere_visite'] = $instr->dateDBToForm($valF['archive_date_premiere_visite']);
5169     $valF['archive_date_derniere_visite'] = $instr->dateDBToForm($valF['archive_date_derniere_visite']);
5170     $valF['archive_date_contradictoire'] = $instr->dateDBToForm($valF['archive_date_contradictoire']);
5171     $valF['archive_date_retour_contradictoire'] = $instr->dateDBToForm($valF['archive_date_retour_contradictoire']);
5172     $valF['archive_date_ait'] = $instr->dateDBToForm($valF['archive_date_ait']);
5173     $valF['archive_date_transmission_parquet'] = $instr->dateDBToForm($valF['archive_date_transmission_parquet']);
5174 mbroquet 3730
5175     foreach(explode(";", $type_mise_a_jour) as $maj_date) {
5176     $valF[$maj_date]=$date;
5177     }
5178    
5179     // Vérification de la finalisation du document
5180     // correspondant au code barres
5181     if($valF["om_final_instruction"] === 't' or
5182     $valF["lettretype"] == '') {
5183     $code_barres = "";
5184    
5185     //Désactivation de l'autocommit
5186     $f->db->autoCommit(false);
5187    
5188     //On modifie les valeurs de l'instruction
5189     $instr->setParameter('maj', 170);
5190 nmeucci 3965 $instr->class_actions[170]["identifier"] =
5191 nmeucci 3972 "mise à jour des dates (depuis le menu suivi des pièces)";
5192 mbroquet 3730 $retour = $instr->modifier($valF, $f->db, DEBUG);
5193    
5194     //Si une erreur s'est produite, on défait les modifications
5195     //qui ont été faites
5196     if (!$retour){
5197     $instr->undoValidation();
5198     }
5199     //Sinon, on valide en base de données les modifications
5200     else {
5201     $f->db->commit();
5202     }
5203    
5204     // Variable correct retourné depuis la classe instruction
5205     $correct = $instr->correct;
5206    
5207     // Si la modification sur l'instruction a échoué
5208     if ($correct === false) {
5209    
5210     // Message d'erreur de la classe instruction
5211     $error = $instr->msg;
5212     }
5213    
5214     } else {
5215     // Indique que le traitement est en erreur
5216     $correct = false;
5217     // Message d'erreur
5218     $error = sprintf(_("Le document n'est pas finalise."),
5219     "<span class='bold'>".$code_barres."</span>");
5220     }
5221     } else {
5222     // Récupération des infos du dossier
5223     $sqlInfo = "SELECT dossier.dossier_libelle,
5224     evenement.libelle as evenement,
5225     autorite_competente.code as autorite_competente_code,
5226     autorite_competente.libelle as autorite_competente,
5227     evenement.type as evenement_type,
5228     to_char(date_envoi_signature,'DD/MM/YYYY') as date_envoi_signature,
5229     to_char(date_retour_signature,'DD/MM/YYYY') as date_retour_signature,
5230     to_char(date_envoi_controle_legalite,'DD/MM/YYYY') as date_envoi_controle_legalite,
5231     to_char(date_retour_controle_legalite,'DD/MM/YYYY') as date_retour_controle_legalite,
5232     to_char(date_envoi_rar,'DD/MM/YYYY') as date_envoi_rar,
5233     to_char(date_retour_rar,'DD/MM/YYYY') as date_retour_rar
5234     FROM ".DB_PREFIXE."instruction
5235     INNER JOIN ".DB_PREFIXE."dossier ON
5236     dossier.dossier=instruction.dossier
5237     LEFT JOIN ".DB_PREFIXE."autorite_competente ON
5238     dossier.autorite_competente=autorite_competente.autorite_competente
5239     INNER JOIN ".DB_PREFIXE."evenement ON
5240     instruction.evenement=evenement.evenement
5241     WHERE code_barres='".$code_barres."'";
5242     $resInfo = $f->db->query($sqlInfo);
5243     $f->isDatabaseError($resInfo);
5244     $infos = $resInfo->fetchRow(DB_FETCHMODE_ASSOC);
5245    
5246     // Vérification de la non modification des dates de suivi
5247     foreach(explode(";", $type_mise_a_jour) as $champ) {
5248     if($infos[$champ] != "" AND $infos[$champ] != $date) {
5249     $error = _("Les dates de suivis ne peuvent etre modifiees");
5250     $date_error = true;
5251     }
5252     }
5253     }
5254     } else {
5255     $error = _("Le numero saisi ne correspond a aucun code barres d'instruction.");
5256     }
5257    
5258     } else {
5259     $error = _("Tous les champs doivent etre remplis.");
5260     }
5261     }
5262    
5263     /**
5264     * Affichage des messages et du formulaire
5265     */
5266     // Affichage du message de validation ou d'erreur
5267     if (isset($message) && isset($message_class) && $message != "") {
5268     $f->displayMessage($message_class, $message);
5269     }
5270     // Affichage du message d'erreur
5271     if(!empty($error)) {
5272     $f->displayMessage("error", $error);
5273     }
5274    
5275     // Affichage du message de validation de la saisie
5276     if($correct === true) {
5277     $f->displayMessage("ok", _("Saisie enregistree"));
5278     }
5279     // Ouverture du formulaire
5280     echo "\t<form";
5281     echo " method=\"post\"";
5282     echo " id=\"suivi_mise_a_jour_des_dates_form\"";
5283     echo " action=\"\"";
5284     echo ">\n";
5285     // Paramétrage des champs du formulaire
5286     if(isset($infos)) {
5287     $champs = array("type_mise_a_jour", "date", "code_barres", "dossier_libelle", "evenement"
5288     , "autorite_competente", "date_envoi_signature",
5289     "date_retour_signature", "date_envoi_controle_legalite",
5290     "date_retour_controle_legalite", "date_envoi_rar",
5291     "date_retour_rar", "is_valid");
5292     } else {
5293     $champs = array("type_mise_a_jour", "date", "code_barres");
5294     }
5295     // Création d'un nouvel objet de type formulaire
5296 softime 7996 $form = $this->f->get_inst__om_formulaire(array(
5297     "validation" => 0,
5298     "maj" => 0,
5299     "champs" => $champs,
5300     ));
5301 mbroquet 3730 // Paramétrage des champs du formulaire
5302     // Parametrage du champ type_mise_a_jour
5303     $form->setLib("type_mise_a_jour", _("Date a mettre a jour")."* :");
5304     if(isset($infos)) {
5305     $form->setType("type_mise_a_jour", "selecthiddenstatic");
5306    
5307     } else {
5308     $form->setType("type_mise_a_jour", "select");
5309    
5310     }
5311     $form->setVal("type_mise_a_jour", $type_mise_a_jour);
5312     $contenu = array();
5313    
5314     $contenu[0][0] = "date_envoi_signature";
5315     $contenu[1][0] = _("date d'envoi pour signature Mairie/Prefet");
5316    
5317     $contenu[0][1] = "date_retour_signature";
5318     $contenu[1][1] = _("date de retour de signature Mairie/Prefet");
5319    
5320     $contenu[0][2] = "date_retour_signature;date_envoi_controle_legalite";
5321     $contenu[1][2] = _("date de retour de signature + Envoi controle legalite");
5322    
5323     $contenu[0][3] = "date_envoi_controle_legalite";
5324     $contenu[1][3] = _("date d'envoi au controle de legalite");
5325    
5326     $contenu[0][4] = "date_retour_controle_legalite";
5327     $contenu[1][4] = _("date de retour de controle de legalite");
5328    
5329     $contenu[0][5] = "date_retour_rar";
5330     $contenu[1][5] = _("date de retour de l'AR");
5331    
5332     $form->setSelect("type_mise_a_jour", $contenu);
5333    
5334     // Parametrage du champ date
5335     $form->setLib("date", _("Date")."* :");
5336     if(isset($infos)) {
5337     $form->setType("date", "hiddenstaticdate");
5338    
5339     } else {
5340     $form->setType("date", "date");
5341     }
5342     $form->setVal("date", $date);
5343     $form->setTaille("date", 10);
5344     $form->setMax("date", 10);
5345    
5346     // Parametrage du champ code_barres
5347     $form->setLib("code_barres", _("Code barres d'instruction")."* :");
5348     if(isset($infos)) {
5349     $form->setType("code_barres", "hiddenstatic");
5350     } else {
5351     $form->setType("code_barres", "text");
5352     }
5353     $form->setVal("code_barres", $code_barres);
5354     $form->setTaille("code_barres", 20);
5355     $form->setMax("code_barres", 20);
5356    
5357     // Ajout des infos du dossier correspondantes à l'instruction séléctionnée
5358     if(isset($infos)) {
5359    
5360     // Tous les champs sont défini par defaut à static
5361     foreach ($infos as $key => $value) {
5362     $form->setType($key, "static");
5363     if(in_array($key, $liste_champs)) {
5364     $form->setVal($key, $date);
5365     } else {
5366     $form->setVal($key, $value);
5367     }
5368     }
5369    
5370     // Les champs dont on viens de définir la valeur sont en gras
5371     foreach ($liste_champs as $value) {
5372     $form->setBloc($value,'DF',"",'bold');
5373     }
5374    
5375     // Parametrage du champ dossier
5376     $form->setLib("dossier_libelle", _("dossier_libelle")." :");
5377     $form->setType("dossier_libelle", "static");
5378     $form->setVal("dossier_libelle", $infos['dossier_libelle']);
5379    
5380     // Parametrage du champ evenement
5381     $form->setLib("evenement", _("evenement")." :");
5382     $form->setType("evenement", "static");
5383     $form->setVal("evenement", $infos['evenement']);
5384    
5385     // Parametrage du champ autorite_competente
5386     $form->setLib("autorite_competente", _("Autorite competente")." :");
5387     $form->setType("autorite_competente", "static");
5388     $form->setVal("autorite_competente", $infos['autorite_competente']);
5389    
5390     // Parametrage des libellés d'envoi avec RAR
5391     $form->setLib("date_envoi_rar", _("date_envoi_rar")." :");
5392     $form->setLib("date_retour_rar", _("date_retour_rar")." :");
5393    
5394     $form->setLib("date_envoi_signature", _("date_envoi_signature")." :");
5395     $form->setLib("date_retour_signature", _("date_retour_signature")." :");
5396     $form->setLib("date_envoi_controle_legalite", _("date_envoi_controle_legalite")." :");
5397     $form->setLib("date_retour_controle_legalite", _("date_retour_controle_legalite")." :");
5398     // Configuration des libellé en fonction de l'autorité compétente
5399     if($infos['autorite_competente_code'] == 'ETAT') {
5400     $form->setType("date_envoi_controle_legalite", "hiddendate");
5401     $form->setType("date_retour_controle_legalite", "hiddendate");
5402     }
5403    
5404     // Ajout d'un champ hidden permettant de savoir que le formulaire précédant est celui de vérification
5405     $form->setLib("is_valid", _("Valide")." :");
5406     $form->setType("is_valid", "hidden");
5407     $form->setVal("is_valid", 'true');
5408    
5409     $form->setFieldset('dossier_libelle','D',_('Synthese'));
5410     $form->setFieldset('is_valid','F');
5411    
5412     }
5413    
5414    
5415     // Création du fieldset regroupant les champs permettant la mise à jour des date
5416     $form->setFieldset('type_mise_a_jour','D',_('Mise a jour'));
5417     $form->setFieldset('code_barres','F');
5418     // Affichage du formulaire
5419     $form->entete();
5420     $form->afficher($champs, 0, false, false);
5421     $form->enpied();
5422     // Affichage du bouton
5423     echo "\t<div class=\"formControls\">\n";
5424     //
5425     if(!$date_error) {
5426     $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
5427     }
5428     // Si pas sur l'écran de validation
5429     if(isset($infos)) {
5430 softime 7996 echo "<a class=\"retour\" href=\"".OM_ROUTE_FORM."&obj=instruction_suivi_mise_a_jour_des_dates&action=170&idx=0";
5431 mbroquet 3730 echo "&amp;type_mise_a_jour=".$type_mise_a_jour."&amp;date=".$date."&amp;code_barres=".$code_barres;
5432     echo "\">Retour</a>";
5433     }
5434     echo "\t</div>\n";
5435     // Fermeture du formulaire
5436     echo "\t</form>\n";
5437     }
5438    
5439     /**
5440     * [view_pdf_lettre_rar description]
5441     *
5442     * @return [type] [description]
5443     */
5444     function view_pdf_lettre_rar() {
5445     // Vérification de l'accessibilité sur l'élément
5446     $this->checkAccessibility();
5447    
5448     // XXX APP
5449    
5450     $f = $this->f;
5451    
5452     $f->disableLog();
5453    
5454     if($f->get_submitted_get_value('liste') != null) {
5455     $listeCodeBarres = explode(',',$f->get_submitted_get_value('liste'));
5456    
5457     // Classe permettant la mise en page de l'édition pdf
5458     require_once "../obj/pdf_lettre_rar.class.php";
5459     $pdf_lettre_rar = new pdf_lettre_rar('P', 'mm', 'A4');
5460     // Initialisation de la mise en page
5461     $pdf_lettre_rar->init($f);
5462    
5463     foreach ($listeCodeBarres as $code_barres) {
5464    
5465 softime 7067 // On récupère le dossier
5466     $sql = "SELECT dossier
5467     FROM " . DB_PREFIXE . "instruction
5468     WHERE code_barres = '" . $code_barres . "'";
5469     $dossier = $this->db->getOne($sql);
5470     $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
5471     $this->f->isDatabaseError($dossier);
5472 softime 7996 $inst_dossier = $this->f->get_inst__om_dbform(array(
5473     "obj" => "dossier",
5474     "idx" => $dossier,
5475     ));
5476 softime 7067
5477     // En fonction du type de dossier, on récupère un demandeur différent dans les requêtes
5478     $groupe = $inst_dossier->get_type_affichage_formulaire();
5479     switch ($groupe) {
5480     case 'CTX IN':
5481     $sql_demandeur = "(lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='plaignant')";
5482     break;
5483     case 'CTX RE':
5484     $sql_demandeur = "(lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='requerant')";
5485     break;
5486     case 'ADS':
5487     case 'DPC':
5488     default:
5489     $sql_demandeur = "((lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='petitionnaire') OR demandeur.type_demandeur='delegataire')";
5490     break;
5491     }
5492    
5493 mbroquet 3730 // Test si l'evenement est de type arrete et si un délégataire a été nommé
5494     $sql = "SELECT
5495     dossier.dossier_libelle,
5496     evenement.type,
5497 softime 3834 count(lien_dossier_demandeur) as nbdemandeur,
5498     CASE
5499     WHEN division.libelle IS NOT NULL AND phase.code IS NOT NULL
5500     THEN CONCAT(phase.code, ' - ', division.libelle)
5501     ELSE
5502     phase.code
5503     END AS code_phase
5504 mbroquet 3730 FROM ".DB_PREFIXE."instruction
5505     LEFT JOIN ".DB_PREFIXE."dossier
5506     ON instruction.dossier = dossier.dossier
5507 softime 3834 LEFT JOIN ".DB_PREFIXE."division
5508     ON dossier.division = division.division
5509 mbroquet 3730 INNER JOIN ".DB_PREFIXE."evenement ON
5510 softime 3834 instruction.evenement=evenement.evenement
5511     LEFT JOIN ".DB_PREFIXE."phase
5512     ON evenement.phase = phase.phase
5513 mbroquet 3730 inner JOIN ".DB_PREFIXE."lien_dossier_demandeur ON
5514     instruction.dossier=lien_dossier_demandeur.dossier
5515     inner join ".DB_PREFIXE."demandeur on
5516     demandeur.demandeur=lien_dossier_demandeur.demandeur
5517     WHERE code_barres='".$code_barres."'
5518 softime 7067 AND " . $sql_demandeur . "
5519 softime 3834 GROUP BY dossier.dossier_libelle, evenement.type, phase.code, division.libelle";
5520 mbroquet 3730
5521     $res = $f->db->query($sql);
5522     $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
5523     $f->isDatabaseError($res);
5524     $testDemandeur = $res->fetchrow(DB_FETCHMODE_ASSOC);
5525    
5526    
5527     // Recuperation de l'adresse de destination
5528     $sqlAdresse = "SELECT
5529     CASE WHEN demandeur.qualite='particulier'
5530     THEN TRIM(CONCAT_WS(' ', pc.libelle, demandeur.particulier_nom, demandeur.particulier_prenom))
5531     ELSE TRIM(demandeur.personne_morale_denomination)
5532     END as ligne1,
5533     CASE WHEN demandeur.qualite='personne_morale'
5534     THEN TRIM(demandeur.personne_morale_raison_sociale)
5535     ELSE ''
5536     END as ligne1_1,
5537     CASE WHEN demandeur.qualite='personne_morale' AND (demandeur.personne_morale_nom IS NOT NULL OR demandeur.personne_morale_prenom IS NOT NULL)
5538     THEN TRIM(CONCAT_WS(' ', 'rep. par', demandeur.personne_morale_nom, demandeur.personne_morale_prenom))
5539     ELSE ''
5540     END as ligne1_2,
5541     trim(concat(demandeur.numero,' ',demandeur.voie)) as ligne2,
5542     CASE demandeur.complement
5543     WHEN null THEN ''
5544     ELSE trim(demandeur.complement)
5545     END as ligne3,
5546     CASE demandeur.lieu_dit
5547     WHEN null THEN ''
5548     ELSE trim(demandeur.lieu_dit)
5549     END as ligne4,
5550     CONCAT_WS(' ', demandeur.code_postal, demandeur.localite,
5551     (CASE WHEN demandeur.bp IS NOT NULL
5552     THEN CONCAT_WS(' ', 'BP', demandeur.bp)
5553     ELSE ''
5554     END),
5555     (CASE WHEN demandeur.cedex IS NOT NULL
5556     THEN CONCAT_WS(' ', 'CEDEX', demandeur.cedex)
5557     ELSE ''
5558     END))
5559     as ligne5,
5560     code_barres as code_barres
5561     FROM ".DB_PREFIXE."instruction
5562     INNER JOIN ".DB_PREFIXE."dossier ON dossier.dossier = instruction.dossier
5563     INNER JOIN ".DB_PREFIXE."lien_dossier_demandeur ON dossier.dossier = lien_dossier_demandeur.dossier
5564     INNER JOIN ".DB_PREFIXE."demandeur ON lien_dossier_demandeur.demandeur = demandeur.demandeur
5565     LEFT OUTER JOIN ".DB_PREFIXE."civilite as pc ON demandeur.particulier_civilite = pc.civilite OR demandeur.personne_morale_civilite = pc.civilite
5566     WHERE instruction.code_barres ='".$code_barres."'";
5567    
5568     // Envoi pour delegataire ou petitionnaire principal selon le type d'evenement
5569     if($testDemandeur['type'] != 'arrete' AND $testDemandeur['nbdemandeur'] > 1) {
5570     $sqlAdresse .= " AND demandeur.type_demandeur='delegataire'";
5571     } else {
5572 softime 7996 $sqlAdresse .= " AND demandeur.type_demandeur='petitionnaire' AND lien_dossier_demandeur.petitionnaire_principal IS TRUE";
5573 mbroquet 3730 }
5574    
5575     $resAdresse = $f->db->query($sqlAdresse);
5576     $adresse_dest = $resAdresse->fetchrow(DB_FETCHMODE_ASSOC);
5577     $f->addToLog(__METHOD__.": db->query(\"".$sqlAdresse."\")", VERBOSE_MODE);
5578     $f->isDatabaseError($resAdresse);
5579    
5580     // Création adresse destinataire sans ligne vide
5581     $adresse_destinataire = array();
5582     if (!empty($adresse_dest['ligne1'])) {
5583     $adresse_destinataire[] = $adresse_dest['ligne1'];
5584     }
5585     if (!empty($adresse_dest['ligne1_1'])) {
5586     $adresse_destinataire[] = $adresse_dest['ligne1_1'];
5587     }
5588     if (!empty($adresse_dest['ligne1_2'])) {
5589     $adresse_destinataire[] = $adresse_dest['ligne1_2'];
5590     }
5591     $adresse_destinataire[] = $adresse_dest['ligne2'];
5592     if (!empty($adresse_dest['ligne3'])) {
5593     $adresse_destinataire[] = $adresse_dest['ligne3'];
5594     }
5595     if (!empty($adresse_dest['ligne4'])) {
5596     $adresse_destinataire[] = $adresse_dest['ligne4'];
5597     }
5598     $adresse_destinataire[] = $adresse_dest['ligne5'];
5599    
5600     // Création du champ specifique
5601     $specifique_content = array();
5602     $specifique_content[] = $adresse_dest['ligne1'];
5603     $specifique_content[] = $adresse_dest['ligne1_1'];
5604     $specifique_content[] = $adresse_dest['ligne1_2'];
5605     $specifique_content[] = $testDemandeur['dossier_libelle'];
5606     $specifique_content[] = "|||||".$adresse_dest['code_barres']."|||||";
5607     unset($adresse_dest['code_barres']);
5608     // Ajout d'une page aux pdf
5609 softime 3834 $pdf_lettre_rar->addLetter($adresse_destinataire, $specifique_content, $testDemandeur['code_phase']);
5610 mbroquet 3730
5611     }
5612     $pdf_output = $pdf_lettre_rar->output("lettre_rar".date("dmYHis").".pdf","S");
5613 softime 7685 $om_edition = $this->f->get_inst__om_edition();
5614 mbroquet 3730 $om_edition->expose_pdf_output($pdf_output, "lettre_rar".date("dmYHis").".pdf");
5615     }
5616     }
5617    
5618     /**
5619     * VIEW - view_bordereau_envoi_maire.
5620     *
5621     * Formulaire demandant :
5622     * - le code-barres de l'événement d'instruction
5623     * - la date d'envoi du courrier pour signature par le maire
5624     *
5625     * Lors de la validation :
5626     * => met à jour cette date dans l'événement d'instruction
5627     * => crée un lien permettant de générer en PDF le bordereau
5628     *
5629     * @return void
5630     */
5631     function view_bordereau_envoi_maire() {
5632     // Vérification de l'accessibilité sur l'élément
5633     $this->checkAccessibility();
5634    
5635     // Récupération des valeur passées en POST ou GET
5636     $code_barres = "";
5637     if($this->f->get_submitted_post_value('code_barres') !== null) {
5638     $code_barres = $this->f->get_submitted_post_value('code_barres');
5639     } elseif($this->f->get_submitted_get_value('code_barres')!==null) {
5640     $code_barres = $this->f->get_submitted_get_value('code_barres');
5641     }
5642     $date = "";
5643     if($this->f->get_submitted_post_value('date') !== null) {
5644     $date = $this->f->get_submitted_post_value('date');
5645     } elseif($this->f->get_submitted_get_value('date') !== null) {
5646     $date = $this->f->get_submitted_get_value('date');
5647     }
5648     $validation = 0;
5649     if($this->f->get_submitted_post_value('validation') !== null) {
5650     $validation = $this->f->get_submitted_post_value('validation');
5651     } elseif($this->f->get_submitted_get_value('validation') !== null) {
5652     $validation = $this->f->get_submitted_get_value('validation');
5653     }
5654    
5655     // Si le formulaire a été validé
5656     if ($this->f->get_submitted_post_value('validation') !== null) {
5657     // Tous les champs doivent obligatoirement être remplis
5658     if (!empty($date) && !empty($code_barres)) {
5659     $date_en = $this->dateDB($date);
5660     // Si date valide
5661     if ($date_en != "") {
5662     $id_instruction = $this->get_instruction_by_barcode($code_barres);
5663     // Si un événement d'instruction a été trouvé pour ce code-barres
5664     if ($id_instruction !== null) {
5665     $ret = $this->update_date_envoi_signature($id_instruction, $date_en);
5666     // Si mise à jour réussie de la date d'envoi du courrier
5667     // pour signature par l'autorité compétente
5668     if($ret === true) {
5669     // Message de validation avec lien PDF
5670     $message_class = "valid";
5671     $message = '&bullet; '._("Veuillez cliquer sur le lien ci-dessous pour telecharger votre bordereau");
5672     $message .= " : <br/><br/>";
5673     $message .= "<a class='om-prev-icon pdf-16'";
5674     $message .= " id=\"generer_bordereau_envoi_maire\"";
5675     $message .= " title=\""._("Bordereau")."\"";
5676 softime 7996 $message .= " href='".OM_ROUTE_FORM."&obj=instruction";
5677 mbroquet 3730 $message .= "&action=200";
5678     $message .= "&idx=".$id_instruction."'";
5679     $message .= " target='_blank'>";
5680     $message .= _("Bordereau d'envoi au maire");
5681     $message .= "</a><br/><br/>";
5682     $message .= '&bullet; '._("Rappel des informations saisies")." :<br/><br/>";
5683     $message .= _("Code du courrier")." : ".$code_barres."<br/>";
5684     $message .= _("Date d'envoi du courrier pour signature par le maire")." : ".$date;
5685    
5686     } else {
5687     // Message d'erreur
5688     $message_class = "error";
5689     $message = sprintf(_("Erreur lors de la mise a jour de l'evenement d'instruction correspondant au code barres %s."),
5690     $code_barres);
5691     }
5692     }
5693     else {
5694     $message_class = "error";
5695     $message = _("Le numero saisi ne correspond a aucun code-barres d'evenement d'instruction.");
5696     }
5697     }
5698     else {
5699     $message_class = "error";
5700     $message = _("La date est invalide.");
5701     }
5702     } else {
5703     $message_class = "error";
5704     $message = _("Tous les champs doivent etre remplis.");
5705     }
5706     }
5707    
5708     /**
5709     * Affichage des messages et du formulaire
5710     */
5711    
5712     // Affichage du message de validation ou d'erreur
5713     if (isset($message) && isset($message_class) && $message != "") {
5714     $this->f->displayMessage($message_class, $message);
5715     }
5716    
5717     // Ouverture du formulaire
5718     $datasubmit = $this->getDataSubmit();
5719     echo "\n<!-- ########## START DBFORM ########## -->\n";
5720     echo "<form";
5721     echo " id=\"bordereau_envoi_maire\"";
5722     echo " method=\"post\"";
5723     echo " name=\"f1\"";
5724     echo " action=\"";
5725     echo $datasubmit;
5726     echo "\"";
5727     echo ">\n";
5728    
5729     // Paramétrage des champs du formulaire
5730     $champs = array("code_barres","date");
5731    
5732     // Création d'un nouvel objet de type formulaire
5733 softime 7996 $form = $this->f->get_inst__om_formulaire(array(
5734     "validation" => 0,
5735     "maj" => 0,
5736     "champs" => $champs,
5737     ));
5738 mbroquet 3730
5739     $template_required_label = '%s *';
5740     // Parametrage du champ code_barres
5741     $form->setLib("code_barres", sprintf($template_required_label,_("Code du courrier")));
5742     $form->setType("code_barres", "text");
5743     $form->setVal("code_barres", $code_barres);
5744     $form->setTaille("code_barres", 20);
5745     $form->setMax("code_barres", 20);
5746     // Parametrage du champ date
5747     $form->setLib("date", sprintf($template_required_label,_("Date d'envoi du courrier pour signature par le maire")));
5748     $form->setType("date", "date") ;
5749     if (empty($date)) {
5750     $date = date('d/m/Y');
5751     }
5752     $form->setVal("date", $date);
5753     $form->setTaille("date", 10);
5754     $form->setMax("date", 10);
5755    
5756     // Création du bloc regroupant les champs
5757     $form->setBloc('code_barres','D');
5758     $form->setBloc('date','F');
5759     // Affichage du formulaire
5760     $form->entete();
5761     $form->afficher($champs, 0, false, false);
5762     $form->enpied();
5763     // Affichage du bouton
5764     printf("\t<div class=\"formControls\">\n");
5765     //
5766     $this->f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
5767     printf("\t</div>\n");
5768     // Fermeture du formulaire
5769     printf("\t</form>\n");
5770     }
5771    
5772     /**
5773     * VIEW - view_bordereau_envoi_maire.
5774     *
5775     * PDF de bordereau d'envoi au maire pour l'événement d'instruction instancié
5776     *
5777     * @return [void]
5778     */
5779     function view_generate_bordereau_envoi_maire() {
5780     // Vérification de l'accessibilité sur l'élément
5781     $this->checkAccessibility();
5782     // Récupération de la collectivité du dossier d'instruction
5783     $collectivite_di = $this->get_dossier_instruction_om_collectivite();
5784     // Récupération de ses paramètres
5785     $collectivite = $this->f->getCollectivite($collectivite_di);
5786     // Génération du PDF
5787     $result = $this->compute_pdf_output('etat', 'communaute_bordereau_envoi_maire', $collectivite, $this->getVal(($this->clePrimaire)));
5788     // Affichage du PDF
5789     $this->expose_pdf_output(
5790     $result['pdf_output'],
5791     $result['filename']
5792     );
5793     }
5794    
5795     /**
5796 softime 6565 * Retourne l'événement d'instruction dont on donne le code-barres, avec un filtre
5797     * pour exclure les dossiers du groupe contentieux.
5798 mbroquet 3730 *
5799     * @param [string] $barcode numéro du code-barres
5800     * @return [mixed] ID de son instruction ou null si aucun code
5801     */
5802     function get_instruction_by_barcode($barcode) {
5803     // Begin
5804     $this->begin_treatment(__METHOD__);
5805     // Vérification de l'existence de l'événement d'instruction
5806 softime 6565 // pour le code-barres donné, en excluant les dossiers liés au groupe CTX
5807 mbroquet 3730 $sql = "SELECT instruction
5808 softime 6565 FROM ".DB_PREFIXE."instruction
5809     INNER JOIN ".DB_PREFIXE."dossier
5810     ON dossier.dossier=instruction.dossier
5811     INNER JOIN ".DB_PREFIXE."dossier_instruction_type
5812     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
5813     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
5814     ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
5815     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
5816     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
5817     INNER JOIN ".DB_PREFIXE."groupe
5818     ON dossier_autorisation_type.groupe = groupe.groupe
5819     AND groupe.code != 'CTX'
5820     WHERE code_barres = '".$this->f->db->escapesimple($barcode)."'";
5821 mbroquet 3730 $res = $this->f->db->getOne($sql);
5822     $this->f->addToLog(__METHOD__." : db->getOne(\"".$sql."\")", VERBOSE_MODE);
5823     $this->f->isDatabaseError($res);
5824     // Retourne résultat
5825     return $this->end_treatment(__METHOD__, $res);
5826     }
5827    
5828     /**
5829     * Met à jour le champ date d'envoi signature
5830     * avec la date fournie et pour l'instruction donnée
5831     *
5832     * @param [string] $id ID de l'événement d'instruction
5833     * @param [string] $date date au format EN
5834     * @return [boolean] true si mise à jour avec succès
5835     */
5836     function update_date_envoi_signature($id, $date) {
5837     // Préparation du tableau
5838     $valF = array();
5839     $valF['date_envoi_signature'] = $date;
5840     // Begin
5841     $this->begin_treatment(__METHOD__);
5842     // Requête
5843     $res = $this->db->autoExecute(
5844     DB_PREFIXE.$this->table,
5845     $valF,
5846     DB_AUTOQUERY_UPDATE,
5847     $this->getCle($id)
5848     );
5849     // S'il y a eu une erreur
5850     if (database::isError($res, true)) {
5851     $this->end_treatment(__METHOD__, false);
5852     }
5853     //
5854     return $this->end_treatment(__METHOD__, true);
5855     }
5856    
5857     /**
5858     * Méthode permettant de définir des valeurs à envoyer en base après
5859     * validation du formulaire d'ajout.
5860     * @param array $val tableau des valeurs retournées par le formulaire
5861     */
5862 softime 6929 function setValFAjout($val = array()) {
5863 mbroquet 3730 // Mise à jour du flag created_by_commune lors d'un changement de décision
5864     // par un utilisateur de commune sur un dossier instruit par la comcom
5865 softime 6565 if ($this->isInstrCanChangeDecision($this->valF["dossier"])) {
5866 mbroquet 3730 $this->valF['created_by_commune'] = true;
5867     }
5868 softime 8593
5869     //
5870     if ($this->evenement_has_an_edition($this->valF['evenement']) === false) {
5871     if (isset($this->valF['flag_edition_integrale']) === true) {
5872     unset($this->valF['flag_edition_integrale']);
5873     }
5874     if (isset($this->valF['signataire_arrete']) === true) {
5875     unset($this->valF['signataire_arrete']);
5876     }
5877     }
5878 mbroquet 3730 }
5879 nmeucci 3876
5880 fmichon 3892
5881 fmichon 4708 /**
5882     * Récupère l'instance d'un événement de workflow.
5883     *
5884     * @param mixed $evenement Identifiant de l'événement.
5885     *
5886     * @return object
5887     */
5888     function get_inst_evenement($evenement = null) {
5889     //
5890     return $this->get_inst_common("evenement", $evenement);
5891     }
5892 softime 3976
5893 fmichon 3892 /**
5894 softime 3976 * Logue l'action de l'instruction dans son DI.
5895 nmeucci 3933 *
5896 softime 3976 * @param string $id Clé primaire de l'instruction.
5897     * @param array $val Valeurs de l'instruction.
5898     *
5899     * @return bool Vrai si traitement effectué avec succès
5900 nmeucci 3876 */
5901 softime 3976 private function add_log_to_dossier($id, array $val) {
5902 nmeucci 3933 $maj = $this->getParameter("maj");
5903 nmeucci 3943 // Action = Trace par défaut
5904     $action = $this->get_backtrace();
5905     // Action = Identifant de l'action si contexte connu
5906     if (empty($maj) === false
5907     || (empty($maj) === true && $maj === 0)) {
5908     $action = $this->get_action_param($maj, 'identifier');
5909 nmeucci 3965 if ($action === 'modifier_suivi') {
5910     $action = "modifier (via l'action suivi des dates)";
5911     }
5912 nmeucci 4108 if ($action === 'notifier_commune'
5913     && isset($val['mails_destinataires']) === true) {
5914     $action = "notification de la commune (courriels : ";
5915     $action .= $val['mails_destinataires'].")";
5916     }
5917 nmeucci 3943 }
5918 nmeucci 3876 // Création du log
5919     $log = array(
5920     'date' => date('Y-m-d H:i:s'),
5921     'user' => $_SESSION['login'],
5922     'action' => $action,
5923     'values' => array(
5924     'date_evenement' => $this->dateDB($val['date_evenement']),
5925     'date_retour_rar' => $this->dateDB($val['date_retour_rar']),
5926     'date_retour_signature' => $this->dateDB($val['date_retour_signature']),
5927     'evenement' => $val['evenement'],
5928     'action' => $val['action'],
5929 nmeucci 3963 'instruction' => $id,
5930 nmeucci 3876 'etat' => $val['etat'],
5931     ),
5932     );
5933     // Ajout du log
5934 softime 3976 $di = $this->get_inst_dossier($val['dossier']);
5935 nmeucci 3876 $ret = $di->add_log_instructions($log);
5936     if ($ret === false) {
5937     $this->correct = false;
5938     $this->msg = '';
5939     $this->addToMessage($di->msg);
5940     }
5941     return $ret;
5942     }
5943 nmeucci 3943
5944 softime 3976
5945 nmeucci 3943 /**
5946 softime 3976 * Retourne le contexte de déboguage formaté en HTML.
5947 nmeucci 3943 *
5948 softime 3976 * @return string Une ligne par trace
5949 nmeucci 3943 */
5950     private function get_backtrace() {
5951     $trace = debug_backtrace();
5952 nmeucci 3957 $backtrace = '';
5953     $i = 1;
5954 nmeucci 3943 foreach ($trace as $key => $value) {
5955 nmeucci 3957 $func = $trace[$key]['function'];
5956     // On ne s'autolog pas
5957     if ($func === 'get_backtrace'
5958     || $func === 'add_log_to_dossier') {
5959     continue;
5960     }
5961     $backtrace .= $i.') ';
5962     // Si dans une classe
5963     if (isset($trace[$key]['class']) === true
5964     && empty($trace[$key]['class']) === false) {
5965 nmeucci 3963 $backtrace .= $trace[$key]['class'].'->'.$func;
5966 nmeucci 3957 }
5967     // Si procédural
5968     else {
5969     $file = $trace[$key]['file'];
5970 nmeucci 3963 $line = $trace[$key]['line'];
5971 softime 3976 $truncated_file = $this->f->get_relative_path($file);
5972 nmeucci 3963 if ($truncated_file !== false) {
5973     $file = $truncated_file;
5974     }
5975     $backtrace .= $func.' IN<br/>&nbsp;&nbsp;&nbsp;&nbsp; '.$file.':'.$line;
5976 nmeucci 3957 }
5977     $backtrace .= '<br/>';
5978     $i++;
5979 nmeucci 3943 }
5980 nmeucci 3957 return $backtrace;
5981 nmeucci 3943 }
5982 nmeucci 3963
5983 nmeucci 4108 /**
5984     * CONDITION - is_notifiable.
5985     *
5986     * Condition pour afficher l'action notifier_commune.
5987     *
5988     * @return boolean
5989     */
5990     public function is_notifiable() {
5991     // L'instruction doit être finalisée, ce qui revient à dire
5992     // définalisable sans bypass
5993     if ($this->is_unfinalizable_without_bypass() === false) {
5994     return false;
5995     }
5996     // La collectivité de l'utilisateur doit être de niveau multi
5997     if ($this->f->has_collectivite_multi() === false) {
5998     return false;
5999     }
6000     // Le paramètre multi de l'objet du courriel doit exister
6001     if ($this->f->getParameter('param_courriel_de_notification_commune_objet_depuis_instruction') === NULL) {
6002     return false;
6003     }
6004     // Le paramètre multi du modèle du courriel doit exister
6005     if ($this->f->getParameter('param_courriel_de_notification_commune_modele_depuis_instruction') === NULL) {
6006     return false;
6007     }
6008     // A ce stade toutes les conditions sont satisfaites
6009     return true;
6010     }
6011 nmeucci 3963
6012 nmeucci 4108 /**
6013     * TREATMENT - notifier_commune.
6014     *
6015     * Notifie aux communes et par courriel la finalisation d'une instruction.
6016     *
6017     * @return boolean
6018     */
6019     public function notifier_commune() {
6020     // Cette méthode permet d'exécuter une routine en début des méthodes
6021     // dites de TREATMENT.
6022     $this->begin_treatment(__METHOD__);
6023     // Définition des paramètres
6024     $p_objet = 'param_courriel_de_notification_commune_objet_depuis_instruction';
6025     $p_modele = 'param_courriel_de_notification_commune_modele_depuis_instruction';
6026     $p_courriel = 'param_courriel_de_notification_commune';
6027     // Définition des variables de substitution
6028     $id_di = $this->getVal('dossier');
6029     $id_inst = $this->getVal($this->clePrimaire);
6030     // Instanciation du DI
6031     $di = $this->get_inst_dossier($id_di);
6032     // Récupération du paramétrage de la collectivité du dossier
6033     $collectivite_di = $di->getVal('om_collectivite');
6034     $params_mono = $this->f->getCollectivite($collectivite_di);
6035     // Récupération du paramétrage de la collectivité multi
6036     $collectivite_multi = $this->f->get_idx_collectivite_multi();
6037     $params_multi = $this->f->getCollectivite($collectivite_multi);
6038     // Vérification de l'objet (obligatoirement multi)
6039     $objet = null;
6040     if (isset($params_multi[$p_objet]) === true
6041     && $params_multi[$p_objet] !== '') {
6042     $objet = $params_multi[$p_objet];
6043     }
6044     // Vérification du modèle mono en priorité
6045     $modele = null;
6046     if (isset($params_mono[$p_modele]) === true
6047     && $params_mono[$p_modele] !== '') {
6048     $modele = $params_mono[$p_modele];
6049    
6050     }
6051     // Sinon vérification du modèle multi
6052     if ($modele === null
6053     && isset($params_multi[$p_modele]) === true
6054     && $params_multi[$p_modele] !== '') {
6055     $modele = $params_multi[$p_modele];
6056     }
6057     // Vérification des adresses de courriel mono
6058     $courriels_valides = array();
6059     $courriels_invalides = array();
6060     if (isset($params_mono[$p_courriel]) === true
6061     && $params_mono[$p_courriel] !== '') {
6062     // Un mail par ligne
6063     $adresses = explode("\n", $params_mono[$p_courriel]);
6064     // Vérification de la validité de chaque mail avec preg_match
6065     foreach ($adresses as $adresse) {
6066     $adresse = trim($adresse);
6067     if ($this->f->checkValidEmailAddress($adresse) === 1) {
6068     $courriels_valides[] = $adresse;
6069     } else {
6070     $courriels_invalides[] = $adresse;
6071     }
6072     }
6073     }
6074     // Vérification du paramétrage global :
6075     // on stoppe le traitement si au moins un paramètre est incorrect
6076     if ($objet === null
6077     || $modele === null
6078     || count($courriels_valides) === 0
6079     || count($courriels_invalides) > 0) {
6080     // On construit le message d'erreur adéquat
6081     $this->addToMessage(_('Erreur de paramétrage :'));
6082     if ($objet === null) {
6083     $this->addToMessage(_("* l'objet du courriel envoyé aux communes est vide"));
6084     }
6085     if ($modele === null) {
6086     $this->addToMessage(_("* le modèle du courriel envoyé aux communes est vide"));
6087     }
6088     if (count($courriels_valides) === 0) {
6089     $this->addToMessage(_("* aucun courriel valide de destinataire de la commune"));
6090     }
6091     if (count($courriels_invalides) > 0) {
6092     $courriels_invalides = implode(', ', $courriels_invalides);
6093     $this->addToMessage(_("* un ou plusieurs courriels des destinataires de la commune sont invalides : ").$courriels_invalides);
6094     }
6095     $this->addToMessage(_("Veuillez contacter votre administrateur."));
6096     return $this->end_treatment(__METHOD__, false);
6097     }
6098     // Remplacement des variables de substitution
6099     $objet = str_replace('<DOSSIER_INSTRUCTION>', $id_di, $objet);
6100     $modele = $this->formater_modele($modele, $id_di, $id_inst);
6101     // Exécution du traitement d'envoi du/des mail(s)
6102     $fails = array();
6103     foreach ($courriels_valides as $email) {
6104     if ($this->f->sendMail(
6105     iconv("UTF-8", "CP1252", $objet),
6106     iconv("UTF-8", "CP1252", $modele),
6107     iconv("UTF-8", "CP1252", $email)) === false) {
6108     $fails[] = $email;
6109     }
6110     }
6111     // Si échec message d'erreur et arrêt du traitement
6112     if (count($fails) > 0) {
6113     $fails = implode(', ', $fails);
6114     $this->addToMessage(_("Erreur lors de l'envoi du courriel aux destinataires : ").$fails);
6115     $this->addToMessage(_("Veuillez contacter votre administrateur."));
6116     return $this->end_treatment(__METHOD__, false);
6117     }
6118     // Ajout du log
6119     $this->setValFFromVal();
6120     $val_inst = $this->valF;
6121     $val_inst['mails_destinataires'] = implode(', ', $courriels_valides);
6122     if ($this->add_log_to_dossier($id_inst, $val_inst) === false) {
6123     $this->addToMessage(_("Erreur lors de la notification."));
6124     $this->addToMessage(_("Veuillez contacter votre administrateur."));
6125     return $this->end_treatment(__METHOD__, false);
6126     }
6127     // Message de validation
6128     $this->addToMessage(_('La commune a été notifiée.'));
6129     return $this->end_treatment(__METHOD__, true);
6130     }
6131    
6132     /**
6133     * Formatte le corps du courriel notifié aux communes
6134     *
6135     * @param string $modele template du modèle du courriel
6136     * @param string $id_di clé primaire du DI
6137     * @param string $id_inst clé primaire de l'instruction
6138     * @return string corps du mail au format HTML
6139     */
6140     public function formater_modele($modele, $id_di, $id_inst) {
6141     // Création du lien d'accès direct à l'instruction
6142 softime 7996 $url_inst = PATH_BASE_URL.'app/index.php?module=form&direct_link=true&obj=dossier_instruction&action=3'.
6143 nmeucci 4108 '&direct_field=dossier&direct_form=instruction&direct_action=3&direct_idx='.$id_inst;
6144     $url_inst = '<a href="'.$url_inst.'">'.$url_inst.'</a>';
6145     // Remplacement des champs de fusion
6146     $modele = str_replace('<DOSSIER_INSTRUCTION>', $id_di, $modele);
6147     $modele = str_replace('<URL_INSTRUCTION>', $url_inst, $modele);
6148     $modele = str_replace('<ID_INSTRUCTION>', $id_inst, $modele);
6149     // Encodage HTML des sauts de ligne
6150     $modele = preg_replace("/\r\n|\r|\n/",'<br/>',$modele);
6151     //
6152     return $modele;
6153     }
6154 softime 5169
6155    
6156     /**
6157     * Récupère l'instance de l'instructeur
6158     *
6159     * @param integer $instructeur Identifiant de l'instructeur.
6160     *
6161     * @return object
6162     */
6163     protected function get_inst_instructeur($instructeur) {
6164     //
6165     return $this->get_inst_common("instructeur", $instructeur);
6166     }
6167    
6168    
6169     /**
6170     * Récupère l'instance de l'utilisateur
6171     *
6172     * @param integer $om_utilisateur Identifiant de l'utilisateur.
6173     *
6174     * @return object
6175     */
6176     protected function get_inst_om_utilisateur($om_utilisateur) {
6177     //
6178     return $this->get_inst_common("om_utilisateur", $om_utilisateur);
6179     }
6180    
6181    
6182 softime 6565 /**
6183 softime 5295 * Récupère l'instance de la division.
6184     *
6185     * @param integer $division Identifiant de la division.
6186     *
6187     * @return object
6188     */
6189     protected function get_inst_division($division) {
6190     //
6191     return $this->get_inst_common("division", $division);
6192     }
6193    
6194    
6195     /**
6196     * Récupère l'instance de la direction.
6197     *
6198     * @param integer $direction Identifiant de la direction.
6199     *
6200     * @return object
6201     */
6202     protected function get_inst_direction($direction) {
6203     //
6204     return $this->get_inst_common("direction", $direction);
6205     }
6206    
6207    
6208     /**
6209     * Récupère la collectivité d'un instructeur en passant par sa division puis
6210     * par sa direction.
6211     *
6212     * @param integer $instructeur Identifiant de l'instructeur.
6213     *
6214     * @return integer
6215     */
6216     protected function get_instructeur_om_collectivite($instructeur) {
6217     // Chemin vers la collectivité d'un instructeur
6218     $inst_instr = $this->get_inst_instructeur($instructeur);
6219     $inst_division = $this->get_inst_division($inst_instr->getVal('division'));
6220     $inst_direction = $this->get_inst_direction($inst_division->getVal('direction'));
6221    
6222     // Collectivité
6223     $om_collectivite = $inst_direction->getVal('om_collectivite');
6224    
6225     //
6226     return $om_collectivite;
6227     }
6228    
6229 softime 6565 /*
6230     * CONDITION - can_user_access_dossier_contexte_ajout
6231     *
6232     * Vérifie que l'utilisateur a bien accès au dossier d'instruction passé dans le
6233     * formulaire d'ajout.
6234     * Cette méthode vérifie que l'utilisateur est lié au groupe du dossier, et si le
6235     * dossier est confidentiel qu'il a accès aux confidentiels de ce groupe.
6236     *
6237     */
6238     function can_user_access_dossier_contexte_ajout() {
6239 softime 5295
6240 softime 6565 ($this->f->get_submitted_get_value('idxformulaire') !== null ? $id_dossier =
6241     $this->f->get_submitted_get_value('idxformulaire') : $id_dossier = "");
6242     //
6243     if ($id_dossier !== "") {
6244 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
6245     "obj" => "dossier_instruction",
6246     "idx" => $id_dossier,
6247     ));
6248 softime 6565 //
6249     return $dossier->can_user_access_dossier();
6250     }
6251     return false;
6252     }
6253    
6254     /*
6255     * CONDITION - can_user_access_dossier
6256     *
6257     * Vérifie que l'utilisateur a bien accès au dossier lié à l'instruction instanciée.
6258     * Cette méthode vérifie que l'utilisateur est lié au groupe du dossier, et si le
6259     * dossier est confidentiel qu'il a accès aux confidentiels de ce groupe.
6260     *
6261     */
6262     function can_user_access_dossier_contexte_modification() {
6263    
6264     $id_dossier = $this->getVal('dossier');
6265     //
6266     if ($id_dossier !== "" && $id_dossier !== null) {
6267 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
6268     "obj" => "dossier_instruction",
6269     "idx" => $id_dossier,
6270     ));
6271 softime 6565 //
6272     return $dossier->can_user_access_dossier();
6273     }
6274     return false;
6275     }
6276    
6277 softime 8593 /**
6278     * Retourne le lien de retour (VIEW formulaire et VIEW sousformulaire).
6279     *
6280     * @param string $view Appel dans le contexte de la vue 'formulaire' ou de
6281     * la vue 'sousformulaire'.
6282     *
6283     * @return string
6284     */
6285     function get_back_link($view = "formulaire") {
6286     //
6287     $href = parent::get_back_link($view);
6288     //
6289     $crud = $this->get_action_crud();
6290 mbroquet 3730
6291 softime 8593 // Redirection vers le formulaire de modification à la validation du
6292     // formulaire d'ajout si l'événement associé possède une lettre type
6293     if (($crud === 'create'
6294     || ($crud === null
6295     && $this->getParameter('maj') == 0))
6296     && $this->correct == true
6297     && $this->evenement_has_an_edition($this->valF['evenement']) === true) {
6298 softime 7996
6299 softime 8593 // On instancie l'instruction
6300     $inst_instruction = $this->f->get_inst__om_dbform(array(
6301     "obj" => "instruction",
6302     "idx" => $this->valF[$this->clePrimaire],
6303     ));
6304    
6305     // Si l'instruction n'est pas finalisée automatiquement
6306     if ($inst_instruction->getVal('om_final_instruction') !== 't') {
6307     $href = str_replace("&action=3", "&action=1", $href);
6308     //
6309     if (strpos($href, "&retour=tab") !== false) {
6310     $href = str_replace("&retour=tab", "&retour= form", $href);
6311     } else {
6312     $href .= "&retour=form";
6313     }
6314     }
6315     }
6316    
6317     //
6318     return $href;
6319     }
6320    
6321     }// fin classe

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26