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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7366 - (hide annotations)
Tue Aug 8 09:19:57 2017 UTC (7 years, 5 months ago) by softime
File size: 253137 byte(s)
* Merge de la branche d'intégration 4.4.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 softime 7366 $form->setType('dossier', 'hidden');
419 mbroquet 3730 $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 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($inst_di->getVal('om_collectivite')) === true
1728 fmichon 4708 && $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 softime 7366 WHERE (evenement=".$evenement." OR evenement IS NULL)
3724 mbroquet 3730 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 softime 7067 $retour['complement_om_html'] .= $temp . "<br/><br/>";
3861 mbroquet 3730 } // 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 softime 7366 WHERE (evenement =".$event." or evenement IS NULL) and
3906 mbroquet 3730 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 softime 7366 // Sinon si les dates ne sont pas valides
3962     elseif ($f->get_submitted_post_value("bordereau") === "bordereau_avis_maire_prefet"
3963     && $f->getParameter("id_evenement_bordereau_avis_maire_prefet") == null) {
3964     // Si aucune date n'a été saisie
3965     $message_class = "error";
3966     $message = _("Erreur de parametrage. Contactez votre administrateur.");
3967     }
3968 mbroquet 3730 // Affiche le message de validation
3969     else {
3970     // On récupère le libellé du bordereau pour l'afficher à l'utilisateur
3971     $sql = "SELECT om_etat.libelle
3972     FROM ".DB_PREFIXE."om_etat
3973     WHERE om_etat.id = '".$f->get_submitted_post_value("bordereau")."'";
3974     $res = $f->db->getone($sql);
3975     $f->addToLog(__METHOD__.": db->getone(\"".$sql."\")", VERBOSE_MODE);
3976     $f->isDatabaseError($res);
3977     //
3978     $message_class = "valid";
3979     $message = _("Cliquez sur le lien ci-dessous pour telecharger votre bordereau");
3980     $message .= " : <br/><br/>";
3981     $message .= "<a class='om-prev-icon pdf-16'";
3982     $message .= " title=\""._("Bordereau")."\"";
3983 nmeucci 4317 $message .= "href='../scr/form.php?obj=instruction";
3984     $message .= "&action=220";
3985     $message .= "&idx=0";
3986     $message .= "&type_bordereau=".$f->get_submitted_post_value("bordereau");
3987     $message .= "&date_bordereau_debut=".$f->get_submitted_post_value("date_bordereau_debut");
3988 mbroquet 3730 $message .= "&date_bordereau_fin=".$f->get_submitted_post_value("date_bordereau_fin");
3989     // Si l'utilisateur est MULTI alors on ajoute le paramètre collectivite
3990     if ($f->get_submitted_post_value("om_collectivite") !== null) {
3991     $message .= "&collectivite=".$f->get_submitted_post_value("om_collectivite");
3992     }
3993     $message .= "'"." target='_blank'>";
3994     $message .= $res." "._("du")." ".$f->get_submitted_post_value("date_bordereau_debut")
3995     ." "._("au")." ".$f->get_submitted_post_value("date_bordereau_fin");
3996     $message .= "</a>";
3997     }
3998     }
3999    
4000     /**
4001     * Affichage des messages et du formulaire
4002     */
4003     // Affichage du message de validation ou d'erreur
4004     if (isset($message) && isset($message_class) && $message != "") {
4005     $f->displayMessage($message_class, $message);
4006     }
4007     // Inclusion de la classe de gestion des formulaires
4008     require_once "../obj/om_formulaire.class.php";
4009     // Ouverture du formulaire
4010     printf("\t<form");
4011     printf(" method=\"post\"");
4012     printf(" id=\"suivi_bordereaux_form\"");
4013     printf(" action=\"\"");
4014     printf(">\n");
4015     // Paramétrage des champs du formulaire
4016     $champs = array("date_bordereau_debut", "date_bordereau_fin", "bordereau");
4017     // Si l'utilisateur est d'une collectivité de niveau 2 on affiche un select
4018     // collectivité dans le formulaire
4019     if($_SESSION["niveau"] == 2) {
4020     array_push($champs, "om_collectivite");
4021     }
4022     // Création d'un nouvel objet de type formulaire
4023     $form = new formulaire(NULL, 0, 0, $champs);
4024     // Paramétrage du champ date_bordereau_debut
4025     $form->setLib("date_bordereau_debut", _("date_bordereau_debut"));
4026     $form->setType("date_bordereau_debut", "date");
4027     $form->setTaille("date_bordereau_debut", 12);
4028     $form->setMax("date_bordereau_debut", 12);
4029     $form->setRequired("date_bordereau_debut");
4030     $form->setOnchange("date_bordereau_debut", "fdate(this)");
4031     $form->setVal("date_bordereau_debut", date("d/m/Y"));
4032     // Paramétrage du champ date_bordereau_fin
4033     $form->setLib("date_bordereau_fin", _("date_bordereau_fin"));
4034     $form->setType("date_bordereau_fin", "date");
4035     $form->setTaille("date_bordereau_fin", 12);
4036     $form->setMax("date_bordereau_fin", 12);
4037     $form->setRequired("date_bordereau_fin");
4038     $form->setOnchange("date_bordereau_fin", "fdate(this)");
4039     $form->setVal("date_bordereau_fin", date("d/m/Y"));
4040     // Paramétrage du champ bordereau
4041     $form->setLib("bordereau", _("bordereau"));
4042     $form->setType("bordereau", "select");
4043     $form->setRequired("bordereau");
4044     // Valeurs des champs
4045     if ($f->get_submitted_post_value("validation") !== null) {
4046     $form->setVal("date_bordereau_debut", $f->get_submitted_post_value("date_bordereau_debut"));
4047     $form->setVal("date_bordereau_fin", $f->get_submitted_post_value("date_bordereau_fin"));
4048     $form->setVal("bordereau", $f->get_submitted_post_value("bordereau"));
4049     $form->setVal("om_collectivite", $f->get_submitted_post_value("om_collectivite"));
4050     }
4051     // Données du select - On récupère ici la liste de tous les états disponibles
4052     // dans la table om_etat qui ont un id qui commence par la cahine de caractères
4053     // 'bordereau_'
4054     $sql = "SELECT om_etat.id, om_etat.libelle
4055     FROM ".DB_PREFIXE."om_etat
4056     WHERE om_etat.id LIKE 'bordereau_%'
4057     ORDER BY om_etat.id";
4058     $res = $f->db->query($sql);
4059     $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
4060     $f->isDatabaseError($res);
4061     // Données du select
4062     $contenu = array(
4063     0 => array("", ),
4064     1 => array(_("choisir bordereau")),
4065     );
4066     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
4067     $contenu[0][] = $row['id'];
4068     $contenu[1][] = $row['libelle'];
4069     }
4070     $form->setSelect("bordereau", $contenu);
4071     //
4072     if($_SESSION["niveau"] == 2) {
4073     $form->setLib("om_collectivite", _("collectivite"));
4074     $form->setType("om_collectivite", "select");
4075    
4076     // Données du select - On récupère ici la liste de tous toutes les collectivités
4077     // de niveau 1
4078     $sql = "SELECT om_collectivite, libelle
4079     FROM ".DB_PREFIXE."om_collectivite
4080     WHERE niveau = '1' ORDER BY libelle";
4081     $res = $f->db->query($sql);
4082     $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
4083     $f->isDatabaseError($res);
4084     // La valeur par défaut du select est Toutes
4085     $list_collectivites = array(
4086     0 => array("", ),
4087     1 => array(_("toutes"))
4088     );
4089    
4090     $id_colls = "";
4091     // On stocke dans $id_colls l'id de toutes les collectivités de niveau 1 séparées
4092     // par des virgules, pour un traitement plus facile dans la requête de sous-état
4093     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
4094     if ($id_colls != "") {
4095     $id_colls .= ",";
4096     }
4097     $id_colls .= $row['om_collectivite'];
4098     $list_collectivites[0][] = $row['om_collectivite'];
4099     $list_collectivites[1][] = $row['libelle'];
4100     }
4101     // On affecte la liste d'identifiants à l'option Toutes
4102     $list_collectivites[0][0] = $id_colls ;
4103     $form->setSelect("om_collectivite", $list_collectivites);
4104     }
4105    
4106     // Affichage du formulaire
4107     $form->entete();
4108     $form->afficher($champs, 0, false, false);
4109     $form->enpied();
4110     // Affichage du bouton
4111     printf("\t<div class=\"formControls\">\n");
4112     $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
4113     printf("\t</div>\n");
4114     // Fermeture du formulaire
4115     printf("\t</form>\n");
4116    
4117     }
4118    
4119 nmeucci 4317
4120     /**
4121     * VIEW - view_generate_suivi_bordereaux.
4122     *
4123     * Génère et affiche les bordereaux de suivi.
4124     *
4125     * @return [void]
4126     */
4127     function view_generate_suivi_bordereaux() {
4128     // Vérification de l'accessibilité sur l'élément
4129     $this->checkAccessibility();
4130     // Récupération du type de bordereau
4131     $bordereau = $this->f->get_submitted_get_value('type_bordereau');
4132     // Génération du PDF
4133     $result = $this->compute_pdf_output('etat', $bordereau, null, $this->getVal($this->clePrimaire));
4134     // Affichage du PDF
4135     $this->expose_pdf_output(
4136     $result['pdf_output'],
4137     $result['filename']
4138     );
4139     }
4140    
4141    
4142 mbroquet 3730 /**
4143     * VIEW - view_suivi_envoi_lettre_rar.
4144     *
4145     * Vu pour imprimer les RAR.
4146     *
4147     * @return void
4148     */
4149     function view_suivi_envoi_lettre_rar() {
4150     // Vérification de l'accessibilité sur l'élément
4151     $this->checkAccessibility();
4152    
4153     // XXX APP
4154    
4155     $f = $this->f;
4156    
4157     //
4158     if ($f->get_submitted_post_value("date") !== null) {
4159     $date = $f->get_submitted_post_value("date");
4160     } else {
4161     $date = "";
4162     }
4163     //
4164     if ($f->get_submitted_post_value("liste_code_barres_instruction") !== null) {
4165     $liste_code_barres_instruction = $f->get_submitted_post_value("liste_code_barres_instruction");
4166     } else {
4167     $liste_code_barres_instruction = "";
4168     }
4169    
4170     // Compteur du nombre de page générées
4171     $nbLettres = 0;
4172     // Liste d'id des instructions
4173     $id4Gen = array();
4174     //
4175     $error = "";
4176    
4177 softime 5504 // Initialisation du tableau qui va contenir les DI pour lister les liens
4178     $dossierTab = array();
4179     // On vérifie que l'utilisateur ait les droits pour afficher des consultations
4180     $isAccredited = $this->f->isAccredited(array("dossier_instruction","dossier_instruction_consulter"), "OR");
4181     $hasHidden = true;
4182     // S'il ne peut pas les consulter il aura des dossiers caché
4183     if ($isAccredited === true) {
4184     $hasHidden = false;
4185     }
4186    
4187 mbroquet 3730 /**
4188     * Validation du formulaire
4189     */
4190     // Si le formulaire a été validé
4191     if ($f->get_submitted_post_value('validation') !== null) {
4192     //
4193     if (empty($date) || empty($liste_code_barres_instruction)) {
4194     //
4195     $message_class = "error";
4196     $message = _("Tous les champs doivent etre remplis.");
4197     } else {
4198     // Création d'un tableau d'instruction
4199     $liste = explode("\r\n", $f->get_submitted_post_value("liste_code_barres_instruction"));
4200     //
4201     foreach ($liste as $code_barres) {
4202     // On enlève les éventuels espaces saisis
4203     $code_barres = trim($code_barres);
4204     // Vérification de l'existence de l'instruction
4205     if ($code_barres != "") {
4206     // Si la valeur transmise est numérique
4207     if (is_numeric($code_barres)) {
4208     //
4209 softime 6565 $sql = "SELECT count(*)
4210     FROM ".DB_PREFIXE."instruction
4211     INNER JOIN ".DB_PREFIXE."dossier
4212     ON dossier.dossier=instruction.dossier
4213     INNER JOIN ".DB_PREFIXE."dossier_instruction_type
4214     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
4215     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
4216     ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
4217     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
4218     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
4219     INNER JOIN ".DB_PREFIXE."groupe
4220     ON dossier_autorisation_type.groupe = groupe.groupe
4221     WHERE code_barres='".$this->f->db->escapesimple($code_barres)."'";
4222 softime 7067
4223     // Ajout d'un filtre sur les groupes auxquels l'utilisateur a accès
4224     $group_clause = array();
4225     foreach ($_SESSION["groupe"] as $key => $value) {
4226     $group_clause[$key] = "(groupe.code = '".$key."'";
4227     if($value["confidentiel"] !== true) {
4228     $group_clause[$key] .= " AND dossier_autorisation_type.confidentiel IS NOT TRUE";
4229     }
4230     $group_clause[$key] .= ")";
4231     }
4232     $conditions = implode(" OR ", $group_clause);
4233     $sql .= " AND (" . $conditions . ")";
4234    
4235 mbroquet 3730 $nbInstr = $f->db->getone($sql);
4236     $f->addToLog(__METHOD__.": db->getone(\"".$sql."\")", VERBOSE_MODE);
4237     $f->isDatabaseError($nbInstr);
4238     //
4239     if ($nbInstr == "1") {
4240     // Récupération de la date d'envoi de l'instruction bippé
4241     $sql = "SELECT to_char(date_envoi_rar,'DD/MM/YYYY') as date_envoi_rar, instruction FROM ".DB_PREFIXE."instruction WHERE code_barres='".$code_barres."'";
4242     $res = $f->db->query($sql);
4243     $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
4244     $f->isDatabaseError($res);
4245     $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
4246     // Si pas de date ou correspond à la date du formulaire on
4247     // effectue le traitement
4248     if ($row["date_envoi_rar"] == "" || $row["date_envoi_rar"] == $date) {
4249    
4250     require_once '../obj/instruction.class.php';
4251 softime 5504 require_once '../obj/dossier.class.php';
4252 mbroquet 3730
4253     $instr = new instruction($row['instruction'], $f->db, DEBUG);
4254     $valF = array();
4255     foreach($instr->champs as $id => $champ) {
4256     $valF[$champ] = $instr->val[$id];
4257     }
4258 softime 5504
4259     # Si on peut consulter les dossiers et que le dossier n'existe pas déjà dans la liste
4260     if ($isAccredited === true
4261     && array_key_exists($instr->getVal("dossier"), $dossierTab) === false) {
4262     $dossier = new dossier($instr->getVal("dossier"));
4263     if ($dossier->is_user_from_allowed_collectivite()){
4264     $dossierTab[$instr->getVal("dossier")] = $dossier;
4265     } else {
4266     $hasHidden = true;
4267     }
4268     }
4269    
4270 mbroquet 3730 $valF['date_evenement']=
4271     $instr->dateDBToForm($valF['date_evenement']);
4272     $valF['archive_date_complet']=
4273     $instr->dateDBToForm($valF['archive_date_complet']);
4274     $valF['archive_date_rejet']=
4275     $instr->dateDBToForm($valF['archive_date_rejet']);
4276     $valF['archive_date_limite']=
4277     $instr->dateDBToForm($valF['archive_date_limite']);
4278     $valF['archive_date_notification_delai']=
4279     $instr->dateDBToForm($valF['archive_date_notification_delai']);
4280     $valF['archive_date_decision']=
4281     $instr->dateDBToForm($valF['archive_date_decision']);
4282     $valF['archive_date_validite']=
4283     $instr->dateDBToForm($valF['archive_date_validite']);
4284     $valF['archive_date_achevement']=
4285     $instr->dateDBToForm($valF['archive_date_achevement']);
4286     $valF['archive_date_chantier']=
4287     $instr->dateDBToForm($valF['archive_date_chantier']);
4288     $valF['archive_date_conformite']=
4289     $instr->dateDBToForm($valF['archive_date_conformite']);
4290     $valF['archive_date_dernier_depot']=
4291     $instr->dateDBToForm($valF['archive_date_dernier_depot']);
4292     $valF['archive_date_limite_incompletude']=
4293     $instr->dateDBToForm($valF['archive_date_limite_incompletude']);
4294     $valF['date_finalisation_courrier']=
4295     $instr->dateDBToForm($valF['date_finalisation_courrier']);
4296     $valF['date_envoi_signature']=
4297     $instr->dateDBToForm($valF['date_envoi_signature']);
4298     $valF['date_retour_signature']=
4299     $instr->dateDBToForm($valF['date_retour_signature']);
4300     $valF['date_envoi_rar']=
4301     $instr->dateDBToForm($valF['date_envoi_rar']);
4302     $valF['date_retour_rar']=
4303     $instr->dateDBToForm($valF['date_retour_rar']);
4304     $valF['date_envoi_controle_legalite']=
4305     $instr->dateDBToForm($valF['date_envoi_controle_legalite']);
4306     $valF['date_retour_controle_legalite']=
4307     $instr->dateDBToForm($valF['date_retour_controle_legalite']);
4308     $valF['date_envoi_rar'] = $date;
4309    
4310     // Vérification de la finalisation du document
4311     // correspondant au code barres
4312     if($instr->getVal("om_final_instruction") === 't') {
4313     $instr->setParameter('maj', 1);
4314 nmeucci 3971 $instr->class_actions[1]["identifier"] =
4315     "envoi lettre RAR (depuis le menu suivi des pièces)";
4316 mbroquet 3730 if ($instr->modifier($valF, $f->db, DEBUG) == true) {
4317     $id4Gen[] = $code_barres;
4318     $nbLettres ++;
4319     } else {
4320     //
4321     if ($error != "") {
4322     $error .= "<br/>";
4323     }
4324     $error .= sprintf(_("Une erreur s'est produite lors de la modification de l'instruction %s."),
4325     $code_barres);
4326     $error .= " ";
4327     $error .= _("Veuillez contacter votre administrateur.");
4328     }
4329     } else {
4330     //
4331     if ($error != "") {
4332     $error .= "<br/>";
4333     }
4334     $error .= sprintf(_("Le document correspondant au
4335     code barres %s n'est pas finalise,
4336     le bordereau ne sera pas genere."),
4337     $code_barres);
4338     }
4339    
4340     } else {
4341     //
4342     if ($error != "") {
4343     $error .= "<br/>";
4344     }
4345     $error .= _("Une lettre correspondante a l'instruction ayant pour code barres")." ".$code_barres." "._("a deja ete envoyee, le bordereau ne sera pas genere.");
4346     }
4347     } else {
4348     //
4349     if ($error != "") {
4350     $error .= "<br/>";
4351     }
4352     $error .= _("Le numero")." ".$code_barres." "._("ne correspond a aucun code barres d'instruction.");
4353     }
4354     } else {
4355     //
4356     if ($error != "") {
4357     $error .= "<br/>";
4358     }
4359     $error .= _("Le code barres d'instruction")." ".$code_barres." "._("n'est pas valide.");
4360     }
4361     }
4362     }
4363     }
4364     }
4365    
4366     /**
4367     * Affichage des messages et du formulaire
4368     */
4369     // Affichage du message de validation ou d'erreur
4370     if (isset($message) && isset($message_class) && $message != "") {
4371     $f->displayMessage($message_class, $message);
4372     }
4373     // Affichage du message d'erreur
4374     if(!empty($error)) {
4375     $f->displayMessage("error", $error);
4376     }
4377     // Affichage du message de validation de la saisie
4378     if ($nbLettres > 0) {
4379     //
4380 softime 5504 echo "\n<div class=\"message ui-widget ui-corner-all ui-state-highlight ui-state-valid\" >";
4381     echo "\n<p>";
4382     echo "\n<span class=\"ui-icon ui-icon-info\"></span>";
4383     echo "\n<span class=\"text\">";
4384     echo _("Cliquez sur le lien ci-dessous pour telecharger votre document");
4385     echo " : \n<br/><br/>";
4386     echo "\n<a class='om-prev-icon pdf-16'";
4387     echo "\n title=\""._("imprimer les RAR")."\"";
4388     echo "\n href=\"../scr/form.php?obj=instruction&action=180&idx=0&liste=".implode(",",$id4Gen)."\"";
4389     echo "\n target='_blank'>";
4390     echo _("Telecharger le document pour")." ".$nbLettres." "._("RAR");
4391     echo "\n</a>";
4392     echo "\n</span>";
4393     echo "\n</p>";
4394     echo "\n<br/>\n";
4395     if ($isAccredited === true) {
4396     echo '<fieldset id="fieldset-form-rar-lien_di" class="cadre ui-corner-all startClosed" style="background-color: inherite;">';
4397     echo "\n<legend class=\"ui-corner-all ui-widget-content ui-state-active\" style=\"background-color: transparent; color: inherit;\">\n";
4398     echo _('Dossiers concernés par ce traitement');
4399     echo "\n</legend>";
4400     echo "\n<div class=\"fieldsetContent\" style=\"display: none;background-color: inherite\">";
4401    
4402     if ($hasHidden === true) {
4403     echo "\n<br/>";
4404     echo "\n<p>";
4405     echo "\n<span class='text'>";
4406     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.");
4407     echo "</span>";
4408     echo "\n</p>";
4409     echo "\n<br/>";
4410     }
4411     foreach ($dossierTab as $dossier) {
4412 softime 7067
4413     $inst_da = $this->get_inst_common("dossier_autorisation", $dossier->getVal('dossier_autorisation'));
4414     $inst_datd = $this->get_inst_common("dossier_autorisation_type_detaille", $inst_da->getVal('dossier_autorisation_type_detaille'));
4415     $code_datd = $inst_datd->getVal('code');
4416    
4417     $obj = "dossier_instruction";
4418     if ($code_datd === 'REC' OR $code_datd === 'REG') {
4419     $obj = "dossier_contentieux_tous_recours";
4420     }
4421     if ($code_datd === 'IN') {
4422     $obj = "dossier_contentieux_toutes_infractions";
4423     }
4424    
4425 softime 5504 echo "\n<div class=\"bloc group\">";
4426     echo "\n<div class=\"field field-type-text\">";
4427    
4428     echo "\n<p>";
4429     echo "\n<span class='text'>";
4430     echo "\n<a class=\"om-icon om-icon-16 consult-16\" title=\"" . _('Consulter') . "\"";
4431     echo "\n href=\"../scr/form.php?obj=dossier_instruction&action=3&idx=";
4432     echo $dossier->getVal("dossier");
4433     echo "\">";
4434     echo "\n</a>";
4435    
4436     echo "\n<a title=\""._("Consulter")."\" style=\"vertical-align:middle;\"";
4437 softime 7067 echo " href=\"../scr/form.php?obj=";
4438     echo $obj;
4439     echo "&action=3&idx=";
4440 softime 5504 echo $dossier->getVal("dossier");
4441     echo "\">";
4442     echo $dossier->getVal("dossier_libelle");
4443     echo "\n</a>";
4444     echo "\n</span>";
4445     echo "\n</p>";
4446    
4447     echo "\n</div>";
4448     echo "\n</div>";
4449     }
4450     echo "\n</div>";
4451     echo "\n</fieldset>";
4452     }
4453     echo "\n</div>";
4454     echo "\n</div>";
4455 mbroquet 3730 }
4456     // Inclusion de la classe de gestion des formulaires
4457     require_once "../obj/om_formulaire.class.php";
4458     // Ouverture du formulaire
4459     echo "\t<form";
4460     echo " method=\"post\"";
4461     echo " id=\"suivi_envoi_lettre_rar_form\"";
4462     echo " action=\"\"";
4463     echo ">\n";
4464     // Paramétrage des champs du formulaire
4465     $champs = array("date", "liste_code_barres_instruction");
4466     // Création d'un nouvel objet de type formulaire
4467     $form = new formulaire(NULL, 0, 0, $champs);
4468     // Paramétrage du champ date du formulaire
4469     $form->setLib("date", _("Date")."* :");
4470     $form->setType("date", "date");
4471     $form->setOnchange("date", "fdate(this)");
4472     $form->setVal("date", ($date == "" ? date("d/m/Y") : $date));
4473     $form->setTaille("date", 10);
4474     $form->setMax("date", 10);
4475     // Paramétrage du champ liste_code_barres_instruction du formulaire
4476     $form->setLib("liste_code_barres_instruction", _("Liste des codes barres d'instructions scannes")."* :");
4477     $form->setType("liste_code_barres_instruction", "textarea");
4478     $form->setVal("liste_code_barres_instruction", $liste_code_barres_instruction);
4479     $form->setTaille("liste_code_barres_instruction", 20);
4480     $form->setMax("liste_code_barres_instruction", 20);
4481     // Affichage du formulaire
4482     $form->entete();
4483     $form->afficher($champs, 0, false, false);
4484     $form->enpied();
4485     // Affichage du bouton
4486     echo "\t<div class=\"formControls\">\n";
4487     $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
4488     echo "\t</div>\n";
4489     // Fermeture du formulaire
4490     echo "\t</form>\n";
4491     }
4492    
4493     /**
4494     * VIEW - view_suivi_mise_a_jour_des_dates.
4495     *
4496     * Vu pour mettre à jour les dates de suivi de l'instruction.
4497     *
4498     * @return void
4499     */
4500     function view_suivi_mise_a_jour_des_dates() {
4501     // Vérification de l'accessibilité sur l'élément
4502     $this->checkAccessibility();
4503    
4504     // XXX APP
4505    
4506     $f = $this->f;
4507    
4508     // Récupération des valeur passées en POST ou GET
4509     if($f->get_submitted_post_value("type_mise_a_jour") !== null) {
4510     $type_mise_a_jour = $f->get_submitted_post_value("type_mise_a_jour");
4511     } elseif($f->get_submitted_get_value('type_mise_a_jour') !== null) {
4512     $type_mise_a_jour = $f->get_submitted_get_value('type_mise_a_jour');
4513     } else {
4514     $type_mise_a_jour = "";
4515     }
4516     if($f->get_submitted_post_value('date') !== null) {
4517     $date = $f->get_submitted_post_value('date');
4518     } elseif($f->get_submitted_get_value('date') !== null) {
4519     $date = $f->get_submitted_get_value('date');
4520     } else {
4521     $date = "";
4522     }
4523     if($f->get_submitted_post_value('code_barres') !== null) {
4524     $code_barres = $f->get_submitted_post_value('code_barres');
4525     } elseif($f->get_submitted_get_value('code_barres') !== null) {
4526     $code_barres = $f->get_submitted_get_value('code_barres');
4527     } else {
4528     $code_barres = "";
4529     }
4530     // Booléen permettant de définir si un enregistrement à eu lieu
4531     $correct = false;
4532     // Booléen permettant de définir si les dates peuvent êtres enregistrées
4533     $date_error = false;
4534     // Champs date à mettre à jour
4535     $liste_champs=array();
4536    
4537     // Si le formulaire a été validé
4538     if ($f->get_submitted_post_value('validation') !== null) {
4539     if(!empty($type_mise_a_jour) and !empty($date) and !empty($code_barres)) {
4540    
4541 softime 6565 // Vérification de l'existence de l'instruction
4542     $sql = "SELECT instruction
4543     FROM ".DB_PREFIXE."instruction
4544     INNER JOIN ".DB_PREFIXE."dossier
4545     ON dossier.dossier=instruction.dossier
4546     INNER JOIN ".DB_PREFIXE."dossier_instruction_type
4547     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
4548     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
4549     ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
4550     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
4551     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
4552     INNER JOIN ".DB_PREFIXE."groupe
4553     ON dossier_autorisation_type.groupe = groupe.groupe
4554     WHERE code_barres='".$this->f->db->escapesimple($code_barres)."'";
4555 softime 7067
4556     // Ajout d'un filtre sur les groupes auxquels l'utilisateur a accès
4557     $group_clause = array();
4558     foreach ($_SESSION["groupe"] as $key => $value) {
4559     $group_clause[$key] = "(groupe.code = '".$key."'";
4560     if($value["confidentiel"] !== true) {
4561     $group_clause[$key] .= " AND dossier_autorisation_type.confidentiel IS NOT TRUE";
4562     }
4563     $group_clause[$key] .= ")";
4564     }
4565     $conditions = implode(" OR ", $group_clause);
4566     $sql .= " AND (" . $conditions . ")";
4567    
4568    
4569 mbroquet 3730 $res = $f->db->query($sql);
4570     $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
4571     $f->isDatabaseError($res);
4572    
4573     if($res->numrows() == 1) {
4574     $liste_champs = explode(";", $type_mise_a_jour);
4575     // Mise à jour des dates après l'écran de verification
4576     if($f->get_submitted_post_value('is_valid') !== null and $f->get_submitted_post_value('is_valid') == "true") {
4577     require_once '../obj/instruction.class.php';
4578     $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
4579     $instr = new instruction($row['instruction'], $f->db, DEBUG);
4580     $valF = array();
4581     foreach($instr->champs as $id => $champ) {
4582     $valF[$champ] = $instr->val[$id];
4583     }
4584 softime 6565 $valF['date_evenement'] = $instr->dateDBToForm($valF['date_evenement']);
4585     $valF['archive_date_complet'] = $instr->dateDBToForm($valF['archive_date_complet']);
4586     $valF['archive_date_rejet'] = $instr->dateDBToForm($valF['archive_date_rejet']);
4587     $valF['archive_date_limite'] = $instr->dateDBToForm($valF['archive_date_limite']);
4588     $valF['archive_date_notification_delai'] = $instr->dateDBToForm($valF['archive_date_notification_delai']);
4589     $valF['archive_date_decision'] = $instr->dateDBToForm($valF['archive_date_decision']);
4590     $valF['archive_date_validite'] = $instr->dateDBToForm($valF['archive_date_validite']);
4591     $valF['archive_date_achevement'] = $instr->dateDBToForm($valF['archive_date_achevement']);
4592     $valF['archive_date_chantier'] = $instr->dateDBToForm($valF['archive_date_chantier']);
4593     $valF['archive_date_conformite'] = $instr->dateDBToForm($valF['archive_date_conformite']);
4594     $valF['archive_date_dernier_depot'] = $instr->dateDBToForm($valF['archive_date_dernier_depot']);
4595     $valF['archive_date_limite_incompletude'] = $instr->dateDBToForm($valF['archive_date_limite_incompletude']);
4596     $valF['date_finalisation_courrier'] = $instr->dateDBToForm($valF['date_finalisation_courrier']);
4597     $valF['date_envoi_signature'] = $instr->dateDBToForm($valF['date_envoi_signature']);
4598     $valF['date_retour_signature'] = $instr->dateDBToForm($valF['date_retour_signature']);
4599     $valF['date_envoi_rar'] = $instr->dateDBToForm($valF['date_envoi_rar']);
4600     $valF['date_retour_rar'] = $instr->dateDBToForm($valF['date_retour_rar']);
4601     $valF['date_envoi_controle_legalite'] = $instr->dateDBToForm($valF['date_envoi_controle_legalite']);
4602     $valF['date_retour_controle_legalite'] = $instr->dateDBToForm($valF['date_retour_controle_legalite']);
4603     $valF['archive_date_cloture_instruction'] = $instr->dateDBToForm($valF['archive_date_cloture_instruction']);
4604     $valF['archive_date_premiere_visite'] = $instr->dateDBToForm($valF['archive_date_premiere_visite']);
4605     $valF['archive_date_derniere_visite'] = $instr->dateDBToForm($valF['archive_date_derniere_visite']);
4606     $valF['archive_date_contradictoire'] = $instr->dateDBToForm($valF['archive_date_contradictoire']);
4607     $valF['archive_date_retour_contradictoire'] = $instr->dateDBToForm($valF['archive_date_retour_contradictoire']);
4608     $valF['archive_date_ait'] = $instr->dateDBToForm($valF['archive_date_ait']);
4609     $valF['archive_date_transmission_parquet'] = $instr->dateDBToForm($valF['archive_date_transmission_parquet']);
4610 mbroquet 3730
4611     foreach(explode(";", $type_mise_a_jour) as $maj_date) {
4612     $valF[$maj_date]=$date;
4613     }
4614    
4615     // Vérification de la finalisation du document
4616     // correspondant au code barres
4617     if($valF["om_final_instruction"] === 't' or
4618     $valF["lettretype"] == '') {
4619     $code_barres = "";
4620    
4621     //Désactivation de l'autocommit
4622     $f->db->autoCommit(false);
4623    
4624     //On modifie les valeurs de l'instruction
4625     $instr->setParameter('maj', 170);
4626 nmeucci 3965 $instr->class_actions[170]["identifier"] =
4627 nmeucci 3972 "mise à jour des dates (depuis le menu suivi des pièces)";
4628 mbroquet 3730 $retour = $instr->modifier($valF, $f->db, DEBUG);
4629    
4630     //Si une erreur s'est produite, on défait les modifications
4631     //qui ont été faites
4632     if (!$retour){
4633     $instr->undoValidation();
4634     }
4635     //Sinon, on valide en base de données les modifications
4636     else {
4637     $f->db->commit();
4638     }
4639    
4640     // Variable correct retourné depuis la classe instruction
4641     $correct = $instr->correct;
4642    
4643     // Si la modification sur l'instruction a échoué
4644     if ($correct === false) {
4645    
4646     // Message d'erreur de la classe instruction
4647     $error = $instr->msg;
4648     }
4649    
4650     } else {
4651     // Indique que le traitement est en erreur
4652     $correct = false;
4653     // Message d'erreur
4654     $error = sprintf(_("Le document n'est pas finalise."),
4655     "<span class='bold'>".$code_barres."</span>");
4656     }
4657     } else {
4658     // Récupération des infos du dossier
4659     $sqlInfo = "SELECT dossier.dossier_libelle,
4660     evenement.libelle as evenement,
4661     autorite_competente.code as autorite_competente_code,
4662     autorite_competente.libelle as autorite_competente,
4663     evenement.type as evenement_type,
4664     to_char(date_envoi_signature,'DD/MM/YYYY') as date_envoi_signature,
4665     to_char(date_retour_signature,'DD/MM/YYYY') as date_retour_signature,
4666     to_char(date_envoi_controle_legalite,'DD/MM/YYYY') as date_envoi_controle_legalite,
4667     to_char(date_retour_controle_legalite,'DD/MM/YYYY') as date_retour_controle_legalite,
4668     to_char(date_envoi_rar,'DD/MM/YYYY') as date_envoi_rar,
4669     to_char(date_retour_rar,'DD/MM/YYYY') as date_retour_rar
4670     FROM ".DB_PREFIXE."instruction
4671     INNER JOIN ".DB_PREFIXE."dossier ON
4672     dossier.dossier=instruction.dossier
4673     LEFT JOIN ".DB_PREFIXE."autorite_competente ON
4674     dossier.autorite_competente=autorite_competente.autorite_competente
4675     INNER JOIN ".DB_PREFIXE."evenement ON
4676     instruction.evenement=evenement.evenement
4677     WHERE code_barres='".$code_barres."'";
4678     $resInfo = $f->db->query($sqlInfo);
4679     $f->isDatabaseError($resInfo);
4680     $infos = $resInfo->fetchRow(DB_FETCHMODE_ASSOC);
4681    
4682     // Vérification de la non modification des dates de suivi
4683     foreach(explode(";", $type_mise_a_jour) as $champ) {
4684     if($infos[$champ] != "" AND $infos[$champ] != $date) {
4685     $error = _("Les dates de suivis ne peuvent etre modifiees");
4686     $date_error = true;
4687     }
4688     }
4689     }
4690     } else {
4691     $error = _("Le numero saisi ne correspond a aucun code barres d'instruction.");
4692     }
4693    
4694     } else {
4695     $error = _("Tous les champs doivent etre remplis.");
4696     }
4697     }
4698    
4699     /**
4700     * Affichage des messages et du formulaire
4701     */
4702     // Affichage du message de validation ou d'erreur
4703     if (isset($message) && isset($message_class) && $message != "") {
4704     $f->displayMessage($message_class, $message);
4705     }
4706     // Affichage du message d'erreur
4707     if(!empty($error)) {
4708     $f->displayMessage("error", $error);
4709     }
4710    
4711     // Affichage du message de validation de la saisie
4712     if($correct === true) {
4713     $f->displayMessage("ok", _("Saisie enregistree"));
4714     }
4715     // Inclusion de la classe de gestion des formulaires
4716     require_once "../obj/om_formulaire.class.php";
4717     // Ouverture du formulaire
4718     echo "\t<form";
4719     echo " method=\"post\"";
4720     echo " id=\"suivi_mise_a_jour_des_dates_form\"";
4721     echo " action=\"\"";
4722     echo ">\n";
4723     // Paramétrage des champs du formulaire
4724     if(isset($infos)) {
4725     $champs = array("type_mise_a_jour", "date", "code_barres", "dossier_libelle", "evenement"
4726     , "autorite_competente", "date_envoi_signature",
4727     "date_retour_signature", "date_envoi_controle_legalite",
4728     "date_retour_controle_legalite", "date_envoi_rar",
4729     "date_retour_rar", "is_valid");
4730     } else {
4731     $champs = array("type_mise_a_jour", "date", "code_barres");
4732     }
4733     // Création d'un nouvel objet de type formulaire
4734     $form = new formulaire(NULL, 0, 0, $champs);
4735     // Paramétrage des champs du formulaire
4736     // Parametrage du champ type_mise_a_jour
4737     $form->setLib("type_mise_a_jour", _("Date a mettre a jour")."* :");
4738     if(isset($infos)) {
4739     $form->setType("type_mise_a_jour", "selecthiddenstatic");
4740    
4741     } else {
4742     $form->setType("type_mise_a_jour", "select");
4743    
4744     }
4745     $form->setVal("type_mise_a_jour", $type_mise_a_jour);
4746     $contenu = array();
4747    
4748     $contenu[0][0] = "date_envoi_signature";
4749     $contenu[1][0] = _("date d'envoi pour signature Mairie/Prefet");
4750    
4751     $contenu[0][1] = "date_retour_signature";
4752     $contenu[1][1] = _("date de retour de signature Mairie/Prefet");
4753    
4754     $contenu[0][2] = "date_retour_signature;date_envoi_controle_legalite";
4755     $contenu[1][2] = _("date de retour de signature + Envoi controle legalite");
4756    
4757     $contenu[0][3] = "date_envoi_controle_legalite";
4758     $contenu[1][3] = _("date d'envoi au controle de legalite");
4759    
4760     $contenu[0][4] = "date_retour_controle_legalite";
4761     $contenu[1][4] = _("date de retour de controle de legalite");
4762    
4763     $contenu[0][5] = "date_retour_rar";
4764     $contenu[1][5] = _("date de retour de l'AR");
4765    
4766     $form->setSelect("type_mise_a_jour", $contenu);
4767    
4768     // Parametrage du champ date
4769     $form->setLib("date", _("Date")."* :");
4770     if(isset($infos)) {
4771     $form->setType("date", "hiddenstaticdate");
4772    
4773     } else {
4774     $form->setType("date", "date");
4775     }
4776     $form->setVal("date", $date);
4777     $form->setTaille("date", 10);
4778     $form->setMax("date", 10);
4779    
4780     // Parametrage du champ code_barres
4781     $form->setLib("code_barres", _("Code barres d'instruction")."* :");
4782     if(isset($infos)) {
4783     $form->setType("code_barres", "hiddenstatic");
4784     } else {
4785     $form->setType("code_barres", "text");
4786     }
4787     $form->setVal("code_barres", $code_barres);
4788     $form->setTaille("code_barres", 20);
4789     $form->setMax("code_barres", 20);
4790    
4791     // Ajout des infos du dossier correspondantes à l'instruction séléctionnée
4792     if(isset($infos)) {
4793    
4794     // Tous les champs sont défini par defaut à static
4795     foreach ($infos as $key => $value) {
4796     $form->setType($key, "static");
4797     if(in_array($key, $liste_champs)) {
4798     $form->setVal($key, $date);
4799     } else {
4800     $form->setVal($key, $value);
4801     }
4802     }
4803    
4804     // Les champs dont on viens de définir la valeur sont en gras
4805     foreach ($liste_champs as $value) {
4806     $form->setBloc($value,'DF',"",'bold');
4807     }
4808    
4809     // Parametrage du champ dossier
4810     $form->setLib("dossier_libelle", _("dossier_libelle")." :");
4811     $form->setType("dossier_libelle", "static");
4812     $form->setVal("dossier_libelle", $infos['dossier_libelle']);
4813    
4814     // Parametrage du champ evenement
4815     $form->setLib("evenement", _("evenement")." :");
4816     $form->setType("evenement", "static");
4817     $form->setVal("evenement", $infos['evenement']);
4818    
4819     // Parametrage du champ autorite_competente
4820     $form->setLib("autorite_competente", _("Autorite competente")." :");
4821     $form->setType("autorite_competente", "static");
4822     $form->setVal("autorite_competente", $infos['autorite_competente']);
4823    
4824     // Parametrage des libellés d'envoi avec RAR
4825     $form->setLib("date_envoi_rar", _("date_envoi_rar")." :");
4826     $form->setLib("date_retour_rar", _("date_retour_rar")." :");
4827    
4828     $form->setLib("date_envoi_signature", _("date_envoi_signature")." :");
4829     $form->setLib("date_retour_signature", _("date_retour_signature")." :");
4830     $form->setLib("date_envoi_controle_legalite", _("date_envoi_controle_legalite")." :");
4831     $form->setLib("date_retour_controle_legalite", _("date_retour_controle_legalite")." :");
4832     // Configuration des libellé en fonction de l'autorité compétente
4833     if($infos['autorite_competente_code'] == 'ETAT') {
4834     $form->setType("date_envoi_controle_legalite", "hiddendate");
4835     $form->setType("date_retour_controle_legalite", "hiddendate");
4836     }
4837    
4838     // Ajout d'un champ hidden permettant de savoir que le formulaire précédant est celui de vérification
4839     $form->setLib("is_valid", _("Valide")." :");
4840     $form->setType("is_valid", "hidden");
4841     $form->setVal("is_valid", 'true');
4842    
4843     $form->setFieldset('dossier_libelle','D',_('Synthese'));
4844     $form->setFieldset('is_valid','F');
4845    
4846     }
4847    
4848    
4849     // Création du fieldset regroupant les champs permettant la mise à jour des date
4850     $form->setFieldset('type_mise_a_jour','D',_('Mise a jour'));
4851     $form->setFieldset('code_barres','F');
4852     // Affichage du formulaire
4853     $form->entete();
4854     $form->afficher($champs, 0, false, false);
4855     $form->enpied();
4856     // Affichage du bouton
4857     echo "\t<div class=\"formControls\">\n";
4858     //
4859     if(!$date_error) {
4860     $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
4861     }
4862     // Si pas sur l'écran de validation
4863     if(isset($infos)) {
4864     echo "<a class=\"retour\" href=\"../scr/form.php?obj=instruction_suivi_mise_a_jour_des_dates&action=170&idx=0";
4865     echo "&amp;type_mise_a_jour=".$type_mise_a_jour."&amp;date=".$date."&amp;code_barres=".$code_barres;
4866     echo "\">Retour</a>";
4867     }
4868     echo "\t</div>\n";
4869     // Fermeture du formulaire
4870     echo "\t</form>\n";
4871     }
4872    
4873     /**
4874     * [view_pdf_lettre_rar description]
4875     *
4876     * @return [type] [description]
4877     */
4878     function view_pdf_lettre_rar() {
4879     // Vérification de l'accessibilité sur l'élément
4880     $this->checkAccessibility();
4881    
4882     // XXX APP
4883    
4884     $f = $this->f;
4885    
4886     $f->disableLog();
4887    
4888     if($f->get_submitted_get_value('liste') != null) {
4889     $listeCodeBarres = explode(',',$f->get_submitted_get_value('liste'));
4890    
4891     // Classe permettant la mise en page de l'édition pdf
4892     require_once "../obj/pdf_lettre_rar.class.php";
4893     $pdf_lettre_rar = new pdf_lettre_rar('P', 'mm', 'A4');
4894     // Initialisation de la mise en page
4895     $pdf_lettre_rar->init($f);
4896    
4897 softime 7067 require_once "../obj/dossier.class.php";
4898    
4899 mbroquet 3730 foreach ($listeCodeBarres as $code_barres) {
4900    
4901 softime 7067 // On récupère le dossier
4902     $sql = "SELECT dossier
4903     FROM " . DB_PREFIXE . "instruction
4904     WHERE code_barres = '" . $code_barres . "'";
4905     $dossier = $this->db->getOne($sql);
4906     $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
4907     $this->f->isDatabaseError($dossier);
4908     $inst_dossier = new dossier($dossier);
4909    
4910     // En fonction du type de dossier, on récupère un demandeur différent dans les requêtes
4911     $groupe = $inst_dossier->get_type_affichage_formulaire();
4912     switch ($groupe) {
4913     case 'CTX IN':
4914     $sql_demandeur = "(lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='plaignant')";
4915     break;
4916     case 'CTX RE':
4917     $sql_demandeur = "(lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='requerant')";
4918     break;
4919     case 'ADS':
4920     case 'DPC':
4921     default:
4922     $sql_demandeur = "((lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='petitionnaire') OR demandeur.type_demandeur='delegataire')";
4923     break;
4924     }
4925    
4926 mbroquet 3730 // Test si l'evenement est de type arrete et si un délégataire a été nommé
4927     $sql = "SELECT
4928     dossier.dossier_libelle,
4929     evenement.type,
4930 softime 3834 count(lien_dossier_demandeur) as nbdemandeur,
4931     CASE
4932     WHEN division.libelle IS NOT NULL AND phase.code IS NOT NULL
4933     THEN CONCAT(phase.code, ' - ', division.libelle)
4934     ELSE
4935     phase.code
4936     END AS code_phase
4937 mbroquet 3730 FROM ".DB_PREFIXE."instruction
4938     LEFT JOIN ".DB_PREFIXE."dossier
4939     ON instruction.dossier = dossier.dossier
4940 softime 3834 LEFT JOIN ".DB_PREFIXE."division
4941     ON dossier.division = division.division
4942 mbroquet 3730 INNER JOIN ".DB_PREFIXE."evenement ON
4943 softime 3834 instruction.evenement=evenement.evenement
4944     LEFT JOIN ".DB_PREFIXE."phase
4945     ON evenement.phase = phase.phase
4946 mbroquet 3730 inner JOIN ".DB_PREFIXE."lien_dossier_demandeur ON
4947     instruction.dossier=lien_dossier_demandeur.dossier
4948     inner join ".DB_PREFIXE."demandeur on
4949     demandeur.demandeur=lien_dossier_demandeur.demandeur
4950     WHERE code_barres='".$code_barres."'
4951 softime 7067 AND " . $sql_demandeur . "
4952 softime 3834 GROUP BY dossier.dossier_libelle, evenement.type, phase.code, division.libelle";
4953 mbroquet 3730
4954     $res = $f->db->query($sql);
4955     $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
4956     $f->isDatabaseError($res);
4957     $testDemandeur = $res->fetchrow(DB_FETCHMODE_ASSOC);
4958    
4959    
4960     // Recuperation de l'adresse de destination
4961     $sqlAdresse = "SELECT
4962     CASE WHEN demandeur.qualite='particulier'
4963     THEN TRIM(CONCAT_WS(' ', pc.libelle, demandeur.particulier_nom, demandeur.particulier_prenom))
4964     ELSE TRIM(demandeur.personne_morale_denomination)
4965     END as ligne1,
4966     CASE WHEN demandeur.qualite='personne_morale'
4967     THEN TRIM(demandeur.personne_morale_raison_sociale)
4968     ELSE ''
4969     END as ligne1_1,
4970     CASE WHEN demandeur.qualite='personne_morale' AND (demandeur.personne_morale_nom IS NOT NULL OR demandeur.personne_morale_prenom IS NOT NULL)
4971     THEN TRIM(CONCAT_WS(' ', 'rep. par', demandeur.personne_morale_nom, demandeur.personne_morale_prenom))
4972     ELSE ''
4973     END as ligne1_2,
4974     trim(concat(demandeur.numero,' ',demandeur.voie)) as ligne2,
4975     CASE demandeur.complement
4976     WHEN null THEN ''
4977     ELSE trim(demandeur.complement)
4978     END as ligne3,
4979     CASE demandeur.lieu_dit
4980     WHEN null THEN ''
4981     ELSE trim(demandeur.lieu_dit)
4982     END as ligne4,
4983     CONCAT_WS(' ', demandeur.code_postal, demandeur.localite,
4984     (CASE WHEN demandeur.bp IS NOT NULL
4985     THEN CONCAT_WS(' ', 'BP', demandeur.bp)
4986     ELSE ''
4987     END),
4988     (CASE WHEN demandeur.cedex IS NOT NULL
4989     THEN CONCAT_WS(' ', 'CEDEX', demandeur.cedex)
4990     ELSE ''
4991     END))
4992     as ligne5,
4993     code_barres as code_barres
4994     FROM ".DB_PREFIXE."instruction
4995     INNER JOIN ".DB_PREFIXE."dossier ON dossier.dossier = instruction.dossier
4996     INNER JOIN ".DB_PREFIXE."lien_dossier_demandeur ON dossier.dossier = lien_dossier_demandeur.dossier
4997     INNER JOIN ".DB_PREFIXE."demandeur ON lien_dossier_demandeur.demandeur = demandeur.demandeur
4998     LEFT OUTER JOIN ".DB_PREFIXE."civilite as pc ON demandeur.particulier_civilite = pc.civilite OR demandeur.personne_morale_civilite = pc.civilite
4999     WHERE instruction.code_barres ='".$code_barres."'";
5000    
5001     // Envoi pour delegataire ou petitionnaire principal selon le type d'evenement
5002     if($testDemandeur['type'] != 'arrete' AND $testDemandeur['nbdemandeur'] > 1) {
5003     $sqlAdresse .= " AND demandeur.type_demandeur='delegataire'";
5004     } else {
5005 softime 7067 $sqlAdresse .= " AND " . $sql_demandeur;
5006 mbroquet 3730 }
5007    
5008     $resAdresse = $f->db->query($sqlAdresse);
5009     $adresse_dest = $resAdresse->fetchrow(DB_FETCHMODE_ASSOC);
5010     $f->addToLog(__METHOD__.": db->query(\"".$sqlAdresse."\")", VERBOSE_MODE);
5011     $f->isDatabaseError($resAdresse);
5012    
5013     // Création adresse destinataire sans ligne vide
5014     $adresse_destinataire = array();
5015     if (!empty($adresse_dest['ligne1'])) {
5016     $adresse_destinataire[] = $adresse_dest['ligne1'];
5017     }
5018     if (!empty($adresse_dest['ligne1_1'])) {
5019     $adresse_destinataire[] = $adresse_dest['ligne1_1'];
5020     }
5021     if (!empty($adresse_dest['ligne1_2'])) {
5022     $adresse_destinataire[] = $adresse_dest['ligne1_2'];
5023     }
5024     $adresse_destinataire[] = $adresse_dest['ligne2'];
5025     if (!empty($adresse_dest['ligne3'])) {
5026     $adresse_destinataire[] = $adresse_dest['ligne3'];
5027     }
5028     if (!empty($adresse_dest['ligne4'])) {
5029     $adresse_destinataire[] = $adresse_dest['ligne4'];
5030     }
5031     $adresse_destinataire[] = $adresse_dest['ligne5'];
5032    
5033     // Création du champ specifique
5034     $specifique_content = array();
5035     $specifique_content[] = $adresse_dest['ligne1'];
5036     $specifique_content[] = $adresse_dest['ligne1_1'];
5037     $specifique_content[] = $adresse_dest['ligne1_2'];
5038     $specifique_content[] = $testDemandeur['dossier_libelle'];
5039     $specifique_content[] = "|||||".$adresse_dest['code_barres']."|||||";
5040     unset($adresse_dest['code_barres']);
5041     // Ajout d'une page aux pdf
5042 softime 3834 $pdf_lettre_rar->addLetter($adresse_destinataire, $specifique_content, $testDemandeur['code_phase']);
5043 mbroquet 3730
5044     }
5045     $pdf_output = $pdf_lettre_rar->output("lettre_rar".date("dmYHis").".pdf","S");
5046     require_once PATH_OPENMAIRIE."om_edition.class.php";
5047     $om_edition = new edition();
5048     $om_edition->expose_pdf_output($pdf_output, "lettre_rar".date("dmYHis").".pdf");
5049     }
5050     }
5051    
5052     /**
5053     * VIEW - view_bordereau_envoi_maire.
5054     *
5055     * Formulaire demandant :
5056     * - le code-barres de l'événement d'instruction
5057     * - la date d'envoi du courrier pour signature par le maire
5058     *
5059     * Lors de la validation :
5060     * => met à jour cette date dans l'événement d'instruction
5061     * => crée un lien permettant de générer en PDF le bordereau
5062     *
5063     * @return void
5064     */
5065     function view_bordereau_envoi_maire() {
5066     // Vérification de l'accessibilité sur l'élément
5067     $this->checkAccessibility();
5068    
5069     // Récupération des valeur passées en POST ou GET
5070     $code_barres = "";
5071     if($this->f->get_submitted_post_value('code_barres') !== null) {
5072     $code_barres = $this->f->get_submitted_post_value('code_barres');
5073     } elseif($this->f->get_submitted_get_value('code_barres')!==null) {
5074     $code_barres = $this->f->get_submitted_get_value('code_barres');
5075     }
5076     $date = "";
5077     if($this->f->get_submitted_post_value('date') !== null) {
5078     $date = $this->f->get_submitted_post_value('date');
5079     } elseif($this->f->get_submitted_get_value('date') !== null) {
5080     $date = $this->f->get_submitted_get_value('date');
5081     }
5082     $validation = 0;
5083     if($this->f->get_submitted_post_value('validation') !== null) {
5084     $validation = $this->f->get_submitted_post_value('validation');
5085     } elseif($this->f->get_submitted_get_value('validation') !== null) {
5086     $validation = $this->f->get_submitted_get_value('validation');
5087     }
5088    
5089     // Si le formulaire a été validé
5090     if ($this->f->get_submitted_post_value('validation') !== null) {
5091     // Tous les champs doivent obligatoirement être remplis
5092     if (!empty($date) && !empty($code_barres)) {
5093     $date_en = $this->dateDB($date);
5094     // Si date valide
5095     if ($date_en != "") {
5096     $id_instruction = $this->get_instruction_by_barcode($code_barres);
5097     // Si un événement d'instruction a été trouvé pour ce code-barres
5098     if ($id_instruction !== null) {
5099     $ret = $this->update_date_envoi_signature($id_instruction, $date_en);
5100     // Si mise à jour réussie de la date d'envoi du courrier
5101     // pour signature par l'autorité compétente
5102     if($ret === true) {
5103     // Message de validation avec lien PDF
5104     $message_class = "valid";
5105     $message = '&bullet; '._("Veuillez cliquer sur le lien ci-dessous pour telecharger votre bordereau");
5106     $message .= " : <br/><br/>";
5107     $message .= "<a class='om-prev-icon pdf-16'";
5108     $message .= " id=\"generer_bordereau_envoi_maire\"";
5109     $message .= " title=\""._("Bordereau")."\"";
5110     $message .= " href='../scr/form.php?obj=instruction";
5111     $message .= "&action=200";
5112     $message .= "&idx=".$id_instruction."'";
5113     $message .= " target='_blank'>";
5114     $message .= _("Bordereau d'envoi au maire");
5115     $message .= "</a><br/><br/>";
5116     $message .= '&bullet; '._("Rappel des informations saisies")." :<br/><br/>";
5117     $message .= _("Code du courrier")." : ".$code_barres."<br/>";
5118     $message .= _("Date d'envoi du courrier pour signature par le maire")." : ".$date;
5119    
5120     } else {
5121     // Message d'erreur
5122     $message_class = "error";
5123     $message = sprintf(_("Erreur lors de la mise a jour de l'evenement d'instruction correspondant au code barres %s."),
5124     $code_barres);
5125     }
5126     }
5127     else {
5128     $message_class = "error";
5129     $message = _("Le numero saisi ne correspond a aucun code-barres d'evenement d'instruction.");
5130     }
5131     }
5132     else {
5133     $message_class = "error";
5134     $message = _("La date est invalide.");
5135     }
5136     } else {
5137     $message_class = "error";
5138     $message = _("Tous les champs doivent etre remplis.");
5139     }
5140     }
5141    
5142     /**
5143     * Affichage des messages et du formulaire
5144     */
5145    
5146     // Affichage du message de validation ou d'erreur
5147     if (isset($message) && isset($message_class) && $message != "") {
5148     $this->f->displayMessage($message_class, $message);
5149     }
5150    
5151     // Inclusion de la classe de gestion des formulaires
5152     require_once "../obj/om_formulaire.class.php";
5153     // Ouverture du formulaire
5154     $datasubmit = $this->getDataSubmit();
5155     echo "\n<!-- ########## START DBFORM ########## -->\n";
5156     echo "<form";
5157     echo " id=\"bordereau_envoi_maire\"";
5158     echo " method=\"post\"";
5159     echo " name=\"f1\"";
5160     echo " action=\"";
5161     echo $datasubmit;
5162     echo "\"";
5163     echo ">\n";
5164    
5165     // Paramétrage des champs du formulaire
5166     $champs = array("code_barres","date");
5167    
5168     // Création d'un nouvel objet de type formulaire
5169     $form = new formulaire(NULL, 0, 0, $champs);
5170    
5171     $template_required_label = '%s *';
5172     // Parametrage du champ code_barres
5173     $form->setLib("code_barres", sprintf($template_required_label,_("Code du courrier")));
5174     $form->setType("code_barres", "text");
5175     $form->setVal("code_barres", $code_barres);
5176     $form->setTaille("code_barres", 20);
5177     $form->setMax("code_barres", 20);
5178     // Parametrage du champ date
5179     $form->setLib("date", sprintf($template_required_label,_("Date d'envoi du courrier pour signature par le maire")));
5180     $form->setType("date", "date") ;
5181     if (empty($date)) {
5182     $date = date('d/m/Y');
5183     }
5184     $form->setVal("date", $date);
5185     $form->setTaille("date", 10);
5186     $form->setMax("date", 10);
5187    
5188     // Création du bloc regroupant les champs
5189     $form->setBloc('code_barres','D');
5190     $form->setBloc('date','F');
5191     // Affichage du formulaire
5192     $form->entete();
5193     $form->afficher($champs, 0, false, false);
5194     $form->enpied();
5195     // Affichage du bouton
5196     printf("\t<div class=\"formControls\">\n");
5197     //
5198     $this->f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
5199     printf("\t</div>\n");
5200     // Fermeture du formulaire
5201     printf("\t</form>\n");
5202     }
5203    
5204     /**
5205     * VIEW - view_bordereau_envoi_maire.
5206     *
5207     * PDF de bordereau d'envoi au maire pour l'événement d'instruction instancié
5208     *
5209     * @return [void]
5210     */
5211     function view_generate_bordereau_envoi_maire() {
5212     // Vérification de l'accessibilité sur l'élément
5213     $this->checkAccessibility();
5214     // Récupération de la collectivité du dossier d'instruction
5215     $collectivite_di = $this->get_dossier_instruction_om_collectivite();
5216     // Récupération de ses paramètres
5217     $collectivite = $this->f->getCollectivite($collectivite_di);
5218     // Génération du PDF
5219     $result = $this->compute_pdf_output('etat', 'communaute_bordereau_envoi_maire', $collectivite, $this->getVal(($this->clePrimaire)));
5220     // Affichage du PDF
5221     $this->expose_pdf_output(
5222     $result['pdf_output'],
5223     $result['filename']
5224     );
5225     }
5226    
5227     /**
5228 softime 6565 * Retourne l'événement d'instruction dont on donne le code-barres, avec un filtre
5229     * pour exclure les dossiers du groupe contentieux.
5230 mbroquet 3730 *
5231     * @param [string] $barcode numéro du code-barres
5232     * @return [mixed] ID de son instruction ou null si aucun code
5233     */
5234     function get_instruction_by_barcode($barcode) {
5235     // Begin
5236     $this->begin_treatment(__METHOD__);
5237     // Vérification de l'existence de l'événement d'instruction
5238 softime 6565 // pour le code-barres donné, en excluant les dossiers liés au groupe CTX
5239 mbroquet 3730 $sql = "SELECT instruction
5240 softime 6565 FROM ".DB_PREFIXE."instruction
5241     INNER JOIN ".DB_PREFIXE."dossier
5242     ON dossier.dossier=instruction.dossier
5243     INNER JOIN ".DB_PREFIXE."dossier_instruction_type
5244     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
5245     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
5246     ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
5247     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
5248     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
5249     INNER JOIN ".DB_PREFIXE."groupe
5250     ON dossier_autorisation_type.groupe = groupe.groupe
5251     AND groupe.code != 'CTX'
5252     WHERE code_barres = '".$this->f->db->escapesimple($barcode)."'";
5253 mbroquet 3730 $res = $this->f->db->getOne($sql);
5254     $this->f->addToLog(__METHOD__." : db->getOne(\"".$sql."\")", VERBOSE_MODE);
5255     $this->f->isDatabaseError($res);
5256     // Retourne résultat
5257     return $this->end_treatment(__METHOD__, $res);
5258     }
5259    
5260     /**
5261     * Met à jour le champ date d'envoi signature
5262     * avec la date fournie et pour l'instruction donnée
5263     *
5264     * @param [string] $id ID de l'événement d'instruction
5265     * @param [string] $date date au format EN
5266     * @return [boolean] true si mise à jour avec succès
5267     */
5268     function update_date_envoi_signature($id, $date) {
5269     // Préparation du tableau
5270     $valF = array();
5271     $valF['date_envoi_signature'] = $date;
5272     // Begin
5273     $this->begin_treatment(__METHOD__);
5274     // Requête
5275     $res = $this->db->autoExecute(
5276     DB_PREFIXE.$this->table,
5277     $valF,
5278     DB_AUTOQUERY_UPDATE,
5279     $this->getCle($id)
5280     );
5281     // S'il y a eu une erreur
5282     if (database::isError($res, true)) {
5283     $this->end_treatment(__METHOD__, false);
5284     }
5285     //
5286     return $this->end_treatment(__METHOD__, true);
5287     }
5288    
5289     /**
5290     * Méthode permettant de définir des valeurs à envoyer en base après
5291     * validation du formulaire d'ajout.
5292     * @param array $val tableau des valeurs retournées par le formulaire
5293     */
5294 softime 6929 function setValFAjout($val = array()) {
5295 mbroquet 3730 // Mise à jour du flag created_by_commune lors d'un changement de décision
5296     // par un utilisateur de commune sur un dossier instruit par la comcom
5297 softime 6565 if ($this->isInstrCanChangeDecision($this->valF["dossier"])) {
5298 mbroquet 3730 $this->valF['created_by_commune'] = true;
5299     }
5300     }
5301 nmeucci 3876
5302 fmichon 3892
5303 fmichon 4708 /**
5304     * Récupère l'instance d'un événement de workflow.
5305     *
5306     * @param mixed $evenement Identifiant de l'événement.
5307     *
5308     * @return object
5309     */
5310     function get_inst_evenement($evenement = null) {
5311     //
5312     return $this->get_inst_common("evenement", $evenement);
5313     }
5314 softime 3976
5315 fmichon 3892 /**
5316 softime 3976 * Logue l'action de l'instruction dans son DI.
5317 nmeucci 3933 *
5318 softime 3976 * @param string $id Clé primaire de l'instruction.
5319     * @param array $val Valeurs de l'instruction.
5320     *
5321     * @return bool Vrai si traitement effectué avec succès
5322 nmeucci 3876 */
5323 softime 3976 private function add_log_to_dossier($id, array $val) {
5324 nmeucci 3933 $maj = $this->getParameter("maj");
5325 nmeucci 3943 // Action = Trace par défaut
5326     $action = $this->get_backtrace();
5327     // Action = Identifant de l'action si contexte connu
5328     if (empty($maj) === false
5329     || (empty($maj) === true && $maj === 0)) {
5330     $action = $this->get_action_param($maj, 'identifier');
5331 nmeucci 3965 if ($action === 'modifier_suivi') {
5332     $action = "modifier (via l'action suivi des dates)";
5333     }
5334 nmeucci 4108 if ($action === 'notifier_commune'
5335     && isset($val['mails_destinataires']) === true) {
5336     $action = "notification de la commune (courriels : ";
5337     $action .= $val['mails_destinataires'].")";
5338     }
5339 nmeucci 3943 }
5340 nmeucci 3876 // Création du log
5341     $log = array(
5342     'date' => date('Y-m-d H:i:s'),
5343     'user' => $_SESSION['login'],
5344     'action' => $action,
5345     'values' => array(
5346     'date_evenement' => $this->dateDB($val['date_evenement']),
5347     'date_retour_rar' => $this->dateDB($val['date_retour_rar']),
5348     'date_retour_signature' => $this->dateDB($val['date_retour_signature']),
5349     'evenement' => $val['evenement'],
5350     'action' => $val['action'],
5351 nmeucci 3963 'instruction' => $id,
5352 nmeucci 3876 'etat' => $val['etat'],
5353     ),
5354     );
5355     // Ajout du log
5356 softime 3976 $di = $this->get_inst_dossier($val['dossier']);
5357 nmeucci 3876 $ret = $di->add_log_instructions($log);
5358     if ($ret === false) {
5359     $this->correct = false;
5360     $this->msg = '';
5361     $this->addToMessage($di->msg);
5362     }
5363     return $ret;
5364     }
5365 nmeucci 3943
5366 softime 3976
5367 nmeucci 3943 /**
5368 softime 3976 * Retourne le contexte de déboguage formaté en HTML.
5369 nmeucci 3943 *
5370 softime 3976 * @return string Une ligne par trace
5371 nmeucci 3943 */
5372     private function get_backtrace() {
5373     $trace = debug_backtrace();
5374 nmeucci 3957 $backtrace = '';
5375     $i = 1;
5376 nmeucci 3943 foreach ($trace as $key => $value) {
5377 nmeucci 3957 $func = $trace[$key]['function'];
5378     // On ne s'autolog pas
5379     if ($func === 'get_backtrace'
5380     || $func === 'add_log_to_dossier') {
5381     continue;
5382     }
5383     $backtrace .= $i.') ';
5384     // Si dans une classe
5385     if (isset($trace[$key]['class']) === true
5386     && empty($trace[$key]['class']) === false) {
5387 nmeucci 3963 $backtrace .= $trace[$key]['class'].'->'.$func;
5388 nmeucci 3957 }
5389     // Si procédural
5390     else {
5391     $file = $trace[$key]['file'];
5392 nmeucci 3963 $line = $trace[$key]['line'];
5393 softime 3976 $truncated_file = $this->f->get_relative_path($file);
5394 nmeucci 3963 if ($truncated_file !== false) {
5395     $file = $truncated_file;
5396     }
5397     $backtrace .= $func.' IN<br/>&nbsp;&nbsp;&nbsp;&nbsp; '.$file.':'.$line;
5398 nmeucci 3957 }
5399     $backtrace .= '<br/>';
5400     $i++;
5401 nmeucci 3943 }
5402 nmeucci 3957 return $backtrace;
5403 nmeucci 3943 }
5404 nmeucci 3963
5405 nmeucci 4108 /**
5406     * CONDITION - is_notifiable.
5407     *
5408     * Condition pour afficher l'action notifier_commune.
5409     *
5410     * @return boolean
5411     */
5412     public function is_notifiable() {
5413     // L'instruction doit être finalisée, ce qui revient à dire
5414     // définalisable sans bypass
5415     if ($this->is_unfinalizable_without_bypass() === false) {
5416     return false;
5417     }
5418     // La collectivité de l'utilisateur doit être de niveau multi
5419     if ($this->f->has_collectivite_multi() === false) {
5420     return false;
5421     }
5422     // Le paramètre multi de l'objet du courriel doit exister
5423     if ($this->f->getParameter('param_courriel_de_notification_commune_objet_depuis_instruction') === NULL) {
5424     return false;
5425     }
5426     // Le paramètre multi du modèle du courriel doit exister
5427     if ($this->f->getParameter('param_courriel_de_notification_commune_modele_depuis_instruction') === NULL) {
5428     return false;
5429     }
5430     // A ce stade toutes les conditions sont satisfaites
5431     return true;
5432     }
5433 nmeucci 3963
5434 nmeucci 4108 /**
5435     * TREATMENT - notifier_commune.
5436     *
5437     * Notifie aux communes et par courriel la finalisation d'une instruction.
5438     *
5439     * @return boolean
5440     */
5441     public function notifier_commune() {
5442     // Cette méthode permet d'exécuter une routine en début des méthodes
5443     // dites de TREATMENT.
5444     $this->begin_treatment(__METHOD__);
5445     // Définition des paramètres
5446     $p_objet = 'param_courriel_de_notification_commune_objet_depuis_instruction';
5447     $p_modele = 'param_courriel_de_notification_commune_modele_depuis_instruction';
5448     $p_courriel = 'param_courriel_de_notification_commune';
5449     // Définition des variables de substitution
5450     $id_di = $this->getVal('dossier');
5451     $id_inst = $this->getVal($this->clePrimaire);
5452     // Instanciation du DI
5453     $di = $this->get_inst_dossier($id_di);
5454     // Récupération du paramétrage de la collectivité du dossier
5455     $collectivite_di = $di->getVal('om_collectivite');
5456     $params_mono = $this->f->getCollectivite($collectivite_di);
5457     // Récupération du paramétrage de la collectivité multi
5458     $collectivite_multi = $this->f->get_idx_collectivite_multi();
5459     $params_multi = $this->f->getCollectivite($collectivite_multi);
5460     // Vérification de l'objet (obligatoirement multi)
5461     $objet = null;
5462     if (isset($params_multi[$p_objet]) === true
5463     && $params_multi[$p_objet] !== '') {
5464     $objet = $params_multi[$p_objet];
5465     }
5466     // Vérification du modèle mono en priorité
5467     $modele = null;
5468     if (isset($params_mono[$p_modele]) === true
5469     && $params_mono[$p_modele] !== '') {
5470     $modele = $params_mono[$p_modele];
5471    
5472     }
5473     // Sinon vérification du modèle multi
5474     if ($modele === null
5475     && isset($params_multi[$p_modele]) === true
5476     && $params_multi[$p_modele] !== '') {
5477     $modele = $params_multi[$p_modele];
5478     }
5479     // Vérification des adresses de courriel mono
5480     $courriels_valides = array();
5481     $courriels_invalides = array();
5482     if (isset($params_mono[$p_courriel]) === true
5483     && $params_mono[$p_courriel] !== '') {
5484     // Un mail par ligne
5485     $adresses = explode("\n", $params_mono[$p_courriel]);
5486     // Vérification de la validité de chaque mail avec preg_match
5487     foreach ($adresses as $adresse) {
5488     $adresse = trim($adresse);
5489     if ($this->f->checkValidEmailAddress($adresse) === 1) {
5490     $courriels_valides[] = $adresse;
5491     } else {
5492     $courriels_invalides[] = $adresse;
5493     }
5494     }
5495     }
5496     // Vérification du paramétrage global :
5497     // on stoppe le traitement si au moins un paramètre est incorrect
5498     if ($objet === null
5499     || $modele === null
5500     || count($courriels_valides) === 0
5501     || count($courriels_invalides) > 0) {
5502     // On construit le message d'erreur adéquat
5503     $this->addToMessage(_('Erreur de paramétrage :'));
5504     if ($objet === null) {
5505     $this->addToMessage(_("* l'objet du courriel envoyé aux communes est vide"));
5506     }
5507     if ($modele === null) {
5508     $this->addToMessage(_("* le modèle du courriel envoyé aux communes est vide"));
5509     }
5510     if (count($courriels_valides) === 0) {
5511     $this->addToMessage(_("* aucun courriel valide de destinataire de la commune"));
5512     }
5513     if (count($courriels_invalides) > 0) {
5514     $courriels_invalides = implode(', ', $courriels_invalides);
5515     $this->addToMessage(_("* un ou plusieurs courriels des destinataires de la commune sont invalides : ").$courriels_invalides);
5516     }
5517     $this->addToMessage(_("Veuillez contacter votre administrateur."));
5518     return $this->end_treatment(__METHOD__, false);
5519     }
5520     // Remplacement des variables de substitution
5521     $objet = str_replace('<DOSSIER_INSTRUCTION>', $id_di, $objet);
5522     $modele = $this->formater_modele($modele, $id_di, $id_inst);
5523     // Exécution du traitement d'envoi du/des mail(s)
5524     $fails = array();
5525     foreach ($courriels_valides as $email) {
5526     if ($this->f->sendMail(
5527     iconv("UTF-8", "CP1252", $objet),
5528     iconv("UTF-8", "CP1252", $modele),
5529     iconv("UTF-8", "CP1252", $email)) === false) {
5530     $fails[] = $email;
5531     }
5532     }
5533     // Si échec message d'erreur et arrêt du traitement
5534     if (count($fails) > 0) {
5535     $fails = implode(', ', $fails);
5536     $this->addToMessage(_("Erreur lors de l'envoi du courriel aux destinataires : ").$fails);
5537     $this->addToMessage(_("Veuillez contacter votre administrateur."));
5538     return $this->end_treatment(__METHOD__, false);
5539     }
5540     // Ajout du log
5541     $this->setValFFromVal();
5542     $val_inst = $this->valF;
5543     $val_inst['mails_destinataires'] = implode(', ', $courriels_valides);
5544     if ($this->add_log_to_dossier($id_inst, $val_inst) === false) {
5545     $this->addToMessage(_("Erreur lors de la notification."));
5546     $this->addToMessage(_("Veuillez contacter votre administrateur."));
5547     return $this->end_treatment(__METHOD__, false);
5548     }
5549     // Message de validation
5550     $this->addToMessage(_('La commune a été notifiée.'));
5551     return $this->end_treatment(__METHOD__, true);
5552     }
5553    
5554     /**
5555     * Formatte le corps du courriel notifié aux communes
5556     *
5557     * @param string $modele template du modèle du courriel
5558     * @param string $id_di clé primaire du DI
5559     * @param string $id_inst clé primaire de l'instruction
5560     * @return string corps du mail au format HTML
5561     */
5562     public function formater_modele($modele, $id_di, $id_inst) {
5563     // Création du lien d'accès direct à l'instruction
5564     $url_inst = PATH_BASE_URL.'spg/direct_link.php?obj=dossier_instruction&action=3'.
5565     '&direct_field=dossier&direct_form=instruction&direct_action=3&direct_idx='.$id_inst;
5566     $url_inst = '<a href="'.$url_inst.'">'.$url_inst.'</a>';
5567     // Remplacement des champs de fusion
5568     $modele = str_replace('<DOSSIER_INSTRUCTION>', $id_di, $modele);
5569     $modele = str_replace('<URL_INSTRUCTION>', $url_inst, $modele);
5570     $modele = str_replace('<ID_INSTRUCTION>', $id_inst, $modele);
5571     // Encodage HTML des sauts de ligne
5572     $modele = preg_replace("/\r\n|\r|\n/",'<br/>',$modele);
5573     //
5574     return $modele;
5575     }
5576 softime 5169
5577    
5578     /**
5579     * Récupère l'instance de l'instructeur
5580     *
5581     * @param integer $instructeur Identifiant de l'instructeur.
5582     *
5583     * @return object
5584     */
5585     protected function get_inst_instructeur($instructeur) {
5586     //
5587     return $this->get_inst_common("instructeur", $instructeur);
5588     }
5589    
5590    
5591     /**
5592     * Récupère l'instance de l'utilisateur
5593     *
5594     * @param integer $om_utilisateur Identifiant de l'utilisateur.
5595     *
5596     * @return object
5597     */
5598     protected function get_inst_om_utilisateur($om_utilisateur) {
5599     //
5600     return $this->get_inst_common("om_utilisateur", $om_utilisateur);
5601     }
5602    
5603    
5604 softime 6565 /**
5605 softime 5295 * Récupère l'instance de la division.
5606     *
5607     * @param integer $division Identifiant de la division.
5608     *
5609     * @return object
5610     */
5611     protected function get_inst_division($division) {
5612     //
5613     return $this->get_inst_common("division", $division);
5614     }
5615    
5616    
5617     /**
5618     * Récupère l'instance de la direction.
5619     *
5620     * @param integer $direction Identifiant de la direction.
5621     *
5622     * @return object
5623     */
5624     protected function get_inst_direction($direction) {
5625     //
5626     return $this->get_inst_common("direction", $direction);
5627     }
5628    
5629    
5630     /**
5631     * Récupère la collectivité d'un instructeur en passant par sa division puis
5632     * par sa direction.
5633     *
5634     * @param integer $instructeur Identifiant de l'instructeur.
5635     *
5636     * @return integer
5637     */
5638     protected function get_instructeur_om_collectivite($instructeur) {
5639     // Chemin vers la collectivité d'un instructeur
5640     $inst_instr = $this->get_inst_instructeur($instructeur);
5641     $inst_division = $this->get_inst_division($inst_instr->getVal('division'));
5642     $inst_direction = $this->get_inst_direction($inst_division->getVal('direction'));
5643    
5644     // Collectivité
5645     $om_collectivite = $inst_direction->getVal('om_collectivite');
5646    
5647     //
5648     return $om_collectivite;
5649     }
5650    
5651 softime 6565 /*
5652     * CONDITION - can_user_access_dossier_contexte_ajout
5653     *
5654     * Vérifie que l'utilisateur a bien accès au dossier d'instruction passé dans le
5655     * formulaire d'ajout.
5656     * Cette méthode vérifie que l'utilisateur est lié au groupe du dossier, et si le
5657     * dossier est confidentiel qu'il a accès aux confidentiels de ce groupe.
5658     *
5659     */
5660     function can_user_access_dossier_contexte_ajout() {
5661 softime 5295
5662 softime 6565 ($this->f->get_submitted_get_value('idxformulaire') !== null ? $id_dossier =
5663     $this->f->get_submitted_get_value('idxformulaire') : $id_dossier = "");
5664     //
5665     if ($id_dossier !== "") {
5666     require_once "../obj/dossier_instruction.class.php";
5667     $dossier = new dossier_instruction($id_dossier, $f->db, DEBUG);
5668     //
5669     return $dossier->can_user_access_dossier();
5670     }
5671     return false;
5672     }
5673    
5674     /*
5675     * CONDITION - can_user_access_dossier
5676     *
5677     * Vérifie que l'utilisateur a bien accès au dossier lié à l'instruction instanciée.
5678     * Cette méthode vérifie que l'utilisateur est lié au groupe du dossier, et si le
5679     * dossier est confidentiel qu'il a accès aux confidentiels de ce groupe.
5680     *
5681     */
5682     function can_user_access_dossier_contexte_modification() {
5683    
5684     $id_dossier = $this->getVal('dossier');
5685     //
5686     if ($id_dossier !== "" && $id_dossier !== null) {
5687     require_once "../obj/dossier_instruction.class.php";
5688     $dossier = new dossier_instruction($id_dossier, $f->db, DEBUG);
5689     //
5690     return $dossier->can_user_access_dossier();
5691     }
5692     return false;
5693     }
5694    
5695 mbroquet 3730 }// fin classe
5696    
5697     ?>

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26