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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26