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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6929 - (hide annotations)
Thu Jun 15 16:57:15 2017 UTC (7 years, 7 months ago) by softime
File size: 258746 byte(s)
* Merge de la 4.2.0

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26