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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4667 - (show annotations)
Wed Jun 29 16:50:16 2016 UTC (8 years, 7 months ago) by softime
File size: 214825 byte(s)
* Amélioration - Ajout d'un profil "Administrateur technique et fonctionnel"
  possédant tous les droits.
  Ticket #8400.

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26