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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7717 - (hide annotations)
Fri Feb 9 14:34:32 2018 UTC (6 years, 11 months ago) by softime
File size: 260997 byte(s)
* Merge de la version 4.6.1

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26