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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5024 - (show annotations)
Wed Nov 2 14:39:23 2016 UTC (8 years, 3 months ago) by softime
File size: 206032 byte(s)
* Merge de la branche de développement 3.33.x

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26