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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4636 - (hide annotations)
Tue Jun 28 10:59:15 2016 UTC (8 years, 7 months ago) by softime
File size: 214513 byte(s)
* Réglementaire - Ajouts et modifications des données techniques par rapport aux
  nouvelles versions des CERFA, notamment l'ajout du nouveau tableau des
  surfaces. Ajout d'une correspondance entre l'ancien tableau des surfaces et le
  nouveau pour l'export SITADEL.
  Ticket #8285.

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26