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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 8640 - (hide annotations)
Wed Mar 27 11:49:05 2019 UTC (5 years, 10 months ago) by softime
File size: 296791 byte(s)
* Merge de la branche d'intégration 4.11.0-develop dans le trunk

1 mbroquet 3730 <?php
2 softime 7996 /**
3     * DBFORM - 'dossier' - Surcharge gen.
4     *
5     * @package openads
6     * @version SVN : $$Id: dossier.class.php 6912 2017-06-15 08:20:09Z tuxayo $
7     */
8 mbroquet 3730
9 softime 6565 require_once "../gen/obj/dossier.class.php";
10 mbroquet 3730
11     class dossier extends dossier_gen {
12    
13     var $maj;
14     var $dossier_instruction_type;
15     var $is_incomplet_notifie = null;
16 softime 6565 var $valIdDemandeur = array("petitionnaire_principal" => array(),
17     "delegataire" => array(),
18     "petitionnaire" => array(),
19     "plaignant_principal" => array(),
20     "plaignant" => array(),
21     "contrevenant_principal" => array(),
22     "contrevenant" => array(),
23     "requerant_principal" => array(),
24     "requerant" => array(),
25     "avocat_principal" => array(),
26     "avocat" => array(),
27 softime 7067 "bailleur_principal" => array(),
28     "bailleur" => array(),
29 softime 6565 );
30     var $postedIdDemandeur = array("petitionnaire_principal" => array(),
31     "delegataire" => array(),
32     "petitionnaire" => array(),
33     "plaignant_principal" => array(),
34     "plaignant" => array(),
35     "contrevenant_principal" => array(),
36     "contrevenant" => array(),
37     "requerant_principal" => array(),
38     "requerant" => array(),
39     "avocat_principal" => array(),
40     "avocat" => array(),
41 softime 7067 "bailleur_principal" => array(),
42     "bailleur" => array(),
43 softime 6565 );
44 mbroquet 3730 /**
45     * Instance de la classe taxe_amenagement.
46     *
47     * @var null
48     */
49     var $inst_taxe_amenagement = null;
50    
51     /**
52     * Instance de la classe donnees_techniques.
53     *
54     * @var null
55     */
56     var $inst_donnees_techniques = null;
57    
58     /**
59     * Instance de la classe dossier_autorisation.
60     *
61     * @var mixed (resource | null)
62     */
63     var $inst_dossier_autorisation = null;
64    
65     /**
66     * Instance de la classe dossier_autorisation_type_detaille.
67     *
68     * @var null
69     */
70     var $inst_dossier_autorisation_type_detaille = null;
71    
72     /**
73     * Instance de la classe cerfa.
74     *
75     * @var null
76     */
77     var $inst_cerfa = null;
78    
79 softime 6565 /**
80     * Groupe du dossier d'instruction.
81     *
82     * @var null
83     */
84     var $groupe = null;
85 mbroquet 3730
86 softime 6565 /**
87     * Instance de la classe groupe.
88     */
89     var $inst_groupe = null;
90    
91     /**
92     * Instance de la classe dossier_autorisation_type.
93     *
94     * @var null
95     */
96     var $inst_dossier_autorisation_type = null;
97    
98 softime 7366 /**
99     * Instance de la classe demande.
100     *
101     * @var mixed (resource | null)
102     */
103     var $inst_demande = null;
104 mbroquet 3730
105     /*Mutateur pour ma variable dossier_instruction_type*/
106     public function getDossierInstructionType(){
107     return $this->dossier_instruction_type;
108     }
109     public function setDossierInstructionType($dossier_instruction_type){
110     $this->dossier_instruction_type = $dossier_instruction_type;
111     }
112    
113     /**
114     * Définition des actions disponibles sur la classe.
115     *
116     * @return void
117     */
118     function init_class_actions() {
119    
120     parent::init_class_actions();
121    
122     // ACTION - 003 - consulter
123     //
124 softime 6565 $this->class_actions[3]["condition"] = array(
125     "is_user_from_allowed_collectivite",
126     "check_context",
127     );
128 mbroquet 3730
129     // ACTION - 004 - contrainte
130     //
131     $this->class_actions[4] = array(
132     "identifier" => "contrainte",
133     "view" => "view_contrainte",
134     "permission_suffix" => "contrainte_tab",
135     "condition" => array(
136     "is_user_from_allowed_collectivite",
137     ),
138     );
139    
140     // ACTION - 005 - view_document_numerise
141     // Interface spécifique du tableau des pièces
142     $this->class_actions[5] = array(
143     "identifier" => "view_document_numerise",
144     "view" => "view_document_numerise",
145     "permission_suffix" => "document_numerise",
146     "condition" => array(
147     "is_user_from_allowed_collectivite",
148     ),
149     );
150    
151     // ACTION - 006 - view_sitadel
152     //
153     $this->class_actions[6] = array(
154     "identifier" => "sitadel",
155     "view" => "view_sitadel",
156     "permission_suffix" => "export_sitadel",
157     );
158 softime 6565
159     // ACTION - 777 - Redirection vers la classe fille adéquate
160     //
161     $this->class_actions[777] = array(
162     "identifier" => "redirect",
163     "view" => "redirect",
164     "permission_suffix" => "consulter",
165     );
166 mbroquet 3730 }
167    
168     /**
169     * VIEW - view_sitadel.
170     *
171     * @return void
172     */
173     function view_sitadel() {
174    
175     $post = $this->f->get_submitted_post_value();
176     // 1ere étape : affichage du formulaire permettant le choix d'un interval de date
177     // ainsi que le numéro de d'ordre qui est le numéro de la version de
178     // l'export
179     if (empty($post)) {
180     // Initialisation des variables
181     $datedebut = "";
182     $datefin = "";
183     $numero = "";
184     // Récupération des paramètres
185     if ($this->f->get_submitted_get_value("datedebut") !== null AND $this->f->get_submitted_get_value("datedebut") != "") {
186     $datedebut = substr($this->f->get_submitted_get_value("datedebut"),8,2)."/".substr($this->f->get_submitted_get_value("datedebut"),5,2)."/".substr($this->f->get_submitted_get_value("datedebut"),0,4);
187     }
188     if ($this->f->get_submitted_get_value("datefin") !== null AND $this->f->get_submitted_get_value("datefin") != "") {
189     $datefin = substr($this->f->get_submitted_get_value("datefin"),8,2)."/".substr($this->f->get_submitted_get_value("datefin"),5,2)."/".substr($this->f->get_submitted_get_value("datefin"),0,4);
190     }
191     if ($this->f->get_submitted_get_value("numero") !== null AND $this->f->get_submitted_get_value("numero") != "") {
192     $numero = $this->f->get_submitted_get_value("numero");
193     }
194     // Affichage du formulaire
195     $this->affichageFormulaire($datedebut, $datefin, $numero);
196     }
197     else {
198     // Initialisation des variables pour les messages de fin de traitement
199     $correct=true;
200     // Initialisation de la chaîne contenant le message d'erreur
201     $erreur = "";
202    
203     // Initialisation des dates de début et de fin
204     $datedebut ='';
205     $datefin='';
206    
207     // Traitement des erreurs
208     if ($this->f->get_submitted_post_value("datedebut") == "") {
209     $correct=false;
210     } else {
211     $datedebut = substr($this->f->get_submitted_post_value("datedebut"),6,4).
212     "-".substr($this->f->get_submitted_post_value("datedebut"),3,2)."-".
213     substr($this->f->get_submitted_post_value("datedebut"),0,2);
214     }
215     if ($this->f->get_submitted_post_value("datefin") == "") {
216     $correct=false;
217     } else {
218     $datefin = substr($this->f->get_submitted_post_value("datefin"),6,4).
219     "-".substr($this->f->get_submitted_post_value("datefin"),3,2)."-".
220     substr($this->f->get_submitted_post_value("datefin"),0,2);
221     }
222     $numero = $this->f->get_submitted_post_value("numero");
223     // Composition du tableau de paramètres pour le bouton retour
224     $params = array(
225 softime 7996 "href" => OM_ROUTE_FORM."&obj=sitadel&action=6&idx=0&datedebut=".$datedebut."&amp;datefin=".$datefin."&amp;numero=".$numero,
226 mbroquet 3730 );
227     //
228     if ($correct === true){ // ***
229     // Affichage du bouton retour
230     $this->f->layout->display_form_retour($params);
231     // Requête permettant de lister tous les dossiers de l'export
232     $sql= "SELECT dossier.dossier,
233     dossier.om_collectivite as collectivite,
234     dossier.dossier_autorisation,
235     dossier_instruction_type.mouvement_sitadel,
236     dossier_instruction_type.code as dossier_instruction_type_code,
237     dossier.date_depot,
238     dossier.date_decision,
239     dossier.date_chantier,
240     dossier.date_achevement,
241     dossier.terrain_references_cadastrales as dossier_terrain_references_cadastrales,
242     dossier.terrain_adresse_voie_numero as dossier_terrain_adresse_voie_numero,
243     dossier.terrain_adresse_voie as dossier_terrain_adresse_voie,
244     dossier.terrain_adresse_lieu_dit as dossier_terrain_adresse_lieu_dit,
245     dossier.terrain_adresse_localite as dossier_terrain_adresse_localite,
246     dossier.terrain_adresse_code_postal as dossier_terrain_adresse_code_postal,
247     dossier.terrain_adresse_bp as dossier_terrain_adresse_bp,
248     dossier.terrain_adresse_cedex as dossier_terrain_adresse_cedex,
249     dossier_autorisation_type.code,
250     dossier.date_limite,
251     dossier.date_limite_incompletude,
252     dossier.date_notification_delai,
253     dossier.terrain_superficie as dossier_terrain_superficie,
254 softime 7996 dossier.date_modification,
255     dossier.hash_sitadel,
256 mbroquet 3730
257     arrondissement.code_impots as code_impots,
258    
259     autorite_competente.autorite_competente_sitadel,
260     pp.type_demandeur,
261     pp.qualite,
262     civilite_pp.libelle as civilite_pp,
263     pp.particulier_nom as pp_particulier_nom,
264     pp.particulier_prenom as pp_particulier_prenom,
265     pp.personne_morale_denomination as pp_personne_morale_denomination,
266     pp.personne_morale_raison_sociale as pp_personne_morale_raison_sociale,
267     pp.personne_morale_siret as pp_personne_morale_siret,
268     pp.personne_morale_categorie_juridique as pp_personne_morale_categorie_juridique,
269     civilite_pm.libelle as civilite_pm_libelle,
270     pp.personne_morale_nom as pp_personne_morale_nom,
271     pp.personne_morale_prenom as pp_personne_morale_prenom,
272    
273     pp.numero as pp_numero,
274     pp.voie as pp_voie,
275     pp.complement as pp_complement,
276     pp.lieu_dit as pp_lieu_dit,
277     pp.localite as pp_localite,
278     pp.code_postal as pp_code_postal,
279     pp.bp as pp_bp,
280     pp.cedex as pp_cedex,
281     pp.pays as pp_pays,
282     pp.division_territoriale as pp_division_territoriale,
283    
284     pp.telephone_fixe as pp_telephone_fixe,
285     pp.courriel as pp_courriel,
286    
287     donnees_techniques.co_archi_recours,
288     donnees_techniques.am_terr_surf,
289     donnees_techniques.am_lotiss,
290     donnees_techniques.terr_juri_zac,
291     donnees_techniques.terr_juri_afu,
292     donnees_techniques.co_projet_desc,
293     donnees_techniques.am_projet_desc,
294     donnees_techniques.dm_projet_desc,
295     donnees_techniques.co_cstr_nouv,
296     donnees_techniques.co_cstr_exist,
297     donnees_techniques.co_modif_aspect,
298     donnees_techniques.co_modif_struct,
299     donnees_techniques.co_cloture,
300     donnees_techniques.co_trx_exten,
301     donnees_techniques.co_trx_surelev,
302     donnees_techniques.co_trx_nivsup,
303     donnees_techniques.co_trx_amgt,
304     donnees_techniques.co_anx_pisc,
305     donnees_techniques.co_anx_gara,
306     donnees_techniques.co_anx_veran,
307     donnees_techniques.co_anx_abri,
308     donnees_techniques.co_anx_autr,
309     donnees_techniques.co_bat_niv_nb,
310 softime 4636
311     -- Tableau des destinations
312 mbroquet 3730 donnees_techniques.su_avt_shon1,
313     donnees_techniques.su_avt_shon2,
314     donnees_techniques.su_avt_shon3,
315     donnees_techniques.su_avt_shon4,
316     donnees_techniques.su_avt_shon5,
317     donnees_techniques.su_avt_shon6,
318     donnees_techniques.su_avt_shon7,
319     donnees_techniques.su_avt_shon8,
320     donnees_techniques.su_avt_shon9,
321     donnees_techniques.su_demo_shon1,
322     donnees_techniques.su_demo_shon2,
323     donnees_techniques.su_demo_shon3,
324     donnees_techniques.su_demo_shon4,
325     donnees_techniques.su_demo_shon5,
326     donnees_techniques.su_demo_shon6,
327     donnees_techniques.su_demo_shon7,
328     donnees_techniques.su_demo_shon8,
329     donnees_techniques.su_demo_shon9,
330     donnees_techniques.su_chge_shon1,
331     donnees_techniques.su_chge_shon2,
332     donnees_techniques.su_chge_shon3,
333     donnees_techniques.su_chge_shon4,
334     donnees_techniques.su_chge_shon5,
335     donnees_techniques.su_chge_shon6,
336     donnees_techniques.su_chge_shon7,
337     donnees_techniques.su_chge_shon8,
338     donnees_techniques.su_chge_shon9,
339 softime 4636 donnees_techniques.su_sup_shon1,
340     donnees_techniques.su_sup_shon2,
341     donnees_techniques.su_sup_shon3,
342     donnees_techniques.su_sup_shon4,
343     donnees_techniques.su_sup_shon5,
344     donnees_techniques.su_sup_shon6,
345     donnees_techniques.su_sup_shon7,
346     donnees_techniques.su_sup_shon8,
347     donnees_techniques.su_sup_shon9,
348 mbroquet 3730 donnees_techniques.su_cstr_shon1,
349     donnees_techniques.su_cstr_shon2,
350     donnees_techniques.su_cstr_shon3,
351     donnees_techniques.su_cstr_shon4,
352     donnees_techniques.su_cstr_shon5,
353     donnees_techniques.su_cstr_shon6,
354     donnees_techniques.su_cstr_shon7,
355     donnees_techniques.su_cstr_shon8,
356     donnees_techniques.su_cstr_shon9,
357     donnees_techniques.su_tot_shon1,
358     donnees_techniques.su_tot_shon2,
359     donnees_techniques.su_tot_shon3,
360     donnees_techniques.su_tot_shon4,
361     donnees_techniques.su_tot_shon5,
362     donnees_techniques.su_tot_shon6,
363     donnees_techniques.su_tot_shon7,
364     donnees_techniques.su_tot_shon8,
365     donnees_techniques.su_tot_shon9,
366 softime 4636 -- XXX valeurs obsolètes mais utilisées dans les conditions
367     -- pour afficher les messages d'incohérence
368     donnees_techniques.su_trsf_shon1,
369     donnees_techniques.su_trsf_shon2,
370     donnees_techniques.su_trsf_shon3,
371     donnees_techniques.su_trsf_shon4,
372     donnees_techniques.su_trsf_shon5,
373     donnees_techniques.su_trsf_shon6,
374     donnees_techniques.su_trsf_shon7,
375     donnees_techniques.su_trsf_shon8,
376     donnees_techniques.su_trsf_shon9,
377    
378     -- Tableau des sous-destinations
379     donnees_techniques.su2_avt_shon1,
380     donnees_techniques.su2_avt_shon2,
381     donnees_techniques.su2_avt_shon3,
382     donnees_techniques.su2_avt_shon4,
383     donnees_techniques.su2_avt_shon5,
384     donnees_techniques.su2_avt_shon6,
385     donnees_techniques.su2_avt_shon7,
386     donnees_techniques.su2_avt_shon8,
387     donnees_techniques.su2_avt_shon9,
388     donnees_techniques.su2_avt_shon10,
389     donnees_techniques.su2_avt_shon11,
390     donnees_techniques.su2_avt_shon12,
391     donnees_techniques.su2_avt_shon13,
392     donnees_techniques.su2_avt_shon14,
393     donnees_techniques.su2_avt_shon15,
394     donnees_techniques.su2_avt_shon16,
395     donnees_techniques.su2_avt_shon17,
396     donnees_techniques.su2_avt_shon18,
397     donnees_techniques.su2_avt_shon19,
398     donnees_techniques.su2_avt_shon20,
399     donnees_techniques.su2_demo_shon1,
400     donnees_techniques.su2_demo_shon2,
401     donnees_techniques.su2_demo_shon3,
402     donnees_techniques.su2_demo_shon4,
403     donnees_techniques.su2_demo_shon5,
404     donnees_techniques.su2_demo_shon6,
405     donnees_techniques.su2_demo_shon7,
406     donnees_techniques.su2_demo_shon8,
407     donnees_techniques.su2_demo_shon9,
408     donnees_techniques.su2_demo_shon10,
409     donnees_techniques.su2_demo_shon11,
410     donnees_techniques.su2_demo_shon12,
411     donnees_techniques.su2_demo_shon13,
412     donnees_techniques.su2_demo_shon14,
413     donnees_techniques.su2_demo_shon15,
414     donnees_techniques.su2_demo_shon16,
415     donnees_techniques.su2_demo_shon17,
416     donnees_techniques.su2_demo_shon18,
417     donnees_techniques.su2_demo_shon19,
418     donnees_techniques.su2_demo_shon20,
419     donnees_techniques.su2_chge_shon1,
420     donnees_techniques.su2_chge_shon2,
421     donnees_techniques.su2_chge_shon3,
422     donnees_techniques.su2_chge_shon4,
423     donnees_techniques.su2_chge_shon5,
424     donnees_techniques.su2_chge_shon6,
425     donnees_techniques.su2_chge_shon7,
426     donnees_techniques.su2_chge_shon8,
427     donnees_techniques.su2_chge_shon9,
428     donnees_techniques.su2_chge_shon10,
429     donnees_techniques.su2_chge_shon11,
430     donnees_techniques.su2_chge_shon12,
431     donnees_techniques.su2_chge_shon13,
432     donnees_techniques.su2_chge_shon14,
433     donnees_techniques.su2_chge_shon15,
434     donnees_techniques.su2_chge_shon16,
435     donnees_techniques.su2_chge_shon17,
436     donnees_techniques.su2_chge_shon18,
437     donnees_techniques.su2_chge_shon19,
438     donnees_techniques.su2_chge_shon20,
439     donnees_techniques.su2_sup_shon1,
440     donnees_techniques.su2_sup_shon2,
441     donnees_techniques.su2_sup_shon3,
442     donnees_techniques.su2_sup_shon4,
443     donnees_techniques.su2_sup_shon5,
444     donnees_techniques.su2_sup_shon6,
445     donnees_techniques.su2_sup_shon7,
446     donnees_techniques.su2_sup_shon8,
447     donnees_techniques.su2_sup_shon9,
448     donnees_techniques.su2_sup_shon10,
449     donnees_techniques.su2_sup_shon11,
450     donnees_techniques.su2_sup_shon12,
451     donnees_techniques.su2_sup_shon13,
452     donnees_techniques.su2_sup_shon14,
453     donnees_techniques.su2_sup_shon15,
454     donnees_techniques.su2_sup_shon16,
455     donnees_techniques.su2_sup_shon17,
456     donnees_techniques.su2_sup_shon18,
457     donnees_techniques.su2_sup_shon19,
458     donnees_techniques.su2_sup_shon20,
459     donnees_techniques.su2_cstr_shon1,
460     donnees_techniques.su2_cstr_shon2,
461     donnees_techniques.su2_cstr_shon3,
462     donnees_techniques.su2_cstr_shon4,
463     donnees_techniques.su2_cstr_shon5,
464     donnees_techniques.su2_cstr_shon6,
465     donnees_techniques.su2_cstr_shon7,
466     donnees_techniques.su2_cstr_shon8,
467     donnees_techniques.su2_cstr_shon9,
468     donnees_techniques.su2_cstr_shon10,
469     donnees_techniques.su2_cstr_shon11,
470     donnees_techniques.su2_cstr_shon12,
471     donnees_techniques.su2_cstr_shon13,
472     donnees_techniques.su2_cstr_shon14,
473     donnees_techniques.su2_cstr_shon15,
474     donnees_techniques.su2_cstr_shon16,
475     donnees_techniques.su2_cstr_shon17,
476     donnees_techniques.su2_cstr_shon18,
477     donnees_techniques.su2_cstr_shon19,
478     donnees_techniques.su2_cstr_shon20,
479     donnees_techniques.su2_tot_shon1,
480     donnees_techniques.su2_tot_shon2,
481     donnees_techniques.su2_tot_shon3,
482     donnees_techniques.su2_tot_shon4,
483     donnees_techniques.su2_tot_shon5,
484     donnees_techniques.su2_tot_shon6,
485     donnees_techniques.su2_tot_shon7,
486     donnees_techniques.su2_tot_shon8,
487     donnees_techniques.su2_tot_shon9,
488     donnees_techniques.su2_tot_shon10,
489     donnees_techniques.su2_tot_shon11,
490     donnees_techniques.su2_tot_shon12,
491     donnees_techniques.su2_tot_shon13,
492     donnees_techniques.su2_tot_shon14,
493     donnees_techniques.su2_tot_shon15,
494     donnees_techniques.su2_tot_shon16,
495     donnees_techniques.su2_tot_shon17,
496     donnees_techniques.su2_tot_shon18,
497     donnees_techniques.su2_tot_shon19,
498     donnees_techniques.su2_tot_shon20,
499    
500 mbroquet 3730 donnees_techniques.co_sp_transport,
501     donnees_techniques.co_sp_enseign,
502     donnees_techniques.co_sp_sante,
503     donnees_techniques.co_sp_act_soc,
504     donnees_techniques.co_sp_ouvr_spe,
505     donnees_techniques.co_sp_culture,
506     donnees_techniques.dm_tot_log_nb,
507     donnees_techniques.co_tot_ind_nb,
508     donnees_techniques.co_tot_coll_nb,
509     donnees_techniques.co_tot_log_nb,
510     donnees_techniques.co_resid_agees,
511     donnees_techniques.co_resid_etud,
512     donnees_techniques.co_resid_tourism,
513     donnees_techniques.co_resid_hot_soc,
514     donnees_techniques.co_resid_hand,
515     donnees_techniques.co_resid_autr,
516     donnees_techniques.co_resid_autr_desc,
517     donnees_techniques.co_uti_pers,
518     donnees_techniques.co_uti_princ,
519     donnees_techniques.co_uti_secon,
520     donnees_techniques.co_uti_vente,
521     donnees_techniques.co_uti_loc,
522     donnees_techniques.co_foyer_chamb_nb,
523     donnees_techniques.co_fin_lls_nb,
524     donnees_techniques.co_fin_aa_nb,
525     donnees_techniques.co_fin_ptz_nb,
526     donnees_techniques.co_fin_autr_nb,
527     donnees_techniques.co_mais_piece_nb,
528     donnees_techniques.co_log_1p_nb,
529     donnees_techniques.co_log_2p_nb,
530     donnees_techniques.co_log_3p_nb,
531     donnees_techniques.co_log_4p_nb,
532     donnees_techniques.co_log_5p_nb,
533     donnees_techniques.co_log_6p_nb,
534     donnees_techniques.mod_desc,
535    
536     donnees_techniques.doc_date,
537     donnees_techniques.terr_div_surf_av_div,
538     donnees_techniques.doc_tot_trav,
539     donnees_techniques.doc_tranche_trav,
540     donnees_techniques.doc_tranche_trav_desc,
541     donnees_techniques.doc_surf,
542     donnees_techniques.doc_nb_log,
543     donnees_techniques.doc_nb_log_indiv,
544     donnees_techniques.doc_nb_log_coll,
545     donnees_techniques.doc_nb_log_lls,
546     donnees_techniques.doc_nb_log_aa,
547     donnees_techniques.doc_nb_log_ptz,
548     donnees_techniques.doc_nb_log_autre,
549     donnees_techniques.daact_date,
550     donnees_techniques.daact_date_chgmt_dest,
551     donnees_techniques.daact_tot_trav,
552     donnees_techniques.daact_tranche_trav,
553     donnees_techniques.daact_tranche_trav_desc,
554     donnees_techniques.daact_surf,
555     donnees_techniques.daact_nb_log,
556     donnees_techniques.daact_nb_log_indiv,
557     donnees_techniques.daact_nb_log_coll,
558     donnees_techniques.daact_nb_log_lls,
559     donnees_techniques.daact_nb_log_aa,
560     donnees_techniques.daact_nb_log_ptz,
561     donnees_techniques.daact_nb_log_autre,
562    
563     dossier_autorisation.date_depot as date_depot_da,
564     dossier_autorisation.date_decision as date_decision_da,
565     dossier_autorisation.date_validite as date_validite_da,
566     dossier_autorisation.date_chantier as date_chantier_da,
567     dossier_autorisation.date_achevement as date_achevement_da,
568     avis_decision.typeavis as typeavis_da,
569     avis_decision.sitadel,
570     avis_decision.sitadel_motif,
571     avis_decision.typeavis,
572     etat.statut as statut_di
573    
574     FROM ".DB_PREFIXE."dossier
575    
576     INNER JOIN ".DB_PREFIXE."dossier_instruction_type
577     ON dossier.dossier_instruction_type =
578     dossier_instruction_type.dossier_instruction_type
579     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
580     ON dossier_instruction_type.dossier_autorisation_type_detaille
581     =dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
582     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
583     ON dossier_autorisation_type.dossier_autorisation_type
584     =dossier_autorisation_type_detaille.dossier_autorisation_type
585 softime 6565 INNER JOIN ".DB_PREFIXE."groupe
586     ON dossier_autorisation_type.groupe = groupe.groupe
587     AND groupe.code != 'CTX'
588 mbroquet 3730 INNER JOIN ".DB_PREFIXE."dossier_autorisation
589     ON dossier_autorisation.dossier_autorisation
590     =dossier.dossier_autorisation
591     INNER JOIN ".DB_PREFIXE."autorite_competente
592     ON autorite_competente.autorite_competente
593     =dossier.autorite_competente
594    
595     LEFT JOIN ".DB_PREFIXE."donnees_techniques
596     ON donnees_techniques.dossier_instruction = dossier.dossier
597     LEFT JOIN ".DB_PREFIXE."avis_decision
598     ON avis_decision.avis_decision = dossier.avis_decision
599     LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur as ldd_pp
600     ON ldd_pp.dossier = dossier.dossier
601     LEFT JOIN ".DB_PREFIXE."demandeur as pp
602     ON ldd_pp.demandeur = pp.demandeur
603     LEFT JOIN ".DB_PREFIXE."civilite as civilite_pp
604     ON civilite_pp.civilite = pp.particulier_civilite
605     LEFT JOIN ".DB_PREFIXE."civilite as civilite_pm
606     ON civilite_pm.civilite = pp.personne_morale_civilite
607     LEFT JOIN ".DB_PREFIXE."etat
608     ON etat.etat = dossier.etat
609     LEFT JOIN ".DB_PREFIXE."arrondissement
610     ON dossier_autorisation.arrondissement=arrondissement.arrondissement
611    
612     WHERE dossier_instruction_type.mouvement_sitadel IS NOT NULL
613     AND ldd_pp.petitionnaire_principal is TRUE
614 softime 7996 AND (dossier.date_modification >= '".$datedebut."' AND dossier.date_modification <= '".$datefin."')
615 mbroquet 3730 ORDER by dossier_instruction_type.mouvement_sitadel, dossier.dossier";
616     //Exécution de la requête
617     $res = $this->f->db -> query ($sql);
618     $this->f->addToLog("dossier.class.php : db->query(\"".$sql."\")", VERBOSE_MODE);
619     $this->f->isDatabaseError($res);
620     $export="";
621     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
622     // initialisation de la classe permettant la mise en forme de chaque ligne de l'export
623     require_once "../obj/export_sitadel.class.php";
624     $export_sitadel = new export_sitadel($row['dossier'], $this->f);
625     $export_sitadel->setRow($row);
626     //Ajout du fichier de variable
627     if(file_exists ("../sql/".OM_DB_PHPTYPE."/export_sitadel.inc.php")) {
628     include ("../sql/".OM_DB_PHPTYPE."/export_sitadel.inc.php");
629     }
630     //
631     $export_sitadel->setVal($val);
632     $departement = $export_sitadel->getDepartement($row["collectivite"]);
633     $commune = $export_sitadel->getCommune($row["collectivite"]);
634     $region = $this->f->getParameter("region");
635 softime 4636
636     // Initialisation des variables pour le tableau des
637     // surfaces en version 1
638     $prefix_su = 'su';
639     $count_su = 9;
640     // S'il faut utiliser le tableau des surfaces en
641     // version 2
642     if ($export_sitadel->get_tab_su_version() === 2) {
643     //
644     $prefix_su = 'su2';
645     $count_su = 20;
646     }
647    
648 softime 4838 // Récupère la version du dossier d'instruction depuis son
649     // numéro
650     $version = 0;
651     $version = intval($this->get_dossier_instruction_version($row['dossier']));
652    
653 mbroquet 3730 // Mouvement de dépôt
654     $depot="";
655    
656     // Tous les mouvements autres que transfert ont comme mouvement le code DEPOT
657     // les décisions devant êtres précédées par le dépôt correspondant,
658     // les dossiers avec date de décision comprise dans l'interval fourni sont
659     // réaffichés en tant que dépôts (mouvement DEPOT)
660     if (($row['mouvement_sitadel'] == 'DEPOT'||($row['mouvement_sitadel'] == 'MODIFICATIF'
661 softime 7996 AND $row['statut_di']=='cloture' AND $row['typeavis']=='F'))) {
662 softime 4838 $depot.=$export_sitadel->entete("DEPOT",$departement,$commune, $version);
663 mbroquet 3730 $depot.=$export_sitadel->etatcivil();
664     $depot.=$export_sitadel->adresse();
665     $depot.=$export_sitadel->delegataire();
666     $depot.=$export_sitadel->meltel($row['mouvement_sitadel']);
667     $depot.=$export_sitadel->adresse_terrain();
668     $depot.=$export_sitadel->parcelle();
669     // ===========================
670     // contrat maison individuelle
671     // ===========================
672     // sitadel : contrat|
673     // openads : non renseigne
674     $depot.= $export_sitadel->defaultValue('contrat')."|";
675     // ==========
676     // architecte
677     // ==========
678     // sitadel : architecte|
679     // openads : données techniques.co_archi_recours
680     $depot.= ($row['co_archi_recours'] == "t")?"1|":"0|";
681     // =====================
682     // utilisation data cnil
683     // ======================
684     // sitadel : cnil
685     // openads : non renseigne
686     $depot.= $export_sitadel->defaultValue('cnil');
687     // fin d enregistrement depot
688     $depot.="\n";
689     }
690    
691     // Seuls les dossier de type transfert ont comme mouvement le code TRANSFERT
692     $transfert ="";
693 softime 7996 if ($row['mouvement_sitadel']=='TRANSFERT') {
694 softime 4838 $transfert.=$export_sitadel->entete("TRANSFERT",$departement,$commune, $version);
695 mbroquet 3730 $transfert.=$export_sitadel->etatcivil();
696     $transfert.=$export_sitadel->adresse();
697     $transfert.=$export_sitadel->meltel($row['mouvement_sitadel']);
698     $transfert.="\n";
699     }
700    
701    
702     // Une ligne de mouvement DECISION est insérée après chaque ligne
703     // de mouvement DEPOT
704     $decision="";
705     if ($row['mouvement_sitadel'] != 'TRANSFERT'
706     and $row['mouvement_sitadel'] != 'SUPPRESSION'
707 softime 7996 and $row['mouvement_sitadel'] == 'DEPOT') {
708 mbroquet 3730
709     //Ajout de l'entête
710 softime 4838 $decision.=$export_sitadel->entete("DECISION",$departement,$commune, $version);
711 mbroquet 3730
712     //Ajout du groupe 1
713     $decision.= $export_sitadel->decision_groupe1();
714     // Si la décision est favorable, on remplit le groupe 2
715     if ( $row['sitadel'] == 2 || $row['sitadel'] == 4 || $row['sitadel'] == 5
716     || $row['sitadel'] == 0 ){
717     //
718     $decision.= $export_sitadel->amenagement_terrain();
719     //Nature du projet
720     $natproj = 2;
721     $natprojlib= array(
722     1=>_("Nouvelle construction"),
723     2=>_("Travaux sur construction existante"),
724     3=>_("Nouvelle construction et travaux sur construction"),
725     );
726     if ( isset($row['co_cstr_nouv']) && isset($row['co_cstr_exist']) &&
727     $row['co_cstr_nouv'] == 't' &&
728     $row['co_cstr_exist'] == 't' ){
729     $natproj = 3;
730     }
731     //Nouvelle construction
732     elseif ( isset($row['co_cstr_nouv']) && $row['co_cstr_nouv'] == 't' ) {
733     $natproj = 1;
734     }
735     //
736 softime 4636 $su_avt_shon = $export_sitadel->shon("avt");
737 mbroquet 3730 //Si la SHON existante avant travaux est supérieur à la SHON
738     //démolie alors la variable natproj est égale à 2
739     $shonExistante = 0;
740     $shonDemolie = 0;
741 softime 4636 // Pour chaque ligne du tableau
742     for ($i = 1; $i <= $count_su; $i++) {
743     //
744     $shonExistante += floor($row[$prefix_su.'_avt_shon'.$i]);
745     $shonDemolie += floor($row[$prefix_su.'_demo_shon'.$i]);
746 mbroquet 3730 }
747     //Si la SHON existante avant travaux et la SHON démolie sont
748     //égales alors la variable natproj est égale à 1
749     if ( $shonExistante == 0 && $shonDemolie == 0 && $natproj != 1 &&
750     $row['code'] != 'DP' && $row['code'] != 'PA') {
751     $erreur .= _("Dossier ").$row['dossier']." \"".$natprojlib[$natproj]."\" "._("La SHON existante avant travaux et la SHON demolie sont nulles alors cela devrait être une nouvelle construction.")."\n";
752     } elseif ( $shonExistante > $shonDemolie && $natproj != 2 ){
753 softime 4640 $erreur .= _("Dossier ").$row['dossier']." \"".$natprojlib[$natproj]."\" "._("La SHON existante avant travaux ne doit pas être supérieure à la SHON démolie.")."\n";
754 mbroquet 3730 }
755     $decision .= $su_avt_shon;
756    
757 softime 4636 $su_demo_shon = $export_sitadel->shon("demo");
758 mbroquet 3730 //La SHON démolie s'accompagne obligatoirement de la shon
759     //existante avant travaux
760     if ( $shonDemolie != 0 && $shonExistante == 0 ){
761     $erreur .= _("Dossier ").$row['dossier']." "._("La SHON demolie s'accompagne obligatoirement de la SHON existante avant travaux.")."\n";
762     }
763     $decision .= $su_demo_shon;
764     //
765 softime 4636 $su_sup_shon = $export_sitadel->shon("sup");
766     $su_chge_shon = $export_sitadel->shon("chge");
767 mbroquet 3730 if ( strcasecmp($su_sup_shon, $su_chge_shon) != 0){
768     //
769 softime 4640 $erreur .= _("Dossier ").$row['dossier']." "._("Les SHON globales supprimées par changement de destination ou de sous-destination et créées par le même changement doivent être égales.")."\n";
770 mbroquet 3730 }
771     $decision .= $su_sup_shon;
772     $decision .= $su_chge_shon;
773 softime 4636 $decision .= $export_sitadel->shon("cstr");
774 mbroquet 3730 $decision .= "0|0|0|0|0|0|0|0|0|";
775 softime 4640 // Les SHON créées par changement de destination ou
776     // de sous-destination s'accompagnent obligatoirement
777     // de SHON existante avant travaux non nulle
778 mbroquet 3730 if (preg_match("/[0|]{7}/", $su_chge_shon) &&
779     preg_match("/[0|]{7}/", $su_avt_shon)){
780    
781 softime 4640 $erreur .= _("Dossier ").$row['dossier']." "._("Les SHON créées par changement de destination ou de sous-destination s'accompagnent obligatoirement de SHON existante avant travaux non nulle.")."\n";
782 mbroquet 3730 }
783     // Un nombre de logements démolis strictement positif doit
784     // s'accompagner obligatoirement de SHON démolie.
785     if($row['dm_tot_log_nb'] > 0) {
786 softime 4636 if($export_sitadel->get_shon_val('demo', 1) <= 0) {
787 mbroquet 3730 //
788     $erreur .= _("Dossier ").$row['dossier']." "._("Un nombre de logements demolis strictement positif doit s'accompagner obligatoirement de SHON demolie.")."\n";
789     }
790     }
791     // Un nombre de logements créés strictement positif doit
792     // s'accompagner obligatoirement de SHON créée ou de SHON
793 softime 4640 // créée par changement de destination ou de sous-destination
794     // ayant pour destination l'habitation.
795     if($row['co_tot_log_nb'] > 0 AND ($export_sitadel->get_shon_val('cstr', 1) <= 0 OR $export_sitadel->get_shon_val('chge', 1) <=0)) {
796 mbroquet 3730 //
797 softime 4640 $erreur .= _("Dossier ").$row['dossier']." "._("Un nombre de logements créés strictement positif doit s'accompagner obligatoirement de SHON créée ou de SHON créée par changement de destination ou de sous-destination ayant pour destination l'habitation.")."\n";
798 mbroquet 3730 }
799    
800     // La SHON créée ou issue de la transformation
801     // suffixée par 9 (intérêt collectif ou service public) doit
802     // obligatoirement s'accompagner de la décomposition
803     // en sous modalité renseignée par la variable cpublic et réciproquement.
804    
805     // Test si une valeur est true
806     $cpublic = FALSE;
807     if (isset($row['co_sp_transport']) && $row['co_sp_transport'] == 't') {
808     $cpublic = TRUE;
809     }
810     if (isset($row['co_sp_enseign']) && $row['co_sp_enseign'] == 't') {
811     $cpublic = TRUE;
812     }
813     if (isset($row['co_sp_sante']) && $row['co_sp_sante'] == 't') {
814     $cpublic = TRUE;
815     }
816     if (isset($row['co_sp_act_soc']) && $row['co_sp_act_soc'] == 't') {
817     $cpublic = TRUE;
818     }
819     if (isset($row['co_sp_ouvr_spe']) && $row['co_sp_ouvr_spe'] == 't') {
820     $cpublic = TRUE;
821     }
822     if (isset($row['co_sp_culture']) && $row['co_sp_culture'] == 't') {
823     $cpublic = TRUE;
824     }
825     //
826 softime 4640 if($cpublic !== TRUE AND ($export_sitadel->get_shon_val('cstr', 9) > 0 OR $export_sitadel->get_shon_val('chge', 9) > 0)) {
827     $erreur .= _("Dossier ").$row['dossier']." "._("La SHON créée ou créée par changement de destination ou de sous-destination concernant le service public ou l'interet collectif doit obligatoirement s'accompagner du choix de destination des constructions.")."\n";
828 mbroquet 3730 }
829    
830     // La destination principale du logement mise à résidence
831     // principale ou résidence secondaire doit obligatoirement
832     // s'accompagner d'un mode d'utilisation à occupation personnelle
833     if($row['co_uti_princ'] == 't' OR $row['co_uti_secon'] == 't') {
834     if($row['co_uti_pers'] != 't') {
835    
836     $erreur .= _("Dossier ").$row['dossier']." "._("La destination principale du logement mise a residence principale ou residence secondaire doit obligatoirement s'accompagner d'un mode d'utilisation a occupation personnelle.")."\n";
837     }
838     }
839    
840     $decision.= $export_sitadel->destination($row['mouvement_sitadel']);
841    
842     // Le nombre total de logements créés (variable nbtotlog)
843     // doit être égal à la somme des nombres de logements créés
844     // ventilés par type de financement
845     if($row['co_tot_log_nb'] != ($row['co_fin_lls_nb'] + $row['co_fin_aa_nb'] +
846     $row['co_fin_ptz_nb'] + $row['co_fin_autr_nb'])) {
847    
848     $erreur .= _("Dossier ").$row['dossier']." "._("Le nombre total de logements crees doit etre egal a la somme des nombres de logements crees ventiles par type de financement.")."\n";
849     }
850    
851     $decision.= $export_sitadel->repartitionFinan();
852    
853     // Le nombre total de logements créés (variable nbtotlog)
854     // doit être égal à la totalisation de la répartition des
855     // logements par nombre de pièces
856     if($row['co_tot_log_nb'] != ($row['co_log_1p_nb'] + $row['co_log_2p_nb'] +
857     $row['co_log_3p_nb'] + $row['co_log_4p_nb'] + $row['co_log_5p_nb'] +
858     $row['co_log_6p_nb'])) {
859    
860     $erreur .= _("Dossier ").$row['dossier']." "._("Le nombre total de logements crees doit etre egal a la totalisation de la repartition des logements par nombre de pieces.")."\n";
861     }
862    
863     $decision.= $export_sitadel->repartitionNbPiece($row['mouvement_sitadel']);
864     }
865     else {
866     //
867     $decision.= str_repeat("|", 6);
868     if($row['code']=='DP'){
869     $decision .= "00000|";
870     }else{
871     $decision .= "|";
872     }
873     $decision .= "0000|00000|";
874     $decision.= str_repeat("|", 74);
875     }
876     $decision.="\n";
877     }
878    
879     // modificatif
880     $modificatif='';
881     if($row['mouvement_sitadel'] == 'MODIFICATIF' AND $row['statut_di']=='cloture' AND
882 softime 7996 $row['typeavis']=='F') {
883 softime 4838 $modificatif.=$export_sitadel->entete("MODIFICATIF",$departement,$commune, $version);
884 mbroquet 3730
885     $modificatif.= $export_sitadel->decision_groupe1();
886    
887     if(isset($row['date_decision']) or $row['date_decision']==""){
888     // avis_sitadel et avis_sitadel_motif
889     // si la decision est favorable, envoi des informations statistiques
890     if($row["sitadel"] == 2 or $row["sitadel"] == 4
891     or $row["sitadel"] == 5){
892     // si accordé : ajout du 2nd groupe d'informations
893     $modificatif .= $export_sitadel->adresse_terrain(); // adresse du terrain
894     $modificatif .= $export_sitadel->parcelle(); // 3 premières parcelles
895     $modificatif .= $export_sitadel->modificatif_terrain(); // Informations complémentaires
896    
897 softime 4636 $modificatif.= $export_sitadel->shon("avt");
898     $modificatif.= $export_sitadel->shon("demo");
899     $modificatif.= $export_sitadel->shon("chge");
900     $modificatif.= $export_sitadel->shon("trsf");
901     $modificatif.= $export_sitadel->shon("cstr");
902 mbroquet 3730
903     $modificatif.= "|||||||||";
904     $modificatif.= $export_sitadel->destination($row['mouvement_sitadel']);
905     $modificatif.= $export_sitadel->repartitionFinan();
906     $modificatif.= $export_sitadel->repartitionNbPiece($row['mouvement_sitadel']);
907     }
908     else {
909     $modificatif .= str_repeat("|", 90);
910     }
911     }
912     else {
913     $modificatif .= str_repeat("|", 90);
914     }
915    
916     $modificatif.="\n";
917     }
918    
919     // Mouvement suppression
920     $suppression = '';
921     if($row['mouvement_sitadel'] == 'SUPPRESSION') {
922 softime 4838 $suppression .= $export_sitadel->entete("SUPPRESSION",$departement,$commune, $version);
923 mbroquet 3730 $suppression .= "\n";
924     }
925    
926     // Règles sur le mouvement suivi
927     $suivi="";
928     if($row['mouvement_sitadel'] == 'SUIVI' and
929     ($row['date_chantier'] >= $datedebut and $row['date_chantier']<=$datefin) ||
930     ($row['date_achevement'] >= $datedebut and $row['date_achevement']<=$datefin)){
931     // Si le dossier est une DOC
932     if($row['dossier_instruction_type_code']=='DOC'){
933     // Une ouverture de chantier ne peut concerner qu'un permis autorisé
934     if($row['typeavis_da'] != 'F'&&$row['typeavis_da'] != '') {
935     $erreur .= _("Dossier ").$row['dossier']." "._("Une ouverture de chantier ne peut concerner qu'un permis autorise.")."\n";
936     }
937     // La date d'ouverture de chantier doit être supérieur à la date d'autorisation
938     if($row['doc_date'] > $row['date_decision_da']) {
939     $erreur .= _("Dossier ").$row['dossier']." "._("La date d'ouverture de chantier doit être superieur a la date d'autorisation.")."\n";
940     }
941     // Un achèvement de chantier ne peut concerner qu'un permis autorisé
942     if($row['typeavis_da'] != 'F'&&$row['typeavis_da'] != '') {
943     $erreur .= _("Dossier ").$row['dossier']." "._("Un achevement de chantier ne peut concerner qu'un permis autorise.")."\n";
944     }
945     if( $row['date_chantier_da'] == "" && $row['date_achevement']!="") {
946     $erreur .= _("Dossier ").$row['dossier']." "._("Un achevement de chantier ne peut concerner qu'un permis sur lequel un chantier a ete ouvert.")."\n";
947     }
948     // La date d'achevement de travaux doit être supérieur à la date d'ouverture des travaux
949     if($row['daact_date'] > $row['date_chantier_da']) {
950     $erreur .= _("Dossier ").$row['dossier']." "._("La date d'achevement de travaux doit etre superieur a la date d'ouverture des travaux.")."\n";
951     }
952 softime 4838 $suivi.=$export_sitadel->entete("SUIVI",$departement,$commune, $version);//8|
953 mbroquet 3730 $suivi.=$export_sitadel->chantier($row);
954     //On récupère la DAACT si elle existe
955     $sqlDAACT = "SELECT
956     donnees_techniques.daact_date,
957     donnees_techniques.daact_date_chgmt_dest,
958     donnees_techniques.daact_tot_trav,
959     donnees_techniques.daact_tranche_trav,
960     donnees_techniques.daact_tranche_trav_desc,
961     donnees_techniques.daact_surf,
962     donnees_techniques.daact_nb_log,
963     donnees_techniques.daact_nb_log_indiv,
964     donnees_techniques.daact_nb_log_coll,
965     donnees_techniques.daact_nb_log_lls,
966     donnees_techniques.daact_nb_log_aa,
967     donnees_techniques.daact_nb_log_ptz,
968     donnees_techniques.daact_nb_log_autre,
969     etat.statut as statut_di
970    
971     FROM ".DB_PREFIXE."dossier
972     LEFT JOIN ".DB_PREFIXE."donnees_techniques
973     ON dossier.dossier=donnees_techniques.dossier_instruction
974     LEFT JOIN ".DB_PREFIXE."etat
975     ON dossier.etat = etat.etat
976     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
977     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
978     WHERE dossier.dossier_autorisation ='".$row['dossier_autorisation']."' AND
979     dossier_instruction_type.code = 'DAACT' and mouvement_sitadel='SUIVI'";
980     $resDAACT = $this->f->db -> query ($sqlDAACT);
981     $this->f->addToLog("dossier.class.php : db->query(\"".$sqlDAACT."\")", VERBOSE_MODE);
982     $this->f->isDatabaseError($resDAACT);
983     $rowDAACT=& $resDAACT->fetchRow(DB_FETCHMODE_ASSOC);
984     $suivi.=$export_sitadel->achevement($rowDAACT);
985     $suivi.="\n";
986     }
987     elseif($row['dossier_instruction_type_code']=='DAACT'){
988    
989     //On vérifie qu'une DOC existe
990     $sqlDOC = "SELECT dossier.dossier,
991     dossier.date_chantier,
992     donnees_techniques.doc_date,
993     donnees_techniques.terr_div_surf_av_div,
994     donnees_techniques.doc_tot_trav,
995     donnees_techniques.doc_tranche_trav,
996     donnees_techniques.doc_tranche_trav_desc,
997     donnees_techniques.doc_surf,
998     donnees_techniques.doc_nb_log,
999     donnees_techniques.doc_nb_log_indiv,
1000     donnees_techniques.doc_nb_log_coll,
1001     donnees_techniques.doc_nb_log_lls,
1002     donnees_techniques.doc_nb_log_aa,
1003     donnees_techniques.doc_nb_log_ptz,
1004     donnees_techniques.doc_nb_log_autre
1005     FROM ".DB_PREFIXE."dossier
1006     LEFT JOIN ".DB_PREFIXE."donnees_techniques
1007     ON dossier.dossier=donnees_techniques.dossier_instruction
1008     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
1009     ON dossier.dossier_instruction_type=dossier_instruction_type.dossier_instruction_type
1010     WHERE dossier.dossier_autorisation ='".$row['dossier_autorisation']."' AND
1011     dossier_instruction_type.code = 'DOC' and mouvement_sitadel='SUIVI'";
1012     $resDOC = $this->f->db -> query ($sqlDOC);
1013     $this->f->addToLog("dossier.class.php : db->query(\"".$sqlDOC."\")", VERBOSE_MODE);
1014     $this->f->isDatabaseError($resDOC);
1015     $rowDOC=& $resDOC->fetchRow(DB_FETCHMODE_ASSOC);
1016    
1017     if((isset($rowDOC['dossier']) &&
1018     $rowDOC['date_chantier']<$datedebut || $rowDOC['date_chantier']>$datefin) ||
1019     !isset($rowDOC['dossier'])) {
1020     //
1021 softime 4838 $suivi.=$export_sitadel->entete("SUIVI",$departement,$commune, $version);//8|
1022 mbroquet 3730 $suivi.=$export_sitadel->chantier($rowDOC);
1023     $suivi.=$export_sitadel->achevement($row);
1024 softime 7996 $suivi.="\n";
1025 mbroquet 3730 }
1026     }
1027 softime 7996 }
1028     // Ligne SITADEL généré
1029     $line_sitadel = $depot.$decision.$transfert.$modificatif.$suivi.$suppression;
1030     if ($line_sitadel !== '') {
1031     // Hash la ligne SITADEL
1032     $hash_sitadel = md5($line_sitadel);
1033     // Si le hash de la ligne générée est différent du hash
1034     // sauvegardé sur le dossier
1035     if ($row['hash_sitadel'] !== $hash_sitadel) {
1036     // Met la ligne dans l'export
1037     $export .= $line_sitadel;
1038     // Met à jour le hash SITADEL du dossier
1039     $inst_di = $this->get_inst_dossier($row['dossier']);
1040     $inst_di->update_hash_sitadel($hash_sitadel);
1041     } else {
1042     // Supprime les erreurs liées à la ligne qui ne sera
1043     // pas exportée
1044     $erreur = '';
1045     }
1046     }
1047 mbroquet 3730 } // fin while
1048    
1049     /**
1050     *
1051     */
1052     //
1053     if (DBCHARSET == 'UTF8') {
1054     $export = utf8_decode($export);
1055     }
1056    
1057     /**
1058     * En-tête de fichier.
1059     *
1060     * C'est la première ligne du fichier.
1061     */
1062     // on éclate la chaîne export par ligne pour calculer le nombre
1063     // d'enregistrements et la longueur maximale des enregistrements
1064     $export_by_line = explode("\n", $export);
1065     // longueur maximale des enregistrements
1066     // (Num)(6) longueur de l’enregistrement le plus long contenu dans le
1067     // fichier (sans compter la fin d’enregistrement ou la fin de fichier)
1068     $longueur_maximale_des_enregistrements = 0;
1069     foreach ($export_by_line as $export_line) {
1070     if ($longueur_maximale_des_enregistrements > strlen($export_line)) {
1071     continue;
1072     }
1073     $longueur_maximale_des_enregistrements = strlen($export_line);
1074     }
1075     // nombre d'enregistrements
1076     // (Num)(6) nombre d’enregistrements présents dans le fichier en
1077     // comptant l’en-tête du fichier
1078     // XXX Ne faut-il pas ajouter +1 pour la ligne d'en-tête ?
1079     $nombre_d_enregistrements = count($export_by_line);
1080     // code application
1081     // (Alphanum)(7) = SITADEL
1082     $code_application = "SITADEL";
1083     // code département
1084     // (Alphanum)(3) département dans lequel se trouve le service instructeur
1085     // nomenclature : 001 à 095, 02A, 02B, 971...974
1086     $code_departement = $this->f->getParameter("departement");
1087     // service expéditeur
1088     // (Alphanum)(3) DDE ou commune (la plus grosse en cas d'EPCI) ou DGI
1089     // nomenclature : 'ADS', ‘DGI ou code commune INSEE
1090     $service_expediteur = $this->f->getParameter("commune");
1091     // service destinataire
1092     // (Alphanum)(2) DRE
1093     // nomenclature : code région INSEE (exemple : Ile-de-France=11)
1094     $service_destinataire = $this->f->getParameter("region");
1095     // code du fichier transmis
1096     // (AlphaNum)(12) AAMMjjdddccc
1097     // ddd = département du service instructeur
1098     // ccc = code du service expéditeur
1099     // AAMMjj = date
1100     // par exemple : 090531093ADS dans le cas de la transmission mensuelle
1101     // des événements intervenus au mois de mai communiqués par la DDE de
1102     // Seine-Saint-Denis.
1103     // XXX La date du jour correspond bien à la date demandée ?
1104     $code_du_fichier_transmis = sprintf(
1105     "%s%s%s",
1106     date('ymd'),
1107     $code_departement,
1108     $service_expediteur
1109     );
1110     // numéro d'ordre
1111     // (AlphaNum)(1) numéro d’ordre du fichier en cas de rectificatif
1112     // XXX Le formulaire propose jusqu'à la valeur 10 alors que la taille
1113     // de la châine doit être (1) ?
1114     $numero_d_ordre = $this->f->get_submitted_post_value("numero");
1115     // date de création
1116     // (Alphanum)(6) AAMMjj date de création du fichier transmis
1117     $date_de_creation = date('ymd');
1118     // nom de l'applicatif expéditeur
1119     // (Alphanum)(20) Exemple : GESTIO
1120     $nom_de_l_applicatif_expediteur = "openADS";
1121     // version de l'applicatif expéditeur
1122     // (Alphanum)(8) Exemple : 2.05
1123 softime 7996 $version_de_l_applicatif_expediteur = substr($this->f->get_application_version(), 0, 8);
1124 mbroquet 3730 // Consititution de la ligne d'en-tête.
1125     $entete = sprintf(
1126     "%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n",
1127     $code_application,
1128     $code_departement,
1129     $service_expediteur,
1130     $service_destinataire,
1131     $code_du_fichier_transmis,
1132     $numero_d_ordre,
1133     $longueur_maximale_des_enregistrements,
1134     $date_de_creation,
1135     $nombre_d_enregistrements,
1136     $nom_de_l_applicatif_expediteur,
1137     $version_de_l_applicatif_expediteur
1138     );
1139    
1140     /**
1141     *
1142     */
1143     //
1144     $export = $entete.$export;
1145    
1146     /**
1147     * Écriture de l'export dans un fichier sur le disque et affichage du
1148     * lien de téléchargement.
1149     */
1150     // Composition du nom du fichier
1151     $nom_fichier = "SITADEL".substr($this->f->get_submitted_post_value("datedebut"),3,2)."".substr($this->f->get_submitted_post_value("datedebut"),8,4).".txt";
1152     // Composition des métadonnées du fichier
1153     $metadata_fichier = array(
1154     "filename" => $nom_fichier,
1155     "size" => strlen($export),
1156     "mimetype" => "application/vnd.ms-excel",
1157     );
1158     // Écriture du fichier
1159     $uid_fichier = $this->f->storage->create_temporary($export, $metadata_fichier);
1160     //
1161     $message = _("Fichier")." ".$nom_fichier." "._("sauvegarde");
1162     $message .= "<br/>";
1163     $message .= _("Pour telecharger le fichier, cliquer ici :");
1164     $message .= " ";
1165 softime 7996 $message .= "<a href=\"../app/index.php?module=form&snippet=file&uid=".$uid_fichier."&amp;mode=temporary\" target=\"_blank\">";
1166 mbroquet 3730 $message .= "<img src=\"../app/img/ico_trace.png\"";
1167     $message .= " alt=\""._("Telecharger le fichier Sitadel")."\"";
1168     $message .= " title=\""._("Telecharger le fichier Sitadel")."\"";
1169     $message .= " />";
1170     $message .= "</a>";
1171     $message .= _("avec le bouton droit et enregistrer la cible du lien sous.");
1172     //
1173     $this->f->displayMessage("ok", $message);
1174    
1175     /**
1176     * Écriture d'une éventuelle erreur durant l'export dans un fichier sur
1177     * le disque et affichage du lien de téléchargement.
1178     */
1179     //
1180     if ($erreur != "") {
1181     // Composition du nom du fichier
1182     $nom_fichier_erreur = "probleme_".$nom_fichier;
1183     // Composition des métadonnées du fichier
1184     $metadata_fichier_erreur = array(
1185     "filename" => $nom_fichier_erreur,
1186     "size" => strlen($erreur),
1187     "mimetype" => "text/plain",
1188     );
1189     // Écriture du fichier
1190     $uid_fichier_erreur = $this->f->storage->create_temporary($erreur, $metadata_fichier_erreur);
1191     //
1192     $message = _("Un ou plusieurs problèmes de cohérence ont été détectés durant l'export, celles-ci sont listees dans le fichiers ci-dessous");
1193     $message .= "<br/>";
1194     $message .= _("Fichier")." ".$nom_fichier_erreur." "._("sauvegarde");
1195     $message .= "<br/>";
1196     $message .= _("Pour telecharger le fichier, cliquer ici :");
1197     $message .= " ";
1198 softime 7996 $message .= "<a href=\"../app/index.php?module=form&snippet=file&uid=".$uid_fichier_erreur."&amp;mode=temporary\" target=\"_blank\">";
1199 mbroquet 3730 $message .= "<img src=\"../app/img/ico_trace.png\"";
1200     $message .= " alt=\""._("Telecharger le fichier d'erreur")."\"";
1201     $message .= " title=\""._("Telecharger le fichier d'erreur")."\"";
1202     $message .= " />";
1203     $message .= "</a>";
1204     $message .= _("avec le bouton droit et enregistrer la cible du lien sous.");
1205     //
1206     $this->f->displayMessage("info", $message);
1207     }
1208    
1209     if (DEBUG > 0) {
1210     printf($export);
1211     }
1212     // Appel de la méthode d'affichage du lien retour par le layout
1213     $this->f->layout->display_form_retour($params);
1214    
1215     } else {// correct = false
1216     $this->affichageFormulaire($this->f->get_submitted_post_value("datedebut"), $this->f->get_submitted_post_value("datefin"), $numero, _("Les champs dates sont obligatoires"));
1217     }
1218     }
1219     }
1220    
1221    
1222     function affichageFormulaire($datedebut="", $datefin="", $numero="", $msg=null){
1223     //Description de la page
1224     $description = _("Cette page vous permet de Transmettre les dossiers suivant la procedure SITADEL");
1225     $this->f->displayDescription($description);
1226     // Affichage du message d'erreur si existe
1227     if($msg!==null){
1228     $this->f->displayMessage("error", $msg);
1229     }
1230     //
1231 softime 7996 printf("<form method=\"POST\" action=\"".OM_ROUTE_FORM."&obj=sitadel&action=6&idx=0\" name=f1>");
1232 mbroquet 3730 //
1233     $input = "<input type=\"text\" name=\"%s\" id=\"%s\" value=\"%s\" size=\"15\" class=\"champFormulaire datepicker\" onchange=\"fdate(this)\"/>";
1234     // champ date debut
1235     printf(" "._("debut")." ");
1236     printf($input, "datedebut", "datedebut", $datedebut);
1237     // champ date fin
1238     printf(" "._("fin")." ");
1239     printf($input, "datefin", "datefin", $datefin);
1240     // numero d'ordre d'envoi
1241     printf(" "._("Numero d'ordre d'envoi")." : "."<select name=\"numero\">");
1242     for ($i = 1; $i < 11; $i++) {
1243     printf("<option value =\"%d\" ", $i);
1244     printf(($numero == $i )? "selected=\"selected\"":"");
1245     printf(">%d</option>", $i);
1246     }
1247     printf("</select>");
1248     printf("<br/><br/><input type=\"submit\" value=\"export SITADEL\" >");
1249     printf("</form>");
1250     }
1251    
1252     /**
1253     * VIEW - view_document_numerise.
1254     *
1255     * Vue du tableau des pièces du dossier d'autorisation.
1256     *
1257     * Cette vue permet de gérer le contenu de l'onglet "Pièce(s)" sur un
1258     * dossier d'autorisation. Cette vue spécifique est nécessaire car
1259     * l'ergonomie standard du framework ne prend pas en charge ce cas.
1260     * C'est ici la vue spécifique des pièces liées au dossier qui est
1261     * affichée directement au clic de l'onglet au lieu du soustab.
1262     *
1263     * L'idée est donc de simuler l'ergonomie standard en créant un container
1264     * et d'appeler la méthode javascript 'ajaxit' pour charger le contenu
1265     * de la vue visualisation de l'objet lié.
1266     *
1267     * @return void
1268     */
1269     function view_document_numerise() {
1270     // Vérification de l'accessibilité sur l'élément
1271     $this->checkAccessibility();
1272     // Récupération des variables GET
1273     ($this->f->get_submitted_get_value('idxformulaire')!==null ? $idxformulaire =
1274     $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = "");
1275     ($this->f->get_submitted_get_value('retourformulaire')!==null ? $retourformulaire =
1276     $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = "");
1277     // Objet à charger
1278     $obj = "document_numerise";
1279 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
1280     if ($type_aff_form === 'CTX RE' OR $type_aff_form === 'CTX IN') {
1281     $obj = "document_numerise_contexte_ctx";
1282     }
1283 mbroquet 3730 // Construction de l'url de sousformulaire à appeler
1284 softime 7996 $url = OM_ROUTE_SOUSFORM."&obj=".$obj;
1285 mbroquet 3730 $url .= "&idx=".$idxformulaire;
1286     $url .= "&action=4";
1287     $url .= "&retourformulaire=".$retourformulaire;
1288     $url .= "&idxformulaire=".$idxformulaire;
1289     $url .= "&retour=form";
1290     // Affichage du container permettant le reffraichissement du contenu
1291     // dans le cas des action-direct.
1292     printf('
1293     <div id="sousform-href" data-href="%s">
1294     </div>',
1295     $url
1296     );
1297     // Affichage du container permettant de charger le retour de la requête
1298     // ajax récupérant le sous formulaire.
1299     printf('
1300     <div id="sousform-%s">
1301     </div>
1302     <script>
1303     ajaxIt(\'%s\', \'%s\');
1304     </script>',
1305     $obj,
1306     $obj,
1307     $url
1308     );
1309     }
1310    
1311    
1312     /*
1313 nmeucci 4526 * Définition de la version et du suffixe du DI lors de sa création.
1314 mbroquet 3730 */
1315     function setValFAjout($val = array()) {
1316 nmeucci 4526
1317     //
1318     // GESTION DE LA VERSION DU DI
1319     // Elle est unique et basée sur celle du DA qui débute à -1.
1320     // Ainsi la version du DI initial est à 0.
1321     //
1322     $numeroVersion = $this->getNumeroVersion($val['dossier_autorisation']);
1323     if (is_numeric($numeroVersion) or $numeroVersion == -1){
1324     $this->incrementNumeroVersion($val['dossier_autorisation'], ++$numeroVersion);
1325     }
1326    
1327     //
1328     // GESTION DU SUFFIXE
1329     // La version du suffixe est celle du type de DI : à ne pas confondre
1330     // avec celle du DI lui même.
1331     // Exemple chronologique :
1332     // DI n° PC0130551600004 -> version 0
1333     // DI n° PC0130551600004M01 -> version 1
1334     // DI n° PC0130551600004PRO01 -> version 2 !!
1335     //
1336     $suffixe = "";
1337     // Si l'option suffixe de ce type de DI est activée
1338     if ( $this->getSuffixe($this->getDossierInstructionType()) === 't' ){
1339     // Récupération de la lettre associée au type de dossier d'instruction
1340     $code = $this->getCode($this->getDossierInstructionType());
1341     // Récupération du numéro de version en fonction du type de dossier d'instruction
1342 mbroquet 3730 $numeroVersionDossierInstructionType = $this->getNumeroVersionDossierInstructionType($val['dossier_autorisation'], $val['dossier_instruction_type'], $numeroVersion);
1343 nmeucci 4526 // Suffixe
1344     $suffixe = $code.$numeroVersionDossierInstructionType;
1345 mbroquet 3730 }
1346    
1347 nmeucci 4526 // Numéro de dossier
1348     $this->valF['dossier'] = $val['dossier_autorisation'].$suffixe;
1349     // Identifiant du dossier d'instruction lisible
1350     $this->valF['dossier_libelle'] = $this->get_dossier_autorisation_libelle($val['dossier_autorisation']).$suffixe;
1351     // Version du dossier
1352 mbroquet 3730 $this->valF['version'] = $numeroVersion;
1353     }
1354    
1355     /*Récupère la valeur du suffixe d'un dossier_instruction_type*/
1356     function getSuffixe($dossierInstructionType){
1357    
1358     $suffixe = "";
1359    
1360     $sql = "SELECT
1361     suffixe
1362     FROM
1363     ".DB_PREFIXE."dossier_instruction_type
1364     WHERE
1365     dossier_instruction_type = $dossierInstructionType";
1366    
1367     $this->addToLog("getSuffixe(): db->query(\"".$sql."\")", VERBOSE_MODE);
1368     $res = $this->db->query($sql);
1369     if (database :: isError($res))
1370     die($res->getMessage()."erreur ".$sql);
1371    
1372     if ( $res->numRows() > 0 ){
1373    
1374     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
1375     $suffixe = $row['suffixe'];
1376     }
1377    
1378     return $suffixe;
1379     }
1380    
1381     /*Récupère dans la table de paramètrage la lettre correspondant
1382     * au dossier_instruction_type
1383     */
1384     function getCode($dossierInstructionType){
1385    
1386     $code = "";
1387    
1388     $sql = "SELECT
1389     code
1390     FROM
1391     ".DB_PREFIXE."dossier_instruction_type
1392     WHERE
1393     dossier_instruction_type = $dossierInstructionType";
1394    
1395     $this->addToLog("getCode(): db->query(\"".$sql."\")", VERBOSE_MODE);
1396     $res = $this->db->query($sql);
1397     if (database :: isError($res))
1398     die($res->getMessage()."erreur ".$sql);
1399    
1400     if ( $res->numRows() > 0 ){
1401    
1402     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
1403     $code = $row['code'];
1404     }
1405    
1406     return $code;
1407     }
1408    
1409     /*Récupère le numéro de version d'un dossier_autorisation*/
1410     function getNumeroVersion($dossierAutorisation){
1411    
1412     $numeroVersion = "";
1413    
1414     $sql = "SELECT
1415     numero_version
1416     FROM
1417     ".DB_PREFIXE."dossier_autorisation
1418     WHERE
1419     dossier_autorisation = '$dossierAutorisation'";
1420    
1421     $this->addToLog("getNumeroVersion(): db->query(\"".$sql."\")", VERBOSE_MODE);
1422     $res = $this->db->query($sql);
1423     if (database :: isError($res))
1424     die($res->getMessage()."erreur ".$sql);
1425    
1426     if ( $res->numRows() > 0 ){
1427    
1428     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
1429     $numeroVersion = $row['numero_version'];
1430     }
1431    
1432     return $numeroVersion;
1433     }
1434 fmichon 3892
1435     /**
1436     * Retourne le numéro d'un dossier d'instruction et ses six parties.
1437     *
1438     * @param string $dossier_instruction Identifiant du dossier d'instruction (avec ou sans espace)
1439     *
1440     * @return array
1441     */
1442     function get_dossier_instruction_numero($dossier_instruction = null) {
1443    
1444     // Si le DI n'a pas été fourni
1445     if ($dossier_instruction === null) {
1446     // On le récupère
1447     $dossier_instruction = $this->getVal($this->clePrimaire);
1448     }
1449    
1450     /*
1451     Analyse du numéro du DI et extraction de ses parties
1452    
1453     Retour : tableau à 7 entrées, chacune étant elle-même un tableau à 1 entrée :
1454    
1455     - 0 : chaîne testée (identifiant du DI)
1456 softime 4838 - 1 : type du DA (2 ou 3 lettres)
1457 fmichon 3892 - 2 : code département + code communes(3 + 3 integer)
1458     - 3 : année (2 integer)
1459     - 4 : division + numéro (le premier peut être une lettre ou un
1460     - integer et le reste integer)
1461     - 5 : lettre(s) du type du dossier d'instruction (P, M, ANNUL, ...)
1462     - 6 : version du dossier d'instruction (1 ou 2 integer)
1463     */
1464 softime 8477 preg_match_all('|^([A-Z]{2,3})\s{0,1}(\d{6})\s{0,1}(\d{2})\s{0,1}([[:alnum:]]{5})([A-Z]{1,5})?(\d{1,2})?$|', $dossier_instruction, $return);
1465 fmichon 3892 //
1466     return $return;
1467     }
1468    
1469 softime 8477
1470 fmichon 3892 /**
1471 softime 8477 * Retourne le nom de la sequence du dossier d'instruction courant.
1472     *
1473     * @return String
1474     */
1475     function get_sequence_name() {
1476     //
1477     $inst_datd = $this->get_inst_dossier_autorisation_type_detaille();
1478     $inst_dat = $this->get_inst_dossier_autorisation_type($inst_datd->getVal('dossier_autorisation_type'));
1479     $datc = $inst_dat->getVal('code');
1480     $annee = $this->getVal('annee');
1481     $parse_id = $this->get_dossier_instruction_numero();
1482     $dep_com = $parse_id[2][0];
1483     $dep = substr($dep_com, 0, 3);
1484     $com = substr($dep_com, 3);
1485     //
1486     return $this->compose_sequence_name($datc, $annee, $dep, $com);
1487     }
1488    
1489     /**
1490 fmichon 3892 * Récupère le numéro de version du dossier d'instruction.
1491     *
1492     * @return string
1493     */
1494 softime 4838 function get_dossier_instruction_version($dossier_instruction = null) {
1495 fmichon 3892
1496     // Expression régulière qui découpe le numéro du dossier
1497 softime 4838 $return = $this->get_dossier_instruction_numero($dossier_instruction);
1498 fmichon 3892
1499     // Si l'expression régulière retourne une erreur
1500     if ($return == false) {
1501     // Message dans le log
1502     $this->f->addToLog(__METHOD__."(): "._("Erreur lors de la recuperation du numero de version du dossier d'instruction"), DEBUG_MODE);
1503     //
1504     return false;
1505     }
1506    
1507 nmeucci 4526 // Retourne seulement la version du dossier d'instruction.
1508     // Elle vaut 0 si le numéro du DI n'a pas de suffixe.
1509     if (isset($return[6][0])) {
1510     return $return[6][0];
1511     }
1512     return 0;
1513 fmichon 3892 }
1514 mbroquet 3730
1515     /*Incrémente le numéro de version du dossier*/
1516     function incrementNumeroVersion($dossierAutorisation, $nouveauNumeroVersion) {
1517    
1518     $valF = array (
1519     "numero_version" => $nouveauNumeroVersion
1520     );
1521    
1522     $res = $this->db->autoExecute(DB_PREFIXE."dossier_autorisation",
1523     $valF,
1524     DB_AUTOQUERY_UPDATE,
1525     "dossier_autorisation = '$dossierAutorisation'");
1526    
1527     if (database :: isError($res))
1528     die($res->getMessage()."erreur ".$sql);
1529    
1530     }
1531    
1532     /**
1533     * Retourne un numéro de version en fonction du type de dossier d'instruction
1534     * @param string $dossier_autorisation
1535     * @param integer $dossier_instruction_type
1536     * @return int
1537     */
1538     public function getNumeroVersionDossierInstructionType($dossier_autorisation, $dossier_instruction_type, $numero_version, $increment = true){
1539    
1540     $numeroVersionDossierInstructionType = $numero_version;
1541    
1542     //On récupère le code correspondant au type de dossier d'instruction passé
1543     //en paramètre
1544     $sql = "SELECT
1545     code
1546     FROM
1547     ".DB_PREFIXE."dossier_instruction_type
1548     WHERE
1549     dossier_instruction_type = ".$dossier_instruction_type;
1550     $codeDossierInstructionType = $this->db->getOne($sql);
1551     $this->f->addToLog("getNumeroVersionDossierInstructionType(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
1552     if ( database::isError($codeDossierInstructionType)){
1553     $this->f->addToError("", $codeDossierInstructionType, $codeDossierInstructionType);
1554     return false;
1555     }
1556    
1557    
1558     // Si c'est un dossier d'instruction de type "Initial", code "P", on retourne 0
1559     if ( strcmp($codeDossierInstructionType, "P") == 0 ){
1560     return 0;
1561     }
1562     //Si c'est un modificatif ou transfert on retourne un nombre correspondant au
1563     //nombre de dossier d'instruction de ce type, rattaché au dossier
1564     //d'autorisation complété par des 0 à gauche si besoin. Format du retour
1565     //attendu : 01 ou 02, etc.
1566     else {
1567    
1568     //On récupère le nombre de dossier d'instruction de ce type rattaché au
1569     //dossier d'autorisation
1570     $sql = "SELECT
1571     count(dossier)
1572     FROM
1573     ".DB_PREFIXE."dossier
1574     LEFT JOIN
1575     ".DB_PREFIXE."dossier_autorisation
1576     ON
1577     dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
1578     WHERE
1579     dossier_autorisation.dossier_autorisation = '".$dossier_autorisation."'
1580     AND
1581     dossier.dossier_instruction_type = ".$dossier_instruction_type;
1582     $numeroVersionDossierInstructionType = $this->db->getOne($sql);
1583     $this->f->addToLog("getNumeroVersionDossierInstructionType(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
1584     if ( database::isError($numeroVersionDossierInstructionType)){
1585     $this->f->addToError("", $numeroVersionDossierInstructionType, $numeroVersionDossierInstructionType);
1586     return false;
1587     }
1588    
1589     // Requête SQL
1590     $sql = "SELECT
1591     substring(dossier, '\d*$')::int as last_num_dossier
1592     FROM ".DB_PREFIXE."dossier
1593     WHERE dossier_instruction_type = ".$dossier_instruction_type."
1594     AND dossier_autorisation = '".$dossier_autorisation."'
1595     AND version = (
1596     SELECT max(version)
1597     FROM ".DB_PREFIXE."dossier
1598     WHERE dossier_instruction_type = ".$dossier_instruction_type."
1599     AND dossier_autorisation = '".$dossier_autorisation."'
1600     GROUP BY dossier_instruction_type, dossier_autorisation
1601     )";
1602     $res = $this->db->query($sql);
1603     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\")", VERBOSE_MODE);
1604     $this->f->isDatabaseError($res);
1605     $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
1606    
1607     $num_version_last_dossier = $row['last_num_dossier'];
1608    
1609     if (!empty($num_version_last_dossier)
1610     && $num_version_last_dossier >= $numeroVersionDossierInstructionType) {
1611     // Modifie le numéro suivant
1612     $numeroVersionDossierInstructionType = $num_version_last_dossier;
1613     }
1614     //
1615     if ($increment === true) {
1616     $numeroVersionDossierInstructionType = ++$numeroVersionDossierInstructionType;
1617     }
1618     //On compléte par des 0 à gauche
1619     $numeroVersionDossierInstructionType = str_pad($numeroVersionDossierInstructionType, 2, "0", STR_PAD_LEFT);
1620    
1621     return $numeroVersionDossierInstructionType;
1622     }
1623     }
1624     /**
1625     * Retourne le libellé du dossier d'autorisation
1626     * @param string $dossier_autorisation Identifiant du dossier d'autorisation
1627     * @return string Libellé dossier d'autorisation
1628     */
1629     function get_dossier_autorisation_libelle($dossier_autorisation) {
1630    
1631     $dossier_autorisation_libelle = "";
1632    
1633     // Requête SQL
1634     $sql = "SELECT
1635     dossier_autorisation_libelle
1636     FROM
1637     ".DB_PREFIXE."dossier_autorisation
1638     WHERE
1639     dossier_autorisation = '$dossier_autorisation'";
1640    
1641     $dossier_autorisation_libelle = $this->db->getOne($sql);
1642     $this->addToLog("get_dossier_autorisation_libelle(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
1643     database::isError($dossier_autorisation_libelle);
1644    
1645     // Retourne le résultat
1646     return $dossier_autorisation_libelle;
1647     }
1648    
1649 softime 6929 function setvalF($val = array()){
1650 mbroquet 3730 parent::setvalF($val);
1651    
1652     // Récupération des id demandeurs postés
1653     $this->getPostedValues();
1654    
1655     // enlever les valeurs a ne pas saisir -> recherche en trigger ajouter et modifier
1656     unset ($this->valF['geom']);
1657     unset ($this->valF['geom1']);
1658     // valeurs hiddenstatic (calcule)
1659     if($this->maj==1){
1660     // par defaut
1661     unset ($this->valF['etat']);
1662     unset ($this->valF['delai']);
1663     unset ($this->valF['accord_tacite']);
1664     }
1665     unset ($this->valF['avis_decision']); // avis + libelle avis
1666     unset ($this->valF['terrain_surface_calcul']);
1667     unset ($this->valF['shon_calcul']);
1668     unset ($this->valF['date_notification_delai']);
1669     unset ($this->valF['date_decision']);
1670     unset ($this->valF['date_limite']);
1671     unset ($this->valF['date_validite']);
1672     unset ($this->valF['date_chantier']);
1673     unset ($this->valF['date_achevement']);
1674     unset ($this->valF['date_conformite']);
1675 nmeucci 3887 // Ce champ est mis à jour uniquement par la gestion spécifique du log
1676     // et donc jamais par les actions ajouter/modifier
1677     unset ($this->valF['log_instructions']);
1678 mbroquet 3730
1679     // Durée de validité lors de la création du dossier d'instruction
1680     $this->valF['duree_validite'] = $this->get_duree_validite($this->valF['dossier_autorisation']);
1681     }
1682    
1683 softime 6929
1684 softime 6565 /**
1685 softime 7067 * Retourne le type de formulaire : ADS, CTX RE, CTX IN ou DPC.
1686 softime 6565 *
1687     * @return mixed $type_aff_form Type de formulaire (string) ou false (bool) si erreur BDD.
1688     */
1689     function get_type_affichage_formulaire() {
1690     if (isset($this->type_aff_form) === true) {
1691     return $this->type_aff_form;
1692 mbroquet 3730 }
1693 softime 6565 //
1694 softime 7996 if($this->getParameter('maj') == '0' OR $this->get_action_crud() === 'create') {
1695 softime 6565 $id_dossier_instruction_type = $this->valF["dossier_instruction_type"];
1696     } else {
1697     $id_dossier_instruction_type = $this->getVal("dossier_instruction_type");
1698     }
1699     $sql = "SELECT dossier_autorisation_type.affichage_form
1700     FROM " . DB_PREFIXE . "dossier_instruction_type
1701     INNER JOIN " . DB_PREFIXE . "dossier_autorisation_type_detaille
1702     ON dossier_instruction_type.dossier_autorisation_type_detaille=dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1703     INNER JOIN " . DB_PREFIXE . "dossier_autorisation_type
1704     ON dossier_autorisation_type.dossier_autorisation_type=dossier_autorisation_type_detaille.dossier_autorisation_type
1705     WHERE dossier_instruction_type.dossier_instruction_type=" . intval($id_dossier_instruction_type);
1706     $type_aff_form = $this->db->getOne($sql);
1707     $this->f->addToLog(__METHOD__ . " : db->getOne(\"" . $sql . "\")", VERBOSE_MODE);
1708     if($this->f->isDatabaseError($type_aff_form, true) === true) {
1709     return false;
1710     }
1711     $this->type_aff_form = $type_aff_form;
1712     //
1713     return $this->type_aff_form;
1714     }
1715 mbroquet 3730
1716    
1717 softime 6565 /**
1718     * Retourne le code du groupe du dossier d'instruction.
1719     *
1720     * @return string
1721     */
1722     public function get_groupe() {
1723     //
1724     if (isset($this->groupe) === true && $this->groupe !== null) {
1725     return $this->groupe;
1726 mbroquet 3730 }
1727    
1728 softime 6565 // Récupère le code du groupe
1729     $inst_dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
1730     $inst_dossier_autorisation_type = $this->get_inst_dossier_autorisation_type($inst_dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
1731     $inst_groupe = $this->get_inst_groupe($inst_dossier_autorisation_type->getVal('groupe'));
1732     $groupe = $inst_groupe->getVal('code');
1733 mbroquet 3730
1734 softime 6565 //
1735     $this->groupe = $groupe;
1736     //
1737     return $this->groupe;
1738     }
1739 mbroquet 3730
1740    
1741 softime 6565 /**
1742     * Méthode de verification du contenu
1743     */
1744 softime 6929 function verifier($val = array(), &$db = null, $DEBUG = null) {
1745     parent::verifier($val,$db,$DEBUG);
1746 mbroquet 3730
1747 softime 7366 // La date de dépôt est obligatoire
1748     if ($val['date_depot'] === '' || $val['date_depot'] === null) {
1749     //
1750     $this->correct = false;
1751     $this->addToMessage( _('Le champ').' <span class="bold">'.$this->getLibFromField('date_depot').'</span> '._('est obligatoire'));
1752     }
1753    
1754 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
1755     if ($type_aff_form ===false) {
1756     $this->correct = false;
1757     $this->addToMessage(_("Une erreur s'est produite lors de l'ajout de ce dossier. Veuillez contacter votre administrateur."));
1758 mbroquet 3730 }
1759 softime 6565
1760     switch ($type_aff_form) {
1761     case 'ADS':
1762     case 'CTX RE':
1763     if (!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
1764     empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
1765     !is_null($this->form)) {
1766     $this->correct = false;
1767     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
1768 mbroquet 3730 }
1769 softime 6565 break;
1770     case 'CTX IN':
1771     if (!isset($this->postedIdDemandeur["contrevenant_principal"]) OR
1772     empty($this->postedIdDemandeur["contrevenant_principal"]) AND
1773     !is_null($this->form)) {
1774     $this->correct = false;
1775     $this->addToMessage(_("La saisie d'un contrevenant principal est obligatoire."));
1776     }
1777     break;
1778 softime 7067 case 'DPC':
1779     if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
1780     empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
1781     !is_null($this->form)) {
1782     $this->correct = false;
1783     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
1784     }
1785     if(!isset($this->postedIdDemandeur["bailleur_principal"]) OR
1786     empty($this->postedIdDemandeur["bailleur_principal"]) AND
1787     !is_null($this->form)) {
1788     $this->correct = false;
1789     $this->addToMessage(_("La saisie d'un bailleur principal est obligatoire."));
1790     }
1791     break;
1792 mbroquet 3730 }
1793 softime 7366
1794     // Récupération du crud par rapport au mode du formulaire
1795     $crud = $this->get_action_crud($this->getParameter("maj"));
1796    
1797     // L'année de la date de dépot ne peut pas être modifiée
1798     if ($crud === 'update' && array_key_exists("date_depot", $val) === true && ($val["date_depot"] !== "" && $val["date_depot"] !== null)) {
1799     //
1800     $new_date = DateTime::createFromFormat('d/m/Y', $val["date_depot"]);
1801     $old_date = DateTime::createFromFormat('Y-m-d', $this->getVal("date_depot"));
1802     if ($new_date->format("Y") != $old_date->format("Y")) {
1803     $this->addToMessage(_("L'année de la date de dépôt n'est pas modifiable."));
1804     $this->correct = false;
1805     }
1806     }
1807 softime 6565 }
1808 mbroquet 3730
1809    
1810 softime 6565 function setType(&$form,$maj) {
1811     // Par défaut le type des champs est géré nativement par le framework
1812     parent::setType($form,$maj);
1813    
1814     // Récupération du contexte : groupe, CRUD et paramètres
1815     $groupe = $this->get_type_affichage_formulaire();
1816     $crud = $this->get_action_crud($maj);
1817     $parameters = $this->f->getCollectivite($this->getVal('om_collectivite'));
1818    
1819 mbroquet 3730 //
1820 softime 6565 // Gestion du groupe
1821 mbroquet 3730 //
1822    
1823 softime 6565 // INFRACTION
1824     $inf_fields = array(
1825     'a_qualifier' => 'hidden',
1826     'autorisation_contestee' => 'hidden',
1827     'autorite_competente' => 'hidden',
1828     'cle_acces_citoyen' => 'hidden',
1829     'contrevenants' => 'static',
1830     'date_ait' => 'hiddenstaticdate',
1831     'date_audience' => 'hiddenstaticdate',
1832     'date_cloture_instruction' => 'hidden',
1833     'date_complet' => 'hidden',
1834     'date_contradictoire' => 'hiddenstaticdate',
1835     'date_decision' => 'hiddenstaticdate',
1836     'date_depot' => 'hiddenstaticdate',
1837     'date_dernier_depot' => 'hidden',
1838     'date_derniere_visite' => 'hiddenstaticdate',
1839     'date_limite' => 'hidden',
1840     'date_limite_incompletude' => 'hidden',
1841     'date_premiere_visite' => 'hiddenstaticdate',
1842     'date_transmission_parquet' => 'hiddenstaticdate',
1843     'date_validite' => 'hidden',
1844     'delai' => 'hidden',
1845     'description_projet' => 'hidden',
1846     'dossier_autorisation_type_detaille' => 'hidden',
1847     'dossier_instruction_type' => 'hidden',
1848     'dossier_petitionnaire' => 'hidden',
1849     'dossier_petitionnaires' => 'hidden',
1850     'dt_ctx_infraction' => 'checkboxhiddenstatic',
1851     'dt_ctx_regularisable' => 'checkboxhiddenstatic',
1852     'dt_ctx_synthese_anr' => 'static',
1853     'dt_ctx_synthese_nti' => 'static',
1854 softime 8477 'ctx_reference_dsj' => 'static',
1855 softime 6565 'enjeu_ctx' => 'hidden',
1856     'enjeu_erp' => 'hidden',
1857     'enjeu_urba' => 'hidden',
1858     'erp' => 'hidden',
1859     'evenement_suivant_tacite' => 'hidden',
1860     'evenement_suivant_tacite_incompletude' => 'hidden',
1861     'numero_versement_archive' => 'hidden',
1862     'requerants' => 'hidden',
1863     'tax_mtn_part_commu' => 'hidden',
1864     'tax_mtn_part_depart' => 'hidden',
1865     'tax_mtn_part_reg' => 'hidden',
1866     'tax_mtn_total' => 'hidden',
1867 softime 6929 'tax_mtn_rap' => 'hidden',
1868 softime 6565 'tax_secteur' => 'hidden',
1869 softime 6929 'tax_mtn_part_commu_sans_exo' => 'hidden',
1870     'tax_mtn_part_depart_sans_exo' => 'hidden',
1871     'tax_mtn_part_reg_sans_exo' => 'hidden',
1872     'tax_mtn_total_sans_exo' => 'hidden',
1873     'tax_mtn_rap_sans_exo' => 'hidden',
1874 softime 7067 'bailleur' => 'hidden',
1875 softime 8477 'ctx_reference_sagace' => 'static',
1876 softime 6565 );
1877     // RECOURS
1878     $re_fields = array(
1879     'a_qualifier' => 'hidden',
1880     'autorite_competente' => 'hidden',
1881     'cle_acces_citoyen' => 'hidden',
1882     'contrevenants' => 'hidden',
1883     'date_ait' => 'hidden',
1884     'date_audience' => 'hidden',
1885     'date_cloture_instruction' => 'hiddenstaticdate',
1886     'date_complet' => 'hidden',
1887     'date_contradictoire' => 'hidden',
1888     'date_decision' => 'hiddenstaticdate',
1889     'date_depot' => 'hiddenstaticdate',
1890     'date_dernier_depot' => 'hidden',
1891     'date_derniere_visite' => 'hidden',
1892     'date_limite' => 'hiddenstaticdate',
1893     'date_limite_incompletude' => 'hidden',
1894     'date_premiere_visite' => 'hidden',
1895     'date_transmission_parquet' => 'hidden',
1896     'date_validite' => 'hidden',
1897     'delai' => 'hidden',
1898     'description_projet' => 'hidden',
1899     'dossier_autorisation_type_detaille' => 'static',
1900     'dossier_instruction_type' => 'hidden',
1901     'dossier_petitionnaire' => 'hidden',
1902     'dossier_petitionnaires' => 'static',
1903     'dt_ctx_infraction' => 'hidden',
1904     'dt_ctx_regularisable' => 'hidden',
1905     'dt_ctx_synthese_anr' => 'hidden',
1906     'dt_ctx_synthese_nti' => 'hidden',
1907     'enjeu_ctx' => 'hidden',
1908     'enjeu_erp' => 'hidden',
1909     'enjeu_urba' => 'hidden',
1910     'erp' => 'hidden',
1911     'evenement_suivant_tacite' =>'selecthiddenstatic',
1912     'evenement_suivant_tacite_incompletude' => 'hidden',
1913     'instructeur_2' => 'hidden',
1914     'numero_versement_archive' => 'hidden',
1915     'requerants' => 'static',
1916     'tax_mtn_part_commu' => 'hidden',
1917     'tax_mtn_part_depart' => 'hidden',
1918     'tax_mtn_part_reg' => 'hidden',
1919     'tax_mtn_total' => 'hidden',
1920 softime 6929 'tax_mtn_rap' => 'hidden',
1921 softime 6565 'tax_secteur' => 'hidden',
1922 softime 6929 'tax_mtn_part_commu_sans_exo' => 'hidden',
1923     'tax_mtn_part_depart_sans_exo' => 'hidden',
1924     'tax_mtn_part_reg_sans_exo' => 'hidden',
1925     'tax_mtn_total_sans_exo' => 'hidden',
1926     'tax_mtn_rap_sans_exo' => 'hidden',
1927 softime 7067 'bailleur' => 'hidden',
1928 softime 8477 'ctx_reference_dsj' => 'static',
1929     'ctx_reference_sagace' => 'static',
1930 softime 6565 );
1931     // ADS
1932     $ads_fields = array(
1933     'autorisation_contestee' => 'hidden',
1934     'cle_acces_citoyen' => 'static',
1935     'contrevenants' => 'hidden',
1936     'date_ait' => 'hidden',
1937     'date_audience' => 'hidden',
1938     'date_cloture_instruction' => 'hidden',
1939     'date_contradictoire' => 'hidden',
1940     'date_derniere_visite' => 'hidden',
1941     'date_premiere_visite' => 'hidden',
1942     'date_transmission_parquet' => 'hidden',
1943     'dossier_autorisation_type_detaille' => 'hidden',
1944     'dossier_instruction_type' => 'selecthiddenstatic',
1945     'dossier_petitionnaires' => 'hidden',
1946     'dt_ctx_infraction' => 'hidden',
1947     'dt_ctx_regularisable' => 'hidden',
1948     'dt_ctx_synthese_anr' => 'hidden',
1949     'dt_ctx_synthese_nti' => 'hidden',
1950 softime 8477 'ctx_reference_dsj' => 'hidden',
1951 softime 6565 'enjeu_ctx' => 'static',
1952     'instructeur_2' => 'hidden',
1953     'requerants' => 'hidden',
1954 softime 7067 'bailleur' => 'hidden',
1955 softime 8477 'ctx_reference_sagace' => 'hidden',
1956 softime 6565 );
1957 softime 7067 // DPC
1958     $dpc_fields = array(
1959     'autorisation_contestee' => 'hidden',
1960     'cle_acces_citoyen' => 'static',
1961     'contrevenants' => 'hidden',
1962     'date_ait' => 'hidden',
1963     'date_audience' => 'hidden',
1964     'date_cloture_instruction' => 'hidden',
1965     'date_contradictoire' => 'hidden',
1966     'date_derniere_visite' => 'hidden',
1967     'date_premiere_visite' => 'hidden',
1968     'date_transmission_parquet' => 'hidden',
1969     'dossier_autorisation_type_detaille' => 'hidden',
1970     'dossier_instruction_type' => 'selecthiddenstatic',
1971     'dossier_petitionnaires' => 'hidden',
1972     'dt_ctx_infraction' => 'hidden',
1973     'dt_ctx_regularisable' => 'hidden',
1974     'dt_ctx_synthese_anr' => 'hidden',
1975     'dt_ctx_synthese_nti' => 'hidden',
1976 softime 8477 'ctx_reference_dsj' => 'hidden',
1977 softime 7067 'enjeu_ctx' => 'static',
1978     'instructeur_2' => 'hidden',
1979     'requerants' => 'hidden',
1980     'bailleur' => 'static',
1981 softime 8477 'ctx_reference_sagace' => 'hidden',
1982 softime 7067 );
1983 softime 6565 // COMMUN
1984     $all_fields = array(
1985     'accord_tacite' => 'hidden',
1986     'annee' => 'hidden',
1987     'autres_demandeurs' => 'hidden',
1988     'date_achevement' => 'hidden',
1989     'date_chantier' => 'hidden',
1990     'date_conformite' => 'hidden',
1991     'date_notification_delai' => 'hidden',
1992     'date_rejet' => 'hidden',
1993     'date_retour_contradictoire' => 'hidden',
1994     'delai_incompletude' => 'hidden',
1995     'description' => 'hidden',
1996     'dossier' => 'hidden',
1997     'dossier_arrondissement' => 'hidden',
1998     'dossier_autorisation' => 'hidden',
1999     'dossier_autorisation_libelle' => 'hidden',
2000     'duree_validite' => 'hidden',
2001     'etat_pendant_incompletude' => 'hidden',
2002     'geom' => 'hiddenstatic',
2003     'geom1' => 'hidden',
2004     'incomplet_notifie' => 'hidden',
2005     'incompletude' => 'hidden',
2006     'interface_referentiel_erp' => 'hidden',
2007     'log_instructions' => 'nodisplay',
2008     'om_collectivite' => 'hidden',
2009     'quartier' => 'hidden',
2010     'version' => 'hidden',
2011 softime 7996 'date_modification' => 'hidden',
2012     'hash_sitadel' => 'hidden',
2013 softime 8329 'depot_electronique' => 'hidden',
2014 softime 6565 );
2015     if (isset($parameters['option_afficher_division'])
2016     && $parameters['option_afficher_division'] !== 'true') {
2017     $all_fields['division'] = 'hidden';
2018 mbroquet 3730 }
2019 softime 6565 if (isset($parameters['option_sig'])
2020     && $parameters['option_sig'] !== 'sig_interne'
2021     && $parameters['option_sig'] !== 'sig_externe'){
2022     $all_fields['geom'] = 'hidden';
2023 mbroquet 3730 }
2024    
2025 softime 6565 //
2026     // Gestion du contexte
2027     //
2028 mbroquet 3730
2029 softime 6565 // AJOUTER, MODIFIER
2030     if ($crud === 'create' OR $crud === 'update') {
2031 mbroquet 3730
2032 softime 7366 $all_fields['avis_decision'] = 'selecthiddenstatic';
2033 softime 6565 $all_fields['etat'] = 'hiddenstatic';
2034     $all_fields['terrain'] = 'hiddenstatic';
2035     //
2036     $ads_fields['a_qualifier'] = 'checkbox';
2037     $ads_fields['accord_tacite'] = 'hiddenstatic';
2038     $ads_fields['autorite_competente'] = 'selecthiddenstatic';
2039     $ads_fields['date_achevement'] = 'hiddenstaticdate';
2040     $ads_fields['date_chantier'] = 'hiddenstaticdate';
2041     $ads_fields['date_conformite'] = 'hiddenstaticdate';
2042     $ads_fields['date_decision'] = 'hiddenstaticdate';
2043     $ads_fields['date_depot'] = 'hiddenstaticdate';
2044     $ads_fields['date_dernier_depot'] = 'hiddenstaticdate';
2045     $ads_fields['date_notification_delai'] = 'hiddenstaticdate';
2046     $ads_fields['date_rejet'] = 'hiddenstaticdate';
2047     $ads_fields['date_validite'] = 'hiddenstaticdate';
2048     $ads_fields['delai'] = 'hiddenstatic';
2049     $ads_fields['description_projet'] = 'hiddenstatic';
2050 softime 7366 $ads_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
2051 softime 6565 $ads_fields['shon_calcul'] = 'hiddenstatic';
2052     $ads_fields['tax_mtn_part_commu'] = 'hidden';
2053     $ads_fields['tax_mtn_part_depart'] = 'hidden';
2054     $ads_fields['tax_mtn_part_reg'] = 'hidden';
2055     $ads_fields['tax_mtn_total'] = 'hidden';
2056 softime 6929 $ads_fields['tax_mtn_rap'] = 'hidden';
2057     $ads_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
2058     $ads_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
2059     $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
2060     $ads_fields['tax_mtn_total_sans_exo'] = 'hidden';
2061     $ads_fields['tax_mtn_rap_sans_exo'] = 'hidden';
2062 softime 6565 $ads_fields['terrain_surface_calcul'] = 'hiddenstatic';
2063 softime 7067 //
2064     $dpc_fields['a_qualifier'] = 'checkbox';
2065     $dpc_fields['accord_tacite'] = 'hiddenstatic';
2066     $dpc_fields['autorite_competente'] = 'selecthiddenstatic';
2067     $dpc_fields['date_achevement'] = 'hiddenstaticdate';
2068     $dpc_fields['date_chantier'] = 'hiddenstaticdate';
2069     $dpc_fields['date_conformite'] = 'hiddenstaticdate';
2070     $dpc_fields['date_decision'] = 'hiddenstaticdate';
2071     $dpc_fields['date_depot'] = 'hiddenstaticdate';
2072     $dpc_fields['date_dernier_depot'] = 'hiddenstaticdate';
2073     $dpc_fields['date_notification_delai'] = 'hiddenstaticdate';
2074     $dpc_fields['date_rejet'] = 'hiddenstaticdate';
2075     $dpc_fields['date_validite'] = 'hiddenstaticdate';
2076     $dpc_fields['delai'] = 'hiddenstatic';
2077     $dpc_fields['description_projet'] = 'hiddenstatic';
2078 softime 7366 $dpc_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
2079 softime 7067 $dpc_fields['shon_calcul'] = 'hiddenstatic';
2080     $dpc_fields['tax_mtn_part_commu'] = 'hidden';
2081     $dpc_fields['tax_mtn_part_depart'] = 'hidden';
2082     $dpc_fields['tax_mtn_part_reg'] = 'hidden';
2083     $dpc_fields['tax_mtn_total'] = 'hidden';
2084     $dpc_fields['tax_mtn_rap'] = 'hidden';
2085     $dpc_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
2086     $dpc_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
2087     $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
2088     $dpc_fields['tax_mtn_total_sans_exo'] = 'hidden';
2089     $dpc_fields['tax_mtn_rap_sans_exo'] = 'hidden';
2090     $dpc_fields['terrain_surface_calcul'] = 'hiddenstatic';
2091 softime 7366 //
2092     $re_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
2093     $re_fields['dossier_petitionnaires'] = 'hiddenstatic';
2094     $re_fields['requerants'] = 'hiddenstatic';
2095     $inf_fields['contrevenants'] = 'hiddenstatic';
2096     $inf_fields['dt_ctx_synthese_anr'] = 'hiddenstatic';
2097     $inf_fields['dt_ctx_synthese_nti'] = 'hiddenstatic';
2098 softime 6565 // Si l'état du dossier est incomplet
2099     if ($this->is_incomplet_notifie()) {
2100     // On cache les dates de complétude et de limite d'instruction
2101     $ads_fields['date_complet'] = 'hidden';
2102     $ads_fields['date_limite'] = 'hidden';
2103     $ads_fields['evenement_suivant_tacite_incompletude'] ='selecthiddenstatic';
2104     $ads_fields['evenement_suivant_tacite'] ='hidden';
2105     $ads_fields['date_limite_incompletude'] = 'hiddenstaticdate';
2106 softime 7067 //
2107     $dpc_fields['date_complet'] = 'hidden';
2108     $dpc_fields['date_limite'] = 'hidden';
2109     $dpc_fields['evenement_suivant_tacite_incompletude'] ='selecthiddenstatic';
2110     $dpc_fields['evenement_suivant_tacite'] ='hidden';
2111     $dpc_fields['date_limite_incompletude'] = 'hiddenstaticdate';
2112 softime 6565 } else {
2113     // Sinon on cache la date de limite d'incomplétude
2114     $ads_fields['date_limite_incompletude'] = 'hidden';
2115     $ads_fields['evenement_suivant_tacite_incompletude'] ='hidden';
2116     $ads_fields['evenement_suivant_tacite'] ='selecthiddenstatic';
2117     $ads_fields['date_complet'] = 'hiddenstaticdate';
2118     $ads_fields['date_limite'] = 'hiddenstaticdate';
2119 softime 7067 //
2120     $dpc_fields['date_limite_incompletude'] = 'hidden';
2121     $dpc_fields['evenement_suivant_tacite_incompletude'] ='hidden';
2122     $dpc_fields['evenement_suivant_tacite'] ='selecthiddenstatic';
2123     $dpc_fields['date_complet'] = 'hiddenstaticdate';
2124     $dpc_fields['date_limite'] = 'hiddenstaticdate';
2125 softime 6565 }
2126    
2127     // MODIFIER
2128     if ($crud ==='update') {
2129     $all_fields['dossier_libelle'] = 'hiddenstatic';
2130     $ads_fields['dossier_petitionnaire'] = 'hiddenstatic';
2131 softime 7067 $dpc_fields['dossier_petitionnaire'] = 'hiddenstatic';
2132 softime 6565 //
2133     if ($this->f->isAccredited("dossier_modifier_instructeur")) {
2134     $all_fields['instructeur'] = 'select';
2135     $inf_fields['instructeur_2'] = 'select';
2136     } else {
2137     $all_fields['instructeur'] = 'selecthiddenstatic';
2138     $inf_fields['instructeur_2'] = 'selecthiddenstatic';
2139     }
2140     //
2141     if (isset($parameters['option_afficher_division'])
2142     && $parameters['option_afficher_division'] === 'true') {
2143     $all_fields['division'] = 'selecthiddenstatic';
2144     if ($this->f->isAccredited("dossier_modifier_division")) {
2145     $all_fields['division'] = 'select';
2146     }
2147     }
2148     // Si l'utilisateur ne peut pas qualifier un DI (guichet unique & guichet et suivi)
2149     if (!$this->f->isAccredited(array("dossier_instruction","dossier_instruction_qualifier"), "OR")) {
2150     // Il ne peut pas modifier les champs suivants
2151     $ads_fields['numero_versement_archive'] = 'hiddenstatic';
2152     $ads_fields['enjeu_urba'] = 'checkboxhiddenstatic';
2153     $ads_fields['enjeu_erp'] = 'checkboxhiddenstatic';
2154     $ads_fields['erp'] = 'checkboxhiddenstatic';
2155     $ads_fields['a_qualifier'] = 'checkboxhiddenstatic';
2156 softime 7067 //
2157     $dpc_fields['numero_versement_archive'] = 'hiddenstatic';
2158     $dpc_fields['enjeu_urba'] = 'checkboxhiddenstatic';
2159     $dpc_fields['enjeu_erp'] = 'checkboxhiddenstatic';
2160     $dpc_fields['erp'] = 'checkboxhiddenstatic';
2161     $dpc_fields['a_qualifier'] = 'checkboxhiddenstatic';
2162 softime 6565 }
2163     // Le profil Qualificateur peut modifier seulement les champs
2164     // autorite_competente, a_qualifier et erp
2165     if ($this->f->isUserQualificateur()) {
2166     $ads_fields['numero_versement_archive'] = 'static';
2167     $ads_fields['enjeu_urba'] = 'checkboxstatic';
2168     $ads_fields['enjeu_erp'] = 'checkboxstatic';
2169 softime 7067 //
2170     $dpc_fields['numero_versement_archive'] = 'static';
2171     $dpc_fields['enjeu_urba'] = 'checkboxstatic';
2172     $dpc_fields['enjeu_erp'] = 'checkboxstatic';
2173 softime 6565 }
2174 softime 7366 // Le dossier ne doit pas être instruit
2175     if ($this->has_only_recepisse() === true
2176     && $this->getStatut() !== 'cloture') {
2177     //
2178     $all_fields['date_depot'] = 'date';
2179     }
2180 softime 8593 // Gestion de la case à cocher ERP en cas d'interfaçage avec le
2181     // référentiel ERP
2182     if ($this->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true) {
2183     // Par défaut la case à cocher ERP est non modifiable
2184     $all_fields['erp'] = 'checkboxhiddenstatic';
2185     // Si le type du dossier d'instruction en cours est présent
2186     // dans les paramètres autorisant l'interfaçage avec le référentiel ERP
2187     if (isset($parameters['erp__dossier__nature__at']) === true
2188     && $this->f->getDATCode($this->getVal($this->clePrimaire)) == $parameters['erp__dossier__nature__at']) {
2189     //
2190     $all_fields['erp'] = 'checkbox';
2191     }
2192     if (isset($parameters['erp__dossier__nature__pc']) === true
2193     && $this->f->getDATCode($this->getVal($this->clePrimaire)) == $parameters['erp__dossier__nature__pc']
2194     && isset($parameters['erp__dossier__type_di__pc']) === true) {
2195     //
2196     $erp_di_pc = explode(";", $parameters['erp__dossier__type_di__pc']);
2197     if (is_array($erp_di_pc) === true
2198     && in_array($this->getVal("dossier_instruction_type"), $erp_di_pc) === true) {
2199     //
2200     $all_fields['erp'] = 'checkbox';
2201     }
2202     }
2203     }
2204 softime 6565 }
2205     }
2206     // MODIFIER, SUPPRIMER, CONSULTER
2207     if ($crud !== 'create') {
2208     $re_fields['autorisation_contestee'] = 'selecthiddenstatic';
2209     $all_fields['date_demande'] = 'hidden';
2210     // La collectivité n'est jamais modifiable
2211     if ($_SESSION['niveau'] == 2) {
2212     $all_fields['om_collectivite'] = 'selecthiddenstatic';
2213     }
2214 softime 6929 // Instance du paramétrage des taxes
2215 mbroquet 3730 $inst_taxe_amenagement = $this->get_inst_taxe_amenagement();
2216     // Instance de cerfa
2217     $inst_cerfa = $this->get_inst_cerfa();
2218 softime 6929 // Si l'option de simulation est activée pour la collectivité du
2219     // dossier, l'utilisateur connecté a la permissions de voir
2220     // la simulation des taxes, la collectivité à un paramétrage pour
2221     // les taxes et que le cerfa du dossier à les champs requis
2222     if ($this->f->is_option_simulation_taxes_enabled($this->getVal('om_collectivite')) === true
2223     && $this->f->isAccredited("dossier_instruction_simulation_taxes") === true
2224     && $inst_taxe_amenagement !== null
2225     && $inst_cerfa->can_simulate_taxe_amenagement() === true) {
2226 mbroquet 3730
2227 softime 6565 // MODIFIER
2228     if ($crud === 'update') {
2229 mbroquet 3730 //
2230     if ($this->is_in_context_of_foreign_key("tax_secteur", $this->retourformulaire)) {
2231 softime 6565 $ads_fields['tax_secteur'] = 'selecthiddenstatic';
2232 softime 7067 $dpc_fields['tax_secteur'] = 'selecthiddenstatic';
2233 mbroquet 3730 } else {
2234 softime 6565 $ads_fields['tax_secteur'] = 'select';
2235 softime 7067 $dpc_fields['tax_secteur'] = 'select';
2236 mbroquet 3730 }
2237     }
2238 softime 6565 // SUPPRIMER
2239     if ($crud === 'delete') {
2240 mbroquet 3730 //
2241 softime 6565 $ads_fields['tax_secteur'] = 'selectstatic';
2242 softime 7067 $dpc_fields['tax_secteur'] = 'selectstatic';
2243 mbroquet 3730 }
2244 softime 6565 // CONSULTER
2245     if ($crud === 'read') {
2246 mbroquet 3730 //
2247 softime 6565 $ads_fields['tax_secteur'] = 'selectstatic';
2248 softime 7067 $dpc_fields['tax_secteur'] = 'selectstatic';
2249 mbroquet 3730 }
2250 softime 6565 // Si ce n'est pas une commune d'Île-de-France
2251 mbroquet 3730 if ($inst_taxe_amenagement->getVal('en_ile_de_france') == 'f') {
2252     //
2253 softime 6565 $ads_fields['tax_mtn_part_reg'] = 'hidden';
2254 softime 6929 $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
2255 softime 7067 $dpc_fields['tax_mtn_part_reg'] = 'hidden';
2256     $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
2257 mbroquet 3730 }
2258     } else {
2259 softime 6565 // MODIFER
2260     if ($crud === 'update') {
2261     $ads_fields['tax_secteur'] = 'hidden';
2262 softime 7067 $dpc_fields['tax_secteur'] = 'hidden';
2263 mbroquet 3730 }
2264 softime 6565 // SUPPRIMER, CONSULTER
2265     if ($crud === 'delete' OR $crud ==='read') {
2266     $ads_fields['tax_secteur'] = 'hidden';
2267     $ads_fields['tax_mtn_part_commu'] = 'hidden';
2268     $ads_fields['tax_mtn_part_depart'] = 'hidden';
2269     $ads_fields['tax_mtn_part_reg'] = 'hidden';
2270     $ads_fields['tax_mtn_total'] = 'hidden';
2271 softime 6929 $ads_fields['tax_mtn_rap'] = 'hidden';
2272     $ads_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
2273     $ads_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
2274     $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
2275     $ads_fields['tax_mtn_total_sans_exo'] = 'hidden';
2276     $ads_fields['tax_mtn_rap_sans_exo'] = 'hidden';
2277 softime 7067 //
2278     $dpc_fields['tax_secteur'] = 'hidden';
2279     $dpc_fields['tax_mtn_part_commu'] = 'hidden';
2280     $dpc_fields['tax_mtn_part_depart'] = 'hidden';
2281     $dpc_fields['tax_mtn_part_reg'] = 'hidden';
2282     $dpc_fields['tax_mtn_total'] = 'hidden';
2283     $dpc_fields['tax_mtn_rap'] = 'hidden';
2284     $dpc_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
2285     $dpc_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
2286     $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
2287     $dpc_fields['tax_mtn_total_sans_exo'] = 'hidden';
2288     $dpc_fields['tax_mtn_rap_sans_exo'] = 'hidden';
2289 mbroquet 3730 }
2290     }
2291     }
2292 softime 8477 // CONSULTER
2293     if ($crud ==='read') {
2294 mbroquet 3730
2295 softime 6565 $ads_fields['geom'] = 'static';
2296     $ads_fields['a_qualifier'] = 'checkboxstatic';
2297     $ads_fields['terrain_references_cadastrales'] = 'referencescadastralesstatic';
2298 softime 7067 //
2299     $dpc_fields['geom'] = 'static';
2300     $dpc_fields['a_qualifier'] = 'checkboxstatic';
2301     $dpc_fields['terrain_references_cadastrales'] = 'referencescadastralesstatic';
2302 softime 6565 // Si l'état du dossier est incomplet
2303     if ($this->is_incomplet_notifie()) {
2304     // on cache les dates de complétude et de limite d'instruction
2305     $ads_fields['date_complet'] = 'hidden';
2306     $ads_fields['date_limite'] = 'hidden';
2307     $ads_fields['evenement_suivant_tacite_incompletude'] = 'selecthiddenstatic';
2308     $ads_fields['evenement_suivant_tacite'] = 'hidden';
2309 softime 7067 //
2310     $dpc_fields['date_complet'] = 'hidden';
2311     $dpc_fields['date_limite'] = 'hidden';
2312     $dpc_fields['evenement_suivant_tacite_incompletude'] = 'selecthiddenstatic';
2313     $dpc_fields['evenement_suivant_tacite'] = 'hidden';
2314 softime 6565 } else {
2315     // sinon on cache la date de limite d'incomplétude
2316     $ads_fields['date_limite_incompletude'] = 'hidden';
2317     $ads_fields['evenement_suivant_tacite_incompletude'] = 'hidden';
2318     $ads_fields['evenement_suivant_tacite'] = 'selecthiddenstatic';
2319 softime 7067 //
2320     $dpc_fields['date_limite_incompletude'] = 'hidden';
2321     $dpc_fields['evenement_suivant_tacite_incompletude'] = 'hidden';
2322     $dpc_fields['evenement_suivant_tacite'] = 'selecthiddenstatic';
2323 softime 6565 }
2324     if (isset($parameters['option_arrondissement'])
2325     && $parameters['option_arrondissement'] === 'true') {
2326     $all_fields['dossier_arrondissement'] = 'static';
2327     }
2328     }
2329 softime 8477 // SUPPRIMER
2330     if($crud === 'delete') {
2331     // Cache tous les champs execepté le libellé du dossier
2332     foreach ($this->champs as $champ) {
2333     $all_fields[$champ] = 'hidden';
2334     }
2335     $all_fields['dossier_libelle'] = 'hiddenstatic';
2336     }
2337 softime 6565
2338     //
2339     // Typage
2340     //
2341    
2342     switch ($groupe) {
2343     case 'CTX IN':
2344     $this->manage_type($form, $inf_fields);
2345     break;
2346     case 'CTX RE':
2347     $this->manage_type($form, $re_fields);
2348     break;
2349     case 'ADS':
2350     $this->manage_type($form, $ads_fields);
2351     break;
2352 softime 7067 case 'DPC':
2353     $this->manage_type($form, $dpc_fields);
2354     break;
2355 softime 6565 }
2356     $this->manage_type($form, $all_fields);
2357 mbroquet 3730 }
2358    
2359 softime 6929
2360 softime 6565 /**
2361     * Gestion du typage des champs
2362     *
2363     * @param object $form formulaire instancié
2364     * @param array $fields tableau associatif des champs avec leur widget de formulaire en valeur
2365     * @return void
2366     */
2367     protected function manage_type($form, $fields) {
2368     foreach ($this->champs as $key => $field) {
2369     if (array_key_exists($field, $fields) === true) {
2370     $form->setType($field, $fields[$field]);
2371     }
2372     }
2373     }
2374    
2375    
2376     /**
2377 softime 7067 * Retourne le nombre de parcelles qu'à en commun le dossier passé en
2378     * paramètre avec les dossiers contentieux en cours. Le nombre de parcelles
2379     * est groupé par type de dossier d'autorisation : RE ou IN.
2380 softime 6565 *
2381 softime 7067 * @param string $di identifiant du DI
2382 softime 6565 * @return array
2383     */
2384 softime 7067 function get_nb_parcelles_dossier_ciblees_par_contentieux($di) {
2385 softime 6565 $sql = "
2386     SELECT
2387     dossier_autorisation_type.code, COUNT(*) as nb
2388     FROM " . DB_PREFIXE . "dossier
2389     LEFT JOIN " . DB_PREFIXE . "dossier_parcelle
2390     ON dossier.dossier = dossier_parcelle.dossier
2391     LEFT JOIN " . DB_PREFIXE . "dossier_parcelle as parcelle_ctx
2392     ON dossier_parcelle.libelle = parcelle_ctx.libelle
2393     AND dossier_parcelle.dossier != parcelle_ctx.dossier
2394     LEFT JOIN " . DB_PREFIXE . "dossier as dossier_ctx
2395     ON dossier_ctx.dossier = parcelle_ctx.dossier
2396 softime 7067 INNER JOIN " . DB_PREFIXE . "etat
2397     ON dossier_ctx.etat = etat.etat AND etat.statut != 'cloture'
2398 softime 6565 LEFT JOIN " . DB_PREFIXE . "dossier_autorisation
2399     ON dossier_ctx.dossier_autorisation = dossier_autorisation.dossier_autorisation
2400     LEFT JOIN " . DB_PREFIXE . "dossier_autorisation_type_detaille
2401     ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2402     = dossier_autorisation.dossier_autorisation_type_detaille
2403     LEFT JOIN " . DB_PREFIXE . "dossier_autorisation_type
2404     ON dossier_autorisation_type_detaille.dossier_autorisation_type
2405     = dossier_autorisation_type.dossier_autorisation_type
2406     WHERE
2407     dossier.dossier = '" . $di . "'
2408     AND (dossier_autorisation_type.code = 'RE'
2409     OR dossier_autorisation_type.code = 'IN')
2410     GROUP BY dossier_autorisation_type.code
2411     ";
2412 softime 7067 $this->addToLog("get_nb_parcelles_dossier_ciblees_par_contentieux : db->query(\"$sql\")", VERBOSE_MODE);
2413 softime 6565 $res = $this->db->query($sql);
2414 softime 7067 $this->f->isDatabaseError($res);
2415 softime 6565
2416     $nb_re_inf = array('re' => 0, 'inf' => 0);
2417    
2418     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
2419     if ($row["code"] == "RE"){
2420     $nb_re_inf['re'] += $row["nb"];
2421     }
2422     if ($row["code"] == "IN"){
2423     $nb_re_inf['inf'] += $row["nb"];
2424     }
2425     }
2426    
2427     return $nb_re_inf;
2428     }
2429    
2430 softime 6929 function setVal(&$form, $maj, $validation, &$db = null, $DEBUG = null) {
2431 mbroquet 3730 $this->maj=$maj;
2432    
2433     if($this->getVal('geom') != ""
2434     && $this->f->getParameter('option_sig') == 'sig_externe'
2435     && $this->f->issetSIGParameter($this->getVal('dossier')) === true) {
2436     $form->setVal('geom', $this->getGeolocalisationLink());
2437     }
2438 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
2439     if ($affichage_form === 'ADS') {
2440 softime 8329 // Dans le cas d'un dépôt électronique un pictogramme apparait devant le demandeur
2441     if ($maj == 1 || $maj == 2 || $maj == 3){
2442     if ($this->getVal('depot_electronique') === 't'
2443     || $this->getVal('depot_electronique') === true
2444     || $this->getVal('depot_electronique') === 1) {
2445     //
2446     $form->setVal('dossier_petitionnaire',"<span class='om-icon om-icon-16 om-icon-fix depot-electronique-16' title='Dépôt électronique'> </span>".$this->getVal('dossier_petitionnaire'));
2447     }
2448     }
2449 softime 6565 if ($maj == 3) {
2450    
2451 softime 7067 $nb_re_inf = $this->get_nb_parcelles_dossier_ciblees_par_contentieux($this->getVal('dossier'));
2452 softime 6565
2453     $message = "";
2454     if ($nb_re_inf['re'] > 0) {
2455     $message .= "<span class=\"label label-warning\" ";
2456 nmeucci 7085 $message .= "title=\""._("Au moins un dossier de recours contentieux ou gracieux en cours concerne les références cadastrales du dossier courant.")."\">";
2457 softime 6565 $message .= _("RE");
2458     $message .= "</span>";
2459     if ($nb_re_inf['inf'] > 0) {
2460     $message .= " ";
2461     }
2462     }
2463     if ($nb_re_inf['inf'] > 0) {
2464     $message .= "<span class=\"label label-important\" ";
2465 nmeucci 7085 $message .= "title=\""._("Au moins un dossier d'infraction en cours concerne les références cadastrales du dossier courant.")."\">";
2466 softime 6565 $message .= _("IN");
2467     $message .= "</span>";
2468     }
2469    
2470     $form->setVal('enjeu_ctx', $message);
2471     }
2472     }
2473     if ($affichage_form === 'CTX RE') {
2474     // Récupération des demandeurs liés au dossier
2475     $this->listeDemandeur("dossier", $this->getVal('dossier'));
2476     //
2477     $requerants = '';
2478     if ($this->getVal('requerants') != '') {
2479     $requerants = $this->getVal('requerants');
2480     if (isset($this->valIdDemandeur['requerant']) === true
2481     AND count($this->valIdDemandeur['requerant']) > 0) {
2482     $requerants .= ' '._('et autres');
2483     }
2484     }
2485     $form->setVal('requerants', $requerants);
2486     //
2487     $dossier_petitionnaires = '';
2488     if ($this->getVal('dossier_petitionnaire') != '') {
2489     $dossier_petitionnaires = $this->getVal('dossier_petitionnaire');
2490     }
2491     if (isset($this->valIdDemandeur['petitionnaire']) === true
2492     AND count($this->valIdDemandeur['petitionnaire']) > 0) {
2493     $dossier_petitionnaires .= ' '._('et autres');
2494     }
2495     $form->setVal('dossier_petitionnaires', $dossier_petitionnaires);
2496     }
2497     if ($affichage_form === 'CTX IN') {
2498     // Récupération des demandeurs liés au dossier
2499     $this->listeDemandeur("dossier", $this->getVal('dossier'));
2500     //
2501     $contrevenants = '';
2502     if ($this->getVal('contrevenants') != '') {
2503     $contrevenants = $this->getVal('contrevenants');
2504     if (isset($this->valIdDemandeur['contrevenant']) === true
2505     AND count($this->valIdDemandeur['contrevenant']) > 0) {
2506     $contrevenants .= ' '._('et autres');
2507     }
2508     }
2509     $form->setVal('contrevenants', $contrevenants);
2510     }
2511 softime 7067 if ($affichage_form === 'DPC') {
2512     // Récupération des demandeurs liés au dossier
2513     $this->listeDemandeur("dossier", $this->getVal('dossier'));
2514     //
2515     $bailleurs = '';
2516     if ($this->getVal('bailleurs') != '') {
2517     $bailleurs = $this->getVal('bailleurs');
2518     if (isset($this->valIdDemandeur['bailleur']) === true
2519     AND count($this->valIdDemandeur['bailleur']) > 0) {
2520     $bailleurs .= ' '._('et autres');
2521     }
2522     }
2523     $form->setVal('bailleurs', $bailleurs);
2524     }
2525 softime 6565 if ($validation == 0) {
2526 mbroquet 3730 if ($maj == 0){
2527    
2528     $form->setVal('annee', date('y'));
2529     $form->setVal('date_demande', date('Y-m-d'));
2530     $form->setVal('date_depot', date('Y-m-d'));
2531    
2532     //$form->setVal('demandeur_cp', $dossier_cp);
2533     //$form->setVal('demandeur_ville', $dossier_ville);
2534    
2535     //$form->setVal('delegataire_cp', $dossier_cp);
2536     //$form->setVal('delegataire_ville', $dossier_ville);
2537    
2538     //$form->setVal('terrain_cp', $dossier_cp);
2539     //$form->setVal('terrain_ville', $dossier_ville);
2540    
2541     $form->setVal('accord_tacite', 'Non');
2542     $form->setVal('etat', 'initialiser');
2543     }
2544     }
2545     }
2546    
2547    
2548     /**
2549     * getGeolocalisationLink retourne le code HTML affichant l'icone du globe, ainsi que
2550     * les coordonnées du centroide du dossier, le tout étant un lien vers le SIG.
2551     *
2552     * @return string Lien vers le SIG
2553     */
2554     function getGeolocalisationLink() {
2555     //
2556     $link = "<a id='action-form-localiser'".
2557 softime 7996 " target='_SIG' href='".OM_ROUTE_FORM."&obj=dossier_instruction&action=140&idx=".$this->getVal("dossier")."'>".
2558 mbroquet 3730 "<span class='om-icon om-icon-16 om-icon-fix sig-16' title='Localiser'>Localiser</span> ".
2559     $this->getVal('geom').
2560     " </a>";
2561     return $link;
2562     }
2563    
2564    
2565 softime 6929 function setSelect(&$form, $maj, &$db = null, $debug = null) {
2566 mbroquet 3730 // XXX Commenté pour patcher le problème de montée en charge de la base
2567     // de données en cas de reprise de données d'un gros volume de dossier
2568     // d'instruction
2569     //parent::setSelect($form, $maj, $db, $debug);
2570    
2571     //optimisation sur table importante parcelle -> pas d appel methode parent
2572     if(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php"))
2573     include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php");
2574    
2575     // om_collectivite
2576     $this->init_select($form, $this->f->db, $maj, null, "om_collectivite", $sql_om_collectivite, $sql_om_collectivite_by_id, false);
2577    
2578     /*
2579     * Pour chaque init_select d'un select non modifiable on teste
2580     * si l'on est en mode modifier : si c'est le cas alors on initialise le
2581     * select en mode consulter (qui n'affiche rien s'il n'y a aucune valeur).
2582     */
2583    
2584     $collectivite_idx = $this->getVal("om_collectivite");
2585 softime 6565 $affichage_form_dat = "";
2586 mbroquet 3730 // Si recherche avancée om_collectivite = collectivité utilisateur
2587     if($maj == 999) {
2588     $collectivite_idx = $this->f->getParameter("om_collectivite_idx");
2589 softime 6565 } else {
2590     $affichage_form_dat = $this->get_type_affichage_formulaire();
2591 mbroquet 3730 }
2592 softime 6565 // Définition de la qualité et de la traduction de l'instructeur
2593     switch ($affichage_form_dat) {
2594 softime 7067 case 'DPC':
2595 softime 6565 case 'ADS':
2596     $affichage_instr = "AND instructeur_qualite.code = 'instr'";
2597     $lib_instructeur = _("l'instructeur");
2598     break;
2599     case 'CTX RE':
2600     case 'CTX IN':
2601     $affichage_instr = "AND instructeur_qualite.code = 'juri'";
2602     $lib_instructeur = _('le juriste');
2603     break;
2604     default:
2605     $affichage_instr = "";
2606     $lib_instructeur = _("l'instructeur");
2607     break;
2608     }
2609 mbroquet 3730
2610 softime 6565
2611 mbroquet 3730 // instructeur
2612     // on recupère les services des multicollectivités et de celle du DI
2613     if($this->f->getParameter('option_afficher_division')==='true') {
2614     // instructeur
2615     $sql_instructeur_div_by_di = str_replace('<collectivite_di>', $collectivite_idx, $sql_instructeur_div_by_di);
2616 softime 6565 $sql_instructeur_div_by_di = str_replace('<instructeur_qualite>', $affichage_instr, $sql_instructeur_div_by_di);
2617 mbroquet 3730 $this->init_select($form, $db, $maj, $debug, "instructeur",
2618 softime 6565 $sql_instructeur_div_by_di, $sql_instructeur_div_by_id, true, false, $lib_instructeur);
2619    
2620     $sql_instructeur_2_div_by_di = str_replace('<collectivite_di>', $collectivite_idx, $sql_instructeur_2_div_by_di);
2621     $this->init_select($form, $db, $maj, $debug, "instructeur_2",
2622     $sql_instructeur_2_div_by_di, $sql_instructeur_2_div_by_id, true, false, _('le technicien'));
2623    
2624 mbroquet 3730 } else {
2625     $sql_instructeur_by_di = str_replace('<collectivite_di>', $collectivite_idx, $sql_instructeur_by_di);
2626 softime 6565 $sql_instructeur_by_di = str_replace('<instructeur_qualite>', $affichage_instr, $sql_instructeur_by_di);
2627 mbroquet 3730 $this->init_select($form, $db, $maj, $debug, "instructeur",
2628 softime 6565 $sql_instructeur_by_di, $sql_instructeur_by_id, true, false, $lib_instructeur);
2629     $sql_instructeur_2_by_di = str_replace('<collectivite_di>', $collectivite_idx, $sql_instructeur_2_by_di);
2630     $this->init_select($form, $db, $maj, $debug, "instructeur_2",
2631     $sql_instructeur_2_by_di, $sql_instructeur_2_by_id, true, false, _('le technicien'));
2632 mbroquet 3730 }
2633 softime 6565
2634 mbroquet 3730 // etat
2635     if ($maj == 1) {
2636     $this->init_select($form, $db, 3, $debug, "etat",
2637     $sql_etat, $sql_etat_by_id, false);
2638     } else {
2639     $this->init_select($form, $db, $maj, $debug, "etat",
2640     $sql_etat, $sql_etat_by_id, false);
2641     }
2642    
2643     // dossier_instruction_type
2644 softime 7366 $this->init_select($form, $db, $maj, $debug, "dossier_instruction_type",
2645 mbroquet 3730 $sql_dossier_instruction_type, $sql_dossier_instruction_type_by_id, false);
2646    
2647     // division
2648     $sql_division_by_di = str_replace('<collectivite_di>', $collectivite_idx, $sql_division_by_di);
2649     $this->init_select($form, $db, $maj, $debug, "division",
2650 softime 7685 $sql_division_by_di, $sql_division_by_id, true);
2651 mbroquet 3730
2652     // autorite_competente
2653 softime 7366 $this->init_select($form, $db, $maj, $debug, "autorite_competente",
2654 mbroquet 3730 $sql_autorite_competente, $sql_autorite_competente_by_id, false);
2655    
2656     // avis_decision
2657     if ($maj == 1) {
2658     $this->init_select($form, $db, 3, $debug, "avis_decision",
2659     $sql_avis_decision, $sql_avis_decision_by_id, false);
2660     } else {
2661     $this->init_select($form, $db, $maj, $debug, "avis_decision",
2662     $sql_avis_decision, $sql_avis_decision_by_id, false);
2663     }
2664 softime 7366
2665 softime 6565 // autorisation_contestee
2666 softime 7366 if ($affichage_form_dat === 'CTX RE'
2667     && ($maj == 1 || $maj == 3)) {
2668     // À exécuter seulement en mode modifier ou consulter des recours
2669     // pour éviter le ralentissement de l'affichage des listings des DI
2670 softime 6565 $this->init_select($form, $db, $maj, $debug, "autorisation_contestee", $sql_autorisation_contestee, $sql_autorisation_contestee_by_id, false);
2671     }
2672 mbroquet 3730
2673     // evenement_suivant_tacite
2674 softime 7366 $this->init_select($form, $db, $maj, $debug, "evenement_suivant_tacite",
2675 mbroquet 3730 $sql_evenement_suivant_tacite, $sql_evenement_suivant_tacite_by_id, false);
2676    
2677     // evenement_suivant_tacite_incompletude
2678 softime 7366 $this->init_select($form, $db, $maj, $debug, "evenement_suivant_tacite_incompletude",
2679 mbroquet 3730 $sql_evenement_suivant_tacite_incompletude, $sql_evenement_suivant_tacite_incompletude_by_id, false);
2680    
2681     // Ajout, modification et recherche avancée
2682     if($maj == 0 || $maj == 1 || $maj == 999){
2683     // accord tacite
2684     $contenu=array();
2685     $contenu[0]=array('Non','Oui');
2686     $contenu[1]=array('Non','Oui');
2687     $form->setSelect("accord_tacite",$contenu);
2688    
2689     // geom *** a voir
2690     if($maj==1){ //modification
2691     $contenu=array();
2692     $contenu[0]=array("dossier",$this->getParameter("idx"));
2693     $form->setSelect('geom',$contenu);
2694     }
2695 softime 6565 // arrondissement recherche avancée
2696 mbroquet 3730 $this->init_select($form, $db, $maj, $debug, "arrondissement",
2697     $sql_arrondissement, $sql_arrondissement_by_id, false);
2698 softime 6565 // dossier_autorisation_type_detaille recherche avancée
2699 mbroquet 3730 $this->init_select($form, $db, $maj, $debug, "dossier_autorisation_type_detaille",
2700     $sql_dossier_autorisation_type_detaille, $sql_dossier_autorisation_type_detaille_by_id, false);
2701    
2702     }
2703    
2704     // Ce formulaire n'est pas accessible en ajout ni en recherche avancée
2705     // mais dans le cas où il le serait, rien ne doit être fait concernant
2706 softime 6929 // les taxes
2707 mbroquet 3730 if ($maj != 0 && $maj != 999) {
2708    
2709 softime 6929 // Instance du parmétrage des taxes
2710 mbroquet 3730 $inst_taxe_amenagement = $this->get_inst_taxe_amenagement();
2711     // Si la colletivité à un paramétrage pour la taxe d'aménagement
2712 softime 6929 if ($inst_taxe_amenagement !== null) {
2713 mbroquet 3730
2714     // Choix du secteur pour part communale
2715     $contenu = array();
2716     $contenu[0][0] = "";
2717     $contenu[1][0] = _('choisir')."&nbsp;"._("tax_secteur");
2718    
2719     // Il y a 20 secteurs maximum dans une commune de France
2720     for ($i=1; $i < 21; $i++) {
2721    
2722     // Valeur du secteur
2723     $value = $inst_taxe_amenagement->getVal('tx_comm_secteur_'.$i);
2724    
2725     //
2726 softime 6929 if ($value !== null && $value !== '') {
2727 mbroquet 3730 //
2728     $contenu[0][$i] = $i;
2729     $contenu[1][$i] = sprintf(_('Secteur %s'), $i);
2730     }
2731     }
2732     //
2733     $form->setSelect("tax_secteur", $contenu);
2734     }
2735     }
2736     }
2737    
2738     function setLib(&$form,$maj) {
2739     parent::setLib($form,$maj);
2740 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
2741     if ($affichage_form === 'ADS') {
2742     $form->setLib('date_decision', _("date de la decision"));
2743     $form->setLib('date_limite', _("limite d'instruction"));
2744     }
2745     if ($affichage_form === 'CTX IN') {
2746     $form->setLib('avis_decision', _("Décision"));
2747     $form->setLib('date_cloture_instruction', _("Date de clôture d'instruction"));
2748     $form->setLib('date_decision', _("Date de décision"));
2749     $form->setLib('date_depot', _("Date de réception"));
2750     $form->setLib('date_limite', _("Tacicité"));
2751     $form->setLib('instructeur',_('Juriste'));
2752     }
2753     if ($affichage_form === 'CTX RE') {
2754     $form->setLib('autorisation_contestee', _("Autorisation contestée"));
2755     $form->setLib('avis_decision', _("Décision"));
2756     $form->setLib('date_cloture_instruction', _("Date de clôture d'instruction"));
2757     $form->setLib('date_decision', _("Date de décision"));
2758     $form->setLib('date_depot', _("Date de recours"));
2759     $form->setLib('date_limite', _("Tacicité"));
2760     $form->setLib('instructeur',_('Juriste'));
2761     }
2762 softime 7067 if ($affichage_form === 'DPC') {
2763     //
2764     }
2765 softime 6565 $form->setLib('accord_tacite',_("decision tacite"));
2766     $form->setLib('autorite_competente',_('competence'));
2767     $form->setLib('cle_acces_citoyen', _("cle_acces_citoyen"));
2768     $form->setLib('date_ait', _("Date d'AIT"));
2769     $form->setLib('date_audience', _("Date d'audience"));
2770     $form->setLib('date_complet', _("completude"));
2771     $form->setLib('date_contradictoire', _("Date de contradictoire"));
2772     $form->setLib('date_dernier_depot', _("dernier depot"));
2773     $form->setLib('date_derniere_visite', _("Date de dernière visite"));
2774     $form->setLib('date_limite_incompletude', _("limite d'instruction"));
2775     $form->setLib('date_premiere_visite', _("Date de 1ère visite"));
2776     $form->setLib('date_transmission_parquet', _('Date de transmission au Parquet'));
2777     $form->setLib('date_validite', _("fin de validite le"));
2778     $form->setLib('delai', _("delai (mois)"));
2779     $form->setLib('delai',_("delai d'instruction"));
2780     $form->setLib('description_projet',_('description du projet'));
2781     $form->setLib('dossier_arrondissement', _("Arrondissement"));
2782 mbroquet 3730 $form->setLib('dossier_autorisation_libelle',_('dossier_autorisation_libelle'));
2783 softime 6565 $form->setLib('dossier_autorisation_type_detaille', _("Type"));
2784     $form->setLib('contrevenants', _("Contrevenant(s)"));
2785 mbroquet 3730 $form->setLib('dossier_instruction_type',_('type de dossier'));
2786 softime 6565 $form->setLib('dossier_petitionnaire',_('demandeur'));
2787     $form->setLib('dossier_petitionnaires', _("Pétitionnaire(s)"));
2788     $form->setLib('requerants', _("Requérant(s)"));
2789     $form->setLib('dt_ctx_infraction', _("Infraction"));
2790     $form->setLib('dt_ctx_regularisable', _("Régularisable"));
2791     $form->setLib('dt_ctx_synthese_anr', _("Synthèse des ANR"));
2792     $form->setLib('dt_ctx_synthese_nti', _("Synthèse des NTI"));
2793 softime 8477 $form->setLib('ctx_reference_dsj', _("ctx_reference_dsj"));
2794     $form->setLib('ctx_reference_sagace', _("ctx_reference_sagace"));
2795 softime 6565 $form->setLib('enjeu_ctx', _("contentieux"));
2796     $form->setLib('enjeu_erp', _("ERP"));
2797     $form->setLib('enjeu_urba', _("urbanisme"));
2798     $form->setLib('erp', _("ERP"));
2799 mbroquet 3730 $form->setLib('geom',_('geolocalisaion'));
2800 softime 6565 $form->setLib('instructeur_2', _('Technicien'));
2801 mbroquet 3730 $form->setLib('numero_versement_archive', _("numero"));
2802 softime 7067 $form->setLib('bailleur', _("Bailleur(s)"));
2803     $form->setLib('terrain', _("Localisation"));
2804 softime 6565 }
2805 mbroquet 3730
2806     function setOnchange(&$form,$maj){
2807     parent::setOnchange($form,$maj);
2808     // mise en majuscule
2809     $form->setOnchange("demandeur_nom","this.value=this.value.toUpperCase()");
2810     $form->setOnchange("demandeur_societe","this.value=this.value.toUpperCase()");
2811     $form->setOnchange("delegataire_nom","this.value=this.value.toUpperCase()");
2812     $form->setOnchange("delegataire_societe","this.value=this.value.toUpperCase()");
2813     $form->setOnchange("architecte_nom","this.value=this.value.toUpperCase()");
2814     $form->setOnchange("terrain_adresse","this.value=this.value.toUpperCase()");
2815     $form->setOnchange('terrain_surface','VerifNumdec(this)');
2816     $form->setOnchange('tax_mtn_part_commu', 'VerifFloat(this, 0)');
2817     $form->setOnchange('tax_mtn_part_depart', 'VerifFloat(this, 0)');
2818     $form->setOnchange('tax_mtn_part_reg', 'VerifFloat(this, 0)');
2819     $form->setOnchange('tax_mtn_total', 'VerifFloat(this, 0)');
2820 softime 6929 $form->setOnchange('tax_mtn_rap', 'VerifFloat(this, 0)');
2821     $form->setOnchange('tax_mtn_part_commu_sans_exo', 'VerifFloat(this, 0)');
2822     $form->setOnchange('tax_mtn_part_depart_sans_exo', 'VerifFloat(this, 0)');
2823     $form->setOnchange('tax_mtn_part_reg_sans_exo', 'VerifFloat(this, 0)');
2824     $form->setOnchange('tax_mtn_total_sans_exo', 'VerifFloat(this, 0)');
2825     $form->setOnchange('tax_mtn_rap_sans_exo', 'VerifFloat(this, 0)');
2826 mbroquet 3730 }
2827    
2828     function setLayout(&$form, $maj) {
2829    
2830 softime 8477 // Récupère le CRUD
2831     $crud = $this->get_action_crud($this->getParameter("maj"));
2832    
2833     // Il n'y a pas d'affichage spécifique dans le cas d'une suppression
2834     if ($crud === 'delete') {
2835     return;
2836     }
2837    
2838 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
2839 softime 7067 if ($affichage_form === 'ADS' || $affichage_form === 'DPC') {
2840 softime 6565 // En-tête
2841     $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
2842 mbroquet 3730
2843 softime 6565 // Col1 : Fieldset "Dossier d'Instruction"
2844     $form->setBloc('om_collectivite', 'D', '', 'col_9');
2845 mbroquet 3730
2846 softime 6565 $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
2847     $form->setFieldset('geom', 'F');
2848    
2849 mbroquet 3730
2850 softime 6565 $form->setBloc('geom', 'F');
2851    
2852     // Col2 : 3 fieldsets
2853     $form->setBloc('enjeu_urba', 'D', '', 'col_3');
2854 mbroquet 3730
2855 softime 6565 // Fieldset "Enjeu"
2856     $form->setFieldset('enjeu_urba', 'D', _("Enjeu"));
2857     $form->setFieldset('enjeu_ctx', 'F');
2858     // Fieldset "Qualification"
2859     $form->setFieldset('erp', 'D', _("Qualification"));
2860     $form->setFieldset('a_qualifier', 'F');
2861     // Fieldset "Archive"
2862     $form->setFieldset('numero_versement_archive', 'D', _("Archive"));
2863     $form->setFieldset('date_demande', 'F');
2864    
2865     $form->setBloc('date_demande', 'F');
2866 mbroquet 3730 $form->setBloc('date_demande', 'F');
2867    
2868 softime 6565 // Fieldset "Instruction"
2869     $form->setBloc('date_depot', 'D', '', 'col_12');
2870     $form->setFieldset('date_depot', 'D', _('Instruction'), 'col_12');
2871 mbroquet 3730
2872 softime 6565 // Fieldset "Suivi"
2873     $form->setBloc('date_depot', 'D', '', 'col_12');
2874    
2875     $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
2876     // Col 1
2877     $form->setBloc('date_depot', 'D', '', 'col_6');
2878     $form->setBloc('date_depot', 'D');
2879     $form->setBloc('date_dernier_depot', 'F');
2880     $form->setBloc('date_limite', 'D', '', 'interligne');
2881     $form->setBloc('date_limite_incompletude', 'F');
2882 mbroquet 3730 $form->setBloc('date_limite_incompletude', 'F');
2883 softime 6565 // Col 2
2884     $form->setBloc('etat', 'D', '', 'col_6');
2885     $form->setBloc('etat', 'D');
2886     $form->setBloc('etat', 'F');
2887     $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
2888     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
2889 mbroquet 3730 $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
2890 softime 6565 $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
2891    
2892     $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
2893 mbroquet 3730
2894 softime 6565 // Bloc 2 fieldsets
2895     $form->setBloc('date_decision', 'D', '', 'col_12');
2896 mbroquet 3730
2897 softime 6565 // Col 1 Fieldset "Décision"
2898     $form->setFieldset('date_decision', 'D', _('Decision'), 'col_6');
2899     $form->setFieldset('avis_decision','F','');
2900     // Col 2 Fieldset "Validité de l'autorisation"
2901     $form->setFieldset('date_validite', 'D', _("Validite de l'autorisation"), 'col_6');
2902     $form->setFieldset('date_validite','F','');
2903 mbroquet 3730
2904 softime 6565 $form->setBloc('date_validite', 'F'); // Fin bloc 2 fieldsets
2905 mbroquet 3730
2906 softime 6565 $form->setFieldset('date_conformite','F','');
2907     $form->setBloc('date_conformite', 'F'); // Fin Instruction
2908 mbroquet 3730
2909 softime 6929 // Fieldset "Simulation des taxes"
2910 softime 6565 $form->setBloc('tax_secteur', 'D', '', 'col_12');
2911 softime 6929 $form->setFieldset('tax_secteur', 'D', _("Simulation des taxes"), 'startClosed');
2912     //
2913     $form->setBloc('tax_secteur', 'D', '', 'col_12');
2914     $form->setFieldset('tax_secteur', 'D', _("Taxe d'aménagement"), 'collapsible');
2915     $form->setFieldset('tax_mtn_total_sans_exo', 'F', '');
2916     $form->setBloc('tax_mtn_total_sans_exo', 'F');
2917     //
2918     $form->setBloc('tax_mtn_rap', 'D', '', 'col_12');
2919     $form->setFieldset('tax_mtn_rap', 'D', _("Redevance d'archéologie préventive"), 'collapsible');
2920     $form->setFieldset('tax_mtn_rap_sans_exo', 'F', '');
2921     $form->setBloc('tax_mtn_rap_sans_exo', 'F');
2922     //
2923     $form->setFieldset('tax_mtn_rap_sans_exo', 'F', '');
2924     $form->setBloc('tax_mtn_rap_sans_exo', 'F');
2925 mbroquet 3730
2926 softime 7067 // Fieldset "Localisation"
2927 softime 6565 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
2928 mbroquet 3730
2929 softime 7067 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
2930 softime 6565 // Col 1
2931     $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
2932     $form->setBloc('terrain_references_cadastrales', 'F');
2933     // Col 2
2934     $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
2935     $form->setBloc('terrain_superficie', 'F');
2936 mbroquet 3730
2937 softime 6565 $form->setFieldset('terrain_superficie', 'F', '');
2938 mbroquet 3730
2939 softime 6565 $form->setBloc('terrain_superficie', 'F');
2940     }
2941     // RECOURS
2942     if ($affichage_form === 'CTX RE') {
2943     // Fieldset "Dossier d'Instruction"
2944     $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
2945     $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
2946     $form->setFieldset('date_demande', 'F');
2947     $form->setBloc('date_demande', 'F');
2948 mbroquet 3730
2949 softime 6565 // Fieldset "Instruction"
2950     $form->setBloc('date_depot', 'D', '', 'col_12');
2951     $form->setFieldset('date_depot', 'D', _('Instruction'), 'col_12');
2952 mbroquet 3730
2953 softime 6565 // Fieldset "Suivi"
2954     $form->setBloc('date_depot', 'D', '', 'col_12');
2955    
2956     $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
2957 mbroquet 3730 // Col 1
2958 softime 6565 $form->setBloc('date_depot', 'D', '', 'col_6');
2959     // $form->setBloc('date_depot', 'D');
2960     // $form->setBloc('date_dernier_depot', 'F');
2961     // $form->setBloc('date_limite', 'D', '');
2962     // $form->setBloc('date_limite_incompletude', 'F');
2963     $form->setBloc('date_cloture_instruction', 'F');
2964 mbroquet 3730 // Col 2
2965 softime 6565 $form->setBloc('etat', 'D', '', 'col_6');
2966     $form->setBloc('etat', 'D');
2967     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
2968     // $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
2969     // $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
2970     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
2971     $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
2972    
2973     $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
2974 mbroquet 3730
2975 softime 6565 // Bloc 2 fieldsets
2976     $form->setBloc('date_decision', 'D', '', 'col_12');
2977 mbroquet 3730
2978 softime 6565 // Col 1 Fieldset "Décision"
2979     $form->setFieldset('date_decision', 'D', _('Decision'), 'col_12');
2980     $form->setFieldset('avis_decision','F','');
2981     // Col 2 Fieldset "Validité de l'autorisation"
2982    
2983     $form->setBloc('date_validite', 'F'); // Fin bloc 2 fieldsets
2984    
2985     $form->setFieldset('date_conformite','F','');
2986     $form->setBloc('date_conformite', 'F'); // Fin Instruction
2987    
2988 softime 7067 // Fieldset "Localisation"
2989 softime 6565 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
2990    
2991 softime 7067 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
2992 softime 6565 // Col 1
2993     $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
2994     $form->setBloc('terrain_references_cadastrales', 'F');
2995     // Col 2
2996     $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
2997     $form->setBloc('terrain_superficie', 'F');
2998    
2999     $form->setFieldset('terrain_superficie', 'F', '');
3000    
3001     $form->setBloc('terrain_superficie', 'F');
3002     }
3003    
3004     // INFRACTION
3005     if ($affichage_form === 'CTX IN') {
3006    
3007     // Fieldset "Dossier d'Instruction"
3008     $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
3009     $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
3010     $form->setFieldset('date_demande', 'F');
3011     $form->setBloc('date_demande', 'F');
3012    
3013     // Fieldset "Instruction"
3014     $form->setBloc('date_depot', 'D', '', 'col_12');
3015     $form->setFieldset('date_depot', 'D', _('Instruction'), 'col_12');
3016     // Fieldset "Suivi"
3017     $form->setBloc('date_depot', 'D', '', 'col_12');
3018     $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
3019     // Col 1
3020     $form->setBloc('date_depot', 'D', '', 'col_6');
3021     $form->setBloc('date_depot', 'D');
3022     $form->setBloc('date_dernier_depot', 'F');
3023     $form->setBloc('date_limite', 'D', '', 'interligne');
3024     $form->setBloc('date_limite_incompletude', 'F');
3025     $form->setBloc('date_limite_incompletude', 'F');
3026     // Col 2
3027     $form->setBloc('etat', 'D', '', 'col_6');
3028     $form->setBloc('etat', 'D');
3029     $form->setBloc('etat', 'F');
3030     $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
3031     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
3032     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
3033     $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
3034     $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
3035     // Fieldset "Décision"
3036     $form->setFieldset('date_decision', 'D', _('Decision'), 'col_12');
3037     $form->setFieldset('date_conformite','F',''); // Fin Décision
3038     $form->setFieldset('date_conformite','F','');
3039     $form->setBloc('date_conformite', 'F'); // Fin Instruction
3040    
3041 softime 7067 // Fieldset "Localisation"
3042 softime 6565 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
3043 softime 7067 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
3044 softime 6565 // Col 1
3045     $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
3046     $form->setBloc('terrain_references_cadastrales', 'F');
3047     // Col 2
3048     $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
3049     $form->setBloc('terrain_superficie', 'F');
3050     $form->setFieldset('terrain_superficie', 'F', '');
3051     $form->setBloc('terrain_superficie', 'F');
3052    
3053     // Fieldset "Demandeurs"
3054     // → cf. formSpecificContent()
3055     }
3056 mbroquet 3730 }
3057    
3058     /**
3059     * Permet de retourner si le dossier est incomplet notifié
3060     *
3061     * @return boolean true si incomplet notifié
3062     */
3063     function is_incomplet_notifie() {
3064     // Si le dossier est défini en tant qu'incomplet notifie
3065     if($this->getVal('incomplet_notifie') == 't' AND
3066     $this->getVal('incompletude') == 't') {
3067     return true;
3068     }
3069     return false;
3070     }
3071    
3072 softime 6929
3073 fmichon 4708 /**
3074 softime 7366 * Vérifie que le dossier d'instruction en cours ne soit pas instruit.
3075     * Ne sont pas compté comme instruit les dossiers n'ayant que des événements
3076     * d'instruction de type 'affichage'.
3077 softime 6929 *
3078     * @return boolean
3079     */
3080 softime 7366 function has_only_recepisse() {
3081 softime 6929
3082 softime 7366 // Récupère la liste des instructions du dossier
3083 softime 6929 $list_instructions = $this->get_list_instructions(true);
3084    
3085 softime 7366 // Si le dossier a pour seule instruction le récépissé de la demande
3086     if (count($list_instructions) === 1
3087     && $list_instructions[0] === $this->get_demande_instruction_recepisse()) {
3088 softime 6929 //
3089 softime 7366 return true;
3090 softime 6929 }
3091    
3092     //
3093 softime 7366 return false;
3094 softime 6929 }
3095    
3096    
3097     /**
3098 fmichon 4708 * TRIGGER - triggerajouterapres.
3099     *
3100     * - Interface avec le référentiel ERP [108]
3101     * - Gestion des données techniques liées
3102     * - Mise à jour du DA
3103     * - Gestion des références cadastrales / parcelles liées
3104     *
3105     * @return boolean
3106     */
3107 softime 6929 function triggerajouterapres($id, &$db = null, $val = array(), $DEBUG = null) {
3108 mbroquet 3730
3109 fmichon 4708 /**
3110     * Interface avec le référentiel ERP.
3111     *
3112     * (WS->ERP)[108] Dépôt de dossier DAT -> AT
3113     * Déclencheur :
3114     * - L'option ERP est activée
3115     * - Validation du formulaire d'ajout d'une demande de nouveau dossier
3116     * de type AT
3117     */
3118     //
3119 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
3120 fmichon 4708 && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__at')) {
3121     //
3122     $infos = array(
3123     "dossier_instruction" => $this->valF['dossier'],
3124     );
3125     //
3126     $ret = $this->f->send_message_to_referentiel_erp(108, $infos);
3127     if ($ret !== true) {
3128     $this->cleanMessage();
3129     $this->addToMessage(_("Une erreur s'est produite lors de la notification (108) du référentiel ERP. Contactez votre administrateur."));
3130     return false;
3131 mbroquet 3730 }
3132 fmichon 4708 $this->addToMessage(_("Notification (108) du référentiel ERP OK."));
3133     }
3134    
3135     /**
3136     * Gestion des données techniques liées.
3137     */
3138     // On ajoute les données techniques
3139     if ($this->ajoutDonneesTechniquesDI($id, $db, $val, $DEBUG) === false) {
3140 mbroquet 3730 //
3141 fmichon 4708 $this->addToMessage(_("Erreur lors de l'enregistrement du dossier.")." "._("Contactez votre administrateur."));
3142 mbroquet 3730 $this->correct = false;
3143     return false;
3144     }
3145    
3146 fmichon 4708 /**
3147     * Mise à jour des données du DA.
3148     */
3149     //
3150     $inst_da = $this->get_inst_dossier_autorisation($this->valF["dossier_autorisation"]);
3151     //
3152 softime 8640 $params = array(
3153     'di_id' => $this->valF[$this->clePrimaire],
3154     );
3155     if ($inst_da->majDossierAutorisation($params) === false) {
3156 fmichon 4708 //
3157     $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
3158     $this->correct = false;
3159     return false;
3160     }
3161    
3162     /**
3163     * Gestion des références cadastrales / parcelles liées.
3164     */
3165 mbroquet 3730 // Si le champ des références cadastrales n'est pas vide
3166     if ($this->valF['terrain_references_cadastrales'] != '') {
3167     // Ajout des parcelles dans la table dossier_parcelle
3168     $this->ajouter_dossier_parcelle($this->valF['dossier'],
3169     $this->valF['terrain_references_cadastrales']);
3170 softime 6565 }
3171 mbroquet 3730
3172 softime 6565 /**
3173     * Notification de l'éventuelle autorisation contestée
3174     */
3175     if ($this->valF['autorisation_contestee'] !== null) {
3176     // Instancie la classe dossier_message
3177     $dossier_message = $this->get_inst_dossier_message(']');
3178     // Ajoute le message de notification
3179     $dossier_message_val = array();
3180     $dossier_message_val['dossier'] = $this->valF['autorisation_contestee'];
3181     $dossier_message_val['type'] = _('Autorisation contestée');
3182     $dossier_message_val['emetteur'] = $this->f->get_connected_user_login_name();
3183     $dossier_message_val['login'] = $_SESSION['login'];
3184     $dossier_message_val['date_emission'] = date('Y-m-d H:i:s');
3185     $dossier_message_val['contenu'] = sprintf(_('Cette autorisation a été contestée par le recours %s.'), $this->valF['dossier']);
3186     // Si une erreur se produit lors de l'ajout
3187     if ($dossier_message->add_notification_message($dossier_message_val) !== true) {
3188     // Message d'erreur affiché à l'utilisateur
3189     $this->addToMessage(_("L'autorisation contestée n'a pas pu être notifiée du recours."));
3190     $this->correct = false;
3191     return false;
3192     }
3193 mbroquet 3730 }
3194    
3195 softime 6565 //
3196     return true;
3197 mbroquet 3730 }
3198 softime 6565
3199 mbroquet 3730 /**
3200 softime 6565 * Récupère l'instance de dossier message.
3201     *
3202     * @param string $dossier_message Identifiant du message.
3203     *
3204     * @return object
3205     */
3206     private function get_inst_dossier_message($dossier_message = null) {
3207     //
3208     return $this->get_inst_common("dossier_message", $dossier_message);
3209     }
3210    
3211     /**
3212 mbroquet 3730 * Récupère l'identifiant du quartier et d'un arrondissement d'une référence
3213     * cadastrale
3214     * @param string $reference_cadastrale
3215     *
3216     * @return array
3217     */
3218     function getQuartierArrondissement($reference_cadastrale) {
3219    
3220     $reference_cadastrale = trim($reference_cadastrale);
3221     $quartier = '';
3222    
3223     //Récupère le code impot du quartier dans la référence cadastrale
3224     for ( $i = 0 ; $i < strlen($reference_cadastrale) ; $i++ ){
3225    
3226     //Si c'est un chiffre, c'est le code quartier
3227     if (is_numeric($reference_cadastrale[$i]) ){
3228    
3229     $quartier .= $reference_cadastrale[$i];
3230     }
3231     //Sinon c'est la section
3232     else{
3233     break;
3234     }
3235     }
3236    
3237     //Si le code impôt du quartier a bien été renseigné
3238     if ( $quartier !== '' ){
3239    
3240     //Requête de récupération de l'identifiantdu quartier et de
3241     //l'arrondissement
3242     $sql = "SELECT
3243     quartier, arrondissement
3244     FROM
3245     ".DB_PREFIXE."quartier
3246     WHERE
3247     code_impots='$quartier'";
3248     $this->addToLog("getQuartierArrondissement() : db->query(\"$sql\")", VERBOSE_MODE);
3249     $res = $this->db->query($sql);
3250     if (database::isError($res)) {
3251     die();
3252     }
3253    
3254     //Si on a un résultat
3255     if ( $res->numRows() == 1 ){
3256     //
3257     return $res->fetchRow(DB_FETCHMODE_ASSOC);
3258     }
3259     }
3260    
3261     return NULL;
3262     }
3263    
3264     /**
3265     * Récupère la section d'une référence cadastrale
3266     * @param string $reference_cadastrale
3267     *
3268     * @return string
3269     */
3270     function getSection($reference_cadastrale){
3271    
3272     $reference_cadastrale = trim($reference_cadastrale);
3273     $section = NULL;
3274    
3275     for ( $i = 0 ; $i < strlen($reference_cadastrale) ; $i++ )
3276     if ( !is_numeric($reference_cadastrale[$i]) && is_string($reference_cadastrale[$i]) && $reference_cadastrale[$i] !== ' ' )
3277     $section .= $reference_cadastrale[$i];
3278    
3279     return $section;
3280     }
3281    
3282     /*
3283     * Retourne l'intructeur correspondant le mieux à la parcelle
3284     * */
3285     /**
3286     * Récupère la section d'une référence cadastrale
3287     * @param string $quartier
3288     * @param string $arrondissement
3289     * @param string $section
3290     * @param string $dossier_autorisation
3291     *
3292     * @return array
3293     */
3294 softime 6565 function getInstructeurDivision( $quartier, $arrondissement, $section, $dossier_autorisation_type_detaille, $collectivite, $column = 'instructeur') {
3295 mbroquet 3730
3296     $quartier = ( $quartier == NULL ) ? -1 : $quartier;
3297     $arrondissement = ( $arrondissement == NULL ) ? -1 : $arrondissement;
3298     $collectivite = ( $collectivite == "" ) ? -1 : $collectivite;
3299    
3300     //Si le dossier d'autorisation a un type détaillé de dossier
3301     //d'autorisation associé
3302     if ($dossier_autorisation_type_detaille != ''
3303     && $dossier_autorisation_type_detaille != null){
3304    
3305     //Requête de récupération de l'instructeur à affecter
3306     $sql = "
3307     SELECT
3308 softime 6565 ".$column.", section, quartier, arrondissement, dossier_autorisation_type_detaille
3309 mbroquet 3730 FROM
3310     ".DB_PREFIXE."affectation_automatique l
3311     WHERE
3312     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier IS NULL AND section IS NULL AND om_collectivite IS NULL) OR
3313     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier IS NULL AND section IS NULL AND om_collectivite = $collectivite) OR
3314     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier IS NULL AND section = '$section' AND om_collectivite = $collectivite) OR
3315     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier IS NULL AND section = '$section' AND om_collectivite IS NULL) OR
3316     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier = $quartier AND section IS NULL AND om_collectivite = $collectivite) OR
3317     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier = $quartier AND section IS NULL AND om_collectivite IS NULL) OR
3318     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier = $quartier AND section = '$section' AND om_collectivite = $collectivite) OR
3319     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier = $quartier AND section = '$section' AND om_collectivite IS NULL) OR
3320     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier IS NULL AND section IS NULL AND om_collectivite = $collectivite) OR
3321     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier IS NULL AND section IS NULL AND om_collectivite IS NULL) OR
3322     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier IS NULL AND section = '$section' AND om_collectivite = $collectivite) OR
3323     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier IS NULL AND section = '$section' AND om_collectivite IS NULL) OR
3324     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier = $quartier AND section IS NULL AND om_collectivite = $collectivite) OR
3325     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier = $quartier AND section IS NULL AND om_collectivite IS NULL) OR
3326     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier = $quartier AND section = '$section' AND om_collectivite IS NULL) OR
3327     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier = $quartier AND section = '$section' AND om_collectivite = $collectivite) OR
3328     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier IS NULL AND section IS NULL AND om_collectivite IS NULL) OR
3329     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier IS NULL AND section IS NULL AND om_collectivite = $collectivite) OR
3330     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier IS NULL AND section = '$section' AND om_collectivite = $collectivite) OR
3331     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier IS NULL AND section = '$section' AND om_collectivite IS NULL) OR
3332     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier = $quartier AND section IS NULL AND om_collectivite = $collectivite) OR
3333     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier = $quartier AND section IS NULL AND om_collectivite IS NULL) OR
3334     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier = $quartier AND section = '$section' AND om_collectivite = $collectivite) OR
3335     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier = $quartier AND section = '$section' AND om_collectivite IS NULL) OR
3336     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier IS NULL AND section IS NULL AND om_collectivite = $collectivite) OR
3337     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier IS NULL AND section IS NULL AND om_collectivite IS NULL) OR
3338     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier IS NULL AND section = '$section' AND om_collectivite = $collectivite) OR
3339     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier IS NULL AND section = '$section' AND om_collectivite IS NULL) OR
3340     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier = $quartier AND section IS NULL AND om_collectivite = $collectivite) OR
3341     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier = $quartier AND section IS NULL AND om_collectivite IS NULL) OR
3342     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier = $quartier AND section = '$section' AND om_collectivite IS NULL) OR
3343     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier = $quartier AND section = '$section' AND om_collectivite = $collectivite)
3344     ORDER BY dossier_autorisation_type_detaille, section, quartier, arrondissement
3345     LIMIT 1";
3346     $this->addToLog("getInstructeurDivision : db->query(\"$sql\")", VERBOSE_MODE);
3347     $res = $this->db->query($sql);
3348     if (database :: isError($res))
3349     die($res->getMessage()."erreur ".$sql);
3350    
3351     //Si on a récupéré un instructeur correspondant aux critères
3352     if ( $res->numRows() > 0 ){
3353    
3354     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
3355 softime 6565 // On vérifie que l'instructeur est paramétré
3356     if ($row[$column] !== '') {
3357     //On récupère sa division
3358     $sql = "SELECT division FROM ".DB_PREFIXE."instructeur WHERE instructeur = ".$row[$column];
3359     $res = $this->db->query($sql);
3360     if (database :: isError($res))
3361     die($res->getMessage()."erreur ".$sql);
3362 mbroquet 3730
3363 softime 6565 $row['division'] = NULL;
3364     //S'il a une division
3365     if ( $res->numRows() > 0 ){
3366    
3367     $rowT=& $res->fetchRow(DB_FETCHMODE_ASSOC);
3368     $row['division'] = $rowT['division'];
3369     }
3370    
3371     return $row;
3372 mbroquet 3730 }
3373     }
3374     }
3375    
3376 softime 6565 return NULL;
3377 mbroquet 3730 }
3378    
3379     /**
3380     * Récupère le type détaillé d'une dossier d'autorisation.
3381     *
3382     * @param integer $dossier_autorisation DA
3383     *
3384     * @return mixed
3385     */
3386     function get_dossier_autorisation_da_type_detaille($dossier_autorisation) {
3387    
3388     //
3389     $resDATD = "";
3390    
3391     //Récupération du dossier_autorisation_type_detaille concerné par le
3392     //$dossier_autorisation
3393     $sql = "
3394     SELECT
3395     dossier_autorisation_type_detaille
3396     FROM
3397     ".DB_PREFIXE."dossier_autorisation
3398     WHERE
3399     dossier_autorisation = '$dossier_autorisation'";
3400     $this->addToLog(__METHOD__." : db->query(\"$sql\")", VERBOSE_MODE);
3401     $resDATD = $this->db->getOne($sql);
3402     $this->f->isDatabaseError($resDATD);
3403    
3404     //
3405     return $resDATD;
3406     }
3407    
3408     /* =============================================================
3409     * ===============================================================
3410     */
3411    
3412 softime 6929 function triggerajouter($id, &$db = null, $val = array(), $DEBUG = null) {
3413 mbroquet 3730 //
3414     $this->addToLog("triggerajouter() : start", EXTRA_VERBOSE_MODE);
3415    
3416     // Initialisation des variables nécessaires à l'affectation automatique
3417     $quartier = NULL;
3418     $arrondissement = NULL;
3419     $section = NULL;
3420     $instructeur = NULL;
3421    
3422     // Si la référence cadastrale n'est pas vide alors on récupère la
3423     //section, le quartier et l'arrondissement
3424     if ($this->valF['terrain_references_cadastrales'] != '') {
3425    
3426     // Cette méthode récupère l'arrondissement et le quartier de la
3427     //référence cadastrale saisie
3428     $quartierArrondissement = $this->getQuartierArrondissement($this->valF['terrain_references_cadastrales']);
3429     if ( $quartierArrondissement!= NULL ){
3430    
3431     $quartier = $quartierArrondissement['quartier'];
3432     $arrondissement = $quartierArrondissement['arrondissement'];
3433     }
3434     // Si il n'y a pas d'arrondissement alors on vide le quartier
3435     if ( strcmp($arrondissement,'') == 0 ) {
3436    
3437     $arrondissement = NULL;
3438     $quartier = NULL;
3439     }
3440     // On récupère la section
3441     $section = $this->getSection($this->valF['terrain_references_cadastrales']);
3442     }
3443    
3444     // Si aucun instructeur n'est saisi et que la dossier_autorisation_type_detaille n'est pas vide
3445     // alors on récupère l'instructeur et la division depuis l'affectation
3446     if ( ( empty($this->valF['instructeur']) || $this->valF['instructeur'] == '' ) && $val['dossier_autorisation'] != '' ) {
3447    
3448     // Récupère le type détaillé du DA
3449     $dossier_autorisation_type_detaille = $this->get_dossier_autorisation_da_type_detaille($this->valF['dossier_autorisation']);
3450    
3451     //Récupération de l'instructeur ainsi que de sa division
3452     $instructeurDivision = $this->getInstructeurDivision($quartier, $arrondissement, $section, $dossier_autorisation_type_detaille, $this->valF['om_collectivite']);
3453    
3454     //Si un instructeur et sa division ont été récupérés
3455     if ( $instructeurDivision != NULL ){
3456    
3457     $instructeur = $instructeurDivision['instructeur'];
3458     $division = $instructeurDivision['division'];
3459     }
3460     //Si un instructeur et sa division n'ont pas été récupérés, on
3461     //ajoute pas les données
3462     if ( $instructeur != NULL ){
3463    
3464     $this->valF['instructeur'] = $instructeur;
3465     $this->valF['division'] = $division;
3466     } else {
3467     //On affiche un message à l'utilisateur pour lui signifier
3468     //qu'aucun instructeur n'a été assigné au dossier d'instruction
3469     //créé
3470     if ($this->f->isAccredited("dossier_modifier_instructeur")) {
3471     $this->addToMessage("<br/> "._("Pensez a assigner un instructeur a ce dossier.")." <br/>");
3472     } else {
3473     $this->addToMessage("<br/> "._("Aucun instructeur compatible avec ce dossier trouve, contactez votre administrateur afin d'en assigner un a ce dossier.")." <br/>");
3474     }
3475     }
3476 softime 6565
3477     // Gestion instructeur 2
3478     $instr2 = $this->getInstructeurDivision($quartier, $arrondissement, $section, $dossier_autorisation_type_detaille, $this->valF['om_collectivite'], 'instructeur_2');
3479     if ($instr2 != NULL){
3480     $this->valF['instructeur_2'] = $instr2['instructeur_2'];
3481     }
3482 mbroquet 3730 } else {
3483     $this->addToMessage("<br/> "._("Aucun instructeur compatible avec ce dossier trouve, contactez votre administrateur afin d'en assigner un a ce dossier.")." <br/>");
3484     }
3485     //
3486     $this->addToLog("triggerajouter() : end", EXTRA_VERBOSE_MODE);
3487     }
3488    
3489 fmichon 4708 /**
3490     * TRIGGER - triggermodifierapres.
3491     *
3492     * - Interface avec le référentiel ERP [101]
3493     * - Interface avec le référentiel ERP [102][103]
3494 softime 6272 * - Interface avec le référentiel ERP [114]
3495 fmichon 4708 * - Gestion des demandeurs liés
3496     * - Gestion des références cadastrales / parcelles liées
3497     * - Gestion des taxes
3498     *
3499     * @return boolean
3500     */
3501 softime 6929 function triggermodifierapres($id, &$db = null, $val = array(), $DEBUG = null) {
3502 softime 6565 // Mise à jour DA si miroir du DI
3503     $inst_da = $this->get_inst_dossier_autorisation($this->getVal('dossier_autorisation'));
3504     if ($inst_da->is_dossier_autorisation_visible() === false) {
3505 softime 8640 $params = array(
3506     'di_id' => $this->getVal($this->clePrimaire),
3507     );
3508     if ($inst_da->majDossierAutorisation($params) === false) {
3509 softime 6565 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
3510     return false;
3511     }
3512     }
3513 fmichon 4708
3514     /**
3515     * Interface avec le référentiel ERP.
3516     *
3517     * (WS->ERP)[101] ERP Qualifié -> AT
3518     * Déclencheur :
3519     * - L'option ERP est activée
3520     * - Le dossier est de type AT
3521     * - Le dossier est marqué comme "connecté au référentiel ERP"
3522     * - Le formulaire de modification du dossier est validé avec le
3523     * marqueur "à qualifier" à "NON" alors qu'il était précédemment à
3524     * "OUI"
3525     */
3526     //
3527 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
3528 fmichon 4708 && $this->is_connected_to_referentiel_erp() === true
3529     && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__at')
3530     && $this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false) {
3531 softime 4740 // Récupère la liste des contraintes
3532     $contraintes_plu_list = $this->getListContrainte($this->valF['dossier'], false);
3533     // Extrait les libellés de chaque contraintes
3534     $contraintes_plu = array();
3535     $contraintes_plu_string = "";
3536     while($row = &$contraintes_plu_list->fetchRow(DB_FETCHMODE_ASSOC)) {
3537     //
3538     $contraintes_plu[] = $row['contrainte_libelle'];
3539     }
3540     // Chaîne de caractère listant toutes les contraintes du dossier
3541     $contraintes_plu_string = implode(' ; ', $contraintes_plu);
3542 nhaye 6052 $competence = "";
3543     if ($this->valF['autorite_competente'] !== null) {
3544     $inst_ac = $this->get_inst_autorite_competente($this->valF['autorite_competente']);
3545     $competence = $inst_ac->getVal("libelle");
3546     }
3547 fmichon 4708 //
3548     $infos = array(
3549     "dossier_instruction" => $this->valF['dossier'],
3550 nhaye 6052 "competence" => $competence,
3551 softime 4740 "contraintes_plu" => $contraintes_plu_string,
3552 fmichon 4708 "references_cadastrales" => $this->getReferenceCadastrale($this->valF['dossier']),
3553     );
3554     //
3555     $ret = $this->f->send_message_to_referentiel_erp(101, $infos);
3556     if ($ret !== true) {
3557     $this->cleanMessage();
3558     $this->addToMessage(_("Une erreur s'est produite lors de la notification (101) du référentiel ERP. Contactez votre administrateur."));
3559     return false;
3560 mbroquet 3730 }
3561 fmichon 4708 $this->addToMessage(_("Notification (101) du référentiel ERP OK."));
3562     }
3563 mbroquet 3730
3564 fmichon 4708 /**
3565     * Interface avec le référentiel ERP.
3566     *
3567     * (WS->ERP)[102] Demande de complétude de dossier PC pour un ERP -> PC qui concerne un ERP
3568     * (WS->ERP)[103] Demande de qualification de dossier PC pour un ERP -> PC qui concerne un ERP
3569     * Déclencheur :
3570     * - L'option ERP est activée
3571     * - Le dossier est de type PC
3572     * - Le formulaire de modification du dossier est validé avec le
3573     * marqueur "à qualifier" à "NON" alors qu'il était précédemment à
3574     * "OUI"
3575     * - Le formulaire de modification du dossier est validé avec le
3576     * marqueur "ERP" à "OUI"
3577     */
3578     //
3579 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
3580 fmichon 4708 && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
3581     && $this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false
3582     && $this->valF['erp'] == true) {
3583     //
3584     $infos = array(
3585     "dossier_instruction" => $this->valF['dossier'],
3586     );
3587     // [102] Demande de complétude de dossier PC pour un ERP
3588     $ret = $this->f->send_message_to_referentiel_erp(102, $infos);
3589     if ($ret !== true) {
3590     $this->cleanMessage();
3591     $this->addToMessage(_("Une erreur s'est produite lors de la notification (102) du référentiel ERP. Contactez votre administrateur."));
3592     return false;
3593     }
3594     $this->addToMessage(_("Notification (102) du référentiel ERP OK."));
3595     // [103] Demande de qualification de dossier PC pour un ERP
3596     $ret = $this->f->send_message_to_referentiel_erp(103, $infos);
3597     if ($ret !== true) {
3598     $this->cleanMessage();
3599     $this->addToMessage(_("Une erreur s'est produite lors de la notification (103) du référentiel ERP. Contactez votre administrateur."));
3600     return false;
3601     }
3602     $this->addToMessage(_("Notification (103) du référentiel ERP OK."));
3603     }
3604    
3605     /**
3606 softime 6272 * Interface avec le référentiel ERP.
3607     *
3608     * (WS->ERP)[114] ERP Qualifié -> PC
3609     * Déclencheur :
3610     * - l'option ERP est activée
3611     * - ET le dossier est marqué comme "connecté au référentiel ERP"
3612     * - ET le dossier est de type PC
3613     * - ET
3614     * - soit le formulaire de modification du dossier est validé avec le
3615     * marqueur "enjeu_urba" qui change de statut
3616     * - soit ce marqueur est vrai et le dossier passe à qualifié
3617     */
3618     // Étant donné que l'objet a été modifié en base après sa création,
3619     // il faut le ré-instancier pour récupérer ses informations.
3620 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
3621     "obj" => "dossier",
3622     "idx" => $this->valF['dossier'],
3623     ));
3624 softime 7366 if ($dossier->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
3625 softime 6272 && $dossier->is_connected_to_referentiel_erp() === true
3626     && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
3627     && (($this->getVal('enjeu_urba') == 't') != $this->valF['enjeu_urba']
3628     || ($this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false
3629     && $this->getVal('enjeu_urba') == 't'))) {
3630    
3631     $enjeu = "non";
3632     if ($this->valF['enjeu_urba']) {
3633     $enjeu = "oui";
3634     }
3635    
3636     $infos = array(
3637     "dossier_instruction" => $this->valF['dossier'],
3638     "Dossier à enjeu ADS" => $enjeu
3639     );
3640     //
3641     $ret = $this->f->send_message_to_referentiel_erp(114, $infos);
3642     if ($ret !== true) {
3643     $this->cleanMessage();
3644     $this->addToMessage(_("Une erreur s'est produite lors de la notification (114) du référentiel ERP. Contactez votre administrateur."));
3645     return false;
3646     }
3647     $this->addToMessage(_("Notification (114) du référentiel ERP OK."));
3648     }
3649    
3650     /**
3651 fmichon 4708 * Gestion des demandeurs liés.
3652     */
3653 mbroquet 3730 // Ajout ou modification des demandeurs
3654 softime 6565 $this->insertLinkDossierDemandeur($db, $DEBUG);
3655 mbroquet 3730
3656 fmichon 4708 /**
3657     * Gestion des références cadastrales / parcelles liées.
3658     */
3659 mbroquet 3730 // Si le champ des références cadastrales n'est pas vide
3660     if ($this->getVal('terrain_references_cadastrales')
3661     != $this->valF['terrain_references_cadastrales']) {
3662    
3663     // On supprime toutes les lignes de la table dossier_parcelle qui
3664     // font référence le dossier en cours de modification
3665     $this->supprimer_dossier_parcelle($val['dossier']);
3666    
3667     // Ajout des parcelles dans la table dossier_parcelle
3668     $this->ajouter_dossier_parcelle($val['dossier'],
3669     $val['terrain_references_cadastrales']);
3670    
3671     }
3672    
3673 fmichon 4708 /**
3674     * Gestion des taxes.
3675     */
3676 softime 6929 // Si le champ tax_secteur est modifié et que l'option de simulation des
3677     // taxes est activée
3678     if ($this->getVal('tax_secteur') != $this->valF['tax_secteur']
3679     && $this->f->is_option_simulation_taxes_enabled($this->getVal('om_collectivite')) === true) {
3680 mbroquet 3730
3681     // Valeurs pour le calcul de la taxe d'aménagement
3682 softime 6929 $values = array();
3683     // Instance de la classe donnees_techniques
3684     $donnees_techniques = $this->get_inst_donnees_techniques();
3685     // Récupère les valeurs des données techniques
3686     $values = $donnees_techniques->get_form_val();
3687 mbroquet 3730
3688     // Met à jour les montants du dossier
3689 softime 6929 $update_dossier_tax_mtn = $this->update_dossier_tax_mtn($this->valF['tax_secteur'], $values);
3690     if ($update_dossier_tax_mtn === false) {
3691 mbroquet 3730 //
3692     $this->addToMessage(_("La mise a jour des montants de la simulation de la taxe d'amenagement a echouee."));
3693 softime 6929 //
3694 mbroquet 3730 return false;
3695     }
3696     }
3697    
3698 softime 6272 /**
3699     * Gestion des métadonées des pièces liés.
3700     * Vérifie les méthodes à exécuter configurées dans le connecteur du
3701     * filestorage.
3702     */
3703 mbroquet 3730 //
3704 softime 6272 $ret = $this->post_update_metadata($val);
3705     //
3706     if ($ret === false) {
3707     //
3708     $this->cleanMessage();
3709     $this->addToMessage(_("La mise à jour des métadonnées des pièces liées à ce dossier a échouée."));
3710     return false;
3711     }
3712    
3713 softime 7366 /**
3714     * Gestion des du changement de date de dépôt.
3715     * Vérification préalable de la présence de la date et de sa
3716     * modification.
3717     */
3718 softime 6272 //
3719 softime 7366 if (array_key_exists("date_depot", $val) === true) {
3720     //
3721 softime 7540 $inst_new_date = DateTime::createFromFormat('d/m/Y', $val["date_depot"]);
3722     $inst_old_date = DateTime::createFromFormat('Y-m-d', $this->getVal("date_depot"));
3723     $new_date = $inst_new_date->format('d/m/Y');
3724     $old_date = $inst_old_date->format('d/m/Y');
3725 softime 7366
3726     //
3727     if ($new_date !== $old_date) {
3728     //
3729     $status = $this->update_date_depot($val["date_depot"]);
3730     //
3731     if ($status === false) {
3732     //
3733     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
3734     return false;
3735     }
3736    
3737     }
3738     }
3739     //
3740 mbroquet 3730 return true;
3741     }
3742    
3743 softime 7366 /**
3744     * Permet d’effectuer des actions avant la modification des données dans la base.
3745     * @param mixed $id Identifiant de l'enregistrement
3746     * @param object &$db Objet de la base de données
3747     * @param array $val Valeurs du formulaire
3748     * @param boolean $DEBUG Mode DEBUG
3749     */
3750     function triggermodifier($id, &$db = null, $val = array(), $DEBUG = null) {
3751     // Si la date de dépôt a changé et si elle valait celle du dernier dépôt
3752     // alors cette dernière prend également sa valeur
3753     if ($this->f->formatDate($this->getVal('date_depot')) !== $val['date_depot']
3754     && $this->f->formatDate($this->getVal('date_depot')) === $this->f->formatDate($this->getVal('date_dernier_depot'))) {
3755     $this->valF['date_dernier_depot'] = $this->valF['date_depot'];
3756     }
3757 softime 6272
3758 softime 7366 //
3759     return true;
3760     }
3761    
3762 mbroquet 3730 /**
3763 softime 7366 * Methode de traitement suite à la modification de la date de dépot.
3764     *
3765     * @param string $new_date_str Nouvelle date de dépot.
3766     *
3767     * @return boolean
3768     */
3769     function update_date_depot($new_date_str) {
3770     $demande = $this->get_inst_demande();
3771     if ($demande === false) {
3772     return false;
3773     }
3774    
3775     $retour = $this->majDateInstruction($demande->getVal("instruction_recepisse"), $new_date_str);
3776     if ($retour === false) {
3777     return false;
3778     }
3779    
3780     $valF = array();
3781     foreach ($demande->champs as $id => $champ) {
3782     $valF[$champ] = $demande->val[$id];
3783     }
3784     $valF['date_demande'] = $new_date_str;
3785     $modification = $demande->modifier($valF, $this->f->db, DEBUG);
3786     if ($modification === false) {
3787     return false;
3788     }
3789    
3790     $row_date = array("date_demande" => $new_date_str);
3791     $res = $this->db->autoExecute(
3792     DB_PREFIXE."dossier",
3793     $row_date,
3794     DB_AUTOQUERY_UPDATE,
3795     "dossier = '".$this->getVal("dossier")."'"
3796     );
3797     $this->f->addToLog(__METHOD__ . "() : db->autoExecute(" . $res . ")", VERBOSE_MODE);
3798     if ($this->f->isDatabaseError($res, true)) {
3799     return false;
3800     }
3801    
3802 softime 7541 // Si c'est un dossier d'instruction initial
3803     $di_version = $this->get_dossier_instruction_version();
3804     if ($di_version === 0 || $di_version === '0') {
3805     //
3806     $row_date = array("depot_initial" => $new_date_str);
3807     $res = $this->db->autoExecute(
3808     DB_PREFIXE."dossier_autorisation",
3809     $row_date,
3810     DB_AUTOQUERY_UPDATE,
3811     "dossier_autorisation = '" . $this->getVal("dossier_autorisation") . "'"
3812     );
3813     $this->f->addToLog(__METHOD__ . "() : db->autoExecute(" . $res . ")", VERBOSE_MODE);
3814     if ($this->f->isDatabaseError($res, true)) {
3815     return false;
3816     }
3817 softime 7366 }
3818     }
3819    
3820    
3821     /**
3822     * Met à jour l'instruction en fonction de la nouvelle date
3823     * ou retourne false si il ya une erreur.
3824     *
3825     * @param integer $instruction_id Identifiant de l'instruction.
3826     * @param string $date_depot Nouvelle date de dépôt.
3827     *
3828     * @return boolean
3829     */
3830     public function majDateInstruction($instruction_id, $date_depot) {
3831    
3832     // Definalise l'instruction de récépissé si nécessaire
3833 softime 7996 $instruction = $this->f->get_inst__om_dbform(array(
3834     "obj" => "instruction",
3835     "idx" => $instruction_id,
3836     ));
3837 softime 7366 $instruction->setParameter('maj', 110);
3838     //
3839     if ($instruction->is_unfinalizable_without_bypass() === true
3840     && $instruction->unfinalize($instruction->valF) === false) {
3841     return false;
3842     }
3843    
3844     // Modifie la date d'événement
3845     $instruction->setParameter('maj', 1);
3846     //
3847     $valF = array();
3848     foreach ($instruction->champs as $id => $champ) {
3849     $valF[$champ] = $instruction->getVal($champ);
3850     }
3851     //
3852     $valF['date_evenement'] = $date_depot;
3853     $valF['date_finalisation_courrier'] = null;
3854     //
3855     $modification = $instruction->modifier($valF, $this->f->db, DEBUG);
3856     //
3857     if ($modification === false) {
3858     return false;
3859     }
3860    
3861     // Finalise l'instruction
3862     $instruction->setParameter('maj', 100);
3863     if ($instruction->finalize($instruction->valF) === false) {
3864     return false;
3865     }
3866    
3867     //
3868     return true;
3869     }
3870    
3871     /**
3872 softime 6272 * Récupère l'instance de l'autorité compétente.
3873     *
3874     * @param string $autorite_competente Identifiant de l'autorité compétente.
3875     *
3876     * @return object
3877     */
3878     function get_inst_autorite_competente($autorite_competente = null) {
3879     //
3880     return $this->get_inst_common("autorite_competente", $autorite_competente);
3881     }
3882    
3883    
3884     /**
3885 softime 6929 * Met à jour les montants des taxes du dossier d'instruction.
3886 mbroquet 3730 *
3887 softime 6929 * @param integer $tax_secteur Secteur communal.
3888     * @param array $val Valeurs des données techniques.
3889 mbroquet 3730 *
3890     * @return boolean
3891     */
3892 softime 6929 public function update_dossier_tax_mtn($tax_secteur, $val = array()) {
3893 mbroquet 3730 // Instance du paramétrage de la taxe d'aménagement
3894     $taxe_amenagement = $this->get_inst_taxe_amenagement();
3895    
3896 softime 6929 // Liste des montants à mettre à jour
3897     $valF = array();
3898     $valF['tax_mtn_part_commu'] = null;
3899     $valF['tax_mtn_part_depart'] = null;
3900     $valF['tax_mtn_part_reg'] = null;
3901     $valF['tax_mtn_total'] = null;
3902     $valF['tax_mtn_rap'] = null;
3903     $valF['tax_mtn_part_commu_sans_exo'] = null;
3904     $valF['tax_mtn_part_depart_sans_exo'] = null;
3905     $valF['tax_mtn_part_reg_sans_exo'] = null;
3906     $valF['tax_mtn_total_sans_exo'] = null;
3907     $valF['tax_mtn_rap_sans_exo'] = null;
3908 mbroquet 3730
3909 softime 6929 // Si le tableau des valeurs n'est pas vide
3910     if ($val !== array()) {
3911 mbroquet 3730
3912 softime 6929 // Si le taux communal est renseigné
3913     if ($taxe_amenagement->getVal('tx_comm_secteur_'.$tax_secteur) !== null
3914     && $taxe_amenagement->getVal('tx_comm_secteur_'.$tax_secteur) !== '') {
3915 mbroquet 3730
3916 softime 6929 // Calcul de la TA
3917     $calcul_ta = $taxe_amenagement->compute_ta($tax_secteur, $val);
3918    
3919     // Si chaque résultat est calculable
3920     if ($calcul_ta !== null && is_array($calcul_ta) === true) {
3921    
3922     // Total des parts de la TA avec exonération
3923     $total_ta = $calcul_ta['commu'] + $calcul_ta['depart'] + $calcul_ta['reg'];
3924     $total_ta_ss_exo = $calcul_ta['commu_ss_exo'] + $calcul_ta['depart_ss_exo'] + $calcul_ta['reg_ss_exo'];
3925    
3926     // Valeurs à mettre à jour, les montants doivent être à l'entier
3927     // inférieur
3928     $valF['tax_mtn_part_commu'] = floor($calcul_ta['commu']);
3929     $valF['tax_mtn_part_depart'] = floor($calcul_ta['depart']);
3930     $valF['tax_mtn_part_reg'] = floor($calcul_ta['reg']);
3931     $valF['tax_mtn_total'] = floor($total_ta);
3932     $valF['tax_mtn_part_commu_sans_exo'] = floor($calcul_ta['commu_ss_exo']);
3933     $valF['tax_mtn_part_depart_sans_exo'] = floor($calcul_ta['depart_ss_exo']);
3934     $valF['tax_mtn_part_reg_sans_exo'] = floor($calcul_ta['reg_ss_exo']);
3935     $valF['tax_mtn_total_sans_exo'] = floor($total_ta_ss_exo);
3936     }
3937     }
3938    
3939     // Calcul de la RAP
3940     $calcul_rap = $taxe_amenagement->compute_rap($val);
3941    
3942     // Si chaque résultat est calculable
3943     if ($calcul_rap !== null && is_array($calcul_rap) === true) {
3944    
3945     // RAP avec exonération
3946     $mtn_rap = $calcul_rap['rap'];
3947     // RAP sans exonération
3948     $mtn_rap_ss_exo = $calcul_rap['rap_ss_exo'];
3949    
3950     // Valeurs à mettre à jour, les montants doivent être à l'entier
3951     // inférieur
3952     $valF['tax_mtn_rap'] = floor($mtn_rap);
3953     $valF['tax_mtn_rap_sans_exo'] = floor($mtn_rap_ss_exo);
3954     }
3955 mbroquet 3730 }
3956    
3957     // Met à jour l'enregistrement de dossier
3958 softime 6929 $res = $this->db->autoExecute(
3959     DB_PREFIXE.$this->table,
3960     $valF,
3961     DB_AUTOQUERY_UPDATE,
3962     $this->clePrimaire ."='".$this->getVal($this->clePrimaire)."'"
3963     );
3964 mbroquet 3730 // Log
3965     $this->f->addToLog(__METHOD__."() : db->autoExecute(".$res.")", VERBOSE_MODE);
3966     //
3967     if ($this->f->isDatabaseError($res, true)) {
3968     //
3969     $this->correct = false;
3970     return false;
3971     }
3972    
3973     //
3974     return true;
3975     }
3976    
3977 softime 8477 /**
3978     * Permet d’effectuer des actions avant la modification des données dans la
3979     * base.
3980     *
3981     * @param mixed $id Identifiant de l'enregistrement
3982     * @param mixed &$db Instance BDD
3983     * @param array $val Tableau des valeurs
3984     * @param mixed $DEBUG Marqueur de débogage
3985     *
3986     * @return boolean
3987     */
3988     function triggersupprimer($id, &$db = null, $val = array(), $DEBUG = null) {
3989 softime 6929
3990 softime 8477 // Le dossier d'instruction n'est pas supprimé si celui-ci est lié à un
3991     // contentieux
3992     $autorisation_contestee = $this->get_idx_by_args('autorisation_contestee', 'dossier', 'autorisation_contestee', $this->getVal($this->clePrimaire));
3993     if ($autorisation_contestee !== null && $autorisation_contestee !== '') {
3994     $this->addToMessage("Le dossier d'instruction ne peut pas être supprimé car celui-ci est lié à un contentieux.");
3995     return false;
3996     }
3997    
3998     /**
3999     * Gestion de la suppression des tables liées au dossier d'instruction.
4000     * Les fichiers potentiellement liés aux tables ne sont pas supprimés.
4001     */
4002     // Tableau pour la conception des requêtes de suppression
4003     $related_tables = array(
4004     'lien_demande_demandeur' => array(
4005     'condition_field' => 'demande',
4006     'condition_value' => $this->get_idx_by_args('demande', 'demande', 'dossier_instruction', $this->getVal($this->clePrimaire)),
4007     ),
4008     'demande' => array(
4009     'condition_field' => 'dossier_instruction',
4010     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4011     ),
4012     'lien_dossier_demandeur' => array(
4013     'condition_field' => 'dossier',
4014     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4015     ),
4016     'instruction' => array(
4017     'condition_field' => 'dossier',
4018     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4019     ),
4020     'dossier_parcelle' => array(
4021     'condition_field' => 'dossier',
4022     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4023     ),
4024     'dossier_contrainte' => array(
4025     'condition_field' => 'dossier',
4026     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4027     ),
4028     'lien_donnees_techniques_moyen_retenu_juge' => array(
4029     'condition_field' => 'donnees_techniques',
4030     'condition_value' => $this->get_idx_by_args('donnees_techniques', 'donnees_techniques', 'dossier_instruction', $this->getVal($this->clePrimaire)),
4031     ),
4032     'lien_donnees_techniques_moyen_souleve' => array(
4033     'condition_field' => 'donnees_techniques',
4034     'condition_value' => $this->get_idx_by_args('donnees_techniques', 'donnees_techniques', 'dossier_instruction', $this->getVal($this->clePrimaire)),
4035     ),
4036     'donnees_techniques_di' => array(
4037     'table' => 'donnees_techniques',
4038     'condition_field' => 'dossier_instruction',
4039     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4040     ),
4041     'blocnote' => array(
4042     'condition_field' => 'dossier',
4043     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4044     ),
4045     'consultation' => array(
4046     'condition_field' => 'dossier',
4047     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4048     ),
4049     'document_numerise' => array(
4050     'condition_field' => 'dossier',
4051     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4052     ),
4053     'rapport_instruction' => array(
4054     'condition_field' => 'dossier_instruction',
4055     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4056     ),
4057     'dossier_commission' => array(
4058     'condition_field' => 'dossier',
4059     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4060     ),
4061     'dossier_message' => array(
4062     'condition_field' => 'dossier',
4063     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4064     ),
4065     'lien_dossier_dossier_1' => array(
4066     'table' => 'lien_dossier_dossier',
4067     'condition_field' => 'dossier_src',
4068     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4069     ),
4070     'lien_dossier_dossier_2' => array(
4071     'table' => 'lien_dossier_dossier',
4072     'condition_field' => 'dossier_cible',
4073     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4074     ),
4075     'dossier_geolocalisation' => array(
4076     'condition_field' => 'dossier',
4077     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4078     ),
4079     'donnees_techniques_lot' => array(
4080     'table' => 'donnees_techniques',
4081     'condition_field' => 'lot',
4082     'condition_value' => $this->get_idx_by_args("string_agg(lot::text, ', ')", 'lot', 'dossier', $this->getVal($this->clePrimaire)),
4083     ),
4084     'lien_lot_demandeur' => array(
4085     'condition_field' => 'lot',
4086     'condition_value' => $this->get_idx_by_args("string_agg(lot::text, ', ')", 'lot', 'dossier', $this->getVal($this->clePrimaire)),
4087     ),
4088     'lot' => array(
4089     'condition_field' => 'dossier',
4090     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4091     ),
4092     );
4093     // Supprime les enregistrements des tables
4094     $delete = $this->delete_related_tables($related_tables);
4095     if ($delete === false) {
4096     return false;
4097     }
4098    
4099     //
4100     return true;
4101     }
4102    
4103 mbroquet 3730 /**
4104 softime 8477 * Permet d’effectuer des actions après la modification des données dans la
4105     * base.
4106     *
4107     * @param mixed $id Identifiant de l'enregistrement
4108     * @param mixed &$db Instance BDD
4109     * @param array $val Tableau des valeurs
4110     * @param mixed $DEBUG Marqueur de débogage
4111     *
4112     * @return boolean
4113 mbroquet 3730 */
4114 softime 6929 function triggersupprimerapres($id, &$db = null, $val = array(), $DEBUG = null) {
4115 mbroquet 3730
4116 softime 8477 /**
4117     * Gestion de la suppression des tables liées au dossier d'instruction.
4118     * Dans le cas d'un dossier d'instruction initial le dossier
4119     * d'autorisation est également supprimé pour libérer la numéroration.
4120     * S'il s'agit d'un dossier d'instruction sur exsitant alors le dossier
4121     * d'autorisation est mise à jour.
4122     * Les fichiers potentiellement liés aux tables ne sont pas supprimés.
4123     */
4124     // S'il s'agit d'une suppression de dossier d'instruction sur existant
4125     if ($this->has_only_initial_di(true) === false) {
4126     // Mise à jour des données du dossier d'autorisation
4127     $da = $this->f->get_inst__om_dbform(array(
4128     "obj" => "dossier_autorisation",
4129     "idx" => $this->getVal("dossier_autorisation"),
4130     ));
4131     $da->majDossierAutorisation();
4132 mbroquet 3730
4133 softime 8477 } else {
4134     // S'il s'agit d'une suppression de dossier d'instruction initial
4135     // Tableau pour la conception des requêtes de suppression
4136     $related_tables = array(
4137     'lien_dossier_autorisation_demandeur' => array(
4138     'condition_field' => 'dossier_autorisation',
4139     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
4140     ),
4141     'dossier_autorisation_parcelle' => array(
4142     'condition_field' => 'dossier_autorisation',
4143     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
4144     ),
4145     'donnees_techniques' => array(
4146     'condition_field' => 'dossier_autorisation',
4147     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
4148     ),
4149     'dossier_autorisation' => array(
4150     'condition_field' => 'dossier_autorisation',
4151     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
4152     ),
4153     );
4154     // Supprime les tables
4155     $delete = $this->delete_related_tables($related_tables);
4156     if ($delete === false) {
4157     return false;
4158     }
4159    
4160     /**
4161     * Mise à jour de la séquence.
4162     */
4163     $next_id_seq = $this->get_last_value_sequence()-1;
4164     // Dans le cas de la suppression du dernier dossier d'instruction de
4165     // sa numérotation alors la séquence est supprimée
4166     if ($next_id_seq === 0) {
4167     $table_name = substr($this->get_sequence_name(), 0, -4);
4168     $res = $this->db->dropSequence($table_name);
4169     $this->f->addToLog(__METHOD__."(): db->createSequence(\"".$table_name."\");", VERBOSE_MODE);
4170     $this->f->isDatabaseError($res);
4171    
4172     } else {
4173     // La méthode setval avec la valeur true en troisième argument
4174     // signifie que le prochain nextval avancera la séquence avant
4175     // de renvoyer une valeur.
4176     $sql = sprintf("
4177     SELECT setval('%s', %s, true)",
4178     $this->get_sequence_name(),
4179     $next_id_seq
4180     );
4181     $res = $this->f->db->query($sql);
4182     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
4183     $this->f->isDatabaseError($res);
4184     }
4185     }
4186    
4187     /**
4188     * Supprime le dossier d'instruction des derniers dossiers consultés,
4189     * sauvegardé en session
4190     */
4191     if (isset($_SESSION['dossiers_consulte']) !== false) {
4192     $id_di = $this->getVal($this->clePrimaire);
4193     if (in_array($id_di, $_SESSION['dossiers_consulte']) === true) {
4194     unset($_SESSION['dossiers_consulte'][$id_di]);
4195     }
4196     // Supprime le tableau s'il n'y a plus de dossier consulté
4197     if (count($_SESSION['dossiers_consulte']) === 0) {
4198     unset($_SESSION['dossiers_consulte']);
4199     }
4200     }
4201 mbroquet 3730 }
4202 softime 8477
4203 mbroquet 3730 /**
4204 softime 8477 * TREATMENT - delete_related_tables.
4205     *
4206     * Suppression par requête SQL les enregistrements des tables passées en
4207     * paramètre.
4208     *
4209     * @param array $related_tables Liste des enregistrements à supprimer
4210     *
4211     * @return boolean
4212     */
4213     function delete_related_tables(array $related_tables) {
4214     $this->begin_treatment(__METHOD__);
4215    
4216     // Supprime chaque enregistrement liés au dossier d'instruction
4217     $template_delete_sql = 'DELETE FROM %s%s WHERE %s IN (%s)';
4218     foreach ($related_tables as $table => $value) {
4219     if (isset($value['table']) === true) {
4220     $table = $value['table'];
4221     }
4222     if ($value['condition_value'] !== '' && $value['condition_value'] !== null) {
4223     $sql = sprintf($template_delete_sql, DB_PREFIXE, $table, $value['condition_field'], $value['condition_value']);
4224     $res = $this->f->db->query($sql);
4225     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
4226     $this->f->isDatabaseError($res);
4227     }
4228     }
4229    
4230     return $this->end_treatment(__METHOD__, true);
4231     }
4232    
4233     /**
4234     * CONDITION - has_only_initial_di.
4235     *
4236     * Permet de vérifier qu'il s'agit du dossier d'instruction initial de
4237     * l'autorisation.
4238     *
4239     * @param boolean $after_delete À activer si la méthode est utilisée lors de
4240     * la suppression.
4241     *
4242     * @return boolean
4243     */
4244     function has_only_initial_di($after_delete=false) {
4245    
4246     // Compte le nombre de dossier lié au dossier d'autorisation
4247     $res = $this->get_idx_by_args('COUNT(dossier)', 'dossier', 'dossier_autorisation', $this->getVal('dossier_autorisation'));
4248    
4249     // Si la méthode est utilisé dans le triggersupprimerapres alors le
4250     // dossier d'instruction est déjà supprimé dans la base de données, le
4251     // retour doit donc être 0 pour prouver la suppression du DI initial
4252     if ($after_delete === true) {
4253     if ($res === '0') {
4254     return true;
4255     }
4256     //
4257     return false;
4258     }
4259    
4260     // S'il y a qu'un seul dossier d'instruction alors le DI courant est
4261     // forcément l'initial
4262     if ($res === '1') {
4263     return true;
4264     }
4265     //
4266     return false;
4267     }
4268    
4269     /**
4270     * Récupère la dernière valeur d'une séquence.
4271     *
4272     * @param string $sequence_name Nom de la séquence (optionnel)
4273     *
4274     * @return integer Dernière valeur de la séquence
4275     */
4276     function get_last_value_sequence($sequence_name=null) {
4277     // Récupère autoamtiquement le nom de la séquence du dossier
4278     // d'instruction courant
4279     if ($sequence_name === null) {
4280     $sequence_name = $this->get_sequence_name();
4281     }
4282    
4283     $sql = sprintf(
4284     "SELECT last_value FROM %s",
4285     $this->get_sequence_name()
4286     );
4287     $res = $this->f->db->getOne($sql);
4288     $this->f->isDatabaseError($res);
4289    
4290     return intval($res);
4291     }
4292    
4293     /**
4294 mbroquet 3730 * Retourne la reference cadastrale de la demande attache a un dossier ERP
4295     * specifique
4296     * @param string $dossier L'identifiant du dossier
4297     * @return string|null La reference cadastrale si elle est trouve,
4298     * sinon NULL. En cas d'erreur de la BD, l'execution s'arrete.
4299     */
4300     function getReferenceCadastrale($dossier) {
4301     $sql = "SELECT terrain_references_cadastrales FROM ".DB_PREFIXE."demande WHERE dossier_instruction = '" . $dossier . "'";
4302     $res = $this->db->limitquery($sql, 0, 1);
4303     $this->addToLog("getReferenceCadastrale(): db->limitquery(\"".
4304     str_replace(",",", ",$sql)."\", 0, 1);", VERBOSE_MODE);
4305     // Si une erreur survient on die
4306     if (database::isError($res, true)) {
4307     // Appel de la methode de recuperation des erreurs
4308     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), 'demande');
4309     }
4310     // retourne la nature du dossier
4311     while ($row =& $res->fetchRow()) {
4312     return $row[0];
4313     }
4314     // la nature n'etait pas trouve, ce qui ne devrait pas se passer
4315     return NULL;
4316     }
4317    
4318     /**
4319 softime 6565 * Supprime puis recrée tous les liens entre dossier et demandeurs
4320 mbroquet 3730 **/
4321 softime 6565 function insertLinkDossierDemandeur($db, $DEBUG) {
4322     // Suppression des anciens demandeurs
4323 mbroquet 3730 $this->deleteLinkDossierDemandeur($db, $DEBUG);
4324 softime 6565 $types_demandeur = array(
4325     "petitionnaire_principal",
4326     "delegataire",
4327     "petitionnaire",
4328     "plaignant_principal",
4329     "plaignant",
4330     "contrevenant_principal",
4331     "contrevenant",
4332     "requerant_principal",
4333     "requerant",
4334     "avocat_principal",
4335     "avocat",
4336 softime 7067 "bailleur_principal",
4337     "bailleur",
4338 softime 6565 );
4339     foreach ($types_demandeur as $type) {
4340     // Comparaison des autres demandeurs
4341     if(isset($this->postedIdDemandeur[$type]) === true) {
4342     // Ajout des nouveaux liens
4343     foreach ($this->postedIdDemandeur[$type] as $demandeur) {
4344     //
4345     $principal = false;
4346     if (strpos($type, '_principal') !== false) {
4347     $principal = true;
4348     }
4349     if ($this->addLinkDossierDemandeur($demandeur, $principal, $db, $DEBUG) === false) {
4350     //
4351     return false;
4352     }
4353     }
4354 mbroquet 3730 }
4355     }
4356     }
4357    
4358    
4359     /**
4360     * Fonction permettant d'ajouter un lien
4361 softime 6565 * entre la table dossier et demandeur
4362 mbroquet 3730 **/
4363     function addLinkDossierDemandeur($id, $principal, $db, $DEBUG) {
4364 softime 7996 $lienAjout = $this->f->get_inst__om_dbform(array(
4365     "obj" => "lien_dossier_demandeur",
4366     "idx" => "]",
4367     ));
4368 mbroquet 3730 $lien = array('lien_dossier_demandeur' => "",
4369     'petitionnaire_principal' => (($principal)?"t":"f"),
4370     'dossier' => $this->valF['dossier'],
4371     'demandeur' => $id);
4372     $lienAjout->ajouter($lien, $db, $DEBUG);
4373     $lienAjout->__destruct();
4374     }
4375    
4376     /**
4377     * Fonction permettant de supprimer un lien
4378     * entre la table demande et demandeur
4379     **/
4380     function deleteLinkDossierDemandeur($db, $DEBUG) {
4381     // Suppression
4382     $sql = "DELETE FROM ".DB_PREFIXE."lien_dossier_demandeur ".
4383     "WHERE dossier='".$this->valF['dossier']."'";
4384     // Execution de la requete de suppression de l'objet
4385     $res = $db->query($sql);
4386     // Logger
4387 softime 6565 $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
4388 mbroquet 3730 if ( database::isError($res)){
4389     die();
4390     }
4391    
4392     }
4393    
4394     /**
4395     * Methode de recupération des valeurs postées
4396     **/
4397     function getPostedValues() {
4398     // Récupération des demandeurs dans POST
4399 softime 6565 $types_demandeur = array(
4400     "petitionnaire_principal",
4401     "delegataire",
4402     "petitionnaire",
4403     "plaignant_principal",
4404     "plaignant",
4405     "contrevenant_principal",
4406     "contrevenant",
4407     "requerant_principal",
4408     "requerant",
4409     "avocat_principal",
4410     "avocat",
4411 softime 7067 "bailleur_principal",
4412     "bailleur",
4413 softime 6565 );
4414     foreach ($types_demandeur as $type) {
4415     if($this->f->get_submitted_post_value($type) !== null AND
4416     $this->f->get_submitted_post_value($type) != '') {
4417     $this->postedIdDemandeur[$type] = $this->f->get_submitted_post_value($type);
4418 mbroquet 3730 }
4419     }
4420     }
4421    
4422     /**
4423     * Méthode permettant de récupérer les id des demandeurs liés à la table
4424     * liée passée en paramètre
4425     *
4426     * @param string $from Table liée : "demande", "dossier", dossier_autorisation"
4427     * @param string $id Identifiant (clé primaire de la table liée en question)
4428     */
4429     function listeDemandeur($from, $id) {
4430 softime 6565
4431     // Si la donnée membre a déjà été remplie par un précédent appel à cette méthode,
4432     // on sort.
4433     if ($this->valIdDemandeur["petitionnaire_principal"] !== array() or
4434     $this->valIdDemandeur["delegataire"] !== array() or
4435     $this->valIdDemandeur["petitionnaire"] !== array() or
4436     $this->valIdDemandeur["plaignant_principal"] !== array() or
4437     $this->valIdDemandeur["plaignant"] !== array() or
4438     $this->valIdDemandeur["contrevenant_principal"] !== array() or
4439     $this->valIdDemandeur["contrevenant"] !== array() or
4440     $this->valIdDemandeur["requerant_principal"] !== array() or
4441     $this->valIdDemandeur["requerant"] !== array() or
4442     $this->valIdDemandeur["avocat_principal"] !== array() or
4443 softime 7067 $this->valIdDemandeur["avocat"] !== array() or
4444     $this->valIdDemandeur["bailleur_principal"] !== array() or
4445     $this->valIdDemandeur["bailleur"] !== array()) {
4446 softime 6565 return;
4447     }
4448    
4449 mbroquet 3730 // Récupération des demandeurs de la base
4450     $sql = "SELECT demandeur.demandeur,
4451     demandeur.type_demandeur,
4452     lien_".$from."_demandeur.petitionnaire_principal
4453     FROM ".DB_PREFIXE."lien_".$from."_demandeur
4454     INNER JOIN ".DB_PREFIXE."demandeur
4455     ON demandeur.demandeur=lien_".$from."_demandeur.demandeur
4456     WHERE ".$from." = '".$id."'";
4457     $res = $this->f->db->query($sql);
4458     $this->f->addToLog("listeDemandeur(): db->query(\"".$sql."\")", VERBOSE_MODE);
4459 softime 6565 $this->f->isDatabaseError($res);
4460    
4461 mbroquet 3730 // Stockage du résultat dans un tableau
4462     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
4463 softime 6565
4464     $demandeur_type = $row['type_demandeur'];
4465     if ($row['petitionnaire_principal'] == 't'){
4466     $demandeur_type .= "_principal";
4467 mbroquet 3730 }
4468 softime 6565 $this->valIdDemandeur[$demandeur_type][] = $row['demandeur'];
4469 mbroquet 3730 }
4470     }
4471    
4472     /**
4473     * Récupère la liste des contraintes d'un dossier.
4474     *
4475 softime 4740 * @param string $dossier Identifiant du dossier.
4476     * @param boolean $for_di_view Liste avec condition affichage DI.
4477     *
4478 mbroquet 3730 * @return object Résultat de la requête
4479     */
4480 softime 4740 function getListContrainte($dossier, $for_di_view = true) {
4481 mbroquet 3730
4482     // Select
4483     $select = "SELECT dossier_contrainte.dossier_contrainte as dossier_contrainte_id,
4484     dossier_contrainte.texte_complete as dossier_contrainte_texte,
4485     dossier_contrainte.reference as dossier_contrainte_reference,
4486     contrainte.libelle as contrainte_libelle,
4487     contrainte.nature as contrainte_nature,
4488     contrainte.texte as contrainte_texte,
4489     contrainte.reference as contrainte_reference,
4490     lower(contrainte.groupe) as contrainte_groupe,
4491     lower(contrainte.sousgroupe) as contrainte_sousgroupe ";
4492    
4493     // From
4494     $from = " FROM ".DB_PREFIXE."contrainte
4495     LEFT JOIN ".DB_PREFIXE."dossier_contrainte
4496     ON dossier_contrainte.contrainte = contrainte.contrainte ";
4497    
4498     // Where
4499     $where = " WHERE dossier_contrainte.dossier = '".$dossier."' ";
4500    
4501 softime 4740 // Si les contraintes sont listées pour être affichées dans le DI
4502     if ($for_di_view === true) {
4503     // Si le paramètre "option_contrainte_di" est défini
4504     if ($this->f->getParameter('option_contrainte_di') != 'aucun') {
4505     // Ajoute la condition
4506     $where .= $this->f->traitement_condition_contrainte(
4507     $this->f->getParameter('option_contrainte_di'));
4508     }
4509 mbroquet 3730 }
4510    
4511     // Tri
4512     $tri = " ORDER BY contrainte_groupe DESC, contrainte_sousgroupe,
4513     contrainte.no_ordre, contrainte.libelle ";
4514    
4515     // Requête SQL
4516     $sql = $select.$from.$where.$tri;
4517     $res = $this->f->db->query($sql);
4518     $this->f->addToLog("listContrainte(): db->query(\"".$sql."\");", VERBOSE_MODE);
4519     $this->f->isDatabaseError($res);
4520    
4521     // Retourne le résultat
4522     return $res;
4523     }
4524    
4525     /**
4526     * Ajout de la liste des contraintes et des demandeurs
4527     */
4528     function formSpecificContent($maj) {
4529    
4530 softime 8477 // Récupère le CRUD
4531     $crud = $this->get_action_crud($this->getParameter("maj"));
4532    
4533     // Les contenus spécifiques ne sont pas affichés en cas de suppression
4534     if ($crud === 'delete') {
4535     return;
4536     }
4537    
4538 mbroquet 3730 /**
4539     * Liste des contraintes
4540     */
4541     //
4542     $listContrainte = $this->getListContrainte($this->getVal('dossier'));
4543    
4544     // Si le dossier possède des contraintes
4545     if ($listContrainte->numRows() != 0) {
4546    
4547     // Affiche du fieldset
4548     printf("<div id=\"liste_contrainte\" class=\"demande_hidden_bloc\">");
4549     printf("<fieldset class=\"cadre ui-corner-all ui-widget-content col_12 startClosed\">");
4550     printf(" <legend class=\"ui-corner-all ui-widget-content ui-state-active\"
4551     id =\"fieldset_contraintes_liees\">"
4552     ._("dossier_contrainte")."</legend>");
4553     printf("<div class=\"fieldsetContent\" style=\"display: none;\">");
4554    
4555     // Entête pour le groupe
4556     $groupeHeader = "
4557     <div class='dossier_contrainte_groupe'>
4558     <div class='dossier_contrainte_groupe_header'>
4559     <span class='name'>
4560     %s
4561     </span>
4562     </div>
4563     ";
4564    
4565     // Entête pour le sous-groupe
4566     $sousgroupeHeader = "
4567     <div class='dossier_contrainte_sousgroupe'>
4568     <div class='dossier_contrainte_sousgroupe_header'>
4569     <span class='name'>
4570     %s
4571     </span>
4572     </div>
4573     ";
4574    
4575     // Titres des colonnes
4576     $tableHeader = "
4577     <thead>
4578     <tr class='ui-tabs-nav ui-accordion ui-state-default tab-title'>
4579     <th class='title col-0 firstcol contrainte_th_texte_complete'>
4580     <span class='name'>
4581     "._('texte_complete')."
4582     </span>
4583     </th>
4584     <th class='title col-1 contrainte_th_reference'>
4585     <span class='name'>
4586     "._('reference')."
4587     </span>
4588     </th>
4589     <th class='title col-2 contrainte_th_nature'>
4590     <span class='name'>
4591     "._('nature')."
4592     </span>
4593     </th>
4594     </tr>
4595     </thead>
4596     ";
4597    
4598     // Ligne de données
4599     $line = "
4600     <tr class='tab-data %s'>
4601     <td class='col-0 firstcol contrainte_th_texte_complete'>
4602     %s
4603     </td>
4604     <td class='col-1 contrainte_th_reference'>
4605     %s
4606     </td>
4607     <td class='col-2 contrainte_th_nature'>
4608     %s
4609     </td>
4610     ";
4611    
4612     // Sauvegarde des données pour les comparer
4613     $lastRow = array();
4614     $lastRow['contrainte_groupe'] = 'empty';
4615     $lastRow['contrainte_sousgroupe'] = 'empty';
4616    
4617     // Tant qu'il y a des résultats
4618     while($row = &$listContrainte->fetchRow(DB_FETCHMODE_ASSOC)) {
4619     // Si l'identifiant du groupe de la contrainte présente et
4620     // celle d'avant est différent
4621     if ($row['contrainte_groupe'] != $lastRow['contrainte_groupe']) {
4622    
4623     // Si l'identifiant du groupe d'avant est vide
4624     if ($lastRow['contrainte_groupe'] != 'empty') {
4625     // Ferme le tableau
4626     printf("</table>");
4627     // Ferme le div
4628     printf("</div>");
4629     // Ferme le div
4630     printf("</div>");
4631     }
4632    
4633     // Affiche le header du groupe
4634     printf($groupeHeader, $row['contrainte_groupe']);
4635     }
4636    
4637     // Si l'identifiant du sous-groupe de la contrainte présente et
4638     // celle d'avant est différent
4639     // Ou qu'ils soient identique mais n'appartiennent pas au même groupe
4640     if ($row['contrainte_sousgroupe'] != $lastRow['contrainte_sousgroupe']
4641     || ($row['contrainte_sousgroupe'] == $lastRow['contrainte_sousgroupe']
4642     && $row['contrainte_groupe'] != $lastRow['contrainte_groupe'])) {
4643    
4644     //
4645     if($row['contrainte_groupe'] == $lastRow['contrainte_groupe']) {
4646     // Si l'identifiant de la sous-groupe d'avant est vide
4647     if ($lastRow['contrainte_sousgroupe'] != 'empty') {
4648     // Ferme le tableau
4649     printf("</table>");
4650     // Ferme le div
4651     printf("</div>");
4652     }
4653     }
4654    
4655     // Affiche le header du sous-groupe
4656     printf($sousgroupeHeader, $row['contrainte_sousgroupe']);
4657    
4658     // Ouvre le tableau
4659     printf("<table id='sousgroupe_".$row['contrainte_sousgroupe']."' class='tab-tab dossier_contrainte_view'>");
4660    
4661     // Affiche le header des données
4662     printf($tableHeader);
4663    
4664     // Définis le style des lignes
4665     $style = 'odd';
4666     }
4667    
4668     // Si toujours dans la même groupe et même sous-groupe,
4669     // on change le style de la ligne
4670     if ($row['contrainte_groupe'] == $lastRow['contrainte_groupe']
4671     && $row['contrainte_sousgroupe'] == $lastRow['contrainte_sousgroupe']) {
4672     // Définis le style
4673     $style = ($style=='even')?'odd':'even';
4674     }
4675    
4676     // Affiche "Oui" ou "Non" pour le bouléen
4677     if ($row['dossier_contrainte_reference'] == 1
4678     || $row['dossier_contrainte_reference'] == "t"
4679     || $row['dossier_contrainte_reference'] == "Oui") {
4680     //
4681     $contrainte_reference = "Oui";
4682     } else {
4683     //
4684     $contrainte_reference = "Non";
4685     }
4686    
4687     // Affiche les données
4688     printf($line, $style,
4689     $row['dossier_contrainte_texte'],
4690     $contrainte_reference,
4691     $row['contrainte_nature']
4692     );
4693    
4694     // Sauvegarde les données
4695     $lastRow['contrainte_groupe'] = $row['contrainte_groupe'];
4696     $lastRow['contrainte_sousgroupe'] = $row['contrainte_sousgroupe'];
4697    
4698     }
4699     // Ferme le tableau
4700     printf("</table>");
4701     // Ferme le sous-groupe
4702     printf("</div>");
4703     // Ferme le groupe
4704     printf("</div>");
4705    
4706     printf("</div>");
4707    
4708     printf("<div class=\"visualClear\"></div>");
4709     // Ferme le fieldset content
4710     printf("</div>");
4711     printf("</fieldset>");
4712     }
4713     /**
4714     * Fin Liste des contraintes
4715     */
4716    
4717     /**
4718     * Liste des demandeurs
4719     */
4720 softime 6565 // Tableau des demandeurs selon le contexte
4721     $listeDemandeur = $this->valIdDemandeur;
4722     /**
4723     * Gestion du bloc des demandeurs
4724     */
4725     // Si le mode est (modification ou suppression ou consultation) ET que
4726     // le formulaire n'est pas correct (c'est-à-dire que le formulaire est
4727     // actif)
4728     if ($this->correct !== true AND
4729 softime 7996 $this->getParameter('validation') == 0 AND
4730     $this->getParameter("maj") != 0) {
4731 softime 6565 // Alors on récupère les demandeurs dans la table lien pour
4732     // affectation des résultats dans $this->valIdDemandeur
4733     $this->listeDemandeur("dossier", $this->getval($this->clePrimaire));
4734     $listeDemandeur = $this->valIdDemandeur;
4735     }
4736 mbroquet 3730
4737 softime 6565 // Récupération des valeurs postées
4738 softime 7996 if ($this->getParameter('validation') != 0) {
4739 softime 6565 $listeDemandeur = $this->postedIdDemandeur;
4740     }
4741    
4742     // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
4743     // correct (c'est-à-dire que le formulaire est actif)
4744     if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
4745     // Alors on positionne le marqueur linkable a true qui permet
4746     // d'afficher ou non les actions de gestion des demandeurs
4747 mbroquet 3730 $linkable = true;
4748     } else {
4749 softime 6565 // Sinon on positionne le marqueur linkable a false qui permet
4750     // d'afficher ou non les actions de gestion des demandeurs
4751 mbroquet 3730 $linkable = false;
4752     }
4753 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
4754     // Pour les dossiers contentieux, il faut un droit spécifique pour visualiser le
4755     // fieldset "Demandeurs"
4756 softime 7067 if (($affichage_form === 'ADS' || $affichage_form === 'DPC')
4757 softime 6565 OR ($affichage_form === 'CTX RE' AND $this->f->isAccredited('dossier_contentieux_recours_afficher_demandeurs') === true)
4758     OR ($affichage_form === 'CTX IN' AND $this->f->isAccredited('dossier_contentieux_infractions_afficher_demandeurs') === true)) {
4759 mbroquet 3730
4760 softime 6565 // Conteneur de la listes des demandeurs
4761     echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">";
4762     echo "<fieldset id=\"fieldset-form-dossier_instruction-demandeur\" class=\"cadre ui-corner-all ui-widget-content startClosed\">";
4763     echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">"
4764     ._("Demandeurs")."</legend>";
4765     echo "<div class=\"fieldsetContent\" style=\"display: none;\">";
4766 mbroquet 3730
4767 softime 6565
4768     // Pour les DI avec DA visible, dans tous les modes excepté en ajout et si l'option d'accès au
4769     // portail citoyen est activée
4770 mbroquet 3730 $inst_da = $this->get_inst_dossier_autorisation();
4771 softime 6565 if ($this->getParameter("maj") != 0
4772     && $this->f->is_option_citizen_access_portal_enabled() === true
4773     && $inst_da->is_dossier_autorisation_visible() === true) {
4774     // Instance du dossier d'autorisation
4775     //
4776     printf('<div class="field field-type-static"><div class="form-libelle"><label id="lib-cle_acces_citoyen" class="libelle-cle_acces_citoyen" for="cle_acces_citoyen">%s</label></div><div class="form-content"><span id="cle_acces_citoyen" class="field_value">%s</span></div></div><br/>', _("cle_acces_citoyen"), $inst_da->getVal('cle_acces_citoyen'));
4777     }
4778     // Sélection des demandeur à afficher en fonction du paramétrage du type
4779     // du dossier d'autorisation.
4780     switch ($affichage_form) {
4781     case 'ADS':
4782     $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
4783     break;
4784     case 'CTX RE':
4785     $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
4786     $this->display_demandeur_requerant_avocat($listeDemandeur);
4787     break;
4788     case 'CTX IN':
4789     $this->display_demandeur_plaignant_contrevenant($listeDemandeur);
4790     break;
4791 softime 7067 case 'DPC':
4792     $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
4793     $this->display_demandeur_petitionnaire_delegataire_bailleur($listeDemandeur);
4794     break;
4795 softime 6565 }
4796 mbroquet 3730
4797     }
4798    
4799     echo "</fieldset>";
4800     echo "</div>";
4801     /**
4802     * Fin liste des demandeurs
4803     */
4804 fmichon 4708
4805     /**
4806     * Interface avec le référentiel ERP.
4807     *
4808     * On affiche le message uniquement si le dossier est connecté.
4809     */
4810 softime 6565 if ($this->getParameter('maj') == 3 && $this->is_connected_to_referentiel_erp() === true) {
4811 fmichon 4708 //
4812     printf(
4813     '<div class="col_12">
4814     Ce dossier est connecté au référentiel ERP.
4815     </div>'
4816     );
4817     }
4818    
4819 mbroquet 3730 }
4820    
4821     /**
4822 softime 6565 * Affiche le bloc d'affichage des demandeurs pour dossiers ADS avec actions.
4823     *
4824     * @param array $listeDemandeur Liste des demandeurs.
4825     */
4826     function display_demandeur_petitionnaire_delegataire($listeDemandeur) {
4827    
4828     // Affichage du bloc pétitionnaire principal / délégataire
4829     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4830     echo "<div id=\"petitionnaire_principal_delegataire\">";
4831     // Affichage de la synthèse du pétitionnaire principal
4832     $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire_principal");
4833     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4834     echo "<div id=\"delegataire\">";
4835     // Affichage de la synthèse du délégataire
4836     $this->displaySyntheseDemandeur($listeDemandeur, "delegataire");
4837     echo "</div>";
4838     echo "<div class=\"both\"></div>";
4839     echo "</div>";
4840     // Bloc des pétitionnaires secondaires
4841     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4842     echo "<div id=\"listePetitionnaires\">";
4843     $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire");
4844     echo "</div>";
4845     }
4846    
4847     /**
4848     * Affiche le bloc d'affichage des demandeurs pour dossiers CTX recours
4849     * avec actions.
4850     *
4851     * @param array $listeDemandeur Liste des demandeurs.
4852     */
4853     function display_demandeur_plaignant_contrevenant($listeDemandeur) {
4854    
4855     echo "<div id=\"plaignant_contrevenant\">";
4856     // Affichage du bloc contrevenant
4857     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4858     echo "<div id=\"listeContrevenants\" class=\"col_12\">";
4859     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4860     echo "<div id=\"contrevenant_principal\">";
4861     // Affichage de la synthèse
4862     $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant_principal");
4863     echo "</div>";
4864     echo "<div id=\"listeAutresContrevenants\">";
4865     // Affichage de la synthèse
4866     $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant");
4867     echo "</div>";
4868     echo "</div>";
4869     // Affichage du bloc plaignant
4870     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4871     echo "<div id=\"listePlaignants\" class=\"col_12\">";
4872     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4873     echo "<div id=\"plaignant_principal\">";
4874     // Affichage de la synthèse
4875     $this->displaySyntheseDemandeur($listeDemandeur, "plaignant_principal");
4876     echo "</div>";
4877     echo "<div id=\"listeAutresPlaignants\">";
4878     $this->displaySyntheseDemandeur($listeDemandeur, "plaignant");
4879     echo "</div>";
4880     echo "</div>";
4881     echo "</div>";
4882    
4883     }
4884    
4885     /**
4886     * Affiche le bloc d'affichage des demandeurs pour dossiers CTX infraction
4887     * avec actions.
4888     *
4889     * @param array $listeDemandeur Liste des demandeurs.
4890     */
4891     function display_demandeur_requerant_avocat($listeDemandeur) {
4892     echo "<div id=\"requerant_avocat\">";
4893     // Affichage du bloc requérant
4894     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4895     echo "<div id=\"listeRequerants\" class=\"col_12\">";
4896     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4897     echo "<div id=\"requerant_principal\">";
4898     // Affichage de la synthèse
4899     $this->displaySyntheseDemandeur($listeDemandeur, "requerant_principal");
4900     echo "</div>";
4901     echo "<div id=\"listeAutresRequerants\">";
4902     $this->displaySyntheseDemandeur($listeDemandeur, "requerant");
4903     echo "</div>";
4904     echo "</div>";
4905     // Affichage du bloc avocat
4906     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4907     echo "<div id=\"listeAvocat\" class=\"col_12\">";
4908     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4909     echo "<div id=\"avocat_principal\">";
4910     $this->displaySyntheseDemandeur($listeDemandeur, "avocat_principal");
4911     echo "</div>";
4912     echo "<div id=\"listeAutresAvocats\">";
4913     $this->displaySyntheseDemandeur($listeDemandeur, "avocat");
4914     echo "</div>";
4915     echo "</div>";
4916     echo "</div>";
4917     echo "</fieldset>";
4918     // Champ flag permettant de récupérer la valeur de l'option sig pour
4919     // l'utiliser en javascript, notamment lors du chargement de l'interface
4920     // pour les références cadastrales
4921     // XXX Si un widget pour les références cadastrales existait, il n'y
4922     // aurait pas besoin de faire cela
4923     echo "<input id='option_sig' type='hidden' value='".$this->f->getParameter("option_sig")."' name='option_sig'>";
4924     echo "</div>";
4925     }
4926    
4927    
4928 softime 7067 /**
4929     * Affiche le bloc d'affichage des demandeurs pour dossiers DPC avec actions.
4930     *
4931     * @param array $listeDemandeur Liste des demandeurs.
4932     */
4933     function display_demandeur_petitionnaire_delegataire_bailleur($listeDemandeur) {
4934    
4935     // Affichage du bloc pétitionnaire principal / délégataire / bailleur
4936     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4937     echo "<div id=\"petitionnaire_principal_delegataire_bailleur\">";
4938     // Doit être utilisé avec la div petitionnaire_principal_delegataire
4939     echo "<div id=\"listeBailleurs\" class=\"col_12\">";
4940     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4941     echo "<div id=\"bailleur_principal\">";
4942     // Affichage de la synthèse
4943     $this->displaySyntheseDemandeur($listeDemandeur, "bailleur_principal");
4944     echo "</div>";
4945     echo "<div id=\"listeAutresBailleurs\">";
4946     $this->displaySyntheseDemandeur($listeDemandeur, "bailleur");
4947     echo "</div>";
4948     echo "</div>";
4949     echo "</div>";
4950     }
4951    
4952    
4953 softime 6565 function displaySyntheseDemandeur($listeDemandeur, $type) {
4954     // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
4955     // correct (c'est-à-dire que le formulaire est actif)
4956     if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
4957     // Alors on positionne le marqueur linkable a true qui permet
4958     // d'afficher ou non les actions de gestion des demandeurs
4959     $linkable = true;
4960     } else {
4961     // Sinon on positionne le marqueur linkable a false qui permet
4962     // d'afficher ou non les actions de gestion des demandeurs
4963     $linkable = false;
4964     }
4965     // Récupération du type de demandeur pour l'affichage
4966     switch ($type) {
4967     case 'petitionnaire_principal':
4968     $legend = _("Petitionnaire principal");
4969     break;
4970    
4971     case 'delegataire':
4972     $legend = _("Autre correspondant");
4973     break;
4974    
4975     case 'petitionnaire':
4976     $legend = _("Petitionnaire");
4977     break;
4978    
4979     case 'contrevenant_principal':
4980     $legend = _("Contrevenant principal");
4981     break;
4982    
4983     case 'contrevenant':
4984     $legend = _("Autre contrevenant");
4985     break;
4986    
4987     case 'plaignant_principal':
4988     $legend = _("Plaignant principal");
4989     break;
4990    
4991     case 'plaignant':
4992     $legend = _("Autre plaignant");
4993     break;
4994    
4995     case 'requerant_principal':
4996     $legend = _("Requérant principal");
4997     break;
4998    
4999     case 'requerant':
5000     $legend = _("Autre requérant");
5001     break;
5002    
5003     case 'avocat_principal':
5004     $legend = _("Avocat principal");
5005     break;
5006    
5007     case 'avocat':
5008     $legend = _("Autre avocat");
5009     break;
5010 softime 7067
5011     case 'bailleur_principal':
5012     $legend = _("Bailleur principal");
5013     break;
5014    
5015     case 'bailleur':
5016     $legend = _("Bailleur");
5017     break;
5018 softime 6565 }
5019     foreach ($listeDemandeur[$type] as $demandeur_id) {
5020     $obj = str_replace('_principal', '', $type);
5021 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
5022     "obj" => $obj,
5023     "idx" => $demandeur_id,
5024     ));
5025 softime 6565 $demandeur -> afficherSynthese($type, $linkable);
5026     $demandeur -> __destruct();
5027     }
5028     // Si en édition de formulaire
5029     if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
5030     // Bouton d'ajout du avocat
5031     // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
5032     echo "<a id=\"add_".$type."\"
5033     class=\"om-form-button add-16\">".
5034     $legend.
5035     "</a>";
5036     }
5037     }
5038     /**
5039 mbroquet 3730 * Retourne le statut du dossier
5040     * @return string Le statut du dossier d'instruction
5041     */
5042     function getStatut(){
5043    
5044     $statut = '';
5045    
5046     $etat = $this->getVal("etat");
5047     //Si l'état du dossier d'instruction n'est pas vide
5048     if ( $etat != '' ){
5049    
5050     $sql = "SELECT statut
5051     FROM ".DB_PREFIXE."etat
5052     WHERE libelle ='".$etat."'";
5053     $statut = $this->db->getOne($sql);
5054     $this->f->addToLog("getStatut() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
5055     if ( database::isError($statut, true)){
5056     die();
5057     }
5058     }
5059     return $statut;
5060     }
5061 softime 5024
5062 mbroquet 3730 /**
5063 softime 5024 * Retourne le dernier événement lié au dossier instancié
5064     *
5065     * @return [string] ID du dernier événement
5066     */
5067     function get_dernier_evenement() {
5068     $sql = "SELECT max(instruction)
5069     FROM ".DB_PREFIXE."instruction
5070     WHERE dossier = '".$this->getVal($this->clePrimaire)."'";
5071     $id_dernier_evenement = $this->db->getOne($sql);
5072     $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
5073     $this->f->isDatabaseError($id_dernier_evenement);
5074     return $id_dernier_evenement;
5075     }
5076    
5077     /**
5078 mbroquet 3730 * Retourne l'identifiant du rapport d'instruction lié du dossier
5079     * @return string L'identifiant du rapport d'instruction lié du dossier
5080     */
5081 softime 6565 function getRapportInstruction() {
5082 mbroquet 3730
5083 softime 7366 $rapport_instruction = null;
5084 mbroquet 3730
5085     $sql = "SELECT rapport_instruction
5086     FROM ".DB_PREFIXE."rapport_instruction
5087     WHERE dossier_instruction ='".$this->getVal($this->clePrimaire)."'";
5088     $rapport_instruction = $this->db->getOne($sql);
5089 softime 7366 $this->f->addToLog(__METHOD__."() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
5090     $this->f->isDatabaseError($rapport_instruction);
5091 mbroquet 3730
5092     return $rapport_instruction;
5093     }
5094    
5095     /**
5096     * Retourne l'identifiant des données techniques liées du dossier
5097     * @return string L'identifiant des données techniques liées du dossier
5098     */
5099 softime 6565 function getDonneesTechniques() {
5100 mbroquet 3730
5101     $donnees_techniques = '';
5102    
5103     $sql = "SELECT donnees_techniques
5104     FROM ".DB_PREFIXE."donnees_techniques
5105     WHERE dossier_instruction ='".$this->getVal($this->clePrimaire)."'";
5106     $donnees_techniques = $this->db->getOne($sql);
5107     $this->f->addToLog("getStatut() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
5108     if ( database::isError($donnees_techniques)){
5109     die();
5110     }
5111    
5112     return $donnees_techniques;
5113     }
5114    
5115     /**
5116     * Surcharge du bouton retour afin de retourner sur la recherche de dossiers
5117     * d'instruction existant
5118     */
5119     function retour($premier = 0, $recherche = "", $tricol = "") {
5120    
5121     echo "\n<a class=\"retour\" ";
5122     echo "href=\"";
5123     //
5124     if($this->getParameter("idx_dossier") != "") {
5125 softime 7996 echo OM_ROUTE_TAB;
5126     echo "&obj=recherche_dossier";
5127 mbroquet 3730
5128     } else {
5129     if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
5130 softime 7996 echo OM_ROUTE_FORM;
5131 mbroquet 3730 } else {
5132 softime 7996 echo OM_ROUTE_TAB;
5133 mbroquet 3730 }
5134 softime 7996 echo "&obj=".$this->get_absolute_class_name();
5135 mbroquet 3730 if ($this->f->get_submitted_get_value('retourformulaire2') !== null && $this->f->get_submitted_get_value('retourformulaire2') != '') {
5136     echo "&retourformulaire=".$this->f->get_submitted_get_value('retourformulaire2');
5137     }
5138     if($this->getParameter("retour")=="form") {
5139 softime 6565 $idx = $this->getParameter("idx");
5140     echo "&amp;idx=".$idx;
5141 mbroquet 3730 echo "&amp;action=3";
5142     }
5143     }
5144     echo "&amp;premier=".$this->getParameter("premier");
5145     echo "&amp;tricol=".$this->getParameter("tricol");
5146     echo "&amp;advs_id=".$this->getParameter("advs_id");
5147     echo "&amp;valide=".$this->getParameter("valide");
5148     //
5149     echo "\"";
5150     echo ">";
5151     //
5152     echo _("Retour");
5153     //
5154     echo "</a>\n";
5155    
5156     }
5157    
5158     /**
5159     * Permet de modifier le fil d'Ariane
5160     * @param string $ent Fil d'Ariane
5161     * @param array $val Valeurs de l'objet
5162     * @param intger $maj Mode du formulaire
5163     */
5164     function getFormTitle($ent) {
5165    
5166     // Fil d'Ariane
5167 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
5168     switch ($type_aff_form) {
5169 softime 7067 case 'DPC':
5170 softime 6565 case 'ADS':
5171     $ent = _("instruction")." -> "._("dossiers d'instruction");
5172     break;
5173     case 'CTX IN':
5174     $ent = _("contentieux")." -> "._("infraction");
5175     break;
5176     case 'CTX RE':
5177     $ent = _("contentieux")." -> "._("recours");
5178     break;
5179     }
5180 mbroquet 3730
5181     // Si différent de l'ajout
5182     if($this->getParameter("maj") != 0) {
5183     // Si le champ dossier_libelle existe
5184     if (trim($this->getVal("dossier_libelle")) != '') {
5185     $ent .= " -> ".strtoupper($this->getVal("dossier_libelle"));
5186     }
5187 softime 6565 // Si contexte ADS
5188     if ($type_aff_form ==='ADS'
5189     && trim($this->getVal("dossier")) != '') {
5190 mbroquet 3730 $demandeur = $this->get_demandeur($this->getVal("dossier"));
5191     // Si le demandeur existe
5192     if (isset($demandeur) && trim($demandeur) != '') {
5193     $ent .= " ".mb_strtoupper($demandeur, "UTF-8");
5194     }
5195     }
5196     }
5197    
5198 softime 7996 // Change le fil d'Ariane pour l'interface de géolocalisation automatique des DI
5199     if ($this->getParameter("maj") == 126) {
5200     $ent = _("administration")." -> "._("options avancées")." -> "._("Géolocalisation des dossiers");
5201     }
5202    
5203 mbroquet 3730 // Change le fil d'Ariane
5204     return $ent;
5205     }
5206    
5207     /**
5208     * Récupère le demandeur du dossier
5209     * @return string Identifiant du dossier
5210     */
5211     private function get_demandeur($dossier) {
5212    
5213     // init de la variable de retour
5214     $demandeur = '';
5215    
5216     // Requête SQL
5217     $sql = "SELECT
5218     CASE WHEN demandeur.qualite='particulier'
5219     THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
5220     ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
5221     END as demandeur
5222     FROM ".DB_PREFIXE."dossier
5223     LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur
5224     ON lien_dossier_demandeur.dossier=dossier.dossier
5225     AND lien_dossier_demandeur.petitionnaire_principal IS TRUE
5226     LEFT JOIN ".DB_PREFIXE."demandeur
5227     ON lien_dossier_demandeur.demandeur=demandeur.demandeur
5228     WHERE dossier.dossier ='".$dossier."'";
5229     $demandeur = $this->db->getOne($sql);
5230     $this->f->addToLog("get_demandeur() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
5231     database::isError($demandeur);
5232    
5233     // Résultat retourné
5234     return $demandeur;
5235     }
5236    
5237     /**
5238     * Récupère la durée de validité
5239     * @param string $dossier_autorisation Identifiant dossier d'autorisation
5240     * @return intger Durée de validité
5241     */
5242     function get_duree_validite($dossier_autorisation) {
5243    
5244     // init de la variable de retour
5245     $duree_validite = "";
5246    
5247     // Récupère le numéro de version
5248     $numeroVersion = $this->getNumeroVersion($dossier_autorisation);
5249    
5250     // Si c'est l'ajout du dossier initial
5251     if ($numeroVersion < 0) {
5252    
5253     // Récupération de la duree de validite depuis la table
5254     // "dossier_autorisation_type_detaille"
5255     $sql = "SELECT duree_validite_parametrage
5256     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
5257     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
5258     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
5259     WHERE dossier_autorisation.dossier_autorisation='".$dossier_autorisation."'";
5260     $duree_validite = $this->db->getOne($sql);
5261     $this->f->addToLog("get_duree_validite(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
5262     database::isError($duree_validite);
5263    
5264     } else {
5265    
5266     // Récupération de la duree de validite depuis le P0
5267     $sql = "SELECT duree_validite
5268     FROM ".DB_PREFIXE."dossier
5269     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
5270     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
5271     WHERE dossier_autorisation.dossier_autorisation='".$dossier_autorisation."'
5272     AND dossier.version = 0";
5273     $duree_validite = $this->db->getOne($sql);
5274     $this->f->addToLog("get_duree_validite(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
5275     database::isError($duree_validite);
5276     }
5277    
5278     // retourne le résultat
5279     return $duree_validite;
5280    
5281     }
5282    
5283     /**
5284     * Ajoute les parcelles du dossier passé en paramètre et met à jour le
5285     * quartier du dossier.
5286     * @param string $dossier Identifiant du dossier
5287     * @param string $terrain_references_cadastrales Références cadastrales du
5288     * dossier
5289     */
5290     function ajouter_dossier_parcelle($dossier, $terrain_references_cadastrales) {
5291    
5292     // Parse les parcelles
5293     $list_parcelles = $this->f->parseParcelles($terrain_references_cadastrales, $this->getVal('om_collectivite'));
5294    
5295     // A chaque parcelle une nouvelle ligne est créée dans la table
5296     // dossier_parcelle
5297     foreach ($list_parcelles as $parcelle) {
5298    
5299     // Instance de la classe dossier_parcelle
5300 softime 7996 $dossier_parcelle = $this->f->get_inst__om_dbform(array(
5301     "obj" => "dossier_parcelle",
5302     "idx" => "]",
5303     ));
5304 mbroquet 3730
5305     // Valeurs à sauvegarder
5306     $value = array(
5307     'dossier_parcelle' => '',
5308     'dossier' => $dossier,
5309     'parcelle' => '',
5310     'libelle' => $parcelle['quartier']
5311     .$parcelle['section']
5312     .$parcelle['parcelle']
5313     );
5314    
5315     // Ajout de la ligne
5316     $dossier_parcelle->ajouter($value, $this->db, DEBUG);
5317     }
5318    
5319     // Si la liste des parcelles n'est pas vide
5320     if (count($list_parcelles) > 0) {
5321    
5322     // Récupère le code impôt de la première référence cadastrale
5323     $quartier_code_impots = $list_parcelles[0]['quartier'];
5324     // Récupère l'identifiant du quartier
5325     $quartier = $this->get_quartier_by_code_impot($quartier_code_impots);
5326    
5327     // Ajoute le quartier au dossier
5328     $this->modifier_quartier_dossier($dossier, $quartier);
5329     }
5330     }
5331    
5332     /**
5333     * Supprime les parcelles du dossier passé en paramètre et met à jour le
5334     * quartier du dossier.
5335     * @param string $dossier Identifiant du dossier
5336     */
5337     function supprimer_dossier_parcelle($dossier) {
5338    
5339     // Suppression des parcelles du dossier
5340     $sql = "DELETE FROM ".DB_PREFIXE."dossier_parcelle
5341     WHERE dossier='".$dossier."'";
5342     $res = $this->db->query($sql);
5343     $this->addToLog("supprimer_dossier_parcelle() db->query(\"".$sql."\");",
5344     VERBOSE_MODE);
5345     database::isError($res);
5346    
5347     // Supprime le quartier dans dossier
5348     $this->modifier_quartier_dossier($dossier);
5349     }
5350    
5351     /**
5352     * Modifie le quartier au dossier.
5353     * @param string $dossier Numéro du dossier
5354     * @param integer $quartier Identifiant du quartier
5355     */
5356     function modifier_quartier_dossier($dossier, $quartier = null) {
5357    
5358     // Valeurs à mettre à jour
5359     $valF = array();
5360     $valF['quartier'] = $quartier;
5361    
5362     // Met à jour le quartier du dossier
5363     $cle = " dossier='".$dossier."'";
5364     $res = $this->db->autoExecute(
5365     DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
5366     $this->addToLog("ajouter_quartier_dossier(): db->autoexecute(\""
5367     .DB_PREFIXE."dossier\", ".print_r($valF, true)
5368     .", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
5369     $this->f->isDatabaseError($res);
5370     }
5371    
5372     /**
5373     * Récupère le quartier par rapport au code impôts.
5374     * @param string $code_impots Code impôts du quartier
5375     *
5376     * @return integer Identifiant du quartier
5377     */
5378     function get_quartier_by_code_impot($code_impots) {
5379    
5380     // Initialisation résultat
5381     $quartier = null;
5382    
5383     // Si la condition n'est pas vide
5384     if ($code_impots != ""
5385     && $code_impots != null) {
5386    
5387     // Requête SQL
5388     $sql = "SELECT quartier
5389     FROM ".DB_PREFIXE."quartier
5390     WHERE code_impots = '".$code_impots."'";
5391     $this->f->addToLog(
5392     "get_quartier_by_code_impots() : db->getOne(\"".$sql."\")",
5393     VERBOSE_MODE);
5394     $quartier = $this->db->getOne($sql);
5395     $this->f->isDatabaseError($quartier);
5396     }
5397    
5398     // Retourne résultat
5399     return $quartier;
5400     }
5401    
5402     /**
5403     * Méthode permettant d'ajouter les données techniques d'un DI.
5404     *
5405     * @param integer $id identifiant de la demande
5406     * @param database &$db handler de la base de donnée
5407     * @param array $val tableau de valeurs postées via le formulaire
5408     * @param boolean $DEBUG debug
5409     *
5410     * @return boolean false si erreur
5411     */
5412     function ajoutDonneesTechniquesDI($id, &$db, $val, $DEBUG) {
5413    
5414     //On vérifie que le dossier d'autorisation a des données techniques
5415     $sql = "SELECT * "
5416     ."FROM ".DB_PREFIXE."donnees_techniques "
5417     ."WHERE dossier_autorisation = '".$this->valF["dossier_autorisation"]."'";
5418     $dtda = $this->db->query($sql);
5419     $this->addToLog(__METHOD__."(): db->query(\"".$sql."\")", VERBOSE_MODE);
5420     if($this->f->isDatabaseError($dtda, true)){
5421     $this->f->addToLog(__METHOD__."() : ERROR - Erreur de base de données. Impossible d'ajouter les données techniques du dossier d'instruction.", DEBUG_MODE);
5422     return false;
5423     }
5424    
5425     //Si le dossier d'autorisation a des données techniques
5426     if ( $dtda->numrows() == 1 ){
5427     //
5428 softime 7996 $dtdi = $this->f->get_inst__om_dbform(array(
5429     "obj" => "donnees_techniques",
5430     "idx" => "]",
5431     ));
5432 mbroquet 3730 //Préparation des données
5433     $valF = $dtda->fetchRow(DB_FETCHMODE_ASSOC);
5434     //Suppression de l'identifiant
5435     $valF["donnees_techniques"] = null;
5436     // Ajout du numéro de dossier d'instruction
5437     $valF['dossier_instruction'] = $this->valF['dossier'];
5438     // Suppression du numéro de dossier d'autorisation
5439     $valF['dossier_autorisation'] = null;
5440     // Ajout des données techniques
5441     if($dtdi->ajouter($valF, $db, $DEBUG) === false) {
5442     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du dossier d'instruction.", DEBUG_MODE);
5443     return false;
5444     }
5445     }
5446     else {
5447     //Le dossier d'autorisation n'a pas de données techniques
5448     $this->f->addToLog(__METHOD__."() : ERROR - le DA n'a pas de données techniques.", DEBUG_MODE);
5449     return -1;
5450     }
5451    
5452     //
5453     return true;
5454     }
5455    
5456     /**
5457     * VIEW - contrainte.
5458     *
5459     * Vue des contraintes du dossier
5460     *
5461     * Cette vue permet de gérer le contenu de l'onglet "Contrainte(s)" sur un
5462     * dossier. Cette vue spécifique est nécessaire car l'ergonomie standard du
5463     * framework ne prend pas en charge ce cas.
5464     * C'est ici la vue spécifique des contraintes liées au dossier qui est
5465     * affichée directement au clic de l'onglet au lieu du soustab.
5466     *
5467     * L'idée est donc de simuler l'ergonomie standard en créant un container
5468     * et d'appeler la méthode javascript 'ajaxit' pour charger le contenu
5469     * de la vue visualisation de l'objet lié.
5470     *
5471     * @return void
5472     */
5473     function view_contrainte() {
5474     // Vérification de l'accessibilité sur l'élément
5475     $this->checkAccessibility();
5476     // Récupération des variables GET
5477     ($this->f->get_submitted_get_value('idxformulaire')!==null ? $idxformulaire =
5478     $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = "");
5479     ($this->f->get_submitted_get_value('retourformulaire')!==null ? $retourformulaire =
5480     $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = "");
5481 softime 6565 $obj = "dossier_contrainte";
5482     $type_aff_form = $this->get_type_affichage_formulaire();
5483     if ($type_aff_form === 'CTX RE' OR $type_aff_form === 'CTX IN') {
5484     $obj = "dossier_contrainte_contexte_ctx";
5485     }
5486 mbroquet 3730 // Objet à charger
5487     // Construction de l'url de sousformulaire à appeler
5488 softime 7996 $url = OM_ROUTE_SOUSFORM."&obj=".$obj;
5489 mbroquet 3730 $url .= "&action=4";
5490 softime 6929 $url .= "&idx=".$idxformulaire;
5491 mbroquet 3730 $url .= "&retourformulaire=".$retourformulaire;
5492     $url .= "&idxformulaire=".$idxformulaire;
5493     $url .= "&retour=form";
5494     // Affichage du container permettant le reffraichissement du contenu
5495     // dans le cas des action-direct.
5496     printf('
5497     <div id="sousform-href" data-href="%s">
5498     </div>',
5499     $url
5500     );
5501     // Affichage du container permettant de charger le retour de la requête
5502     // ajax récupérant le sous formulaire.
5503     printf('
5504     <div id="sousform-%s">
5505     </div>
5506     <script>
5507     ajaxIt(\'%s\', \'%s\');
5508     </script>',
5509     $obj,
5510     $obj,
5511     $url
5512     );
5513     }
5514    
5515     /**
5516     * Cette methode permet d'afficher le bouton de validation du formulaire
5517     *
5518     * @param integer $maj Mode de mise a jour
5519     * @return void
5520     */
5521     function bouton($maj) {
5522    
5523     if (!$this->correct
5524     && $this->checkActionAvailability() == true) {
5525     //
5526     switch($maj) {
5527     case 0 :
5528     $bouton = _("Ajouter");
5529     break;
5530     case 1 :
5531     $bouton = _("Modifier");
5532     break;
5533     case 2 :
5534     $bouton = _("Supprimer");
5535     break;
5536     default :
5537     // Actions specifiques
5538     if ($this->get_action_param($maj, "button") != null) {
5539     //
5540     $bouton = $this->get_action_param($maj, "button");
5541     } else {
5542     //
5543     $bouton = _("Valider");
5544     }
5545     break;
5546     }
5547     //
5548     $params = array(
5549     "value" => $bouton,
5550     "name" => "submit",
5551     "onclick"=>"return getDataFieldReferenceCadastrale();",
5552     );
5553     //
5554     $this->f->layout->display_form_button($params);
5555     }
5556    
5557     }
5558    
5559     /**
5560 softime 6929 * Récupère l'instance de paramétrage des taxes.
5561 mbroquet 3730 *
5562     * @param integer $taxe_amenagement Identifiant
5563     *
5564     * @return object
5565     */
5566     function get_inst_taxe_amenagement($taxe_amenagement = null) {
5567     //
5568 softime 6929 if ($this->inst_taxe_amenagement === null) {
5569 mbroquet 3730 //
5570 softime 6929 if ($taxe_amenagement === null) {
5571     //
5572 mbroquet 3730 $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($this->getVal('om_collectivite'));
5573 softime 6929
5574     // Si aucun paramétrage de taxe trouvé et que la collectivité
5575     // est mono
5576     if ($taxe_amenagement === null
5577     && $this->f->isCollectiviteMono($this->getVal('om_collectivite')) === true) {
5578     // Récupère la collectivité multi
5579     $om_collectivite_multi = $this->f->get_idx_collectivite_multi();
5580     //
5581     $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite_multi);
5582     }
5583    
5584     //
5585     if ($taxe_amenagement === null) {
5586     //
5587     return null;
5588     }
5589 mbroquet 3730 }
5590     //
5591 softime 7996 $this->inst_taxe_amenagement = $this->f->get_inst__om_dbform(array(
5592     "obj" => "taxe_amenagement",
5593     "idx" => $taxe_amenagement,
5594     ));
5595 mbroquet 3730 }
5596     //
5597     return $this->inst_taxe_amenagement;
5598     }
5599    
5600     /**
5601     * Récupère l'identifiant de la taxe d'aménagement par rapport à la collectivité.
5602     *
5603     * @param integer $om_collectivite La collectivité
5604     *
5605     * @return integer
5606     */
5607     function get_taxe_amenagement_by_om_collectivite($om_collectivite) {
5608 softime 6929 //
5609     $taxe_amenagement = null;
5610    
5611 mbroquet 3730 // Si la collectivité n'est pas renseigné
5612 softime 6929 if ($om_collectivite !== '' && $om_collectivite !== null) {
5613    
5614     // SQL
5615     $sql = "SELECT taxe_amenagement
5616     FROM ".DB_PREFIXE."taxe_amenagement
5617     WHERE om_collectivite = ".intval($om_collectivite);
5618     $taxe_amenagement = $this->f->db->getOne($sql);
5619     $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
5620     $this->f->isDatabaseError($taxe_amenagement);
5621 mbroquet 3730 }
5622    
5623     //
5624 softime 6929 return $taxe_amenagement;
5625 mbroquet 3730 }
5626    
5627     /**
5628     * [get_inst_donnees_techniques description]
5629     *
5630     * @param [type] $donnees_techniques [description]
5631     *
5632     * @return [type] [description]
5633     */
5634     function get_inst_donnees_techniques($donnees_techniques = null) {
5635     //
5636     if (is_null($this->inst_donnees_techniques)) {
5637     //
5638     if (is_null($donnees_techniques)) {
5639     $donnees_techniques = $this->getDonneesTechniques();
5640     }
5641     //
5642 softime 7996 $this->inst_donnees_techniques = $this->f->get_inst__om_dbform(array(
5643     "obj" => "donnees_techniques",
5644     "idx" => $donnees_techniques,
5645     ));
5646 mbroquet 3730 }
5647     //
5648     return $this->inst_donnees_techniques;
5649     }
5650    
5651    
5652     /**
5653     * Récupère l'instance du dossier d'autorisation.
5654     *
5655     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
5656     *
5657     * @return object
5658     */
5659 fmichon 4708 function get_inst_dossier_autorisation($dossier_autorisation = null) {
5660 mbroquet 3730 //
5661     return $this->get_inst_common("dossier_autorisation", $dossier_autorisation);
5662     }
5663    
5664    
5665     /**
5666     * Récupère l'instance du dossier d'autorisation, puis la clé d'accès au portail
5667     * citoyen associée à ce DA.
5668     *
5669     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
5670     *
5671     * @return string $cle_acces_citoyen si la clé d'accès existe
5672     * boolean false si la clé n'existe pas
5673     */
5674     protected function get_citizen_access_key($dossier_autorisation = null) {
5675     //
5676     $inst_da = $this->get_inst_dossier_autorisation($dossier_autorisation);
5677     // Récupération de la valeur de la clé d'accès
5678     $cle_acces_citoyen = $inst_da->getVal('cle_acces_citoyen');
5679     if ($cle_acces_citoyen === '' OR $cle_acces_citoyen === null) {
5680     return false;
5681     }
5682     return $cle_acces_citoyen;
5683     }
5684    
5685    
5686     /**
5687     * Récupère l'instance du type détaillé du dossier d'autorisation.
5688     *
5689     * @param integer $dossier_autorisation_type_detaille Identifiant
5690     *
5691     * @return object
5692     */
5693     function get_inst_dossier_autorisation_type_detaille($dossier_autorisation_type_detaille = null) {
5694     //
5695     if (is_null($this->inst_dossier_autorisation_type_detaille)) {
5696     //
5697     if (is_null($dossier_autorisation_type_detaille)) {
5698     //
5699     $dossier_autorisation = $this->get_inst_dossier_autorisation();
5700     //
5701     $dossier_autorisation_type_detaille = $dossier_autorisation->getVal('dossier_autorisation_type_detaille');
5702     }
5703     //
5704 softime 7996 $this->inst_dossier_autorisation_type_detaille = $this->f->get_inst__om_dbform(array(
5705     "obj" => "dossier_autorisation_type_detaille",
5706     "idx" => $dossier_autorisation_type_detaille,
5707     ));
5708 mbroquet 3730 }
5709     //
5710     return $this->inst_dossier_autorisation_type_detaille;
5711     }
5712    
5713     /**
5714     * Récupère l'instance du cerfa
5715     *
5716     * @param integer $cerfa Identifiant du cerfa
5717     *
5718     * @return object
5719     */
5720     function get_inst_cerfa($cerfa = null) {
5721     //
5722     if (is_null($this->inst_cerfa)) {
5723     //
5724     if (is_null($cerfa)) {
5725     //
5726     $dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
5727     //
5728     $cerfa = $dossier_autorisation_type_detaille->getVal('cerfa');
5729     }
5730     //
5731 softime 7996 $this->inst_cerfa = $this->f->get_inst__om_dbform(array(
5732     "obj" => "cerfa",
5733     "idx" => $cerfa,
5734     ));
5735 mbroquet 3730 }
5736     //
5737     return $this->inst_cerfa;
5738     }
5739    
5740     /**
5741     * CONDITION - is_user_from_allowed_collectivite.
5742     *
5743     * Cette condition permet de vérifier si l'utilisateur connecté appartient
5744     * à une collectivité autorisée : c'est-à-dire de niveau 2 ou identique à
5745     * la collectivité de l'enregistrement sur lequel on se trouve.
5746     *
5747     * @return boolean
5748     */
5749     function is_user_from_allowed_collectivite() {
5750    
5751     // Si l'utilisateur est de niveau 2
5752     if ($_SESSION["niveau"] == "2") {
5753     // Alors l'utilisateur fait partie d'une collectivité autorisée
5754     return true;
5755     }
5756    
5757     // L'utilisateur est donc de niveau 1
5758     // On vérifie donc si la collectivité de l'utilisateur est la même
5759     // que la collectivité de l'élément sur lequel on se trouve
5760     if ($_SESSION["collectivite"] === $this->getVal("om_collectivite")) {
5761     // Alors l'utilisateur fait partie d'une collectivité autorisée
5762     return true;
5763     }
5764    
5765     // L'utilisateur ne fait pas partie d'une collectivité autorisée
5766     return false;
5767     }
5768    
5769     /**
5770     * Création ou mise à jour du répertoire de numérisation.
5771     *
5772     * L'objet de cette méthode est la création ou la mise à jour de la date de
5773     * modification du répertoire de numérisation destiné à recevoir les pièces
5774     * numérisées pour un import automatique.
5775     * À chaque saisie d'une nouvelle demande dans openADS, le répertoire est
5776     * soit créé soit mis à jour pour être disponible en dehors d'openADS
5777     * (point de montage sur le serveur) pour permettre de déposer les pièces
5778     * numérisées directement depuis le copieur. À intervalle régulier, un
5779     * service vérifie le contenu de ces répertoire pour importer
5780     * automatiquement ces fichiers dans l'onglet 'Pièce(s)' du dossier
5781     * concerné.
5782     * La mise à jour de la date de modification est importante pour réaliser
5783     * la purge des répertoires vides sur la base de la date de la dernière
5784     * demande qui concerne le dossier.
5785     *
5786     * @return boolean
5787     */
5788     function create_or_touch_digitalization_folder() {
5789    
5790     // Nom du répertoire
5791     // Le répertoire créé possède comme nom le libellé du dossier avec
5792     // le suffixe séparé par un '.'. Exemple : PC0130551601234.P0
5793 nmeucci 4526 $separateur = '';
5794     if ($this->getSuffixe($this->getVal('dossier_instruction_type')) === 't') {
5795     $separateur = '.';
5796     }
5797    
5798 mbroquet 3730 $digitalization_folder_name = str_replace(
5799     $this->getVal("dossier_autorisation"),
5800 nmeucci 4526 $this->getVal("dossier_autorisation").$separateur,
5801 mbroquet 3730 $this->getVal($this->clePrimaire)
5802     );
5803    
5804     // Vérifie que l'option de numérisation des dossiers est désactivée
5805     if ($this->f->is_option_digitalization_folder_enabled() !== true) {
5806     //
5807     $this->addToLog(
5808     _("L'option de numerisation des dossiers n'est pas activee").".",
5809     DEBUG_MODE
5810     );
5811     return false;
5812     }
5813    
5814     // Vérifie le paramétrage du répertoire de numérisation
5815     if ($this->f->getParameter("digitalization_folder_path") === null) {
5816     //
5817     $this->addToLog(
5818     "Configuration du répertoire de numérisation incorrecte.",
5819     DEBUG_MODE
5820     );
5821     return false;
5822     }
5823    
5824     // Répertoire cible
5825     $root_folder_path = $this->f->getParameter("digitalization_folder_path");
5826    
5827     // Vérifie que le répertoire existe
5828     if (is_dir($root_folder_path) !== true) {
5829     //
5830     $this->addToLog(
5831     sprintf(
5832     "Le répertoire '%s' n'existe pas.",
5833     $root_folder_path
5834     ),
5835     DEBUG_MODE
5836     );
5837     return false;
5838     }
5839    
5840     // Répertoire des "à traiter"
5841     $todo_folder_path = $root_folder_path."Todo/";
5842    
5843     // Vérifie que le répertoire existe
5844     if (is_dir($todo_folder_path) !== true) {
5845     //
5846     $this->addToLog(
5847     sprintf(
5848     "Le répertoire '%s' n'existe pas.",
5849     $todo_folder_path
5850     ),
5851     DEBUG_MODE
5852     );
5853     return false;
5854     }
5855    
5856     // Répertoire de numérisation.
5857     $digitalization_folder_path = $todo_folder_path.$digitalization_folder_name;
5858    
5859     // Si le répertore existe déjà le répertoire n'est pas créé
5860     if (file_exists($digitalization_folder_path) == true) {
5861     // Mise à jour du répertoire
5862     if (touch($digitalization_folder_path) !== true) {
5863     // Si une erreur survient
5864     $this->addToLog(
5865     sprintf(
5866     "Erreur lors de la mise à jour du répertoire '%s'.",
5867     $digitalization_folder_path
5868     ),
5869     DEBUG_MODE
5870     );
5871     return false;
5872     }
5873     //
5874     return true;
5875     } else {
5876     // Création du répertoire
5877     if (mkdir($digitalization_folder_path) !== true) {
5878     //
5879     $this->addToLog(
5880     sprintf(
5881     "Erreur lors de la création du répertoire '%s'.",
5882     $digitalization_folder_path
5883     ),
5884     DEBUG_MODE
5885     );
5886     return false;
5887     }
5888     //
5889     return true;
5890     }
5891     }
5892    
5893 nmeucci 3876 /**
5894     * Récupère, convertit et retourne les logs de toutes les instructions
5895     *
5896     * @return array tableau indexé de logs
5897     */
5898     public function get_log_instructions() {
5899     $log_instructions = $this->getVal('log_instructions');
5900     // Gestion du premier log
5901 nmeucci 3887 if ($log_instructions === '') {
5902 nmeucci 3876 $log_instructions = json_encode(array());
5903     }
5904 nmeucci 3887 // Gestion du log invalide
5905     if(!$this->isJson($log_instructions)) {
5906     return false;
5907     }
5908 nmeucci 3876 return json_decode($log_instructions, true);
5909     }
5910    
5911     /**
5912     * Ajoute un log d'instruction aux logs existants
5913     *
5914     * @param array $log valeurs de l'instruction
5915     * @return bool vrai si traitement effectué avec succès
5916     */
5917     public function add_log_instructions($log) {
5918     // Begin
5919     $this->begin_treatment(__METHOD__);
5920     // Ajout du log
5921     $log_instructions = $this->get_log_instructions();
5922 nmeucci 3887 if ($log_instructions === false) {
5923     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
5924     return $this->end_treatment(__METHOD__, false);
5925     }
5926 nmeucci 3876 array_push($log_instructions, $log);
5927 nmeucci 3907 $log_instructions = json_encode($log_instructions);
5928 nmeucci 3876 // Mise à jour du DI
5929     $val = array("log_instructions"=>$log_instructions);
5930     $ret = $this->f->db->autoExecute(
5931     DB_PREFIXE."dossier",
5932     $val,
5933     DB_AUTOQUERY_UPDATE,
5934     "dossier = '".$this->getVal('dossier')."'");
5935     if (database::isError($ret, true)) {
5936     $this->erreur_db($ret->getDebugInfo(), $ret->getMessage(), 'dossier');
5937     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
5938     return $this->end_treatment(__METHOD__, false);
5939     }
5940     return $this->end_treatment(__METHOD__, true);
5941     }
5942    
5943 nmeucci 3887 /**
5944     * Vérifie qu'une chaîne est au format json
5945     *
5946     * @param string $text chaîne à analyser
5947     * @return boolean vrai si formatée json
5948     */
5949     function isJson($text) {
5950     json_decode($text);
5951     return (json_last_error() == JSON_ERROR_NONE);
5952     }
5953    
5954 fmichon 4708 /**
5955     * TREATMENT - mark_as_connected_to_referentiel_erp.
5956     *
5957     * Cette méthode permet de positionner le marqueur
5958     * 'interface_referentiel_erp' à 'true'. Cela signifie que le dossier est
5959     * connecté au référentiel ERP.
5960     *
5961     * @return boolean
5962     */
5963     function mark_as_connected_to_referentiel_erp() {
5964     //
5965     $this->begin_treatment(__METHOD__);
5966     //
5967     $data = array("interface_referentiel_erp" => true, );
5968     // Exécution de la requête
5969     $res = $this->f->db->autoExecute(
5970     DB_PREFIXE.$this->table,
5971     $data,
5972     DB_AUTOQUERY_UPDATE,
5973     $this->getCle($this->getVal($this->clePrimaire))
5974     );
5975     // Logger
5976     $this->addToLog(
5977     __METHOD__."(): db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($data, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($this->getVal($this->clePrimaire))."\");",
5978     VERBOSE_MODE
5979     );
5980     //
5981     if ($this->f->isDatabaseError($res, true)) {
5982     // Appel de la methode de recuperation des erreurs
5983     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
5984     $this->correct = false;
5985     $this->addToLog(
5986     __METHOD__."(): Problème erreur lors de la mise à jour du dossier",
5987     DEBUG_MODE
5988     );
5989     // Termine le traitement
5990     return $this->end_treatment(__METHOD__, false);
5991     }
5992     //
5993     $this->addToMessage(_("Le dossier est désormais 'connecté avec le référentiel ERP'."));
5994     return $this->end_treatment(__METHOD__, true);
5995     }
5996 nmeucci 3887
5997 fmichon 4708 /**
5998     * CONDITION - is_connected_to_referentiel_erp.
5999     *
6000     * @return boolean
6001     */
6002     function is_connected_to_referentiel_erp() {
6003     //
6004     if ($this->getVal("interface_referentiel_erp") !== "t") {
6005     return false;
6006     }
6007     //
6008     return true;
6009     }
6010    
6011 nhaye 4777
6012 fmichon 4708 /**
6013 nhaye 4777 * Retourne les données techniques applicables au dossier courant, càd les données
6014     * techniques liées au dossier avec seulement les champs du CERFA associé au type de
6015     * dossier.
6016     *
6017     * @return array $donnees_techniques_applicables Tableau associatif contenant
6018     * seulement les données techniques
6019     * applicables au dossier.
6020     */
6021     public function get_donnees_techniques_applicables() {
6022    
6023     // Récupération de l'identifiant des données techniques liées au dossier
6024     $donnees_techniques = $this->getDonneesTechniques();
6025    
6026     $inst_donnees_techniques = $this->get_inst_common('donnees_techniques', $donnees_techniques);
6027     $donnees_techniques_applicables = $inst_donnees_techniques->get_donnees_techniques_applicables();
6028     //
6029     return $donnees_techniques_applicables;
6030    
6031     }
6032    
6033    
6034     /**
6035 fmichon 4708 * Retourne un tableau avec les données du dossier d'instruction.
6036     *
6037 jymadier 5275 * L'objectif est de mettre à disposition via un WS REST un ensemble
6038 fmichon 4708 * de données exploitable par une autre application.
6039     */
6040     function get_datas() {
6041    
6042     /**
6043     *
6044     */
6045 nhaye 4777
6046     $om_collectivite = $this->get_inst_common('om_collectivite', $this->getVal('om_collectivite'));
6047     $instructeur = $this->get_inst_common('instructeur', $this->getVal('instructeur'));
6048     $division = $this->get_inst_common('division', $this->getVal('division'));
6049     $dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
6050     $dossier_autorisation_type = $this->get_inst_common('dossier_autorisation_type', $dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
6051     $donnees_techniques = $this->get_donnees_techniques_applicables();
6052    
6053 fmichon 4708 //
6054     $datas = array(
6055     //
6056     "dossier_instruction" => $this->getVal($this->clePrimaire),
6057     //
6058     "dossier_autorisation" => $this->getVal("dossier_autorisation"),
6059     //
6060     "terrain_adresse_voie_numero" => $this->getVal("terrain_adresse_voie_numero"),
6061     "terrain_adresse_lieu_dit" => $this->getVal("terrain_adresse_lieu_dit"),
6062     "terrain_adresse_code_postal" => $this->getVal("terrain_adresse_code_postal"),
6063     "terrain_adresse_cedex" => $this->getVal("terrain_adresse_cedex"),
6064     "terrain_adresse_voie" => $this->getVal("terrain_adresse_voie"),
6065     "terrain_adresse_bp" => $this->getVal("terrain_adresse_bp"),
6066     "terrain_adresse_localite" => $this->getVal("terrain_adresse_localite"),
6067     "terrain_superficie" => $this->getVal("terrain_superficie"),
6068     //
6069     "references_cadastrales" => $this->f->parseParcelles($this->getVal("terrain_references_cadastrales"), $this->getVal('om_collectivite')),
6070 nhaye 4777 "dossier_autorisation_type" => $dossier_autorisation_type->getVal("libelle"),
6071     "dossier_autorisation_type_detaille" => $dossier_autorisation_type_detaille->getVal("libelle"),
6072     "collectivite" => $om_collectivite->getVal("libelle"),
6073     "instructeur" => $instructeur->getVal("nom"),
6074     "division" => $division->getVal("libelle"),
6075     "etat_dossier" => $this->getVal("etat"),
6076     "statut_dossier" => $this->getStatut(),
6077     "date_depot_initial" => $this->getVal("date_depot"),
6078     "date_limite_instruction" => $this->getVal("date_limite"),
6079     "date_decision" => $this->getVal("date_decision"),
6080     "enjeu_urbanisme" => $this->getVal("enjeu_urba") == 't' ? 'true' : 'false',
6081     "enjeu_erp" => $this->getVal("enjeu_erp") == 't' ? 'true' : 'false',
6082 fmichon 4708 );
6083    
6084 softime 6565 // Gestion des demandeurs.
6085 fmichon 4708 $this->listeDemandeur('dossier', $this->getVal($this->clePrimaire));
6086     //
6087 softime 6565 if (isset($this->valIdDemandeur["petitionnaire_principal"]) AND !empty($this->valIdDemandeur["petitionnaire_principal"])) {
6088 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
6089     "obj" => "petitionnaire",
6090     "idx" => $this->valIdDemandeur["petitionnaire_principal"][0],
6091     ));
6092 softime 6565 $datas["petitionnaire_principal"] = $demandeur->get_datas();
6093     $demandeur->__destruct();
6094     }
6095 fmichon 4708 //
6096     if (isset($this->valIdDemandeur["delegataire"]) && !empty($this->valIdDemandeur["delegataire"])) {
6097 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
6098     "obj" => "delegataire",
6099     "idx" => $this->valIdDemandeur["delegataire"][0],
6100     ));
6101 fmichon 4708 $datas["delegataire"] = $demandeur->get_datas();
6102     $demandeur->__destruct();
6103     }
6104     //
6105     if (isset($this->valIdDemandeur["petitionnaire"]) AND !empty($this->valIdDemandeur["petitionnaire"])) {
6106     $datas["autres_petitionnaires"] = array();
6107     foreach ($this->valIdDemandeur["petitionnaire"] as $petitionnaire) {
6108 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
6109     "obj" => "petitionnaire",
6110     "idx" => $petitionnaire,
6111     ));
6112 fmichon 4708 $datas["autres_petitionnaires"][] = $demandeur->get_datas();
6113     $demandeur->__destruct();
6114     }
6115     }
6116    
6117 nhaye 4777 // Tableau contenant le nom de chaque champ de données techniques à retourner
6118     $dt_a_afficher = array(
6119     "co_tot_log_nb",
6120     "co_cstr_exist",
6121     "co_uti_pers",
6122     "co_uti_vente",
6123     "co_uti_loc",
6124     "su_tot_shon_tot",
6125     "su_avt_shon_tot",
6126     "am_lot_max_nb",
6127     "am_empl_nb",
6128     );
6129    
6130 jymadier 4785 // Tableau associatif contenant les données techniques voulues
6131     $tab_donnees_techniques = array();
6132 nhaye 4777 foreach ($dt_a_afficher as $key) {
6133     // On ajoute le champ de données techniques dans le retour seulement s'il
6134     // existe dans $donnees_techniques (s'il est applicable au dossier)
6135 jymadier 4785 if (array_key_exists($key, $donnees_techniques) === true) {
6136 nhaye 4777 if ($donnees_techniques[$key] === 't') {
6137     $donnees_techniques[$key] = 'true';
6138     };
6139     if ($donnees_techniques[$key] === 'f') {
6140     $donnees_techniques[$key] = 'false';
6141     };
6142 jymadier 4785 $tab_donnees_techniques[$key] = $donnees_techniques[$key];
6143 nhaye 4777 };
6144     };
6145    
6146 jymadier 4785 $datas['donnees_techniques'] = $tab_donnees_techniques;
6147 fmichon 4708 /**
6148     *
6149     */
6150     //
6151     return $datas;
6152     }
6153    
6154 softime 6565 /**
6155     * CONDITION - is_class_dossier_corresponding_to_his_groupe
6156     *
6157     * Vérifie la correspondance groupe/classe du dossier instancié.
6158     *
6159     * @param string $classe
6160     * @return boolean
6161     */
6162     protected function is_class_dossier_corresponding_to_type_form($classe) {
6163     $type_form = $this->get_type_affichage_formulaire();
6164     switch ($type_form) {
6165 softime 7067 case 'DPC';
6166 softime 6565 case 'ADS':
6167     if ($this->f->starts_with($classe, 'dossier_instruction') === true) {
6168     return true;
6169     }
6170     return false;
6171     case 'CTX RE':
6172     if ($this->f->ends_with($classe, '_recours') === true) {
6173     return true;
6174     }
6175     return false;
6176     case 'CTX IN':
6177     if ($this->f->ends_with($classe, '_infractions') === true) {
6178     return true;
6179     }
6180     return false;
6181     default:
6182     return false;
6183     }
6184     }
6185 nhaye 4777
6186 softime 6565
6187 softime 6272 /**
6188 softime 6565 * CONDITION - check_context
6189     *
6190     * Vérifie la correspondance groupes dossier/utilisateur.
6191     * Vérifie l'accès aux dossiers confidentiels.
6192     * Vérifie la correspondance groupe/classe.
6193     *
6194     * @return boolean
6195     */
6196     public function check_context() {
6197     // Le dossier doit être un objet valide
6198     $id = $this->getVal($this->clePrimaire);
6199     if ($id === 0 OR $id === '0' OR $id === '' OR $id === ']') {
6200     return false;
6201     }
6202    
6203     // Vérification que l'utilisateur a accès au dossier
6204     if ($this->can_user_access_dossier() === false) {
6205     return false;
6206     }
6207     // Vérification que la classe métier instanciée est adéquate.
6208 softime 7996 return $this->is_class_dossier_corresponding_to_type_form($this->get_absolute_class_name());
6209 softime 6565 }
6210    
6211     /**
6212     * VIEW - redirect.
6213     *
6214     * Cette vue est appelée lorsque l'on souhaite consulter un dossier dont on ne connaît pas le groupe.
6215     * Ce fonctionnement est nécessaire car les classes métier filles de 'dossier' sont relatives à ce groupe.
6216     *
6217     * Par exemple, depuis l'onglet "Dossiers Liés" du DI, le listing ne permet pas d'instancier chaque résultat
6218     * et par conséquent on n'a pas accès au groupe du dossier. L'action tableau consulter y est surchargée afin
6219     * d'amener à cette vue qui se charge de faire la redirection adéquate.
6220     *
6221     * @return void
6222     */
6223     public function redirect() {
6224     // Redirection vers la classe métier adéquate
6225     $context = $this->get_type_affichage_formulaire();
6226     switch ($context) {
6227     case 'ADS':
6228     $obj = 'dossier_instruction';
6229     break;
6230     case 'CTX RE':
6231     $obj = 'dossier_contentieux_tous_recours';
6232     break;
6233     case 'CTX IN':
6234     $obj = 'dossier_contentieux_toutes_infractions';
6235     break;
6236     default:
6237     return;
6238     }
6239     $idx = $this->getVal($this->clePrimaire);
6240 softime 7996 $link = OM_ROUTE_FORM.'&obj='.$obj.'&action=3&idx='.$idx;
6241 softime 6565 if ($this->f->get_submitted_get_value('retourformulaire') !== null
6242     && $this->f->get_submitted_get_value('idxformulaire') !== null) {
6243 softime 7996 $link .= '&premier=0&tricol=&retourformulaire='.$this->f->get_submitted_get_value('retourformulaire');
6244 softime 6565 $link .= '&idxformulaire='.$this->f->get_submitted_get_value('idxformulaire');
6245     }
6246    
6247     header('Location: '.$link);
6248     exit();
6249     }
6250    
6251    
6252     /**
6253     * CONDITION - is_confidentiel
6254     *
6255     * Permet de savoir si le type de dossier d'autorisation du dossier courant est
6256     * confidentiel.
6257     *
6258     * @return boolean true si le dossier est confidentiel, sinon false.
6259     *
6260     */
6261     public function is_confidentiel() {
6262     //
6263     $inst_dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
6264     $inst_dossier_autorisation_type = $this->get_inst_dossier_autorisation_type($inst_dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
6265     $confidentiel = $inst_dossier_autorisation_type->getVal('confidentiel');
6266     //
6267     if ($confidentiel === 't') {
6268     return true;
6269     }
6270     return false;
6271     }
6272    
6273    
6274     /**
6275     * CONDITION - can_user_access_dossier
6276     *
6277     * Effectue les vérifications suivantes :
6278     * - L'utilisateur doit avoir accès au groupe du dossier
6279     * - Si le dossier est confidentiel, l'utilisateur doit avoir accès aux dossiers
6280     * confidentiels de ce groupe
6281     *
6282     * @return boolean true si les conditions ci-dessus sont réunies, sinon false
6283     *
6284     */
6285     public function can_user_access_dossier() {
6286     // Récupère le code du groupe
6287     $groupe_dossier = $this->get_groupe();
6288    
6289     // Le groupe doit être accessible par l'utilisateur ;
6290     if ($this->f->is_user_in_group($groupe_dossier) === false) {
6291     return false;
6292     }
6293     if ($this->is_confidentiel() === true) {
6294     //
6295     if ($this->f->can_user_access_dossiers_confidentiels_from_groupe($groupe_dossier) === false) {
6296     return false;
6297     }
6298     }
6299     return true;
6300     }
6301    
6302    
6303     /**
6304 softime 6272 * Met à jour une métadonnée sur tous les fichiers liés au dossier.
6305     *
6306     * @param string $metadata Nom de la métadonnée.
6307     * @param string $metadata_value Nouvelle valeur de la métadonnée.
6308     *
6309     * @return boolean
6310     */
6311     public function update_metadata_by_dossier($metadata, $metadata_value) {
6312     // Rècupère la liste des fichiers stockés liés au dossier
6313     $sql = sprintf('
6314     SELECT uid AS uid
6315     FROM %1$sdocument_numerise
6316     WHERE dossier = \'%2$s\'
6317     AND document_numerise IS NOT NULL
6318     UNION
6319     SELECT fichier AS uid
6320     FROM %1$sconsultation
6321     WHERE dossier = \'%2$s\'
6322     AND fichier IS NOT NULL
6323     UNION
6324     SELECT om_fichier_consultation AS uid
6325     FROM %1$sconsultation
6326     WHERE dossier = \'%2$s\'
6327     AND om_fichier_consultation IS NOT NULL
6328     UNION
6329     SELECT om_fichier_instruction AS uid
6330     FROM %1$sinstruction
6331     WHERE dossier = \'%2$s\'
6332     AND om_fichier_instruction IS NOT NULL
6333     UNION
6334     SELECT om_fichier_rapport_instruction AS uid
6335     FROM %1$srapport_instruction
6336     WHERE dossier_instruction = \'%2$s\'
6337     AND om_fichier_rapport_instruction IS NOT NULL;
6338     ',
6339     DB_PREFIXE,
6340     $this->getVal($this->clePrimaire)
6341     );
6342     $res = $this->f->db->query($sql);
6343     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
6344     $this->f->isDatabaseError($res);
6345    
6346     // Définit la métadonnée à mettre à jour
6347     $metadata_update = array();
6348     $metadata_update[$metadata] = $metadata_value;
6349    
6350     // Pour chaque résultat
6351     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
6352     // Met à jour les métadonnées du fichier
6353     $uid_update = $this->f->storage->storage->update_metadata($row['uid'], $metadata_update);
6354    
6355     // Si la méthode ne retourne pas l'uid du fichier alors la mise
6356     // à jour ne s'est pas réalisée
6357     if ($uid_update !== $row['uid']) {
6358     //
6359     return false;
6360     }
6361     }
6362     $res->free();
6363    
6364     //
6365     return true;
6366     }
6367    
6368    
6369     /**
6370     * Traitement pour les ERP.
6371     * Si la valeur du champ 'erp' a été modifié, modifie la valeur de la
6372     * métadonnée concernceERP sur tous les fichiers liés au dossier.
6373     *
6374     * @param array $values Liste des nouvelles valeurs.
6375     *
6376     * @return boolean
6377     */
6378     public function update_concerneERP(array $values) {
6379     // Définit le champ et la métadonnée
6380     $champ = 'erp';
6381     $metadata = 'concerneERP';
6382    
6383     // Définit les valeurs à comparer
6384     $value_after = $this->get_boolean_from_view_value($values[$champ]);
6385     $value_before = $this->get_boolean_from_pgsql_value($this->getVal($champ));
6386    
6387     // Vérifie si la valeur du champ a été modifié
6388     if ($value_after !== $value_before) {
6389     // Transforme la valeur booléenne en string
6390     $metadata_value = 'false';
6391     if ($value_after === true) {
6392     $metadata_value = 'true';
6393     }
6394    
6395     // Met à jour les métadonnées des fichiers liés au dossier
6396     $update = $this->update_metadata_by_dossier($metadata, $metadata_value);
6397     //
6398     if ($update !== true) {
6399     //
6400     return false;
6401     }
6402     }
6403    
6404     //
6405     return true;
6406     }
6407    
6408    
6409 softime 6565 /**
6410     * Récupère l'instance du groupe.
6411     *
6412     * @param string $groupe Identifiant du groupe.
6413     *
6414     * @return object
6415     */
6416     private function get_inst_groupe($groupe) {
6417     //
6418     return $this->get_inst_common("groupe", $groupe);
6419     }
6420    
6421    
6422     /**
6423     * Récupère l'instance du type de dossier d'autorisation.
6424     *
6425     * @param string $dossier_autorisation_type Identifiant du type de dossier
6426     * d'autorisation.
6427     *
6428     * @return object
6429     */
6430     private function get_inst_dossier_autorisation_type($dossier_autorisation_type) {
6431     //
6432     return $this->get_inst_common("dossier_autorisation_type", $dossier_autorisation_type);
6433     }
6434    
6435    
6436 softime 7366 /**
6437     * Récupère l'instance de la demande du dossier
6438     *
6439     * @param mixed Identifiant de la demande
6440     *
6441     * @return object
6442     */
6443     function get_inst_demande($demande = null) {
6444     //
6445     if (is_null($this->inst_demande)) {
6446     //
6447     if (is_null($demande)) {
6448     $demande = $this->get_demande_by_dossier_instruction();
6449     }
6450     //
6451     return $this->get_inst_common("demande", $demande);
6452     }
6453     //
6454     return $this->inst_demande;
6455     }
6456    
6457    
6458     /**
6459 softime 7541 * Récupère l'identifiant de la demande initiale par le dossier d'instruction.
6460 softime 7366 *
6461     * @return integer
6462     */
6463     function get_demande_by_dossier_instruction() {
6464     // Initialisation de la variable de retour
6465     $res = null;
6466    
6467     // SQL
6468     $sql = "SELECT demande
6469     FROM ".DB_PREFIXE."demande
6470 softime 7541 WHERE dossier_instruction = '".$this->getVal($this->clePrimaire)."'
6471     ORDER BY instruction_recepisse ASC
6472     LIMIT 1";
6473 softime 7366 $res = $this->f->db->getOne($sql);
6474     $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
6475     $this->f->isDatabaseError($res);
6476    
6477     //
6478     return $res;
6479     }
6480    
6481 softime 7996 /**
6482     * TREATMENT - update_last_modification_date.
6483     *
6484     * Cette methode met à jour la date de dernière modification du dossier.
6485     *
6486     * @return boolean
6487     */
6488     public function update_last_modification_date() {
6489     //
6490     $this->begin_treatment(__METHOD__);
6491     //
6492     $this->correct = true;
6493     $this->valF["date_modification"] = 'NOW';
6494     //
6495     $res = $this->f->db->autoExecute(
6496     DB_PREFIXE.$this->table,
6497     $this->valF,
6498     DB_AUTOQUERY_UPDATE,
6499     $this->clePrimaire." = '".$this->getVal($this->clePrimaire)."'"
6500     );
6501     if ($this->f->isDatabaseError($res, true)) {
6502     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
6503     $this->correct = false;
6504     return $this->end_treatment(__METHOD__, false);
6505     } else {
6506     return $this->end_treatment(__METHOD__, true);
6507     }
6508     //
6509     return $this->end_treatment(__METHOD__, false);
6510     }
6511 softime 7366
6512 softime 7996 /**
6513     * TREATMENT - update_hash_sitadel.
6514     *
6515     * Cette methode met à jour le hash SITADEL du dossier.
6516     *
6517     * @return boolean
6518     */
6519     public function update_hash_sitadel($hash_sitadel = null) {
6520     //
6521     $this->begin_treatment(__METHOD__);
6522     //
6523     if ($hash_sitadel !== null && $hash_sitadel !== '') {
6524     //
6525     $this->correct = true;
6526     $this->valF["hash_sitadel"] = $hash_sitadel;
6527     //
6528     $res = $this->f->db->autoExecute(
6529     DB_PREFIXE.$this->table,
6530     $this->valF,
6531     DB_AUTOQUERY_UPDATE,
6532     $this->clePrimaire." = '".$this->getVal($this->clePrimaire)."'"
6533     );
6534     if ($this->f->isDatabaseError($res, true)) {
6535     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
6536     $this->correct = false;
6537     return $this->end_treatment(__METHOD__, false);
6538     } else {
6539     return $this->end_treatment(__METHOD__, true);
6540     }
6541     }
6542     //
6543     return $this->end_treatment(__METHOD__, false);
6544     }
6545    
6546 softime 8477 /**
6547     * Surcharge de la méthode rechercheTable pour éviter de court-circuiter le
6548     * générateur en devant surcharger la méthode cleSecondaire afin de supprimer
6549     * les éléments liés dans les tables NaN.
6550     *
6551     * @param mixed $dnu1 Instance BDD - À ne pas utiliser
6552     * @param string $table Table
6553     * @param string $field Champ
6554     * @param mixed $id Identifiant
6555     * @param mixed $dnu2 Marqueur de débogage - À ne pas utiliser
6556     * @param string $selection Condition de la requête
6557     *
6558     * @return void
6559     */
6560     function rechercheTable(&$dnu1 = null, $table, $field, $id, $dnu2 = null, $selection = "") {
6561 softime 7996
6562 softime 8477 // Dans le cas d'une suppression du dossier d'instruction, les tables
6563     // liées ne sont pas vérifiées
6564     $liaison_suppr = array (
6565     "demande",
6566     "donnees_techniques",
6567     "instruction",
6568     "lien_dossier_demandeur",
6569     );
6570     if ($this->get_action_crud() === 'delete'
6571     && in_array($table, array_keys($liaison_suppr)) === true) {
6572     // Annule la vérid
6573     $this->addToLog(__METHOD__."(): ".__("Dans le cas spécifique de la suppression du dossier d'instruction, les tables liées ne sont pas vérifiées."), EXTRA_VERBOSE_MODE);
6574     return;
6575     }
6576     //
6577     parent::rechercheTable($this->f->db, $table, $field, $id, null, $selection);
6578     }
6579    
6580    
6581 mbroquet 3730 }
6582    
6583 softime 7996

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26