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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6929 - (hide annotations)
Thu Jun 15 16:57:15 2017 UTC (7 years, 7 months ago) by softime
File size: 249304 byte(s)
* Merge de la 4.2.0

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26