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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 8593 - (hide annotations)
Wed Feb 27 16:39:17 2019 UTC (5 years, 11 months ago) by softime
File size: 278617 byte(s)
* Merge de la branche d'intégration 4.10.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     * Mise à jour des données du DA.
2050     */
2051     //
2052     $inst_da = $inst_di->get_inst_dossier_autorisation();
2053     //
2054     if ($inst_da->majDossierAutorisation() === false) {
2055 mbroquet 3730 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
2056     $this->correct = false;
2057     return false;
2058     }
2059 fmichon 4708
2060     /**
2061 softime 7996 * Finalisation automatique de l'instruction si le paramétrage de l'événement l'autorise
2062     */
2063     // Si la finalisation automatique de l'événement est activée
2064     // ET si l'instruction n'a pas déjà été finalisée
2065     // ET s'il existe une lettre type associée
2066     if ($inst_evenement->getVal('finaliser_automatiquement') === 't'
2067     && $inst_evenement->getVal('om_final_instruction') !== 't'
2068     && $inst_evenement->getVal('lettretype') !== ''
2069     && $inst_evenement->getVal('lettretype') !== null) {
2070    
2071     // On instancie l'instruction
2072     $inst_instruction = $this->f->get_inst__om_dbform(array(
2073     "obj" => "instruction",
2074     "idx" => $this->valF[$this->clePrimaire],
2075     ));
2076    
2077     // On finalise l'instruction dans le contexte de finalisation : action 100
2078     $inst_instruction->setParameter('maj', 100);
2079     $finalize = $inst_instruction->finalize($inst_instruction->valF);
2080    
2081     // Une erreur de finalisation renvoie 'false' : ajout dans les logs
2082     // et dans le message d'erreur
2083     if ($finalize === false) {
2084     $this->f->addToLog(__METHOD__."() : ERROR - Impossible de finaliser l'instruction.", DEBUG_MODE);
2085     $this->addToMessage(_("Erreur lors de la finalisation de l'instruction. Contactez votre administrateur."));
2086     return false;
2087     }
2088     }
2089    
2090     /**
2091 softime 7521 * Finalisation automatique des instructions tacites ou retours.
2092     */
2093 softime 7685 // Si l'option de finalisation automatique des instructions tacites ou
2094     // retours est activée et l'événement d'instruction a une lettre type
2095     // associée
2096     $collectivite_di = $this->get_dossier_instruction_om_collectivite($val['dossier']);
2097     if ($this->f->is_option_finalisation_auto_enabled($collectivite_di) === true
2098     && $inst_evenement->getVal('lettretype') !== ''
2099 softime 7521 && $inst_evenement->getVal('lettretype') !== null) {
2100    
2101     // Rècupère l'identifiant de l'événement
2102     $evenement_id = $inst_evenement->getVal($inst_evenement->clePrimaire);
2103    
2104     // Si l'événement d'instruction est identifié comme un événement
2105     // retour
2106     // OU l'événement d'instruction est l'événement suivant tacite du
2107     // dossier d'instruction (incomplétude prise en compte)
2108 softime 7996 // ET l'événement d'instruction n'a pas déjà été finalisé
2109     if (($inst_evenement->getVal("retour") === 't'
2110 softime 7521 || ($inst_di->getVal('evenement_suivant_tacite_incompletude') === $evenement_id
2111 softime 7996 || $inst_di->getVal('evenement_suivant_tacite') === $evenement_id))
2112     && ($inst_evenement->getVal('om_final_instruction') !== 't')) {
2113 softime 7521
2114     // Finalise l'instruction
2115 softime 7996 $inst_instruction = $this->f->get_inst__om_dbform(array(
2116     "obj" => "instruction",
2117     "idx" => $this->valF[$this->clePrimaire],
2118     ));
2119 softime 7521 $inst_instruction->setParameter('maj', 100);
2120     $finalize = $inst_instruction->finalize($inst_instruction->valF);
2121     if ($finalize === false) {
2122     //
2123     return false;
2124     }
2125     }
2126     }
2127    
2128     /**
2129 softime 7996 * Mise à jour de la date de dernière modification du dossier
2130     */
2131     $inst_di->update_last_modification_date();
2132    
2133     /**
2134 fmichon 4708 * Historisation de la vie du DI.
2135     */
2136     //
2137 nmeucci 3963 return $this->add_log_to_dossier($id, array_merge($val, $this->valF));
2138 nmeucci 3876 }
2139 mbroquet 3730
2140 softime 6929 function triggermodifierapres($id, &$db = null, $val = array(), $DEBUG = null) {
2141 mbroquet 3730 /**
2142     * L'objectif ici est d'effectuer les recalculs de date dans le dossier
2143     * si la date de l'evenement est modifiee
2144     */
2145     // Initialisation
2146     $valF = "";
2147 softime 6565 $valF_dt = "";
2148 mbroquet 3730 // Initialisation du type d'événement
2149     $type_evmt = "";
2150     // Récupération de l'action correspondante à l'événement
2151     $sql = "SELECT action
2152     FROM ".DB_PREFIXE."evenement
2153     WHERE evenement=".$this->valF['evenement'];
2154     $action = $db->getOne($sql);
2155     $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
2156     if (database::isError($action)) {
2157     die($action->getMessage());
2158     }
2159    
2160     // Récupération des paramètres de l'action
2161     $sql = "SELECT * FROM ".DB_PREFIXE."action
2162     WHERE action='".$action."'";
2163     $res = $db->query($sql);
2164     $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
2165     if (database::isError($res)) {
2166     die($res->getMessage());
2167     }
2168     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
2169     // application des regles sur le courrier + delai
2170     if(preg_match("/date_evenement/",$row['regle_date_limite'])){
2171     $valF['date_limite']= $this->regle($row['regle_date_limite'], 'regle_date_limite');
2172     }
2173     if(preg_match("/date_evenement/",$row['regle_date_complet'])){
2174     $valF['date_complet']= $this->regle($row['regle_date_complet'], 'regle_date_complet');
2175     }
2176     if(preg_match("/date_evenement/",$row['regle_date_dernier_depot'])){
2177     $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot'], 'regle_date_dernier_depot');
2178     }
2179     if(preg_match("/date_evenement/",$row['regle_date_notification_delai'])){
2180     $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai'], 'regle_date_notification_delai');
2181     }
2182     if(preg_match("/date_evenement/",$row['regle_date_decision'])){
2183     $valF['date_decision']= $this->regle($row['regle_date_decision'], 'regle_date_decision');
2184     }
2185     if(preg_match("/date_evenement/",$row['regle_date_rejet'])){
2186     $valF['date_rejet']= $this->regle($row['regle_date_rejet'], 'regle_date_rejet');
2187     }
2188     if(preg_match("/date_evenement/",$row['regle_date_validite'])){
2189     $valF['date_validite']= $this->regle($row['regle_date_validite'], 'regle_date_validite');
2190     }
2191     if(preg_match("/date_evenement/",$row['regle_date_chantier'])){
2192     $valF['date_chantier']= $this->regle($row['regle_date_chantier'], 'regle_date_chantier');
2193     }
2194     if(preg_match("/date_evenement/",$row['regle_date_achevement'])){
2195     $valF['date_achevement']= $this->regle($row['regle_date_achevement'], 'regle_date_achevement');
2196     }
2197     if(preg_match("/date_evenement/",$row['regle_date_conformite'])){
2198     $valF['date_conformite']= $this->regle($row['regle_date_conformite'], 'regle_date_conformite');
2199     }
2200 softime 6565 if(preg_match("/date_evenement/",$row['regle_date_cloture_instruction'])){
2201     $valF['date_cloture_instruction']= $this->regle($row['regle_date_cloture_instruction'], 'regle_date_cloture_instruction');
2202     }
2203     if(preg_match("/date_evenement/",$row['regle_date_premiere_visite'])){
2204     $valF['date_premiere_visite']= $this->regle($row['regle_date_premiere_visite'], 'regle_date_premiere_visite');
2205     }
2206     if(preg_match("/date_evenement/",$row['regle_date_derniere_visite'])){
2207     $valF['date_derniere_visite']= $this->regle($row['regle_date_derniere_visite'], 'regle_date_derniere_visite');
2208     }
2209     if(preg_match("/date_evenement/",$row['regle_date_contradictoire'])){
2210     $valF['date_contradictoire']= $this->regle($row['regle_date_contradictoire'], 'regle_date_contradictoire');
2211     }
2212     if(preg_match("/date_evenement/",$row['regle_date_retour_contradictoire'])){
2213     $valF['date_retour_contradictoire']= $this->regle($row['regle_date_retour_contradictoire'], 'regle_date_retour_contradictoire');
2214     }
2215     if(preg_match("/date_evenement/",$row['regle_date_ait'])){
2216     $valF['date_ait']= $this->regle($row['regle_date_ait'], 'regle_date_ait');
2217     }
2218     if(preg_match("/date_evenement/",$row['regle_date_transmission_parquet'])){
2219     $valF['date_transmission_parquet']= $this->regle($row['regle_date_transmission_parquet'], 'regle_date_transmission_parquet');
2220     }
2221     if ($row['regle_donnees_techniques1'] !== '') {
2222     $valF_dt[$row['cible_regle_donnees_techniques1']] = $this->regle($row['regle_donnees_techniques1'], 'regle_donnees_techniques1');
2223     }
2224     if ($row['regle_donnees_techniques2'] !== '') {
2225     $valF_dt[$row['cible_regle_donnees_techniques2']] = $this->regle($row['regle_donnees_techniques2'], 'regle_donnees_techniques2');
2226     }
2227     if ($row['regle_donnees_techniques3'] !== '') {
2228     $valF_dt[$row['cible_regle_donnees_techniques3']] = $this->regle($row['regle_donnees_techniques3'], 'regle_donnees_techniques3');
2229     }
2230     if ($row['regle_donnees_techniques4'] !== '') {
2231     $valF_dt[$row['cible_regle_donnees_techniques4']] = $this->regle($row['regle_donnees_techniques4'], 'regle_donnees_techniques4');
2232     }
2233     if ($row['regle_donnees_techniques5'] !== '') {
2234     $valF_dt[$row['cible_regle_donnees_techniques5']] = $this->regle($row['regle_donnees_techniques5'], 'regle_donnees_techniques5');
2235     }
2236 softime 8593 if ($row['regle_dossier_instruction_type'] !== '') {
2237     $valF['dossier_instruction_type'] = $this->regle($row['regle_dossier_instruction_type'], 'regle_dossier_instruction_type');
2238     }
2239 mbroquet 3730 }
2240 softime 6565 // Si des valeurs de données techniques ont été calculées alors on met à jour l'enregistrement
2241     if ($valF_dt != "") {
2242     $dt_id = $this->getDonneesTechniques();
2243     // On met à jour le dossier
2244     $cle = " donnees_techniques='".$dt_id."'";
2245     $res1 = $db->autoExecute(DB_PREFIXE.'donnees_techniques', $valF_dt, DB_AUTOQUERY_UPDATE, $cle);
2246     $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."donnees_techniques\", ".print_r($valF_dt, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
2247     if (database::isError($res1)) {
2248     die($res->getMessage());
2249     }
2250     // Affichage d'informations à l'utilisateur
2251     $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
2252     }
2253 mbroquet 3730 // Si des valeurs ont été calculées alors on met à jour l'enregistrement
2254     if ($valF != "") {
2255     // On met à jour le dossier
2256     $cle = " dossier='".$this->valF['dossier']."'";
2257     $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
2258     $this->addToLog("triggermodifierapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
2259     if (database::isError($res1)) {
2260     die($res->getMessage());
2261     }
2262     // Affichage d'informations à l'utilisateur
2263     $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
2264     }
2265    
2266     $restriction = $this->get_restriction($val['evenement']);
2267     $this->restriction_valid = $this->restrictionIsValid($restriction);
2268    
2269     if($restriction == "" || $this->restriction_valid ){
2270     // Récupération de tous les paramètres de l'événement sélectionné
2271     $sql = "SELECT * FROM ".DB_PREFIXE."evenement
2272     WHERE evenement=".$this->valF['evenement'];
2273     $res = $db->query($sql);
2274     $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
2275     if (database::isError($res)) {
2276     die($res->getMessage());
2277     }
2278 nmeucci 3965 $current_id = $this->getVal($this->clePrimaire);
2279 mbroquet 3730 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
2280     // Si la date de retour signature est éditée on vérifie si il existe un événement automatique
2281     if ($this->getVal('date_retour_signature') == "" AND
2282     $this->valF['date_retour_signature'] != "" AND
2283     $row['evenement_retour_signature'] != "") {
2284 softime 7996 $new_instruction = $this->f->get_inst__om_dbform(array(
2285     "obj" => "instruction",
2286     "idx" => "]",
2287     ));
2288 mbroquet 3730 // Création d'un tableau avec la liste des champs de l'instruction
2289     foreach($new_instruction->champs as $champ) {
2290     $valNewInstr[$champ] = "";
2291     }
2292     // Définition des valeurs de la nouvelle instruction
2293     $valNewInstr["evenement"] = $row['evenement_retour_signature'];
2294     $valNewInstr["destinataire"] = $this->valF['destinataire'];
2295     $valNewInstr["dossier"] = $this->valF['dossier'];
2296     $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_signature']);
2297     $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
2298     $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
2299     $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
2300     $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
2301     $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
2302     $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
2303 nmeucci 3965 $new_instruction->setParameter("maj", 0);
2304     $new_instruction->class_actions[0]["identifier"] =
2305     "retour signature de l'instruction $current_id";
2306 mbroquet 3730 $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
2307    
2308     //Si une erreur s'est produite et qu'il s'agit d'un problème
2309     //de restriction
2310     if ($retour == false && !$new_instruction->restriction_valid){
2311     $error_message = $this->get_restriction_error_message($restriction);
2312     $this->f->displayMessage("error", $error_message);
2313     $this->addToLog("triggermodifierapres() : evenement retour ".
2314     "instruction ".$this->valF[$this->clePrimaire]." : ".
2315     $new_instruction->msg);
2316     }
2317     //Si une erreur s'est produite après le test de la restriction
2318     elseif ($retour == false && $new_instruction->restriction_valid){
2319     $this->correct = false ;
2320     $this->msg .= $new_instruction->msg;
2321     return false;
2322     }
2323     }
2324     // Si la date de retour AR est éditée on vérifie si il existe un événement automatique
2325     if ($this->getVal('date_retour_rar') == "" AND
2326     $this->valF['date_retour_rar'] != "") {
2327    
2328     if($row['evenement_retour_ar'] != "") {
2329 softime 7996 $new_instruction = $this->f->get_inst__om_dbform(array(
2330     "obj" => "instruction",
2331     "idx" => "]",
2332     ));
2333 mbroquet 3730 // Création d'un tableau avec la liste des champs de l'instruction
2334     foreach($new_instruction->champs as $champ) {
2335     $valNewInstr[$champ] = "";
2336     }
2337     // Définition des valeurs de la nouvelle instruction
2338     $valNewInstr["evenement"] = $row['evenement_retour_ar'];
2339     $valNewInstr["destinataire"] = $this->valF['destinataire'];
2340     $valNewInstr["dossier"] = $this->valF['dossier'];
2341     $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_rar']);
2342     $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
2343     $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
2344     $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
2345     $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
2346     $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
2347     $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
2348 nmeucci 3965 $new_instruction->setParameter("maj", 0);
2349     $new_instruction->class_actions[0]["identifier"] =
2350     "retour RAR de l'instruction $current_id";
2351 mbroquet 3730 $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
2352    
2353     //Si une erreur s'est produite et qu'il s'agit d'un problème
2354     //de restriction
2355     if ($retour == false && !$new_instruction->restriction_valid) {
2356     $error_message = $this->get_restriction_error_message($restriction);
2357     $this->f->displayMessage("error", $error_message);
2358     $this->addToLog(
2359     "triggermodifierapres() : evenement retour instruction ".
2360     $this->valF[$this->clePrimaire]." : ".
2361     $new_instruction->msg
2362     );
2363     }
2364     //Si une erreur s'est produite après le test de la restriction
2365     elseif ($retour == false && $new_instruction->restriction_valid){
2366     $this->correct = false ;
2367     $this->msg .= $new_instruction->msg;
2368     return false;
2369     }
2370     }
2371     // Mise à jour du flag incomplet_notifie dans dossier si la
2372     // date limite d'instruction n'est pas dépassée
2373     if($row['type']=='incompletude' &&
2374     ($this->valF['archive_date_notification_delai'] >= $this->valF['date_retour_rar'] ||
2375     $this->valF['archive_date_notification_delai'] == "")) {
2376     $valFIncomp['incomplet_notifie'] = true;
2377     $cle = " dossier='".$val['dossier']."'";
2378     $resIncomp = $db->autoExecute(
2379     DB_PREFIXE.'dossier',
2380     $valFIncomp,
2381     DB_AUTOQUERY_UPDATE,
2382     $cle
2383     );
2384     $this->addToLog(
2385     "triggersupprimer(): db->autoexecute(\"".
2386     DB_PREFIXE."dossier\", ".print_r($valFIncomp, true).
2387     ", DB_AUTOQUERY_UPDATE, \"".$cle."\");",
2388     VERBOSE_MODE
2389     );
2390     if (database::isError($resIncomp)) {
2391     die($resIncomp->getMessage());
2392     }
2393     }
2394     }
2395     }
2396     }
2397    
2398     // Mise à jour des données du dossier d'autorisation
2399 softime 7996 $da = $this->f->get_inst__om_dbform(array(
2400     "obj" => "dossier_autorisation",
2401     "idx" => $this->getNumDemandeAutorFromDossier($this->valF['dossier']),
2402     ));
2403 mbroquet 3730 if($da->majDossierAutorisation() === false) {
2404     $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
2405     $this->correct = false;
2406     return false;
2407     }
2408 softime 7996
2409     /**
2410     * Mise à jour de la date de dernière modification du dossier
2411     * d'instruction
2412     */
2413     $inst_di = $this->get_inst_dossier($this->getVal('dossier'));
2414     $inst_di->update_last_modification_date();
2415    
2416 nmeucci 3933 return $this->add_log_to_dossier($id, $val);
2417 fmichon 4708 }
2418 mbroquet 3730
2419 softime 6929 function triggersupprimer($id, &$db = null, $val = array(), $DEBUG = null) {
2420 mbroquet 3730 /**
2421     * L'objectif ici est de repositionner les valeurs récupérées en
2422     * archive dans le dossier d'instruction avant de supprimer l'événement
2423     * d'instruction
2424     */
2425    
2426 softime 5024 // Mise à jour des 4 valeurs modifiées par l'action
2427     $valF['delai'] = $val['archive_delai'];
2428     $valF['accord_tacite'] = $val['archive_accord_tacite'];
2429     $valF['etat'] = $val['archive_etat'];
2430     if ($val['archive_avis'] != '') {
2431     $valF['avis_decision'] = $val['archive_avis'];
2432     } else {
2433 softime 6565 $valF['avis_decision'] = null;
2434 softime 5024 }
2435 softime 6565 // Mise à jour des dates avec la valeur présente dans le formulaire
2436 softime 5024 // de suppression. Si la valeur de la date est vide alors on fixe
2437 softime 6565 // à la valeur null
2438 softime 5024 if ($val['archive_date_complet'] != '') {
2439     $valF['date_complet'] = $val['archive_date_complet'];
2440     } else {
2441 softime 6565 $valF['date_complet'] = null;
2442 softime 5024 }
2443     if ($val['archive_date_dernier_depot'] != '') {
2444     $valF['date_dernier_depot'] = $val['archive_date_dernier_depot'];
2445     } else {
2446 softime 6565 $valF['date_dernier_depot'] = null;
2447 softime 5024 }
2448     if ($val['archive_date_rejet'] != '') {
2449     $valF['date_rejet'] = $val['archive_date_rejet'];
2450     } else {
2451 softime 6565 $valF['date_rejet'] = null;
2452 softime 5024 }
2453     if ($val['archive_date_limite'] != '') {
2454     $valF['date_limite'] = $val['archive_date_limite'];
2455     } else {
2456 softime 6565 $valF['date_limite'] = null;
2457 softime 5024 }
2458     if ($val['archive_date_notification_delai'] != '') {
2459     $valF['date_notification_delai'] = $val['archive_date_notification_delai'];
2460     } else {
2461 softime 6565 $valF['date_notification_delai'] = null;
2462 softime 5024 }
2463     if ($val['archive_date_decision'] != '') {
2464     $valF['date_decision'] = $val['archive_date_decision'];
2465     } else {
2466 softime 6565 $valF['date_decision'] = null;
2467 softime 5024 }
2468     if ($val['archive_date_validite'] != '') {
2469     $valF['date_validite'] = $val['archive_date_validite'];
2470     } else {
2471 softime 6565 $valF['date_validite'] = null;
2472 softime 5024 }
2473     if ($val['archive_date_achevement'] != '') {
2474     $valF['date_achevement'] = $val['archive_date_achevement'];
2475     } else {
2476 softime 6565 $valF['date_achevement'] = null;
2477 softime 5024 }
2478     if ($val['archive_date_chantier'] != '') {
2479     $valF['date_chantier'] = $val['archive_date_chantier'];
2480     } else {
2481 softime 6565 $valF['date_chantier'] = null;
2482 softime 5024 }
2483     if ($val['archive_date_conformite'] != '') {
2484     $valF['date_conformite'] = $val['archive_date_conformite'];
2485     } else {
2486 softime 6565 $valF['date_conformite'] = null;
2487 softime 5024 }
2488     if ($val['archive_incompletude'] != '') {
2489     $valF['incompletude'] = $val['archive_incompletude'];
2490     } else {
2491 softime 6565 $valF['incompletude'] = null;
2492 softime 5024 }
2493     if ($val['archive_incomplet_notifie'] != '') {
2494     $valF['incomplet_notifie'] = $val['archive_incomplet_notifie'];
2495     } else {
2496 softime 6565 $valF['incomplet_notifie'] = null;
2497 softime 5024 }
2498     if ($val['archive_evenement_suivant_tacite'] != '') {
2499     $valF['evenement_suivant_tacite'] = $val['archive_evenement_suivant_tacite'];
2500     } else {
2501 softime 6565 $valF['evenement_suivant_tacite'] = null;
2502 softime 5024 }
2503     if ($val['archive_evenement_suivant_tacite_incompletude'] != '') {
2504     $valF['evenement_suivant_tacite_incompletude'] = $val['archive_evenement_suivant_tacite_incompletude'];
2505     } else {
2506 softime 6565 $valF['evenement_suivant_tacite_incompletude'] = null;
2507 softime 5024 }
2508     if ($val['archive_etat_pendant_incompletude'] != '') {
2509     $valF['etat_pendant_incompletude'] = $val['archive_etat_pendant_incompletude'];
2510     } else {
2511 softime 6565 $valF['etat_pendant_incompletude'] = null;
2512 softime 5024 }
2513     if ($val['archive_date_limite_incompletude'] != '') {
2514     $valF['date_limite_incompletude'] = $val['archive_date_limite_incompletude'];
2515     } else {
2516 softime 6565 $valF['date_limite_incompletude'] = null;
2517 softime 5024 }
2518     if ($val['archive_delai_incompletude'] != '') {
2519     $valF['delai_incompletude'] = $val['archive_delai_incompletude'];
2520     } else {
2521 softime 6565 $valF['delai_incompletude'] = null;
2522 softime 5024 }
2523     if ($val['archive_autorite_competente'] != '') {
2524     $valF['autorite_competente'] = $val['archive_autorite_competente'];
2525     } else {
2526 softime 6565 $valF['autorite_competente'] = null;
2527 softime 5024 }
2528 softime 6565 $valF['date_cloture_instruction'] = null;
2529     if ($val['archive_date_cloture_instruction'] !== '') {
2530     $valF['date_cloture_instruction'] = $val['archive_date_cloture_instruction'];
2531     }
2532     // Dates concernant les dossiers contentieux
2533     // Date de première visite
2534     $valF['date_premiere_visite'] = null;
2535     if ($val['archive_date_premiere_visite'] !== '') {
2536     $valF['date_premiere_visite'] = $val['archive_date_premiere_visite'];
2537     }
2538     // Date de dernière visite
2539     $valF['date_derniere_visite'] = null;
2540     if ($val['archive_date_derniere_visite'] !== '') {
2541     $valF['date_derniere_visite'] = $val['archive_date_derniere_visite'];
2542     }
2543     // Date contradictoire
2544     $valF['date_contradictoire'] = null;
2545     if ($val['archive_date_contradictoire'] !== '') {
2546     $valF['date_contradictoire'] = $val['archive_date_contradictoire'];
2547     }
2548     // Date de retour contradictoire
2549     $valF['date_retour_contradictoire'] = null;
2550     if ($val['archive_date_retour_contradictoire'] !== '') {
2551     $valF['date_retour_contradictoire'] = $val['archive_date_retour_contradictoire'];
2552     }
2553     // Date de l'AIT
2554     $valF['date_ait'] = null;
2555     if ($val['archive_date_ait'] !== '') {
2556     $valF['date_ait'] = $val['archive_date_ait'];
2557     }
2558     // Date de transmission au parquet
2559     $valF['date_transmission_parquet'] = null;
2560     if ($val['archive_date_transmission_parquet'] !== '') {
2561     $valF['date_transmission_parquet'] = $val['archive_date_transmission_parquet'];
2562     }
2563 softime 8593 // Type du dossier d'instruction
2564     if ($val['archive_dossier_instruction_type'] !== '' && $val['archive_dossier_instruction_type'] !== null) {
2565     $valF['dossier_instruction_type'] = $val['archive_dossier_instruction_type'];
2566     }
2567 softime 6565
2568 softime 5024 // On met à jour le dossier
2569     $cle = " dossier='".$val['dossier']."'";
2570     $res = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
2571     $this->addToLog("triggersupprimer(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
2572     if (database::isError($res)) {
2573     die($res->getMessage());
2574     }
2575     // Affichage d'informations à l'utilisateur
2576     $this->addToMessage(_("Suppression de l'instruction")." [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
2577    
2578     // Mise à jour de la demande si un récépissé d'instruction correspond à l'instruction à supprimer
2579 mbroquet 3730 }
2580    
2581 softime 6929 function triggersupprimerapres($id, &$db = null, $val = array(), $DEBUG = null) {
2582 mbroquet 3730 // Mise à jour des données du dossier d'autorisation
2583 softime 7996 $da = $this->f->get_inst__om_dbform(array(
2584     "obj" => "dossier_autorisation",
2585     "idx" => $this->getNumDemandeAutorFromDossier($val["dossier"]),
2586     ));
2587 mbroquet 3730 if($da->majDossierAutorisation() === false) {
2588     $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
2589     $this->correct = false;
2590     return false;
2591     }
2592 nmeucci 3963 $val['evenement'] = $this->getVal('evenement');
2593 softime 7996
2594     /**
2595     * Mise à jour de la date de dernière modification du dossier
2596     * d'instruction
2597     */
2598     $inst_di = $this->get_inst_dossier($this->getVal('dossier'));
2599     $inst_di->update_last_modification_date();
2600    
2601     //
2602 nmeucci 3933 return $this->add_log_to_dossier($id, $val);
2603 mbroquet 3730 }
2604    
2605     /**
2606     * Permet de composer un message d'erreur sur restriction non valide en
2607     * fonction du contexte.
2608     *
2609     * @param string $restriction formule de la restriction
2610     *
2611     * @return string message d'erreur
2612     */
2613     function get_restriction_error_message($restriction) {
2614     // Affichage du message si la restriction s'applique
2615     // Contexte du suivi des dates (message simple)
2616     $message_restrict = _("Probleme de dates :");
2617     // Split restriction
2618     $champs_restrict = preg_split(
2619     '/(\W+)/',
2620     $restriction,
2621     null,
2622     PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE
2623     );
2624     $formated_restrict = "";
2625     // Ajout des chaînes à traduire
2626     foreach ($champs_restrict as $value) {
2627     $formated_restrict .= _($value)." ";
2628     }
2629     $formated_restrict = substr($formated_restrict, 0, -1);
2630     // Message d'erreur dans le contexte du suivi des dates
2631     if($this->getParameter("maj") == 170) {
2632     $message_restrict .= " "._("contactez l'instructeur du dossier");
2633     $message_restrict .= "<br/>(".$formated_restrict.")";
2634     } else {
2635     // Affichage du message si la restriction s'applique
2636     // Contexte instruction
2637     $message_restrict .= "<br/>".$formated_restrict;
2638     }
2639    
2640     return $message_restrict;
2641     }
2642    
2643     /**
2644     * Vérifie la restriction sur l'événement.
2645     *
2646     * @param array $val valeurs du formulaire
2647     * @param database $db handler database
2648     * @param boolean $DEBUG NA
2649     *
2650     * @return [type] [description]
2651     */
2652 softime 6929 function verifier($val = array(), &$db = null, $DEBUG = null) {
2653 mbroquet 3730 parent::verifier($val, $db, $DEBUG);
2654    
2655     if ( isset($val['evenement']) && is_numeric($val['evenement'])){
2656     $restriction = $this->get_restriction($val['evenement']);
2657    
2658     //Test qu'une restriction est présente
2659     if ($restriction != "" ){
2660    
2661     //Test si la restriction est valide
2662     $this->restriction_valid = $this->restrictionIsValid($restriction);
2663     if ( !$this->restriction_valid ){
2664    
2665     // Affichage du message si la restriction s'applique
2666     $this->addToMessage(
2667     $this->get_restriction_error_message($restriction)
2668     );
2669     $this->correct=false;
2670     return false;
2671     }
2672    
2673     // Liste des opérateurs possible
2674 nmeucci 3873 $operateurs = array(">=", "<=", "+", "-", "&&", "||", "==", "!=");
2675 mbroquet 3730 // Supprime tous les espaces de la chaîne de caractère
2676     $restriction = str_replace(' ', '', $restriction);
2677    
2678     // Met des espace avant et après les opérateurs puis transforme la
2679     // chaine en un tableau
2680     $tabRestriction = str_replace($operateurs, " ", $restriction);
2681     // Tableau des champ
2682     $tabRestriction = explode(" ", $tabRestriction);
2683     // Supprime les numériques du tableau
2684     foreach ($tabRestriction as $key => $value) {
2685     if (is_numeric($value)) {
2686     unset($tabRestriction[$key]);
2687     }
2688     }
2689    
2690     // Vérifie les champs utilisés pour la restriction
2691     $check_field_exist = $this->f->check_field_exist($tabRestriction, 'instruction');
2692     if ($check_field_exist !== true) {
2693    
2694     // Liste des champs en erreur
2695     $string_error_fields = implode(", ", $check_field_exist);
2696    
2697     // Message d'erreur
2698     $error_message = _("Le champ %s n'est pas utilisable pour le champ %s");
2699     if (count($check_field_exist) > 1) {
2700     $error_message = _("Les champs %s ne sont pas utilisable pour le champ %s");
2701     }
2702    
2703     // Affiche l'erreur
2704     $this->correct=false;
2705     $this->addToMessage(sprintf($error_message, $string_error_fields, _("restriction")));
2706     $this->addToMessage(_("Veuillez contacter votre administrateur."));
2707     }
2708     }
2709    
2710     }
2711     if(!$this->updateDate("date_envoi_signature")) {
2712     return false;
2713     }
2714     if(!$this->updateDate("date_retour_signature")) {
2715     return false;
2716     }
2717     if(!$this->updateDate("date_envoi_rar")) {
2718     return false;
2719     }
2720     if(!$this->updateDate("date_retour_rar")) {
2721     return false;
2722     }
2723     if(!$this->updateDate("date_envoi_controle_legalite")) {
2724     return false;
2725     }
2726     if(!$this->updateDate("date_retour_controle_legalite")) {
2727     return false;
2728     }
2729    
2730     }
2731    
2732     /**
2733     * Finalisation des documents.
2734     * @param string $champ champ du fichier à finaliser
2735     * @param booleen $status permet de définir si on finalise ou définalise
2736     * @param string $sousform permet de savoir si se trouve dans un sousformulaire (passé au javascript)
2737     */
2738     function manage_finalizing($mode = null, $val = array()) {
2739 softime 5024 //
2740     $this->begin_treatment(__METHOD__);
2741 mbroquet 3730
2742 softime 5024 //
2743     $id_inst = $this->getVal($this->clePrimaire);
2744 mbroquet 3730
2745 softime 5024 //
2746     $admin_msg_error = _("Veuillez contacter votre administrateur.");
2747     $file_msg_error = _("Erreur de traitement de fichier.")
2748     ." ".$admin_msg_error;
2749     $bdd_msg_error = _("Erreur de base de données.")
2750     ." ".$admin_msg_error;
2751 softime 5169 $log_msg_error = "Finalisation non enregistrée - id instruction = %s - uid fichier = %s";
2752 mbroquet 3730
2753     // Si on finalise le document
2754     if ($mode == "finalize"){
2755 softime 5024 //
2756     $etat = _('finalisation');
2757 mbroquet 3730
2758     // Récupère la collectivite du dossier d'instruction
2759     $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
2760    
2761     //
2762     $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
2763 softime 8593
2764     //
2765     $params = array(
2766     "specific" => array(),
2767     );
2768     // Si la rédaction libre est activée sur l'instruction
2769     if ($this->getVal("flag_edition_integrale") == 't') {
2770     $params["specific"]["corps"] = array(
2771     "mode" => "set",
2772     "value" => $this->getVal("corps_om_htmletatex"),
2773     );
2774     $params["specific"]["titre"] = array(
2775     "mode" => "set",
2776     "value" => $this->getVal("titre_om_htmletat"),
2777     );
2778     }
2779 mbroquet 3730 // Génération du PDF
2780 softime 8593 $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'), $collectivite, null, $params);
2781 mbroquet 3730 $pdf_output = $result['pdf_output'];
2782    
2783     //Métadonnées du document
2784     $metadata = array(
2785 softime 5024 'filename' => 'instruction_'.$id_inst.'.pdf',
2786 mbroquet 3730 'mimetype' => 'application/pdf',
2787     'size' => strlen($pdf_output)
2788     );
2789    
2790     // Récupération des métadonnées calculées après validation
2791     $spe_metadata = $this->getMetadata("om_fichier_instruction");
2792    
2793     //On vérifie si l'instruction à finaliser a un événement de type arrete
2794     $sql = "SELECT type
2795     FROM ".DB_PREFIXE."evenement
2796     WHERE evenement = ".$this->getVal("evenement");
2797     $typeEvenement = $this->db->getOne($sql);
2798     $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2799 softime 5024 if ($this->f->isDatabaseError($typeEvenement, true) === true) {
2800     $this->correct = false;
2801     $this->addToMessage($bdd_msg_error);
2802     return $this->end_treatment(__METHOD__, false);
2803 mbroquet 3730 }
2804    
2805     //Initialisation de la variable
2806     $arrete_metadata = array();
2807     // Si l'événement est de type arrete, on ajoute les métadonnées spécifiques
2808     if ( $typeEvenement === 'arrete' ){
2809     $arrete_metadata = $this->getMetadata("arrete");
2810     }
2811    
2812     $metadata = array_merge($metadata, $spe_metadata, $arrete_metadata);
2813    
2814 softime 5024 // Si le document a déjà été finalisé on le met à jour
2815     // en conservant son UID
2816 mbroquet 3730 if ($this->getVal("om_fichier_instruction") != ''){
2817     $uid = $this->f->storage->update(
2818     $this->getVal("om_fichier_instruction"), $pdf_output, $metadata);
2819     }
2820 softime 5024 // Sinon on crée un nouveau document et dont on récupère l'UID
2821 mbroquet 3730 else {
2822     $uid = $this->f->storage->create($pdf_output, $metadata);
2823     }
2824     }
2825    
2826 softime 5024 // Si on définalise le document
2827 mbroquet 3730 if ($mode == "unfinalize") {
2828 softime 5024 //
2829     $etat = _('définalisation');
2830 mbroquet 3730 // Récupération de l'uid du document finalisé
2831     $uid = $this->getVal("om_fichier_instruction");
2832     }
2833 softime 5024
2834     // Si on définalise l'UID doit être défini
2835     // Si on finalise la création/modification du fichier doit avoir réussi
2836 mbroquet 3730 if ($uid == '' || $uid == 'OP_FAILURE' ) {
2837 softime 5024 $this->correct = false;
2838     $this->addToMessage($file_msg_error);
2839     $this->addToLog(sprintf($log_msg_error, $id_inst, $uid));
2840     return $this->end_treatment(__METHOD__, false);
2841 mbroquet 3730 }
2842    
2843     //
2844     foreach ($this->champs as $key => $champ) {
2845     //
2846     $val[$champ] = $this->val[$key];
2847     }
2848    
2849     //
2850 softime 6565 $val['date_evenement'] = $this->dateDBToForm($val['date_evenement']);
2851     $val['archive_date_complet'] = $this->dateDBToForm($val['archive_date_complet']);
2852     $val['archive_date_rejet'] = $this->dateDBToForm($val['archive_date_rejet']);
2853     $val['archive_date_limite'] = $this->dateDBToForm($val['archive_date_limite']);
2854     $val['archive_date_notification_delai'] = $this->dateDBToForm($val['archive_date_notification_delai']);
2855     $val['archive_date_decision'] = $this->dateDBToForm($val['archive_date_decision']);
2856     $val['archive_date_validite'] = $this->dateDBToForm($val['archive_date_validite']);
2857     $val['archive_date_achevement'] = $this->dateDBToForm($val['archive_date_achevement']);
2858     $val['archive_date_chantier'] = $this->dateDBToForm($val['archive_date_chantier']);
2859     $val['archive_date_conformite'] = $this->dateDBToForm($val['archive_date_conformite']);
2860     $val['archive_date_dernier_depot'] = $this->dateDBToForm($val['archive_date_dernier_depot']);
2861     $val['archive_date_limite_incompletude'] = $this->dateDBToForm($val['archive_date_limite_incompletude']);
2862     $val['date_finalisation_courrier'] = $this->dateDBToForm($val['date_finalisation_courrier']);
2863     $val['date_envoi_signature'] = $this->dateDBToForm($val['date_envoi_signature']);
2864     $val['date_retour_signature'] = $this->dateDBToForm($val['date_retour_signature']);
2865     $val['date_envoi_rar'] = $this->dateDBToForm($val['date_envoi_rar']);
2866     $val['date_retour_rar'] = $this->dateDBToForm($val['date_retour_rar']);
2867     $val['date_envoi_controle_legalite'] = $this->dateDBToForm($val['date_envoi_controle_legalite']);
2868     $val['date_retour_controle_legalite'] = $this->dateDBToForm($val['date_retour_controle_legalite']);
2869     $val['archive_date_cloture_instruction'] = $this->dateDBToForm($val['archive_date_cloture_instruction']);
2870     $val['archive_date_premiere_visite'] = $this->dateDBToForm($val['archive_date_premiere_visite']);
2871     $val['archive_date_derniere_visite'] = $this->dateDBToForm($val['archive_date_derniere_visite']);
2872     $val['archive_date_contradictoire'] = $this->dateDBToForm($val['archive_date_contradictoire']);
2873     $val['archive_date_retour_contradictoire'] = $this->dateDBToForm($val['archive_date_retour_contradictoire']);
2874     $val['archive_date_ait'] = $this->dateDBToForm($val['archive_date_ait']);
2875     $val['archive_date_transmission_parquet'] = $this->dateDBToForm($val['archive_date_transmission_parquet']);
2876 mbroquet 3730 $this->setvalF($val);
2877    
2878     // Verification de la validite des donnees
2879     $this->verifier($this->val, $this->db, DEBUG);
2880     // Si les verifications precedentes sont correctes, on procede a
2881     // la modification, sinon on ne fait rien et on retourne une erreur
2882 softime 5024 if ($this->correct === true) {
2883 mbroquet 3730 //
2884     $valF = array(
2885     "om_fichier_instruction" => $uid,
2886     "date_finalisation_courrier" => date('Y-m-d')
2887     );
2888     //
2889     if($mode=="finalize") {
2890     // état finalisé vrai
2891 softime 5024 $valF["om_final_instruction"] = true;
2892 mbroquet 3730 // ajout log utilisateur
2893     $login = $_SESSION['login'];
2894     $nom = "";
2895     $this->f->getUserInfos();
2896     if (isset($this->f->om_utilisateur["nom"])
2897     && !empty($this->f->om_utilisateur["nom"])) {
2898     $nom = $this->f->om_utilisateur["nom"];
2899     }
2900     $valF["om_final_instruction_utilisateur"] = $_SESSION['login'];
2901     if ($nom != "") {
2902     $valF["om_final_instruction_utilisateur"] .= " (".$nom.")";
2903     }
2904     } else {
2905     // état finalisé faux
2906 softime 5024 $valF["om_final_instruction"] = false;
2907 mbroquet 3730 // suppression log utilisateur
2908     $valF["om_final_instruction_utilisateur"] = '';
2909     }
2910    
2911     // Execution de la requête de modification des donnees de l'attribut
2912     // valF de l'objet dans l'attribut table de l'objet
2913     $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF,
2914 softime 5024 DB_AUTOQUERY_UPDATE, $this->getCle($id_inst));
2915     $this->addToLog(__METHOD__."() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id_inst)."\")", VERBOSE_MODE);
2916     //
2917     if ($this->f->isDatabaseError($res, true) === true) {
2918     $this->correct = false;
2919     $this->addToMessage($bdd_msg_error);
2920     return $this->end_treatment(__METHOD__, false);
2921     }
2922 mbroquet 3730
2923 softime 5024 //
2924     $this->addToMessage(sprintf(_("La %s du document s'est effectuee avec succes."), $etat));
2925     //
2926     if ($this->add_log_to_dossier($id_inst, $val) === false) {
2927     return $this->end_treatment(__METHOD__, false);
2928     }
2929     //
2930     return $this->end_treatment(__METHOD__, true);
2931 mbroquet 3730 }
2932 softime 5024 // L'appel de verifier() a déjà positionné correct à false
2933     // et défini un message d'erreur.
2934     $this->addToLog(sprintf($log_msg_error, $id_inst, $uid));
2935     return $this->end_treatment(__METHOD__, false);
2936 mbroquet 3730 }
2937    
2938     /**
2939     * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
2940     * @return string numéro de dossier d'instruction
2941     */
2942     protected function getDossier() {
2943     if(empty($this->specificMetadata)) {
2944     $this->getSpecificMetadata();
2945     }
2946     return $this->specificMetadata->dossier;
2947     }
2948     /**
2949     * Récupération la version du dossier d'instruction à ajouter aux métadonnées
2950     * @return int Version
2951     */
2952     protected function getDossierVersion() {
2953     if(empty($this->specificMetadata)) {
2954     $this->getSpecificMetadata();
2955     }
2956     return $this->specificMetadata->version;
2957     }
2958     /**
2959     * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
2960     * @return string numéro de dossier d'autorisation
2961     */
2962     protected function getNumDemandeAutor() {
2963     if(empty($this->specificMetadata)) {
2964     $this->getSpecificMetadata();
2965     }
2966     return $this->specificMetadata->dossier_autorisation;
2967     }
2968     /**
2969     * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
2970     * @return date de la demande initiale
2971     */
2972     protected function getAnneemoisDemandeAutor() {
2973     if(empty($this->specificMetadata)) {
2974     $this->getSpecificMetadata();
2975     }
2976     return $this->specificMetadata->date_demande_initiale;
2977     }
2978     /**
2979     * Récupération du type de dossier d'instruction à ajouter aux métadonnées
2980     * @return string type du dossier d'instruction
2981     */
2982     protected function getTypeInstruction() {
2983     if(empty($this->specificMetadata)) {
2984     $this->getSpecificMetadata();
2985     }
2986     return $this->specificMetadata->dossier_instruction_type;
2987     }
2988     /**
2989     * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
2990     * @return string avis
2991     */
2992     protected function getStatutAutorisation() {
2993     if(empty($this->specificMetadata)) {
2994     $this->getSpecificMetadata();
2995     }
2996     return $this->specificMetadata->statut;
2997     }
2998     /**
2999     * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
3000     * @return string type du dossier d'autorisation
3001     */
3002     protected function getTypeAutorisation() {
3003     if(empty($this->specificMetadata)) {
3004     $this->getSpecificMetadata();
3005     }
3006     return $this->specificMetadata->dossier_autorisation_type;
3007     }
3008     /**
3009     * Récupération de la date d'ajout de document à ajouter aux métadonnées
3010     * @return date de l'évènement
3011     */
3012     protected function getDateEvenementDocument() {
3013     return date("Y-m-d");
3014     }
3015     /**
3016     * Récupération du groupe d'instruction à ajouter aux métadonnées
3017     * @return string Groupe d'instruction
3018     */
3019     protected function getGroupeInstruction() {
3020     if(empty($this->specificMetadata)) {
3021     $this->getSpecificMetadata();
3022     }
3023     return $this->specificMetadata->groupe_instruction;
3024     }
3025     /**
3026     * Récupération du libellé du type du document à ajouter aux métadonnées
3027     * @return string Groupe d'instruction
3028     */
3029     protected function getTitle() {
3030    
3031     // Récupère le champ événement
3032     if (isset($this->valF["evenement"]) AND $this->valF["evenement"] != "") {
3033     $evenement = $this->valF["evenement"];
3034     } else {
3035     $evenement = $this->getVal("evenement");
3036     }
3037    
3038     // Requête sql
3039     $sql = "SELECT libelle FROM ".DB_PREFIXE."evenement
3040     WHERE evenement=".$evenement;
3041     $evenement_libelle = $this->db->getOne($sql);
3042     $this->addToLog("getTitle(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
3043     if (database::isError($evenement_libelle)) {
3044     die();
3045     }
3046    
3047     // Retourne le libelle de l'événement
3048     return $evenement_libelle;
3049     }
3050    
3051 softime 6272
3052 mbroquet 3730 /**
3053 softime 6272 * Récupération du champ ERP du dossier d'instruction.
3054     *
3055     * @return boolean
3056     */
3057     public function get_concerne_erp() {
3058     //
3059     if(empty($this->specificMetadata)) {
3060     $this->getSpecificMetadata();
3061     }
3062     //
3063     return $this->specificMetadata->erp;
3064     }
3065    
3066    
3067     /**
3068 mbroquet 3730 * Cette méthode permet de stocker en attribut toutes les métadonnées
3069     * nécessaire à l'ajout d'un document.
3070     */
3071     public function getSpecificMetadata() {
3072     if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
3073     $dossier = $this->valF["dossier"];
3074     } else {
3075     $dossier = $this->getVal("dossier");
3076     }
3077     //Requête pour récupérer les informations essentiels sur le dossier d'instruction
3078     $sql = "SELECT dossier.dossier as dossier,
3079     dossier_autorisation.dossier_autorisation as dossier_autorisation,
3080     to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
3081     dossier_instruction_type.code as dossier_instruction_type,
3082     etat_dossier_autorisation.libelle as statut,
3083     dossier_autorisation_type.code as dossier_autorisation_type,
3084 softime 6272 groupe.code as groupe_instruction,
3085     CASE WHEN dossier.erp IS TRUE
3086     THEN 'true'
3087     ELSE 'false'
3088     END as erp
3089 mbroquet 3730 FROM ".DB_PREFIXE."dossier
3090     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
3091     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
3092     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
3093     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
3094     LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
3095     ON dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
3096     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
3097     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
3098     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
3099     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
3100     LEFT JOIN ".DB_PREFIXE."groupe
3101     ON dossier_autorisation_type.groupe = groupe.groupe
3102     WHERE dossier.dossier = '".$dossier."'";
3103     $res = $this->db->query($sql);
3104     $this->f->addToLog("getSpecificMetadata() : db->query(".$sql.")", VERBOSE_MODE);
3105     if ( database::isError($res)){
3106     die();
3107     }
3108    
3109     //Le résultat est récupéré dans un objet
3110     $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
3111    
3112     //Si il y a un résultat
3113     if ($row !== null) {
3114    
3115 fmichon 3892 // Instrance de la classe dossier
3116     $inst_dossier = $this->get_inst_dossier($dossier);
3117    
3118     // Insère l'attribut version à l'objet
3119     $row->version = $inst_dossier->get_dossier_instruction_version();
3120    
3121 mbroquet 3730 //Alors on créé l'objet dossier_instruction
3122     $this->specificMetadata = $row;
3123    
3124     }
3125     }
3126    
3127     /**
3128     * Retourne le statut du dossier d'instruction
3129     * @param string $idx Identifiant du dossier d'instruction
3130     * @return string Le statut du dossier d'instruction
3131     */
3132     function getStatutAutorisationDossier($idx){
3133    
3134     $statut = '';
3135    
3136     //Si l'identifiant du dossier d'instruction fourni est correct
3137     if ( $idx != '' ){
3138    
3139     //On récupère le statut de l'état du dossier à partir de l'identifiant du
3140     //dossier
3141     $sql = "SELECT etat.statut
3142     FROM ".DB_PREFIXE."dossier
3143     LEFT JOIN
3144     ".DB_PREFIXE."etat
3145     ON
3146     dossier.etat = etat.etat
3147     WHERE dossier ='".$idx."'";
3148     $statut = $this->db->getOne($sql);
3149     $this->f->addToLog("getStatutAutorisationDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
3150     if ( database::isError($statut)){
3151     die();
3152     }
3153     }
3154     return $statut;
3155     }
3156    
3157     /**
3158     * Récupère les données du dossier
3159     * @return array
3160     */
3161     function get_dossier_actual() {
3162    
3163     // Initialisation de la valeur de retour
3164     $return = array();
3165    
3166     // Récupération de toutes les valeurs du dossier d'instruction en cours
3167     $sql = "SELECT * FROM ".DB_PREFIXE."dossier
3168     WHERE dossier='".$this->valF['dossier']."'";
3169     $res = $this->db->query($sql);
3170     $this->addToLog("get_dossier_actual(): db->query(\"".$sql."\");", VERBOSE_MODE);
3171     $this->f->isDatabaseError($res);
3172    
3173     //
3174     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
3175    
3176     // Récupération de la valeur actuelle du délai, de l'accord tacite,
3177     // de l'état et de l'avis du dossier d'instruction
3178 softime 6565 $return['archive_delai'] = $row['delai'];
3179     $return['archive_accord_tacite'] = $row['accord_tacite'];
3180     $return['archive_etat'] = $row['etat'];
3181     $return['archive_avis'] = $row['avis_decision'];
3182     // Récupération de la valeur actuelle des dates du dossier
3183 mbroquet 3730 // d'instruction
3184 softime 6565 $return['archive_date_complet'] = $row['date_complet'];
3185     $return['archive_date_dernier_depot'] = $row['date_dernier_depot'];
3186     $return['archive_date_rejet'] = $row['date_rejet'];
3187     $return['archive_date_limite'] = $row['date_limite'];
3188     $return['archive_date_notification_delai'] = $row['date_notification_delai'];
3189     $return['archive_date_decision'] = $row['date_decision'];
3190     $return['archive_date_validite'] = $row['date_validite'];
3191     $return['archive_date_achevement'] = $row['date_achevement'];
3192     $return['archive_date_chantier'] = $row['date_chantier'];
3193     $return['archive_date_conformite'] = $row['date_conformite'];
3194     $return['archive_incompletude'] = $row['incompletude'];
3195     $return['archive_incomplet_notifie'] = $row['incomplet_notifie'];
3196     $return['archive_evenement_suivant_tacite'] = $row['evenement_suivant_tacite'];
3197     $return['archive_evenement_suivant_tacite_incompletude'] = $row['evenement_suivant_tacite_incompletude'];
3198     $return['archive_etat_pendant_incompletude'] = $row['etat_pendant_incompletude'];
3199     $return['archive_date_limite_incompletude'] = $row['date_limite_incompletude'];
3200     $return['archive_delai_incompletude'] = $row['delai_incompletude'];
3201     $return['archive_autorite_competente'] = $row['autorite_competente'];
3202 softime 8593 $return['archive_dossier_instruction_type'] = $row['dossier_instruction_type'];
3203 softime 6565 $return['duree_validite'] = $row['duree_validite'];
3204     $return['date_depot'] = $row['date_depot'];
3205     $return['archive_date_cloture_instruction'] = $row['date_cloture_instruction'];
3206     $return['archive_date_premiere_visite'] = $row['date_premiere_visite'];
3207     $return['archive_date_derniere_visite'] = $row['date_derniere_visite'];
3208     $return['archive_date_contradictoire'] = $row['date_contradictoire'];
3209     $return['archive_date_retour_contradictoire'] = $row['date_retour_contradictoire'];
3210     $return['archive_date_ait'] = $row['date_ait'];
3211     $return['archive_date_transmission_parquet'] = $row['date_transmission_parquet'];
3212 mbroquet 3730 }
3213    
3214     // Retour de la fonction
3215     return $return;
3216    
3217     }
3218    
3219     /**
3220     * Permet de vérifier qu'un événement est verrouillable
3221     * @param integer $idx Identifiant de l'instruction
3222     * @return boolean
3223     */
3224     function checkEvenementNonVerrouillable($idx) {
3225    
3226     // Initialisation du résultat
3227     $non_verrouillable = false;
3228    
3229     // Si la condition n'est pas vide
3230     if ($idx != "") {
3231    
3232     // Requête SQL
3233     $sql = "SELECT evenement.non_verrouillable
3234     FROM ".DB_PREFIXE."evenement
3235     LEFT JOIN ".DB_PREFIXE."instruction
3236     ON instruction.evenement = evenement.evenement
3237     WHERE instruction.instruction = $idx";
3238     $this->f->addToLog("checkEvenementNonVerrouillable() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
3239     $res = $this->db->getOne($sql);
3240     $this->f->isDatabaseError($res);
3241    
3242     // Si le retour de la requête est true
3243     if ($res == 't') {
3244     //
3245     $non_verrouillable = true;
3246     }
3247     }
3248    
3249     // Retourne résultat
3250     return $non_verrouillable;
3251     }
3252    
3253     /**
3254     * Mise à jour des champs archive_*
3255     * @param mixed $row La ligne de données
3256     */
3257     public function updateArchiveData($row){
3258    
3259     // Récupération de la valeur actuelle du délai, de l'accord tacite,
3260     // de l'état et de l'avis du dossier d'instruction
3261     $this->valF['archive_delai']=$row['delai'];
3262     $this->valF['archive_accord_tacite']=$row['accord_tacite'];
3263     $this->valF['archive_etat']=$row['etat'];
3264     $this->valF['archive_avis']=$row['avis_decision'];
3265     // Récupération de la valeur actuelle des 9 dates du dossier
3266     // d'instruction
3267     if ($row['date_complet'] != '') {
3268     $this->valF['archive_date_complet']=$row['date_complet'];
3269     }
3270     if ($row['date_dernier_depot'] != '') {
3271     $this->valF['archive_date_dernier_depot']=$row['date_dernier_depot'];
3272     }
3273 softime 6565 if ($row['date_rejet'] != '') {
3274 mbroquet 3730 $this->valF['archive_date_rejet']= $row['date_rejet'];
3275     }
3276 softime 6565 if ($row['date_limite'] != '') {
3277 mbroquet 3730 $this->valF['archive_date_limite']= $row['date_limite'];
3278     }
3279 softime 6565 if ($row['date_notification_delai'] != '') {
3280 mbroquet 3730 $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];
3281     }
3282 softime 6565 if ($row['date_decision'] != '') {
3283 mbroquet 3730 $this->valF['archive_date_decision']= $row['date_decision'];
3284     }
3285 softime 6565 if ($row['date_validite'] != '') {
3286 mbroquet 3730 $this->valF['archive_date_validite']= $row['date_validite'];
3287     }
3288 softime 6565 if ($row['date_achevement'] != '') {
3289 mbroquet 3730 $this->valF['archive_date_achevement']= $row['date_achevement'];
3290     }
3291 softime 6565 if ($row['date_chantier'] != '') {
3292 mbroquet 3730 $this->valF['archive_date_chantier']= $row['date_chantier'];
3293     }
3294 softime 6565 if ($row['date_conformite'] != '') {
3295 mbroquet 3730 $this->valF['archive_date_conformite']= $row['date_conformite'];
3296     }
3297 softime 6565 if ($row['incompletude'] != '') {
3298 mbroquet 3730 $this->valF['archive_incompletude']= $row['incompletude'];
3299     }
3300 softime 6565 if ($row['incomplet_notifie'] != '') {
3301 mbroquet 3730 $this->valF['archive_incomplet_notifie']= $row['incomplet_notifie'];
3302     }
3303 softime 6565 if ($row['evenement_suivant_tacite'] != '') {
3304 mbroquet 3730 $this->valF['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];
3305     }
3306 softime 6565 if ($row['evenement_suivant_tacite_incompletude'] != '') {
3307 mbroquet 3730 $this->valF['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];
3308     }
3309 softime 6565 if ($row['etat_pendant_incompletude'] != '') {
3310 mbroquet 3730 $this->valF['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];
3311     }
3312 softime 6565 if ($row['date_limite_incompletude'] != '') {
3313 mbroquet 3730 $this->valF['archive_date_limite_incompletude']= $row['date_limite_incompletude'];
3314     }
3315 softime 6565 if ($row['delai_incompletude'] != '') {
3316 mbroquet 3730 $this->valF['archive_delai_incompletude']= $row['delai_incompletude'];
3317     }
3318 softime 6565 if ($row['autorite_competente'] != '') {
3319 mbroquet 3730 $this->valF['archive_autorite_competente']= $row['autorite_competente'];
3320     }
3321 softime 6565 if ($row['duree_validite'] != '') {
3322 mbroquet 3730 $this->valF['duree_validite']= $row['duree_validite'];
3323     }
3324 softime 6565 if ($row['date_depot'] != '') {
3325 nmeucci 3873 $this->valF['date_depot']= $row['date_depot'];
3326     }
3327 softime 6565 // Dates concernant les dossiers contentieux
3328     if ($row['date_cloture_instruction'] != '') {
3329     $this->valF['archive_date_cloture_instruction']= $row['date_cloture_instruction'];
3330     }
3331     if ($row['date_premiere_visite'] != '') {
3332     $this->valF['archive_date_premiere_visite']= $row['date_premiere_visite'];
3333     }
3334     if ($row['date_derniere_visite'] != '') {
3335     $this->valF['archive_date_derniere_visite']= $row['date_derniere_visite'];
3336     }
3337     if ($row['date_contradictoire'] != '') {
3338     $this->valF['archive_date_contradictoire']= $row['date_contradictoire'];
3339     }
3340     if ($row['date_retour_contradictoire'] != '') {
3341     $this->valF['archive_date_retour_contradictoire']= $row['date_retour_contradictoire'];
3342     }
3343     if ($row['date_ait'] != '') {
3344     $this->valF['archive_date_ait']= $row['date_ait'];
3345     }
3346     if ($row['date_transmission_parquet'] != '') {
3347     $this->valF['archive_date_transmission_parquet']= $row['date_transmission_parquet'];
3348     }
3349 softime 8593 if ($row['dossier_instruction_type'] != '') {
3350     $this->valF['archive_dossier_instruction_type']= $row['dossier_instruction_type'];
3351     }
3352 mbroquet 3730 }
3353    
3354     // {{{
3355     // Méthodes de récupération des métadonnées arrêté
3356     /**
3357     * @return string Retourne le numéro d'arrêté
3358     */
3359     function getNumArrete() {
3360     return $this->getVal("numero_arrete");
3361     }
3362     /**
3363     * @return chaîne vide
3364     */
3365     function getReglementaireArrete() {
3366     return 'true';
3367     }
3368     /**
3369     * @return boolean de notification au pétitionnaire
3370     */
3371     function getNotificationArrete() {
3372     return 'true';
3373     }
3374     /**
3375     * @return date de notification au pétitionnaire
3376     */
3377     function getDateNotificationArrete() {
3378     if (empty($this->metadonneesArrete)) {
3379     $this->getArreteMetadata();
3380     }
3381     return $this->metadonneesArrete["datenotification"];
3382     }
3383     /**
3384     * @return boolean check si le document est passé au contrôle de légalité
3385     */
3386     function getControleLegalite() {
3387     return 'true';
3388     }
3389     /**
3390     * @return date de signature de l'arrêté
3391     */
3392     function getDateSignature() {
3393     if (empty($this->metadonneesArrete)) {
3394     $this->getArreteMetadata();
3395     }
3396     return $this->metadonneesArrete["datesignaturearrete"];
3397     }
3398     /**
3399     * @return string nom du signataire
3400     */
3401     function getNomSignataire() {
3402     if (empty($this->metadonneesArrete)) {
3403     $this->getArreteMetadata();
3404     }
3405     return $this->metadonneesArrete["nomsignataire"];
3406     }
3407     /**
3408     * @return string qualité du signataire
3409     */
3410     function getQualiteSignataire() {
3411     if (empty($this->metadonneesArrete)) {
3412     $this->getArreteMetadata();
3413     }
3414     return $this->metadonneesArrete["qualitesignataire"];
3415     }
3416     /**
3417     * @return string numéro du terrain
3418     */
3419     function getAp_numRue() {
3420     if (empty($this->metadonneesArrete)) {
3421     $this->getArreteMetadata();
3422     }
3423     return $this->metadonneesArrete["ap_numrue"];
3424     }
3425     /**
3426     * @return string nom de la rue du terrain
3427     */
3428     function getAp_nomDeLaVoie() {
3429     if (empty($this->metadonneesArrete)) {
3430     $this->getArreteMetadata();
3431     }
3432     return $this->metadonneesArrete["ap_nomdelavoie"];
3433     }
3434     /**
3435     * @return string code postal du terrain
3436     */
3437     function getAp_codePostal() {
3438     if (empty($this->metadonneesArrete)) {
3439     $this->getArreteMetadata();
3440     }
3441     return $this->metadonneesArrete["ap_codepostal"];
3442     }
3443     /**
3444     * @return string ville du terrain
3445     */
3446     function getAp_ville() {
3447     if (empty($this->metadonneesArrete)) {
3448     $this->getArreteMetadata();
3449     }
3450     return $this->metadonneesArrete["ap_ville"];
3451     }
3452     /**
3453     * @return string activité
3454     */
3455     function getActivite() {
3456     return "Droit du sol";
3457     }
3458     /**
3459     * @return string date du retour de controle légalité
3460     */
3461     function getDateControleLegalite() {
3462     if (empty($this->metadonneesArrete)) {
3463     $this->getArreteMetadata();
3464     }
3465     return $this->metadonneesArrete["datecontrolelegalite"];
3466     }
3467    
3468     // Fin des méthodes de récupération des métadonnées
3469     // }}}
3470    
3471     /**
3472     * Méthode de récupération des métadonnées arrêtés dans la base de données,
3473     * les données sont stockés dans l'attribut $this->metadonneesArrete
3474     */
3475     function getArreteMetadata() {
3476    
3477     //Récupération de la dernière instruction dont l'événement est de type 'arrete'
3478     $this->metadonneesArrete = array("nomsignataire"=>"", "qualitesignataire"=>"",
3479     "decisionarrete"=>"", "datenotification"=>"", "datesignaturearrete"=>"",
3480     "datecontrolelegalite"=>"", "ap_numrue"=>"", "ap_nomdelavoie"=>"",
3481     "ap_codepostal"=>"", "ap_ville"=>"");
3482    
3483     $sqlArrete = "SELECT signataire_arrete.nom as \"nomsignataire\",
3484     signataire_arrete.qualite as \"qualitesignataire\",
3485     instruction.etat as \"decisionarrete\",
3486     instruction.date_retour_rar as \"datenotification\",
3487     instruction.date_retour_signature as \"datesignaturearrete\",
3488     instruction.date_retour_controle_legalite as \"datecontrolelegalite\",
3489     dossier.terrain_adresse_voie_numero as \"ap_numrue\",
3490     dossier.terrain_adresse_voie as \"ap_nomdelavoie\",
3491     dossier.terrain_adresse_code_postal as \"ap_codepostal\",
3492     dossier.terrain_adresse_localite as \"ap_ville\"
3493     FROM ".DB_PREFIXE."instruction
3494     LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
3495     instruction.signataire_arrete = signataire_arrete.signataire_arrete
3496     LEFT JOIN ".DB_PREFIXE."dossier ON
3497     instruction.dossier = dossier.dossier
3498     LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
3499     donnees_techniques.dossier_instruction = dossier.dossier
3500     WHERE instruction.instruction = ".$this->getVal("instruction");
3501     $resArrete = $this->db->query($sqlArrete);
3502     $this->f->addToLog("getArreteMetadata(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
3503     if ( database::isError($resArrete)){
3504     die();
3505     }
3506    
3507     $this->metadonneesArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
3508     }
3509    
3510     /**
3511     * CONDITION - has_an_edition.
3512     *
3513     * Condition pour afficher le bouton de visualisation de l'édition.
3514     *
3515     * @return boolean
3516     */
3517     function has_an_edition() {
3518     // Récupère la valeur du champ lettretype
3519     $lettretype = $this->getVal("lettretype");
3520     // Si le champ est vide
3521 softime 7521 if ($lettretype !== '' && $lettretype !== null) {
3522 mbroquet 3730 //
3523 softime 7521 return true;
3524 mbroquet 3730 }
3525    
3526     //
3527 softime 7521 return false;
3528 mbroquet 3730 }
3529    
3530     /**
3531     * CONDITION - is_editable.
3532     *
3533     * Condition pour la modification.
3534     *
3535     * @return boolean
3536     */
3537     function is_editable() {
3538     // Contrôle si l'utilisateur possède un bypass
3539 softime 7996 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_modifier_bypass");
3540 mbroquet 3730 //
3541     if ($bypass == true) {
3542     //
3543     return true;
3544     }
3545 softime 6565
3546 mbroquet 3730 // Si l'utilisateur est un instructeur, que le dossier est cloturé et
3547     // que l'événement n'est pas identifié comme non verrouillable
3548     if ($this->f->isUserInstructeur()
3549     && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
3550     && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
3551     //
3552     return false;
3553     }
3554    
3555 softime 6565 // Si l'utilisateur est un intructeur qui correspond à la division du
3556     // dossier
3557     if ($this->is_instructeur_from_division_dossier() === true) {
3558     //
3559     return true;
3560     }
3561    
3562     // Si l'utilisateur est instructeur de la commune du dossier et que la
3563     // décision peut être changée par la commune.
3564     if ($this->is_instructeur_from_collectivite_dossier() === true and
3565     $this->isInstrCanChangeDecision($this->getVal('dossier')) === true) {
3566     return true;
3567     }
3568    
3569     // Si l'utilisateur est instructeur de la commune du dossier et que
3570     // l'instruction est créée par un instructeur de la commune
3571     if ($this->is_instructeur_from_collectivite_dossier() === true and
3572     $this->getVal('created_by_commune') === 't') {
3573     return true;
3574     }
3575    
3576 mbroquet 3730 //
3577 softime 6565 return false;
3578 mbroquet 3730 }
3579    
3580     /**
3581     * CONDITION - is_deletable.
3582     *
3583 softime 6864 * Condition pour la suppression.
3584 mbroquet 3730 *
3585     * @return boolean
3586     */
3587     function is_deletable() {
3588 softime 6864 // Contrôle si l'utilisateur possède un bypass intégral
3589 softime 7996 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_supprimer_bypass");
3590 mbroquet 3730 //
3591     if ($bypass == true) {
3592    
3593     //
3594     return true;
3595     }
3596    
3597     // Si l'utilisateur est un intructeur qui ne correspond pas à la
3598 softime 6864 // division du dossier et si l'utilisateur n'a pas la permission bypass
3599     // de la division
3600     if ($this->is_instructeur_from_division_dossier() === false
3601 softime 7996 && $this->f->isAccredited($this->get_absolute_class_name()."_supprimer_bypass_division") === false) {
3602 mbroquet 3730
3603     //
3604     return false;
3605     }
3606 softime 5024
3607     // l'événement est-il le dernier ?
3608     $dernier_evenement = false;
3609     // instanciation dossier
3610 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
3611     "obj" => "dossier",
3612     "idx" => $this->getVal('dossier'),
3613     ));
3614 softime 5024 // récupération dernier événement
3615     $id_dernier_evenement = $dossier->get_dernier_evenement();
3616     if ($id_dernier_evenement == $this->getVal($this->clePrimaire)) {
3617     $dernier_evenement = true;
3618     }
3619 mbroquet 3730
3620 softime 5024 // Si dossier cloturé ou si pas dernier événement
3621     // ou de type retour ou si une date est renseignée
3622     // ET utilisateur non administrateur
3623     if ($this->getStatutAutorisationDossier($this->getVal('dossier')) == 'cloture'
3624     || $dernier_evenement == false
3625     || $this->is_evenement_retour($this->getVal("evenement")) == true
3626     || $this->getVal('date_envoi_signature') != ''
3627     || $this->getVal('date_retour_signature') != ''
3628     || $this->getVal('date_envoi_rar') != ''
3629     || $this->getVal('date_retour_rar') != ''
3630     || $this->getVal('date_envoi_controle_legalite') != ''
3631     || $this->getVal('date_retour_controle_legalite') != '') {
3632     // pas le droit de supprimer
3633     return false;;
3634     }
3635    
3636 mbroquet 3730 //
3637     return true;
3638     }
3639 softime 6565
3640    
3641 mbroquet 3730 /**
3642 softime 6565 * Vérifie que l'utilisateur est instructeur et qu'il est de la division du
3643     * dossier.
3644     *
3645     * @return, boolean true/false
3646     */
3647     function is_instructeur_from_collectivite_dossier() {
3648     if ($this->f->isUserInstructeur() === true and
3649     $this->f->om_utilisateur["om_collectivite"] == $this->get_dossier_instruction_om_collectivite()) {
3650     return true;
3651     }
3652     return false;
3653     }
3654    
3655     /**
3656 mbroquet 3730 * CONDITION - is_addable.
3657     *
3658     * Condition pour afficher les boutons modifier et supprimer.
3659     *
3660     * @return boolean
3661     */
3662     function is_addable() {
3663     // Contrôle si l'utilisateur possède un bypass
3664 softime 7996 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_ajouter_bypass");
3665 mbroquet 3730 //
3666     if ($bypass == true) {
3667    
3668     //
3669     return true;
3670     }
3671 softime 6565 // Si l'utilisateur est un intructeur qui correspond à la
3672     // division du dossier ou qu'il peut changer la décision
3673     if ($this->is_instructeur_from_division_dossier() === true or
3674     $this->isInstrCanChangeDecision($this->getParameter('idxformulaire')) === true) {
3675 mbroquet 3730 //
3676 softime 6565 return true;
3677 mbroquet 3730 }
3678    
3679     //
3680 softime 6565 return false;
3681 mbroquet 3730 }
3682    
3683     /**
3684     * CONDITION - is_finalizable.
3685     *
3686     * Condition pour afficher le bouton.
3687     *
3688     * @return boolean
3689     */
3690     function is_finalizable() {
3691     // Contrôle si l'utilisateur possède un bypass
3692 softime 7996 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_finaliser_bypass");
3693 mbroquet 3730 //
3694     if ($bypass == true) {
3695     //
3696     return true;
3697     }
3698 softime 6565
3699 mbroquet 3730 // Si l'utilisateur est un instructeur, que le dossier est cloturé et
3700     // que l'événement n'est pas identifié comme non verrouillable
3701     if ($this->f->isUserInstructeur()
3702     && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
3703     && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
3704     //
3705     return false;
3706     }
3707 softime 6565
3708     // Si l'utilisateur est un intructeur qui correspond à la division du
3709     // dossier
3710     if ($this->is_instructeur_from_division_dossier() === true) {
3711     //
3712     return true;
3713     }
3714 mbroquet 3730
3715 softime 6565 // Si l'utilisateur est instructeur de la commune du dossier et que la
3716     // décision peut être changée par la commune.
3717     if ($this->is_instructeur_from_collectivite_dossier() === true and
3718     $this->isInstrCanChangeDecision($this->getVal('dossier')) === true) {
3719     return true;
3720     }
3721    
3722     // Si l'utilisateur est instructeur de la commune du dossier et que
3723     // l'instruction est créée par un instructeur de la commune
3724     if ($this->is_instructeur_from_collectivite_dossier() === true and
3725     $this->getVal('created_by_commune') === 't') {
3726     return true;
3727     }
3728    
3729 mbroquet 3730 //
3730 softime 6565 return false;
3731 mbroquet 3730 }
3732    
3733     /**
3734     * CONDITION - is_finalize_without_bypass.
3735     *
3736     * Condition pour afficher le bouton sans le bypass.
3737     *
3738     * @return boolean [description]
3739     */
3740     function is_finalizable_without_bypass() {
3741     // Récupère la valeur du champ finalisé
3742     $om_final_instruction = $this->getVal('om_final_instruction');
3743    
3744     // Si le rapport n'est pas finalisé
3745     if (empty($om_final_instruction)
3746     || $om_final_instruction == 'f') {
3747     //
3748     return true;
3749     }
3750    
3751     //
3752     return false;
3753     }
3754    
3755     /**
3756     * CONDITION - is_unfinalizable.
3757     *
3758     * Condition pour afficher le bouton.
3759     *
3760     * @return boolean
3761     */
3762     function is_unfinalizable(){
3763     // Contrôle si l'utilisateur possède un bypass
3764 softime 7996 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_definaliser_bypass");
3765 mbroquet 3730 //
3766     if ($bypass == true) {
3767     //
3768     return true;
3769     }
3770 softime 6565
3771     // Si l'utilisateur est un instructeur, que le dossier est cloturé et
3772     // que l'événement n'est pas identifié comme non verrouillable
3773 mbroquet 3730 if ($this->f->isUserInstructeur()
3774 softime 6565 && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
3775     && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
3776 mbroquet 3730 //
3777     return false;
3778     }
3779    
3780 softime 6565 // Si l'utilisateur est un intructeur qui correspond à la division du
3781     // dossier
3782     if ($this->is_instructeur_from_division_dossier() === true) {
3783     //
3784     return true;
3785 mbroquet 3730 }
3786    
3787 softime 6565 // Si l'utilisateur est instructeur de la commune du dossier et que la
3788     // décision peut être changée par la commune.
3789     if ($this->is_instructeur_from_collectivite_dossier() === true and
3790     $this->isInstrCanChangeDecision($this->getVal('dossier')) === true) {
3791     return true;
3792     }
3793 mbroquet 3730
3794 softime 6565 // Si l'utilisateur est instructeur de la commune du dossier et que
3795     // l'instruction est créée par un instructeur de la commune
3796     if ($this->is_instructeur_from_collectivite_dossier() === true and
3797     $this->getVal('created_by_commune') === 't') {
3798     return true;
3799 mbroquet 3730 }
3800    
3801     //
3802 softime 6565 return false;
3803 mbroquet 3730 }
3804    
3805     /**
3806     * CONDITION - is_unfinalizable_without_bypass.
3807     *
3808     * Condition pour afficher le bouton sans le bypass.
3809     *
3810     * @return boolean
3811     */
3812     function is_unfinalizable_without_bypass() {
3813     // Récupère la valeur du champ finalisé
3814     $om_final_instruction = $this->getVal('om_final_instruction');
3815    
3816     // Si l'instruction est finalisée
3817     if ($om_final_instruction == 't') {
3818     //
3819     return true;
3820     }
3821    
3822     //
3823     return false;
3824     }
3825    
3826 softime 5169
3827 mbroquet 3730 /**
3828 softime 6565 * Permet de définir si un instructeur commune peut editer une instruction
3829     *
3830     * @return boolean true si il peut
3831     */
3832     function isInstrCanChangeDecision($idx) {
3833    
3834     if ($this->f->isAccredited(array("instruction", "instruction_changer_decision"), "OR") !== true or
3835     $this->f->isUserInstructeur() !== true) {
3836     return false;
3837     }
3838    
3839    
3840    
3841     // Sinon on vérifie l'éligibilité du dossier au changement de décision
3842     $sql =
3843     "SELECT
3844     dossier.dossier
3845     FROM
3846     ".DB_PREFIXE."dossier
3847     JOIN ".DB_PREFIXE."instruction ON instruction.instruction = (
3848     SELECT instruction
3849     FROM ".DB_PREFIXE."instruction
3850     JOIN ".DB_PREFIXE."evenement on instruction.evenement=evenement.evenement
3851     WHERE instruction.dossier = dossier.dossier
3852     AND evenement.retour IS FALSE
3853     ORDER BY date_evenement DESC, instruction DESC
3854     LIMIT 1
3855     )
3856     JOIN ".DB_PREFIXE."evenement ON instruction.evenement=evenement.evenement
3857     JOIN ".DB_PREFIXE."instructeur ON dossier.instructeur=instructeur.instructeur
3858     JOIN ".DB_PREFIXE."om_utilisateur ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
3859     JOIN ".DB_PREFIXE."om_collectivite ON om_collectivite.om_collectivite=om_utilisateur.om_collectivite
3860     JOIN ".DB_PREFIXE."etat ON dossier.etat = etat.etat
3861     WHERE
3862    
3863     (
3864     evenement.type = 'arrete' AND
3865     (
3866     instruction.om_final_instruction IS TRUE
3867     OR instruction.created_by_commune IS TRUE
3868     ) OR
3869     evenement.type = 'changement_decision'
3870     )
3871     AND evenement.retour IS FALSE
3872     AND instruction.date_retour_signature IS NULL
3873     AND instruction.date_envoi_rar IS NULL
3874     AND instruction.date_retour_rar IS NULL
3875     AND instruction.date_envoi_controle_legalite IS NULL
3876     AND instruction.date_retour_controle_legalite IS NULL
3877     AND etat.statut = 'encours'
3878     AND dossier.dossier = '".$idx."'
3879     AND om_collectivite.niveau = '2'
3880     ";
3881    
3882    
3883     // Si collectivité de l'utilisateur niveau mono alors filtre sur celle-ci
3884     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
3885     $sql .= " AND dossier.om_collectivite=".$_SESSION['collectivite'];
3886     }
3887     $res = $this->db->getone($sql);
3888     if (database::isError($res)) {
3889     die();
3890     }
3891     // Si le dossier n'est pas sujet au changement de decision
3892     if($res == null) {
3893     return false;
3894     }
3895     return true;
3896     }
3897    
3898    
3899     /**
3900 softime 5169 * CONDITION - can_monitoring_dates.
3901     *
3902     * Condition pour afficher le bouton de suivi des dates.
3903     *
3904     * @return boolean
3905     */
3906     public function can_monitoring_dates() {
3907     // Récupère la valeur du champ finalisé
3908     $om_final_instruction = $this->getVal('om_final_instruction');
3909    
3910     // Si l'instruction n'est pas finalisée
3911     if ($om_final_instruction !== 't') {
3912     //
3913     return false;
3914     }
3915    
3916     // Contrôle si l'utilisateur possède un bypass
3917 softime 7996 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_modification_dates_bypass");
3918 softime 5169 if ($bypass === true) {
3919     return true;
3920     }
3921    
3922     // On vérifie en premier lieu que le DI n'est pas clôturé
3923     $inst_dossier = $this->get_inst_dossier();
3924     if ($inst_dossier->getStatut() === 'cloture') {
3925     //
3926     return false;
3927     }
3928     // On récupère ses infos
3929     $coll_di = $inst_dossier->getVal('om_collectivite');
3930     $div_di = $this->getDivisionFromDossier();
3931     // et celles de son éventuel instructeur
3932     $instr_di = $inst_dossier->getVal('instructeur');
3933    
3934 softime 6565 // Il faut disposer d'une entrée instructeur
3935     if ($this->f->isUserInstructeur() === false) {
3936     return false;
3937     }
3938    
3939 softime 5169 // Par défaut on prétend que l'instructeur n'est pas multi
3940     $instr_di_coll_multi = false;
3941     // Si un instructeur est affecté au dossier
3942     if ($instr_di !== '' && $instr_di !== null) {
3943     // Vérifie si l'instructeur est de la collectivité de niveau 2
3944 softime 5295 $instr_di_coll = $this->get_instructeur_om_collectivite($instr_di);
3945 softime 5169 if ($this->f->isCollectiviteMono($instr_di_coll) === false) {
3946     //
3947     $instr_di_coll_multi = true;
3948     }
3949     }
3950    
3951 softime 6565 // Il faut qu'il instruise le dossier ou soit de la même division
3952     if ($this->f->om_utilisateur['instructeur'] === $instr_di
3953     || $this->f->om_utilisateur['division'] === $div_di) {
3954 softime 5169 //
3955     return true;
3956     }
3957    
3958 softime 6565 // On donne également le droit s'il est de la même collectivité que
3959     // le dossier ET si l'instruction est déléguée à la communauté
3960     if ($this->f->isCollectiviteMono($this->f->om_utilisateur['om_collectivite']) === true
3961     && $this->f->om_utilisateur['om_collectivite'] === $coll_di
3962     && $instr_di_coll_multi === true) {
3963 softime 5169 //
3964     return true;
3965     }
3966    
3967 softime 6565 // Si l'instructeur ne rentre pas dans les deux cas précédents
3968 softime 5169 return false;
3969     }
3970    
3971    
3972     /**
3973 mbroquet 3730 * TREATMENT - finalize.
3974     *
3975     * Permet de finaliser un enregistrement.
3976     *
3977     * @param array $val valeurs soumises par le formulaire
3978     *
3979     * @return boolean
3980     */
3981     function finalize($val = array()) {
3982    
3983     // Cette méthode permet d'exécuter une routine en début des méthodes
3984     // dites de TREATMENT.
3985     $this->begin_treatment(__METHOD__);
3986    
3987     // Traitement de la finalisation
3988     $ret = $this->manage_finalizing("finalize", $val);
3989    
3990     // Si le traitement retourne une erreur
3991     if ($ret !== true) {
3992    
3993     // Termine le traitement
3994 softime 5024 return $this->end_treatment(__METHOD__, false);
3995 mbroquet 3730 }
3996    
3997     // Termine le traitement
3998     return $this->end_treatment(__METHOD__, true);
3999     }
4000    
4001     /**
4002     * TREATMENT - unfinalize.
4003     *
4004     * Permet de définaliser un enregistrement.
4005     *
4006     * @param array $val valeurs soumises par le formulaire
4007     *
4008     * @return boolean
4009     */
4010     function unfinalize($val = array()) {
4011    
4012     // Cette méthode permet d'exécuter une routine en début des méthodes
4013     // dites de TREATMENT.
4014     $this->begin_treatment(__METHOD__);
4015    
4016     // Traitement de la finalisation
4017     $ret = $this->manage_finalizing("unfinalize", $val);
4018    
4019     // Si le traitement retourne une erreur
4020     if ($ret !== true) {
4021    
4022     // Termine le traitement
4023 softime 5024 return $this->end_treatment(__METHOD__, false);
4024 mbroquet 3730 }
4025    
4026     // Termine le traitement
4027     return $this->end_treatment(__METHOD__, true);
4028     }
4029    
4030     /**
4031     * VIEW - view_edition
4032     *
4033     * Edite l'édition de l'instruction ou affiche celle contenue dans le stockage.
4034     *
4035     * @return null Si l'action est incorrecte
4036     */
4037     function view_edition() {
4038    
4039     // Si l'instruction est finalisée
4040     if($this->getVal("om_final_instruction") == 't'
4041     && $this->getVal("om_final_instruction") != null) {
4042    
4043     // Ouvre le document
4044 softime 7996 $lien = '../app/index.php?module=form&snippet=file&obj='.$this->table.'&'.
4045 mbroquet 3730 'champ=om_fichier_instruction&id='.$this->getVal($this->clePrimaire);
4046     //
4047     header("Location: ".$lien);
4048     } else {
4049    
4050     // Récupère la collectivite du dossier d'instruction
4051     $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
4052    
4053     //
4054     $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
4055    
4056     // Paramètre du PDF
4057     $params = array(
4058     "watermark" => true,
4059     "specific" => array(
4060     "mode" => "previsualisation",
4061     ),
4062     );
4063 softime 8593 // Si la rédaction libre est activée sur l'instruction
4064     if ($this->getVal("flag_edition_integrale") == 't') {
4065     $params["specific"]["corps"] = array(
4066     "mode" => "set",
4067     "value" => $this->getVal("corps_om_htmletatex"),
4068     );
4069     $params["specific"]["titre"] = array(
4070     "mode" => "set",
4071     "value" => $this->getVal("titre_om_htmletat"),
4072     );
4073     }
4074 mbroquet 3730
4075     // Génération du PDF
4076     $result = $this->compute_pdf_output('lettretype', $this->getVal("lettretype"), $collectivite, null, $params);
4077     // Affichage du PDF
4078     $this->expose_pdf_output(
4079     $result['pdf_output'],
4080     $result['filename']
4081     );
4082     }
4083     }
4084    
4085     /**
4086     * Récupère la collectivité du dossier d'instruction.
4087     *
4088 softime 7685 * @param string $dossier_instruction_id Identifiant du DI.
4089     *
4090 mbroquet 3730 * @return integer
4091     */
4092 softime 7685 function get_dossier_instruction_om_collectivite($dossier_instruction_id = null) {
4093 mbroquet 3730
4094 softime 7685 // Si l'identifiant n'est pas renseigné
4095     if ($dossier_instruction_id === null) {
4096 softime 8593 // Récupère la valeur
4097     if ($this->getVal('dossier') !== null && $this->getVal('dossier') !== '') {
4098     $dossier_instruction_id = $this->getVal('dossier');
4099     } elseif ($this->getParameter('idxformulaire') !== null
4100     && $this->getParameter('idxformulaire') !== '') {
4101     //
4102     $dossier_instruction_id = $this->getParameter('idxformulaire');
4103     } elseif ($this->f->get_submitted_get_value('idxformulaire') !== null
4104     && $this->f->get_submitted_get_value('idxformulaire') !== '') {
4105     //
4106     $dossier_instruction_id = $this->f->get_submitted_get_value('idxformulaire');
4107     }
4108 softime 7685 }
4109    
4110 mbroquet 3730 //
4111 softime 7996 $dossier_instruction = $this->f->get_inst__om_dbform(array(
4112     "obj" => "dossier_instruction",
4113     "idx" => $dossier_instruction_id,
4114     ));
4115 mbroquet 3730
4116     //
4117     return $dossier_instruction->getVal('om_collectivite');
4118     }
4119    
4120     /**
4121     * VIEW - view_bible
4122     *
4123     * Affiche la bible manuelle.
4124     *
4125     * @return void
4126     */
4127     function view_bible() {
4128     // Vérification de l'accessibilité sur l'élément
4129     $this->checkAccessibility();
4130    
4131     // XXX APP
4132    
4133     $f = $this->f;
4134    
4135     /**
4136     * Affichage de la structure HTML
4137     */
4138     //
4139     if ($f->isAjaxRequest()) {
4140     //
4141     header("Content-type: text/html; charset=".HTTPCHARSET."");
4142     } else {
4143     //
4144     $f->setFlag("htmlonly");
4145     $f->display();
4146     }
4147     //
4148     $f->displayStartContent();
4149     //
4150     $f->setTitle(_("Liste des éléments de la bible en lien avec un evenement"));
4151     $f->displayTitle();
4152    
4153     /**
4154     *
4155     */
4156     //
4157     ($f->get_submitted_get_value("ev") ? $evenement = $f->get_submitted_get_value("ev") : $evenement = "");
4158     $evenement = intval($evenement);
4159     //
4160     ($f->get_submitted_get_value("idx") ? $idx = $f->get_submitted_get_value("idx") : $idx = "");
4161 softime 5169 // Récupération du code du type de DA
4162     $code_da_type = '';
4163     if (preg_match('/[A-Za-z]{2,3}/', $idx, $matches) !== false) {
4164     $code_da_type = $matches[0];
4165     }
4166 mbroquet 3730 //
4167     ($f->get_submitted_get_value("complement") ? $complement = $f->get_submitted_get_value("complement") : $complement = "1");
4168    
4169     // Récupération de la collectivité du dossier
4170 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
4171     "obj" => "dossier",
4172     "idx" => $idx,
4173     ));
4174 mbroquet 3730
4175     /**
4176     *
4177     */
4178     //
4179     $sql = "SELECT *, bible.libelle as bible_lib
4180     FROM ".DB_PREFIXE."bible
4181     LEFT OUTER JOIN ".DB_PREFIXE."dossier_autorisation_type
4182     ON bible.dossier_autorisation_type=dossier_autorisation_type.dossier_autorisation_type
4183     LEFT JOIN ".DB_PREFIXE."om_collectivite
4184     ON bible.om_collectivite = om_collectivite.om_collectivite
4185 softime 7366 WHERE (evenement=".$evenement." OR evenement IS NULL)
4186 mbroquet 3730 AND complement=".$complement."
4187     AND (bible.dossier_autorisation_type IS NULL
4188 softime 5169 OR dossier_autorisation_type.code ='".$code_da_type."')
4189 mbroquet 3730 AND (om_collectivite.niveau = '2'
4190     OR bible.om_collectivite = ".$dossier->getVal("om_collectivite").")
4191     ORDER BY bible_lib ASC";
4192     $res = $f->db->query($sql);
4193     $f->addToLog(__METHOD__.": db->query(\"".$sql."\");", VERBOSE_MODE);
4194     $f->isDatabaseError($res);
4195     //
4196     echo "<form method=\"post\" name=\"f3\" action=\"#\">\n";
4197     //
4198     if ($res->numrows() > 0) {
4199     //
4200     echo "\t<table id='tab-bible' width='100%'>\n";
4201     //
4202     echo "\t\t<tr class=\"ui-tabs-nav ui-accordion ui-state-default tab-title\">";
4203     echo "<th>"._("Choisir")."</th>";
4204     echo "<th>"._("Libelle")."</th>";
4205     echo "</tr>\n";
4206     //
4207     $i = 0;
4208     //
4209     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
4210     //
4211     echo "\t\t<tr";
4212     echo " class=\"".($i % 2 == 0 ? "odd" : "even")."\"";
4213     echo ">";
4214     //
4215     echo "<td class=\"center\"><input type=\"checkbox\" name=\"choix[]\" value=\"".$i."\" id=\"checkbox".$i."\" /></td>";
4216     // XXX utilisation de l'attribut titre pour afficher une infobulle
4217     echo "<td><span class=\"content\" title=\"".htmlentities($row['contenu'])."\" id=\"content".$i."\">".$row['bible_lib']."</span></td>";
4218     //
4219     echo "</tr>\n";
4220     //
4221     $i++;
4222     }
4223     echo "\t</table>\n";
4224     //
4225     echo "<div class=\"formControls\">\n";
4226     $f->layout->display_form_button(array(
4227     "value" => _("Valider"),
4228     "onclick" => "bible_return('f2', 'complement".($complement == "1" ? "" : $complement)."_om_html'); return false;",
4229     ));
4230     $f->displayLinkJsCloseWindow();
4231     echo "</div>\n";
4232    
4233     } else {
4234     //
4235     $message_class = "error";
4236     $message = _("Aucun element dans la bible pour l'evenement")." : ".$evenement;
4237     $f->displayMessage($message_class, $message);
4238     //
4239     echo "<div class=\"formControls\">\n";
4240     $f->displayLinkJsCloseWindow();
4241     echo "</div>\n";
4242     }
4243     //
4244     echo "</form>\n";
4245    
4246     /**
4247     * Affichage de la structure HTML
4248     */
4249     //
4250     $f->displayEndContent();
4251     }
4252    
4253     /**
4254 softime 5169 * VIEW - view_bible_auto
4255 mbroquet 3730 *
4256 softime 5169 * Renvoie les valeurs de la bible à placer dans les compléments de l'instruction.
4257 mbroquet 3730 *
4258     * @return void
4259     */
4260     function view_bible_auto() {
4261     // Vérification de l'accessibilité sur l'élément
4262     $this->checkAccessibility();
4263    
4264     // XXX APP
4265    
4266     $f = $this->f;
4267    
4268     //
4269     $f->disableLog();
4270    
4271     $formatDate="AAAA-MM-JJ";
4272    
4273     // Récupération des paramètres
4274     $idx = $f->get_submitted_get_value('idx');
4275     $evenement = $f->get_submitted_get_value('ev');
4276    
4277     // Initialisation de la variable de retour
4278     $retour['complement_om_html'] = '';
4279     $retour['complement2_om_html'] = '';
4280     $retour['complement3_om_html'] = '';
4281     $retour['complement4_om_html'] = '';
4282     // Vérification d'une consultation liée à l'événement
4283     $consultation = $f->db->getOne(
4284     "select consultation from ".DB_PREFIXE."evenement where evenement=".$evenement
4285     );
4286     $f->isDatabaseError($consultation);
4287     // Si consultation liée, récupération du retour d'avis
4288     if($consultation=='Oui'){
4289     $sql="select date_retour,avis_consultation.libelle as avis_consultation,
4290     service.libelle as service
4291     from ".DB_PREFIXE."consultation inner join ".DB_PREFIXE."service
4292     on consultation.service =service.service
4293     left join ".DB_PREFIXE."avis_consultation on
4294     consultation.avis_consultation = avis_consultation.avis_consultation
4295     where dossier ='".$idx."'";
4296     $res = $f->db->query($sql);
4297     $f->isDatabaseError($res);
4298     // Récupération des consultations
4299     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
4300     $correct=false;
4301     // date retour
4302     if ($row['date_retour']<>""){
4303     if ($formatDate=="AAAA-MM-JJ"){
4304     $date = explode("-", $row['date_retour']);
4305     // controle de date
4306     if (count($date) == 3 and
4307     checkdate($date[1], $date[2], $date[0])) {
4308     $date_retour_f= $date[2]."/".$date[1]."/".$date[0];
4309     $correct=true;
4310     }else{
4311     $msg= $msg."<br>La date ".$row['date_retour']." n'est pas une date.";
4312     $correct=false;
4313     }
4314     }
4315     }
4316     //
4317     $temp="Vu l'avis ".$row['avis_consultation']." du service ".$row['service'];
4318     if($correct == true){
4319     $temp=$temp." du ".$date_retour_f;
4320     }
4321     // Concaténation des retours d'avis de consultation
4322 softime 7067 $retour['complement_om_html'] .= $temp . "<br/><br/>";
4323 mbroquet 3730 } // while
4324    
4325     } // consultation
4326     // Récupération des bibles automatiques pour le champ complement_om_html
4327     $retour['complement_om_html'] .= $this->getBible($f, $evenement, $idx, '1');
4328     // Récupération des bibles automatiques pour le champ complement2_om_html
4329     $retour['complement2_om_html'] .= $this->getBible($f, $evenement, $idx, '2');
4330     // Récupération des bibles automatiques pour le champ complement3_om_html
4331     $retour['complement3_om_html'] .= $this->getBible($f, $evenement, $idx, '3');
4332     // Récupération des bibles automatiques pour le champ complement4_om_html
4333     $retour['complement4_om_html'] .= $this->getBible($f, $evenement, $idx, '4');
4334    
4335    
4336    
4337     echo json_encode($retour);
4338     }
4339    
4340     /**
4341 softime 7521 * VIEW - view_pdf_temp
4342     *
4343     * @return void
4344     */
4345     function view_pdf_temp() {
4346     $this->checkAccessibility();
4347 softime 8593 // Utilisation de $_POST pour ne pas que les textes soient altérés.
4348 softime 7521 $this->f->set_submitted_value();
4349 softime 8593 $merge_fields = array();
4350     //
4351     if (array_key_exists('c1', $_POST) === true) {
4352     $merge_fields['[complement_instruction]'] = urldecode($_POST['c1']);
4353     $merge_fields['[complement1_instruction]'] = urldecode($_POST['c1']);
4354     }
4355     if (array_key_exists('c2', $_POST) === true) {
4356     $merge_fields['[complement2_instruction]'] = urldecode($_POST['c2']);
4357     }
4358     if (array_key_exists('c3', $_POST) === true) {
4359     $merge_fields['[complement3_instruction]'] = urldecode($_POST['c3']);
4360     }
4361     if (array_key_exists('c4', $_POST) === true) {
4362     $merge_fields['[complement4_instruction]'] = urldecode($_POST['c4']);
4363     }
4364 softime 7521 $params = array(
4365     "watermark" => true,
4366     "specific" => array(
4367     "merge_fields" => $merge_fields,
4368     ),
4369     );
4370 softime 8593 //
4371     if (array_key_exists('corps', $_POST) === true) {
4372     $params["specific"]["corps"] = array(
4373     "mode" => "set",
4374     "value" => urldecode($_POST['corps']),
4375     );
4376     }
4377     if (array_key_exists('titre', $_POST) === true) {
4378     $params["specific"]["titre"] = array(
4379     "mode" => "set",
4380     "value" => urldecode($_POST['titre']),
4381     );
4382     }
4383 softime 7521 $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
4384     $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
4385     $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'), $collectivite, null, $params);
4386     $retour = array(
4387     'base' => base64_encode($result['pdf_output']),
4388     );
4389     echo json_encode($retour);
4390     }
4391    
4392     /**
4393     * Dans le contexte de prévisualisation des éditions, génère le rendu du
4394     * PDF sans prise en compte de la valeur des compléments et le retourne en
4395     * base 64.
4396     *
4397     * @return string Rendu PDF converti en base 64.
4398     */
4399     function init_pdf_temp() {
4400     $params = array(
4401     "watermark" => true,
4402     );
4403 softime 8593 // Si la rédaction libre est activée sur l'instruction
4404     if ($this->getVal("flag_edition_integrale") == 't') {
4405     $params["specific"]["corps"] = array(
4406     "mode" => "set",
4407     "value" => $this->getVal("corps_om_htmletatex"),
4408     );
4409     $params["specific"]["titre"] = array(
4410     "mode" => "set",
4411     "value" => $this->getVal("titre_om_htmletat"),
4412     );
4413     }
4414 softime 7521 $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
4415     $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
4416     $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'), $collectivite, null, $params);
4417    
4418     return base64_encode($result['pdf_output']);
4419     }
4420    
4421     /**
4422 mbroquet 3730 * Récupération des éléments de bible.
4423     *
4424     * @param utils $f handler de om_application
4425     * @param integer $event id de l'événement
4426     * @param string $idx id du dossier
4427     * @param integer $compnb numéro du champ complement
4428     *
4429     * @return string Chaîne de texte à insérer dans le champ complement
4430     */
4431     function getBible($f, $event, $idx, $compnb) {
4432     // Récupération de la collectivité du dossier
4433 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
4434     "obj" => "dossier",
4435     "idx" => $idx,
4436     ));
4437 softime 5169 // Récupération du code du type de DA
4438     $code_da_type = '';
4439     if (preg_match('/[A-Za-z]{2,3}/', $idx, $matches) !== false) {
4440     $code_da_type = $matches[0];
4441     }
4442 mbroquet 3730 //
4443     $sql = "SELECT * FROM ".DB_PREFIXE."bible
4444     LEFT OUTER JOIN ".DB_PREFIXE."dossier_autorisation_type
4445     ON bible.dossier_autorisation_type=
4446     dossier_autorisation_type.dossier_autorisation_type
4447     LEFT JOIN
4448     ".DB_PREFIXE."om_collectivite
4449     ON bible.om_collectivite = om_collectivite.om_collectivite
4450 softime 7366 WHERE (evenement =".$event." or evenement IS NULL) and
4451 mbroquet 3730 complement=".$compnb." and
4452     automatique='Oui' and
4453 softime 5169 (dossier_autorisation_type.code ='".$code_da_type."' or
4454 mbroquet 3730 bible.dossier_autorisation_type IS NULL) and
4455     (om_collectivite.niveau = '2' OR bible.om_collectivite = ".$dossier->getVal("om_collectivite").")";
4456    
4457     $res = $f->db->query($sql);
4458     $f->isDatabaseError($res);
4459     $temp = "";
4460     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
4461     // Remplacement des retours à la ligne par des br
4462     $temp .= preg_replace(
4463     '#(\\\r|\\\r\\\n|\\\n)#', '<br/>', $row['contenu']
4464     );
4465 softime 7521 // Ajout d'un saut de ligne entre chaque bible.
4466     $temp .= '<br/>';
4467 mbroquet 3730 } // fin while
4468     return $temp;
4469     }
4470    
4471     /**
4472     * VIEW - view_suivi_bordereaux.
4473     *
4474 nmeucci 4317 * Formulaire de choix du bordereau de suivi, permettant de générer les 4 bordereaux.
4475     * Si l'utilisateur est d'une collectivité de niveau 2 il a le choix de la
4476     * collectivité des dossiers affichés.
4477 mbroquet 3730 *
4478     * @return void
4479     */
4480     function view_suivi_bordereaux() {
4481     // Vérification de l'accessibilité sur l'élément
4482     $this->checkAccessibility();
4483    
4484     // XXX APP
4485    
4486     $f = $this->f;
4487    
4488     /**
4489     * Validation du formulaire
4490     */
4491     // Si le formulaire a été validé
4492     if ($f->get_submitted_post_value("validation") !== null) {
4493     // Si un bordereau à été sélectionné
4494     if ($f->get_submitted_post_value("bordereau") !== null && $f->get_submitted_post_value("bordereau") == "" ) {
4495     // Si aucun bordereau n'a été sélectionné
4496     $message_class = "error";
4497     $message = _("Veuillez selectionner un bordereau.");
4498     }
4499     // Sinon si les dates ne sont pas valide
4500     elseif (($f->get_submitted_post_value("date_bordereau_debut") !== null
4501     && $f->get_submitted_post_value("date_bordereau_debut") == "")
4502     || ($f->get_submitted_post_value("date_bordereau_fin") !== null
4503     && $f->get_submitted_post_value("date_bordereau_fin") == "")) {
4504     // Si aucune date n'a été saisie
4505     $message_class = "error";
4506     $message = _("Veuillez saisir une date valide.");
4507     }
4508 softime 7366 // Sinon si les dates ne sont pas valides
4509     elseif ($f->get_submitted_post_value("bordereau") === "bordereau_avis_maire_prefet"
4510     && $f->getParameter("id_evenement_bordereau_avis_maire_prefet") == null) {
4511     // Si aucune date n'a été saisie
4512     $message_class = "error";
4513     $message = _("Erreur de parametrage. Contactez votre administrateur.");
4514     }
4515 mbroquet 3730 // Affiche le message de validation
4516     else {
4517     // On récupère le libellé du bordereau pour l'afficher à l'utilisateur
4518     $sql = "SELECT om_etat.libelle
4519     FROM ".DB_PREFIXE."om_etat
4520     WHERE om_etat.id = '".$f->get_submitted_post_value("bordereau")."'";
4521     $res = $f->db->getone($sql);
4522     $f->addToLog(__METHOD__.": db->getone(\"".$sql."\")", VERBOSE_MODE);
4523     $f->isDatabaseError($res);
4524     //
4525     $message_class = "valid";
4526     $message = _("Cliquez sur le lien ci-dessous pour telecharger votre bordereau");
4527     $message .= " : <br/><br/>";
4528     $message .= "<a class='om-prev-icon pdf-16'";
4529     $message .= " title=\""._("Bordereau")."\"";
4530 softime 7996 $message .= "href='".OM_ROUTE_FORM."&obj=instruction";
4531 nmeucci 4317 $message .= "&action=220";
4532     $message .= "&idx=0";
4533     $message .= "&type_bordereau=".$f->get_submitted_post_value("bordereau");
4534     $message .= "&date_bordereau_debut=".$f->get_submitted_post_value("date_bordereau_debut");
4535 mbroquet 3730 $message .= "&date_bordereau_fin=".$f->get_submitted_post_value("date_bordereau_fin");
4536     // Si l'utilisateur est MULTI alors on ajoute le paramètre collectivite
4537     if ($f->get_submitted_post_value("om_collectivite") !== null) {
4538     $message .= "&collectivite=".$f->get_submitted_post_value("om_collectivite");
4539     }
4540     $message .= "'"." target='_blank'>";
4541     $message .= $res." "._("du")." ".$f->get_submitted_post_value("date_bordereau_debut")
4542     ." "._("au")." ".$f->get_submitted_post_value("date_bordereau_fin");
4543     $message .= "</a>";
4544     }
4545     }
4546    
4547     /**
4548     * Affichage des messages et du formulaire
4549     */
4550     // Affichage du message de validation ou d'erreur
4551     if (isset($message) && isset($message_class) && $message != "") {
4552     $f->displayMessage($message_class, $message);
4553     }
4554     // Ouverture du formulaire
4555     printf("\t<form");
4556     printf(" method=\"post\"");
4557     printf(" id=\"suivi_bordereaux_form\"");
4558     printf(" action=\"\"");
4559     printf(">\n");
4560     // Paramétrage des champs du formulaire
4561     $champs = array("date_bordereau_debut", "date_bordereau_fin", "bordereau");
4562     // Si l'utilisateur est d'une collectivité de niveau 2 on affiche un select
4563     // collectivité dans le formulaire
4564     if($_SESSION["niveau"] == 2) {
4565     array_push($champs, "om_collectivite");
4566     }
4567     // Création d'un nouvel objet de type formulaire
4568 softime 7996 $form = $this->f->get_inst__om_formulaire(array(
4569     "validation" => 0,
4570     "maj" => 0,
4571     "champs" => $champs,
4572     ));
4573 mbroquet 3730 // Paramétrage du champ date_bordereau_debut
4574     $form->setLib("date_bordereau_debut", _("date_bordereau_debut"));
4575     $form->setType("date_bordereau_debut", "date");
4576     $form->setTaille("date_bordereau_debut", 12);
4577     $form->setMax("date_bordereau_debut", 12);
4578     $form->setRequired("date_bordereau_debut");
4579     $form->setOnchange("date_bordereau_debut", "fdate(this)");
4580     $form->setVal("date_bordereau_debut", date("d/m/Y"));
4581     // Paramétrage du champ date_bordereau_fin
4582     $form->setLib("date_bordereau_fin", _("date_bordereau_fin"));
4583     $form->setType("date_bordereau_fin", "date");
4584     $form->setTaille("date_bordereau_fin", 12);
4585     $form->setMax("date_bordereau_fin", 12);
4586     $form->setRequired("date_bordereau_fin");
4587     $form->setOnchange("date_bordereau_fin", "fdate(this)");
4588     $form->setVal("date_bordereau_fin", date("d/m/Y"));
4589     // Paramétrage du champ bordereau
4590     $form->setLib("bordereau", _("bordereau"));
4591     $form->setType("bordereau", "select");
4592     $form->setRequired("bordereau");
4593     // Valeurs des champs
4594     if ($f->get_submitted_post_value("validation") !== null) {
4595     $form->setVal("date_bordereau_debut", $f->get_submitted_post_value("date_bordereau_debut"));
4596     $form->setVal("date_bordereau_fin", $f->get_submitted_post_value("date_bordereau_fin"));
4597     $form->setVal("bordereau", $f->get_submitted_post_value("bordereau"));
4598     $form->setVal("om_collectivite", $f->get_submitted_post_value("om_collectivite"));
4599     }
4600     // Données du select - On récupère ici la liste de tous les états disponibles
4601     // dans la table om_etat qui ont un id qui commence par la cahine de caractères
4602     // 'bordereau_'
4603     $sql = "SELECT om_etat.id, om_etat.libelle
4604     FROM ".DB_PREFIXE."om_etat
4605     WHERE om_etat.id LIKE 'bordereau_%'
4606     ORDER BY om_etat.id";
4607     $res = $f->db->query($sql);
4608     $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
4609     $f->isDatabaseError($res);
4610     // Données du select
4611     $contenu = array(
4612     0 => array("", ),
4613     1 => array(_("choisir bordereau")),
4614     );
4615     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
4616     $contenu[0][] = $row['id'];
4617     $contenu[1][] = $row['libelle'];
4618     }
4619     $form->setSelect("bordereau", $contenu);
4620     //
4621     if($_SESSION["niveau"] == 2) {
4622     $form->setLib("om_collectivite", _("collectivite"));
4623     $form->setType("om_collectivite", "select");
4624    
4625     // Données du select - On récupère ici la liste de tous toutes les collectivités
4626     // de niveau 1
4627     $sql = "SELECT om_collectivite, libelle
4628     FROM ".DB_PREFIXE."om_collectivite
4629     WHERE niveau = '1' ORDER BY libelle";
4630     $res = $f->db->query($sql);
4631     $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
4632     $f->isDatabaseError($res);
4633     // La valeur par défaut du select est Toutes
4634     $list_collectivites = array(
4635     0 => array("", ),
4636     1 => array(_("toutes"))
4637     );
4638    
4639     $id_colls = "";
4640     // On stocke dans $id_colls l'id de toutes les collectivités de niveau 1 séparées
4641     // par des virgules, pour un traitement plus facile dans la requête de sous-état
4642     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
4643     if ($id_colls != "") {
4644     $id_colls .= ",";
4645     }
4646     $id_colls .= $row['om_collectivite'];
4647     $list_collectivites[0][] = $row['om_collectivite'];
4648     $list_collectivites[1][] = $row['libelle'];
4649     }
4650     // On affecte la liste d'identifiants à l'option Toutes
4651     $list_collectivites[0][0] = $id_colls ;
4652     $form->setSelect("om_collectivite", $list_collectivites);
4653     }
4654    
4655     // Affichage du formulaire
4656     $form->entete();
4657     $form->afficher($champs, 0, false, false);
4658     $form->enpied();
4659     // Affichage du bouton
4660     printf("\t<div class=\"formControls\">\n");
4661     $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
4662     printf("\t</div>\n");
4663     // Fermeture du formulaire
4664     printf("\t</form>\n");
4665    
4666     }
4667    
4668 nmeucci 4317
4669     /**
4670     * VIEW - view_generate_suivi_bordereaux.
4671     *
4672     * Génère et affiche les bordereaux de suivi.
4673     *
4674     * @return [void]
4675     */
4676     function view_generate_suivi_bordereaux() {
4677     // Vérification de l'accessibilité sur l'élément
4678     $this->checkAccessibility();
4679     // Récupération du type de bordereau
4680     $bordereau = $this->f->get_submitted_get_value('type_bordereau');
4681     // Génération du PDF
4682     $result = $this->compute_pdf_output('etat', $bordereau, null, $this->getVal($this->clePrimaire));
4683     // Affichage du PDF
4684     $this->expose_pdf_output(
4685     $result['pdf_output'],
4686     $result['filename']
4687     );
4688     }
4689    
4690    
4691 mbroquet 3730 /**
4692     * VIEW - view_suivi_envoi_lettre_rar.
4693     *
4694     * Vu pour imprimer les RAR.
4695     *
4696     * @return void
4697     */
4698     function view_suivi_envoi_lettre_rar() {
4699     // Vérification de l'accessibilité sur l'élément
4700     $this->checkAccessibility();
4701    
4702     // XXX APP
4703    
4704     $f = $this->f;
4705    
4706     //
4707     if ($f->get_submitted_post_value("date") !== null) {
4708     $date = $f->get_submitted_post_value("date");
4709     } else {
4710     $date = "";
4711     }
4712     //
4713     if ($f->get_submitted_post_value("liste_code_barres_instruction") !== null) {
4714     $liste_code_barres_instruction = $f->get_submitted_post_value("liste_code_barres_instruction");
4715     } else {
4716     $liste_code_barres_instruction = "";
4717     }
4718    
4719     // Compteur du nombre de page générées
4720     $nbLettres = 0;
4721     // Liste d'id des instructions
4722     $id4Gen = array();
4723     //
4724     $error = "";
4725    
4726 softime 5504 // Initialisation du tableau qui va contenir les DI pour lister les liens
4727     $dossierTab = array();
4728     // On vérifie que l'utilisateur ait les droits pour afficher des consultations
4729     $isAccredited = $this->f->isAccredited(array("dossier_instruction","dossier_instruction_consulter"), "OR");
4730     $hasHidden = true;
4731     // S'il ne peut pas les consulter il aura des dossiers caché
4732     if ($isAccredited === true) {
4733     $hasHidden = false;
4734     }
4735    
4736 mbroquet 3730 /**
4737     * Validation du formulaire
4738     */
4739     // Si le formulaire a été validé
4740     if ($f->get_submitted_post_value('validation') !== null) {
4741     //
4742     if (empty($date) || empty($liste_code_barres_instruction)) {
4743     //
4744     $message_class = "error";
4745     $message = _("Tous les champs doivent etre remplis.");
4746     } else {
4747     // Création d'un tableau d'instruction
4748     $liste = explode("\r\n", $f->get_submitted_post_value("liste_code_barres_instruction"));
4749     //
4750     foreach ($liste as $code_barres) {
4751     // On enlève les éventuels espaces saisis
4752     $code_barres = trim($code_barres);
4753     // Vérification de l'existence de l'instruction
4754     if ($code_barres != "") {
4755     // Si la valeur transmise est numérique
4756     if (is_numeric($code_barres)) {
4757     //
4758 softime 6565 $sql = "SELECT count(*)
4759     FROM ".DB_PREFIXE."instruction
4760     INNER JOIN ".DB_PREFIXE."dossier
4761     ON dossier.dossier=instruction.dossier
4762     INNER JOIN ".DB_PREFIXE."dossier_instruction_type
4763     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
4764     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
4765     ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
4766     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
4767     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
4768     INNER JOIN ".DB_PREFIXE."groupe
4769     ON dossier_autorisation_type.groupe = groupe.groupe
4770     WHERE code_barres='".$this->f->db->escapesimple($code_barres)."'";
4771 softime 7067
4772     // Ajout d'un filtre sur les groupes auxquels l'utilisateur a accès
4773     $group_clause = array();
4774     foreach ($_SESSION["groupe"] as $key => $value) {
4775     $group_clause[$key] = "(groupe.code = '".$key."'";
4776     if($value["confidentiel"] !== true) {
4777     $group_clause[$key] .= " AND dossier_autorisation_type.confidentiel IS NOT TRUE";
4778     }
4779     $group_clause[$key] .= ")";
4780     }
4781     $conditions = implode(" OR ", $group_clause);
4782     $sql .= " AND (" . $conditions . ")";
4783    
4784 mbroquet 3730 $nbInstr = $f->db->getone($sql);
4785     $f->addToLog(__METHOD__.": db->getone(\"".$sql."\")", VERBOSE_MODE);
4786     $f->isDatabaseError($nbInstr);
4787     //
4788     if ($nbInstr == "1") {
4789     // Récupération de la date d'envoi de l'instruction bippé
4790     $sql = "SELECT to_char(date_envoi_rar,'DD/MM/YYYY') as date_envoi_rar, instruction FROM ".DB_PREFIXE."instruction WHERE code_barres='".$code_barres."'";
4791     $res = $f->db->query($sql);
4792     $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
4793     $f->isDatabaseError($res);
4794     $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
4795     // Si pas de date ou correspond à la date du formulaire on
4796     // effectue le traitement
4797     if ($row["date_envoi_rar"] == "" || $row["date_envoi_rar"] == $date) {
4798 softime 7996 $instr = $this->f->get_inst__om_dbform(array(
4799     "obj" => "instruction",
4800     "idx" => $row['instruction'],
4801     ));
4802 mbroquet 3730 $valF = array();
4803     foreach($instr->champs as $id => $champ) {
4804     $valF[$champ] = $instr->val[$id];
4805     }
4806 softime 5504
4807     # Si on peut consulter les dossiers et que le dossier n'existe pas déjà dans la liste
4808     if ($isAccredited === true
4809     && array_key_exists($instr->getVal("dossier"), $dossierTab) === false) {
4810 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
4811     "obj" => "dossier",
4812     "idx" => $instr->getVal("dossier"),
4813     ));
4814 softime 5504 if ($dossier->is_user_from_allowed_collectivite()){
4815     $dossierTab[$instr->getVal("dossier")] = $dossier;
4816     } else {
4817     $hasHidden = true;
4818     }
4819     }
4820    
4821 mbroquet 3730 $valF['date_evenement']=
4822     $instr->dateDBToForm($valF['date_evenement']);
4823     $valF['archive_date_complet']=
4824     $instr->dateDBToForm($valF['archive_date_complet']);
4825     $valF['archive_date_rejet']=
4826     $instr->dateDBToForm($valF['archive_date_rejet']);
4827     $valF['archive_date_limite']=
4828     $instr->dateDBToForm($valF['archive_date_limite']);
4829     $valF['archive_date_notification_delai']=
4830     $instr->dateDBToForm($valF['archive_date_notification_delai']);
4831     $valF['archive_date_decision']=
4832     $instr->dateDBToForm($valF['archive_date_decision']);
4833     $valF['archive_date_validite']=
4834     $instr->dateDBToForm($valF['archive_date_validite']);
4835     $valF['archive_date_achevement']=
4836     $instr->dateDBToForm($valF['archive_date_achevement']);
4837     $valF['archive_date_chantier']=
4838     $instr->dateDBToForm($valF['archive_date_chantier']);
4839     $valF['archive_date_conformite']=
4840     $instr->dateDBToForm($valF['archive_date_conformite']);
4841     $valF['archive_date_dernier_depot']=
4842     $instr->dateDBToForm($valF['archive_date_dernier_depot']);
4843     $valF['archive_date_limite_incompletude']=
4844     $instr->dateDBToForm($valF['archive_date_limite_incompletude']);
4845     $valF['date_finalisation_courrier']=
4846     $instr->dateDBToForm($valF['date_finalisation_courrier']);
4847     $valF['date_envoi_signature']=
4848     $instr->dateDBToForm($valF['date_envoi_signature']);
4849     $valF['date_retour_signature']=
4850     $instr->dateDBToForm($valF['date_retour_signature']);
4851     $valF['date_envoi_rar']=
4852     $instr->dateDBToForm($valF['date_envoi_rar']);
4853     $valF['date_retour_rar']=
4854     $instr->dateDBToForm($valF['date_retour_rar']);
4855     $valF['date_envoi_controle_legalite']=
4856     $instr->dateDBToForm($valF['date_envoi_controle_legalite']);
4857     $valF['date_retour_controle_legalite']=
4858     $instr->dateDBToForm($valF['date_retour_controle_legalite']);
4859     $valF['date_envoi_rar'] = $date;
4860    
4861     // Vérification de la finalisation du document
4862     // correspondant au code barres
4863     if($instr->getVal("om_final_instruction") === 't') {
4864     $instr->setParameter('maj', 1);
4865 nmeucci 3971 $instr->class_actions[1]["identifier"] =
4866     "envoi lettre RAR (depuis le menu suivi des pièces)";
4867 mbroquet 3730 if ($instr->modifier($valF, $f->db, DEBUG) == true) {
4868     $id4Gen[] = $code_barres;
4869     $nbLettres ++;
4870     } else {
4871     //
4872     if ($error != "") {
4873     $error .= "<br/>";
4874     }
4875     $error .= sprintf(_("Une erreur s'est produite lors de la modification de l'instruction %s."),
4876     $code_barres);
4877     $error .= " ";
4878     $error .= _("Veuillez contacter votre administrateur.");
4879     }
4880     } else {
4881     //
4882     if ($error != "") {
4883     $error .= "<br/>";
4884     }
4885     $error .= sprintf(_("Le document correspondant au
4886     code barres %s n'est pas finalise,
4887     le bordereau ne sera pas genere."),
4888     $code_barres);
4889     }
4890    
4891     } else {
4892     //
4893     if ($error != "") {
4894     $error .= "<br/>";
4895     }
4896     $error .= _("Une lettre correspondante a l'instruction ayant pour code barres")." ".$code_barres." "._("a deja ete envoyee, le bordereau ne sera pas genere.");
4897     }
4898     } else {
4899     //
4900     if ($error != "") {
4901     $error .= "<br/>";
4902     }
4903     $error .= _("Le numero")." ".$code_barres." "._("ne correspond a aucun code barres d'instruction.");
4904     }
4905     } else {
4906     //
4907     if ($error != "") {
4908     $error .= "<br/>";
4909     }
4910     $error .= _("Le code barres d'instruction")." ".$code_barres." "._("n'est pas valide.");
4911     }
4912     }
4913     }
4914     }
4915     }
4916    
4917     /**
4918     * Affichage des messages et du formulaire
4919     */
4920     // Affichage du message de validation ou d'erreur
4921     if (isset($message) && isset($message_class) && $message != "") {
4922     $f->displayMessage($message_class, $message);
4923     }
4924     // Affichage du message d'erreur
4925     if(!empty($error)) {
4926     $f->displayMessage("error", $error);
4927     }
4928     // Affichage du message de validation de la saisie
4929     if ($nbLettres > 0) {
4930     //
4931 softime 5504 echo "\n<div class=\"message ui-widget ui-corner-all ui-state-highlight ui-state-valid\" >";
4932     echo "\n<p>";
4933     echo "\n<span class=\"ui-icon ui-icon-info\"></span>";
4934     echo "\n<span class=\"text\">";
4935     echo _("Cliquez sur le lien ci-dessous pour telecharger votre document");
4936     echo " : \n<br/><br/>";
4937     echo "\n<a class='om-prev-icon pdf-16'";
4938     echo "\n title=\""._("imprimer les RAR")."\"";
4939 softime 7996 echo "\n href=\"".OM_ROUTE_FORM."&obj=instruction&action=180&idx=0&liste=".implode(",",$id4Gen)."\"";
4940 softime 5504 echo "\n target='_blank'>";
4941     echo _("Telecharger le document pour")." ".$nbLettres." "._("RAR");
4942     echo "\n</a>";
4943     echo "\n</span>";
4944     echo "\n</p>";
4945     echo "\n<br/>\n";
4946     if ($isAccredited === true) {
4947     echo '<fieldset id="fieldset-form-rar-lien_di" class="cadre ui-corner-all startClosed" style="background-color: inherite;">';
4948     echo "\n<legend class=\"ui-corner-all ui-widget-content ui-state-active\" style=\"background-color: transparent; color: inherit;\">\n";
4949     echo _('Dossiers concernés par ce traitement');
4950     echo "\n</legend>";
4951     echo "\n<div class=\"fieldsetContent\" style=\"display: none;background-color: inherite\">";
4952    
4953     if ($hasHidden === true) {
4954     echo "\n<br/>";
4955     echo "\n<p>";
4956     echo "\n<span class='text'>";
4957     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.");
4958     echo "</span>";
4959     echo "\n</p>";
4960     echo "\n<br/>";
4961     }
4962     foreach ($dossierTab as $dossier) {
4963 softime 7067
4964     $inst_da = $this->get_inst_common("dossier_autorisation", $dossier->getVal('dossier_autorisation'));
4965     $inst_datd = $this->get_inst_common("dossier_autorisation_type_detaille", $inst_da->getVal('dossier_autorisation_type_detaille'));
4966     $code_datd = $inst_datd->getVal('code');
4967    
4968     $obj = "dossier_instruction";
4969     if ($code_datd === 'REC' OR $code_datd === 'REG') {
4970     $obj = "dossier_contentieux_tous_recours";
4971     }
4972     if ($code_datd === 'IN') {
4973     $obj = "dossier_contentieux_toutes_infractions";
4974     }
4975    
4976 softime 5504 echo "\n<div class=\"bloc group\">";
4977     echo "\n<div class=\"field field-type-text\">";
4978    
4979     echo "\n<p>";
4980     echo "\n<span class='text'>";
4981     echo "\n<a class=\"om-icon om-icon-16 consult-16\" title=\"" . _('Consulter') . "\"";
4982 softime 7996 echo "\n href=\"".OM_ROUTE_FORM."&obj=dossier_instruction&action=3&idx=";
4983 softime 5504 echo $dossier->getVal("dossier");
4984     echo "\">";
4985     echo "\n</a>";
4986    
4987     echo "\n<a title=\""._("Consulter")."\" style=\"vertical-align:middle;\"";
4988 softime 7996 echo " href=\"".OM_ROUTE_FORM."&obj=";
4989 softime 7067 echo $obj;
4990     echo "&action=3&idx=";
4991 softime 5504 echo $dossier->getVal("dossier");
4992     echo "\">";
4993     echo $dossier->getVal("dossier_libelle");
4994     echo "\n</a>";
4995     echo "\n</span>";
4996     echo "\n</p>";
4997    
4998     echo "\n</div>";
4999     echo "\n</div>";
5000     }
5001     echo "\n</div>";
5002     echo "\n</fieldset>";
5003     }
5004     echo "\n</div>";
5005     echo "\n</div>";
5006 mbroquet 3730 }
5007     // Ouverture du formulaire
5008     echo "\t<form";
5009     echo " method=\"post\"";
5010     echo " id=\"suivi_envoi_lettre_rar_form\"";
5011     echo " action=\"\"";
5012     echo ">\n";
5013     // Paramétrage des champs du formulaire
5014     $champs = array("date", "liste_code_barres_instruction");
5015     // Création d'un nouvel objet de type formulaire
5016 softime 7996 $form = $this->f->get_inst__om_formulaire(array(
5017     "validation" => 0,
5018     "maj" => 0,
5019     "champs" => $champs,
5020     ));
5021 mbroquet 3730 // Paramétrage du champ date du formulaire
5022     $form->setLib("date", _("Date")."* :");
5023     $form->setType("date", "date");
5024     $form->setOnchange("date", "fdate(this)");
5025     $form->setVal("date", ($date == "" ? date("d/m/Y") : $date));
5026     $form->setTaille("date", 10);
5027     $form->setMax("date", 10);
5028     // Paramétrage du champ liste_code_barres_instruction du formulaire
5029     $form->setLib("liste_code_barres_instruction", _("Liste des codes barres d'instructions scannes")."* :");
5030     $form->setType("liste_code_barres_instruction", "textarea");
5031     $form->setVal("liste_code_barres_instruction", $liste_code_barres_instruction);
5032     $form->setTaille("liste_code_barres_instruction", 20);
5033     $form->setMax("liste_code_barres_instruction", 20);
5034     // Affichage du formulaire
5035     $form->entete();
5036     $form->afficher($champs, 0, false, false);
5037     $form->enpied();
5038     // Affichage du bouton
5039     echo "\t<div class=\"formControls\">\n";
5040     $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
5041     echo "\t</div>\n";
5042     // Fermeture du formulaire
5043     echo "\t</form>\n";
5044     }
5045    
5046     /**
5047     * VIEW - view_suivi_mise_a_jour_des_dates.
5048     *
5049     * Vu pour mettre à jour les dates de suivi de l'instruction.
5050     *
5051     * @return void
5052     */
5053     function view_suivi_mise_a_jour_des_dates() {
5054     // Vérification de l'accessibilité sur l'élément
5055     $this->checkAccessibility();
5056    
5057     // XXX APP
5058    
5059     $f = $this->f;
5060    
5061     // Récupération des valeur passées en POST ou GET
5062     if($f->get_submitted_post_value("type_mise_a_jour") !== null) {
5063     $type_mise_a_jour = $f->get_submitted_post_value("type_mise_a_jour");
5064     } elseif($f->get_submitted_get_value('type_mise_a_jour') !== null) {
5065     $type_mise_a_jour = $f->get_submitted_get_value('type_mise_a_jour');
5066     } else {
5067     $type_mise_a_jour = "";
5068     }
5069     if($f->get_submitted_post_value('date') !== null) {
5070     $date = $f->get_submitted_post_value('date');
5071     } elseif($f->get_submitted_get_value('date') !== null) {
5072     $date = $f->get_submitted_get_value('date');
5073     } else {
5074     $date = "";
5075     }
5076     if($f->get_submitted_post_value('code_barres') !== null) {
5077     $code_barres = $f->get_submitted_post_value('code_barres');
5078     } elseif($f->get_submitted_get_value('code_barres') !== null) {
5079     $code_barres = $f->get_submitted_get_value('code_barres');
5080     } else {
5081     $code_barres = "";
5082     }
5083     // Booléen permettant de définir si un enregistrement à eu lieu
5084     $correct = false;
5085     // Booléen permettant de définir si les dates peuvent êtres enregistrées
5086     $date_error = false;
5087     // Champs date à mettre à jour
5088     $liste_champs=array();
5089    
5090     // Si le formulaire a été validé
5091     if ($f->get_submitted_post_value('validation') !== null) {
5092     if(!empty($type_mise_a_jour) and !empty($date) and !empty($code_barres)) {
5093    
5094 softime 6565 // Vérification de l'existence de l'instruction
5095     $sql = "SELECT instruction
5096     FROM ".DB_PREFIXE."instruction
5097     INNER JOIN ".DB_PREFIXE."dossier
5098     ON dossier.dossier=instruction.dossier
5099     INNER JOIN ".DB_PREFIXE."dossier_instruction_type
5100     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
5101     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
5102     ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
5103     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
5104     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
5105     INNER JOIN ".DB_PREFIXE."groupe
5106     ON dossier_autorisation_type.groupe = groupe.groupe
5107     WHERE code_barres='".$this->f->db->escapesimple($code_barres)."'";
5108 softime 7067
5109     // Ajout d'un filtre sur les groupes auxquels l'utilisateur a accès
5110     $group_clause = array();
5111     foreach ($_SESSION["groupe"] as $key => $value) {
5112     $group_clause[$key] = "(groupe.code = '".$key."'";
5113     if($value["confidentiel"] !== true) {
5114     $group_clause[$key] .= " AND dossier_autorisation_type.confidentiel IS NOT TRUE";
5115     }
5116     $group_clause[$key] .= ")";
5117     }
5118     $conditions = implode(" OR ", $group_clause);
5119     $sql .= " AND (" . $conditions . ")";
5120    
5121    
5122 mbroquet 3730 $res = $f->db->query($sql);
5123     $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
5124     $f->isDatabaseError($res);
5125    
5126     if($res->numrows() == 1) {
5127     $liste_champs = explode(";", $type_mise_a_jour);
5128     // Mise à jour des dates après l'écran de verification
5129     if($f->get_submitted_post_value('is_valid') !== null and $f->get_submitted_post_value('is_valid') == "true") {
5130     $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
5131 softime 7996 $instr = $this->f->get_inst__om_dbform(array(
5132     "obj" => "instruction",
5133     "idx" => $row['instruction'],
5134     ));
5135 mbroquet 3730 $valF = array();
5136     foreach($instr->champs as $id => $champ) {
5137     $valF[$champ] = $instr->val[$id];
5138     }
5139 softime 6565 $valF['date_evenement'] = $instr->dateDBToForm($valF['date_evenement']);
5140     $valF['archive_date_complet'] = $instr->dateDBToForm($valF['archive_date_complet']);
5141     $valF['archive_date_rejet'] = $instr->dateDBToForm($valF['archive_date_rejet']);
5142     $valF['archive_date_limite'] = $instr->dateDBToForm($valF['archive_date_limite']);
5143     $valF['archive_date_notification_delai'] = $instr->dateDBToForm($valF['archive_date_notification_delai']);
5144     $valF['archive_date_decision'] = $instr->dateDBToForm($valF['archive_date_decision']);
5145     $valF['archive_date_validite'] = $instr->dateDBToForm($valF['archive_date_validite']);
5146     $valF['archive_date_achevement'] = $instr->dateDBToForm($valF['archive_date_achevement']);
5147     $valF['archive_date_chantier'] = $instr->dateDBToForm($valF['archive_date_chantier']);
5148     $valF['archive_date_conformite'] = $instr->dateDBToForm($valF['archive_date_conformite']);
5149     $valF['archive_date_dernier_depot'] = $instr->dateDBToForm($valF['archive_date_dernier_depot']);
5150     $valF['archive_date_limite_incompletude'] = $instr->dateDBToForm($valF['archive_date_limite_incompletude']);
5151     $valF['date_finalisation_courrier'] = $instr->dateDBToForm($valF['date_finalisation_courrier']);
5152     $valF['date_envoi_signature'] = $instr->dateDBToForm($valF['date_envoi_signature']);
5153     $valF['date_retour_signature'] = $instr->dateDBToForm($valF['date_retour_signature']);
5154     $valF['date_envoi_rar'] = $instr->dateDBToForm($valF['date_envoi_rar']);
5155     $valF['date_retour_rar'] = $instr->dateDBToForm($valF['date_retour_rar']);
5156     $valF['date_envoi_controle_legalite'] = $instr->dateDBToForm($valF['date_envoi_controle_legalite']);
5157     $valF['date_retour_controle_legalite'] = $instr->dateDBToForm($valF['date_retour_controle_legalite']);
5158     $valF['archive_date_cloture_instruction'] = $instr->dateDBToForm($valF['archive_date_cloture_instruction']);
5159     $valF['archive_date_premiere_visite'] = $instr->dateDBToForm($valF['archive_date_premiere_visite']);
5160     $valF['archive_date_derniere_visite'] = $instr->dateDBToForm($valF['archive_date_derniere_visite']);
5161     $valF['archive_date_contradictoire'] = $instr->dateDBToForm($valF['archive_date_contradictoire']);
5162     $valF['archive_date_retour_contradictoire'] = $instr->dateDBToForm($valF['archive_date_retour_contradictoire']);
5163     $valF['archive_date_ait'] = $instr->dateDBToForm($valF['archive_date_ait']);
5164     $valF['archive_date_transmission_parquet'] = $instr->dateDBToForm($valF['archive_date_transmission_parquet']);
5165 mbroquet 3730
5166     foreach(explode(";", $type_mise_a_jour) as $maj_date) {
5167     $valF[$maj_date]=$date;
5168     }
5169    
5170     // Vérification de la finalisation du document
5171     // correspondant au code barres
5172     if($valF["om_final_instruction"] === 't' or
5173     $valF["lettretype"] == '') {
5174     $code_barres = "";
5175    
5176     //Désactivation de l'autocommit
5177     $f->db->autoCommit(false);
5178    
5179     //On modifie les valeurs de l'instruction
5180     $instr->setParameter('maj', 170);
5181 nmeucci 3965 $instr->class_actions[170]["identifier"] =
5182 nmeucci 3972 "mise à jour des dates (depuis le menu suivi des pièces)";
5183 mbroquet 3730 $retour = $instr->modifier($valF, $f->db, DEBUG);
5184    
5185     //Si une erreur s'est produite, on défait les modifications
5186     //qui ont été faites
5187     if (!$retour){
5188     $instr->undoValidation();
5189     }
5190     //Sinon, on valide en base de données les modifications
5191     else {
5192     $f->db->commit();
5193     }
5194    
5195     // Variable correct retourné depuis la classe instruction
5196     $correct = $instr->correct;
5197    
5198     // Si la modification sur l'instruction a échoué
5199     if ($correct === false) {
5200    
5201     // Message d'erreur de la classe instruction
5202     $error = $instr->msg;
5203     }
5204    
5205     } else {
5206     // Indique que le traitement est en erreur
5207     $correct = false;
5208     // Message d'erreur
5209     $error = sprintf(_("Le document n'est pas finalise."),
5210     "<span class='bold'>".$code_barres."</span>");
5211     }
5212     } else {
5213     // Récupération des infos du dossier
5214     $sqlInfo = "SELECT dossier.dossier_libelle,
5215     evenement.libelle as evenement,
5216     autorite_competente.code as autorite_competente_code,
5217     autorite_competente.libelle as autorite_competente,
5218     evenement.type as evenement_type,
5219     to_char(date_envoi_signature,'DD/MM/YYYY') as date_envoi_signature,
5220     to_char(date_retour_signature,'DD/MM/YYYY') as date_retour_signature,
5221     to_char(date_envoi_controle_legalite,'DD/MM/YYYY') as date_envoi_controle_legalite,
5222     to_char(date_retour_controle_legalite,'DD/MM/YYYY') as date_retour_controle_legalite,
5223     to_char(date_envoi_rar,'DD/MM/YYYY') as date_envoi_rar,
5224     to_char(date_retour_rar,'DD/MM/YYYY') as date_retour_rar
5225     FROM ".DB_PREFIXE."instruction
5226     INNER JOIN ".DB_PREFIXE."dossier ON
5227     dossier.dossier=instruction.dossier
5228     LEFT JOIN ".DB_PREFIXE."autorite_competente ON
5229     dossier.autorite_competente=autorite_competente.autorite_competente
5230     INNER JOIN ".DB_PREFIXE."evenement ON
5231     instruction.evenement=evenement.evenement
5232     WHERE code_barres='".$code_barres."'";
5233     $resInfo = $f->db->query($sqlInfo);
5234     $f->isDatabaseError($resInfo);
5235     $infos = $resInfo->fetchRow(DB_FETCHMODE_ASSOC);
5236    
5237     // Vérification de la non modification des dates de suivi
5238     foreach(explode(";", $type_mise_a_jour) as $champ) {
5239     if($infos[$champ] != "" AND $infos[$champ] != $date) {
5240     $error = _("Les dates de suivis ne peuvent etre modifiees");
5241     $date_error = true;
5242     }
5243     }
5244     }
5245     } else {
5246     $error = _("Le numero saisi ne correspond a aucun code barres d'instruction.");
5247     }
5248    
5249     } else {
5250     $error = _("Tous les champs doivent etre remplis.");
5251     }
5252     }
5253    
5254     /**
5255     * Affichage des messages et du formulaire
5256     */
5257     // Affichage du message de validation ou d'erreur
5258     if (isset($message) && isset($message_class) && $message != "") {
5259     $f->displayMessage($message_class, $message);
5260     }
5261     // Affichage du message d'erreur
5262     if(!empty($error)) {
5263     $f->displayMessage("error", $error);
5264     }
5265    
5266     // Affichage du message de validation de la saisie
5267     if($correct === true) {
5268     $f->displayMessage("ok", _("Saisie enregistree"));
5269     }
5270     // Ouverture du formulaire
5271     echo "\t<form";
5272     echo " method=\"post\"";
5273     echo " id=\"suivi_mise_a_jour_des_dates_form\"";
5274     echo " action=\"\"";
5275     echo ">\n";
5276     // Paramétrage des champs du formulaire
5277     if(isset($infos)) {
5278     $champs = array("type_mise_a_jour", "date", "code_barres", "dossier_libelle", "evenement"
5279     , "autorite_competente", "date_envoi_signature",
5280     "date_retour_signature", "date_envoi_controle_legalite",
5281     "date_retour_controle_legalite", "date_envoi_rar",
5282     "date_retour_rar", "is_valid");
5283     } else {
5284     $champs = array("type_mise_a_jour", "date", "code_barres");
5285     }
5286     // Création d'un nouvel objet de type formulaire
5287 softime 7996 $form = $this->f->get_inst__om_formulaire(array(
5288     "validation" => 0,
5289     "maj" => 0,
5290     "champs" => $champs,
5291     ));
5292 mbroquet 3730 // Paramétrage des champs du formulaire
5293     // Parametrage du champ type_mise_a_jour
5294     $form->setLib("type_mise_a_jour", _("Date a mettre a jour")."* :");
5295     if(isset($infos)) {
5296     $form->setType("type_mise_a_jour", "selecthiddenstatic");
5297    
5298     } else {
5299     $form->setType("type_mise_a_jour", "select");
5300    
5301     }
5302     $form->setVal("type_mise_a_jour", $type_mise_a_jour);
5303     $contenu = array();
5304    
5305     $contenu[0][0] = "date_envoi_signature";
5306     $contenu[1][0] = _("date d'envoi pour signature Mairie/Prefet");
5307    
5308     $contenu[0][1] = "date_retour_signature";
5309     $contenu[1][1] = _("date de retour de signature Mairie/Prefet");
5310    
5311     $contenu[0][2] = "date_retour_signature;date_envoi_controle_legalite";
5312     $contenu[1][2] = _("date de retour de signature + Envoi controle legalite");
5313    
5314     $contenu[0][3] = "date_envoi_controle_legalite";
5315     $contenu[1][3] = _("date d'envoi au controle de legalite");
5316    
5317     $contenu[0][4] = "date_retour_controle_legalite";
5318     $contenu[1][4] = _("date de retour de controle de legalite");
5319    
5320     $contenu[0][5] = "date_retour_rar";
5321     $contenu[1][5] = _("date de retour de l'AR");
5322    
5323     $form->setSelect("type_mise_a_jour", $contenu);
5324    
5325     // Parametrage du champ date
5326     $form->setLib("date", _("Date")."* :");
5327     if(isset($infos)) {
5328     $form->setType("date", "hiddenstaticdate");
5329    
5330     } else {
5331     $form->setType("date", "date");
5332     }
5333     $form->setVal("date", $date);
5334     $form->setTaille("date", 10);
5335     $form->setMax("date", 10);
5336    
5337     // Parametrage du champ code_barres
5338     $form->setLib("code_barres", _("Code barres d'instruction")."* :");
5339     if(isset($infos)) {
5340     $form->setType("code_barres", "hiddenstatic");
5341     } else {
5342     $form->setType("code_barres", "text");
5343     }
5344     $form->setVal("code_barres", $code_barres);
5345     $form->setTaille("code_barres", 20);
5346     $form->setMax("code_barres", 20);
5347    
5348     // Ajout des infos du dossier correspondantes à l'instruction séléctionnée
5349     if(isset($infos)) {
5350    
5351     // Tous les champs sont défini par defaut à static
5352     foreach ($infos as $key => $value) {
5353     $form->setType($key, "static");
5354     if(in_array($key, $liste_champs)) {
5355     $form->setVal($key, $date);
5356     } else {
5357     $form->setVal($key, $value);
5358     }
5359     }
5360    
5361     // Les champs dont on viens de définir la valeur sont en gras
5362     foreach ($liste_champs as $value) {
5363     $form->setBloc($value,'DF',"",'bold');
5364     }
5365    
5366     // Parametrage du champ dossier
5367     $form->setLib("dossier_libelle", _("dossier_libelle")." :");
5368     $form->setType("dossier_libelle", "static");
5369     $form->setVal("dossier_libelle", $infos['dossier_libelle']);
5370    
5371     // Parametrage du champ evenement
5372     $form->setLib("evenement", _("evenement")." :");
5373     $form->setType("evenement", "static");
5374     $form->setVal("evenement", $infos['evenement']);
5375    
5376     // Parametrage du champ autorite_competente
5377     $form->setLib("autorite_competente", _("Autorite competente")." :");
5378     $form->setType("autorite_competente", "static");
5379     $form->setVal("autorite_competente", $infos['autorite_competente']);
5380    
5381     // Parametrage des libellés d'envoi avec RAR
5382     $form->setLib("date_envoi_rar", _("date_envoi_rar")." :");
5383     $form->setLib("date_retour_rar", _("date_retour_rar")." :");
5384    
5385     $form->setLib("date_envoi_signature", _("date_envoi_signature")." :");
5386     $form->setLib("date_retour_signature", _("date_retour_signature")." :");
5387     $form->setLib("date_envoi_controle_legalite", _("date_envoi_controle_legalite")." :");
5388     $form->setLib("date_retour_controle_legalite", _("date_retour_controle_legalite")." :");
5389     // Configuration des libellé en fonction de l'autorité compétente
5390     if($infos['autorite_competente_code'] == 'ETAT') {
5391     $form->setType("date_envoi_controle_legalite", "hiddendate");
5392     $form->setType("date_retour_controle_legalite", "hiddendate");
5393     }
5394    
5395     // Ajout d'un champ hidden permettant de savoir que le formulaire précédant est celui de vérification
5396     $form->setLib("is_valid", _("Valide")." :");
5397     $form->setType("is_valid", "hidden");
5398     $form->setVal("is_valid", 'true');
5399    
5400     $form->setFieldset('dossier_libelle','D',_('Synthese'));
5401     $form->setFieldset('is_valid','F');
5402    
5403     }
5404    
5405    
5406     // Création du fieldset regroupant les champs permettant la mise à jour des date
5407     $form->setFieldset('type_mise_a_jour','D',_('Mise a jour'));
5408     $form->setFieldset('code_barres','F');
5409     // Affichage du formulaire
5410     $form->entete();
5411     $form->afficher($champs, 0, false, false);
5412     $form->enpied();
5413     // Affichage du bouton
5414     echo "\t<div class=\"formControls\">\n";
5415     //
5416     if(!$date_error) {
5417     $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
5418     }
5419     // Si pas sur l'écran de validation
5420     if(isset($infos)) {
5421 softime 7996 echo "<a class=\"retour\" href=\"".OM_ROUTE_FORM."&obj=instruction_suivi_mise_a_jour_des_dates&action=170&idx=0";
5422 mbroquet 3730 echo "&amp;type_mise_a_jour=".$type_mise_a_jour."&amp;date=".$date."&amp;code_barres=".$code_barres;
5423     echo "\">Retour</a>";
5424     }
5425     echo "\t</div>\n";
5426     // Fermeture du formulaire
5427     echo "\t</form>\n";
5428     }
5429    
5430     /**
5431     * [view_pdf_lettre_rar description]
5432     *
5433     * @return [type] [description]
5434     */
5435     function view_pdf_lettre_rar() {
5436     // Vérification de l'accessibilité sur l'élément
5437     $this->checkAccessibility();
5438    
5439     // XXX APP
5440    
5441     $f = $this->f;
5442    
5443     $f->disableLog();
5444    
5445     if($f->get_submitted_get_value('liste') != null) {
5446     $listeCodeBarres = explode(',',$f->get_submitted_get_value('liste'));
5447    
5448     // Classe permettant la mise en page de l'édition pdf
5449     require_once "../obj/pdf_lettre_rar.class.php";
5450     $pdf_lettre_rar = new pdf_lettre_rar('P', 'mm', 'A4');
5451     // Initialisation de la mise en page
5452     $pdf_lettre_rar->init($f);
5453    
5454     foreach ($listeCodeBarres as $code_barres) {
5455    
5456 softime 7067 // On récupère le dossier
5457     $sql = "SELECT dossier
5458     FROM " . DB_PREFIXE . "instruction
5459     WHERE code_barres = '" . $code_barres . "'";
5460     $dossier = $this->db->getOne($sql);
5461     $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
5462     $this->f->isDatabaseError($dossier);
5463 softime 7996 $inst_dossier = $this->f->get_inst__om_dbform(array(
5464     "obj" => "dossier",
5465     "idx" => $dossier,
5466     ));
5467 softime 7067
5468     // En fonction du type de dossier, on récupère un demandeur différent dans les requêtes
5469     $groupe = $inst_dossier->get_type_affichage_formulaire();
5470     switch ($groupe) {
5471     case 'CTX IN':
5472     $sql_demandeur = "(lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='plaignant')";
5473     break;
5474     case 'CTX RE':
5475     $sql_demandeur = "(lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='requerant')";
5476     break;
5477     case 'ADS':
5478     case 'DPC':
5479     default:
5480     $sql_demandeur = "((lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='petitionnaire') OR demandeur.type_demandeur='delegataire')";
5481     break;
5482     }
5483    
5484 mbroquet 3730 // Test si l'evenement est de type arrete et si un délégataire a été nommé
5485     $sql = "SELECT
5486     dossier.dossier_libelle,
5487     evenement.type,
5488 softime 3834 count(lien_dossier_demandeur) as nbdemandeur,
5489     CASE
5490     WHEN division.libelle IS NOT NULL AND phase.code IS NOT NULL
5491     THEN CONCAT(phase.code, ' - ', division.libelle)
5492     ELSE
5493     phase.code
5494     END AS code_phase
5495 mbroquet 3730 FROM ".DB_PREFIXE."instruction
5496     LEFT JOIN ".DB_PREFIXE."dossier
5497     ON instruction.dossier = dossier.dossier
5498 softime 3834 LEFT JOIN ".DB_PREFIXE."division
5499     ON dossier.division = division.division
5500 mbroquet 3730 INNER JOIN ".DB_PREFIXE."evenement ON
5501 softime 3834 instruction.evenement=evenement.evenement
5502     LEFT JOIN ".DB_PREFIXE."phase
5503     ON evenement.phase = phase.phase
5504 mbroquet 3730 inner JOIN ".DB_PREFIXE."lien_dossier_demandeur ON
5505     instruction.dossier=lien_dossier_demandeur.dossier
5506     inner join ".DB_PREFIXE."demandeur on
5507     demandeur.demandeur=lien_dossier_demandeur.demandeur
5508     WHERE code_barres='".$code_barres."'
5509 softime 7067 AND " . $sql_demandeur . "
5510 softime 3834 GROUP BY dossier.dossier_libelle, evenement.type, phase.code, division.libelle";
5511 mbroquet 3730
5512     $res = $f->db->query($sql);
5513     $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
5514     $f->isDatabaseError($res);
5515     $testDemandeur = $res->fetchrow(DB_FETCHMODE_ASSOC);
5516    
5517    
5518     // Recuperation de l'adresse de destination
5519     $sqlAdresse = "SELECT
5520     CASE WHEN demandeur.qualite='particulier'
5521     THEN TRIM(CONCAT_WS(' ', pc.libelle, demandeur.particulier_nom, demandeur.particulier_prenom))
5522     ELSE TRIM(demandeur.personne_morale_denomination)
5523     END as ligne1,
5524     CASE WHEN demandeur.qualite='personne_morale'
5525     THEN TRIM(demandeur.personne_morale_raison_sociale)
5526     ELSE ''
5527     END as ligne1_1,
5528     CASE WHEN demandeur.qualite='personne_morale' AND (demandeur.personne_morale_nom IS NOT NULL OR demandeur.personne_morale_prenom IS NOT NULL)
5529     THEN TRIM(CONCAT_WS(' ', 'rep. par', demandeur.personne_morale_nom, demandeur.personne_morale_prenom))
5530     ELSE ''
5531     END as ligne1_2,
5532     trim(concat(demandeur.numero,' ',demandeur.voie)) as ligne2,
5533     CASE demandeur.complement
5534     WHEN null THEN ''
5535     ELSE trim(demandeur.complement)
5536     END as ligne3,
5537     CASE demandeur.lieu_dit
5538     WHEN null THEN ''
5539     ELSE trim(demandeur.lieu_dit)
5540     END as ligne4,
5541     CONCAT_WS(' ', demandeur.code_postal, demandeur.localite,
5542     (CASE WHEN demandeur.bp IS NOT NULL
5543     THEN CONCAT_WS(' ', 'BP', demandeur.bp)
5544     ELSE ''
5545     END),
5546     (CASE WHEN demandeur.cedex IS NOT NULL
5547     THEN CONCAT_WS(' ', 'CEDEX', demandeur.cedex)
5548     ELSE ''
5549     END))
5550     as ligne5,
5551     code_barres as code_barres
5552     FROM ".DB_PREFIXE."instruction
5553     INNER JOIN ".DB_PREFIXE."dossier ON dossier.dossier = instruction.dossier
5554     INNER JOIN ".DB_PREFIXE."lien_dossier_demandeur ON dossier.dossier = lien_dossier_demandeur.dossier
5555     INNER JOIN ".DB_PREFIXE."demandeur ON lien_dossier_demandeur.demandeur = demandeur.demandeur
5556     LEFT OUTER JOIN ".DB_PREFIXE."civilite as pc ON demandeur.particulier_civilite = pc.civilite OR demandeur.personne_morale_civilite = pc.civilite
5557     WHERE instruction.code_barres ='".$code_barres."'";
5558    
5559     // Envoi pour delegataire ou petitionnaire principal selon le type d'evenement
5560     if($testDemandeur['type'] != 'arrete' AND $testDemandeur['nbdemandeur'] > 1) {
5561     $sqlAdresse .= " AND demandeur.type_demandeur='delegataire'";
5562     } else {
5563 softime 7996 $sqlAdresse .= " AND demandeur.type_demandeur='petitionnaire' AND lien_dossier_demandeur.petitionnaire_principal IS TRUE";
5564 mbroquet 3730 }
5565    
5566     $resAdresse = $f->db->query($sqlAdresse);
5567     $adresse_dest = $resAdresse->fetchrow(DB_FETCHMODE_ASSOC);
5568     $f->addToLog(__METHOD__.": db->query(\"".$sqlAdresse."\")", VERBOSE_MODE);
5569     $f->isDatabaseError($resAdresse);
5570    
5571     // Création adresse destinataire sans ligne vide
5572     $adresse_destinataire = array();
5573     if (!empty($adresse_dest['ligne1'])) {
5574     $adresse_destinataire[] = $adresse_dest['ligne1'];
5575     }
5576     if (!empty($adresse_dest['ligne1_1'])) {
5577     $adresse_destinataire[] = $adresse_dest['ligne1_1'];
5578     }
5579     if (!empty($adresse_dest['ligne1_2'])) {
5580     $adresse_destinataire[] = $adresse_dest['ligne1_2'];
5581     }
5582     $adresse_destinataire[] = $adresse_dest['ligne2'];
5583     if (!empty($adresse_dest['ligne3'])) {
5584     $adresse_destinataire[] = $adresse_dest['ligne3'];
5585     }
5586     if (!empty($adresse_dest['ligne4'])) {
5587     $adresse_destinataire[] = $adresse_dest['ligne4'];
5588     }
5589     $adresse_destinataire[] = $adresse_dest['ligne5'];
5590    
5591     // Création du champ specifique
5592     $specifique_content = array();
5593     $specifique_content[] = $adresse_dest['ligne1'];
5594     $specifique_content[] = $adresse_dest['ligne1_1'];
5595     $specifique_content[] = $adresse_dest['ligne1_2'];
5596     $specifique_content[] = $testDemandeur['dossier_libelle'];
5597     $specifique_content[] = "|||||".$adresse_dest['code_barres']."|||||";
5598     unset($adresse_dest['code_barres']);
5599     // Ajout d'une page aux pdf
5600 softime 3834 $pdf_lettre_rar->addLetter($adresse_destinataire, $specifique_content, $testDemandeur['code_phase']);
5601 mbroquet 3730
5602     }
5603     $pdf_output = $pdf_lettre_rar->output("lettre_rar".date("dmYHis").".pdf","S");
5604 softime 7685 $om_edition = $this->f->get_inst__om_edition();
5605 mbroquet 3730 $om_edition->expose_pdf_output($pdf_output, "lettre_rar".date("dmYHis").".pdf");
5606     }
5607     }
5608    
5609     /**
5610     * VIEW - view_bordereau_envoi_maire.
5611     *
5612     * Formulaire demandant :
5613     * - le code-barres de l'événement d'instruction
5614     * - la date d'envoi du courrier pour signature par le maire
5615     *
5616     * Lors de la validation :
5617     * => met à jour cette date dans l'événement d'instruction
5618     * => crée un lien permettant de générer en PDF le bordereau
5619     *
5620     * @return void
5621     */
5622     function view_bordereau_envoi_maire() {
5623     // Vérification de l'accessibilité sur l'élément
5624     $this->checkAccessibility();
5625    
5626     // Récupération des valeur passées en POST ou GET
5627     $code_barres = "";
5628     if($this->f->get_submitted_post_value('code_barres') !== null) {
5629     $code_barres = $this->f->get_submitted_post_value('code_barres');
5630     } elseif($this->f->get_submitted_get_value('code_barres')!==null) {
5631     $code_barres = $this->f->get_submitted_get_value('code_barres');
5632     }
5633     $date = "";
5634     if($this->f->get_submitted_post_value('date') !== null) {
5635     $date = $this->f->get_submitted_post_value('date');
5636     } elseif($this->f->get_submitted_get_value('date') !== null) {
5637     $date = $this->f->get_submitted_get_value('date');
5638     }
5639     $validation = 0;
5640     if($this->f->get_submitted_post_value('validation') !== null) {
5641     $validation = $this->f->get_submitted_post_value('validation');
5642     } elseif($this->f->get_submitted_get_value('validation') !== null) {
5643     $validation = $this->f->get_submitted_get_value('validation');
5644     }
5645    
5646     // Si le formulaire a été validé
5647     if ($this->f->get_submitted_post_value('validation') !== null) {
5648     // Tous les champs doivent obligatoirement être remplis
5649     if (!empty($date) && !empty($code_barres)) {
5650     $date_en = $this->dateDB($date);
5651     // Si date valide
5652     if ($date_en != "") {
5653     $id_instruction = $this->get_instruction_by_barcode($code_barres);
5654     // Si un événement d'instruction a été trouvé pour ce code-barres
5655     if ($id_instruction !== null) {
5656     $ret = $this->update_date_envoi_signature($id_instruction, $date_en);
5657     // Si mise à jour réussie de la date d'envoi du courrier
5658     // pour signature par l'autorité compétente
5659     if($ret === true) {
5660     // Message de validation avec lien PDF
5661     $message_class = "valid";
5662     $message = '&bullet; '._("Veuillez cliquer sur le lien ci-dessous pour telecharger votre bordereau");
5663     $message .= " : <br/><br/>";
5664     $message .= "<a class='om-prev-icon pdf-16'";
5665     $message .= " id=\"generer_bordereau_envoi_maire\"";
5666     $message .= " title=\""._("Bordereau")."\"";
5667 softime 7996 $message .= " href='".OM_ROUTE_FORM."&obj=instruction";
5668 mbroquet 3730 $message .= "&action=200";
5669     $message .= "&idx=".$id_instruction."'";
5670     $message .= " target='_blank'>";
5671     $message .= _("Bordereau d'envoi au maire");
5672     $message .= "</a><br/><br/>";
5673     $message .= '&bullet; '._("Rappel des informations saisies")." :<br/><br/>";
5674     $message .= _("Code du courrier")." : ".$code_barres."<br/>";
5675     $message .= _("Date d'envoi du courrier pour signature par le maire")." : ".$date;
5676    
5677     } else {
5678     // Message d'erreur
5679     $message_class = "error";
5680     $message = sprintf(_("Erreur lors de la mise a jour de l'evenement d'instruction correspondant au code barres %s."),
5681     $code_barres);
5682     }
5683     }
5684     else {
5685     $message_class = "error";
5686     $message = _("Le numero saisi ne correspond a aucun code-barres d'evenement d'instruction.");
5687     }
5688     }
5689     else {
5690     $message_class = "error";
5691     $message = _("La date est invalide.");
5692     }
5693     } else {
5694     $message_class = "error";
5695     $message = _("Tous les champs doivent etre remplis.");
5696     }
5697     }
5698    
5699     /**
5700     * Affichage des messages et du formulaire
5701     */
5702    
5703     // Affichage du message de validation ou d'erreur
5704     if (isset($message) && isset($message_class) && $message != "") {
5705     $this->f->displayMessage($message_class, $message);
5706     }
5707    
5708     // Ouverture du formulaire
5709     $datasubmit = $this->getDataSubmit();
5710     echo "\n<!-- ########## START DBFORM ########## -->\n";
5711     echo "<form";
5712     echo " id=\"bordereau_envoi_maire\"";
5713     echo " method=\"post\"";
5714     echo " name=\"f1\"";
5715     echo " action=\"";
5716     echo $datasubmit;
5717     echo "\"";
5718     echo ">\n";
5719    
5720     // Paramétrage des champs du formulaire
5721     $champs = array("code_barres","date");
5722    
5723     // Création d'un nouvel objet de type formulaire
5724 softime 7996 $form = $this->f->get_inst__om_formulaire(array(
5725     "validation" => 0,
5726     "maj" => 0,
5727     "champs" => $champs,
5728     ));
5729 mbroquet 3730
5730     $template_required_label = '%s *';
5731     // Parametrage du champ code_barres
5732     $form->setLib("code_barres", sprintf($template_required_label,_("Code du courrier")));
5733     $form->setType("code_barres", "text");
5734     $form->setVal("code_barres", $code_barres);
5735     $form->setTaille("code_barres", 20);
5736     $form->setMax("code_barres", 20);
5737     // Parametrage du champ date
5738     $form->setLib("date", sprintf($template_required_label,_("Date d'envoi du courrier pour signature par le maire")));
5739     $form->setType("date", "date") ;
5740     if (empty($date)) {
5741     $date = date('d/m/Y');
5742     }
5743     $form->setVal("date", $date);
5744     $form->setTaille("date", 10);
5745     $form->setMax("date", 10);
5746    
5747     // Création du bloc regroupant les champs
5748     $form->setBloc('code_barres','D');
5749     $form->setBloc('date','F');
5750     // Affichage du formulaire
5751     $form->entete();
5752     $form->afficher($champs, 0, false, false);
5753     $form->enpied();
5754     // Affichage du bouton
5755     printf("\t<div class=\"formControls\">\n");
5756     //
5757     $this->f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
5758     printf("\t</div>\n");
5759     // Fermeture du formulaire
5760     printf("\t</form>\n");
5761     }
5762    
5763     /**
5764     * VIEW - view_bordereau_envoi_maire.
5765     *
5766     * PDF de bordereau d'envoi au maire pour l'événement d'instruction instancié
5767     *
5768     * @return [void]
5769     */
5770     function view_generate_bordereau_envoi_maire() {
5771     // Vérification de l'accessibilité sur l'élément
5772     $this->checkAccessibility();
5773     // Récupération de la collectivité du dossier d'instruction
5774     $collectivite_di = $this->get_dossier_instruction_om_collectivite();
5775     // Récupération de ses paramètres
5776     $collectivite = $this->f->getCollectivite($collectivite_di);
5777     // Génération du PDF
5778     $result = $this->compute_pdf_output('etat', 'communaute_bordereau_envoi_maire', $collectivite, $this->getVal(($this->clePrimaire)));
5779     // Affichage du PDF
5780     $this->expose_pdf_output(
5781     $result['pdf_output'],
5782     $result['filename']
5783     );
5784     }
5785    
5786     /**
5787 softime 6565 * Retourne l'événement d'instruction dont on donne le code-barres, avec un filtre
5788     * pour exclure les dossiers du groupe contentieux.
5789 mbroquet 3730 *
5790     * @param [string] $barcode numéro du code-barres
5791     * @return [mixed] ID de son instruction ou null si aucun code
5792     */
5793     function get_instruction_by_barcode($barcode) {
5794     // Begin
5795     $this->begin_treatment(__METHOD__);
5796     // Vérification de l'existence de l'événement d'instruction
5797 softime 6565 // pour le code-barres donné, en excluant les dossiers liés au groupe CTX
5798 mbroquet 3730 $sql = "SELECT instruction
5799 softime 6565 FROM ".DB_PREFIXE."instruction
5800     INNER JOIN ".DB_PREFIXE."dossier
5801     ON dossier.dossier=instruction.dossier
5802     INNER JOIN ".DB_PREFIXE."dossier_instruction_type
5803     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
5804     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
5805     ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
5806     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
5807     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
5808     INNER JOIN ".DB_PREFIXE."groupe
5809     ON dossier_autorisation_type.groupe = groupe.groupe
5810     AND groupe.code != 'CTX'
5811     WHERE code_barres = '".$this->f->db->escapesimple($barcode)."'";
5812 mbroquet 3730 $res = $this->f->db->getOne($sql);
5813     $this->f->addToLog(__METHOD__." : db->getOne(\"".$sql."\")", VERBOSE_MODE);
5814     $this->f->isDatabaseError($res);
5815     // Retourne résultat
5816     return $this->end_treatment(__METHOD__, $res);
5817     }
5818    
5819     /**
5820     * Met à jour le champ date d'envoi signature
5821     * avec la date fournie et pour l'instruction donnée
5822     *
5823     * @param [string] $id ID de l'événement d'instruction
5824     * @param [string] $date date au format EN
5825     * @return [boolean] true si mise à jour avec succès
5826     */
5827     function update_date_envoi_signature($id, $date) {
5828     // Préparation du tableau
5829     $valF = array();
5830     $valF['date_envoi_signature'] = $date;
5831     // Begin
5832     $this->begin_treatment(__METHOD__);
5833     // Requête
5834     $res = $this->db->autoExecute(
5835     DB_PREFIXE.$this->table,
5836     $valF,
5837     DB_AUTOQUERY_UPDATE,
5838     $this->getCle($id)
5839     );
5840     // S'il y a eu une erreur
5841     if (database::isError($res, true)) {
5842     $this->end_treatment(__METHOD__, false);
5843     }
5844     //
5845     return $this->end_treatment(__METHOD__, true);
5846     }
5847    
5848     /**
5849     * Méthode permettant de définir des valeurs à envoyer en base après
5850     * validation du formulaire d'ajout.
5851     * @param array $val tableau des valeurs retournées par le formulaire
5852     */
5853 softime 6929 function setValFAjout($val = array()) {
5854 mbroquet 3730 // Mise à jour du flag created_by_commune lors d'un changement de décision
5855     // par un utilisateur de commune sur un dossier instruit par la comcom
5856 softime 6565 if ($this->isInstrCanChangeDecision($this->valF["dossier"])) {
5857 mbroquet 3730 $this->valF['created_by_commune'] = true;
5858     }
5859 softime 8593
5860     //
5861     if ($this->evenement_has_an_edition($this->valF['evenement']) === false) {
5862     if (isset($this->valF['flag_edition_integrale']) === true) {
5863     unset($this->valF['flag_edition_integrale']);
5864     }
5865     if (isset($this->valF['signataire_arrete']) === true) {
5866     unset($this->valF['signataire_arrete']);
5867     }
5868     }
5869 mbroquet 3730 }
5870 nmeucci 3876
5871 fmichon 3892
5872 fmichon 4708 /**
5873     * Récupère l'instance d'un événement de workflow.
5874     *
5875     * @param mixed $evenement Identifiant de l'événement.
5876     *
5877     * @return object
5878     */
5879     function get_inst_evenement($evenement = null) {
5880     //
5881     return $this->get_inst_common("evenement", $evenement);
5882     }
5883 softime 3976
5884 fmichon 3892 /**
5885 softime 3976 * Logue l'action de l'instruction dans son DI.
5886 nmeucci 3933 *
5887 softime 3976 * @param string $id Clé primaire de l'instruction.
5888     * @param array $val Valeurs de l'instruction.
5889     *
5890     * @return bool Vrai si traitement effectué avec succès
5891 nmeucci 3876 */
5892 softime 3976 private function add_log_to_dossier($id, array $val) {
5893 nmeucci 3933 $maj = $this->getParameter("maj");
5894 nmeucci 3943 // Action = Trace par défaut
5895     $action = $this->get_backtrace();
5896     // Action = Identifant de l'action si contexte connu
5897     if (empty($maj) === false
5898     || (empty($maj) === true && $maj === 0)) {
5899     $action = $this->get_action_param($maj, 'identifier');
5900 nmeucci 3965 if ($action === 'modifier_suivi') {
5901     $action = "modifier (via l'action suivi des dates)";
5902     }
5903 nmeucci 4108 if ($action === 'notifier_commune'
5904     && isset($val['mails_destinataires']) === true) {
5905     $action = "notification de la commune (courriels : ";
5906     $action .= $val['mails_destinataires'].")";
5907     }
5908 nmeucci 3943 }
5909 nmeucci 3876 // Création du log
5910     $log = array(
5911     'date' => date('Y-m-d H:i:s'),
5912     'user' => $_SESSION['login'],
5913     'action' => $action,
5914     'values' => array(
5915     'date_evenement' => $this->dateDB($val['date_evenement']),
5916     'date_retour_rar' => $this->dateDB($val['date_retour_rar']),
5917     'date_retour_signature' => $this->dateDB($val['date_retour_signature']),
5918     'evenement' => $val['evenement'],
5919     'action' => $val['action'],
5920 nmeucci 3963 'instruction' => $id,
5921 nmeucci 3876 'etat' => $val['etat'],
5922     ),
5923     );
5924     // Ajout du log
5925 softime 3976 $di = $this->get_inst_dossier($val['dossier']);
5926 nmeucci 3876 $ret = $di->add_log_instructions($log);
5927     if ($ret === false) {
5928     $this->correct = false;
5929     $this->msg = '';
5930     $this->addToMessage($di->msg);
5931     }
5932     return $ret;
5933     }
5934 nmeucci 3943
5935 softime 3976
5936 nmeucci 3943 /**
5937 softime 3976 * Retourne le contexte de déboguage formaté en HTML.
5938 nmeucci 3943 *
5939 softime 3976 * @return string Une ligne par trace
5940 nmeucci 3943 */
5941     private function get_backtrace() {
5942     $trace = debug_backtrace();
5943 nmeucci 3957 $backtrace = '';
5944     $i = 1;
5945 nmeucci 3943 foreach ($trace as $key => $value) {
5946 nmeucci 3957 $func = $trace[$key]['function'];
5947     // On ne s'autolog pas
5948     if ($func === 'get_backtrace'
5949     || $func === 'add_log_to_dossier') {
5950     continue;
5951     }
5952     $backtrace .= $i.') ';
5953     // Si dans une classe
5954     if (isset($trace[$key]['class']) === true
5955     && empty($trace[$key]['class']) === false) {
5956 nmeucci 3963 $backtrace .= $trace[$key]['class'].'->'.$func;
5957 nmeucci 3957 }
5958     // Si procédural
5959     else {
5960     $file = $trace[$key]['file'];
5961 nmeucci 3963 $line = $trace[$key]['line'];
5962 softime 3976 $truncated_file = $this->f->get_relative_path($file);
5963 nmeucci 3963 if ($truncated_file !== false) {
5964     $file = $truncated_file;
5965     }
5966     $backtrace .= $func.' IN<br/>&nbsp;&nbsp;&nbsp;&nbsp; '.$file.':'.$line;
5967 nmeucci 3957 }
5968     $backtrace .= '<br/>';
5969     $i++;
5970 nmeucci 3943 }
5971 nmeucci 3957 return $backtrace;
5972 nmeucci 3943 }
5973 nmeucci 3963
5974 nmeucci 4108 /**
5975     * CONDITION - is_notifiable.
5976     *
5977     * Condition pour afficher l'action notifier_commune.
5978     *
5979     * @return boolean
5980     */
5981     public function is_notifiable() {
5982     // L'instruction doit être finalisée, ce qui revient à dire
5983     // définalisable sans bypass
5984     if ($this->is_unfinalizable_without_bypass() === false) {
5985     return false;
5986     }
5987     // La collectivité de l'utilisateur doit être de niveau multi
5988     if ($this->f->has_collectivite_multi() === false) {
5989     return false;
5990     }
5991     // Le paramètre multi de l'objet du courriel doit exister
5992     if ($this->f->getParameter('param_courriel_de_notification_commune_objet_depuis_instruction') === NULL) {
5993     return false;
5994     }
5995     // Le paramètre multi du modèle du courriel doit exister
5996     if ($this->f->getParameter('param_courriel_de_notification_commune_modele_depuis_instruction') === NULL) {
5997     return false;
5998     }
5999     // A ce stade toutes les conditions sont satisfaites
6000     return true;
6001     }
6002 nmeucci 3963
6003 nmeucci 4108 /**
6004     * TREATMENT - notifier_commune.
6005     *
6006     * Notifie aux communes et par courriel la finalisation d'une instruction.
6007     *
6008     * @return boolean
6009     */
6010     public function notifier_commune() {
6011     // Cette méthode permet d'exécuter une routine en début des méthodes
6012     // dites de TREATMENT.
6013     $this->begin_treatment(__METHOD__);
6014     // Définition des paramètres
6015     $p_objet = 'param_courriel_de_notification_commune_objet_depuis_instruction';
6016     $p_modele = 'param_courriel_de_notification_commune_modele_depuis_instruction';
6017     $p_courriel = 'param_courriel_de_notification_commune';
6018     // Définition des variables de substitution
6019     $id_di = $this->getVal('dossier');
6020     $id_inst = $this->getVal($this->clePrimaire);
6021     // Instanciation du DI
6022     $di = $this->get_inst_dossier($id_di);
6023     // Récupération du paramétrage de la collectivité du dossier
6024     $collectivite_di = $di->getVal('om_collectivite');
6025     $params_mono = $this->f->getCollectivite($collectivite_di);
6026     // Récupération du paramétrage de la collectivité multi
6027     $collectivite_multi = $this->f->get_idx_collectivite_multi();
6028     $params_multi = $this->f->getCollectivite($collectivite_multi);
6029     // Vérification de l'objet (obligatoirement multi)
6030     $objet = null;
6031     if (isset($params_multi[$p_objet]) === true
6032     && $params_multi[$p_objet] !== '') {
6033     $objet = $params_multi[$p_objet];
6034     }
6035     // Vérification du modèle mono en priorité
6036     $modele = null;
6037     if (isset($params_mono[$p_modele]) === true
6038     && $params_mono[$p_modele] !== '') {
6039     $modele = $params_mono[$p_modele];
6040    
6041     }
6042     // Sinon vérification du modèle multi
6043     if ($modele === null
6044     && isset($params_multi[$p_modele]) === true
6045     && $params_multi[$p_modele] !== '') {
6046     $modele = $params_multi[$p_modele];
6047     }
6048     // Vérification des adresses de courriel mono
6049     $courriels_valides = array();
6050     $courriels_invalides = array();
6051     if (isset($params_mono[$p_courriel]) === true
6052     && $params_mono[$p_courriel] !== '') {
6053     // Un mail par ligne
6054     $adresses = explode("\n", $params_mono[$p_courriel]);
6055     // Vérification de la validité de chaque mail avec preg_match
6056     foreach ($adresses as $adresse) {
6057     $adresse = trim($adresse);
6058     if ($this->f->checkValidEmailAddress($adresse) === 1) {
6059     $courriels_valides[] = $adresse;
6060     } else {
6061     $courriels_invalides[] = $adresse;
6062     }
6063     }
6064     }
6065     // Vérification du paramétrage global :
6066     // on stoppe le traitement si au moins un paramètre est incorrect
6067     if ($objet === null
6068     || $modele === null
6069     || count($courriels_valides) === 0
6070     || count($courriels_invalides) > 0) {
6071     // On construit le message d'erreur adéquat
6072     $this->addToMessage(_('Erreur de paramétrage :'));
6073     if ($objet === null) {
6074     $this->addToMessage(_("* l'objet du courriel envoyé aux communes est vide"));
6075     }
6076     if ($modele === null) {
6077     $this->addToMessage(_("* le modèle du courriel envoyé aux communes est vide"));
6078     }
6079     if (count($courriels_valides) === 0) {
6080     $this->addToMessage(_("* aucun courriel valide de destinataire de la commune"));
6081     }
6082     if (count($courriels_invalides) > 0) {
6083     $courriels_invalides = implode(', ', $courriels_invalides);
6084     $this->addToMessage(_("* un ou plusieurs courriels des destinataires de la commune sont invalides : ").$courriels_invalides);
6085     }
6086     $this->addToMessage(_("Veuillez contacter votre administrateur."));
6087     return $this->end_treatment(__METHOD__, false);
6088     }
6089     // Remplacement des variables de substitution
6090     $objet = str_replace('<DOSSIER_INSTRUCTION>', $id_di, $objet);
6091     $modele = $this->formater_modele($modele, $id_di, $id_inst);
6092     // Exécution du traitement d'envoi du/des mail(s)
6093     $fails = array();
6094     foreach ($courriels_valides as $email) {
6095     if ($this->f->sendMail(
6096     iconv("UTF-8", "CP1252", $objet),
6097     iconv("UTF-8", "CP1252", $modele),
6098     iconv("UTF-8", "CP1252", $email)) === false) {
6099     $fails[] = $email;
6100     }
6101     }
6102     // Si échec message d'erreur et arrêt du traitement
6103     if (count($fails) > 0) {
6104     $fails = implode(', ', $fails);
6105     $this->addToMessage(_("Erreur lors de l'envoi du courriel aux destinataires : ").$fails);
6106     $this->addToMessage(_("Veuillez contacter votre administrateur."));
6107     return $this->end_treatment(__METHOD__, false);
6108     }
6109     // Ajout du log
6110     $this->setValFFromVal();
6111     $val_inst = $this->valF;
6112     $val_inst['mails_destinataires'] = implode(', ', $courriels_valides);
6113     if ($this->add_log_to_dossier($id_inst, $val_inst) === false) {
6114     $this->addToMessage(_("Erreur lors de la notification."));
6115     $this->addToMessage(_("Veuillez contacter votre administrateur."));
6116     return $this->end_treatment(__METHOD__, false);
6117     }
6118     // Message de validation
6119     $this->addToMessage(_('La commune a été notifiée.'));
6120     return $this->end_treatment(__METHOD__, true);
6121     }
6122    
6123     /**
6124     * Formatte le corps du courriel notifié aux communes
6125     *
6126     * @param string $modele template du modèle du courriel
6127     * @param string $id_di clé primaire du DI
6128     * @param string $id_inst clé primaire de l'instruction
6129     * @return string corps du mail au format HTML
6130     */
6131     public function formater_modele($modele, $id_di, $id_inst) {
6132     // Création du lien d'accès direct à l'instruction
6133 softime 7996 $url_inst = PATH_BASE_URL.'app/index.php?module=form&direct_link=true&obj=dossier_instruction&action=3'.
6134 nmeucci 4108 '&direct_field=dossier&direct_form=instruction&direct_action=3&direct_idx='.$id_inst;
6135     $url_inst = '<a href="'.$url_inst.'">'.$url_inst.'</a>';
6136     // Remplacement des champs de fusion
6137     $modele = str_replace('<DOSSIER_INSTRUCTION>', $id_di, $modele);
6138     $modele = str_replace('<URL_INSTRUCTION>', $url_inst, $modele);
6139     $modele = str_replace('<ID_INSTRUCTION>', $id_inst, $modele);
6140     // Encodage HTML des sauts de ligne
6141     $modele = preg_replace("/\r\n|\r|\n/",'<br/>',$modele);
6142     //
6143     return $modele;
6144     }
6145 softime 5169
6146    
6147     /**
6148     * Récupère l'instance de l'instructeur
6149     *
6150     * @param integer $instructeur Identifiant de l'instructeur.
6151     *
6152     * @return object
6153     */
6154     protected function get_inst_instructeur($instructeur) {
6155     //
6156     return $this->get_inst_common("instructeur", $instructeur);
6157     }
6158    
6159    
6160     /**
6161     * Récupère l'instance de l'utilisateur
6162     *
6163     * @param integer $om_utilisateur Identifiant de l'utilisateur.
6164     *
6165     * @return object
6166     */
6167     protected function get_inst_om_utilisateur($om_utilisateur) {
6168     //
6169     return $this->get_inst_common("om_utilisateur", $om_utilisateur);
6170     }
6171    
6172    
6173 softime 6565 /**
6174 softime 5295 * Récupère l'instance de la division.
6175     *
6176     * @param integer $division Identifiant de la division.
6177     *
6178     * @return object
6179     */
6180     protected function get_inst_division($division) {
6181     //
6182     return $this->get_inst_common("division", $division);
6183     }
6184    
6185    
6186     /**
6187     * Récupère l'instance de la direction.
6188     *
6189     * @param integer $direction Identifiant de la direction.
6190     *
6191     * @return object
6192     */
6193     protected function get_inst_direction($direction) {
6194     //
6195     return $this->get_inst_common("direction", $direction);
6196     }
6197    
6198    
6199     /**
6200     * Récupère la collectivité d'un instructeur en passant par sa division puis
6201     * par sa direction.
6202     *
6203     * @param integer $instructeur Identifiant de l'instructeur.
6204     *
6205     * @return integer
6206     */
6207     protected function get_instructeur_om_collectivite($instructeur) {
6208     // Chemin vers la collectivité d'un instructeur
6209     $inst_instr = $this->get_inst_instructeur($instructeur);
6210     $inst_division = $this->get_inst_division($inst_instr->getVal('division'));
6211     $inst_direction = $this->get_inst_direction($inst_division->getVal('direction'));
6212    
6213     // Collectivité
6214     $om_collectivite = $inst_direction->getVal('om_collectivite');
6215    
6216     //
6217     return $om_collectivite;
6218     }
6219    
6220 softime 6565 /*
6221     * CONDITION - can_user_access_dossier_contexte_ajout
6222     *
6223     * Vérifie que l'utilisateur a bien accès au dossier d'instruction passé dans le
6224     * formulaire d'ajout.
6225     * Cette méthode vérifie que l'utilisateur est lié au groupe du dossier, et si le
6226     * dossier est confidentiel qu'il a accès aux confidentiels de ce groupe.
6227     *
6228     */
6229     function can_user_access_dossier_contexte_ajout() {
6230 softime 5295
6231 softime 6565 ($this->f->get_submitted_get_value('idxformulaire') !== null ? $id_dossier =
6232     $this->f->get_submitted_get_value('idxformulaire') : $id_dossier = "");
6233     //
6234     if ($id_dossier !== "") {
6235 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
6236     "obj" => "dossier_instruction",
6237     "idx" => $id_dossier,
6238     ));
6239 softime 6565 //
6240     return $dossier->can_user_access_dossier();
6241     }
6242     return false;
6243     }
6244    
6245     /*
6246     * CONDITION - can_user_access_dossier
6247     *
6248     * Vérifie que l'utilisateur a bien accès au dossier lié à l'instruction instanciée.
6249     * Cette méthode vérifie que l'utilisateur est lié au groupe du dossier, et si le
6250     * dossier est confidentiel qu'il a accès aux confidentiels de ce groupe.
6251     *
6252     */
6253     function can_user_access_dossier_contexte_modification() {
6254    
6255     $id_dossier = $this->getVal('dossier');
6256     //
6257     if ($id_dossier !== "" && $id_dossier !== null) {
6258 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
6259     "obj" => "dossier_instruction",
6260     "idx" => $id_dossier,
6261     ));
6262 softime 6565 //
6263     return $dossier->can_user_access_dossier();
6264     }
6265     return false;
6266     }
6267    
6268 softime 8593 /**
6269     * Retourne le lien de retour (VIEW formulaire et VIEW sousformulaire).
6270     *
6271     * @param string $view Appel dans le contexte de la vue 'formulaire' ou de
6272     * la vue 'sousformulaire'.
6273     *
6274     * @return string
6275     */
6276     function get_back_link($view = "formulaire") {
6277     //
6278     $href = parent::get_back_link($view);
6279     //
6280     $crud = $this->get_action_crud();
6281 mbroquet 3730
6282 softime 8593 // Redirection vers le formulaire de modification à la validation du
6283     // formulaire d'ajout si l'événement associé possède une lettre type
6284     if (($crud === 'create'
6285     || ($crud === null
6286     && $this->getParameter('maj') == 0))
6287     && $this->correct == true
6288     && $this->evenement_has_an_edition($this->valF['evenement']) === true) {
6289 softime 7996
6290 softime 8593 // On instancie l'instruction
6291     $inst_instruction = $this->f->get_inst__om_dbform(array(
6292     "obj" => "instruction",
6293     "idx" => $this->valF[$this->clePrimaire],
6294     ));
6295    
6296     // Si l'instruction n'est pas finalisée automatiquement
6297     if ($inst_instruction->getVal('om_final_instruction') !== 't') {
6298     $href = str_replace("&action=3", "&action=1", $href);
6299     //
6300     if (strpos($href, "&retour=tab") !== false) {
6301     $href = str_replace("&retour=tab", "&retour= form", $href);
6302     } else {
6303     $href .= "&retour=form";
6304     }
6305     }
6306     }
6307    
6308     //
6309     return $href;
6310     }
6311    
6312     }// fin classe

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26