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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7521 - (hide annotations)
Thu Sep 21 15:55:37 2017 UTC (7 years, 4 months ago) by softime
File size: 260395 byte(s)
* Merge de la branche d'intégration 4.5.0

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26