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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4785 - (hide annotations)
Wed Jul 27 14:48:32 2016 UTC (8 years, 6 months ago) by jymadier
File size: 205092 byte(s)
* Corrections du web service dossier_instructions :
 - Correction des tests
 - Ajout de contrôles isset
 - Correction d'un bug lors de la récupération des données techniques
 - Le web service retourne un tableau données techniques vides s'il n'y a pas de DT applicables

1 mbroquet 3730 <?php
2     //$Id: dossier.class.php 6132 2016-03-09 09:18:18Z stimezouaght $
3     //gen openMairie le 10/02/2011 20:39
4    
5     require_once ("../gen/obj/dossier.class.php");
6    
7     class dossier extends dossier_gen {
8    
9     var $maj;
10     var $dossier_instruction_type;
11     var $is_incomplet_notifie = null;
12     var $valIdDemandeur = array("petitionnaire_principal" => "",
13     "delegataire" => "",
14     "petitionnaire" => array());
15     var $postedIdDemandeur = array("petitionnaire_principal" => "",
16     "delegataire" => "",
17     "petitionnaire" => array());
18    
19     /**
20     * Instance de la classe taxe_amenagement.
21     *
22     * @var null
23     */
24     var $inst_taxe_amenagement = null;
25    
26     /**
27     * Instance de la classe donnees_techniques.
28     *
29     * @var null
30     */
31     var $inst_donnees_techniques = null;
32    
33     /**
34     * Instance de la classe dossier_autorisation.
35     *
36     * @var mixed (resource | null)
37     */
38     var $inst_dossier_autorisation = null;
39    
40     /**
41     * Instance de la classe dossier_autorisation_type_detaille.
42     *
43     * @var null
44     */
45     var $inst_dossier_autorisation_type_detaille = null;
46    
47     /**
48     * Instance de la classe cerfa.
49     *
50     * @var null
51     */
52     var $inst_cerfa = null;
53    
54     /** @var boolean Les nouvelles actions sont activées sur cet objet */
55     var $activate_class_action;
56    
57     function dossier($id, &$db = null, $DEBUG = null) {
58     //On active les nouvelles actions
59     $this->activate_class_action = true;
60     $this->constructeur($id,$db,$DEBUG);
61     } // fin constructeur
62    
63     /*Mutateur pour ma variable dossier_instruction_type*/
64     public function getDossierInstructionType(){
65     return $this->dossier_instruction_type;
66     }
67     public function setDossierInstructionType($dossier_instruction_type){
68     $this->dossier_instruction_type = $dossier_instruction_type;
69     }
70    
71     /**
72     * Définition des actions disponibles sur la classe.
73     *
74     * @return void
75     */
76     function init_class_actions() {
77    
78     parent::init_class_actions();
79    
80     // ACTION - 003 - consulter
81     //
82     $this->class_actions[3]["condition"] = "is_user_from_allowed_collectivite";
83    
84     // ACTION - 004 - contrainte
85     //
86     $this->class_actions[4] = array(
87     "identifier" => "contrainte",
88     "view" => "view_contrainte",
89     "permission_suffix" => "contrainte_tab",
90     "condition" => array(
91     "is_user_from_allowed_collectivite",
92     ),
93     );
94    
95     // ACTION - 005 - view_document_numerise
96     // Interface spécifique du tableau des pièces
97     $this->class_actions[5] = array(
98     "identifier" => "view_document_numerise",
99     "view" => "view_document_numerise",
100     "permission_suffix" => "document_numerise",
101     "condition" => array(
102     "is_user_from_allowed_collectivite",
103     ),
104     );
105    
106     // ACTION - 006 - view_sitadel
107     //
108     $this->class_actions[6] = array(
109     "identifier" => "sitadel",
110     "view" => "view_sitadel",
111     "permission_suffix" => "export_sitadel",
112     );
113     }
114    
115     /**
116     * VIEW - view_sitadel.
117     *
118     * @return void
119     */
120     function view_sitadel() {
121    
122     $post = $this->f->get_submitted_post_value();
123     // 1ere étape : affichage du formulaire permettant le choix d'un interval de date
124     // ainsi que le numéro de d'ordre qui est le numéro de la version de
125     // l'export
126     if (empty($post)) {
127     // Initialisation des variables
128     $datedebut = "";
129     $datefin = "";
130     $numero = "";
131     // Récupération des paramètres
132     if ($this->f->get_submitted_get_value("datedebut") !== null AND $this->f->get_submitted_get_value("datedebut") != "") {
133     $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);
134     }
135     if ($this->f->get_submitted_get_value("datefin") !== null AND $this->f->get_submitted_get_value("datefin") != "") {
136     $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);
137     }
138     if ($this->f->get_submitted_get_value("numero") !== null AND $this->f->get_submitted_get_value("numero") != "") {
139     $numero = $this->f->get_submitted_get_value("numero");
140     }
141     // Affichage du formulaire
142     $this->affichageFormulaire($datedebut, $datefin, $numero);
143     }
144     else {
145     // Initialisation des variables pour les messages de fin de traitement
146     $correct=true;
147     // Initialisation de la chaîne contenant le message d'erreur
148     $erreur = "";
149    
150     // Initialisation des dates de début et de fin
151     $datedebut ='';
152     $datefin='';
153    
154     // Traitement des erreurs
155     if ($this->f->get_submitted_post_value("datedebut") == "") {
156     $correct=false;
157     } else {
158     $datedebut = substr($this->f->get_submitted_post_value("datedebut"),6,4).
159     "-".substr($this->f->get_submitted_post_value("datedebut"),3,2)."-".
160     substr($this->f->get_submitted_post_value("datedebut"),0,2);
161     }
162     if ($this->f->get_submitted_post_value("datefin") == "") {
163     $correct=false;
164     } else {
165     $datefin = substr($this->f->get_submitted_post_value("datefin"),6,4).
166     "-".substr($this->f->get_submitted_post_value("datefin"),3,2)."-".
167     substr($this->f->get_submitted_post_value("datefin"),0,2);
168     }
169     $numero = $this->f->get_submitted_post_value("numero");
170     // Composition du tableau de paramètres pour le bouton retour
171     $params = array(
172     "href" => "../scr/form.php?obj=sitadel&action=6&idx=0&datedebut=".$datedebut."&amp;datefin=".$datefin."&amp;numero=".$numero,
173     );
174     //
175     if ($correct === true){ // ***
176     // Affichage du bouton retour
177     $this->f->layout->display_form_retour($params);
178     // Requête permettant de lister tous les dossiers de l'export
179     $sql= "SELECT dossier.dossier,
180     dossier.om_collectivite as collectivite,
181     dossier.dossier_autorisation,
182     dossier_instruction_type.mouvement_sitadel,
183     dossier_instruction_type.code as dossier_instruction_type_code,
184     dossier.date_depot,
185     dossier.date_decision,
186     dossier.date_chantier,
187     dossier.date_achevement,
188     dossier.terrain_references_cadastrales as dossier_terrain_references_cadastrales,
189     dossier.terrain_adresse_voie_numero as dossier_terrain_adresse_voie_numero,
190     dossier.terrain_adresse_voie as dossier_terrain_adresse_voie,
191     dossier.terrain_adresse_lieu_dit as dossier_terrain_adresse_lieu_dit,
192     dossier.terrain_adresse_localite as dossier_terrain_adresse_localite,
193     dossier.terrain_adresse_code_postal as dossier_terrain_adresse_code_postal,
194     dossier.terrain_adresse_bp as dossier_terrain_adresse_bp,
195     dossier.terrain_adresse_cedex as dossier_terrain_adresse_cedex,
196     dossier_autorisation_type.code,
197     dossier.date_limite,
198     dossier.date_limite_incompletude,
199     dossier.date_notification_delai,
200     dossier.terrain_superficie as dossier_terrain_superficie,
201    
202     arrondissement.code_impots as code_impots,
203    
204     autorite_competente.autorite_competente_sitadel,
205     pp.type_demandeur,
206     pp.qualite,
207     civilite_pp.libelle as civilite_pp,
208     pp.particulier_nom as pp_particulier_nom,
209     pp.particulier_prenom as pp_particulier_prenom,
210     pp.personne_morale_denomination as pp_personne_morale_denomination,
211     pp.personne_morale_raison_sociale as pp_personne_morale_raison_sociale,
212     pp.personne_morale_siret as pp_personne_morale_siret,
213     pp.personne_morale_categorie_juridique as pp_personne_morale_categorie_juridique,
214     civilite_pm.libelle as civilite_pm_libelle,
215     pp.personne_morale_nom as pp_personne_morale_nom,
216     pp.personne_morale_prenom as pp_personne_morale_prenom,
217    
218     pp.numero as pp_numero,
219     pp.voie as pp_voie,
220     pp.complement as pp_complement,
221     pp.lieu_dit as pp_lieu_dit,
222     pp.localite as pp_localite,
223     pp.code_postal as pp_code_postal,
224     pp.bp as pp_bp,
225     pp.cedex as pp_cedex,
226     pp.pays as pp_pays,
227     pp.division_territoriale as pp_division_territoriale,
228    
229     pp.telephone_fixe as pp_telephone_fixe,
230     pp.courriel as pp_courriel,
231    
232     donnees_techniques.co_archi_recours,
233     donnees_techniques.am_terr_surf,
234     donnees_techniques.am_lotiss,
235     donnees_techniques.terr_juri_zac,
236     donnees_techniques.terr_juri_afu,
237     donnees_techniques.co_projet_desc,
238     donnees_techniques.am_projet_desc,
239     donnees_techniques.dm_projet_desc,
240     donnees_techniques.co_cstr_nouv,
241     donnees_techniques.co_cstr_exist,
242     donnees_techniques.co_modif_aspect,
243     donnees_techniques.co_modif_struct,
244     donnees_techniques.co_cloture,
245     donnees_techniques.co_trx_exten,
246     donnees_techniques.co_trx_surelev,
247     donnees_techniques.co_trx_nivsup,
248     donnees_techniques.co_trx_amgt,
249     donnees_techniques.co_anx_pisc,
250     donnees_techniques.co_anx_gara,
251     donnees_techniques.co_anx_veran,
252     donnees_techniques.co_anx_abri,
253     donnees_techniques.co_anx_autr,
254     donnees_techniques.co_bat_niv_nb,
255 softime 4636
256     -- Tableau des destinations
257 mbroquet 3730 donnees_techniques.su_avt_shon1,
258     donnees_techniques.su_avt_shon2,
259     donnees_techniques.su_avt_shon3,
260     donnees_techniques.su_avt_shon4,
261     donnees_techniques.su_avt_shon5,
262     donnees_techniques.su_avt_shon6,
263     donnees_techniques.su_avt_shon7,
264     donnees_techniques.su_avt_shon8,
265     donnees_techniques.su_avt_shon9,
266     donnees_techniques.su_demo_shon1,
267     donnees_techniques.su_demo_shon2,
268     donnees_techniques.su_demo_shon3,
269     donnees_techniques.su_demo_shon4,
270     donnees_techniques.su_demo_shon5,
271     donnees_techniques.su_demo_shon6,
272     donnees_techniques.su_demo_shon7,
273     donnees_techniques.su_demo_shon8,
274     donnees_techniques.su_demo_shon9,
275     donnees_techniques.su_chge_shon1,
276     donnees_techniques.su_chge_shon2,
277     donnees_techniques.su_chge_shon3,
278     donnees_techniques.su_chge_shon4,
279     donnees_techniques.su_chge_shon5,
280     donnees_techniques.su_chge_shon6,
281     donnees_techniques.su_chge_shon7,
282     donnees_techniques.su_chge_shon8,
283     donnees_techniques.su_chge_shon9,
284 softime 4636 donnees_techniques.su_sup_shon1,
285     donnees_techniques.su_sup_shon2,
286     donnees_techniques.su_sup_shon3,
287     donnees_techniques.su_sup_shon4,
288     donnees_techniques.su_sup_shon5,
289     donnees_techniques.su_sup_shon6,
290     donnees_techniques.su_sup_shon7,
291     donnees_techniques.su_sup_shon8,
292     donnees_techniques.su_sup_shon9,
293 mbroquet 3730 donnees_techniques.su_cstr_shon1,
294     donnees_techniques.su_cstr_shon2,
295     donnees_techniques.su_cstr_shon3,
296     donnees_techniques.su_cstr_shon4,
297     donnees_techniques.su_cstr_shon5,
298     donnees_techniques.su_cstr_shon6,
299     donnees_techniques.su_cstr_shon7,
300     donnees_techniques.su_cstr_shon8,
301     donnees_techniques.su_cstr_shon9,
302     donnees_techniques.su_tot_shon1,
303     donnees_techniques.su_tot_shon2,
304     donnees_techniques.su_tot_shon3,
305     donnees_techniques.su_tot_shon4,
306     donnees_techniques.su_tot_shon5,
307     donnees_techniques.su_tot_shon6,
308     donnees_techniques.su_tot_shon7,
309     donnees_techniques.su_tot_shon8,
310     donnees_techniques.su_tot_shon9,
311 softime 4636 -- XXX valeurs obsolètes mais utilisées dans les conditions
312     -- pour afficher les messages d'incohérence
313     donnees_techniques.su_trsf_shon1,
314     donnees_techniques.su_trsf_shon2,
315     donnees_techniques.su_trsf_shon3,
316     donnees_techniques.su_trsf_shon4,
317     donnees_techniques.su_trsf_shon5,
318     donnees_techniques.su_trsf_shon6,
319     donnees_techniques.su_trsf_shon7,
320     donnees_techniques.su_trsf_shon8,
321     donnees_techniques.su_trsf_shon9,
322    
323     -- Tableau des sous-destinations
324     donnees_techniques.su2_avt_shon1,
325     donnees_techniques.su2_avt_shon2,
326     donnees_techniques.su2_avt_shon3,
327     donnees_techniques.su2_avt_shon4,
328     donnees_techniques.su2_avt_shon5,
329     donnees_techniques.su2_avt_shon6,
330     donnees_techniques.su2_avt_shon7,
331     donnees_techniques.su2_avt_shon8,
332     donnees_techniques.su2_avt_shon9,
333     donnees_techniques.su2_avt_shon10,
334     donnees_techniques.su2_avt_shon11,
335     donnees_techniques.su2_avt_shon12,
336     donnees_techniques.su2_avt_shon13,
337     donnees_techniques.su2_avt_shon14,
338     donnees_techniques.su2_avt_shon15,
339     donnees_techniques.su2_avt_shon16,
340     donnees_techniques.su2_avt_shon17,
341     donnees_techniques.su2_avt_shon18,
342     donnees_techniques.su2_avt_shon19,
343     donnees_techniques.su2_avt_shon20,
344     donnees_techniques.su2_demo_shon1,
345     donnees_techniques.su2_demo_shon2,
346     donnees_techniques.su2_demo_shon3,
347     donnees_techniques.su2_demo_shon4,
348     donnees_techniques.su2_demo_shon5,
349     donnees_techniques.su2_demo_shon6,
350     donnees_techniques.su2_demo_shon7,
351     donnees_techniques.su2_demo_shon8,
352     donnees_techniques.su2_demo_shon9,
353     donnees_techniques.su2_demo_shon10,
354     donnees_techniques.su2_demo_shon11,
355     donnees_techniques.su2_demo_shon12,
356     donnees_techniques.su2_demo_shon13,
357     donnees_techniques.su2_demo_shon14,
358     donnees_techniques.su2_demo_shon15,
359     donnees_techniques.su2_demo_shon16,
360     donnees_techniques.su2_demo_shon17,
361     donnees_techniques.su2_demo_shon18,
362     donnees_techniques.su2_demo_shon19,
363     donnees_techniques.su2_demo_shon20,
364     donnees_techniques.su2_chge_shon1,
365     donnees_techniques.su2_chge_shon2,
366     donnees_techniques.su2_chge_shon3,
367     donnees_techniques.su2_chge_shon4,
368     donnees_techniques.su2_chge_shon5,
369     donnees_techniques.su2_chge_shon6,
370     donnees_techniques.su2_chge_shon7,
371     donnees_techniques.su2_chge_shon8,
372     donnees_techniques.su2_chge_shon9,
373     donnees_techniques.su2_chge_shon10,
374     donnees_techniques.su2_chge_shon11,
375     donnees_techniques.su2_chge_shon12,
376     donnees_techniques.su2_chge_shon13,
377     donnees_techniques.su2_chge_shon14,
378     donnees_techniques.su2_chge_shon15,
379     donnees_techniques.su2_chge_shon16,
380     donnees_techniques.su2_chge_shon17,
381     donnees_techniques.su2_chge_shon18,
382     donnees_techniques.su2_chge_shon19,
383     donnees_techniques.su2_chge_shon20,
384     donnees_techniques.su2_sup_shon1,
385     donnees_techniques.su2_sup_shon2,
386     donnees_techniques.su2_sup_shon3,
387     donnees_techniques.su2_sup_shon4,
388     donnees_techniques.su2_sup_shon5,
389     donnees_techniques.su2_sup_shon6,
390     donnees_techniques.su2_sup_shon7,
391     donnees_techniques.su2_sup_shon8,
392     donnees_techniques.su2_sup_shon9,
393     donnees_techniques.su2_sup_shon10,
394     donnees_techniques.su2_sup_shon11,
395     donnees_techniques.su2_sup_shon12,
396     donnees_techniques.su2_sup_shon13,
397     donnees_techniques.su2_sup_shon14,
398     donnees_techniques.su2_sup_shon15,
399     donnees_techniques.su2_sup_shon16,
400     donnees_techniques.su2_sup_shon17,
401     donnees_techniques.su2_sup_shon18,
402     donnees_techniques.su2_sup_shon19,
403     donnees_techniques.su2_sup_shon20,
404     donnees_techniques.su2_cstr_shon1,
405     donnees_techniques.su2_cstr_shon2,
406     donnees_techniques.su2_cstr_shon3,
407     donnees_techniques.su2_cstr_shon4,
408     donnees_techniques.su2_cstr_shon5,
409     donnees_techniques.su2_cstr_shon6,
410     donnees_techniques.su2_cstr_shon7,
411     donnees_techniques.su2_cstr_shon8,
412     donnees_techniques.su2_cstr_shon9,
413     donnees_techniques.su2_cstr_shon10,
414     donnees_techniques.su2_cstr_shon11,
415     donnees_techniques.su2_cstr_shon12,
416     donnees_techniques.su2_cstr_shon13,
417     donnees_techniques.su2_cstr_shon14,
418     donnees_techniques.su2_cstr_shon15,
419     donnees_techniques.su2_cstr_shon16,
420     donnees_techniques.su2_cstr_shon17,
421     donnees_techniques.su2_cstr_shon18,
422     donnees_techniques.su2_cstr_shon19,
423     donnees_techniques.su2_cstr_shon20,
424     donnees_techniques.su2_tot_shon1,
425     donnees_techniques.su2_tot_shon2,
426     donnees_techniques.su2_tot_shon3,
427     donnees_techniques.su2_tot_shon4,
428     donnees_techniques.su2_tot_shon5,
429     donnees_techniques.su2_tot_shon6,
430     donnees_techniques.su2_tot_shon7,
431     donnees_techniques.su2_tot_shon8,
432     donnees_techniques.su2_tot_shon9,
433     donnees_techniques.su2_tot_shon10,
434     donnees_techniques.su2_tot_shon11,
435     donnees_techniques.su2_tot_shon12,
436     donnees_techniques.su2_tot_shon13,
437     donnees_techniques.su2_tot_shon14,
438     donnees_techniques.su2_tot_shon15,
439     donnees_techniques.su2_tot_shon16,
440     donnees_techniques.su2_tot_shon17,
441     donnees_techniques.su2_tot_shon18,
442     donnees_techniques.su2_tot_shon19,
443     donnees_techniques.su2_tot_shon20,
444    
445 mbroquet 3730 donnees_techniques.co_sp_transport,
446     donnees_techniques.co_sp_enseign,
447     donnees_techniques.co_sp_sante,
448     donnees_techniques.co_sp_act_soc,
449     donnees_techniques.co_sp_ouvr_spe,
450     donnees_techniques.co_sp_culture,
451     donnees_techniques.dm_tot_log_nb,
452     donnees_techniques.co_tot_ind_nb,
453     donnees_techniques.co_tot_coll_nb,
454     donnees_techniques.co_tot_log_nb,
455     donnees_techniques.co_resid_agees,
456     donnees_techniques.co_resid_etud,
457     donnees_techniques.co_resid_tourism,
458     donnees_techniques.co_resid_hot_soc,
459     donnees_techniques.co_resid_hand,
460     donnees_techniques.co_resid_autr,
461     donnees_techniques.co_resid_autr_desc,
462     donnees_techniques.co_uti_pers,
463     donnees_techniques.co_uti_princ,
464     donnees_techniques.co_uti_secon,
465     donnees_techniques.co_uti_vente,
466     donnees_techniques.co_uti_loc,
467     donnees_techniques.co_foyer_chamb_nb,
468     donnees_techniques.co_fin_lls_nb,
469     donnees_techniques.co_fin_aa_nb,
470     donnees_techniques.co_fin_ptz_nb,
471     donnees_techniques.co_fin_autr_nb,
472     donnees_techniques.co_mais_piece_nb,
473     donnees_techniques.co_log_1p_nb,
474     donnees_techniques.co_log_2p_nb,
475     donnees_techniques.co_log_3p_nb,
476     donnees_techniques.co_log_4p_nb,
477     donnees_techniques.co_log_5p_nb,
478     donnees_techniques.co_log_6p_nb,
479     donnees_techniques.mod_desc,
480    
481     donnees_techniques.doc_date,
482     donnees_techniques.terr_div_surf_av_div,
483     donnees_techniques.doc_tot_trav,
484     donnees_techniques.doc_tranche_trav,
485     donnees_techniques.doc_tranche_trav_desc,
486     donnees_techniques.doc_surf,
487     donnees_techniques.doc_nb_log,
488     donnees_techniques.doc_nb_log_indiv,
489     donnees_techniques.doc_nb_log_coll,
490     donnees_techniques.doc_nb_log_lls,
491     donnees_techniques.doc_nb_log_aa,
492     donnees_techniques.doc_nb_log_ptz,
493     donnees_techniques.doc_nb_log_autre,
494     donnees_techniques.daact_date,
495     donnees_techniques.daact_date_chgmt_dest,
496     donnees_techniques.daact_tot_trav,
497     donnees_techniques.daact_tranche_trav,
498     donnees_techniques.daact_tranche_trav_desc,
499     donnees_techniques.daact_surf,
500     donnees_techniques.daact_nb_log,
501     donnees_techniques.daact_nb_log_indiv,
502     donnees_techniques.daact_nb_log_coll,
503     donnees_techniques.daact_nb_log_lls,
504     donnees_techniques.daact_nb_log_aa,
505     donnees_techniques.daact_nb_log_ptz,
506     donnees_techniques.daact_nb_log_autre,
507    
508     dossier_autorisation.date_depot as date_depot_da,
509     dossier_autorisation.date_decision as date_decision_da,
510     dossier_autorisation.date_validite as date_validite_da,
511     dossier_autorisation.date_chantier as date_chantier_da,
512     dossier_autorisation.date_achevement as date_achevement_da,
513     avis_decision.typeavis as typeavis_da,
514     avis_decision.sitadel,
515     avis_decision.sitadel_motif,
516     avis_decision.typeavis,
517     etat.statut as statut_di
518    
519     FROM ".DB_PREFIXE."dossier
520    
521     INNER JOIN ".DB_PREFIXE."dossier_instruction_type
522     ON dossier.dossier_instruction_type =
523     dossier_instruction_type.dossier_instruction_type
524     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
525     ON dossier_instruction_type.dossier_autorisation_type_detaille
526     =dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
527     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
528     ON dossier_autorisation_type.dossier_autorisation_type
529     =dossier_autorisation_type_detaille.dossier_autorisation_type
530     INNER JOIN ".DB_PREFIXE."dossier_autorisation
531     ON dossier_autorisation.dossier_autorisation
532     =dossier.dossier_autorisation
533     INNER JOIN ".DB_PREFIXE."autorite_competente
534     ON autorite_competente.autorite_competente
535     =dossier.autorite_competente
536    
537     LEFT JOIN ".DB_PREFIXE."donnees_techniques
538     ON donnees_techniques.dossier_instruction = dossier.dossier
539     LEFT JOIN ".DB_PREFIXE."avis_decision
540     ON avis_decision.avis_decision = dossier.avis_decision
541     LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur as ldd_pp
542     ON ldd_pp.dossier = dossier.dossier
543     LEFT JOIN ".DB_PREFIXE."demandeur as pp
544     ON ldd_pp.demandeur = pp.demandeur
545     LEFT JOIN ".DB_PREFIXE."civilite as civilite_pp
546     ON civilite_pp.civilite = pp.particulier_civilite
547     LEFT JOIN ".DB_PREFIXE."civilite as civilite_pm
548     ON civilite_pm.civilite = pp.personne_morale_civilite
549     LEFT JOIN ".DB_PREFIXE."etat
550     ON etat.etat = dossier.etat
551     LEFT JOIN ".DB_PREFIXE."arrondissement
552     ON dossier_autorisation.arrondissement=arrondissement.arrondissement
553    
554     WHERE dossier_instruction_type.mouvement_sitadel IS NOT NULL
555     AND ldd_pp.petitionnaire_principal is TRUE
556     AND ((dossier.date_depot >='".$datedebut."' AND dossier.date_depot<='".$datefin."')
557     OR (dossier.date_decision>='".$datedebut."' AND dossier.date_decision<='".$datefin."')
558     OR (dossier.date_chantier>='".$datedebut."' AND dossier.date_chantier<='".$datefin."')
559     OR (dossier.date_achevement>='".$datedebut."' AND dossier.date_achevement<='".$datefin."'))
560     ORDER by dossier_instruction_type.mouvement_sitadel, dossier.dossier";
561     //Exécution de la requête
562     $res = $this->f->db -> query ($sql);
563     $this->f->addToLog("dossier.class.php : db->query(\"".$sql."\")", VERBOSE_MODE);
564     $this->f->isDatabaseError($res);
565     $export="";
566     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
567     // initialisation de la classe permettant la mise en forme de chaque ligne de l'export
568     require_once "../obj/export_sitadel.class.php";
569     $export_sitadel = new export_sitadel($row['dossier'], $this->f);
570     $export_sitadel->setRow($row);
571     //Ajout du fichier de variable
572     if(file_exists ("../sql/".OM_DB_PHPTYPE."/export_sitadel.inc.php")) {
573     include ("../sql/".OM_DB_PHPTYPE."/export_sitadel.inc.php");
574     }
575     //
576     $export_sitadel->setVal($val);
577     $departement = $export_sitadel->getDepartement($row["collectivite"]);
578     $commune = $export_sitadel->getCommune($row["collectivite"]);
579     $region = $this->f->getParameter("region");
580 softime 4636
581     // Initialisation des variables pour le tableau des
582     // surfaces en version 1
583     $prefix_su = 'su';
584     $count_su = 9;
585     // S'il faut utiliser le tableau des surfaces en
586     // version 2
587     if ($export_sitadel->get_tab_su_version() === 2) {
588     //
589     $prefix_su = 'su2';
590     $count_su = 20;
591     }
592    
593 mbroquet 3730 // Mouvement de dépôt
594     $depot="";
595    
596     // Tous les mouvements autres que transfert ont comme mouvement le code DEPOT
597     // les décisions devant êtres précédées par le dépôt correspondant,
598     // les dossiers avec date de décision comprise dans l'interval fourni sont
599     // réaffichés en tant que dépôts (mouvement DEPOT)
600     if (($row['mouvement_sitadel'] == 'DEPOT'||($row['mouvement_sitadel'] == 'MODIFICATIF'
601     AND $row['statut_di']=='cloture' AND $row['typeavis']=='F'))
602     and (($row['date_depot'] >= $datedebut
603     and $row['date_depot'] <= $datefin)
604     or ($row['date_decision'] >= $datedebut
605     and $row['date_decision'] <= $datefin))) {
606     $depot.=$export_sitadel->entete("DEPOT",$departement,$commune);
607     $depot.=$export_sitadel->etatcivil();
608     $depot.=$export_sitadel->adresse();
609     $depot.=$export_sitadel->delegataire();
610     $depot.=$export_sitadel->meltel($row['mouvement_sitadel']);
611     $depot.=$export_sitadel->adresse_terrain();
612     $depot.=$export_sitadel->parcelle();
613     // ===========================
614     // contrat maison individuelle
615     // ===========================
616     // sitadel : contrat|
617     // openads : non renseigne
618     $depot.= $export_sitadel->defaultValue('contrat')."|";
619     // ==========
620     // architecte
621     // ==========
622     // sitadel : architecte|
623     // openads : données techniques.co_archi_recours
624     $depot.= ($row['co_archi_recours'] == "t")?"1|":"0|";
625     // =====================
626     // utilisation data cnil
627     // ======================
628     // sitadel : cnil
629     // openads : non renseigne
630     $depot.= $export_sitadel->defaultValue('cnil');
631     // fin d enregistrement depot
632     $depot.="\n";
633     }
634    
635     // Seuls les dossier de type transfert ont comme mouvement le code TRANSFERT
636     $transfert ="";
637     if($row['mouvement_sitadel']=='TRANSFERT'
638     and $row['date_depot'] >= $datedebut
639     and $row['date_depot']<=$datefin){
640     $transfert.=$export_sitadel->entete("TRANSFERT",$departement,$commune);
641     $transfert.=$export_sitadel->etatcivil();
642     $transfert.=$export_sitadel->adresse();
643     $transfert.=$export_sitadel->meltel($row['mouvement_sitadel']);
644     $transfert.="\n";
645     }
646    
647    
648     // Une ligne de mouvement DECISION est insérée après chaque ligne
649     // de mouvement DEPOT
650     $decision="";
651     if ($row['mouvement_sitadel'] != 'TRANSFERT'
652     and $row['mouvement_sitadel'] != 'SUPPRESSION'
653     and $row['mouvement_sitadel'] == 'DEPOT'
654     and (($row['date_depot'] >= $datedebut and $row['date_depot']<=$datefin)
655     or ($row['date_decision'] >= $datedebut and $row['date_decision']<=$datefin))) {
656    
657     //Ajout de l'entête
658     $decision.=$export_sitadel->entete("DECISION",$departement,$commune);
659    
660     //Ajout du groupe 1
661     $decision.= $export_sitadel->decision_groupe1();
662     // Si la décision est favorable, on remplit le groupe 2
663     if ( $row['sitadel'] == 2 || $row['sitadel'] == 4 || $row['sitadel'] == 5
664     || $row['sitadel'] == 0 ){
665     //
666     $decision.= $export_sitadel->amenagement_terrain();
667     //Nature du projet
668     $natproj = 2;
669     $natprojlib= array(
670     1=>_("Nouvelle construction"),
671     2=>_("Travaux sur construction existante"),
672     3=>_("Nouvelle construction et travaux sur construction"),
673     );
674     if ( isset($row['co_cstr_nouv']) && isset($row['co_cstr_exist']) &&
675     $row['co_cstr_nouv'] == 't' &&
676     $row['co_cstr_exist'] == 't' ){
677     $natproj = 3;
678     }
679     //Nouvelle construction
680     elseif ( isset($row['co_cstr_nouv']) && $row['co_cstr_nouv'] == 't' ) {
681     $natproj = 1;
682     }
683     //
684 softime 4636 $su_avt_shon = $export_sitadel->shon("avt");
685 mbroquet 3730 //Si la SHON existante avant travaux est supérieur à la SHON
686     //démolie alors la variable natproj est égale à 2
687     $shonExistante = 0;
688     $shonDemolie = 0;
689 softime 4636 // Pour chaque ligne du tableau
690     for ($i = 1; $i <= $count_su; $i++) {
691     //
692     $shonExistante += floor($row[$prefix_su.'_avt_shon'.$i]);
693     $shonDemolie += floor($row[$prefix_su.'_demo_shon'.$i]);
694 mbroquet 3730 }
695     //Si la SHON existante avant travaux et la SHON démolie sont
696     //égales alors la variable natproj est égale à 1
697     if ( $shonExistante == 0 && $shonDemolie == 0 && $natproj != 1 &&
698     $row['code'] != 'DP' && $row['code'] != 'PA') {
699     $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";
700     } elseif ( $shonExistante > $shonDemolie && $natproj != 2 ){
701 softime 4640 $erreur .= _("Dossier ").$row['dossier']." \"".$natprojlib[$natproj]."\" "._("La SHON existante avant travaux ne doit pas être supérieure à la SHON démolie.")."\n";
702 mbroquet 3730 }
703     $decision .= $su_avt_shon;
704    
705 softime 4636 $su_demo_shon = $export_sitadel->shon("demo");
706 mbroquet 3730 //La SHON démolie s'accompagne obligatoirement de la shon
707     //existante avant travaux
708     if ( $shonDemolie != 0 && $shonExistante == 0 ){
709     $erreur .= _("Dossier ").$row['dossier']." "._("La SHON demolie s'accompagne obligatoirement de la SHON existante avant travaux.")."\n";
710     }
711     $decision .= $su_demo_shon;
712     //
713 softime 4636 $su_sup_shon = $export_sitadel->shon("sup");
714     $su_chge_shon = $export_sitadel->shon("chge");
715 mbroquet 3730 if ( strcasecmp($su_sup_shon, $su_chge_shon) != 0){
716     //
717 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";
718 mbroquet 3730 }
719     $decision .= $su_sup_shon;
720     $decision .= $su_chge_shon;
721 softime 4636 $decision .= $export_sitadel->shon("cstr");
722 mbroquet 3730 $decision .= "0|0|0|0|0|0|0|0|0|";
723 softime 4640 // Les SHON créées par changement de destination ou
724     // de sous-destination s'accompagnent obligatoirement
725     // de SHON existante avant travaux non nulle
726 mbroquet 3730 if (preg_match("/[0|]{7}/", $su_chge_shon) &&
727     preg_match("/[0|]{7}/", $su_avt_shon)){
728    
729 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";
730 mbroquet 3730 }
731     // Un nombre de logements démolis strictement positif doit
732     // s'accompagner obligatoirement de SHON démolie.
733     if($row['dm_tot_log_nb'] > 0) {
734 softime 4636 if($export_sitadel->get_shon_val('demo', 1) <= 0) {
735 mbroquet 3730 //
736     $erreur .= _("Dossier ").$row['dossier']." "._("Un nombre de logements demolis strictement positif doit s'accompagner obligatoirement de SHON demolie.")."\n";
737     }
738     }
739     // Un nombre de logements créés strictement positif doit
740     // s'accompagner obligatoirement de SHON créée ou de SHON
741 softime 4640 // créée par changement de destination ou de sous-destination
742     // ayant pour destination l'habitation.
743     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)) {
744 mbroquet 3730 //
745 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";
746 mbroquet 3730 }
747    
748     // La SHON créée ou issue de la transformation
749     // suffixée par 9 (intérêt collectif ou service public) doit
750     // obligatoirement s'accompagner de la décomposition
751     // en sous modalité renseignée par la variable cpublic et réciproquement.
752    
753     // Test si une valeur est true
754     $cpublic = FALSE;
755     if (isset($row['co_sp_transport']) && $row['co_sp_transport'] == 't') {
756     $cpublic = TRUE;
757     }
758     if (isset($row['co_sp_enseign']) && $row['co_sp_enseign'] == 't') {
759     $cpublic = TRUE;
760     }
761     if (isset($row['co_sp_sante']) && $row['co_sp_sante'] == 't') {
762     $cpublic = TRUE;
763     }
764     if (isset($row['co_sp_act_soc']) && $row['co_sp_act_soc'] == 't') {
765     $cpublic = TRUE;
766     }
767     if (isset($row['co_sp_ouvr_spe']) && $row['co_sp_ouvr_spe'] == 't') {
768     $cpublic = TRUE;
769     }
770     if (isset($row['co_sp_culture']) && $row['co_sp_culture'] == 't') {
771     $cpublic = TRUE;
772     }
773     //
774 softime 4640 if($cpublic !== TRUE AND ($export_sitadel->get_shon_val('cstr', 9) > 0 OR $export_sitadel->get_shon_val('chge', 9) > 0)) {
775     $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";
776 mbroquet 3730 }
777    
778     // La destination principale du logement mise à résidence
779     // principale ou résidence secondaire doit obligatoirement
780     // s'accompagner d'un mode d'utilisation à occupation personnelle
781     if($row['co_uti_princ'] == 't' OR $row['co_uti_secon'] == 't') {
782     if($row['co_uti_pers'] != 't') {
783    
784     $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";
785     }
786     }
787    
788     $decision.= $export_sitadel->destination($row['mouvement_sitadel']);
789    
790     // Le nombre total de logements créés (variable nbtotlog)
791     // doit être égal à la somme des nombres de logements créés
792     // ventilés par type de financement
793     if($row['co_tot_log_nb'] != ($row['co_fin_lls_nb'] + $row['co_fin_aa_nb'] +
794     $row['co_fin_ptz_nb'] + $row['co_fin_autr_nb'])) {
795    
796     $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";
797     }
798    
799     $decision.= $export_sitadel->repartitionFinan();
800    
801     // Le nombre total de logements créés (variable nbtotlog)
802     // doit être égal à la totalisation de la répartition des
803     // logements par nombre de pièces
804     if($row['co_tot_log_nb'] != ($row['co_log_1p_nb'] + $row['co_log_2p_nb'] +
805     $row['co_log_3p_nb'] + $row['co_log_4p_nb'] + $row['co_log_5p_nb'] +
806     $row['co_log_6p_nb'])) {
807    
808     $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";
809     }
810    
811     $decision.= $export_sitadel->repartitionNbPiece($row['mouvement_sitadel']);
812     }
813     else {
814     //
815     $decision.= str_repeat("|", 6);
816     if($row['code']=='DP'){
817     $decision .= "00000|";
818     }else{
819     $decision .= "|";
820     }
821     $decision .= "0000|00000|";
822     $decision.= str_repeat("|", 74);
823     }
824     $decision.="\n";
825     }
826    
827     // modificatif
828     $modificatif='';
829     if($row['mouvement_sitadel'] == 'MODIFICATIF' AND $row['statut_di']=='cloture' AND
830     $row['typeavis']=='F'
831     and (($row['date_depot'] >= $datedebut
832     and $row['date_depot'] <= $datefin) or
833     ($row['date_decision'] >= $datedebut
834     and $row['date_decision'] <= $datefin))) {
835     $modificatif.=$export_sitadel->entete("MODIFICATIF",$departement,$commune);
836    
837     $modificatif.= $export_sitadel->decision_groupe1();
838    
839     if(isset($row['date_decision']) or $row['date_decision']==""){
840     // avis_sitadel et avis_sitadel_motif
841     // si la decision est favorable, envoi des informations statistiques
842     if($row["sitadel"] == 2 or $row["sitadel"] == 4
843     or $row["sitadel"] == 5){
844     // si accordé : ajout du 2nd groupe d'informations
845     $modificatif .= $export_sitadel->adresse_terrain(); // adresse du terrain
846     $modificatif .= $export_sitadel->parcelle(); // 3 premières parcelles
847     $modificatif .= $export_sitadel->modificatif_terrain(); // Informations complémentaires
848    
849 softime 4636 $modificatif.= $export_sitadel->shon("avt");
850     $modificatif.= $export_sitadel->shon("demo");
851     $modificatif.= $export_sitadel->shon("chge");
852     $modificatif.= $export_sitadel->shon("trsf");
853     $modificatif.= $export_sitadel->shon("cstr");
854 mbroquet 3730
855     $modificatif.= "|||||||||";
856     $modificatif.= $export_sitadel->destination($row['mouvement_sitadel']);
857     $modificatif.= $export_sitadel->repartitionFinan();
858     $modificatif.= $export_sitadel->repartitionNbPiece($row['mouvement_sitadel']);
859     }
860     else {
861     $modificatif .= str_repeat("|", 90);
862     }
863     }
864     else {
865     $modificatif .= str_repeat("|", 90);
866     }
867    
868     $modificatif.="\n";
869     }
870    
871     // Mouvement suppression
872     $suppression = '';
873     if($row['mouvement_sitadel'] == 'SUPPRESSION') {
874     $suppression .= $export_sitadel->entete("SUPPRESSION",$departement,$commune);
875     $suppression .= "\n";
876     }
877    
878     // Règles sur le mouvement suivi
879     $suivi="";
880     if($row['mouvement_sitadel'] == 'SUIVI' and
881     ($row['date_chantier'] >= $datedebut and $row['date_chantier']<=$datefin) ||
882     ($row['date_achevement'] >= $datedebut and $row['date_achevement']<=$datefin)){
883     // Si le dossier est une DOC
884     if($row['dossier_instruction_type_code']=='DOC'){
885     // Une ouverture de chantier ne peut concerner qu'un permis autorisé
886     if($row['typeavis_da'] != 'F'&&$row['typeavis_da'] != '') {
887     $erreur .= _("Dossier ").$row['dossier']." "._("Une ouverture de chantier ne peut concerner qu'un permis autorise.")."\n";
888     }
889     // La date d'ouverture de chantier doit être supérieur à la date d'autorisation
890     if($row['doc_date'] > $row['date_decision_da']) {
891     $erreur .= _("Dossier ").$row['dossier']." "._("La date d'ouverture de chantier doit être superieur a la date d'autorisation.")."\n";
892     }
893     // Un achèvement de chantier ne peut concerner qu'un permis autorisé
894     if($row['typeavis_da'] != 'F'&&$row['typeavis_da'] != '') {
895     $erreur .= _("Dossier ").$row['dossier']." "._("Un achevement de chantier ne peut concerner qu'un permis autorise.")."\n";
896     }
897     if( $row['date_chantier_da'] == "" && $row['date_achevement']!="") {
898     $erreur .= _("Dossier ").$row['dossier']." "._("Un achevement de chantier ne peut concerner qu'un permis sur lequel un chantier a ete ouvert.")."\n";
899     }
900     // La date d'achevement de travaux doit être supérieur à la date d'ouverture des travaux
901     if($row['daact_date'] > $row['date_chantier_da']) {
902     $erreur .= _("Dossier ").$row['dossier']." "._("La date d'achevement de travaux doit etre superieur a la date d'ouverture des travaux.")."\n";
903     }
904     $suivi.=$export_sitadel->entete("SUIVI",$departement,$commune);//8|
905     $suivi.=$export_sitadel->chantier($row);
906     //On récupère la DAACT si elle existe
907     $sqlDAACT = "SELECT
908     donnees_techniques.daact_date,
909     donnees_techniques.daact_date_chgmt_dest,
910     donnees_techniques.daact_tot_trav,
911     donnees_techniques.daact_tranche_trav,
912     donnees_techniques.daact_tranche_trav_desc,
913     donnees_techniques.daact_surf,
914     donnees_techniques.daact_nb_log,
915     donnees_techniques.daact_nb_log_indiv,
916     donnees_techniques.daact_nb_log_coll,
917     donnees_techniques.daact_nb_log_lls,
918     donnees_techniques.daact_nb_log_aa,
919     donnees_techniques.daact_nb_log_ptz,
920     donnees_techniques.daact_nb_log_autre,
921     etat.statut as statut_di
922    
923     FROM ".DB_PREFIXE."dossier
924     LEFT JOIN ".DB_PREFIXE."donnees_techniques
925     ON dossier.dossier=donnees_techniques.dossier_instruction
926     LEFT JOIN ".DB_PREFIXE."etat
927     ON dossier.etat = etat.etat
928     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
929     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
930     WHERE dossier.dossier_autorisation ='".$row['dossier_autorisation']."' AND
931     dossier_instruction_type.code = 'DAACT' and mouvement_sitadel='SUIVI'";
932     $resDAACT = $this->f->db -> query ($sqlDAACT);
933     $this->f->addToLog("dossier.class.php : db->query(\"".$sqlDAACT."\")", VERBOSE_MODE);
934     $this->f->isDatabaseError($resDAACT);
935     $rowDAACT=& $resDAACT->fetchRow(DB_FETCHMODE_ASSOC);
936     $suivi.=$export_sitadel->achevement($rowDAACT);
937     $suivi.="\n";
938     }
939     elseif($row['dossier_instruction_type_code']=='DAACT'){
940    
941     //On vérifie qu'une DOC existe
942     $sqlDOC = "SELECT dossier.dossier,
943     dossier.date_chantier,
944     donnees_techniques.doc_date,
945     donnees_techniques.terr_div_surf_av_div,
946     donnees_techniques.doc_tot_trav,
947     donnees_techniques.doc_tranche_trav,
948     donnees_techniques.doc_tranche_trav_desc,
949     donnees_techniques.doc_surf,
950     donnees_techniques.doc_nb_log,
951     donnees_techniques.doc_nb_log_indiv,
952     donnees_techniques.doc_nb_log_coll,
953     donnees_techniques.doc_nb_log_lls,
954     donnees_techniques.doc_nb_log_aa,
955     donnees_techniques.doc_nb_log_ptz,
956     donnees_techniques.doc_nb_log_autre
957     FROM ".DB_PREFIXE."dossier
958     LEFT JOIN ".DB_PREFIXE."donnees_techniques
959     ON dossier.dossier=donnees_techniques.dossier_instruction
960     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
961     ON dossier.dossier_instruction_type=dossier_instruction_type.dossier_instruction_type
962     WHERE dossier.dossier_autorisation ='".$row['dossier_autorisation']."' AND
963     dossier_instruction_type.code = 'DOC' and mouvement_sitadel='SUIVI'";
964     $resDOC = $this->f->db -> query ($sqlDOC);
965     $this->f->addToLog("dossier.class.php : db->query(\"".$sqlDOC."\")", VERBOSE_MODE);
966     $this->f->isDatabaseError($resDOC);
967     $rowDOC=& $resDOC->fetchRow(DB_FETCHMODE_ASSOC);
968    
969     if((isset($rowDOC['dossier']) &&
970     $rowDOC['date_chantier']<$datedebut || $rowDOC['date_chantier']>$datefin) ||
971     !isset($rowDOC['dossier'])) {
972     //
973     $suivi.=$export_sitadel->entete("SUIVI",$departement,$commune);//8|
974     $suivi.=$export_sitadel->chantier($rowDOC);
975     $suivi.=$export_sitadel->achevement($row);
976     $suivi.="\n";
977     }
978     }
979     }
980     // export
981     $export.=$depot.$decision.$transfert.$modificatif.$suivi.$suppression;
982     } // fin while
983    
984     /**
985     *
986     */
987     //
988     if (DBCHARSET == 'UTF8') {
989     $export = utf8_decode($export);
990     }
991    
992     /**
993     * En-tête de fichier.
994     *
995     * C'est la première ligne du fichier.
996     */
997     // on éclate la chaîne export par ligne pour calculer le nombre
998     // d'enregistrements et la longueur maximale des enregistrements
999     $export_by_line = explode("\n", $export);
1000     // longueur maximale des enregistrements
1001     // (Num)(6) longueur de l’enregistrement le plus long contenu dans le
1002     // fichier (sans compter la fin d’enregistrement ou la fin de fichier)
1003     $longueur_maximale_des_enregistrements = 0;
1004     foreach ($export_by_line as $export_line) {
1005     if ($longueur_maximale_des_enregistrements > strlen($export_line)) {
1006     continue;
1007     }
1008     $longueur_maximale_des_enregistrements = strlen($export_line);
1009     }
1010     // nombre d'enregistrements
1011     // (Num)(6) nombre d’enregistrements présents dans le fichier en
1012     // comptant l’en-tête du fichier
1013     // XXX Ne faut-il pas ajouter +1 pour la ligne d'en-tête ?
1014     $nombre_d_enregistrements = count($export_by_line);
1015     // code application
1016     // (Alphanum)(7) = SITADEL
1017     $code_application = "SITADEL";
1018     // code département
1019     // (Alphanum)(3) département dans lequel se trouve le service instructeur
1020     // nomenclature : 001 à 095, 02A, 02B, 971...974
1021     $code_departement = $this->f->getParameter("departement");
1022     // service expéditeur
1023     // (Alphanum)(3) DDE ou commune (la plus grosse en cas d'EPCI) ou DGI
1024     // nomenclature : 'ADS', ‘DGI ou code commune INSEE
1025     $service_expediteur = $this->f->getParameter("commune");
1026     // service destinataire
1027     // (Alphanum)(2) DRE
1028     // nomenclature : code région INSEE (exemple : Ile-de-France=11)
1029     $service_destinataire = $this->f->getParameter("region");
1030     // code du fichier transmis
1031     // (AlphaNum)(12) AAMMjjdddccc
1032     // ddd = département du service instructeur
1033     // ccc = code du service expéditeur
1034     // AAMMjj = date
1035     // par exemple : 090531093ADS dans le cas de la transmission mensuelle
1036     // des événements intervenus au mois de mai communiqués par la DDE de
1037     // Seine-Saint-Denis.
1038     // XXX La date du jour correspond bien à la date demandée ?
1039     $code_du_fichier_transmis = sprintf(
1040     "%s%s%s",
1041     date('ymd'),
1042     $code_departement,
1043     $service_expediteur
1044     );
1045     // numéro d'ordre
1046     // (AlphaNum)(1) numéro d’ordre du fichier en cas de rectificatif
1047     // XXX Le formulaire propose jusqu'à la valeur 10 alors que la taille
1048     // de la châine doit être (1) ?
1049     $numero_d_ordre = $this->f->get_submitted_post_value("numero");
1050     // date de création
1051     // (Alphanum)(6) AAMMjj date de création du fichier transmis
1052     $date_de_creation = date('ymd');
1053     // nom de l'applicatif expéditeur
1054     // (Alphanum)(20) Exemple : GESTIO
1055     $nom_de_l_applicatif_expediteur = "openADS";
1056     // version de l'applicatif expéditeur
1057     // (Alphanum)(8) Exemple : 2.05
1058     $version_de_l_applicatif_expediteur = substr($this->f->version, 0, 8);
1059     // Consititution de la ligne d'en-tête.
1060     $entete = sprintf(
1061     "%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n",
1062     $code_application,
1063     $code_departement,
1064     $service_expediteur,
1065     $service_destinataire,
1066     $code_du_fichier_transmis,
1067     $numero_d_ordre,
1068     $longueur_maximale_des_enregistrements,
1069     $date_de_creation,
1070     $nombre_d_enregistrements,
1071     $nom_de_l_applicatif_expediteur,
1072     $version_de_l_applicatif_expediteur
1073     );
1074    
1075     /**
1076     *
1077     */
1078     //
1079     $export = $entete.$export;
1080    
1081     /**
1082     * Écriture de l'export dans un fichier sur le disque et affichage du
1083     * lien de téléchargement.
1084     */
1085     // Composition du nom du fichier
1086     $nom_fichier = "SITADEL".substr($this->f->get_submitted_post_value("datedebut"),3,2)."".substr($this->f->get_submitted_post_value("datedebut"),8,4).".txt";
1087     // Composition des métadonnées du fichier
1088     $metadata_fichier = array(
1089     "filename" => $nom_fichier,
1090     "size" => strlen($export),
1091     "mimetype" => "application/vnd.ms-excel",
1092     );
1093     // Écriture du fichier
1094     $uid_fichier = $this->f->storage->create_temporary($export, $metadata_fichier);
1095     //
1096     $message = _("Fichier")." ".$nom_fichier." "._("sauvegarde");
1097     $message .= "<br/>";
1098     $message .= _("Pour telecharger le fichier, cliquer ici :");
1099     $message .= " ";
1100     $message .= "<a href=\"../spg/file.php?uid=".$uid_fichier."&amp;mode=temporary\" target=\"_blank\">";
1101     $message .= "<img src=\"../app/img/ico_trace.png\"";
1102     $message .= " alt=\""._("Telecharger le fichier Sitadel")."\"";
1103     $message .= " title=\""._("Telecharger le fichier Sitadel")."\"";
1104     $message .= " />";
1105     $message .= "</a>";
1106     $message .= _("avec le bouton droit et enregistrer la cible du lien sous.");
1107     //
1108     $this->f->displayMessage("ok", $message);
1109    
1110     /**
1111     * Écriture d'une éventuelle erreur durant l'export dans un fichier sur
1112     * le disque et affichage du lien de téléchargement.
1113     */
1114     //
1115     if ($erreur != "") {
1116     // Composition du nom du fichier
1117     $nom_fichier_erreur = "probleme_".$nom_fichier;
1118     // Composition des métadonnées du fichier
1119     $metadata_fichier_erreur = array(
1120     "filename" => $nom_fichier_erreur,
1121     "size" => strlen($erreur),
1122     "mimetype" => "text/plain",
1123     );
1124     // Écriture du fichier
1125     $uid_fichier_erreur = $this->f->storage->create_temporary($erreur, $metadata_fichier_erreur);
1126     //
1127     $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");
1128     $message .= "<br/>";
1129     $message .= _("Fichier")." ".$nom_fichier_erreur." "._("sauvegarde");
1130     $message .= "<br/>";
1131     $message .= _("Pour telecharger le fichier, cliquer ici :");
1132     $message .= " ";
1133     $message .= "<a href=\"../spg/file.php?uid=".$uid_fichier_erreur."&amp;mode=temporary\" target=\"_blank\">";
1134     $message .= "<img src=\"../app/img/ico_trace.png\"";
1135     $message .= " alt=\""._("Telecharger le fichier d'erreur")."\"";
1136     $message .= " title=\""._("Telecharger le fichier d'erreur")."\"";
1137     $message .= " />";
1138     $message .= "</a>";
1139     $message .= _("avec le bouton droit et enregistrer la cible du lien sous.");
1140     //
1141     $this->f->displayMessage("info", $message);
1142     }
1143    
1144     if (DEBUG > 0) {
1145     printf($export);
1146     }
1147     // Appel de la méthode d'affichage du lien retour par le layout
1148     $this->f->layout->display_form_retour($params);
1149    
1150     } else {// correct = false
1151     $this->affichageFormulaire($this->f->get_submitted_post_value("datedebut"), $this->f->get_submitted_post_value("datefin"), $numero, _("Les champs dates sont obligatoires"));
1152     }
1153     }
1154     }
1155    
1156    
1157     function affichageFormulaire($datedebut="", $datefin="", $numero="", $msg=null){
1158     //Description de la page
1159     $description = _("Cette page vous permet de Transmettre les dossiers suivant la procedure SITADEL");
1160     $this->f->displayDescription($description);
1161     // Affichage du message d'erreur si existe
1162     if($msg!==null){
1163     $this->f->displayMessage("error", $msg);
1164     }
1165     //
1166     printf("<form method=\"POST\" action=\"form.php?obj=sitadel&action=6&idx=0\" name=f1>");
1167     //
1168     $input = "<input type=\"text\" name=\"%s\" id=\"%s\" value=\"%s\" size=\"15\" class=\"champFormulaire datepicker\" onchange=\"fdate(this)\"/>";
1169     // champ date debut
1170     printf(" "._("debut")." ");
1171     printf($input, "datedebut", "datedebut", $datedebut);
1172     // champ date fin
1173     printf(" "._("fin")." ");
1174     printf($input, "datefin", "datefin", $datefin);
1175     // numero d'ordre d'envoi
1176     printf(" "._("Numero d'ordre d'envoi")." : "."<select name=\"numero\">");
1177     for ($i = 1; $i < 11; $i++) {
1178     printf("<option value =\"%d\" ", $i);
1179     printf(($numero == $i )? "selected=\"selected\"":"");
1180     printf(">%d</option>", $i);
1181     }
1182     printf("</select>");
1183     printf("<br/><br/><input type=\"submit\" value=\"export SITADEL\" >");
1184     printf("</form>");
1185     }
1186    
1187     /**
1188     * VIEW - view_document_numerise.
1189     *
1190     * Vue du tableau des pièces du dossier d'autorisation.
1191     *
1192     * Cette vue permet de gérer le contenu de l'onglet "Pièce(s)" sur un
1193     * dossier d'autorisation. Cette vue spécifique est nécessaire car
1194     * l'ergonomie standard du framework ne prend pas en charge ce cas.
1195     * C'est ici la vue spécifique des pièces liées au dossier qui est
1196     * affichée directement au clic de l'onglet au lieu du soustab.
1197     *
1198     * L'idée est donc de simuler l'ergonomie standard en créant un container
1199     * et d'appeler la méthode javascript 'ajaxit' pour charger le contenu
1200     * de la vue visualisation de l'objet lié.
1201     *
1202     * @return void
1203     */
1204     function view_document_numerise() {
1205     // Vérification de l'accessibilité sur l'élément
1206     $this->checkAccessibility();
1207     // Récupération des variables GET
1208     ($this->f->get_submitted_get_value('idxformulaire')!==null ? $idxformulaire =
1209     $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = "");
1210     ($this->f->get_submitted_get_value('retourformulaire')!==null ? $retourformulaire =
1211     $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = "");
1212     // Objet à charger
1213     $obj = "document_numerise";
1214     // Construction de l'url de sousformulaire à appeler
1215     $url = "../scr/sousform.php?obj=".$obj;
1216     $url .= "&idx=".$idxformulaire;
1217     $url .= "&action=4";
1218     $url .= "&retourformulaire=".$retourformulaire;
1219     $url .= "&idxformulaire=".$idxformulaire;
1220     $url .= "&retour=form";
1221     // Affichage du container permettant le reffraichissement du contenu
1222     // dans le cas des action-direct.
1223     printf('
1224     <div id="sousform-href" data-href="%s">
1225     </div>',
1226     $url
1227     );
1228     // Affichage du container permettant de charger le retour de la requête
1229     // ajax récupérant le sous formulaire.
1230     printf('
1231     <div id="sousform-%s">
1232     </div>
1233     <script>
1234     ajaxIt(\'%s\', \'%s\');
1235     </script>',
1236     $obj,
1237     $obj,
1238     $url
1239     );
1240     }
1241    
1242     /**
1243     * Cette variable permet de stocker le résultat de la méthode
1244     * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
1245     * ces appels.
1246     * @var string Code de la division du dossier en cours
1247     */
1248     var $_division_from_dossier = NULL;
1249    
1250     /**
1251     * Cette méthode permet de récupérer le code de division correspondant
1252     * au dossier sur lequel on se trouve.
1253     *
1254     * @return string Code de la division du dossier en cours
1255     */
1256     function getDivisionFromDossier() {
1257    
1258     // Cette méthode peut être appelée plusieurs fois lors d'une requête.
1259     // Pour éviter de refaire le traitement de recherche de la division
1260     // alors on vérifie si nous ne l'avons pas déjà calculé.
1261     if ($this->_division_from_dossier != NULL) {
1262     // Logger
1263     $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
1264     // On retourne la valeur déjà calculée
1265     return $this->_division_from_dossier;
1266     }
1267    
1268     // Par défaut, on définit la valeur du dossier à NULL
1269     $dossier = NULL;
1270     // Test sur le mode et le contexte du formulaire
1271     if ($this->getParameter("maj") == 0
1272     && ($this->getParameter("retourformulaire") == "dossier"
1273     || $this->getParameter("retourformulaire") == "dossier_instruction"
1274     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
1275     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
1276     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
1277     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures")) {
1278     // Si on se trouve en mode AJOUT (seul mode où l'enregistrement
1279     // n'existe pas en base de données) ET que nous nous trouvons
1280     // dans le contexte d'un dossier d'instruction alors on récupère
1281     // le numéro de dossier depuis le paramètre 'idxformulaire'
1282     $dossier = $this->getParameter("idxformulaire");
1283     } else {
1284     // Sinon on récupère le numéro de dossier dans le champs dossier de
1285     // l'enregistrement (en base de données)
1286     $dossier = $this->getVal("dossier");
1287     }
1288    
1289     // On appelle la méthode de la classe utils qui renvoi le code de la
1290     // division d'un dossier, on la stocke pour ne pas refaire le calcul au
1291     // prochain appel de cette méthode
1292     $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
1293     // Logger
1294     $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
1295     // On retourne la valeur retournée
1296     return $this->_division_from_dossier;
1297    
1298     }
1299    
1300     /*
1301 nmeucci 4526 * Définition de la version et du suffixe du DI lors de sa création.
1302 mbroquet 3730 */
1303     function setValFAjout($val = array()) {
1304 nmeucci 4526
1305     //
1306     // GESTION DE LA VERSION DU DI
1307     // Elle est unique et basée sur celle du DA qui débute à -1.
1308     // Ainsi la version du DI initial est à 0.
1309     //
1310     $numeroVersion = $this->getNumeroVersion($val['dossier_autorisation']);
1311     if (is_numeric($numeroVersion) or $numeroVersion == -1){
1312     $this->incrementNumeroVersion($val['dossier_autorisation'], ++$numeroVersion);
1313     }
1314    
1315     //
1316     // GESTION DU SUFFIXE
1317     // La version du suffixe est celle du type de DI : à ne pas confondre
1318     // avec celle du DI lui même.
1319     // Exemple chronologique :
1320     // DI n° PC0130551600004 -> version 0
1321     // DI n° PC0130551600004M01 -> version 1
1322     // DI n° PC0130551600004PRO01 -> version 2 !!
1323     //
1324     $suffixe = "";
1325     // Si l'option suffixe de ce type de DI est activée
1326     if ( $this->getSuffixe($this->getDossierInstructionType()) === 't' ){
1327     // Récupération de la lettre associée au type de dossier d'instruction
1328     $code = $this->getCode($this->getDossierInstructionType());
1329     // Récupération du numéro de version en fonction du type de dossier d'instruction
1330 mbroquet 3730 $numeroVersionDossierInstructionType = $this->getNumeroVersionDossierInstructionType($val['dossier_autorisation'], $val['dossier_instruction_type'], $numeroVersion);
1331 nmeucci 4526 // Suffixe
1332     $suffixe = $code.$numeroVersionDossierInstructionType;
1333 mbroquet 3730 }
1334    
1335 nmeucci 4526 // Numéro de dossier
1336     $this->valF['dossier'] = $val['dossier_autorisation'].$suffixe;
1337     // Identifiant du dossier d'instruction lisible
1338     $this->valF['dossier_libelle'] = $this->get_dossier_autorisation_libelle($val['dossier_autorisation']).$suffixe;
1339     // Version du dossier
1340 mbroquet 3730 $this->valF['version'] = $numeroVersion;
1341     }
1342    
1343     /*Récupère la valeur du suffixe d'un dossier_instruction_type*/
1344     function getSuffixe($dossierInstructionType){
1345    
1346     $suffixe = "";
1347    
1348     $sql = "SELECT
1349     suffixe
1350     FROM
1351     ".DB_PREFIXE."dossier_instruction_type
1352     WHERE
1353     dossier_instruction_type = $dossierInstructionType";
1354    
1355     $this->addToLog("getSuffixe(): db->query(\"".$sql."\")", VERBOSE_MODE);
1356     $res = $this->db->query($sql);
1357     if (database :: isError($res))
1358     die($res->getMessage()."erreur ".$sql);
1359    
1360     if ( $res->numRows() > 0 ){
1361    
1362     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
1363     $suffixe = $row['suffixe'];
1364     }
1365    
1366     return $suffixe;
1367     }
1368    
1369     /*Récupère dans la table de paramètrage la lettre correspondant
1370     * au dossier_instruction_type
1371     */
1372     function getCode($dossierInstructionType){
1373    
1374     $code = "";
1375    
1376     $sql = "SELECT
1377     code
1378     FROM
1379     ".DB_PREFIXE."dossier_instruction_type
1380     WHERE
1381     dossier_instruction_type = $dossierInstructionType";
1382    
1383     $this->addToLog("getCode(): db->query(\"".$sql."\")", VERBOSE_MODE);
1384     $res = $this->db->query($sql);
1385     if (database :: isError($res))
1386     die($res->getMessage()."erreur ".$sql);
1387    
1388     if ( $res->numRows() > 0 ){
1389    
1390     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
1391     $code = $row['code'];
1392     }
1393    
1394     return $code;
1395     }
1396    
1397     /*Récupère le numéro de version d'un dossier_autorisation*/
1398     function getNumeroVersion($dossierAutorisation){
1399    
1400     $numeroVersion = "";
1401    
1402     $sql = "SELECT
1403     numero_version
1404     FROM
1405     ".DB_PREFIXE."dossier_autorisation
1406     WHERE
1407     dossier_autorisation = '$dossierAutorisation'";
1408    
1409     $this->addToLog("getNumeroVersion(): db->query(\"".$sql."\")", VERBOSE_MODE);
1410     $res = $this->db->query($sql);
1411     if (database :: isError($res))
1412     die($res->getMessage()."erreur ".$sql);
1413    
1414     if ( $res->numRows() > 0 ){
1415    
1416     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
1417     $numeroVersion = $row['numero_version'];
1418     }
1419    
1420     return $numeroVersion;
1421     }
1422 fmichon 3892
1423     /**
1424     * Retourne le numéro d'un dossier d'instruction et ses six parties.
1425     *
1426     * @param string $dossier_instruction Identifiant du dossier d'instruction (avec ou sans espace)
1427     *
1428     * @return array
1429     */
1430     function get_dossier_instruction_numero($dossier_instruction = null) {
1431    
1432     // Si le DI n'a pas été fourni
1433     if ($dossier_instruction === null) {
1434     // On le récupère
1435     $dossier_instruction = $this->getVal($this->clePrimaire);
1436     }
1437    
1438     /*
1439     Analyse du numéro du DI et extraction de ses parties
1440    
1441     Retour : tableau à 7 entrées, chacune étant elle-même un tableau à 1 entrée :
1442    
1443     - 0 : chaîne testée (identifiant du DI)
1444     - 1 : type du DA (2 lettres)
1445     - 2 : code département + code communes(3 + 3 integer)
1446     - 3 : année (2 integer)
1447     - 4 : division + numéro (le premier peut être une lettre ou un
1448     - integer et le reste integer)
1449     - 5 : lettre(s) du type du dossier d'instruction (P, M, ANNUL, ...)
1450     - 6 : version du dossier d'instruction (1 ou 2 integer)
1451     */
1452     preg_match_all('|^([A-Z]{2})\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);
1453     //
1454     return $return;
1455     }
1456    
1457     /**
1458     * Récupère le numéro de version du dossier d'instruction.
1459     *
1460     * @return string
1461     */
1462     function get_dossier_instruction_version() {
1463    
1464     // Expression régulière qui découpe le numéro du dossier
1465     $return = $this->get_dossier_instruction_numero();
1466    
1467     // Si l'expression régulière retourne une erreur
1468     if ($return == false) {
1469     // Message dans le log
1470     $this->f->addToLog(__METHOD__."(): "._("Erreur lors de la recuperation du numero de version du dossier d'instruction"), DEBUG_MODE);
1471     //
1472     return false;
1473     }
1474    
1475 nmeucci 4526 // Retourne seulement la version du dossier d'instruction.
1476     // Elle vaut 0 si le numéro du DI n'a pas de suffixe.
1477     if (isset($return[6][0])) {
1478     return $return[6][0];
1479     }
1480     return 0;
1481 fmichon 3892 }
1482 mbroquet 3730
1483     /*Incrémente le numéro de version du dossier*/
1484     function incrementNumeroVersion($dossierAutorisation, $nouveauNumeroVersion) {
1485    
1486     $valF = array (
1487     "numero_version" => $nouveauNumeroVersion
1488     );
1489    
1490     $res = $this->db->autoExecute(DB_PREFIXE."dossier_autorisation",
1491     $valF,
1492     DB_AUTOQUERY_UPDATE,
1493     "dossier_autorisation = '$dossierAutorisation'");
1494    
1495     if (database :: isError($res))
1496     die($res->getMessage()."erreur ".$sql);
1497    
1498     }
1499    
1500     /**
1501     * Retourne un numéro de version en fonction du type de dossier d'instruction
1502     * @param string $dossier_autorisation
1503     * @param integer $dossier_instruction_type
1504     * @return int
1505     */
1506     public function getNumeroVersionDossierInstructionType($dossier_autorisation, $dossier_instruction_type, $numero_version, $increment = true){
1507    
1508     $numeroVersionDossierInstructionType = $numero_version;
1509    
1510     //On récupère le code correspondant au type de dossier d'instruction passé
1511     //en paramètre
1512     $sql = "SELECT
1513     code
1514     FROM
1515     ".DB_PREFIXE."dossier_instruction_type
1516     WHERE
1517     dossier_instruction_type = ".$dossier_instruction_type;
1518     $codeDossierInstructionType = $this->db->getOne($sql);
1519     $this->f->addToLog("getNumeroVersionDossierInstructionType(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
1520     if ( database::isError($codeDossierInstructionType)){
1521     $this->f->addToError("", $codeDossierInstructionType, $codeDossierInstructionType);
1522     return false;
1523     }
1524    
1525    
1526     // Si c'est un dossier d'instruction de type "Initial", code "P", on retourne 0
1527     if ( strcmp($codeDossierInstructionType, "P") == 0 ){
1528     return 0;
1529     }
1530     //Si c'est un modificatif ou transfert on retourne un nombre correspondant au
1531     //nombre de dossier d'instruction de ce type, rattaché au dossier
1532     //d'autorisation complété par des 0 à gauche si besoin. Format du retour
1533     //attendu : 01 ou 02, etc.
1534     else {
1535    
1536     //On récupère le nombre de dossier d'instruction de ce type rattaché au
1537     //dossier d'autorisation
1538     $sql = "SELECT
1539     count(dossier)
1540     FROM
1541     ".DB_PREFIXE."dossier
1542     LEFT JOIN
1543     ".DB_PREFIXE."dossier_autorisation
1544     ON
1545     dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
1546     WHERE
1547     dossier_autorisation.dossier_autorisation = '".$dossier_autorisation."'
1548     AND
1549     dossier.dossier_instruction_type = ".$dossier_instruction_type;
1550     $numeroVersionDossierInstructionType = $this->db->getOne($sql);
1551     $this->f->addToLog("getNumeroVersionDossierInstructionType(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
1552     if ( database::isError($numeroVersionDossierInstructionType)){
1553     $this->f->addToError("", $numeroVersionDossierInstructionType, $numeroVersionDossierInstructionType);
1554     return false;
1555     }
1556    
1557     // Requête SQL
1558     $sql = "SELECT
1559     substring(dossier, '\d*$')::int as last_num_dossier
1560     FROM ".DB_PREFIXE."dossier
1561     WHERE dossier_instruction_type = ".$dossier_instruction_type."
1562     AND dossier_autorisation = '".$dossier_autorisation."'
1563     AND version = (
1564     SELECT max(version)
1565     FROM ".DB_PREFIXE."dossier
1566     WHERE dossier_instruction_type = ".$dossier_instruction_type."
1567     AND dossier_autorisation = '".$dossier_autorisation."'
1568     GROUP BY dossier_instruction_type, dossier_autorisation
1569     )";
1570     $res = $this->db->query($sql);
1571     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\")", VERBOSE_MODE);
1572     $this->f->isDatabaseError($res);
1573     $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
1574    
1575     $num_version_last_dossier = $row['last_num_dossier'];
1576    
1577     if (!empty($num_version_last_dossier)
1578     && $num_version_last_dossier >= $numeroVersionDossierInstructionType) {
1579     // Modifie le numéro suivant
1580     $numeroVersionDossierInstructionType = $num_version_last_dossier;
1581     }
1582     //
1583     if ($increment === true) {
1584     $numeroVersionDossierInstructionType = ++$numeroVersionDossierInstructionType;
1585     }
1586     //On compléte par des 0 à gauche
1587     $numeroVersionDossierInstructionType = str_pad($numeroVersionDossierInstructionType, 2, "0", STR_PAD_LEFT);
1588    
1589     return $numeroVersionDossierInstructionType;
1590     }
1591     }
1592     /**
1593     * Retourne le libellé du dossier d'autorisation
1594     * @param string $dossier_autorisation Identifiant du dossier d'autorisation
1595     * @return string Libellé dossier d'autorisation
1596     */
1597     function get_dossier_autorisation_libelle($dossier_autorisation) {
1598    
1599     $dossier_autorisation_libelle = "";
1600    
1601     // Requête SQL
1602     $sql = "SELECT
1603     dossier_autorisation_libelle
1604     FROM
1605     ".DB_PREFIXE."dossier_autorisation
1606     WHERE
1607     dossier_autorisation = '$dossier_autorisation'";
1608    
1609     $dossier_autorisation_libelle = $this->db->getOne($sql);
1610     $this->addToLog("get_dossier_autorisation_libelle(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
1611     database::isError($dossier_autorisation_libelle);
1612    
1613     // Retourne le résultat
1614     return $dossier_autorisation_libelle;
1615     }
1616    
1617     function setvalF($val){
1618     parent::setvalF($val);
1619    
1620     // Récupération des id demandeurs postés
1621     $this->getPostedValues();
1622    
1623     // enlever les valeurs a ne pas saisir -> recherche en trigger ajouter et modifier
1624     unset ($this->valF['geom']);
1625     unset ($this->valF['geom1']);
1626     // valeurs hiddenstatic (calcule)
1627     if($this->maj==1){
1628     // par defaut
1629     unset ($this->valF['etat']);
1630     unset ($this->valF['delai']);
1631     unset ($this->valF['accord_tacite']);
1632     }
1633     unset ($this->valF['avis_decision']); // avis + libelle avis
1634     unset ($this->valF['terrain_surface_calcul']);
1635     unset ($this->valF['shon_calcul']);
1636     unset ($this->valF['date_notification_delai']);
1637     unset ($this->valF['date_decision']);
1638     unset ($this->valF['date_limite']);
1639     unset ($this->valF['date_validite']);
1640     unset ($this->valF['date_chantier']);
1641     unset ($this->valF['date_achevement']);
1642     unset ($this->valF['date_conformite']);
1643 nmeucci 3887 // Ce champ est mis à jour uniquement par la gestion spécifique du log
1644     // et donc jamais par les actions ajouter/modifier
1645     unset ($this->valF['log_instructions']);
1646 mbroquet 3730
1647     // Durée de validité lors de la création du dossier d'instruction
1648     $this->valF['duree_validite'] = $this->get_duree_validite($this->valF['dossier_autorisation']);
1649     }
1650    
1651     /*Vérification des données saisies*/
1652     function verifier($val,&$db,$DEBUG){
1653     parent::verifier($val,$db,$DEBUG);
1654     if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
1655     empty($this->postedIdDemandeur["petitionnaire_principal"])) {
1656     $this->correct = false;
1657     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
1658     }
1659     }//verifier
1660    
1661    
1662     function setType(&$form,$maj) {
1663     parent::setType($form,$maj);
1664     $form->setType('dossier','hidden');
1665 nmeucci 3876 $form->setType('log_instructions','hidden');
1666 mbroquet 3730 $form->setType('version','hidden'); // PC
1667     $form->setType('incompletude','hidden');
1668     $form->setType('incomplet_notifie','hidden');
1669     $form->setType('etat_pendant_incompletude','hidden');
1670     $form->setType('duree_validite','hidden');
1671     $form->setType('description','hidden');
1672     $form->setType('quartier', 'hidden');
1673     $form->setType('cle_acces_citoyen', 'static');
1674     if($_SESSION["niveau"] == 2) {
1675     $form->setType("om_collectivite", "selecthiddenstatic");
1676     } else {
1677     $form->setType("om_collectivite", "hidden");
1678     }
1679     if ($maj < 2) { //ajouter et modifier
1680     // cache
1681     if($maj==0) $form->setType('dossier_libelle', 'hidden');
1682     if($maj==0) $form->setType('dossier_demandeur','hidden');
1683     if($maj==0) $form->setType('description_projet','hidden');
1684     $form->setType('description_projet','hiddenstatic');
1685     $form->setType('annee', 'hidden');
1686     $form->setType('geom1', 'hidden');
1687     $form->setType('geom', 'hiddenstatic');
1688     $form->setType('autorite_competente', 'selecthiddenstatic');
1689    
1690     // Si l'état du dossier est incomplet
1691     if ($this->is_incomplet_notifie()) {
1692     // On cache les dates de complétude et de limite d'instruction
1693     $form->setType('date_complet', 'hiddendate');
1694     $form->setType('date_limite', 'hiddendate');
1695     $form->setType('evenement_suivant_tacite_incompletude','selecthiddenstatic');
1696     $form->setType('evenement_suivant_tacite','hidden');
1697     $form->setType('date_limite_incompletude', 'hiddenstaticdate');
1698    
1699     } else {
1700     // Sinon on cache la date de limite d'incomplétude
1701     $form->setType('date_limite_incompletude', 'hiddendate');
1702     $form->setType('evenement_suivant_tacite_incompletude','hidden');
1703     $form->setType('evenement_suivant_tacite','selecthiddenstatic');
1704     $form->setType('date_complet', 'hiddenstaticdate');
1705     $form->setType('date_limite', 'hiddenstaticdate');
1706     }
1707    
1708     // hiddenstatic
1709     if($maj==1) $form->setType('dossier_libelle', 'hiddenstatic');
1710     if($maj==1) $form->setType('dossier_demandeur','hiddenstatic');
1711     $form->setType('terrain','hiddenstatic');
1712     $form->setType('etat','hiddenstatic');
1713     $form->setType('avis_decision','hiddenstatic');
1714     $form->setType('delai_incompletude','hidden');
1715     $form->setType('delai','hiddenstatic');
1716     $form->setType('terrain_surface_calcul','hiddenstatic');
1717     $form->setType('shon_calcul','hiddenstatic');
1718    
1719     $form->setType('accord_tacite','hiddenstatic');
1720    
1721    
1722     // hiddenstaticdate
1723     $form->setType('date_notification_delai','hiddenstaticdate');
1724     $form->setType('date_decision','hiddenstaticdate');
1725     //$form->setType('date_limite','hiddenstaticdate');
1726     $form->setType('date_rejet','hiddenstaticdate');
1727     //$form->setType('date_complet','hiddenstaticdate');
1728     //$form->setType('date_limite','hiddenstaticdate');
1729     $form->setType('date_validite','hiddenstaticdate');
1730     $form->setType('date_chantier','hiddenstaticdate');
1731     $form->setType('date_achevement','hiddenstaticdate');
1732     $form->setType('date_conformite','hiddenstaticdate');
1733     //$form->setType('date_limite_incompletude','hiddenstaticdate');
1734    
1735     $form->setType('date_depot','hiddenstaticdate');
1736     $form->setType('date_dernier_depot','hiddenstaticdate');
1737    
1738     $form->setType('a_qualifier', 'checkbox');
1739     }
1740     if ($maj == 1) {
1741     //
1742     if ($this->f->isAccredited("dossier_modifier_instructeur")) {
1743     $form->setType('instructeur', 'select');
1744     } else {
1745     $form->setType('instructeur', 'selecthiddenstatic');
1746     }
1747     //
1748     if($this->f->getParameter('option_afficher_division') === 'true') {
1749     //
1750     if ($this->f->isAccredited("dossier_modifier_division")) {
1751     $form->setType('division', 'select');
1752     } else {
1753     $form->setType('division', 'selecthiddenstatic');
1754     }
1755     } else {
1756     $form->setType('division', 'hidden');
1757     }
1758     // Si l'utilisateur ne peut pas qualifier un DI (guichet unique & guichet et suivi)
1759 softime 4667 if (!$this->f->isAccredited(array("dossier_instruction","dossier_instruction_qualifier"), "OR")) {
1760 mbroquet 3730 // Il ne peut pas modifier les champs suivants
1761     $form->setType('numero_versement_archive', 'hiddenstatic');
1762     $form->setType('enjeu_urba', 'checkboxhiddenstatic');
1763     $form->setType('enjeu_erp', 'checkboxhiddenstatic');
1764     $form->setType('erp', 'checkboxhiddenstatic');
1765     $form->setType('a_qualifier', 'checkboxhiddenstatic');
1766     }
1767     // Le profil Qualificateur peut modifier seulement les champs
1768     // autorite_competente, a_qualifier et erp
1769     if ($this->f->isUserQualificateur()) {
1770     $form->setType('numero_versement_archive', 'static');
1771     $form->setType('enjeu_urba', 'checkboxstatic');
1772     $form->setType('enjeu_erp', 'checkboxstatic');
1773     }
1774     }
1775     if($maj == 2 || $maj == 3) {
1776     $form->setType('annee', 'hidden');
1777     $form->setType('geom1','hidden');
1778     $form->setType('geom','static');
1779     $form->setType('a_qualifier', 'checkboxstatic');
1780     $form->setType('terrain_references_cadastrales','referencescadastralesstatic'); // PC
1781     $form->setType('delai_incompletude','hidden');
1782     // Si l'état du dossier est incomplet
1783     if ($this->is_incomplet_notifie()) {
1784     // On cache les dates de complétude et de limite d'instruction
1785     $form->setType('date_complet', 'hiddendate');
1786     $form->setType('date_limite', 'hiddendate');
1787     $form->setType('evenement_suivant_tacite_incompletude','selecthiddenstatic');
1788     $form->setType('evenement_suivant_tacite','hidden');
1789    
1790     } else {
1791     // Sinon on cache la date de limite d'incomplétude
1792     $form->setType('date_limite_incompletude', 'hiddendate');
1793     $form->setType('evenement_suivant_tacite_incompletude','hidden');
1794     $form->setType('evenement_suivant_tacite','selecthiddenstatic');
1795     }
1796     }
1797    
1798     //
1799     if(!$this->f->getParameter('option_afficher_division') === 'true') {
1800     $form->setType('division', 'hidden');
1801     }
1802     $form->setType('dossier_autorisation', 'hidden');
1803     $form->setType('dossier_autorisation_libelle', 'hidden');
1804     $form->setType('dossier_instruction_type', 'selecthiddenstatic');
1805     //
1806     if ($maj == 0) {
1807     $form->setType('dossier_autorisation', 'select');
1808     }
1809    
1810     // En mode modifier, supprimer et consulter
1811     if ($maj == 1 || $maj == 2 || $maj == 3) {
1812     // Cache la date de la demande
1813     $form->setType('date_demande', 'hiddendate');
1814     }
1815    
1816     // XXX Champs cachés
1817     $form->setType('accord_tacite', 'hidden');
1818     $form->setType('date_rejet', 'hiddendate');
1819     $form->setType('date_notification_delai', 'hiddendate');
1820     $form->setType('date_chantier', 'hiddendate');
1821     $form->setType('date_achevement', 'hiddendate');
1822     $form->setType('date_conformite', 'hiddendate');
1823    
1824     // On cache les champs geom si aucun SIG n'est configuré
1825     if($this->f->getParameter('option_sig') == ''
1826     || $this->f->getParameter('option_sig') == 'aucun'){
1827     $form->setType('geom', 'hidden');
1828     $form->setType('geom1', 'hidden');
1829     }
1830    
1831     // Ajout et modification pour la taxe d'aménagement
1832     if ($this->getParameter('maj') == 0 || $this->getParameter('maj') == 1) {
1833     $form->setType('tax_mtn_part_commu', 'hidden');
1834     $form->setType('tax_mtn_part_depart', 'hidden');
1835     $form->setType('tax_mtn_part_reg', 'hidden');
1836     $form->setType('tax_mtn_total', 'hidden');
1837     }
1838    
1839     // Ce formulaire n'est pas accessible en ajout mais dans le cas où il le
1840     // serait, rien concernant la taxe d'aménagement ne doit être fait.
1841     if ($maj != 0) {
1842    
1843     // Instance de taxe_amenagement
1844     $inst_taxe_amenagement = $this->get_inst_taxe_amenagement();
1845     // Valeur clé primaire
1846     $taxe_amenagement_id = $inst_taxe_amenagement->getVal($inst_taxe_amenagement->clePrimaire);
1847     // Instance de cerfa
1848     $inst_cerfa = $this->get_inst_cerfa();
1849     // Si la collectivité à un paramétrage pour la taxe d'aménagement
1850     // et que le cerfa du dossier à les champs requis
1851     if (empty($taxe_amenagement_id) == false
1852     && $inst_cerfa->can_simulate_taxe_amenagement() == true) {
1853    
1854     // En ajout et modification
1855     if ($this->getParameter('maj') == 1) {
1856     //
1857     if ($this->is_in_context_of_foreign_key("tax_secteur", $this->retourformulaire)) {
1858     $form->setType("tax_secteur", "selecthiddenstatic");
1859     } else {
1860     $form->setType("tax_secteur", "select");
1861     }
1862     }
1863    
1864     // En suppression
1865     if ($this->getParameter('maj') == 2) {
1866     //
1867     $form->setType("tax_secteur", "selectstatic");
1868     }
1869    
1870     // En consultation
1871     if ($this->getParameter('maj') == 3) {
1872     //
1873     $form->setType("tax_secteur", "selectstatic");
1874     }
1875    
1876     // Si ce n'est pas une commune en Île-de-France
1877     if ($inst_taxe_amenagement->getVal('en_ile_de_france') == 'f') {
1878     //
1879     $form->setType('tax_mtn_part_reg', 'hidden');
1880     }
1881    
1882     } else {
1883     // Ajout et modification
1884     if ($this->getParameter('maj') == 1) {
1885     $form->setType('tax_secteur', 'hidden');
1886     }
1887    
1888     // Suppression et consultation
1889     if ($this->getParameter('maj') == 2 || $this->getParameter('maj') == 3) {
1890     $form->setType('tax_secteur', 'hidden');
1891     $form->setType('tax_mtn_part_commu', 'hidden');
1892     $form->setType('tax_mtn_part_depart', 'hidden');
1893     $form->setType('tax_mtn_part_reg', 'hidden');
1894     $form->setType('tax_mtn_total', 'hidden');
1895     }
1896     }
1897     }
1898    
1899 fmichon 4708 // On cache le marqueur 'connecté avec le référentiel ERP'
1900     // Un affichage spécifique est ajouté lorsque le marqueur est actif
1901     $form->setType('interface_referentiel_erp', 'hidden');
1902 mbroquet 3730 }
1903    
1904     function setVal(&$form,$maj,$validation){
1905     $this->maj=$maj;
1906    
1907     if($this->getVal('geom') != ""
1908     && $this->f->getParameter('option_sig') == 'sig_externe'
1909     && $this->f->issetSIGParameter($this->getVal('dossier')) === true) {
1910     $form->setVal('geom', $this->getGeolocalisationLink());
1911     }
1912     if ($validation==0) {
1913     if ($maj == 0){
1914    
1915     $form->setVal('annee', date('y'));
1916     $form->setVal('date_demande', date('Y-m-d'));
1917     $form->setVal('date_depot', date('Y-m-d'));
1918    
1919     //$form->setVal('demandeur_cp', $dossier_cp);
1920     //$form->setVal('demandeur_ville', $dossier_ville);
1921    
1922     //$form->setVal('delegataire_cp', $dossier_cp);
1923     //$form->setVal('delegataire_ville', $dossier_ville);
1924    
1925     //$form->setVal('terrain_cp', $dossier_cp);
1926     //$form->setVal('terrain_ville', $dossier_ville);
1927    
1928     $form->setVal('accord_tacite', 'Non');
1929     $form->setVal('etat', 'initialiser');
1930     }
1931     }
1932     }
1933    
1934    
1935     /**
1936     * getGeolocalisationLink retourne le code HTML affichant l'icone du globe, ainsi que
1937     * les coordonnées du centroide du dossier, le tout étant un lien vers le SIG.
1938     *
1939     * @return string Lien vers le SIG
1940     */
1941     function getGeolocalisationLink() {
1942     //
1943     $link = "<a id='action-form-localiser'".
1944     " target='_SIG' href='../scr/form.php?obj=dossier_instruction&action=140&idx=".$this->getVal("dossier")."'>".
1945     "<span class='om-icon om-icon-16 om-icon-fix sig-16' title='Localiser'>Localiser</span> ".
1946     $this->getVal('geom').
1947     " </a>";
1948     return $link;
1949     }
1950    
1951    
1952     function setSelect(&$form, $maj,&$db,$debug) {
1953     // XXX Commenté pour patcher le problème de montée en charge de la base
1954     // de données en cas de reprise de données d'un gros volume de dossier
1955     // d'instruction
1956     //parent::setSelect($form, $maj, $db, $debug);
1957    
1958     //optimisation sur table importante parcelle -> pas d appel methode parent
1959     if(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php"))
1960     include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php");
1961    
1962     // om_collectivite
1963     $this->init_select($form, $this->f->db, $maj, null, "om_collectivite", $sql_om_collectivite, $sql_om_collectivite_by_id, false);
1964    
1965     /*
1966     * Pour chaque init_select d'un select non modifiable on teste
1967     * si l'on est en mode modifier : si c'est le cas alors on initialise le
1968     * select en mode consulter (qui n'affiche rien s'il n'y a aucune valeur).
1969     */
1970    
1971     $collectivite_idx = $this->getVal("om_collectivite");
1972     // Si recherche avancée om_collectivite = collectivité utilisateur
1973     if($maj == 999) {
1974     $collectivite_idx = $this->f->getParameter("om_collectivite_idx");
1975     }
1976    
1977     // instructeur
1978     // on recupère les services des multicollectivités et de celle du DI
1979     if($this->f->getParameter('option_afficher_division')==='true') {
1980     // instructeur
1981     $sql_instructeur_div_by_di = str_replace('<collectivite_di>', $collectivite_idx, $sql_instructeur_div_by_di);
1982     $this->init_select($form, $db, $maj, $debug, "instructeur",
1983     $sql_instructeur_div_by_di, $sql_instructeur_div_by_id, true);
1984     } else {
1985     $sql_instructeur_by_di = str_replace('<collectivite_di>', $collectivite_idx, $sql_instructeur_by_di);
1986     $this->init_select($form, $db, $maj, $debug, "instructeur",
1987     $sql_instructeur_by_di, $sql_instructeur_by_id, true);
1988     }
1989     // etat
1990     if ($maj == 1) {
1991     $this->init_select($form, $db, 3, $debug, "etat",
1992     $sql_etat, $sql_etat_by_id, false);
1993     } else {
1994     $this->init_select($form, $db, $maj, $debug, "etat",
1995     $sql_etat, $sql_etat_by_id, false);
1996     }
1997    
1998     // dossier_instruction_type
1999     if ($maj == 1) {
2000     $this->init_select($form, $db, 3, $debug, "dossier_instruction_type",
2001     $sql_dossier_instruction_type, $sql_dossier_instruction_type_by_id, false);
2002     } else {
2003     $this->init_select($form, $db, $maj, $debug, "dossier_instruction_type",
2004     $sql_dossier_instruction_type, $sql_dossier_instruction_type_by_id, false);
2005     }
2006    
2007     // division
2008     $sql_division_by_di = str_replace('<collectivite_di>', $collectivite_idx, $sql_division_by_di);
2009     $this->init_select($form, $db, $maj, $debug, "division",
2010     $sql_division_by_di, $sql_division_by_id, false);
2011    
2012     // autorite_competente
2013     if ($maj == 1) {
2014     $this->init_select($form, $db, 3, $debug, "autorite_competente",
2015     $sql_autorite_competente, $sql_autorite_competente_by_id, false);
2016     } else {
2017     $this->init_select($form, $db, $maj, $debug, "autorite_competente",
2018     $sql_autorite_competente, $sql_autorite_competente_by_id, false);
2019     }
2020    
2021     // avis_decision
2022     if ($maj == 1) {
2023     $this->init_select($form, $db, 3, $debug, "avis_decision",
2024     $sql_avis_decision, $sql_avis_decision_by_id, false);
2025     } else {
2026     $this->init_select($form, $db, $maj, $debug, "avis_decision",
2027     $sql_avis_decision, $sql_avis_decision_by_id, false);
2028     }
2029    
2030     // evenement_suivant_tacite
2031     if ($maj == 1) {
2032     $this->init_select($form, $db, 3, $debug, "evenement_suivant_tacite",
2033     $sql_evenement_suivant_tacite, $sql_evenement_suivant_tacite_by_id, false);
2034     } else {
2035     $this->init_select($form, $db, $maj, $debug, "evenement_suivant_tacite",
2036     $sql_evenement_suivant_tacite, $sql_evenement_suivant_tacite_by_id, false);
2037     }
2038    
2039     // evenement_suivant_tacite_incompletude
2040     if ($maj == 1) {
2041     $this->init_select($form, $db, 3, $debug, "evenement_suivant_tacite_incompletude",
2042     $sql_evenement_suivant_tacite_incompletude, $sql_evenement_suivant_tacite_incompletude_by_id, false);
2043     } else {
2044     $this->init_select($form, $db, $maj, $debug, "evenement_suivant_tacite_incompletude",
2045     $sql_evenement_suivant_tacite_incompletude, $sql_evenement_suivant_tacite_incompletude_by_id, false);
2046     }
2047    
2048     // Ajout, modification et recherche avancée
2049     if($maj == 0 || $maj == 1 || $maj == 999){
2050     // accord tacite
2051     $contenu=array();
2052     $contenu[0]=array('Non','Oui');
2053     $contenu[1]=array('Non','Oui');
2054     $form->setSelect("accord_tacite",$contenu);
2055    
2056     // geom *** a voir
2057     if($maj==1){ //modification
2058     $contenu=array();
2059     $contenu[0]=array("dossier",$this->getParameter("idx"));
2060     $form->setSelect('geom',$contenu);
2061     }
2062     // arrondissement recherche anvancée
2063     $this->init_select($form, $db, $maj, $debug, "arrondissement",
2064     $sql_arrondissement, $sql_arrondissement_by_id, false);
2065     // dossier_autorisation_type_detaille recherche anvancée
2066     $this->init_select($form, $db, $maj, $debug, "dossier_autorisation_type_detaille",
2067     $sql_dossier_autorisation_type_detaille, $sql_dossier_autorisation_type_detaille_by_id, false);
2068    
2069     }
2070    
2071     // Ce formulaire n'est pas accessible en ajout ni en recherche avancée
2072     // mais dans le cas où il le serait, rien ne doit être fait concernant
2073     // la taxe d'aménagement.
2074     if ($maj != 0 && $maj != 999) {
2075    
2076     // Instance de la classe taxe_amenagement
2077     $inst_taxe_amenagement = $this->get_inst_taxe_amenagement();
2078     // Valeur clé primaire
2079     $taxe_amenagement_id = $inst_taxe_amenagement->getVal($inst_taxe_amenagement->clePrimaire);
2080     // Si la colletivité à un paramétrage pour la taxe d'aménagement
2081     if (empty($taxe_amenagement_id) == false) {
2082    
2083     // Choix du secteur pour part communale
2084     $contenu = array();
2085     $contenu[0][0] = "";
2086     $contenu[1][0] = _('choisir')."&nbsp;"._("tax_secteur");
2087    
2088     // Il y a 20 secteurs maximum dans une commune de France
2089     for ($i=1; $i < 21; $i++) {
2090    
2091     // Valeur du secteur
2092     $value = $inst_taxe_amenagement->getVal('tx_comm_secteur_'.$i);
2093    
2094     //
2095     if (empty($value) == false) {
2096     //
2097     $contenu[0][$i] = $i;
2098     $contenu[1][$i] = sprintf(_('Secteur %s'), $i);
2099     }
2100     }
2101     //
2102     $form->setSelect("tax_secteur", $contenu);
2103     }
2104     }
2105     }
2106    
2107     function setLib(&$form,$maj) {
2108     parent::setLib($form,$maj);
2109     $form->setLib('dossier_autorisation_libelle',_('dossier_autorisation_libelle'));
2110     $form->setLib('dossier_instruction_type',_('type de dossier'));
2111     $form->setLib('dossier_demandeur',_('demandeur'));
2112     $form->setLib('description_projet',_('description du projet'));
2113     $form->setLib('autorite_competente',_('competence'));
2114     $form->setLib('geom',_('geolocalisaion'));
2115     $form->setLib('date_limite',_("date limite d'instruction"));
2116     $form->setLib('delai',_("delai d'instruction"));
2117     $form->setLib('accord_tacite',_("decision tacite"));
2118     $form->setLib('enjeu_urba', _("urbanisme"));
2119     $form->setLib('enjeu_erp', _("ERP"));
2120     $form->setLib('numero_versement_archive', _("numero"));
2121     $form->setLib('erp', _("ERP"));
2122     $form->setLib('date_depot', _("depot"));
2123     $form->setLib('date_dernier_depot', _("dernier depot"));
2124     $form->setLib('date_limite', _("limite d'instruction"));
2125     $form->setLib('delai', _("delai (mois)"));
2126     $form->setLib('date_complet', _("completude"));
2127     $form->setLib('date_limite_incompletude', _("limite d'instruction"));
2128     $form->setLib('date_decision', _("date de la decision"));
2129     $form->setLib('date_validite', _("fin de validite le"));
2130     $form->setLib('cle_acces_citoyen', _("cle_acces_citoyen"));
2131     }
2132    
2133     function setOnchange(&$form,$maj){
2134     parent::setOnchange($form,$maj);
2135     // mise en majuscule
2136     $form->setOnchange("demandeur_nom","this.value=this.value.toUpperCase()");
2137     $form->setOnchange("demandeur_societe","this.value=this.value.toUpperCase()");
2138     $form->setOnchange("delegataire_nom","this.value=this.value.toUpperCase()");
2139     $form->setOnchange("delegataire_societe","this.value=this.value.toUpperCase()");
2140     $form->setOnchange("architecte_nom","this.value=this.value.toUpperCase()");
2141     $form->setOnchange("terrain_adresse","this.value=this.value.toUpperCase()");
2142     $form->setOnchange('terrain_surface','VerifNumdec(this)');
2143     $form->setOnchange('tax_mtn_part_commu', 'VerifFloat(this, 0)');
2144     $form->setOnchange('tax_mtn_part_depart', 'VerifFloat(this, 0)');
2145     $form->setOnchange('tax_mtn_part_reg', 'VerifFloat(this, 0)');
2146     $form->setOnchange('tax_mtn_total', 'VerifFloat(this, 0)');
2147     }
2148    
2149     function setLayout(&$form, $maj) {
2150    
2151     // En-tête
2152     $form->setBloc('dossier_libelle', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
2153    
2154     // Col1 : Fieldset "Dossier d'Instruction"
2155     $form->setBloc('dossier_libelle', 'D', '', 'col_9');
2156    
2157     $form->setFieldset('dossier_libelle', 'D', _("Dossier d'instruction"));
2158     $form->setFieldset('geom', 'F');
2159    
2160    
2161     $form->setBloc('geom', 'F');
2162    
2163     // Col2 : 3 fieldsets
2164     $form->setBloc('enjeu_urba', 'D', '', 'col_3');
2165    
2166     // Fieldset "Enjeu"
2167     $form->setFieldset('enjeu_urba', 'D', _("Enjeu"));
2168     $form->setFieldset('enjeu_erp', 'F');
2169     // Fieldset "Qualification"
2170     $form->setFieldset('erp', 'D', _("Qualification"));
2171     $form->setFieldset('a_qualifier', 'F');
2172     // Fieldset "Archive"
2173     $form->setFieldset('numero_versement_archive', 'D', _("Archive"));
2174     $form->setFieldset('date_demande', 'F');
2175    
2176     $form->setBloc('date_demande', 'F');
2177     $form->setBloc('date_demande', 'F');
2178    
2179     // Fieldset "Instruction"
2180     $form->setBloc('date_depot', 'D', '', 'col_12');
2181     $form->setFieldset('date_depot', 'D', _('Instruction'), 'col_12');
2182    
2183     // Fieldset "Suivi"
2184     $form->setBloc('date_depot', 'D', '', 'col_12');
2185    
2186     $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
2187     // Col 1
2188     $form->setBloc('date_depot', 'D', '', 'col_6');
2189     $form->setBloc('date_depot', 'D');
2190     $form->setBloc('date_dernier_depot', 'F');
2191     $form->setBloc('date_limite', 'D', '', 'interligne');
2192     $form->setBloc('date_limite_incompletude', 'F');
2193     $form->setBloc('date_limite_incompletude', 'F');
2194     // Col 2
2195     $form->setBloc('etat', 'D', '', 'col_6');
2196     $form->setBloc('etat', 'D');
2197     $form->setBloc('etat', 'F');
2198     $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
2199     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
2200     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
2201     $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
2202    
2203     $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
2204    
2205     // Bloc 2 fieldsets
2206     $form->setBloc('date_decision', 'D', '', 'col_12');
2207    
2208     // Col 1 Fieldset "Décision"
2209     $form->setFieldset('date_decision', 'D', _('Decision'), 'col_6');
2210     $form->setFieldset('avis_decision','F','');
2211     // Col 2 Fieldset "Validité de l'autorisation"
2212     $form->setFieldset('date_validite', 'D', _("Validite de l'autorisation"), 'col_6');
2213     $form->setFieldset('date_validite','F','');
2214    
2215     $form->setBloc('date_validite', 'F'); // Fin bloc 2 fieldsets
2216    
2217     // XXX Champs cachés
2218     // // Fieldset "Autre"
2219     // $form->setBloc('accord_tacite', 'D', '', 'col_12');
2220     // $form->setFieldset('accord_tacite', 'D', _('Autre'), 'col_12');
2221    
2222     // $form->setBloc('accord_tacite', 'D', '', 'col_4');
2223     // $form->setBloc('accord_tacite', 'F');
2224    
2225     // $form->setBloc('date_rejet', 'D', '', 'col_4');
2226     // $form->setBloc('date_achevement', 'F');
2227    
2228     // $form->setBloc('date_conformite', 'D', '', 'col_4');
2229     // $form->setBloc('date_conformite', 'F');
2230    
2231     // $form->setFieldset('date_conformite','F','');
2232     // $form->setBloc('date_conformite', 'F'); // Fin Autre
2233    
2234     $form->setFieldset('date_conformite','F','');
2235     $form->setBloc('date_conformite', 'F'); // Fin Instruction
2236    
2237     // Fieldset "Taxe d'aménagement"
2238     $form->setBloc('tax_secteur', 'D', '', 'col_12');
2239     $form->setFieldset('tax_secteur', 'D', _("Taxe d'amenagement"), 'startClosed');
2240     $form->setFieldset('tax_mtn_total', 'F', '');
2241     $form->setBloc('tax_mtn_total', 'F');
2242    
2243     // Fieldset "Localisation du terrain"
2244     $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
2245    
2246     $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation du terrain'), 'startClosed');
2247     // Col 1
2248     $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
2249     $form->setBloc('terrain_references_cadastrales', 'F');
2250     // Col 2
2251     $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
2252     $form->setBloc('terrain_superficie', 'F');
2253    
2254     $form->setFieldset('terrain_superficie', 'F', '');
2255    
2256     $form->setBloc('terrain_superficie', 'F');
2257     }
2258    
2259     /**
2260     * Permet de retourner si le dossier est incomplet notifié
2261     *
2262     * @return boolean true si incomplet notifié
2263     */
2264     function is_incomplet_notifie() {
2265     // Si le dossier est défini en tant qu'incomplet notifie
2266     if($this->getVal('incomplet_notifie') == 't' AND
2267     $this->getVal('incompletude') == 't') {
2268     return true;
2269     }
2270     return false;
2271     }
2272    
2273 fmichon 4708 /**
2274     * TRIGGER - triggerajouterapres.
2275     *
2276     * - Interface avec le référentiel ERP [108]
2277     * - Gestion des données techniques liées
2278     * - Mise à jour du DA
2279     * - Gestion des références cadastrales / parcelles liées
2280     *
2281     * @return boolean
2282     */
2283     function triggerajouterapres($id, &$db, $val, $DEBUG) {
2284 mbroquet 3730
2285 fmichon 4708 /**
2286     * Interface avec le référentiel ERP.
2287     *
2288     * (WS->ERP)[108] Dépôt de dossier DAT -> AT
2289     * Déclencheur :
2290     * - L'option ERP est activée
2291     * - Validation du formulaire d'ajout d'une demande de nouveau dossier
2292     * de type AT
2293     */
2294     //
2295     if ($this->f->is_option_referentiel_erp_enabled() === true
2296     && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__at')) {
2297     //
2298     $infos = array(
2299     "dossier_instruction" => $this->valF['dossier'],
2300     );
2301     //
2302     $ret = $this->f->send_message_to_referentiel_erp(108, $infos);
2303     if ($ret !== true) {
2304     $this->cleanMessage();
2305     $this->addToMessage(_("Une erreur s'est produite lors de la notification (108) du référentiel ERP. Contactez votre administrateur."));
2306     return false;
2307 mbroquet 3730 }
2308 fmichon 4708 $this->addToMessage(_("Notification (108) du référentiel ERP OK."));
2309     }
2310    
2311     /**
2312     * Gestion des données techniques liées.
2313     */
2314     // On ajoute les données techniques
2315     if ($this->ajoutDonneesTechniquesDI($id, $db, $val, $DEBUG) === false) {
2316 mbroquet 3730 //
2317 fmichon 4708 $this->addToMessage(_("Erreur lors de l'enregistrement du dossier.")." "._("Contactez votre administrateur."));
2318 mbroquet 3730 $this->correct = false;
2319     return false;
2320     }
2321    
2322 fmichon 4708 /**
2323     * Mise à jour des données du DA.
2324     */
2325     //
2326     $inst_da = $this->get_inst_dossier_autorisation($this->valF["dossier_autorisation"]);
2327     //
2328     if ($inst_da->majDossierAutorisation() === false) {
2329     //
2330     $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
2331     $this->correct = false;
2332     return false;
2333     }
2334    
2335     /**
2336     * Gestion des références cadastrales / parcelles liées.
2337     */
2338 mbroquet 3730 // Si le champ des références cadastrales n'est pas vide
2339     if ($this->valF['terrain_references_cadastrales'] != '') {
2340    
2341     // Ajout des parcelles dans la table dossier_parcelle
2342     $this->ajouter_dossier_parcelle($this->valF['dossier'],
2343     $this->valF['terrain_references_cadastrales']);
2344    
2345     }
2346    
2347     }
2348    
2349     /**
2350     * Récupère l'identifiant du quartier et d'un arrondissement d'une référence
2351     * cadastrale
2352     * @param string $reference_cadastrale
2353     *
2354     * @return array
2355     */
2356     function getQuartierArrondissement($reference_cadastrale) {
2357    
2358     $reference_cadastrale = trim($reference_cadastrale);
2359     $quartier = '';
2360    
2361     //Récupère le code impot du quartier dans la référence cadastrale
2362     for ( $i = 0 ; $i < strlen($reference_cadastrale) ; $i++ ){
2363    
2364     //Si c'est un chiffre, c'est le code quartier
2365     if (is_numeric($reference_cadastrale[$i]) ){
2366    
2367     $quartier .= $reference_cadastrale[$i];
2368     }
2369     //Sinon c'est la section
2370     else{
2371     break;
2372     }
2373     }
2374    
2375     //Si le code impôt du quartier a bien été renseigné
2376     if ( $quartier !== '' ){
2377    
2378     //Requête de récupération de l'identifiantdu quartier et de
2379     //l'arrondissement
2380     $sql = "SELECT
2381     quartier, arrondissement
2382     FROM
2383     ".DB_PREFIXE."quartier
2384     WHERE
2385     code_impots='$quartier'";
2386     $this->addToLog("getQuartierArrondissement() : db->query(\"$sql\")", VERBOSE_MODE);
2387     $res = $this->db->query($sql);
2388     if (database::isError($res)) {
2389     die();
2390     }
2391    
2392     //Si on a un résultat
2393     if ( $res->numRows() == 1 ){
2394     //
2395     return $res->fetchRow(DB_FETCHMODE_ASSOC);
2396     }
2397     }
2398    
2399     return NULL;
2400     }
2401    
2402     /**
2403     * Récupère la section d'une référence cadastrale
2404     * @param string $reference_cadastrale
2405     *
2406     * @return string
2407     */
2408     function getSection($reference_cadastrale){
2409    
2410     $reference_cadastrale = trim($reference_cadastrale);
2411     $section = NULL;
2412    
2413     for ( $i = 0 ; $i < strlen($reference_cadastrale) ; $i++ )
2414     if ( !is_numeric($reference_cadastrale[$i]) && is_string($reference_cadastrale[$i]) && $reference_cadastrale[$i] !== ' ' )
2415     $section .= $reference_cadastrale[$i];
2416    
2417     return $section;
2418     }
2419    
2420     /*
2421     * Retourne l'intructeur correspondant le mieux à la parcelle
2422     * */
2423     /**
2424     * Récupère la section d'une référence cadastrale
2425     * @param string $quartier
2426     * @param string $arrondissement
2427     * @param string $section
2428     * @param string $dossier_autorisation
2429     *
2430     * @return array
2431     */
2432     function getInstructeurDivision( $quartier, $arrondissement, $section, $dossier_autorisation_type_detaille, $collectivite) {
2433    
2434     $quartier = ( $quartier == NULL ) ? -1 : $quartier;
2435     $arrondissement = ( $arrondissement == NULL ) ? -1 : $arrondissement;
2436     $collectivite = ( $collectivite == "" ) ? -1 : $collectivite;
2437    
2438     //Si le dossier d'autorisation a un type détaillé de dossier
2439     //d'autorisation associé
2440     if ($dossier_autorisation_type_detaille != ''
2441     && $dossier_autorisation_type_detaille != null){
2442    
2443     //Requête de récupération de l'instructeur à affecter
2444     $sql = "
2445     SELECT
2446     instructeur, section, quartier, arrondissement, dossier_autorisation_type_detaille
2447     FROM
2448     ".DB_PREFIXE."affectation_automatique l
2449     WHERE
2450     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier IS NULL AND section IS NULL AND om_collectivite IS NULL) OR
2451     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier IS NULL AND section IS NULL AND om_collectivite = $collectivite) OR
2452     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier IS NULL AND section = '$section' AND om_collectivite = $collectivite) OR
2453     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier IS NULL AND section = '$section' AND om_collectivite IS NULL) OR
2454     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier = $quartier AND section IS NULL AND om_collectivite = $collectivite) OR
2455     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier = $quartier AND section IS NULL AND om_collectivite IS NULL) OR
2456     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier = $quartier AND section = '$section' AND om_collectivite = $collectivite) OR
2457     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier = $quartier AND section = '$section' AND om_collectivite IS NULL) OR
2458     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier IS NULL AND section IS NULL AND om_collectivite = $collectivite) OR
2459     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier IS NULL AND section IS NULL AND om_collectivite IS NULL) OR
2460     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier IS NULL AND section = '$section' AND om_collectivite = $collectivite) OR
2461     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier IS NULL AND section = '$section' AND om_collectivite IS NULL) OR
2462     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier = $quartier AND section IS NULL AND om_collectivite = $collectivite) OR
2463     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier = $quartier AND section IS NULL AND om_collectivite IS NULL) OR
2464     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier = $quartier AND section = '$section' AND om_collectivite IS NULL) OR
2465     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier = $quartier AND section = '$section' AND om_collectivite = $collectivite) OR
2466     ( 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
2467     ( 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
2468     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier IS NULL AND section = '$section' AND om_collectivite = $collectivite) OR
2469     ( 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
2470     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier = $quartier AND section IS NULL AND om_collectivite = $collectivite) OR
2471     ( 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
2472     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier = $quartier AND section = '$section' AND om_collectivite = $collectivite) OR
2473     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier = $quartier AND section = '$section' AND om_collectivite IS NULL) OR
2474     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier IS NULL AND section IS NULL AND om_collectivite = $collectivite) OR
2475     ( 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
2476     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier IS NULL AND section = '$section' AND om_collectivite = $collectivite) OR
2477     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier IS NULL AND section = '$section' AND om_collectivite IS NULL) OR
2478     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier = $quartier AND section IS NULL AND om_collectivite = $collectivite) OR
2479     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier = $quartier AND section IS NULL AND om_collectivite IS NULL) OR
2480     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier = $quartier AND section = '$section' AND om_collectivite IS NULL) OR
2481     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier = $quartier AND section = '$section' AND om_collectivite = $collectivite)
2482     ORDER BY dossier_autorisation_type_detaille, section, quartier, arrondissement
2483     LIMIT 1";
2484     $this->addToLog("getInstructeurDivision : db->query(\"$sql\")", VERBOSE_MODE);
2485     $res = $this->db->query($sql);
2486     if (database :: isError($res))
2487     die($res->getMessage()."erreur ".$sql);
2488    
2489     //Si on a récupéré un instructeur correspondant aux critères
2490     if ( $res->numRows() > 0 ){
2491    
2492     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
2493     //On récupère sa division
2494     $sql = "SELECT division FROM ".DB_PREFIXE."instructeur WHERE instructeur = ".$row['instructeur'];
2495     $res = $this->db->query($sql);
2496     if (database :: isError($res))
2497     die($res->getMessage()."erreur ".$sql);
2498    
2499     $row['division'] = NULL;
2500     //S'il a une division
2501     if ( $res->numRows() > 0 ){
2502    
2503     $rowT=& $res->fetchRow(DB_FETCHMODE_ASSOC);
2504     $row['division'] = $rowT['division'];
2505     }
2506    
2507     return $row;
2508     }
2509     }
2510    
2511     return NULL;
2512     }
2513    
2514     /**
2515     * Récupère le type détaillé d'une dossier d'autorisation.
2516     *
2517     * @param integer $dossier_autorisation DA
2518     *
2519     * @return mixed
2520     */
2521     function get_dossier_autorisation_da_type_detaille($dossier_autorisation) {
2522    
2523     //
2524     $resDATD = "";
2525    
2526     //Récupération du dossier_autorisation_type_detaille concerné par le
2527     //$dossier_autorisation
2528     $sql = "
2529     SELECT
2530     dossier_autorisation_type_detaille
2531     FROM
2532     ".DB_PREFIXE."dossier_autorisation
2533     WHERE
2534     dossier_autorisation = '$dossier_autorisation'";
2535     $this->addToLog(__METHOD__." : db->query(\"$sql\")", VERBOSE_MODE);
2536     $resDATD = $this->db->getOne($sql);
2537     $this->f->isDatabaseError($resDATD);
2538    
2539     //
2540     return $resDATD;
2541     }
2542    
2543     /* =============================================================
2544     * ===============================================================
2545     */
2546    
2547     function triggerajouter($id,&$db,$val,$DEBUG) {
2548     //
2549     $this->addToLog("triggerajouter() : start", EXTRA_VERBOSE_MODE);
2550    
2551     // Initialisation des variables nécessaires à l'affectation automatique
2552     $quartier = NULL;
2553     $arrondissement = NULL;
2554     $section = NULL;
2555     $instructeur = NULL;
2556    
2557     // Si la référence cadastrale n'est pas vide alors on récupère la
2558     //section, le quartier et l'arrondissement
2559     if ($this->valF['terrain_references_cadastrales'] != '') {
2560    
2561     // Cette méthode récupère l'arrondissement et le quartier de la
2562     //référence cadastrale saisie
2563     $quartierArrondissement = $this->getQuartierArrondissement($this->valF['terrain_references_cadastrales']);
2564     if ( $quartierArrondissement!= NULL ){
2565    
2566     $quartier = $quartierArrondissement['quartier'];
2567     $arrondissement = $quartierArrondissement['arrondissement'];
2568     }
2569     // Si il n'y a pas d'arrondissement alors on vide le quartier
2570     if ( strcmp($arrondissement,'') == 0 ) {
2571    
2572     $arrondissement = NULL;
2573     $quartier = NULL;
2574     }
2575     // On récupère la section
2576     $section = $this->getSection($this->valF['terrain_references_cadastrales']);
2577     }
2578    
2579     // Si aucun instructeur n'est saisi et que la dossier_autorisation_type_detaille n'est pas vide
2580     // alors on récupère l'instructeur et la division depuis l'affectation
2581     if ( ( empty($this->valF['instructeur']) || $this->valF['instructeur'] == '' ) && $val['dossier_autorisation'] != '' ) {
2582    
2583     // Récupère le type détaillé du DA
2584     $dossier_autorisation_type_detaille = $this->get_dossier_autorisation_da_type_detaille($this->valF['dossier_autorisation']);
2585    
2586     //Récupération de l'instructeur ainsi que de sa division
2587     $instructeurDivision = $this->getInstructeurDivision($quartier, $arrondissement, $section, $dossier_autorisation_type_detaille, $this->valF['om_collectivite']);
2588    
2589     //Si un instructeur et sa division ont été récupérés
2590     if ( $instructeurDivision != NULL ){
2591    
2592     $instructeur = $instructeurDivision['instructeur'];
2593     $division = $instructeurDivision['division'];
2594     }
2595     //Si un instructeur et sa division n'ont pas été récupérés, on
2596     //ajoute pas les données
2597     if ( $instructeur != NULL ){
2598    
2599     $this->valF['instructeur'] = $instructeur;
2600     $this->valF['division'] = $division;
2601     } else {
2602     //On affiche un message à l'utilisateur pour lui signifier
2603     //qu'aucun instructeur n'a été assigné au dossier d'instruction
2604     //créé
2605     if ($this->f->isAccredited("dossier_modifier_instructeur")) {
2606     $this->addToMessage("<br/> "._("Pensez a assigner un instructeur a ce dossier.")." <br/>");
2607     } else {
2608     $this->addToMessage("<br/> "._("Aucun instructeur compatible avec ce dossier trouve, contactez votre administrateur afin d'en assigner un a ce dossier.")." <br/>");
2609     }
2610     }
2611     } else {
2612     $this->addToMessage("<br/> "._("Aucun instructeur compatible avec ce dossier trouve, contactez votre administrateur afin d'en assigner un a ce dossier.")." <br/>");
2613     }
2614     //
2615     $this->addToLog("triggerajouter() : end", EXTRA_VERBOSE_MODE);
2616     }
2617    
2618 fmichon 4708 /**
2619     * TRIGGER - triggermodifierapres.
2620     *
2621     * - Interface avec le référentiel ERP [101]
2622     * - Interface avec le référentiel ERP [102][103]
2623     * - Gestion des demandeurs liés
2624     * - Gestion des références cadastrales / parcelles liées
2625     * - Gestion des taxes
2626     *
2627     * @return boolean
2628     */
2629     function triggermodifierapres($id, &$db, $val, $DEBUG) {
2630    
2631     /**
2632     * Interface avec le référentiel ERP.
2633     *
2634     * (WS->ERP)[101] ERP Qualifié -> AT
2635     * Déclencheur :
2636     * - L'option ERP est activée
2637     * - Le dossier est de type AT
2638     * - Le dossier est marqué comme "connecté au référentiel ERP"
2639     * - Le formulaire de modification du dossier est validé avec le
2640     * marqueur "à qualifier" à "NON" alors qu'il était précédemment à
2641     * "OUI"
2642     */
2643     //
2644     if ($this->f->is_option_referentiel_erp_enabled() === true
2645     && $this->is_connected_to_referentiel_erp() === true
2646     && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__at')
2647     && $this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false) {
2648 softime 4740 // Récupère la liste des contraintes
2649     $contraintes_plu_list = $this->getListContrainte($this->valF['dossier'], false);
2650     // Extrait les libellés de chaque contraintes
2651     $contraintes_plu = array();
2652     $contraintes_plu_string = "";
2653     while($row = &$contraintes_plu_list->fetchRow(DB_FETCHMODE_ASSOC)) {
2654     //
2655     $contraintes_plu[] = $row['contrainte_libelle'];
2656     }
2657     // Chaîne de caractère listant toutes les contraintes du dossier
2658     $contraintes_plu_string = implode(' ; ', $contraintes_plu);
2659 fmichon 4708 //
2660     $infos = array(
2661     "dossier_instruction" => $this->valF['dossier'],
2662     "competence" => ($this->valF['autorite_competente'] === null ? "" : $this->valF['autorite_competente']),
2663 softime 4740 "contraintes_plu" => $contraintes_plu_string,
2664 fmichon 4708 "references_cadastrales" => $this->getReferenceCadastrale($this->valF['dossier']),
2665     );
2666     //
2667     $ret = $this->f->send_message_to_referentiel_erp(101, $infos);
2668     if ($ret !== true) {
2669     $this->cleanMessage();
2670     $this->addToMessage(_("Une erreur s'est produite lors de la notification (101) du référentiel ERP. Contactez votre administrateur."));
2671     return false;
2672 mbroquet 3730 }
2673 fmichon 4708 $this->addToMessage(_("Notification (101) du référentiel ERP OK."));
2674     }
2675 mbroquet 3730
2676 fmichon 4708 /**
2677     * Interface avec le référentiel ERP.
2678     *
2679     * (WS->ERP)[102] Demande de complétude de dossier PC pour un ERP -> PC qui concerne un ERP
2680     * (WS->ERP)[103] Demande de qualification de dossier PC pour un ERP -> PC qui concerne un ERP
2681     * Déclencheur :
2682     * - L'option ERP est activée
2683     * - Le dossier est de type PC
2684     * - Le formulaire de modification du dossier est validé avec le
2685     * marqueur "à qualifier" à "NON" alors qu'il était précédemment à
2686     * "OUI"
2687     * - Le formulaire de modification du dossier est validé avec le
2688     * marqueur "ERP" à "OUI"
2689     */
2690     //
2691     if ($this->f->is_option_referentiel_erp_enabled() === true
2692     && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
2693     && $this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false
2694     && $this->valF['erp'] == true) {
2695     //
2696     $infos = array(
2697     "dossier_instruction" => $this->valF['dossier'],
2698     );
2699     // [102] Demande de complétude de dossier PC pour un ERP
2700     $ret = $this->f->send_message_to_referentiel_erp(102, $infos);
2701     if ($ret !== true) {
2702     $this->cleanMessage();
2703     $this->addToMessage(_("Une erreur s'est produite lors de la notification (102) du référentiel ERP. Contactez votre administrateur."));
2704     return false;
2705     }
2706     $this->addToMessage(_("Notification (102) du référentiel ERP OK."));
2707     // [103] Demande de qualification de dossier PC pour un ERP
2708     $ret = $this->f->send_message_to_referentiel_erp(103, $infos);
2709     if ($ret !== true) {
2710     $this->cleanMessage();
2711     $this->addToMessage(_("Une erreur s'est produite lors de la notification (103) du référentiel ERP. Contactez votre administrateur."));
2712     return false;
2713     }
2714     $this->addToMessage(_("Notification (103) du référentiel ERP OK."));
2715     }
2716    
2717     /**
2718     * Gestion des demandeurs liés.
2719     */
2720 mbroquet 3730 // Ajout ou modification des demandeurs
2721     $this->insertLinkDemandeDemandeur($db, $DEBUG);
2722    
2723 fmichon 4708 /**
2724     * Gestion des références cadastrales / parcelles liées.
2725     */
2726 mbroquet 3730 // Si le champ des références cadastrales n'est pas vide
2727     if ($this->getVal('terrain_references_cadastrales')
2728     != $this->valF['terrain_references_cadastrales']) {
2729    
2730     // On supprime toutes les lignes de la table dossier_parcelle qui
2731     // font référence le dossier en cours de modification
2732     $this->supprimer_dossier_parcelle($val['dossier']);
2733    
2734     // Ajout des parcelles dans la table dossier_parcelle
2735     $this->ajouter_dossier_parcelle($val['dossier'],
2736     $val['terrain_references_cadastrales']);
2737    
2738     }
2739    
2740 fmichon 4708 /**
2741     * Gestion des taxes.
2742     */
2743 mbroquet 3730 // Si le champ tax_secteur est modifié
2744     if ($this->getVal('tax_secteur') != $this->valF['tax_secteur']) {
2745    
2746     // Valeurs pour le calcul de la taxe d'aménagement
2747     $val = array();
2748     //
2749     if ($this->valF['tax_secteur'] != '') {
2750     // Instance de la classe donnees_techniques
2751     $donnees_techniques = $this->get_inst_donnees_techniques();
2752     //
2753     $val = $donnees_techniques->get_form_val();
2754     }
2755    
2756     // Met à jour les montants du dossier
2757     if ($this->update_dossier_tax_mtn($this->valF['tax_secteur'], $val) == false) {
2758     //
2759     $this->addToMessage(_("La mise a jour des montants de la simulation de la taxe d'amenagement a echouee."));
2760     return false;
2761     }
2762     }
2763    
2764     //
2765     return true;
2766     }
2767    
2768     /**
2769     * Met à jour les montants de la taxe d'aménagement du dossier d'instruction.
2770     *
2771     * @param integer $tax_secteur Secteur communal
2772     * @param array $val Tableau des valeurs
2773     *
2774     * @return boolean
2775     */
2776     function update_dossier_tax_mtn($tax_secteur, $val = array()) {
2777     // Instance du paramétrage de la taxe d'aménagement
2778     $taxe_amenagement = $this->get_inst_taxe_amenagement();
2779    
2780     // Si le tableau des valeurs est vide
2781     if (empty($val)) {
2782     //
2783     $valF = array();
2784     $valF['tax_mtn_part_commu'] = null;
2785     $valF['tax_mtn_part_depart'] = null;
2786     $valF['tax_mtn_part_reg'] = null;
2787     $valF['tax_mtn_total'] = null;
2788    
2789     } else {
2790     // Calcul des parts
2791     $calcul = $taxe_amenagement->calcul($tax_secteur, $val);
2792    
2793     // Total des parts
2794     $total = $calcul['commu'] + $calcul['depart'] + $calcul['reg'];
2795    
2796     // Valeurs à mettre à jour, les montants doivent être à l'entier inférieur
2797     $valF = array();
2798     $valF['tax_mtn_part_commu'] = floor($calcul['commu']);
2799     $valF['tax_mtn_part_depart'] = floor($calcul['depart']);
2800     $valF['tax_mtn_part_reg'] = floor($calcul['reg']);
2801     $valF['tax_mtn_total'] = floor($total);
2802     }
2803    
2804     // Met à jour l'enregistrement de dossier
2805     $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF, DB_AUTOQUERY_UPDATE, $this->clePrimaire ."='".$this->getVal($this->clePrimaire)."'");
2806     // Log
2807     $this->f->addToLog(__METHOD__."() : db->autoExecute(".$res.")", VERBOSE_MODE);
2808     //
2809     if ($this->f->isDatabaseError($res, true)) {
2810     //
2811     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
2812     $this->correct = false;
2813     return false;
2814     }
2815    
2816     //
2817     return true;
2818     }
2819    
2820     /**
2821     * Ne servira surement pas mais dans le doute autant recalculer les données du DA
2822     */
2823     function triggersupprimerapres($id,&$db,$val,$DEBUG) {
2824     // Mise à jour des données du dossier d'autorisation
2825     require_once "../obj/dossier_autorisation.class.php";
2826     $da = new dossier_autorisation($this->valF["dossier_autorisation"], $this->db, DEBUG);
2827     $da->majDossierAutorisation();
2828    
2829     // On supprime toutes les lignes de la table dossier_parcelle qui
2830     // font référence le dossier en cours de suppression
2831     $this->supprimer_dossier_parcelle($this->valF['dossier']);
2832    
2833     }
2834    
2835    
2836     /**
2837     * Retourne la reference cadastrale de la demande attache a un dossier ERP
2838     * specifique
2839     * @param string $dossier L'identifiant du dossier
2840     * @return string|null La reference cadastrale si elle est trouve,
2841     * sinon NULL. En cas d'erreur de la BD, l'execution s'arrete.
2842     */
2843     function getReferenceCadastrale($dossier) {
2844     $sql = "SELECT terrain_references_cadastrales FROM ".DB_PREFIXE."demande WHERE dossier_instruction = '" . $dossier . "'";
2845     $res = $this->db->limitquery($sql, 0, 1);
2846     $this->addToLog("getReferenceCadastrale(): db->limitquery(\"".
2847     str_replace(",",", ",$sql)."\", 0, 1);", VERBOSE_MODE);
2848     // Si une erreur survient on die
2849     if (database::isError($res, true)) {
2850     // Appel de la methode de recuperation des erreurs
2851     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), 'demande');
2852     }
2853     // retourne la nature du dossier
2854     while ($row =& $res->fetchRow()) {
2855     return $row[0];
2856     }
2857     // la nature n'etait pas trouve, ce qui ne devrait pas se passer
2858     return NULL;
2859     }
2860    
2861     /**
2862     * Gestion des liens entre la demande et les demandeurs recemment ajoutés
2863     **/
2864     function insertLinkDemandeDemandeur($db, $DEBUG) {
2865     //
2866     require_once "../obj/lien_dossier_demandeur.class.php";
2867     // Sippression des anciens demandeurs
2868     $this->deleteLinkDossierDemandeur($db, $DEBUG);
2869    
2870     // Ajout du pétitionnaire principal
2871     if(!empty($this->postedIdDemandeur['petitionnaire_principal'])) {
2872     $this->addLinkDossierDemandeur($this->postedIdDemandeur['petitionnaire_principal'], true, $db, $DEBUG);
2873     }
2874    
2875     // Ajout du délégataire
2876     if(!empty($this->postedIdDemandeur['delegataire'])) {
2877     $this->addLinkDossierDemandeur($this->postedIdDemandeur['delegataire'], false, $db, $DEBUG);
2878     }
2879    
2880     // Ajout des pétitionnaires
2881     if(isset($this->postedIdDemandeur['petitionnaire'])) {
2882     // Ajout des nouveaux liens
2883     foreach ($this->postedIdDemandeur['petitionnaire'] as $petitionnaire) {
2884     $this->addLinkDossierDemandeur($petitionnaire, false, $db, $DEBUG);
2885     }
2886     }
2887     }
2888    
2889    
2890     /**
2891     * Fonction permettant d'ajouter un lien
2892     * entre la table demande et demandeur
2893     **/
2894     function addLinkDossierDemandeur($id, $principal, $db, $DEBUG) {
2895     $lienAjout = new lien_dossier_demandeur(
2896     "]",
2897     $db,
2898     $DEBUG);
2899     $lien = array('lien_dossier_demandeur' => "",
2900     'petitionnaire_principal' => (($principal)?"t":"f"),
2901     'dossier' => $this->valF['dossier'],
2902     'demandeur' => $id);
2903     $lienAjout->ajouter($lien, $db, $DEBUG);
2904     $lienAjout->__destruct();
2905     }
2906    
2907     /**
2908     * Fonction permettant de supprimer un lien
2909     * entre la table demande et demandeur
2910     **/
2911     function deleteLinkDossierDemandeur($db, $DEBUG) {
2912     // Suppression
2913     $sql = "DELETE FROM ".DB_PREFIXE."lien_dossier_demandeur ".
2914     "WHERE dossier='".$this->valF['dossier']."'";
2915     // Execution de la requete de suppression de l'objet
2916     $res = $db->query($sql);
2917     // Logger
2918     $this->f->addToLog("supprimer(): db->query(\"".$sql."\");", VERBOSE_MODE);
2919     if ( database::isError($res)){
2920     die();
2921     }
2922    
2923     }
2924    
2925     /**
2926     * Methode de recupération des valeurs postées
2927     **/
2928     function getPostedValues() {
2929     // Récupération des demandeurs dans POST
2930     if ($this->f->get_submitted_post_value('petitionnaire_principal') !== null OR
2931     $this->f->get_submitted_post_value('delegataire') !== null OR
2932     $this->f->get_submitted_post_value('petitionnaire') !== null) {
2933     if($this->f->get_submitted_post_value('petitionnaire_principal') !== null AND
2934     $this->f->get_submitted_post_value('petitionnaire_principal') != '') {
2935     $this->postedIdDemandeur['petitionnaire_principal'] = $this->f->get_submitted_post_value('petitionnaire_principal');
2936     }
2937     if($this->f->get_submitted_post_value('delegataire') !== null AND
2938     $this->f->get_submitted_post_value('delegataire') != '') {
2939     $this->postedIdDemandeur['delegataire'] = $this->f->get_submitted_post_value('delegataire');
2940     }
2941     if($this->f->get_submitted_post_value('petitionnaire') !== null AND
2942     $this->f->get_submitted_post_value('petitionnaire') != '') {
2943     $this->postedIdDemandeur['petitionnaire'] = $this->f->get_submitted_post_value('petitionnaire');
2944     }
2945     }
2946     }
2947    
2948     /**
2949     * Méthode permettant de récupérer les id des demandeurs liés à la table
2950     * liée passée en paramètre
2951     *
2952     * @param string $from Table liée : "demande", "dossier", dossier_autorisation"
2953     * @param string $id Identifiant (clé primaire de la table liée en question)
2954     */
2955     function listeDemandeur($from, $id) {
2956     // Récupération des demandeurs de la base
2957     $sql = "SELECT demandeur.demandeur,
2958     demandeur.type_demandeur,
2959     lien_".$from."_demandeur.petitionnaire_principal
2960     FROM ".DB_PREFIXE."lien_".$from."_demandeur
2961     INNER JOIN ".DB_PREFIXE."demandeur
2962     ON demandeur.demandeur=lien_".$from."_demandeur.demandeur
2963     WHERE ".$from." = '".$id."'";
2964     $res = $this->f->db->query($sql);
2965     $this->f->addToLog("listeDemandeur(): db->query(\"".$sql."\")", VERBOSE_MODE);
2966     if ( database::isError($res)){
2967     die();
2968     }
2969     // Stockage du résultat dans un tableau
2970     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
2971     if ($row['petitionnaire_principal'] == 't' AND
2972     $row['type_demandeur']=="petitionnaire") {
2973     $this->valIdDemandeur['petitionnaire_principal']=$row['demandeur'];
2974     } elseif ($row['petitionnaire_principal'] == 'f' AND
2975     $row['type_demandeur']=="petitionnaire"){
2976     $this->valIdDemandeur['petitionnaire'][]=$row['demandeur'];
2977     } elseif ($row['type_demandeur']=="delegataire"){
2978     $this->valIdDemandeur['delegataire']=$row['demandeur'];
2979     }
2980     }
2981     }
2982    
2983     /**
2984     * Récupère la liste des contraintes d'un dossier.
2985     *
2986 softime 4740 * @param string $dossier Identifiant du dossier.
2987     * @param boolean $for_di_view Liste avec condition affichage DI.
2988     *
2989 mbroquet 3730 * @return object Résultat de la requête
2990     */
2991 softime 4740 function getListContrainte($dossier, $for_di_view = true) {
2992 mbroquet 3730
2993     // Select
2994     $select = "SELECT dossier_contrainte.dossier_contrainte as dossier_contrainte_id,
2995     dossier_contrainte.texte_complete as dossier_contrainte_texte,
2996     dossier_contrainte.reference as dossier_contrainte_reference,
2997     contrainte.libelle as contrainte_libelle,
2998     contrainte.nature as contrainte_nature,
2999     contrainte.texte as contrainte_texte,
3000     contrainte.reference as contrainte_reference,
3001     lower(contrainte.groupe) as contrainte_groupe,
3002     lower(contrainte.sousgroupe) as contrainte_sousgroupe ";
3003    
3004     // From
3005     $from = " FROM ".DB_PREFIXE."contrainte
3006     LEFT JOIN ".DB_PREFIXE."dossier_contrainte
3007     ON dossier_contrainte.contrainte = contrainte.contrainte ";
3008    
3009     // Where
3010     $where = " WHERE dossier_contrainte.dossier = '".$dossier."' ";
3011    
3012 softime 4740 // Si les contraintes sont listées pour être affichées dans le DI
3013     if ($for_di_view === true) {
3014     // Si le paramètre "option_contrainte_di" est défini
3015     if ($this->f->getParameter('option_contrainte_di') != 'aucun') {
3016     // Ajoute la condition
3017     $where .= $this->f->traitement_condition_contrainte(
3018     $this->f->getParameter('option_contrainte_di'));
3019     }
3020 mbroquet 3730 }
3021    
3022     // Tri
3023     $tri = " ORDER BY contrainte_groupe DESC, contrainte_sousgroupe,
3024     contrainte.no_ordre, contrainte.libelle ";
3025    
3026     // Requête SQL
3027     $sql = $select.$from.$where.$tri;
3028     $res = $this->f->db->query($sql);
3029     $this->f->addToLog("listContrainte(): db->query(\"".$sql."\");", VERBOSE_MODE);
3030     $this->f->isDatabaseError($res);
3031    
3032     // Retourne le résultat
3033     return $res;
3034     }
3035    
3036     /**
3037     * Ajout de la liste des contraintes et des demandeurs
3038     */
3039     function formSpecificContent($maj) {
3040    
3041     /**
3042     * Liste des contraintes
3043     */
3044     //
3045     $listContrainte = $this->getListContrainte($this->getVal('dossier'));
3046    
3047     // Si le dossier possède des contraintes
3048     if ($listContrainte->numRows() != 0) {
3049    
3050     // Affiche du fieldset
3051     printf("<div id=\"liste_contrainte\" class=\"demande_hidden_bloc\">");
3052     printf("<fieldset class=\"cadre ui-corner-all ui-widget-content col_12 startClosed\">");
3053     printf(" <legend class=\"ui-corner-all ui-widget-content ui-state-active\"
3054     id =\"fieldset_contraintes_liees\">"
3055     ._("dossier_contrainte")."</legend>");
3056     printf("<div class=\"fieldsetContent\" style=\"display: none;\">");
3057    
3058     // Entête pour le groupe
3059     $groupeHeader = "
3060     <div class='dossier_contrainte_groupe'>
3061     <div class='dossier_contrainte_groupe_header'>
3062     <span class='name'>
3063     %s
3064     </span>
3065     </div>
3066     ";
3067    
3068     // Entête pour le sous-groupe
3069     $sousgroupeHeader = "
3070     <div class='dossier_contrainte_sousgroupe'>
3071     <div class='dossier_contrainte_sousgroupe_header'>
3072     <span class='name'>
3073     %s
3074     </span>
3075     </div>
3076     ";
3077    
3078     // Titres des colonnes
3079     $tableHeader = "
3080     <thead>
3081     <tr class='ui-tabs-nav ui-accordion ui-state-default tab-title'>
3082     <th class='title col-0 firstcol contrainte_th_texte_complete'>
3083     <span class='name'>
3084     "._('texte_complete')."
3085     </span>
3086     </th>
3087     <th class='title col-1 contrainte_th_reference'>
3088     <span class='name'>
3089     "._('reference')."
3090     </span>
3091     </th>
3092     <th class='title col-2 contrainte_th_nature'>
3093     <span class='name'>
3094     "._('nature')."
3095     </span>
3096     </th>
3097     </tr>
3098     </thead>
3099     ";
3100    
3101     // Ligne de données
3102     $line = "
3103     <tr class='tab-data %s'>
3104     <td class='col-0 firstcol contrainte_th_texte_complete'>
3105     %s
3106     </td>
3107     <td class='col-1 contrainte_th_reference'>
3108     %s
3109     </td>
3110     <td class='col-2 contrainte_th_nature'>
3111     %s
3112     </td>
3113     ";
3114    
3115     // Sauvegarde des données pour les comparer
3116     $lastRow = array();
3117     $lastRow['contrainte_groupe'] = 'empty';
3118     $lastRow['contrainte_sousgroupe'] = 'empty';
3119    
3120     // Tant qu'il y a des résultats
3121     while($row = &$listContrainte->fetchRow(DB_FETCHMODE_ASSOC)) {
3122     // Si l'identifiant du groupe de la contrainte présente et
3123     // celle d'avant est différent
3124     if ($row['contrainte_groupe'] != $lastRow['contrainte_groupe']) {
3125    
3126     // Si l'identifiant du groupe d'avant est vide
3127     if ($lastRow['contrainte_groupe'] != 'empty') {
3128     // Ferme le tableau
3129     printf("</table>");
3130     // Ferme le div
3131     printf("</div>");
3132     // Ferme le div
3133     printf("</div>");
3134     }
3135    
3136     // Affiche le header du groupe
3137     printf($groupeHeader, $row['contrainte_groupe']);
3138     }
3139    
3140     // Si l'identifiant du sous-groupe de la contrainte présente et
3141     // celle d'avant est différent
3142     // Ou qu'ils soient identique mais n'appartiennent pas au même groupe
3143     if ($row['contrainte_sousgroupe'] != $lastRow['contrainte_sousgroupe']
3144     || ($row['contrainte_sousgroupe'] == $lastRow['contrainte_sousgroupe']
3145     && $row['contrainte_groupe'] != $lastRow['contrainte_groupe'])) {
3146    
3147     //
3148     if($row['contrainte_groupe'] == $lastRow['contrainte_groupe']) {
3149     // Si l'identifiant de la sous-groupe d'avant est vide
3150     if ($lastRow['contrainte_sousgroupe'] != 'empty') {
3151     // Ferme le tableau
3152     printf("</table>");
3153     // Ferme le div
3154     printf("</div>");
3155     }
3156     }
3157    
3158     // Affiche le header du sous-groupe
3159     printf($sousgroupeHeader, $row['contrainte_sousgroupe']);
3160    
3161     // Ouvre le tableau
3162     printf("<table id='sousgroupe_".$row['contrainte_sousgroupe']."' class='tab-tab dossier_contrainte_view'>");
3163    
3164     // Affiche le header des données
3165     printf($tableHeader);
3166    
3167     // Définis le style des lignes
3168     $style = 'odd';
3169     }
3170    
3171     // Si toujours dans la même groupe et même sous-groupe,
3172     // on change le style de la ligne
3173     if ($row['contrainte_groupe'] == $lastRow['contrainte_groupe']
3174     && $row['contrainte_sousgroupe'] == $lastRow['contrainte_sousgroupe']) {
3175     // Définis le style
3176     $style = ($style=='even')?'odd':'even';
3177     }
3178    
3179     // Affiche "Oui" ou "Non" pour le bouléen
3180     if ($row['dossier_contrainte_reference'] == 1
3181     || $row['dossier_contrainte_reference'] == "t"
3182     || $row['dossier_contrainte_reference'] == "Oui") {
3183     //
3184     $contrainte_reference = "Oui";
3185     } else {
3186     //
3187     $contrainte_reference = "Non";
3188     }
3189    
3190     // Affiche les données
3191     printf($line, $style,
3192     $row['dossier_contrainte_texte'],
3193     $contrainte_reference,
3194     $row['contrainte_nature']
3195     );
3196    
3197     // Sauvegarde les données
3198     $lastRow['contrainte_groupe'] = $row['contrainte_groupe'];
3199     $lastRow['contrainte_sousgroupe'] = $row['contrainte_sousgroupe'];
3200    
3201     }
3202     // Ferme le tableau
3203     printf("</table>");
3204     // Ferme le sous-groupe
3205     printf("</div>");
3206     // Ferme le groupe
3207     printf("</div>");
3208    
3209     printf("</div>");
3210    
3211     printf("<div class=\"visualClear\"></div>");
3212     // Ferme le fieldset content
3213     printf("</div>");
3214     printf("</fieldset>");
3215     }
3216     /**
3217     * Fin Liste des contraintes
3218     */
3219    
3220     /**
3221     * Liste des demandeurs
3222     */
3223     $this->listeDemandeur("dossier", $this->getVal('dossier'));
3224    
3225     if($maj < 2 AND !$this->correct) {
3226     $linkable = true;
3227     } else {
3228     $linkable = false;
3229     }
3230    
3231     // Conteneur de la listes des demandeurs
3232     echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">";
3233     echo "<fieldset id=\"fieldset-form-dossier_instruction-petitionnaire\" class=\"cadre ui-corner-all ui-widget-content startClosed\">";
3234     echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">"
3235     ._("Petitionnaire")."</legend>";
3236     echo "<div class=\"fieldsetContent\" style=\"display: none;\">";
3237    
3238     // Dans tous les modes excepté en ajout et si l'option d'accès au
3239     // portail citoyen est activée
3240     if ($this->getParameter("maj") != 0
3241     && $this->f->is_option_citizen_access_portal_enabled() === true) {
3242     // Instance du dossier d'autorisation
3243     $inst_da = $this->get_inst_dossier_autorisation();
3244     //
3245     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'));
3246     }
3247    
3248     // Si des demandeurs sont liés à la demande
3249     require_once "../obj/petitionnaire.class.php";
3250     require_once "../obj/delegataire.class.php";
3251     // Affichage du bloc pétitionnaire principal / délégataire
3252     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3253     echo "<div id=\"petitionnaire_principal_delegataire col_12\">";
3254     // Affichage de la synthèse
3255     if (isset ($this->valIdDemandeur["petitionnaire_principal"]) AND
3256     !empty($this->valIdDemandeur["petitionnaire_principal"])) {
3257     $demandeur = new petitionnaire(
3258     $this->valIdDemandeur["petitionnaire_principal"],
3259     $this->f->db,false);
3260     $demandeur -> afficherSynthese("petitionnaire_principal", $linkable);
3261     $demandeur -> __destruct();
3262     } elseif ( isset ($this->postedIdDemandeur["petitionnaire_principal"]) AND
3263     !empty($this->postedIdDemandeur["petitionnaire_principal"]) ) {
3264     $demandeur = new petitionnaire(
3265     $this->postedIdDemandeur["petitionnaire_principal"],
3266     $this->f->db,false);
3267     $demandeur -> afficherSynthese("petitionnaire_principal", $linkable);
3268     $demandeur -> __destruct();
3269     }
3270     // Si en édition de formulaire
3271     if($maj < 2 AND $linkable) {
3272     // Bouton d'ajout du pétitionnaire principal
3273     // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3274     echo "<span id=\"add_petitionnaire_principal\"
3275     class=\"om-form-button add-16\">".
3276     _("Saisir le petitionnaire principal").
3277     "</span>";
3278     }
3279     // Bouton d'ajout du delegataire
3280     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3281     echo "<div id=\"delegataire\">";
3282     // Affichage de la synthèse
3283     if (isset ($this->valIdDemandeur["delegataire"]) AND
3284     !empty($this->valIdDemandeur["delegataire"])) {
3285     $demandeur = new delegataire($this->valIdDemandeur["delegataire"],
3286     $this->f->db,false);
3287     $demandeur -> afficherSynthese("delegataire", $linkable);
3288     $demandeur -> __destruct();
3289     } elseif ( isset ($this->postedIdDemandeur["delegataire"]) AND
3290     !empty($this->postedIdDemandeur["delegataire"]) ) {
3291    
3292     $demandeur = new delegataire($this->postedIdDemandeur["delegataire"],
3293     $this->f->db,false);
3294     $demandeur -> afficherSynthese("delegataire", $linkable);
3295     $demandeur -> __destruct();
3296     }
3297     if($maj < 2 AND $linkable) {
3298     echo "<span id=\"add_delegataire\"
3299     class=\"om-form-button add-16\">".
3300     _("Saisir un autre correspondant").
3301     "</span>";
3302     }
3303     echo "</div>";
3304     echo "<div class=\"both\"></div>";
3305     echo "</div>";
3306     // Bloc des pétitionnaires secondaires
3307     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3308     echo "<div id=\"listePetitionnaires col_12\">";
3309    
3310     // Affichage de la synthèse
3311     if (isset ($this->valIdDemandeur["petitionnaire"]) AND
3312     !empty($this->valIdDemandeur["petitionnaire"])) {
3313    
3314     foreach ($this->valIdDemandeur["petitionnaire"] as $petitionnaire) {
3315     $demandeur = new petitionnaire($petitionnaire,
3316     $this->f->db,false);
3317     $demandeur -> afficherSynthese("petitionnaire", $linkable);
3318     $demandeur -> __destruct();
3319     }
3320    
3321     } elseif ( isset ($this->postedIdDemandeur["petitionnaire"]) AND
3322     !empty($this->postedIdDemandeur["petitionnaire"]) ) {
3323     foreach ($this->postedIdDemandeur["petitionnaire"] as $petitionnaire) {
3324     $demandeur = new petitionnaire($petitionnaire,
3325     $this->f->db,false);
3326     $demandeur -> afficherSynthese("petitionnaire", $linkable);
3327     $demandeur -> __destruct();
3328     }
3329     }
3330     if ($maj < 2 AND $linkable) {
3331     // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3332     echo "<span id=\"add_petitionnaire\"
3333     class=\"om-form-button add-16\">".
3334     _("Ajouter un petitionnaire")
3335     ."</span>";
3336     }
3337     echo "</div>";
3338     echo "</div>";
3339     echo "</fieldset>";
3340     echo "</div>";
3341     /**
3342     * Fin liste des demandeurs
3343     */
3344 fmichon 4708
3345     /**
3346     * Interface avec le référentiel ERP.
3347     *
3348     * On affiche le message uniquement si le dossier est connecté.
3349     */
3350     if ($maj == 3 && $this->is_connected_to_referentiel_erp() === true) {
3351     //
3352     printf(
3353     '<div class="col_12">
3354     Ce dossier est connecté au référentiel ERP.
3355     </div>'
3356     );
3357     }
3358    
3359 mbroquet 3730 }
3360    
3361     /**
3362     * Retourne le statut du dossier
3363     * @return string Le statut du dossier d'instruction
3364     */
3365     function getStatut(){
3366    
3367     $statut = '';
3368    
3369     $etat = $this->getVal("etat");
3370     //Si l'état du dossier d'instruction n'est pas vide
3371     if ( $etat != '' ){
3372    
3373     $sql = "SELECT statut
3374     FROM ".DB_PREFIXE."etat
3375     WHERE libelle ='".$etat."'";
3376     $statut = $this->db->getOne($sql);
3377     $this->f->addToLog("getStatut() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
3378     if ( database::isError($statut, true)){
3379     die();
3380     }
3381     }
3382     return $statut;
3383     }
3384    
3385     /**
3386     * Retourne l'identifiant du rapport d'instruction lié du dossier
3387     * @return string L'identifiant du rapport d'instruction lié du dossier
3388     */
3389     function getRapportInstruction(){
3390    
3391     $rapport_instruction = '';
3392    
3393     $sql = "SELECT rapport_instruction
3394     FROM ".DB_PREFIXE."rapport_instruction
3395     WHERE dossier_instruction ='".$this->getVal($this->clePrimaire)."'";
3396     $rapport_instruction = $this->db->getOne($sql);
3397     $this->f->addToLog("getStatut() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
3398     if ( database::isError($rapport_instruction)){
3399     die();
3400     }
3401    
3402     return $rapport_instruction;
3403     }
3404    
3405     /**
3406     * Retourne l'identifiant des données techniques liées du dossier
3407     * @return string L'identifiant des données techniques liées du dossier
3408     */
3409     function getDonneesTechniques(){
3410    
3411     $donnees_techniques = '';
3412    
3413     $sql = "SELECT donnees_techniques
3414     FROM ".DB_PREFIXE."donnees_techniques
3415     WHERE dossier_instruction ='".$this->getVal($this->clePrimaire)."'";
3416     $donnees_techniques = $this->db->getOne($sql);
3417     $this->f->addToLog("getStatut() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
3418     if ( database::isError($donnees_techniques)){
3419     die();
3420     }
3421    
3422     return $donnees_techniques;
3423     }
3424    
3425     /**
3426     * Surcharge du bouton retour afin de retourner sur la recherche de dossiers
3427     * d'instruction existant
3428     */
3429     function retour($premier = 0, $recherche = "", $tricol = "") {
3430    
3431     echo "\n<a class=\"retour\" ";
3432     echo "href=\"";
3433     //
3434     if($this->getParameter("idx_dossier") != "") {
3435     echo "tab.php?";
3436     echo "obj=recherche_dossier";
3437    
3438     } else {
3439     if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
3440     echo "form.php?";
3441     } else {
3442     echo "tab.php?";
3443     }
3444     // Permet de retourner sur la bonne page
3445     if ($this->f->get_submitted_get_value('retourformulaire') !== null && $this->f->get_submitted_get_value('retourformulaire') != '') {
3446     echo "obj=".$this->f->get_submitted_get_value('retourformulaire');
3447     } else {
3448     echo "obj=".get_class($this);
3449     }
3450     if ($this->f->get_submitted_get_value('retourformulaire2') !== null && $this->f->get_submitted_get_value('retourformulaire2') != '') {
3451     echo "&retourformulaire=".$this->f->get_submitted_get_value('retourformulaire2');
3452     }
3453     if($this->getParameter("retour")=="form") {
3454     echo "&amp;idx=".$this->getParameter("idx");
3455     echo "&amp;idz=".$this->getParameter("idz");
3456     echo "&amp;action=3";
3457     }
3458     }
3459     echo "&amp;premier=".$this->getParameter("premier");
3460     echo "&amp;tricol=".$this->getParameter("tricol");
3461     echo "&amp;recherche=".$this->getParameter("recherche");
3462     echo "&amp;selectioncol=".$this->getParameter("selectioncol");
3463     echo "&amp;advs_id=".$this->getParameter("advs_id");
3464     echo "&amp;valide=".$this->getParameter("valide");
3465     //
3466     echo "\"";
3467     echo ">";
3468     //
3469     echo _("Retour");
3470     //
3471     echo "</a>\n";
3472    
3473     }
3474    
3475     /**
3476     * Permet de modifier le fil d'Ariane
3477     * @param string $ent Fil d'Ariane
3478     * @param array $val Valeurs de l'objet
3479     * @param intger $maj Mode du formulaire
3480     */
3481     function getFormTitle($ent) {
3482    
3483     // Fil d'Ariane
3484     $ent = _("instruction")." -> "._("dossiers d'instruction");
3485    
3486     // Si différent de l'ajout
3487     if($this->getParameter("maj") != 0) {
3488     // Si le champ dossier_libelle existe
3489     if (trim($this->getVal("dossier_libelle")) != '') {
3490     $ent .= " -> ".strtoupper($this->getVal("dossier_libelle"));
3491     }
3492     // Si le champ dossier existe
3493     if (trim($this->getVal("dossier")) != '') {
3494     $demandeur = $this->get_demandeur($this->getVal("dossier"));
3495     // Si le demandeur existe
3496     if (isset($demandeur) && trim($demandeur) != '') {
3497     $ent .= " ".mb_strtoupper($demandeur, "UTF-8");
3498     }
3499     }
3500     }
3501    
3502     // Change le fil d'Ariane
3503     return $ent;
3504     }
3505    
3506     /**
3507     * Récupère le demandeur du dossier
3508     * @return string Identifiant du dossier
3509     */
3510     private function get_demandeur($dossier) {
3511    
3512     // init de la variable de retour
3513     $demandeur = '';
3514    
3515     // Requête SQL
3516     $sql = "SELECT
3517     CASE WHEN demandeur.qualite='particulier'
3518     THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
3519     ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
3520     END as demandeur
3521     FROM ".DB_PREFIXE."dossier
3522     LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur
3523     ON lien_dossier_demandeur.dossier=dossier.dossier
3524     AND lien_dossier_demandeur.petitionnaire_principal IS TRUE
3525     LEFT JOIN ".DB_PREFIXE."demandeur
3526     ON lien_dossier_demandeur.demandeur=demandeur.demandeur
3527     WHERE dossier.dossier ='".$dossier."'";
3528     $demandeur = $this->db->getOne($sql);
3529     $this->f->addToLog("get_demandeur() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
3530     database::isError($demandeur);
3531    
3532     // Résultat retourné
3533     return $demandeur;
3534     }
3535    
3536     /**
3537     * Récupère la durée de validité
3538     * @param string $dossier_autorisation Identifiant dossier d'autorisation
3539     * @return intger Durée de validité
3540     */
3541     function get_duree_validite($dossier_autorisation) {
3542    
3543     // init de la variable de retour
3544     $duree_validite = "";
3545    
3546     // Récupère le numéro de version
3547     $numeroVersion = $this->getNumeroVersion($dossier_autorisation);
3548    
3549     // Si c'est l'ajout du dossier initial
3550     if ($numeroVersion < 0) {
3551    
3552     // Récupération de la duree de validite depuis la table
3553     // "dossier_autorisation_type_detaille"
3554     $sql = "SELECT duree_validite_parametrage
3555     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
3556     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
3557     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
3558     WHERE dossier_autorisation.dossier_autorisation='".$dossier_autorisation."'";
3559     $duree_validite = $this->db->getOne($sql);
3560     $this->f->addToLog("get_duree_validite(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
3561     database::isError($duree_validite);
3562    
3563     } else {
3564    
3565     // Récupération de la duree de validite depuis le P0
3566     $sql = "SELECT duree_validite
3567     FROM ".DB_PREFIXE."dossier
3568     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
3569     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
3570     WHERE dossier_autorisation.dossier_autorisation='".$dossier_autorisation."'
3571     AND dossier.version = 0";
3572     $duree_validite = $this->db->getOne($sql);
3573     $this->f->addToLog("get_duree_validite(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
3574     database::isError($duree_validite);
3575     }
3576    
3577     // retourne le résultat
3578     return $duree_validite;
3579    
3580     }
3581    
3582     /**
3583     * Ajoute les parcelles du dossier passé en paramètre et met à jour le
3584     * quartier du dossier.
3585     * @param string $dossier Identifiant du dossier
3586     * @param string $terrain_references_cadastrales Références cadastrales du
3587     * dossier
3588     */
3589     function ajouter_dossier_parcelle($dossier, $terrain_references_cadastrales) {
3590    
3591     // Parse les parcelles
3592     $list_parcelles = $this->f->parseParcelles($terrain_references_cadastrales, $this->getVal('om_collectivite'));
3593    
3594     // Fichier requis
3595     require_once "../obj/dossier_parcelle.class.php";
3596    
3597     // A chaque parcelle une nouvelle ligne est créée dans la table
3598     // dossier_parcelle
3599     foreach ($list_parcelles as $parcelle) {
3600    
3601     // Instance de la classe dossier_parcelle
3602     $dossier_parcelle = new dossier_parcelle("]", $this->db, DEBUG);
3603    
3604     // Valeurs à sauvegarder
3605     $value = array(
3606     'dossier_parcelle' => '',
3607     'dossier' => $dossier,
3608     'parcelle' => '',
3609     'libelle' => $parcelle['quartier']
3610     .$parcelle['section']
3611     .$parcelle['parcelle']
3612     );
3613    
3614     // Ajout de la ligne
3615     $dossier_parcelle->ajouter($value, $this->db, DEBUG);
3616     }
3617    
3618     // Si la liste des parcelles n'est pas vide
3619     if (count($list_parcelles) > 0) {
3620    
3621     // Récupère le code impôt de la première référence cadastrale
3622     $quartier_code_impots = $list_parcelles[0]['quartier'];
3623     // Récupère l'identifiant du quartier
3624     $quartier = $this->get_quartier_by_code_impot($quartier_code_impots);
3625    
3626     // Ajoute le quartier au dossier
3627     $this->modifier_quartier_dossier($dossier, $quartier);
3628     }
3629     }
3630    
3631     /**
3632     * Supprime les parcelles du dossier passé en paramètre et met à jour le
3633     * quartier du dossier.
3634     * @param string $dossier Identifiant du dossier
3635     */
3636     function supprimer_dossier_parcelle($dossier) {
3637    
3638     // Suppression des parcelles du dossier
3639     $sql = "DELETE FROM ".DB_PREFIXE."dossier_parcelle
3640     WHERE dossier='".$dossier."'";
3641     $res = $this->db->query($sql);
3642     $this->addToLog("supprimer_dossier_parcelle() db->query(\"".$sql."\");",
3643     VERBOSE_MODE);
3644     database::isError($res);
3645    
3646     // Supprime le quartier dans dossier
3647     $this->modifier_quartier_dossier($dossier);
3648     }
3649    
3650     /**
3651     * Modifie le quartier au dossier.
3652     * @param string $dossier Numéro du dossier
3653     * @param integer $quartier Identifiant du quartier
3654     */
3655     function modifier_quartier_dossier($dossier, $quartier = null) {
3656    
3657     // Valeurs à mettre à jour
3658     $valF = array();
3659     $valF['quartier'] = $quartier;
3660    
3661     // Met à jour le quartier du dossier
3662     $cle = " dossier='".$dossier."'";
3663     $res = $this->db->autoExecute(
3664     DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
3665     $this->addToLog("ajouter_quartier_dossier(): db->autoexecute(\""
3666     .DB_PREFIXE."dossier\", ".print_r($valF, true)
3667     .", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
3668     $this->f->isDatabaseError($res);
3669     }
3670    
3671     /**
3672     * Récupère le quartier par rapport au code impôts.
3673     * @param string $code_impots Code impôts du quartier
3674     *
3675     * @return integer Identifiant du quartier
3676     */
3677     function get_quartier_by_code_impot($code_impots) {
3678    
3679     // Initialisation résultat
3680     $quartier = null;
3681    
3682     // Si la condition n'est pas vide
3683     if ($code_impots != ""
3684     && $code_impots != null) {
3685    
3686     // Requête SQL
3687     $sql = "SELECT quartier
3688     FROM ".DB_PREFIXE."quartier
3689     WHERE code_impots = '".$code_impots."'";
3690     $this->f->addToLog(
3691     "get_quartier_by_code_impots() : db->getOne(\"".$sql."\")",
3692     VERBOSE_MODE);
3693     $quartier = $this->db->getOne($sql);
3694     $this->f->isDatabaseError($quartier);
3695     }
3696    
3697     // Retourne résultat
3698     return $quartier;
3699     }
3700    
3701     /**
3702     * Méthode permettant d'ajouter les données techniques d'un DI.
3703     *
3704     * @param integer $id identifiant de la demande
3705     * @param database &$db handler de la base de donnée
3706     * @param array $val tableau de valeurs postées via le formulaire
3707     * @param boolean $DEBUG debug
3708     *
3709     * @return boolean false si erreur
3710     */
3711     function ajoutDonneesTechniquesDI($id, &$db, $val, $DEBUG) {
3712    
3713     //On vérifie que le dossier d'autorisation a des données techniques
3714     $sql = "SELECT * "
3715     ."FROM ".DB_PREFIXE."donnees_techniques "
3716     ."WHERE dossier_autorisation = '".$this->valF["dossier_autorisation"]."'";
3717     $dtda = $this->db->query($sql);
3718     $this->addToLog(__METHOD__."(): db->query(\"".$sql."\")", VERBOSE_MODE);
3719     if($this->f->isDatabaseError($dtda, true)){
3720     $this->f->addToLog(__METHOD__."() : ERROR - Erreur de base de données. Impossible d'ajouter les données techniques du dossier d'instruction.", DEBUG_MODE);
3721     return false;
3722     }
3723    
3724     //Si le dossier d'autorisation a des données techniques
3725     if ( $dtda->numrows() == 1 ){
3726     //
3727     require_once '../obj/donnees_techniques.class.php';
3728     $dtdi = new donnees_techniques(']', $db, $DEBUG);
3729     //Préparation des données
3730     $valF = $dtda->fetchRow(DB_FETCHMODE_ASSOC);
3731     //Suppression de l'identifiant
3732     $valF["donnees_techniques"] = null;
3733     // Ajout du numéro de dossier d'instruction
3734     $valF['dossier_instruction'] = $this->valF['dossier'];
3735     // Suppression du numéro de dossier d'autorisation
3736     $valF['dossier_autorisation'] = null;
3737     // Ajout des données techniques
3738     if($dtdi->ajouter($valF, $db, $DEBUG) === false) {
3739     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du dossier d'instruction.", DEBUG_MODE);
3740     return false;
3741     }
3742     }
3743     else {
3744     //Le dossier d'autorisation n'a pas de données techniques
3745     $this->f->addToLog(__METHOD__."() : ERROR - le DA n'a pas de données techniques.", DEBUG_MODE);
3746     return -1;
3747     }
3748    
3749     //
3750     return true;
3751     }
3752    
3753     /**
3754     * VIEW - contrainte.
3755     *
3756     * Vue des contraintes du dossier
3757     *
3758     * Cette vue permet de gérer le contenu de l'onglet "Contrainte(s)" sur un
3759     * dossier. Cette vue spécifique est nécessaire car l'ergonomie standard du
3760     * framework ne prend pas en charge ce cas.
3761     * C'est ici la vue spécifique des contraintes liées au dossier qui est
3762     * affichée directement au clic de l'onglet au lieu du soustab.
3763     *
3764     * L'idée est donc de simuler l'ergonomie standard en créant un container
3765     * et d'appeler la méthode javascript 'ajaxit' pour charger le contenu
3766     * de la vue visualisation de l'objet lié.
3767     *
3768     * @return void
3769     */
3770     function view_contrainte() {
3771     // Vérification de l'accessibilité sur l'élément
3772     $this->checkAccessibility();
3773     // Récupération des variables GET
3774     ($this->f->get_submitted_get_value('idxformulaire')!==null ? $idxformulaire =
3775     $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = "");
3776     ($this->f->get_submitted_get_value('retourformulaire')!==null ? $retourformulaire =
3777     $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = "");
3778     // Objet à charger
3779     $obj = "dossier_contrainte";
3780     // Construction de l'url de sousformulaire à appeler
3781     $url = "../scr/sousform.php?obj=".$obj;
3782     $url .= "&idx=".$idxformulaire;
3783     $url .= "&action=4";
3784     $url .= "&retourformulaire=".$retourformulaire;
3785     $url .= "&idxformulaire=".$idxformulaire;
3786     $url .= "&retour=form";
3787     // Affichage du container permettant le reffraichissement du contenu
3788     // dans le cas des action-direct.
3789     printf('
3790     <div id="sousform-href" data-href="%s">
3791     </div>',
3792     $url
3793     );
3794     // Affichage du container permettant de charger le retour de la requête
3795     // ajax récupérant le sous formulaire.
3796     printf('
3797     <div id="sousform-%s">
3798     </div>
3799     <script>
3800     ajaxIt(\'%s\', \'%s\');
3801     </script>',
3802     $obj,
3803     $obj,
3804     $url
3805     );
3806     }
3807    
3808     /**
3809     * Cette methode permet d'afficher le bouton de validation du formulaire
3810     *
3811     * @param integer $maj Mode de mise a jour
3812     * @return void
3813     */
3814     function bouton($maj) {
3815    
3816     if (!$this->correct
3817     && $this->checkActionAvailability() == true) {
3818     //
3819     switch($maj) {
3820     case 0 :
3821     $bouton = _("Ajouter");
3822     break;
3823     case 1 :
3824     $bouton = _("Modifier");
3825     break;
3826     case 2 :
3827     $bouton = _("Supprimer");
3828     break;
3829     default :
3830     // Actions specifiques
3831     if ($this->get_action_param($maj, "button") != null) {
3832     //
3833     $bouton = $this->get_action_param($maj, "button");
3834     } else {
3835     //
3836     $bouton = _("Valider");
3837     }
3838     break;
3839     }
3840     //
3841     $params = array(
3842     "value" => $bouton,
3843     "name" => "submit",
3844     "onclick"=>"return getDataFieldReferenceCadastrale();",
3845     );
3846     //
3847     $this->f->layout->display_form_button($params);
3848     }
3849    
3850     }
3851    
3852     /**
3853     * Récupère l'instance de la classe taxe_amenagement.
3854     *
3855     * @param integer $taxe_amenagement Identifiant
3856     *
3857     * @return object
3858     */
3859     function get_inst_taxe_amenagement($taxe_amenagement = null) {
3860     //
3861     if (is_null($this->inst_taxe_amenagement)) {
3862     //
3863     if (is_null($taxe_amenagement)) {
3864     $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($this->getVal('om_collectivite'));
3865     }
3866     //
3867     require_once "../obj/taxe_amenagement.class.php";
3868     $this->inst_taxe_amenagement = new taxe_amenagement($taxe_amenagement);
3869     }
3870     //
3871     return $this->inst_taxe_amenagement;
3872     }
3873    
3874     /**
3875     * Récupère l'identifiant de la taxe d'aménagement par rapport à la collectivité.
3876     *
3877     * @param integer $om_collectivite La collectivité
3878     *
3879     * @return integer
3880     */
3881     function get_taxe_amenagement_by_om_collectivite($om_collectivite) {
3882     // Si la collectivité n'est pas renseigné
3883     if (empty($om_collectivite) == true) {
3884     //
3885     $om_collectivite = 0;
3886     }
3887    
3888     //
3889     $sql = "SELECT taxe_amenagement
3890     FROM ".DB_PREFIXE."taxe_amenagement
3891     WHERE om_collectivite = ".intval($om_collectivite);
3892     $collectivite = $this->f->db->getOne($sql);
3893     $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
3894     $this->f->isDatabaseError($collectivite);
3895    
3896     //
3897     return $collectivite;
3898     }
3899    
3900     /**
3901     * [get_inst_donnees_techniques description]
3902     *
3903     * @param [type] $donnees_techniques [description]
3904     *
3905     * @return [type] [description]
3906     */
3907     function get_inst_donnees_techniques($donnees_techniques = null) {
3908     //
3909     if (is_null($this->inst_donnees_techniques)) {
3910     //
3911     if (is_null($donnees_techniques)) {
3912     $donnees_techniques = $this->getDonneesTechniques();
3913     }
3914     //
3915     require_once "../obj/donnees_techniques.class.php";
3916     $this->inst_donnees_techniques = new donnees_techniques($donnees_techniques);
3917     }
3918     //
3919     return $this->inst_donnees_techniques;
3920     }
3921    
3922    
3923     /**
3924     * Récupère l'instance du dossier d'autorisation.
3925     *
3926     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
3927     *
3928     * @return object
3929     */
3930 fmichon 4708 function get_inst_dossier_autorisation($dossier_autorisation = null) {
3931 mbroquet 3730 //
3932     return $this->get_inst_common("dossier_autorisation", $dossier_autorisation);
3933     }
3934    
3935    
3936     /**
3937     * Récupère l'instance du dossier d'autorisation, puis la clé d'accès au portail
3938     * citoyen associée à ce DA.
3939     *
3940     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
3941     *
3942     * @return string $cle_acces_citoyen si la clé d'accès existe
3943     * boolean false si la clé n'existe pas
3944     */
3945     protected function get_citizen_access_key($dossier_autorisation = null) {
3946     //
3947     $inst_da = $this->get_inst_dossier_autorisation($dossier_autorisation);
3948     // Récupération de la valeur de la clé d'accès
3949     $cle_acces_citoyen = $inst_da->getVal('cle_acces_citoyen');
3950     if ($cle_acces_citoyen === '' OR $cle_acces_citoyen === null) {
3951     return false;
3952     }
3953     return $cle_acces_citoyen;
3954     }
3955    
3956    
3957     /**
3958     * Récupère l'instance du type détaillé du dossier d'autorisation.
3959     *
3960     * @param integer $dossier_autorisation_type_detaille Identifiant
3961     *
3962     * @return object
3963     */
3964     function get_inst_dossier_autorisation_type_detaille($dossier_autorisation_type_detaille = null) {
3965     //
3966     if (is_null($this->inst_dossier_autorisation_type_detaille)) {
3967     //
3968     if (is_null($dossier_autorisation_type_detaille)) {
3969     //
3970     $dossier_autorisation = $this->get_inst_dossier_autorisation();
3971     //
3972     $dossier_autorisation_type_detaille = $dossier_autorisation->getVal('dossier_autorisation_type_detaille');
3973     }
3974     //
3975     require_once "../obj/dossier_autorisation_type_detaille.class.php";
3976     $this->inst_dossier_autorisation_type_detaille = new dossier_autorisation_type_detaille($dossier_autorisation_type_detaille, $this->db, 0);
3977     }
3978     //
3979     return $this->inst_dossier_autorisation_type_detaille;
3980     }
3981    
3982     /**
3983     * Récupère l'instance du cerfa
3984     *
3985     * @param integer $cerfa Identifiant du cerfa
3986     *
3987     * @return object
3988     */
3989     function get_inst_cerfa($cerfa = null) {
3990     //
3991     if (is_null($this->inst_cerfa)) {
3992     //
3993     if (is_null($cerfa)) {
3994     //
3995     $dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
3996     //
3997     $cerfa = $dossier_autorisation_type_detaille->getVal('cerfa');
3998     }
3999     //
4000     require_once "../obj/cerfa.class.php";
4001     $this->inst_cerfa = new cerfa($cerfa, $this->db, 0);
4002     }
4003     //
4004     return $this->inst_cerfa;
4005     }
4006    
4007     /**
4008     * CONDITION - is_user_from_allowed_collectivite.
4009     *
4010     * Cette condition permet de vérifier si l'utilisateur connecté appartient
4011     * à une collectivité autorisée : c'est-à-dire de niveau 2 ou identique à
4012     * la collectivité de l'enregistrement sur lequel on se trouve.
4013     *
4014     * @return boolean
4015     */
4016     function is_user_from_allowed_collectivite() {
4017    
4018     // Si l'utilisateur est de niveau 2
4019     if ($_SESSION["niveau"] == "2") {
4020     // Alors l'utilisateur fait partie d'une collectivité autorisée
4021     return true;
4022     }
4023    
4024     // L'utilisateur est donc de niveau 1
4025     // On vérifie donc si la collectivité de l'utilisateur est la même
4026     // que la collectivité de l'élément sur lequel on se trouve
4027     if ($_SESSION["collectivite"] === $this->getVal("om_collectivite")) {
4028     // Alors l'utilisateur fait partie d'une collectivité autorisée
4029     return true;
4030     }
4031    
4032     // L'utilisateur ne fait pas partie d'une collectivité autorisée
4033     return false;
4034     }
4035    
4036     /**
4037     * Création ou mise à jour du répertoire de numérisation.
4038     *
4039     * L'objet de cette méthode est la création ou la mise à jour de la date de
4040     * modification du répertoire de numérisation destiné à recevoir les pièces
4041     * numérisées pour un import automatique.
4042     * À chaque saisie d'une nouvelle demande dans openADS, le répertoire est
4043     * soit créé soit mis à jour pour être disponible en dehors d'openADS
4044     * (point de montage sur le serveur) pour permettre de déposer les pièces
4045     * numérisées directement depuis le copieur. À intervalle régulier, un
4046     * service vérifie le contenu de ces répertoire pour importer
4047     * automatiquement ces fichiers dans l'onglet 'Pièce(s)' du dossier
4048     * concerné.
4049     * La mise à jour de la date de modification est importante pour réaliser
4050     * la purge des répertoires vides sur la base de la date de la dernière
4051     * demande qui concerne le dossier.
4052     *
4053     * @return boolean
4054     */
4055     function create_or_touch_digitalization_folder() {
4056    
4057     // Nom du répertoire
4058     // Le répertoire créé possède comme nom le libellé du dossier avec
4059     // le suffixe séparé par un '.'. Exemple : PC0130551601234.P0
4060 nmeucci 4526 $separateur = '';
4061     if ($this->getSuffixe($this->getVal('dossier_instruction_type')) === 't') {
4062     $separateur = '.';
4063     }
4064    
4065 mbroquet 3730 $digitalization_folder_name = str_replace(
4066     $this->getVal("dossier_autorisation"),
4067 nmeucci 4526 $this->getVal("dossier_autorisation").$separateur,
4068 mbroquet 3730 $this->getVal($this->clePrimaire)
4069     );
4070    
4071     // Vérifie que l'option de numérisation des dossiers est désactivée
4072     if ($this->f->is_option_digitalization_folder_enabled() !== true) {
4073     //
4074     $this->addToLog(
4075     _("L'option de numerisation des dossiers n'est pas activee").".",
4076     DEBUG_MODE
4077     );
4078     return false;
4079     }
4080    
4081     // Vérifie le paramétrage du répertoire de numérisation
4082     if ($this->f->getParameter("digitalization_folder_path") === null) {
4083     //
4084     $this->addToLog(
4085     "Configuration du répertoire de numérisation incorrecte.",
4086     DEBUG_MODE
4087     );
4088     return false;
4089     }
4090    
4091     // Répertoire cible
4092     $root_folder_path = $this->f->getParameter("digitalization_folder_path");
4093    
4094     // Vérifie que le répertoire existe
4095     if (is_dir($root_folder_path) !== true) {
4096     //
4097     $this->addToLog(
4098     sprintf(
4099     "Le répertoire '%s' n'existe pas.",
4100     $root_folder_path
4101     ),
4102     DEBUG_MODE
4103     );
4104     return false;
4105     }
4106    
4107     // Répertoire des "à traiter"
4108     $todo_folder_path = $root_folder_path."Todo/";
4109    
4110     // Vérifie que le répertoire existe
4111     if (is_dir($todo_folder_path) !== true) {
4112     //
4113     $this->addToLog(
4114     sprintf(
4115     "Le répertoire '%s' n'existe pas.",
4116     $todo_folder_path
4117     ),
4118     DEBUG_MODE
4119     );
4120     return false;
4121     }
4122    
4123     // Répertoire de numérisation.
4124     $digitalization_folder_path = $todo_folder_path.$digitalization_folder_name;
4125    
4126     // Si le répertore existe déjà le répertoire n'est pas créé
4127     if (file_exists($digitalization_folder_path) == true) {
4128     // Mise à jour du répertoire
4129     if (touch($digitalization_folder_path) !== true) {
4130     // Si une erreur survient
4131     $this->addToLog(
4132     sprintf(
4133     "Erreur lors de la mise à jour du répertoire '%s'.",
4134     $digitalization_folder_path
4135     ),
4136     DEBUG_MODE
4137     );
4138     return false;
4139     }
4140     //
4141     return true;
4142     } else {
4143     // Création du répertoire
4144     if (mkdir($digitalization_folder_path) !== true) {
4145     //
4146     $this->addToLog(
4147     sprintf(
4148     "Erreur lors de la création du répertoire '%s'.",
4149     $digitalization_folder_path
4150     ),
4151     DEBUG_MODE
4152     );
4153     return false;
4154     }
4155     //
4156     return true;
4157     }
4158     }
4159    
4160 nmeucci 3876 /**
4161     * Récupère, convertit et retourne les logs de toutes les instructions
4162     *
4163     * @return array tableau indexé de logs
4164     */
4165     public function get_log_instructions() {
4166     $log_instructions = $this->getVal('log_instructions');
4167     // Gestion du premier log
4168 nmeucci 3887 if ($log_instructions === '') {
4169 nmeucci 3876 $log_instructions = json_encode(array());
4170     }
4171 nmeucci 3887 // Gestion du log invalide
4172     if(!$this->isJson($log_instructions)) {
4173     return false;
4174     }
4175 nmeucci 3876 return json_decode($log_instructions, true);
4176     }
4177    
4178     /**
4179     * Ajoute un log d'instruction aux logs existants
4180     *
4181     * @param array $log valeurs de l'instruction
4182     * @return bool vrai si traitement effectué avec succès
4183     */
4184     public function add_log_instructions($log) {
4185     // Begin
4186     $this->begin_treatment(__METHOD__);
4187     // Ajout du log
4188     $log_instructions = $this->get_log_instructions();
4189 nmeucci 3887 if ($log_instructions === false) {
4190     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
4191     return $this->end_treatment(__METHOD__, false);
4192     }
4193 nmeucci 3876 array_push($log_instructions, $log);
4194 nmeucci 3907 $log_instructions = json_encode($log_instructions);
4195 nmeucci 3876 // Mise à jour du DI
4196     $val = array("log_instructions"=>$log_instructions);
4197     $ret = $this->f->db->autoExecute(
4198     DB_PREFIXE."dossier",
4199     $val,
4200     DB_AUTOQUERY_UPDATE,
4201     "dossier = '".$this->getVal('dossier')."'");
4202     if (database::isError($ret, true)) {
4203     $this->erreur_db($ret->getDebugInfo(), $ret->getMessage(), 'dossier');
4204     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
4205     return $this->end_treatment(__METHOD__, false);
4206     }
4207     return $this->end_treatment(__METHOD__, true);
4208     }
4209    
4210 nmeucci 3887 /**
4211     * Vérifie qu'une chaîne est au format json
4212     *
4213     * @param string $text chaîne à analyser
4214     * @return boolean vrai si formatée json
4215     */
4216     function isJson($text) {
4217     json_decode($text);
4218     return (json_last_error() == JSON_ERROR_NONE);
4219     }
4220    
4221 fmichon 4708 /**
4222     * TREATMENT - mark_as_connected_to_referentiel_erp.
4223     *
4224     * Cette méthode permet de positionner le marqueur
4225     * 'interface_referentiel_erp' à 'true'. Cela signifie que le dossier est
4226     * connecté au référentiel ERP.
4227     *
4228     * @return boolean
4229     */
4230     function mark_as_connected_to_referentiel_erp() {
4231     //
4232     $this->begin_treatment(__METHOD__);
4233     //
4234     $data = array("interface_referentiel_erp" => true, );
4235     // Exécution de la requête
4236     $res = $this->f->db->autoExecute(
4237     DB_PREFIXE.$this->table,
4238     $data,
4239     DB_AUTOQUERY_UPDATE,
4240     $this->getCle($this->getVal($this->clePrimaire))
4241     );
4242     // Logger
4243     $this->addToLog(
4244     __METHOD__."(): db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($data, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($this->getVal($this->clePrimaire))."\");",
4245     VERBOSE_MODE
4246     );
4247     //
4248     if ($this->f->isDatabaseError($res, true)) {
4249     // Appel de la methode de recuperation des erreurs
4250     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
4251     $this->correct = false;
4252     $this->addToLog(
4253     __METHOD__."(): Problème erreur lors de la mise à jour du dossier",
4254     DEBUG_MODE
4255     );
4256     // Termine le traitement
4257     return $this->end_treatment(__METHOD__, false);
4258     }
4259     //
4260     $this->addToMessage(_("Le dossier est désormais 'connecté avec le référentiel ERP'."));
4261     return $this->end_treatment(__METHOD__, true);
4262     }
4263 nmeucci 3887
4264 fmichon 4708 /**
4265     * CONDITION - is_connected_to_referentiel_erp.
4266     *
4267     * @return boolean
4268     */
4269     function is_connected_to_referentiel_erp() {
4270     //
4271     if ($this->getVal("interface_referentiel_erp") !== "t") {
4272     return false;
4273     }
4274     //
4275     return true;
4276     }
4277    
4278 nhaye 4777
4279 fmichon 4708 /**
4280 nhaye 4777 * Retourne les données techniques applicables au dossier courant, càd les données
4281     * techniques liées au dossier avec seulement les champs du CERFA associé au type de
4282     * dossier.
4283     *
4284     * @return array $donnees_techniques_applicables Tableau associatif contenant
4285     * seulement les données techniques
4286     * applicables au dossier.
4287     */
4288     public function get_donnees_techniques_applicables() {
4289    
4290     // Récupération de l'identifiant des données techniques liées au dossier
4291     $donnees_techniques = $this->getDonneesTechniques();
4292    
4293     $inst_donnees_techniques = $this->get_inst_common('donnees_techniques', $donnees_techniques);
4294     $donnees_techniques_applicables = $inst_donnees_techniques->get_donnees_techniques_applicables();
4295     //
4296     return $donnees_techniques_applicables;
4297    
4298     }
4299    
4300    
4301     /**
4302 fmichon 4708 * Retourne un tableau avec les données du dossier d'instruction.
4303     *
4304     * L'objectif est de mettre à disposition via un WS Reste un ensemble
4305     * de données exploitable par une autre application.
4306     */
4307     function get_datas() {
4308    
4309     /**
4310     *
4311     */
4312 nhaye 4777
4313     $om_collectivite = $this->get_inst_common('om_collectivite', $this->getVal('om_collectivite'));
4314     $instructeur = $this->get_inst_common('instructeur', $this->getVal('instructeur'));
4315     $division = $this->get_inst_common('division', $this->getVal('division'));
4316     $dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
4317     $dossier_autorisation_type = $this->get_inst_common('dossier_autorisation_type', $dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
4318     $donnees_techniques = $this->get_donnees_techniques_applicables();
4319    
4320 fmichon 4708 //
4321     $datas = array(
4322     //
4323     "dossier_instruction" => $this->getVal($this->clePrimaire),
4324     //
4325     "dossier_autorisation" => $this->getVal("dossier_autorisation"),
4326     //
4327     "terrain_adresse_voie_numero" => $this->getVal("terrain_adresse_voie_numero"),
4328     "terrain_adresse_lieu_dit" => $this->getVal("terrain_adresse_lieu_dit"),
4329     "terrain_adresse_code_postal" => $this->getVal("terrain_adresse_code_postal"),
4330     "terrain_adresse_cedex" => $this->getVal("terrain_adresse_cedex"),
4331     "terrain_adresse_voie" => $this->getVal("terrain_adresse_voie"),
4332     "terrain_adresse_bp" => $this->getVal("terrain_adresse_bp"),
4333     "terrain_adresse_localite" => $this->getVal("terrain_adresse_localite"),
4334     "terrain_superficie" => $this->getVal("terrain_superficie"),
4335     //
4336     "references_cadastrales" => $this->f->parseParcelles($this->getVal("terrain_references_cadastrales"), $this->getVal('om_collectivite')),
4337 nhaye 4777 "dossier_autorisation_type" => $dossier_autorisation_type->getVal("libelle"),
4338     "dossier_autorisation_type_detaille" => $dossier_autorisation_type_detaille->getVal("libelle"),
4339     "collectivite" => $om_collectivite->getVal("libelle"),
4340     "instructeur" => $instructeur->getVal("nom"),
4341     "division" => $division->getVal("libelle"),
4342     "etat_dossier" => $this->getVal("etat"),
4343     "statut_dossier" => $this->getStatut(),
4344     "date_depot_initial" => $this->getVal("date_depot"),
4345     "date_limite_instruction" => $this->getVal("date_limite"),
4346     "date_decision" => $this->getVal("date_decision"),
4347     "enjeu_urbanisme" => $this->getVal("enjeu_urba") == 't' ? 'true' : 'false',
4348     "enjeu_erp" => $this->getVal("enjeu_erp") == 't' ? 'true' : 'false',
4349 fmichon 4708 );
4350    
4351     /**
4352     * Gestion des demandeurs
4353     *
4354     * - 'petitionnaire_principal' (obigatoire)
4355     * - 'delegataire' (facultatif)
4356     * - 'autres_petitionnaires' (facultatif)
4357     */
4358     //
4359     $this->listeDemandeur('dossier', $this->getVal($this->clePrimaire));
4360     //
4361     require_once "../obj/petitionnaire.class.php";
4362     require_once "../obj/delegataire.class.php";
4363     //
4364     $demandeur = new petitionnaire($this->valIdDemandeur["petitionnaire_principal"], $this->f->db, false);
4365     $datas["petitionnaire_principal"] = $demandeur->get_datas();
4366     $demandeur->__destruct();
4367     //
4368     if (isset($this->valIdDemandeur["delegataire"]) && !empty($this->valIdDemandeur["delegataire"])) {
4369     $demandeur = new delegataire($this->valIdDemandeur["delegataire"], $this->f->db, false);
4370     $datas["delegataire"] = $demandeur->get_datas();
4371     $demandeur->__destruct();
4372     }
4373     //
4374     if (isset($this->valIdDemandeur["petitionnaire"]) AND !empty($this->valIdDemandeur["petitionnaire"])) {
4375     $datas["autres_petitionnaires"] = array();
4376     foreach ($this->valIdDemandeur["petitionnaire"] as $petitionnaire) {
4377     $demandeur = new petitionnaire($petitionnaire, $this->f->db, false);
4378     $datas["autres_petitionnaires"][] = $demandeur->get_datas();
4379     $demandeur->__destruct();
4380     }
4381     }
4382    
4383 nhaye 4777 // Tableau contenant le nom de chaque champ de données techniques à retourner
4384     $dt_a_afficher = array(
4385     "co_tot_log_nb",
4386     "co_cstr_exist",
4387     "co_uti_pers",
4388     "co_uti_vente",
4389     "co_uti_loc",
4390     "su_tot_shon_tot",
4391     "su_avt_shon_tot",
4392     "am_lot_max_nb",
4393     "am_empl_nb",
4394     );
4395    
4396 jymadier 4785 // Tableau associatif contenant les données techniques voulues
4397     $tab_donnees_techniques = array();
4398 nhaye 4777 foreach ($dt_a_afficher as $key) {
4399     // On ajoute le champ de données techniques dans le retour seulement s'il
4400     // existe dans $donnees_techniques (s'il est applicable au dossier)
4401 jymadier 4785 if (array_key_exists($key, $donnees_techniques) === true) {
4402 nhaye 4777 if ($donnees_techniques[$key] === 't') {
4403     $donnees_techniques[$key] = 'true';
4404     };
4405     if ($donnees_techniques[$key] === 'f') {
4406     $donnees_techniques[$key] = 'false';
4407     };
4408 jymadier 4785 $tab_donnees_techniques[$key] = $donnees_techniques[$key];
4409 nhaye 4777 };
4410     };
4411    
4412 jymadier 4785 $datas['donnees_techniques'] = $tab_donnees_techniques;
4413 fmichon 4708 /**
4414     *
4415     */
4416     //
4417     return $datas;
4418     }
4419    
4420 nhaye 4777
4421 mbroquet 3730 }
4422    
4423     ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26