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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5275 - (hide annotations)
Mon Nov 28 14:44:18 2016 UTC (8 years, 2 months ago) by jymadier
File size: 206031 byte(s)
Correction d'une faute d'orthographe dans un commentaire de méthode

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 fmichon 4708 //
2665     $infos = array(
2666     "dossier_instruction" => $this->valF['dossier'],
2667     "competence" => ($this->valF['autorite_competente'] === null ? "" : $this->valF['autorite_competente']),
2668 softime 4740 "contraintes_plu" => $contraintes_plu_string,
2669 fmichon 4708 "references_cadastrales" => $this->getReferenceCadastrale($this->valF['dossier']),
2670     );
2671     //
2672     $ret = $this->f->send_message_to_referentiel_erp(101, $infos);
2673     if ($ret !== true) {
2674     $this->cleanMessage();
2675     $this->addToMessage(_("Une erreur s'est produite lors de la notification (101) du référentiel ERP. Contactez votre administrateur."));
2676     return false;
2677 mbroquet 3730 }
2678 fmichon 4708 $this->addToMessage(_("Notification (101) du référentiel ERP OK."));
2679     }
2680 mbroquet 3730
2681 fmichon 4708 /**
2682     * Interface avec le référentiel ERP.
2683     *
2684     * (WS->ERP)[102] Demande de complétude de dossier PC pour un ERP -> PC qui concerne un ERP
2685     * (WS->ERP)[103] Demande de qualification de dossier PC pour un ERP -> PC qui concerne un ERP
2686     * Déclencheur :
2687     * - L'option ERP est activée
2688     * - Le dossier est de type PC
2689     * - Le formulaire de modification du dossier est validé avec le
2690     * marqueur "à qualifier" à "NON" alors qu'il était précédemment à
2691     * "OUI"
2692     * - Le formulaire de modification du dossier est validé avec le
2693     * marqueur "ERP" à "OUI"
2694     */
2695     //
2696     if ($this->f->is_option_referentiel_erp_enabled() === true
2697     && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
2698     && $this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false
2699     && $this->valF['erp'] == true) {
2700     //
2701     $infos = array(
2702     "dossier_instruction" => $this->valF['dossier'],
2703     );
2704     // [102] Demande de complétude de dossier PC pour un ERP
2705     $ret = $this->f->send_message_to_referentiel_erp(102, $infos);
2706     if ($ret !== true) {
2707     $this->cleanMessage();
2708     $this->addToMessage(_("Une erreur s'est produite lors de la notification (102) du référentiel ERP. Contactez votre administrateur."));
2709     return false;
2710     }
2711     $this->addToMessage(_("Notification (102) du référentiel ERP OK."));
2712     // [103] Demande de qualification de dossier PC pour un ERP
2713     $ret = $this->f->send_message_to_referentiel_erp(103, $infos);
2714     if ($ret !== true) {
2715     $this->cleanMessage();
2716     $this->addToMessage(_("Une erreur s'est produite lors de la notification (103) du référentiel ERP. Contactez votre administrateur."));
2717     return false;
2718     }
2719     $this->addToMessage(_("Notification (103) du référentiel ERP OK."));
2720     }
2721    
2722     /**
2723     * Gestion des demandeurs liés.
2724     */
2725 mbroquet 3730 // Ajout ou modification des demandeurs
2726     $this->insertLinkDemandeDemandeur($db, $DEBUG);
2727    
2728 fmichon 4708 /**
2729     * Gestion des références cadastrales / parcelles liées.
2730     */
2731 mbroquet 3730 // Si le champ des références cadastrales n'est pas vide
2732     if ($this->getVal('terrain_references_cadastrales')
2733     != $this->valF['terrain_references_cadastrales']) {
2734    
2735     // On supprime toutes les lignes de la table dossier_parcelle qui
2736     // font référence le dossier en cours de modification
2737     $this->supprimer_dossier_parcelle($val['dossier']);
2738    
2739     // Ajout des parcelles dans la table dossier_parcelle
2740     $this->ajouter_dossier_parcelle($val['dossier'],
2741     $val['terrain_references_cadastrales']);
2742    
2743     }
2744    
2745 fmichon 4708 /**
2746     * Gestion des taxes.
2747     */
2748 mbroquet 3730 // Si le champ tax_secteur est modifié
2749     if ($this->getVal('tax_secteur') != $this->valF['tax_secteur']) {
2750    
2751     // Valeurs pour le calcul de la taxe d'aménagement
2752     $val = array();
2753     //
2754     if ($this->valF['tax_secteur'] != '') {
2755     // Instance de la classe donnees_techniques
2756     $donnees_techniques = $this->get_inst_donnees_techniques();
2757     //
2758     $val = $donnees_techniques->get_form_val();
2759     }
2760    
2761     // Met à jour les montants du dossier
2762     if ($this->update_dossier_tax_mtn($this->valF['tax_secteur'], $val) == false) {
2763     //
2764     $this->addToMessage(_("La mise a jour des montants de la simulation de la taxe d'amenagement a echouee."));
2765     return false;
2766     }
2767     }
2768    
2769     //
2770     return true;
2771     }
2772    
2773     /**
2774     * Met à jour les montants de la taxe d'aménagement du dossier d'instruction.
2775     *
2776     * @param integer $tax_secteur Secteur communal
2777     * @param array $val Tableau des valeurs
2778     *
2779     * @return boolean
2780     */
2781     function update_dossier_tax_mtn($tax_secteur, $val = array()) {
2782     // Instance du paramétrage de la taxe d'aménagement
2783     $taxe_amenagement = $this->get_inst_taxe_amenagement();
2784    
2785     // Si le tableau des valeurs est vide
2786     if (empty($val)) {
2787     //
2788     $valF = array();
2789     $valF['tax_mtn_part_commu'] = null;
2790     $valF['tax_mtn_part_depart'] = null;
2791     $valF['tax_mtn_part_reg'] = null;
2792     $valF['tax_mtn_total'] = null;
2793    
2794     } else {
2795     // Calcul des parts
2796     $calcul = $taxe_amenagement->calcul($tax_secteur, $val);
2797    
2798     // Total des parts
2799     $total = $calcul['commu'] + $calcul['depart'] + $calcul['reg'];
2800    
2801     // Valeurs à mettre à jour, les montants doivent être à l'entier inférieur
2802     $valF = array();
2803     $valF['tax_mtn_part_commu'] = floor($calcul['commu']);
2804     $valF['tax_mtn_part_depart'] = floor($calcul['depart']);
2805     $valF['tax_mtn_part_reg'] = floor($calcul['reg']);
2806     $valF['tax_mtn_total'] = floor($total);
2807     }
2808    
2809     // Met à jour l'enregistrement de dossier
2810     $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF, DB_AUTOQUERY_UPDATE, $this->clePrimaire ."='".$this->getVal($this->clePrimaire)."'");
2811     // Log
2812     $this->f->addToLog(__METHOD__."() : db->autoExecute(".$res.")", VERBOSE_MODE);
2813     //
2814     if ($this->f->isDatabaseError($res, true)) {
2815     //
2816     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
2817     $this->correct = false;
2818     return false;
2819     }
2820    
2821     //
2822     return true;
2823     }
2824    
2825     /**
2826     * Ne servira surement pas mais dans le doute autant recalculer les données du DA
2827     */
2828     function triggersupprimerapres($id,&$db,$val,$DEBUG) {
2829     // Mise à jour des données du dossier d'autorisation
2830     require_once "../obj/dossier_autorisation.class.php";
2831     $da = new dossier_autorisation($this->valF["dossier_autorisation"], $this->db, DEBUG);
2832     $da->majDossierAutorisation();
2833    
2834     // On supprime toutes les lignes de la table dossier_parcelle qui
2835     // font référence le dossier en cours de suppression
2836     $this->supprimer_dossier_parcelle($this->valF['dossier']);
2837    
2838     }
2839    
2840    
2841     /**
2842     * Retourne la reference cadastrale de la demande attache a un dossier ERP
2843     * specifique
2844     * @param string $dossier L'identifiant du dossier
2845     * @return string|null La reference cadastrale si elle est trouve,
2846     * sinon NULL. En cas d'erreur de la BD, l'execution s'arrete.
2847     */
2848     function getReferenceCadastrale($dossier) {
2849     $sql = "SELECT terrain_references_cadastrales FROM ".DB_PREFIXE."demande WHERE dossier_instruction = '" . $dossier . "'";
2850     $res = $this->db->limitquery($sql, 0, 1);
2851     $this->addToLog("getReferenceCadastrale(): db->limitquery(\"".
2852     str_replace(",",", ",$sql)."\", 0, 1);", VERBOSE_MODE);
2853     // Si une erreur survient on die
2854     if (database::isError($res, true)) {
2855     // Appel de la methode de recuperation des erreurs
2856     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), 'demande');
2857     }
2858     // retourne la nature du dossier
2859     while ($row =& $res->fetchRow()) {
2860     return $row[0];
2861     }
2862     // la nature n'etait pas trouve, ce qui ne devrait pas se passer
2863     return NULL;
2864     }
2865    
2866     /**
2867     * Gestion des liens entre la demande et les demandeurs recemment ajoutés
2868     **/
2869     function insertLinkDemandeDemandeur($db, $DEBUG) {
2870     //
2871     require_once "../obj/lien_dossier_demandeur.class.php";
2872     // Sippression des anciens demandeurs
2873     $this->deleteLinkDossierDemandeur($db, $DEBUG);
2874    
2875     // Ajout du pétitionnaire principal
2876     if(!empty($this->postedIdDemandeur['petitionnaire_principal'])) {
2877     $this->addLinkDossierDemandeur($this->postedIdDemandeur['petitionnaire_principal'], true, $db, $DEBUG);
2878     }
2879    
2880     // Ajout du délégataire
2881     if(!empty($this->postedIdDemandeur['delegataire'])) {
2882     $this->addLinkDossierDemandeur($this->postedIdDemandeur['delegataire'], false, $db, $DEBUG);
2883     }
2884    
2885     // Ajout des pétitionnaires
2886     if(isset($this->postedIdDemandeur['petitionnaire'])) {
2887     // Ajout des nouveaux liens
2888     foreach ($this->postedIdDemandeur['petitionnaire'] as $petitionnaire) {
2889     $this->addLinkDossierDemandeur($petitionnaire, false, $db, $DEBUG);
2890     }
2891     }
2892     }
2893    
2894    
2895     /**
2896     * Fonction permettant d'ajouter un lien
2897     * entre la table demande et demandeur
2898     **/
2899     function addLinkDossierDemandeur($id, $principal, $db, $DEBUG) {
2900     $lienAjout = new lien_dossier_demandeur(
2901     "]",
2902     $db,
2903     $DEBUG);
2904     $lien = array('lien_dossier_demandeur' => "",
2905     'petitionnaire_principal' => (($principal)?"t":"f"),
2906     'dossier' => $this->valF['dossier'],
2907     'demandeur' => $id);
2908     $lienAjout->ajouter($lien, $db, $DEBUG);
2909     $lienAjout->__destruct();
2910     }
2911    
2912     /**
2913     * Fonction permettant de supprimer un lien
2914     * entre la table demande et demandeur
2915     **/
2916     function deleteLinkDossierDemandeur($db, $DEBUG) {
2917     // Suppression
2918     $sql = "DELETE FROM ".DB_PREFIXE."lien_dossier_demandeur ".
2919     "WHERE dossier='".$this->valF['dossier']."'";
2920     // Execution de la requete de suppression de l'objet
2921     $res = $db->query($sql);
2922     // Logger
2923     $this->f->addToLog("supprimer(): db->query(\"".$sql."\");", VERBOSE_MODE);
2924     if ( database::isError($res)){
2925     die();
2926     }
2927    
2928     }
2929    
2930     /**
2931     * Methode de recupération des valeurs postées
2932     **/
2933     function getPostedValues() {
2934     // Récupération des demandeurs dans POST
2935     if ($this->f->get_submitted_post_value('petitionnaire_principal') !== null OR
2936     $this->f->get_submitted_post_value('delegataire') !== null OR
2937     $this->f->get_submitted_post_value('petitionnaire') !== null) {
2938     if($this->f->get_submitted_post_value('petitionnaire_principal') !== null AND
2939     $this->f->get_submitted_post_value('petitionnaire_principal') != '') {
2940     $this->postedIdDemandeur['petitionnaire_principal'] = $this->f->get_submitted_post_value('petitionnaire_principal');
2941     }
2942     if($this->f->get_submitted_post_value('delegataire') !== null AND
2943     $this->f->get_submitted_post_value('delegataire') != '') {
2944     $this->postedIdDemandeur['delegataire'] = $this->f->get_submitted_post_value('delegataire');
2945     }
2946     if($this->f->get_submitted_post_value('petitionnaire') !== null AND
2947     $this->f->get_submitted_post_value('petitionnaire') != '') {
2948     $this->postedIdDemandeur['petitionnaire'] = $this->f->get_submitted_post_value('petitionnaire');
2949     }
2950     }
2951     }
2952    
2953     /**
2954     * Méthode permettant de récupérer les id des demandeurs liés à la table
2955     * liée passée en paramètre
2956     *
2957     * @param string $from Table liée : "demande", "dossier", dossier_autorisation"
2958     * @param string $id Identifiant (clé primaire de la table liée en question)
2959     */
2960     function listeDemandeur($from, $id) {
2961     // Récupération des demandeurs de la base
2962     $sql = "SELECT demandeur.demandeur,
2963     demandeur.type_demandeur,
2964     lien_".$from."_demandeur.petitionnaire_principal
2965     FROM ".DB_PREFIXE."lien_".$from."_demandeur
2966     INNER JOIN ".DB_PREFIXE."demandeur
2967     ON demandeur.demandeur=lien_".$from."_demandeur.demandeur
2968     WHERE ".$from." = '".$id."'";
2969     $res = $this->f->db->query($sql);
2970     $this->f->addToLog("listeDemandeur(): db->query(\"".$sql."\")", VERBOSE_MODE);
2971     if ( database::isError($res)){
2972     die();
2973     }
2974     // Stockage du résultat dans un tableau
2975     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
2976     if ($row['petitionnaire_principal'] == 't' AND
2977     $row['type_demandeur']=="petitionnaire") {
2978     $this->valIdDemandeur['petitionnaire_principal']=$row['demandeur'];
2979     } elseif ($row['petitionnaire_principal'] == 'f' AND
2980     $row['type_demandeur']=="petitionnaire"){
2981     $this->valIdDemandeur['petitionnaire'][]=$row['demandeur'];
2982     } elseif ($row['type_demandeur']=="delegataire"){
2983     $this->valIdDemandeur['delegataire']=$row['demandeur'];
2984     }
2985     }
2986     }
2987    
2988     /**
2989     * Récupère la liste des contraintes d'un dossier.
2990     *
2991 softime 4740 * @param string $dossier Identifiant du dossier.
2992     * @param boolean $for_di_view Liste avec condition affichage DI.
2993     *
2994 mbroquet 3730 * @return object Résultat de la requête
2995     */
2996 softime 4740 function getListContrainte($dossier, $for_di_view = true) {
2997 mbroquet 3730
2998     // Select
2999     $select = "SELECT dossier_contrainte.dossier_contrainte as dossier_contrainte_id,
3000     dossier_contrainte.texte_complete as dossier_contrainte_texte,
3001     dossier_contrainte.reference as dossier_contrainte_reference,
3002     contrainte.libelle as contrainte_libelle,
3003     contrainte.nature as contrainte_nature,
3004     contrainte.texte as contrainte_texte,
3005     contrainte.reference as contrainte_reference,
3006     lower(contrainte.groupe) as contrainte_groupe,
3007     lower(contrainte.sousgroupe) as contrainte_sousgroupe ";
3008    
3009     // From
3010     $from = " FROM ".DB_PREFIXE."contrainte
3011     LEFT JOIN ".DB_PREFIXE."dossier_contrainte
3012     ON dossier_contrainte.contrainte = contrainte.contrainte ";
3013    
3014     // Where
3015     $where = " WHERE dossier_contrainte.dossier = '".$dossier."' ";
3016    
3017 softime 4740 // Si les contraintes sont listées pour être affichées dans le DI
3018     if ($for_di_view === true) {
3019     // Si le paramètre "option_contrainte_di" est défini
3020     if ($this->f->getParameter('option_contrainte_di') != 'aucun') {
3021     // Ajoute la condition
3022     $where .= $this->f->traitement_condition_contrainte(
3023     $this->f->getParameter('option_contrainte_di'));
3024     }
3025 mbroquet 3730 }
3026    
3027     // Tri
3028     $tri = " ORDER BY contrainte_groupe DESC, contrainte_sousgroupe,
3029     contrainte.no_ordre, contrainte.libelle ";
3030    
3031     // Requête SQL
3032     $sql = $select.$from.$where.$tri;
3033     $res = $this->f->db->query($sql);
3034     $this->f->addToLog("listContrainte(): db->query(\"".$sql."\");", VERBOSE_MODE);
3035     $this->f->isDatabaseError($res);
3036    
3037     // Retourne le résultat
3038     return $res;
3039     }
3040    
3041     /**
3042     * Ajout de la liste des contraintes et des demandeurs
3043     */
3044     function formSpecificContent($maj) {
3045    
3046     /**
3047     * Liste des contraintes
3048     */
3049     //
3050     $listContrainte = $this->getListContrainte($this->getVal('dossier'));
3051    
3052     // Si le dossier possède des contraintes
3053     if ($listContrainte->numRows() != 0) {
3054    
3055     // Affiche du fieldset
3056     printf("<div id=\"liste_contrainte\" class=\"demande_hidden_bloc\">");
3057     printf("<fieldset class=\"cadre ui-corner-all ui-widget-content col_12 startClosed\">");
3058     printf(" <legend class=\"ui-corner-all ui-widget-content ui-state-active\"
3059     id =\"fieldset_contraintes_liees\">"
3060     ._("dossier_contrainte")."</legend>");
3061     printf("<div class=\"fieldsetContent\" style=\"display: none;\">");
3062    
3063     // Entête pour le groupe
3064     $groupeHeader = "
3065     <div class='dossier_contrainte_groupe'>
3066     <div class='dossier_contrainte_groupe_header'>
3067     <span class='name'>
3068     %s
3069     </span>
3070     </div>
3071     ";
3072    
3073     // Entête pour le sous-groupe
3074     $sousgroupeHeader = "
3075     <div class='dossier_contrainte_sousgroupe'>
3076     <div class='dossier_contrainte_sousgroupe_header'>
3077     <span class='name'>
3078     %s
3079     </span>
3080     </div>
3081     ";
3082    
3083     // Titres des colonnes
3084     $tableHeader = "
3085     <thead>
3086     <tr class='ui-tabs-nav ui-accordion ui-state-default tab-title'>
3087     <th class='title col-0 firstcol contrainte_th_texte_complete'>
3088     <span class='name'>
3089     "._('texte_complete')."
3090     </span>
3091     </th>
3092     <th class='title col-1 contrainte_th_reference'>
3093     <span class='name'>
3094     "._('reference')."
3095     </span>
3096     </th>
3097     <th class='title col-2 contrainte_th_nature'>
3098     <span class='name'>
3099     "._('nature')."
3100     </span>
3101     </th>
3102     </tr>
3103     </thead>
3104     ";
3105    
3106     // Ligne de données
3107     $line = "
3108     <tr class='tab-data %s'>
3109     <td class='col-0 firstcol contrainte_th_texte_complete'>
3110     %s
3111     </td>
3112     <td class='col-1 contrainte_th_reference'>
3113     %s
3114     </td>
3115     <td class='col-2 contrainte_th_nature'>
3116     %s
3117     </td>
3118     ";
3119    
3120     // Sauvegarde des données pour les comparer
3121     $lastRow = array();
3122     $lastRow['contrainte_groupe'] = 'empty';
3123     $lastRow['contrainte_sousgroupe'] = 'empty';
3124    
3125     // Tant qu'il y a des résultats
3126     while($row = &$listContrainte->fetchRow(DB_FETCHMODE_ASSOC)) {
3127     // Si l'identifiant du groupe de la contrainte présente et
3128     // celle d'avant est différent
3129     if ($row['contrainte_groupe'] != $lastRow['contrainte_groupe']) {
3130    
3131     // Si l'identifiant du groupe d'avant est vide
3132     if ($lastRow['contrainte_groupe'] != 'empty') {
3133     // Ferme le tableau
3134     printf("</table>");
3135     // Ferme le div
3136     printf("</div>");
3137     // Ferme le div
3138     printf("</div>");
3139     }
3140    
3141     // Affiche le header du groupe
3142     printf($groupeHeader, $row['contrainte_groupe']);
3143     }
3144    
3145     // Si l'identifiant du sous-groupe de la contrainte présente et
3146     // celle d'avant est différent
3147     // Ou qu'ils soient identique mais n'appartiennent pas au même groupe
3148     if ($row['contrainte_sousgroupe'] != $lastRow['contrainte_sousgroupe']
3149     || ($row['contrainte_sousgroupe'] == $lastRow['contrainte_sousgroupe']
3150     && $row['contrainte_groupe'] != $lastRow['contrainte_groupe'])) {
3151    
3152     //
3153     if($row['contrainte_groupe'] == $lastRow['contrainte_groupe']) {
3154     // Si l'identifiant de la sous-groupe d'avant est vide
3155     if ($lastRow['contrainte_sousgroupe'] != 'empty') {
3156     // Ferme le tableau
3157     printf("</table>");
3158     // Ferme le div
3159     printf("</div>");
3160     }
3161     }
3162    
3163     // Affiche le header du sous-groupe
3164     printf($sousgroupeHeader, $row['contrainte_sousgroupe']);
3165    
3166     // Ouvre le tableau
3167     printf("<table id='sousgroupe_".$row['contrainte_sousgroupe']."' class='tab-tab dossier_contrainte_view'>");
3168    
3169     // Affiche le header des données
3170     printf($tableHeader);
3171    
3172     // Définis le style des lignes
3173     $style = 'odd';
3174     }
3175    
3176     // Si toujours dans la même groupe et même sous-groupe,
3177     // on change le style de la ligne
3178     if ($row['contrainte_groupe'] == $lastRow['contrainte_groupe']
3179     && $row['contrainte_sousgroupe'] == $lastRow['contrainte_sousgroupe']) {
3180     // Définis le style
3181     $style = ($style=='even')?'odd':'even';
3182     }
3183    
3184     // Affiche "Oui" ou "Non" pour le bouléen
3185     if ($row['dossier_contrainte_reference'] == 1
3186     || $row['dossier_contrainte_reference'] == "t"
3187     || $row['dossier_contrainte_reference'] == "Oui") {
3188     //
3189     $contrainte_reference = "Oui";
3190     } else {
3191     //
3192     $contrainte_reference = "Non";
3193     }
3194    
3195     // Affiche les données
3196     printf($line, $style,
3197     $row['dossier_contrainte_texte'],
3198     $contrainte_reference,
3199     $row['contrainte_nature']
3200     );
3201    
3202     // Sauvegarde les données
3203     $lastRow['contrainte_groupe'] = $row['contrainte_groupe'];
3204     $lastRow['contrainte_sousgroupe'] = $row['contrainte_sousgroupe'];
3205    
3206     }
3207     // Ferme le tableau
3208     printf("</table>");
3209     // Ferme le sous-groupe
3210     printf("</div>");
3211     // Ferme le groupe
3212     printf("</div>");
3213    
3214     printf("</div>");
3215    
3216     printf("<div class=\"visualClear\"></div>");
3217     // Ferme le fieldset content
3218     printf("</div>");
3219     printf("</fieldset>");
3220     }
3221     /**
3222     * Fin Liste des contraintes
3223     */
3224    
3225     /**
3226     * Liste des demandeurs
3227     */
3228     $this->listeDemandeur("dossier", $this->getVal('dossier'));
3229    
3230     if($maj < 2 AND !$this->correct) {
3231     $linkable = true;
3232     } else {
3233     $linkable = false;
3234     }
3235    
3236     // Conteneur de la listes des demandeurs
3237     echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">";
3238     echo "<fieldset id=\"fieldset-form-dossier_instruction-petitionnaire\" class=\"cadre ui-corner-all ui-widget-content startClosed\">";
3239     echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">"
3240     ._("Petitionnaire")."</legend>";
3241     echo "<div class=\"fieldsetContent\" style=\"display: none;\">";
3242    
3243     // Dans tous les modes excepté en ajout et si l'option d'accès au
3244     // portail citoyen est activée
3245     if ($this->getParameter("maj") != 0
3246     && $this->f->is_option_citizen_access_portal_enabled() === true) {
3247     // Instance du dossier d'autorisation
3248     $inst_da = $this->get_inst_dossier_autorisation();
3249     //
3250     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'));
3251     }
3252    
3253     // Si des demandeurs sont liés à la demande
3254     require_once "../obj/petitionnaire.class.php";
3255     require_once "../obj/delegataire.class.php";
3256     // Affichage du bloc pétitionnaire principal / délégataire
3257     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3258     echo "<div id=\"petitionnaire_principal_delegataire col_12\">";
3259     // Affichage de la synthèse
3260     if (isset ($this->valIdDemandeur["petitionnaire_principal"]) AND
3261     !empty($this->valIdDemandeur["petitionnaire_principal"])) {
3262     $demandeur = new petitionnaire(
3263     $this->valIdDemandeur["petitionnaire_principal"],
3264     $this->f->db,false);
3265     $demandeur -> afficherSynthese("petitionnaire_principal", $linkable);
3266     $demandeur -> __destruct();
3267     } elseif ( isset ($this->postedIdDemandeur["petitionnaire_principal"]) AND
3268     !empty($this->postedIdDemandeur["petitionnaire_principal"]) ) {
3269     $demandeur = new petitionnaire(
3270     $this->postedIdDemandeur["petitionnaire_principal"],
3271     $this->f->db,false);
3272     $demandeur -> afficherSynthese("petitionnaire_principal", $linkable);
3273     $demandeur -> __destruct();
3274     }
3275     // Si en édition de formulaire
3276     if($maj < 2 AND $linkable) {
3277     // Bouton d'ajout du pétitionnaire principal
3278     // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3279     echo "<span id=\"add_petitionnaire_principal\"
3280     class=\"om-form-button add-16\">".
3281     _("Saisir le petitionnaire principal").
3282     "</span>";
3283     }
3284     // Bouton d'ajout du delegataire
3285     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3286     echo "<div id=\"delegataire\">";
3287     // Affichage de la synthèse
3288     if (isset ($this->valIdDemandeur["delegataire"]) AND
3289     !empty($this->valIdDemandeur["delegataire"])) {
3290     $demandeur = new delegataire($this->valIdDemandeur["delegataire"],
3291     $this->f->db,false);
3292     $demandeur -> afficherSynthese("delegataire", $linkable);
3293     $demandeur -> __destruct();
3294     } elseif ( isset ($this->postedIdDemandeur["delegataire"]) AND
3295     !empty($this->postedIdDemandeur["delegataire"]) ) {
3296    
3297     $demandeur = new delegataire($this->postedIdDemandeur["delegataire"],
3298     $this->f->db,false);
3299     $demandeur -> afficherSynthese("delegataire", $linkable);
3300     $demandeur -> __destruct();
3301     }
3302     if($maj < 2 AND $linkable) {
3303     echo "<span id=\"add_delegataire\"
3304     class=\"om-form-button add-16\">".
3305     _("Saisir un autre correspondant").
3306     "</span>";
3307     }
3308     echo "</div>";
3309     echo "<div class=\"both\"></div>";
3310     echo "</div>";
3311     // Bloc des pétitionnaires secondaires
3312     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3313     echo "<div id=\"listePetitionnaires col_12\">";
3314    
3315     // Affichage de la synthèse
3316     if (isset ($this->valIdDemandeur["petitionnaire"]) AND
3317     !empty($this->valIdDemandeur["petitionnaire"])) {
3318    
3319     foreach ($this->valIdDemandeur["petitionnaire"] as $petitionnaire) {
3320     $demandeur = new petitionnaire($petitionnaire,
3321     $this->f->db,false);
3322     $demandeur -> afficherSynthese("petitionnaire", $linkable);
3323     $demandeur -> __destruct();
3324     }
3325    
3326     } elseif ( isset ($this->postedIdDemandeur["petitionnaire"]) AND
3327     !empty($this->postedIdDemandeur["petitionnaire"]) ) {
3328     foreach ($this->postedIdDemandeur["petitionnaire"] as $petitionnaire) {
3329     $demandeur = new petitionnaire($petitionnaire,
3330     $this->f->db,false);
3331     $demandeur -> afficherSynthese("petitionnaire", $linkable);
3332     $demandeur -> __destruct();
3333     }
3334     }
3335     if ($maj < 2 AND $linkable) {
3336     // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3337     echo "<span id=\"add_petitionnaire\"
3338     class=\"om-form-button add-16\">".
3339     _("Ajouter un petitionnaire")
3340     ."</span>";
3341     }
3342     echo "</div>";
3343     echo "</div>";
3344     echo "</fieldset>";
3345     echo "</div>";
3346     /**
3347     * Fin liste des demandeurs
3348     */
3349 fmichon 4708
3350     /**
3351     * Interface avec le référentiel ERP.
3352     *
3353     * On affiche le message uniquement si le dossier est connecté.
3354     */
3355     if ($maj == 3 && $this->is_connected_to_referentiel_erp() === true) {
3356     //
3357     printf(
3358     '<div class="col_12">
3359     Ce dossier est connecté au référentiel ERP.
3360     </div>'
3361     );
3362     }
3363    
3364 mbroquet 3730 }
3365    
3366     /**
3367     * Retourne le statut du dossier
3368     * @return string Le statut du dossier d'instruction
3369     */
3370     function getStatut(){
3371    
3372     $statut = '';
3373    
3374     $etat = $this->getVal("etat");
3375     //Si l'état du dossier d'instruction n'est pas vide
3376     if ( $etat != '' ){
3377    
3378     $sql = "SELECT statut
3379     FROM ".DB_PREFIXE."etat
3380     WHERE libelle ='".$etat."'";
3381     $statut = $this->db->getOne($sql);
3382     $this->f->addToLog("getStatut() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
3383     if ( database::isError($statut, true)){
3384     die();
3385     }
3386     }
3387     return $statut;
3388     }
3389 softime 5024
3390 mbroquet 3730 /**
3391 softime 5024 * Retourne le dernier événement lié au dossier instancié
3392     *
3393     * @return [string] ID du dernier événement
3394     */
3395     function get_dernier_evenement() {
3396     $sql = "SELECT max(instruction)
3397     FROM ".DB_PREFIXE."instruction
3398     WHERE dossier = '".$this->getVal($this->clePrimaire)."'";
3399     $id_dernier_evenement = $this->db->getOne($sql);
3400     $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
3401     $this->f->isDatabaseError($id_dernier_evenement);
3402     return $id_dernier_evenement;
3403     }
3404    
3405     /**
3406 mbroquet 3730 * Retourne l'identifiant du rapport d'instruction lié du dossier
3407     * @return string L'identifiant du rapport d'instruction lié du dossier
3408     */
3409     function getRapportInstruction(){
3410    
3411     $rapport_instruction = '';
3412    
3413     $sql = "SELECT rapport_instruction
3414     FROM ".DB_PREFIXE."rapport_instruction
3415     WHERE dossier_instruction ='".$this->getVal($this->clePrimaire)."'";
3416     $rapport_instruction = $this->db->getOne($sql);
3417     $this->f->addToLog("getStatut() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
3418     if ( database::isError($rapport_instruction)){
3419     die();
3420     }
3421    
3422     return $rapport_instruction;
3423     }
3424    
3425     /**
3426     * Retourne l'identifiant des données techniques liées du dossier
3427     * @return string L'identifiant des données techniques liées du dossier
3428     */
3429     function getDonneesTechniques(){
3430    
3431     $donnees_techniques = '';
3432    
3433     $sql = "SELECT donnees_techniques
3434     FROM ".DB_PREFIXE."donnees_techniques
3435     WHERE dossier_instruction ='".$this->getVal($this->clePrimaire)."'";
3436     $donnees_techniques = $this->db->getOne($sql);
3437     $this->f->addToLog("getStatut() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
3438     if ( database::isError($donnees_techniques)){
3439     die();
3440     }
3441    
3442     return $donnees_techniques;
3443     }
3444    
3445     /**
3446     * Surcharge du bouton retour afin de retourner sur la recherche de dossiers
3447     * d'instruction existant
3448     */
3449     function retour($premier = 0, $recherche = "", $tricol = "") {
3450    
3451     echo "\n<a class=\"retour\" ";
3452     echo "href=\"";
3453     //
3454     if($this->getParameter("idx_dossier") != "") {
3455     echo "tab.php?";
3456     echo "obj=recherche_dossier";
3457    
3458     } else {
3459     if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
3460     echo "form.php?";
3461     } else {
3462     echo "tab.php?";
3463     }
3464     // Permet de retourner sur la bonne page
3465     if ($this->f->get_submitted_get_value('retourformulaire') !== null && $this->f->get_submitted_get_value('retourformulaire') != '') {
3466     echo "obj=".$this->f->get_submitted_get_value('retourformulaire');
3467     } else {
3468     echo "obj=".get_class($this);
3469     }
3470     if ($this->f->get_submitted_get_value('retourformulaire2') !== null && $this->f->get_submitted_get_value('retourformulaire2') != '') {
3471     echo "&retourformulaire=".$this->f->get_submitted_get_value('retourformulaire2');
3472     }
3473     if($this->getParameter("retour")=="form") {
3474     echo "&amp;idx=".$this->getParameter("idx");
3475     echo "&amp;idz=".$this->getParameter("idz");
3476     echo "&amp;action=3";
3477     }
3478     }
3479     echo "&amp;premier=".$this->getParameter("premier");
3480     echo "&amp;tricol=".$this->getParameter("tricol");
3481     echo "&amp;recherche=".$this->getParameter("recherche");
3482     echo "&amp;selectioncol=".$this->getParameter("selectioncol");
3483     echo "&amp;advs_id=".$this->getParameter("advs_id");
3484     echo "&amp;valide=".$this->getParameter("valide");
3485     //
3486     echo "\"";
3487     echo ">";
3488     //
3489     echo _("Retour");
3490     //
3491     echo "</a>\n";
3492    
3493     }
3494    
3495     /**
3496     * Permet de modifier le fil d'Ariane
3497     * @param string $ent Fil d'Ariane
3498     * @param array $val Valeurs de l'objet
3499     * @param intger $maj Mode du formulaire
3500     */
3501     function getFormTitle($ent) {
3502    
3503     // Fil d'Ariane
3504     $ent = _("instruction")." -> "._("dossiers d'instruction");
3505    
3506     // Si différent de l'ajout
3507     if($this->getParameter("maj") != 0) {
3508     // Si le champ dossier_libelle existe
3509     if (trim($this->getVal("dossier_libelle")) != '') {
3510     $ent .= " -> ".strtoupper($this->getVal("dossier_libelle"));
3511     }
3512     // Si le champ dossier existe
3513     if (trim($this->getVal("dossier")) != '') {
3514     $demandeur = $this->get_demandeur($this->getVal("dossier"));
3515     // Si le demandeur existe
3516     if (isset($demandeur) && trim($demandeur) != '') {
3517     $ent .= " ".mb_strtoupper($demandeur, "UTF-8");
3518     }
3519     }
3520     }
3521    
3522     // Change le fil d'Ariane
3523     return $ent;
3524     }
3525    
3526     /**
3527     * Récupère le demandeur du dossier
3528     * @return string Identifiant du dossier
3529     */
3530     private function get_demandeur($dossier) {
3531    
3532     // init de la variable de retour
3533     $demandeur = '';
3534    
3535     // Requête SQL
3536     $sql = "SELECT
3537     CASE WHEN demandeur.qualite='particulier'
3538     THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
3539     ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
3540     END as demandeur
3541     FROM ".DB_PREFIXE."dossier
3542     LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur
3543     ON lien_dossier_demandeur.dossier=dossier.dossier
3544     AND lien_dossier_demandeur.petitionnaire_principal IS TRUE
3545     LEFT JOIN ".DB_PREFIXE."demandeur
3546     ON lien_dossier_demandeur.demandeur=demandeur.demandeur
3547     WHERE dossier.dossier ='".$dossier."'";
3548     $demandeur = $this->db->getOne($sql);
3549     $this->f->addToLog("get_demandeur() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
3550     database::isError($demandeur);
3551    
3552     // Résultat retourné
3553     return $demandeur;
3554     }
3555    
3556     /**
3557     * Récupère la durée de validité
3558     * @param string $dossier_autorisation Identifiant dossier d'autorisation
3559     * @return intger Durée de validité
3560     */
3561     function get_duree_validite($dossier_autorisation) {
3562    
3563     // init de la variable de retour
3564     $duree_validite = "";
3565    
3566     // Récupère le numéro de version
3567     $numeroVersion = $this->getNumeroVersion($dossier_autorisation);
3568    
3569     // Si c'est l'ajout du dossier initial
3570     if ($numeroVersion < 0) {
3571    
3572     // Récupération de la duree de validite depuis la table
3573     // "dossier_autorisation_type_detaille"
3574     $sql = "SELECT duree_validite_parametrage
3575     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
3576     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
3577     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
3578     WHERE dossier_autorisation.dossier_autorisation='".$dossier_autorisation."'";
3579     $duree_validite = $this->db->getOne($sql);
3580     $this->f->addToLog("get_duree_validite(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
3581     database::isError($duree_validite);
3582    
3583     } else {
3584    
3585     // Récupération de la duree de validite depuis le P0
3586     $sql = "SELECT duree_validite
3587     FROM ".DB_PREFIXE."dossier
3588     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
3589     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
3590     WHERE dossier_autorisation.dossier_autorisation='".$dossier_autorisation."'
3591     AND dossier.version = 0";
3592     $duree_validite = $this->db->getOne($sql);
3593     $this->f->addToLog("get_duree_validite(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
3594     database::isError($duree_validite);
3595     }
3596    
3597     // retourne le résultat
3598     return $duree_validite;
3599    
3600     }
3601    
3602     /**
3603     * Ajoute les parcelles du dossier passé en paramètre et met à jour le
3604     * quartier du dossier.
3605     * @param string $dossier Identifiant du dossier
3606     * @param string $terrain_references_cadastrales Références cadastrales du
3607     * dossier
3608     */
3609     function ajouter_dossier_parcelle($dossier, $terrain_references_cadastrales) {
3610    
3611     // Parse les parcelles
3612     $list_parcelles = $this->f->parseParcelles($terrain_references_cadastrales, $this->getVal('om_collectivite'));
3613    
3614     // Fichier requis
3615     require_once "../obj/dossier_parcelle.class.php";
3616    
3617     // A chaque parcelle une nouvelle ligne est créée dans la table
3618     // dossier_parcelle
3619     foreach ($list_parcelles as $parcelle) {
3620    
3621     // Instance de la classe dossier_parcelle
3622     $dossier_parcelle = new dossier_parcelle("]", $this->db, DEBUG);
3623    
3624     // Valeurs à sauvegarder
3625     $value = array(
3626     'dossier_parcelle' => '',
3627     'dossier' => $dossier,
3628     'parcelle' => '',
3629     'libelle' => $parcelle['quartier']
3630     .$parcelle['section']
3631     .$parcelle['parcelle']
3632     );
3633    
3634     // Ajout de la ligne
3635     $dossier_parcelle->ajouter($value, $this->db, DEBUG);
3636     }
3637    
3638     // Si la liste des parcelles n'est pas vide
3639     if (count($list_parcelles) > 0) {
3640    
3641     // Récupère le code impôt de la première référence cadastrale
3642     $quartier_code_impots = $list_parcelles[0]['quartier'];
3643     // Récupère l'identifiant du quartier
3644     $quartier = $this->get_quartier_by_code_impot($quartier_code_impots);
3645    
3646     // Ajoute le quartier au dossier
3647     $this->modifier_quartier_dossier($dossier, $quartier);
3648     }
3649     }
3650    
3651     /**
3652     * Supprime les parcelles du dossier passé en paramètre et met à jour le
3653     * quartier du dossier.
3654     * @param string $dossier Identifiant du dossier
3655     */
3656     function supprimer_dossier_parcelle($dossier) {
3657    
3658     // Suppression des parcelles du dossier
3659     $sql = "DELETE FROM ".DB_PREFIXE."dossier_parcelle
3660     WHERE dossier='".$dossier."'";
3661     $res = $this->db->query($sql);
3662     $this->addToLog("supprimer_dossier_parcelle() db->query(\"".$sql."\");",
3663     VERBOSE_MODE);
3664     database::isError($res);
3665    
3666     // Supprime le quartier dans dossier
3667     $this->modifier_quartier_dossier($dossier);
3668     }
3669    
3670     /**
3671     * Modifie le quartier au dossier.
3672     * @param string $dossier Numéro du dossier
3673     * @param integer $quartier Identifiant du quartier
3674     */
3675     function modifier_quartier_dossier($dossier, $quartier = null) {
3676    
3677     // Valeurs à mettre à jour
3678     $valF = array();
3679     $valF['quartier'] = $quartier;
3680    
3681     // Met à jour le quartier du dossier
3682     $cle = " dossier='".$dossier."'";
3683     $res = $this->db->autoExecute(
3684     DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
3685     $this->addToLog("ajouter_quartier_dossier(): db->autoexecute(\""
3686     .DB_PREFIXE."dossier\", ".print_r($valF, true)
3687     .", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
3688     $this->f->isDatabaseError($res);
3689     }
3690    
3691     /**
3692     * Récupère le quartier par rapport au code impôts.
3693     * @param string $code_impots Code impôts du quartier
3694     *
3695     * @return integer Identifiant du quartier
3696     */
3697     function get_quartier_by_code_impot($code_impots) {
3698    
3699     // Initialisation résultat
3700     $quartier = null;
3701    
3702     // Si la condition n'est pas vide
3703     if ($code_impots != ""
3704     && $code_impots != null) {
3705    
3706     // Requête SQL
3707     $sql = "SELECT quartier
3708     FROM ".DB_PREFIXE."quartier
3709     WHERE code_impots = '".$code_impots."'";
3710     $this->f->addToLog(
3711     "get_quartier_by_code_impots() : db->getOne(\"".$sql."\")",
3712     VERBOSE_MODE);
3713     $quartier = $this->db->getOne($sql);
3714     $this->f->isDatabaseError($quartier);
3715     }
3716    
3717     // Retourne résultat
3718     return $quartier;
3719     }
3720    
3721     /**
3722     * Méthode permettant d'ajouter les données techniques d'un DI.
3723     *
3724     * @param integer $id identifiant de la demande
3725     * @param database &$db handler de la base de donnée
3726     * @param array $val tableau de valeurs postées via le formulaire
3727     * @param boolean $DEBUG debug
3728     *
3729     * @return boolean false si erreur
3730     */
3731     function ajoutDonneesTechniquesDI($id, &$db, $val, $DEBUG) {
3732    
3733     //On vérifie que le dossier d'autorisation a des données techniques
3734     $sql = "SELECT * "
3735     ."FROM ".DB_PREFIXE."donnees_techniques "
3736     ."WHERE dossier_autorisation = '".$this->valF["dossier_autorisation"]."'";
3737     $dtda = $this->db->query($sql);
3738     $this->addToLog(__METHOD__."(): db->query(\"".$sql."\")", VERBOSE_MODE);
3739     if($this->f->isDatabaseError($dtda, true)){
3740     $this->f->addToLog(__METHOD__."() : ERROR - Erreur de base de données. Impossible d'ajouter les données techniques du dossier d'instruction.", DEBUG_MODE);
3741     return false;
3742     }
3743    
3744     //Si le dossier d'autorisation a des données techniques
3745     if ( $dtda->numrows() == 1 ){
3746     //
3747     require_once '../obj/donnees_techniques.class.php';
3748     $dtdi = new donnees_techniques(']', $db, $DEBUG);
3749     //Préparation des données
3750     $valF = $dtda->fetchRow(DB_FETCHMODE_ASSOC);
3751     //Suppression de l'identifiant
3752     $valF["donnees_techniques"] = null;
3753     // Ajout du numéro de dossier d'instruction
3754     $valF['dossier_instruction'] = $this->valF['dossier'];
3755     // Suppression du numéro de dossier d'autorisation
3756     $valF['dossier_autorisation'] = null;
3757     // Ajout des données techniques
3758     if($dtdi->ajouter($valF, $db, $DEBUG) === false) {
3759     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du dossier d'instruction.", DEBUG_MODE);
3760     return false;
3761     }
3762     }
3763     else {
3764     //Le dossier d'autorisation n'a pas de données techniques
3765     $this->f->addToLog(__METHOD__."() : ERROR - le DA n'a pas de données techniques.", DEBUG_MODE);
3766     return -1;
3767     }
3768    
3769     //
3770     return true;
3771     }
3772    
3773     /**
3774     * VIEW - contrainte.
3775     *
3776     * Vue des contraintes du dossier
3777     *
3778     * Cette vue permet de gérer le contenu de l'onglet "Contrainte(s)" sur un
3779     * dossier. Cette vue spécifique est nécessaire car l'ergonomie standard du
3780     * framework ne prend pas en charge ce cas.
3781     * C'est ici la vue spécifique des contraintes liées au dossier qui est
3782     * affichée directement au clic de l'onglet au lieu du soustab.
3783     *
3784     * L'idée est donc de simuler l'ergonomie standard en créant un container
3785     * et d'appeler la méthode javascript 'ajaxit' pour charger le contenu
3786     * de la vue visualisation de l'objet lié.
3787     *
3788     * @return void
3789     */
3790     function view_contrainte() {
3791     // Vérification de l'accessibilité sur l'élément
3792     $this->checkAccessibility();
3793     // Récupération des variables GET
3794     ($this->f->get_submitted_get_value('idxformulaire')!==null ? $idxformulaire =
3795     $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = "");
3796     ($this->f->get_submitted_get_value('retourformulaire')!==null ? $retourformulaire =
3797     $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = "");
3798     // Objet à charger
3799     $obj = "dossier_contrainte";
3800     // Construction de l'url de sousformulaire à appeler
3801     $url = "../scr/sousform.php?obj=".$obj;
3802     $url .= "&idx=".$idxformulaire;
3803     $url .= "&action=4";
3804     $url .= "&retourformulaire=".$retourformulaire;
3805     $url .= "&idxformulaire=".$idxformulaire;
3806     $url .= "&retour=form";
3807     // Affichage du container permettant le reffraichissement du contenu
3808     // dans le cas des action-direct.
3809     printf('
3810     <div id="sousform-href" data-href="%s">
3811     </div>',
3812     $url
3813     );
3814     // Affichage du container permettant de charger le retour de la requête
3815     // ajax récupérant le sous formulaire.
3816     printf('
3817     <div id="sousform-%s">
3818     </div>
3819     <script>
3820     ajaxIt(\'%s\', \'%s\');
3821     </script>',
3822     $obj,
3823     $obj,
3824     $url
3825     );
3826     }
3827    
3828     /**
3829     * Cette methode permet d'afficher le bouton de validation du formulaire
3830     *
3831     * @param integer $maj Mode de mise a jour
3832     * @return void
3833     */
3834     function bouton($maj) {
3835    
3836     if (!$this->correct
3837     && $this->checkActionAvailability() == true) {
3838     //
3839     switch($maj) {
3840     case 0 :
3841     $bouton = _("Ajouter");
3842     break;
3843     case 1 :
3844     $bouton = _("Modifier");
3845     break;
3846     case 2 :
3847     $bouton = _("Supprimer");
3848     break;
3849     default :
3850     // Actions specifiques
3851     if ($this->get_action_param($maj, "button") != null) {
3852     //
3853     $bouton = $this->get_action_param($maj, "button");
3854     } else {
3855     //
3856     $bouton = _("Valider");
3857     }
3858     break;
3859     }
3860     //
3861     $params = array(
3862     "value" => $bouton,
3863     "name" => "submit",
3864     "onclick"=>"return getDataFieldReferenceCadastrale();",
3865     );
3866     //
3867     $this->f->layout->display_form_button($params);
3868     }
3869    
3870     }
3871    
3872     /**
3873     * Récupère l'instance de la classe taxe_amenagement.
3874     *
3875     * @param integer $taxe_amenagement Identifiant
3876     *
3877     * @return object
3878     */
3879     function get_inst_taxe_amenagement($taxe_amenagement = null) {
3880     //
3881     if (is_null($this->inst_taxe_amenagement)) {
3882     //
3883     if (is_null($taxe_amenagement)) {
3884     $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($this->getVal('om_collectivite'));
3885     }
3886     //
3887     require_once "../obj/taxe_amenagement.class.php";
3888     $this->inst_taxe_amenagement = new taxe_amenagement($taxe_amenagement);
3889     }
3890     //
3891     return $this->inst_taxe_amenagement;
3892     }
3893    
3894     /**
3895     * Récupère l'identifiant de la taxe d'aménagement par rapport à la collectivité.
3896     *
3897     * @param integer $om_collectivite La collectivité
3898     *
3899     * @return integer
3900     */
3901     function get_taxe_amenagement_by_om_collectivite($om_collectivite) {
3902     // Si la collectivité n'est pas renseigné
3903     if (empty($om_collectivite) == true) {
3904     //
3905     $om_collectivite = 0;
3906     }
3907    
3908     //
3909     $sql = "SELECT taxe_amenagement
3910     FROM ".DB_PREFIXE."taxe_amenagement
3911     WHERE om_collectivite = ".intval($om_collectivite);
3912     $collectivite = $this->f->db->getOne($sql);
3913     $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
3914     $this->f->isDatabaseError($collectivite);
3915    
3916     //
3917     return $collectivite;
3918     }
3919    
3920     /**
3921     * [get_inst_donnees_techniques description]
3922     *
3923     * @param [type] $donnees_techniques [description]
3924     *
3925     * @return [type] [description]
3926     */
3927     function get_inst_donnees_techniques($donnees_techniques = null) {
3928     //
3929     if (is_null($this->inst_donnees_techniques)) {
3930     //
3931     if (is_null($donnees_techniques)) {
3932     $donnees_techniques = $this->getDonneesTechniques();
3933     }
3934     //
3935     require_once "../obj/donnees_techniques.class.php";
3936     $this->inst_donnees_techniques = new donnees_techniques($donnees_techniques);
3937     }
3938     //
3939     return $this->inst_donnees_techniques;
3940     }
3941    
3942    
3943     /**
3944     * Récupère l'instance du dossier d'autorisation.
3945     *
3946     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
3947     *
3948     * @return object
3949     */
3950 fmichon 4708 function get_inst_dossier_autorisation($dossier_autorisation = null) {
3951 mbroquet 3730 //
3952     return $this->get_inst_common("dossier_autorisation", $dossier_autorisation);
3953     }
3954    
3955    
3956     /**
3957     * Récupère l'instance du dossier d'autorisation, puis la clé d'accès au portail
3958     * citoyen associée à ce DA.
3959     *
3960     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
3961     *
3962     * @return string $cle_acces_citoyen si la clé d'accès existe
3963     * boolean false si la clé n'existe pas
3964     */
3965     protected function get_citizen_access_key($dossier_autorisation = null) {
3966     //
3967     $inst_da = $this->get_inst_dossier_autorisation($dossier_autorisation);
3968     // Récupération de la valeur de la clé d'accès
3969     $cle_acces_citoyen = $inst_da->getVal('cle_acces_citoyen');
3970     if ($cle_acces_citoyen === '' OR $cle_acces_citoyen === null) {
3971     return false;
3972     }
3973     return $cle_acces_citoyen;
3974     }
3975    
3976    
3977     /**
3978     * Récupère l'instance du type détaillé du dossier d'autorisation.
3979     *
3980     * @param integer $dossier_autorisation_type_detaille Identifiant
3981     *
3982     * @return object
3983     */
3984     function get_inst_dossier_autorisation_type_detaille($dossier_autorisation_type_detaille = null) {
3985     //
3986     if (is_null($this->inst_dossier_autorisation_type_detaille)) {
3987     //
3988     if (is_null($dossier_autorisation_type_detaille)) {
3989     //
3990     $dossier_autorisation = $this->get_inst_dossier_autorisation();
3991     //
3992     $dossier_autorisation_type_detaille = $dossier_autorisation->getVal('dossier_autorisation_type_detaille');
3993     }
3994     //
3995     require_once "../obj/dossier_autorisation_type_detaille.class.php";
3996     $this->inst_dossier_autorisation_type_detaille = new dossier_autorisation_type_detaille($dossier_autorisation_type_detaille, $this->db, 0);
3997     }
3998     //
3999     return $this->inst_dossier_autorisation_type_detaille;
4000     }
4001    
4002     /**
4003     * Récupère l'instance du cerfa
4004     *
4005     * @param integer $cerfa Identifiant du cerfa
4006     *
4007     * @return object
4008     */
4009     function get_inst_cerfa($cerfa = null) {
4010     //
4011     if (is_null($this->inst_cerfa)) {
4012     //
4013     if (is_null($cerfa)) {
4014     //
4015     $dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
4016     //
4017     $cerfa = $dossier_autorisation_type_detaille->getVal('cerfa');
4018     }
4019     //
4020     require_once "../obj/cerfa.class.php";
4021     $this->inst_cerfa = new cerfa($cerfa, $this->db, 0);
4022     }
4023     //
4024     return $this->inst_cerfa;
4025     }
4026    
4027     /**
4028     * CONDITION - is_user_from_allowed_collectivite.
4029     *
4030     * Cette condition permet de vérifier si l'utilisateur connecté appartient
4031     * à une collectivité autorisée : c'est-à-dire de niveau 2 ou identique à
4032     * la collectivité de l'enregistrement sur lequel on se trouve.
4033     *
4034     * @return boolean
4035     */
4036     function is_user_from_allowed_collectivite() {
4037    
4038     // Si l'utilisateur est de niveau 2
4039     if ($_SESSION["niveau"] == "2") {
4040     // Alors l'utilisateur fait partie d'une collectivité autorisée
4041     return true;
4042     }
4043    
4044     // L'utilisateur est donc de niveau 1
4045     // On vérifie donc si la collectivité de l'utilisateur est la même
4046     // que la collectivité de l'élément sur lequel on se trouve
4047     if ($_SESSION["collectivite"] === $this->getVal("om_collectivite")) {
4048     // Alors l'utilisateur fait partie d'une collectivité autorisée
4049     return true;
4050     }
4051    
4052     // L'utilisateur ne fait pas partie d'une collectivité autorisée
4053     return false;
4054     }
4055    
4056     /**
4057     * Création ou mise à jour du répertoire de numérisation.
4058     *
4059     * L'objet de cette méthode est la création ou la mise à jour de la date de
4060     * modification du répertoire de numérisation destiné à recevoir les pièces
4061     * numérisées pour un import automatique.
4062     * À chaque saisie d'une nouvelle demande dans openADS, le répertoire est
4063     * soit créé soit mis à jour pour être disponible en dehors d'openADS
4064     * (point de montage sur le serveur) pour permettre de déposer les pièces
4065     * numérisées directement depuis le copieur. À intervalle régulier, un
4066     * service vérifie le contenu de ces répertoire pour importer
4067     * automatiquement ces fichiers dans l'onglet 'Pièce(s)' du dossier
4068     * concerné.
4069     * La mise à jour de la date de modification est importante pour réaliser
4070     * la purge des répertoires vides sur la base de la date de la dernière
4071     * demande qui concerne le dossier.
4072     *
4073     * @return boolean
4074     */
4075     function create_or_touch_digitalization_folder() {
4076    
4077     // Nom du répertoire
4078     // Le répertoire créé possède comme nom le libellé du dossier avec
4079     // le suffixe séparé par un '.'. Exemple : PC0130551601234.P0
4080 nmeucci 4526 $separateur = '';
4081     if ($this->getSuffixe($this->getVal('dossier_instruction_type')) === 't') {
4082     $separateur = '.';
4083     }
4084    
4085 mbroquet 3730 $digitalization_folder_name = str_replace(
4086     $this->getVal("dossier_autorisation"),
4087 nmeucci 4526 $this->getVal("dossier_autorisation").$separateur,
4088 mbroquet 3730 $this->getVal($this->clePrimaire)
4089     );
4090    
4091     // Vérifie que l'option de numérisation des dossiers est désactivée
4092     if ($this->f->is_option_digitalization_folder_enabled() !== true) {
4093     //
4094     $this->addToLog(
4095     _("L'option de numerisation des dossiers n'est pas activee").".",
4096     DEBUG_MODE
4097     );
4098     return false;
4099     }
4100    
4101     // Vérifie le paramétrage du répertoire de numérisation
4102     if ($this->f->getParameter("digitalization_folder_path") === null) {
4103     //
4104     $this->addToLog(
4105     "Configuration du répertoire de numérisation incorrecte.",
4106     DEBUG_MODE
4107     );
4108     return false;
4109     }
4110    
4111     // Répertoire cible
4112     $root_folder_path = $this->f->getParameter("digitalization_folder_path");
4113    
4114     // Vérifie que le répertoire existe
4115     if (is_dir($root_folder_path) !== true) {
4116     //
4117     $this->addToLog(
4118     sprintf(
4119     "Le répertoire '%s' n'existe pas.",
4120     $root_folder_path
4121     ),
4122     DEBUG_MODE
4123     );
4124     return false;
4125     }
4126    
4127     // Répertoire des "à traiter"
4128     $todo_folder_path = $root_folder_path."Todo/";
4129    
4130     // Vérifie que le répertoire existe
4131     if (is_dir($todo_folder_path) !== true) {
4132     //
4133     $this->addToLog(
4134     sprintf(
4135     "Le répertoire '%s' n'existe pas.",
4136     $todo_folder_path
4137     ),
4138     DEBUG_MODE
4139     );
4140     return false;
4141     }
4142    
4143     // Répertoire de numérisation.
4144     $digitalization_folder_path = $todo_folder_path.$digitalization_folder_name;
4145    
4146     // Si le répertore existe déjà le répertoire n'est pas créé
4147     if (file_exists($digitalization_folder_path) == true) {
4148     // Mise à jour du répertoire
4149     if (touch($digitalization_folder_path) !== true) {
4150     // Si une erreur survient
4151     $this->addToLog(
4152     sprintf(
4153     "Erreur lors de la mise à jour du répertoire '%s'.",
4154     $digitalization_folder_path
4155     ),
4156     DEBUG_MODE
4157     );
4158     return false;
4159     }
4160     //
4161     return true;
4162     } else {
4163     // Création du répertoire
4164     if (mkdir($digitalization_folder_path) !== true) {
4165     //
4166     $this->addToLog(
4167     sprintf(
4168     "Erreur lors de la création du répertoire '%s'.",
4169     $digitalization_folder_path
4170     ),
4171     DEBUG_MODE
4172     );
4173     return false;
4174     }
4175     //
4176     return true;
4177     }
4178     }
4179    
4180 nmeucci 3876 /**
4181     * Récupère, convertit et retourne les logs de toutes les instructions
4182     *
4183     * @return array tableau indexé de logs
4184     */
4185     public function get_log_instructions() {
4186     $log_instructions = $this->getVal('log_instructions');
4187     // Gestion du premier log
4188 nmeucci 3887 if ($log_instructions === '') {
4189 nmeucci 3876 $log_instructions = json_encode(array());
4190     }
4191 nmeucci 3887 // Gestion du log invalide
4192     if(!$this->isJson($log_instructions)) {
4193     return false;
4194     }
4195 nmeucci 3876 return json_decode($log_instructions, true);
4196     }
4197    
4198     /**
4199     * Ajoute un log d'instruction aux logs existants
4200     *
4201     * @param array $log valeurs de l'instruction
4202     * @return bool vrai si traitement effectué avec succès
4203     */
4204     public function add_log_instructions($log) {
4205     // Begin
4206     $this->begin_treatment(__METHOD__);
4207     // Ajout du log
4208     $log_instructions = $this->get_log_instructions();
4209 nmeucci 3887 if ($log_instructions === false) {
4210     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
4211     return $this->end_treatment(__METHOD__, false);
4212     }
4213 nmeucci 3876 array_push($log_instructions, $log);
4214 nmeucci 3907 $log_instructions = json_encode($log_instructions);
4215 nmeucci 3876 // Mise à jour du DI
4216     $val = array("log_instructions"=>$log_instructions);
4217     $ret = $this->f->db->autoExecute(
4218     DB_PREFIXE."dossier",
4219     $val,
4220     DB_AUTOQUERY_UPDATE,
4221     "dossier = '".$this->getVal('dossier')."'");
4222     if (database::isError($ret, true)) {
4223     $this->erreur_db($ret->getDebugInfo(), $ret->getMessage(), 'dossier');
4224     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
4225     return $this->end_treatment(__METHOD__, false);
4226     }
4227     return $this->end_treatment(__METHOD__, true);
4228     }
4229    
4230 nmeucci 3887 /**
4231     * Vérifie qu'une chaîne est au format json
4232     *
4233     * @param string $text chaîne à analyser
4234     * @return boolean vrai si formatée json
4235     */
4236     function isJson($text) {
4237     json_decode($text);
4238     return (json_last_error() == JSON_ERROR_NONE);
4239     }
4240    
4241 fmichon 4708 /**
4242     * TREATMENT - mark_as_connected_to_referentiel_erp.
4243     *
4244     * Cette méthode permet de positionner le marqueur
4245     * 'interface_referentiel_erp' à 'true'. Cela signifie que le dossier est
4246     * connecté au référentiel ERP.
4247     *
4248     * @return boolean
4249     */
4250     function mark_as_connected_to_referentiel_erp() {
4251     //
4252     $this->begin_treatment(__METHOD__);
4253     //
4254     $data = array("interface_referentiel_erp" => true, );
4255     // Exécution de la requête
4256     $res = $this->f->db->autoExecute(
4257     DB_PREFIXE.$this->table,
4258     $data,
4259     DB_AUTOQUERY_UPDATE,
4260     $this->getCle($this->getVal($this->clePrimaire))
4261     );
4262     // Logger
4263     $this->addToLog(
4264     __METHOD__."(): db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($data, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($this->getVal($this->clePrimaire))."\");",
4265     VERBOSE_MODE
4266     );
4267     //
4268     if ($this->f->isDatabaseError($res, true)) {
4269     // Appel de la methode de recuperation des erreurs
4270     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
4271     $this->correct = false;
4272     $this->addToLog(
4273     __METHOD__."(): Problème erreur lors de la mise à jour du dossier",
4274     DEBUG_MODE
4275     );
4276     // Termine le traitement
4277     return $this->end_treatment(__METHOD__, false);
4278     }
4279     //
4280     $this->addToMessage(_("Le dossier est désormais 'connecté avec le référentiel ERP'."));
4281     return $this->end_treatment(__METHOD__, true);
4282     }
4283 nmeucci 3887
4284 fmichon 4708 /**
4285     * CONDITION - is_connected_to_referentiel_erp.
4286     *
4287     * @return boolean
4288     */
4289     function is_connected_to_referentiel_erp() {
4290     //
4291     if ($this->getVal("interface_referentiel_erp") !== "t") {
4292     return false;
4293     }
4294     //
4295     return true;
4296     }
4297    
4298 nhaye 4777
4299 fmichon 4708 /**
4300 nhaye 4777 * Retourne les données techniques applicables au dossier courant, càd les données
4301     * techniques liées au dossier avec seulement les champs du CERFA associé au type de
4302     * dossier.
4303     *
4304     * @return array $donnees_techniques_applicables Tableau associatif contenant
4305     * seulement les données techniques
4306     * applicables au dossier.
4307     */
4308     public function get_donnees_techniques_applicables() {
4309    
4310     // Récupération de l'identifiant des données techniques liées au dossier
4311     $donnees_techniques = $this->getDonneesTechniques();
4312    
4313     $inst_donnees_techniques = $this->get_inst_common('donnees_techniques', $donnees_techniques);
4314     $donnees_techniques_applicables = $inst_donnees_techniques->get_donnees_techniques_applicables();
4315     //
4316     return $donnees_techniques_applicables;
4317    
4318     }
4319    
4320    
4321     /**
4322 fmichon 4708 * Retourne un tableau avec les données du dossier d'instruction.
4323     *
4324 jymadier 5275 * L'objectif est de mettre à disposition via un WS REST un ensemble
4325 fmichon 4708 * de données exploitable par une autre application.
4326     */
4327     function get_datas() {
4328    
4329     /**
4330     *
4331     */
4332 nhaye 4777
4333     $om_collectivite = $this->get_inst_common('om_collectivite', $this->getVal('om_collectivite'));
4334     $instructeur = $this->get_inst_common('instructeur', $this->getVal('instructeur'));
4335     $division = $this->get_inst_common('division', $this->getVal('division'));
4336     $dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
4337     $dossier_autorisation_type = $this->get_inst_common('dossier_autorisation_type', $dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
4338     $donnees_techniques = $this->get_donnees_techniques_applicables();
4339    
4340 fmichon 4708 //
4341     $datas = array(
4342     //
4343     "dossier_instruction" => $this->getVal($this->clePrimaire),
4344     //
4345     "dossier_autorisation" => $this->getVal("dossier_autorisation"),
4346     //
4347     "terrain_adresse_voie_numero" => $this->getVal("terrain_adresse_voie_numero"),
4348     "terrain_adresse_lieu_dit" => $this->getVal("terrain_adresse_lieu_dit"),
4349     "terrain_adresse_code_postal" => $this->getVal("terrain_adresse_code_postal"),
4350     "terrain_adresse_cedex" => $this->getVal("terrain_adresse_cedex"),
4351     "terrain_adresse_voie" => $this->getVal("terrain_adresse_voie"),
4352     "terrain_adresse_bp" => $this->getVal("terrain_adresse_bp"),
4353     "terrain_adresse_localite" => $this->getVal("terrain_adresse_localite"),
4354     "terrain_superficie" => $this->getVal("terrain_superficie"),
4355     //
4356     "references_cadastrales" => $this->f->parseParcelles($this->getVal("terrain_references_cadastrales"), $this->getVal('om_collectivite')),
4357 nhaye 4777 "dossier_autorisation_type" => $dossier_autorisation_type->getVal("libelle"),
4358     "dossier_autorisation_type_detaille" => $dossier_autorisation_type_detaille->getVal("libelle"),
4359     "collectivite" => $om_collectivite->getVal("libelle"),
4360     "instructeur" => $instructeur->getVal("nom"),
4361     "division" => $division->getVal("libelle"),
4362     "etat_dossier" => $this->getVal("etat"),
4363     "statut_dossier" => $this->getStatut(),
4364     "date_depot_initial" => $this->getVal("date_depot"),
4365     "date_limite_instruction" => $this->getVal("date_limite"),
4366     "date_decision" => $this->getVal("date_decision"),
4367     "enjeu_urbanisme" => $this->getVal("enjeu_urba") == 't' ? 'true' : 'false',
4368     "enjeu_erp" => $this->getVal("enjeu_erp") == 't' ? 'true' : 'false',
4369 fmichon 4708 );
4370    
4371     /**
4372     * Gestion des demandeurs
4373     *
4374     * - 'petitionnaire_principal' (obigatoire)
4375     * - 'delegataire' (facultatif)
4376     * - 'autres_petitionnaires' (facultatif)
4377     */
4378     //
4379     $this->listeDemandeur('dossier', $this->getVal($this->clePrimaire));
4380     //
4381     require_once "../obj/petitionnaire.class.php";
4382     require_once "../obj/delegataire.class.php";
4383     //
4384     $demandeur = new petitionnaire($this->valIdDemandeur["petitionnaire_principal"], $this->f->db, false);
4385     $datas["petitionnaire_principal"] = $demandeur->get_datas();
4386     $demandeur->__destruct();
4387     //
4388     if (isset($this->valIdDemandeur["delegataire"]) && !empty($this->valIdDemandeur["delegataire"])) {
4389     $demandeur = new delegataire($this->valIdDemandeur["delegataire"], $this->f->db, false);
4390     $datas["delegataire"] = $demandeur->get_datas();
4391     $demandeur->__destruct();
4392     }
4393     //
4394     if (isset($this->valIdDemandeur["petitionnaire"]) AND !empty($this->valIdDemandeur["petitionnaire"])) {
4395     $datas["autres_petitionnaires"] = array();
4396     foreach ($this->valIdDemandeur["petitionnaire"] as $petitionnaire) {
4397     $demandeur = new petitionnaire($petitionnaire, $this->f->db, false);
4398     $datas["autres_petitionnaires"][] = $demandeur->get_datas();
4399     $demandeur->__destruct();
4400     }
4401     }
4402    
4403 nhaye 4777 // Tableau contenant le nom de chaque champ de données techniques à retourner
4404     $dt_a_afficher = array(
4405     "co_tot_log_nb",
4406     "co_cstr_exist",
4407     "co_uti_pers",
4408     "co_uti_vente",
4409     "co_uti_loc",
4410     "su_tot_shon_tot",
4411     "su_avt_shon_tot",
4412     "am_lot_max_nb",
4413     "am_empl_nb",
4414     );
4415    
4416 jymadier 4785 // Tableau associatif contenant les données techniques voulues
4417     $tab_donnees_techniques = array();
4418 nhaye 4777 foreach ($dt_a_afficher as $key) {
4419     // On ajoute le champ de données techniques dans le retour seulement s'il
4420     // existe dans $donnees_techniques (s'il est applicable au dossier)
4421 jymadier 4785 if (array_key_exists($key, $donnees_techniques) === true) {
4422 nhaye 4777 if ($donnees_techniques[$key] === 't') {
4423     $donnees_techniques[$key] = 'true';
4424     };
4425     if ($donnees_techniques[$key] === 'f') {
4426     $donnees_techniques[$key] = 'false';
4427     };
4428 jymadier 4785 $tab_donnees_techniques[$key] = $donnees_techniques[$key];
4429 nhaye 4777 };
4430     };
4431    
4432 jymadier 4785 $datas['donnees_techniques'] = $tab_donnees_techniques;
4433 fmichon 4708 /**
4434     *
4435     */
4436     //
4437     return $datas;
4438     }
4439    
4440 nhaye 4777
4441 mbroquet 3730 }
4442    
4443     ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26