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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6063 - (hide annotations)
Thu Feb 9 17:29:05 2017 UTC (7 years, 11 months ago) by softime
File size: 224749 byte(s)
* Merge de la branche de développement de la 3.35.3.

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26