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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26