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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6052 - (hide annotations)
Thu Feb 9 12:32:54 2017 UTC (7 years, 11 months ago) by nhaye
File size: 206633 byte(s)
Envoi du libellé de la compétence au référentiel ERP

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26