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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7085 - (hide annotations)
Fri Jul 7 13:56:18 2017 UTC (7 years, 6 months ago) by nmeucci
File size: 269088 byte(s)
Correction infobulle pictogramme contentieux

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26