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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6272 - (hide annotations)
Fri Mar 3 15:27:53 2017 UTC (7 years, 11 months ago) by softime
File size: 225290 byte(s)
* Merge de la branche 3.36.0

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26