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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 8329 - (show annotations)
Wed Nov 14 11:20:57 2018 UTC (6 years, 2 months ago) by softime
File size: 278487 byte(s)
* Merge de la branche d'intégration 4.8.0-develop dans le trunk

1 <?php
2 /**
3 * DBFORM - 'dossier' - Surcharge gen.
4 *
5 * @package openads
6 * @version SVN : $$Id: dossier.class.php 6912 2017-06-15 08:20:09Z tuxayo $
7 */
8
9 require_once "../gen/obj/dossier.class.php";
10
11 class dossier extends dossier_gen {
12
13 var $maj;
14 var $dossier_instruction_type;
15 var $is_incomplet_notifie = null;
16 var $valIdDemandeur = array("petitionnaire_principal" => array(),
17 "delegataire" => array(),
18 "petitionnaire" => array(),
19 "plaignant_principal" => array(),
20 "plaignant" => array(),
21 "contrevenant_principal" => array(),
22 "contrevenant" => array(),
23 "requerant_principal" => array(),
24 "requerant" => array(),
25 "avocat_principal" => array(),
26 "avocat" => array(),
27 "bailleur_principal" => array(),
28 "bailleur" => array(),
29 );
30 var $postedIdDemandeur = array("petitionnaire_principal" => array(),
31 "delegataire" => array(),
32 "petitionnaire" => array(),
33 "plaignant_principal" => array(),
34 "plaignant" => array(),
35 "contrevenant_principal" => array(),
36 "contrevenant" => array(),
37 "requerant_principal" => array(),
38 "requerant" => array(),
39 "avocat_principal" => array(),
40 "avocat" => array(),
41 "bailleur_principal" => array(),
42 "bailleur" => array(),
43 );
44 /**
45 * Instance de la classe taxe_amenagement.
46 *
47 * @var null
48 */
49 var $inst_taxe_amenagement = null;
50
51 /**
52 * Instance de la classe donnees_techniques.
53 *
54 * @var null
55 */
56 var $inst_donnees_techniques = null;
57
58 /**
59 * Instance de la classe dossier_autorisation.
60 *
61 * @var mixed (resource | null)
62 */
63 var $inst_dossier_autorisation = null;
64
65 /**
66 * Instance de la classe dossier_autorisation_type_detaille.
67 *
68 * @var null
69 */
70 var $inst_dossier_autorisation_type_detaille = null;
71
72 /**
73 * Instance de la classe cerfa.
74 *
75 * @var null
76 */
77 var $inst_cerfa = null;
78
79 /**
80 * Groupe du dossier d'instruction.
81 *
82 * @var null
83 */
84 var $groupe = null;
85
86 /**
87 * Instance de la classe groupe.
88 */
89 var $inst_groupe = null;
90
91 /**
92 * Instance de la classe dossier_autorisation_type.
93 *
94 * @var null
95 */
96 var $inst_dossier_autorisation_type = null;
97
98 /**
99 * Instance de la classe demande.
100 *
101 * @var mixed (resource | null)
102 */
103 var $inst_demande = null;
104
105 /*Mutateur pour ma variable dossier_instruction_type*/
106 public function getDossierInstructionType(){
107 return $this->dossier_instruction_type;
108 }
109 public function setDossierInstructionType($dossier_instruction_type){
110 $this->dossier_instruction_type = $dossier_instruction_type;
111 }
112
113 /**
114 * Définition des actions disponibles sur la classe.
115 *
116 * @return void
117 */
118 function init_class_actions() {
119
120 parent::init_class_actions();
121
122 // ACTION - 003 - consulter
123 //
124 $this->class_actions[3]["condition"] = array(
125 "is_user_from_allowed_collectivite",
126 "check_context",
127 );
128
129 // ACTION - 004 - contrainte
130 //
131 $this->class_actions[4] = array(
132 "identifier" => "contrainte",
133 "view" => "view_contrainte",
134 "permission_suffix" => "contrainte_tab",
135 "condition" => array(
136 "is_user_from_allowed_collectivite",
137 ),
138 );
139
140 // ACTION - 005 - view_document_numerise
141 // Interface spécifique du tableau des pièces
142 $this->class_actions[5] = array(
143 "identifier" => "view_document_numerise",
144 "view" => "view_document_numerise",
145 "permission_suffix" => "document_numerise",
146 "condition" => array(
147 "is_user_from_allowed_collectivite",
148 ),
149 );
150
151 // ACTION - 006 - view_sitadel
152 //
153 $this->class_actions[6] = array(
154 "identifier" => "sitadel",
155 "view" => "view_sitadel",
156 "permission_suffix" => "export_sitadel",
157 );
158
159 // ACTION - 777 - Redirection vers la classe fille adéquate
160 //
161 $this->class_actions[777] = array(
162 "identifier" => "redirect",
163 "view" => "redirect",
164 "permission_suffix" => "consulter",
165 );
166 }
167
168 /**
169 * VIEW - view_sitadel.
170 *
171 * @return void
172 */
173 function view_sitadel() {
174
175 $post = $this->f->get_submitted_post_value();
176 // 1ere étape : affichage du formulaire permettant le choix d'un interval de date
177 // ainsi que le numéro de d'ordre qui est le numéro de la version de
178 // l'export
179 if (empty($post)) {
180 // Initialisation des variables
181 $datedebut = "";
182 $datefin = "";
183 $numero = "";
184 // Récupération des paramètres
185 if ($this->f->get_submitted_get_value("datedebut") !== null AND $this->f->get_submitted_get_value("datedebut") != "") {
186 $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);
187 }
188 if ($this->f->get_submitted_get_value("datefin") !== null AND $this->f->get_submitted_get_value("datefin") != "") {
189 $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);
190 }
191 if ($this->f->get_submitted_get_value("numero") !== null AND $this->f->get_submitted_get_value("numero") != "") {
192 $numero = $this->f->get_submitted_get_value("numero");
193 }
194 // Affichage du formulaire
195 $this->affichageFormulaire($datedebut, $datefin, $numero);
196 }
197 else {
198 // Initialisation des variables pour les messages de fin de traitement
199 $correct=true;
200 // Initialisation de la chaîne contenant le message d'erreur
201 $erreur = "";
202
203 // Initialisation des dates de début et de fin
204 $datedebut ='';
205 $datefin='';
206
207 // Traitement des erreurs
208 if ($this->f->get_submitted_post_value("datedebut") == "") {
209 $correct=false;
210 } else {
211 $datedebut = substr($this->f->get_submitted_post_value("datedebut"),6,4).
212 "-".substr($this->f->get_submitted_post_value("datedebut"),3,2)."-".
213 substr($this->f->get_submitted_post_value("datedebut"),0,2);
214 }
215 if ($this->f->get_submitted_post_value("datefin") == "") {
216 $correct=false;
217 } else {
218 $datefin = substr($this->f->get_submitted_post_value("datefin"),6,4).
219 "-".substr($this->f->get_submitted_post_value("datefin"),3,2)."-".
220 substr($this->f->get_submitted_post_value("datefin"),0,2);
221 }
222 $numero = $this->f->get_submitted_post_value("numero");
223 // Composition du tableau de paramètres pour le bouton retour
224 $params = array(
225 "href" => OM_ROUTE_FORM."&obj=sitadel&action=6&idx=0&datedebut=".$datedebut."&amp;datefin=".$datefin."&amp;numero=".$numero,
226 );
227 //
228 if ($correct === true){ // ***
229 // Affichage du bouton retour
230 $this->f->layout->display_form_retour($params);
231 // Requête permettant de lister tous les dossiers de l'export
232 $sql= "SELECT dossier.dossier,
233 dossier.om_collectivite as collectivite,
234 dossier.dossier_autorisation,
235 dossier_instruction_type.mouvement_sitadel,
236 dossier_instruction_type.code as dossier_instruction_type_code,
237 dossier.date_depot,
238 dossier.date_decision,
239 dossier.date_chantier,
240 dossier.date_achevement,
241 dossier.terrain_references_cadastrales as dossier_terrain_references_cadastrales,
242 dossier.terrain_adresse_voie_numero as dossier_terrain_adresse_voie_numero,
243 dossier.terrain_adresse_voie as dossier_terrain_adresse_voie,
244 dossier.terrain_adresse_lieu_dit as dossier_terrain_adresse_lieu_dit,
245 dossier.terrain_adresse_localite as dossier_terrain_adresse_localite,
246 dossier.terrain_adresse_code_postal as dossier_terrain_adresse_code_postal,
247 dossier.terrain_adresse_bp as dossier_terrain_adresse_bp,
248 dossier.terrain_adresse_cedex as dossier_terrain_adresse_cedex,
249 dossier_autorisation_type.code,
250 dossier.date_limite,
251 dossier.date_limite_incompletude,
252 dossier.date_notification_delai,
253 dossier.terrain_superficie as dossier_terrain_superficie,
254 dossier.date_modification,
255 dossier.hash_sitadel,
256
257 arrondissement.code_impots as code_impots,
258
259 autorite_competente.autorite_competente_sitadel,
260 pp.type_demandeur,
261 pp.qualite,
262 civilite_pp.libelle as civilite_pp,
263 pp.particulier_nom as pp_particulier_nom,
264 pp.particulier_prenom as pp_particulier_prenom,
265 pp.personne_morale_denomination as pp_personne_morale_denomination,
266 pp.personne_morale_raison_sociale as pp_personne_morale_raison_sociale,
267 pp.personne_morale_siret as pp_personne_morale_siret,
268 pp.personne_morale_categorie_juridique as pp_personne_morale_categorie_juridique,
269 civilite_pm.libelle as civilite_pm_libelle,
270 pp.personne_morale_nom as pp_personne_morale_nom,
271 pp.personne_morale_prenom as pp_personne_morale_prenom,
272
273 pp.numero as pp_numero,
274 pp.voie as pp_voie,
275 pp.complement as pp_complement,
276 pp.lieu_dit as pp_lieu_dit,
277 pp.localite as pp_localite,
278 pp.code_postal as pp_code_postal,
279 pp.bp as pp_bp,
280 pp.cedex as pp_cedex,
281 pp.pays as pp_pays,
282 pp.division_territoriale as pp_division_territoriale,
283
284 pp.telephone_fixe as pp_telephone_fixe,
285 pp.courriel as pp_courriel,
286
287 donnees_techniques.co_archi_recours,
288 donnees_techniques.am_terr_surf,
289 donnees_techniques.am_lotiss,
290 donnees_techniques.terr_juri_zac,
291 donnees_techniques.terr_juri_afu,
292 donnees_techniques.co_projet_desc,
293 donnees_techniques.am_projet_desc,
294 donnees_techniques.dm_projet_desc,
295 donnees_techniques.co_cstr_nouv,
296 donnees_techniques.co_cstr_exist,
297 donnees_techniques.co_modif_aspect,
298 donnees_techniques.co_modif_struct,
299 donnees_techniques.co_cloture,
300 donnees_techniques.co_trx_exten,
301 donnees_techniques.co_trx_surelev,
302 donnees_techniques.co_trx_nivsup,
303 donnees_techniques.co_trx_amgt,
304 donnees_techniques.co_anx_pisc,
305 donnees_techniques.co_anx_gara,
306 donnees_techniques.co_anx_veran,
307 donnees_techniques.co_anx_abri,
308 donnees_techniques.co_anx_autr,
309 donnees_techniques.co_bat_niv_nb,
310
311 -- Tableau des destinations
312 donnees_techniques.su_avt_shon1,
313 donnees_techniques.su_avt_shon2,
314 donnees_techniques.su_avt_shon3,
315 donnees_techniques.su_avt_shon4,
316 donnees_techniques.su_avt_shon5,
317 donnees_techniques.su_avt_shon6,
318 donnees_techniques.su_avt_shon7,
319 donnees_techniques.su_avt_shon8,
320 donnees_techniques.su_avt_shon9,
321 donnees_techniques.su_demo_shon1,
322 donnees_techniques.su_demo_shon2,
323 donnees_techniques.su_demo_shon3,
324 donnees_techniques.su_demo_shon4,
325 donnees_techniques.su_demo_shon5,
326 donnees_techniques.su_demo_shon6,
327 donnees_techniques.su_demo_shon7,
328 donnees_techniques.su_demo_shon8,
329 donnees_techniques.su_demo_shon9,
330 donnees_techniques.su_chge_shon1,
331 donnees_techniques.su_chge_shon2,
332 donnees_techniques.su_chge_shon3,
333 donnees_techniques.su_chge_shon4,
334 donnees_techniques.su_chge_shon5,
335 donnees_techniques.su_chge_shon6,
336 donnees_techniques.su_chge_shon7,
337 donnees_techniques.su_chge_shon8,
338 donnees_techniques.su_chge_shon9,
339 donnees_techniques.su_sup_shon1,
340 donnees_techniques.su_sup_shon2,
341 donnees_techniques.su_sup_shon3,
342 donnees_techniques.su_sup_shon4,
343 donnees_techniques.su_sup_shon5,
344 donnees_techniques.su_sup_shon6,
345 donnees_techniques.su_sup_shon7,
346 donnees_techniques.su_sup_shon8,
347 donnees_techniques.su_sup_shon9,
348 donnees_techniques.su_cstr_shon1,
349 donnees_techniques.su_cstr_shon2,
350 donnees_techniques.su_cstr_shon3,
351 donnees_techniques.su_cstr_shon4,
352 donnees_techniques.su_cstr_shon5,
353 donnees_techniques.su_cstr_shon6,
354 donnees_techniques.su_cstr_shon7,
355 donnees_techniques.su_cstr_shon8,
356 donnees_techniques.su_cstr_shon9,
357 donnees_techniques.su_tot_shon1,
358 donnees_techniques.su_tot_shon2,
359 donnees_techniques.su_tot_shon3,
360 donnees_techniques.su_tot_shon4,
361 donnees_techniques.su_tot_shon5,
362 donnees_techniques.su_tot_shon6,
363 donnees_techniques.su_tot_shon7,
364 donnees_techniques.su_tot_shon8,
365 donnees_techniques.su_tot_shon9,
366 -- XXX valeurs obsolètes mais utilisées dans les conditions
367 -- pour afficher les messages d'incohérence
368 donnees_techniques.su_trsf_shon1,
369 donnees_techniques.su_trsf_shon2,
370 donnees_techniques.su_trsf_shon3,
371 donnees_techniques.su_trsf_shon4,
372 donnees_techniques.su_trsf_shon5,
373 donnees_techniques.su_trsf_shon6,
374 donnees_techniques.su_trsf_shon7,
375 donnees_techniques.su_trsf_shon8,
376 donnees_techniques.su_trsf_shon9,
377
378 -- Tableau des sous-destinations
379 donnees_techniques.su2_avt_shon1,
380 donnees_techniques.su2_avt_shon2,
381 donnees_techniques.su2_avt_shon3,
382 donnees_techniques.su2_avt_shon4,
383 donnees_techniques.su2_avt_shon5,
384 donnees_techniques.su2_avt_shon6,
385 donnees_techniques.su2_avt_shon7,
386 donnees_techniques.su2_avt_shon8,
387 donnees_techniques.su2_avt_shon9,
388 donnees_techniques.su2_avt_shon10,
389 donnees_techniques.su2_avt_shon11,
390 donnees_techniques.su2_avt_shon12,
391 donnees_techniques.su2_avt_shon13,
392 donnees_techniques.su2_avt_shon14,
393 donnees_techniques.su2_avt_shon15,
394 donnees_techniques.su2_avt_shon16,
395 donnees_techniques.su2_avt_shon17,
396 donnees_techniques.su2_avt_shon18,
397 donnees_techniques.su2_avt_shon19,
398 donnees_techniques.su2_avt_shon20,
399 donnees_techniques.su2_demo_shon1,
400 donnees_techniques.su2_demo_shon2,
401 donnees_techniques.su2_demo_shon3,
402 donnees_techniques.su2_demo_shon4,
403 donnees_techniques.su2_demo_shon5,
404 donnees_techniques.su2_demo_shon6,
405 donnees_techniques.su2_demo_shon7,
406 donnees_techniques.su2_demo_shon8,
407 donnees_techniques.su2_demo_shon9,
408 donnees_techniques.su2_demo_shon10,
409 donnees_techniques.su2_demo_shon11,
410 donnees_techniques.su2_demo_shon12,
411 donnees_techniques.su2_demo_shon13,
412 donnees_techniques.su2_demo_shon14,
413 donnees_techniques.su2_demo_shon15,
414 donnees_techniques.su2_demo_shon16,
415 donnees_techniques.su2_demo_shon17,
416 donnees_techniques.su2_demo_shon18,
417 donnees_techniques.su2_demo_shon19,
418 donnees_techniques.su2_demo_shon20,
419 donnees_techniques.su2_chge_shon1,
420 donnees_techniques.su2_chge_shon2,
421 donnees_techniques.su2_chge_shon3,
422 donnees_techniques.su2_chge_shon4,
423 donnees_techniques.su2_chge_shon5,
424 donnees_techniques.su2_chge_shon6,
425 donnees_techniques.su2_chge_shon7,
426 donnees_techniques.su2_chge_shon8,
427 donnees_techniques.su2_chge_shon9,
428 donnees_techniques.su2_chge_shon10,
429 donnees_techniques.su2_chge_shon11,
430 donnees_techniques.su2_chge_shon12,
431 donnees_techniques.su2_chge_shon13,
432 donnees_techniques.su2_chge_shon14,
433 donnees_techniques.su2_chge_shon15,
434 donnees_techniques.su2_chge_shon16,
435 donnees_techniques.su2_chge_shon17,
436 donnees_techniques.su2_chge_shon18,
437 donnees_techniques.su2_chge_shon19,
438 donnees_techniques.su2_chge_shon20,
439 donnees_techniques.su2_sup_shon1,
440 donnees_techniques.su2_sup_shon2,
441 donnees_techniques.su2_sup_shon3,
442 donnees_techniques.su2_sup_shon4,
443 donnees_techniques.su2_sup_shon5,
444 donnees_techniques.su2_sup_shon6,
445 donnees_techniques.su2_sup_shon7,
446 donnees_techniques.su2_sup_shon8,
447 donnees_techniques.su2_sup_shon9,
448 donnees_techniques.su2_sup_shon10,
449 donnees_techniques.su2_sup_shon11,
450 donnees_techniques.su2_sup_shon12,
451 donnees_techniques.su2_sup_shon13,
452 donnees_techniques.su2_sup_shon14,
453 donnees_techniques.su2_sup_shon15,
454 donnees_techniques.su2_sup_shon16,
455 donnees_techniques.su2_sup_shon17,
456 donnees_techniques.su2_sup_shon18,
457 donnees_techniques.su2_sup_shon19,
458 donnees_techniques.su2_sup_shon20,
459 donnees_techniques.su2_cstr_shon1,
460 donnees_techniques.su2_cstr_shon2,
461 donnees_techniques.su2_cstr_shon3,
462 donnees_techniques.su2_cstr_shon4,
463 donnees_techniques.su2_cstr_shon5,
464 donnees_techniques.su2_cstr_shon6,
465 donnees_techniques.su2_cstr_shon7,
466 donnees_techniques.su2_cstr_shon8,
467 donnees_techniques.su2_cstr_shon9,
468 donnees_techniques.su2_cstr_shon10,
469 donnees_techniques.su2_cstr_shon11,
470 donnees_techniques.su2_cstr_shon12,
471 donnees_techniques.su2_cstr_shon13,
472 donnees_techniques.su2_cstr_shon14,
473 donnees_techniques.su2_cstr_shon15,
474 donnees_techniques.su2_cstr_shon16,
475 donnees_techniques.su2_cstr_shon17,
476 donnees_techniques.su2_cstr_shon18,
477 donnees_techniques.su2_cstr_shon19,
478 donnees_techniques.su2_cstr_shon20,
479 donnees_techniques.su2_tot_shon1,
480 donnees_techniques.su2_tot_shon2,
481 donnees_techniques.su2_tot_shon3,
482 donnees_techniques.su2_tot_shon4,
483 donnees_techniques.su2_tot_shon5,
484 donnees_techniques.su2_tot_shon6,
485 donnees_techniques.su2_tot_shon7,
486 donnees_techniques.su2_tot_shon8,
487 donnees_techniques.su2_tot_shon9,
488 donnees_techniques.su2_tot_shon10,
489 donnees_techniques.su2_tot_shon11,
490 donnees_techniques.su2_tot_shon12,
491 donnees_techniques.su2_tot_shon13,
492 donnees_techniques.su2_tot_shon14,
493 donnees_techniques.su2_tot_shon15,
494 donnees_techniques.su2_tot_shon16,
495 donnees_techniques.su2_tot_shon17,
496 donnees_techniques.su2_tot_shon18,
497 donnees_techniques.su2_tot_shon19,
498 donnees_techniques.su2_tot_shon20,
499
500 donnees_techniques.co_sp_transport,
501 donnees_techniques.co_sp_enseign,
502 donnees_techniques.co_sp_sante,
503 donnees_techniques.co_sp_act_soc,
504 donnees_techniques.co_sp_ouvr_spe,
505 donnees_techniques.co_sp_culture,
506 donnees_techniques.dm_tot_log_nb,
507 donnees_techniques.co_tot_ind_nb,
508 donnees_techniques.co_tot_coll_nb,
509 donnees_techniques.co_tot_log_nb,
510 donnees_techniques.co_resid_agees,
511 donnees_techniques.co_resid_etud,
512 donnees_techniques.co_resid_tourism,
513 donnees_techniques.co_resid_hot_soc,
514 donnees_techniques.co_resid_hand,
515 donnees_techniques.co_resid_autr,
516 donnees_techniques.co_resid_autr_desc,
517 donnees_techniques.co_uti_pers,
518 donnees_techniques.co_uti_princ,
519 donnees_techniques.co_uti_secon,
520 donnees_techniques.co_uti_vente,
521 donnees_techniques.co_uti_loc,
522 donnees_techniques.co_foyer_chamb_nb,
523 donnees_techniques.co_fin_lls_nb,
524 donnees_techniques.co_fin_aa_nb,
525 donnees_techniques.co_fin_ptz_nb,
526 donnees_techniques.co_fin_autr_nb,
527 donnees_techniques.co_mais_piece_nb,
528 donnees_techniques.co_log_1p_nb,
529 donnees_techniques.co_log_2p_nb,
530 donnees_techniques.co_log_3p_nb,
531 donnees_techniques.co_log_4p_nb,
532 donnees_techniques.co_log_5p_nb,
533 donnees_techniques.co_log_6p_nb,
534 donnees_techniques.mod_desc,
535
536 donnees_techniques.doc_date,
537 donnees_techniques.terr_div_surf_av_div,
538 donnees_techniques.doc_tot_trav,
539 donnees_techniques.doc_tranche_trav,
540 donnees_techniques.doc_tranche_trav_desc,
541 donnees_techniques.doc_surf,
542 donnees_techniques.doc_nb_log,
543 donnees_techniques.doc_nb_log_indiv,
544 donnees_techniques.doc_nb_log_coll,
545 donnees_techniques.doc_nb_log_lls,
546 donnees_techniques.doc_nb_log_aa,
547 donnees_techniques.doc_nb_log_ptz,
548 donnees_techniques.doc_nb_log_autre,
549 donnees_techniques.daact_date,
550 donnees_techniques.daact_date_chgmt_dest,
551 donnees_techniques.daact_tot_trav,
552 donnees_techniques.daact_tranche_trav,
553 donnees_techniques.daact_tranche_trav_desc,
554 donnees_techniques.daact_surf,
555 donnees_techniques.daact_nb_log,
556 donnees_techniques.daact_nb_log_indiv,
557 donnees_techniques.daact_nb_log_coll,
558 donnees_techniques.daact_nb_log_lls,
559 donnees_techniques.daact_nb_log_aa,
560 donnees_techniques.daact_nb_log_ptz,
561 donnees_techniques.daact_nb_log_autre,
562
563 dossier_autorisation.date_depot as date_depot_da,
564 dossier_autorisation.date_decision as date_decision_da,
565 dossier_autorisation.date_validite as date_validite_da,
566 dossier_autorisation.date_chantier as date_chantier_da,
567 dossier_autorisation.date_achevement as date_achevement_da,
568 avis_decision.typeavis as typeavis_da,
569 avis_decision.sitadel,
570 avis_decision.sitadel_motif,
571 avis_decision.typeavis,
572 etat.statut as statut_di
573
574 FROM ".DB_PREFIXE."dossier
575
576 INNER JOIN ".DB_PREFIXE."dossier_instruction_type
577 ON dossier.dossier_instruction_type =
578 dossier_instruction_type.dossier_instruction_type
579 INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
580 ON dossier_instruction_type.dossier_autorisation_type_detaille
581 =dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
582 INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
583 ON dossier_autorisation_type.dossier_autorisation_type
584 =dossier_autorisation_type_detaille.dossier_autorisation_type
585 INNER JOIN ".DB_PREFIXE."groupe
586 ON dossier_autorisation_type.groupe = groupe.groupe
587 AND groupe.code != 'CTX'
588 INNER JOIN ".DB_PREFIXE."dossier_autorisation
589 ON dossier_autorisation.dossier_autorisation
590 =dossier.dossier_autorisation
591 INNER JOIN ".DB_PREFIXE."autorite_competente
592 ON autorite_competente.autorite_competente
593 =dossier.autorite_competente
594
595 LEFT JOIN ".DB_PREFIXE."donnees_techniques
596 ON donnees_techniques.dossier_instruction = dossier.dossier
597 LEFT JOIN ".DB_PREFIXE."avis_decision
598 ON avis_decision.avis_decision = dossier.avis_decision
599 LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur as ldd_pp
600 ON ldd_pp.dossier = dossier.dossier
601 LEFT JOIN ".DB_PREFIXE."demandeur as pp
602 ON ldd_pp.demandeur = pp.demandeur
603 LEFT JOIN ".DB_PREFIXE."civilite as civilite_pp
604 ON civilite_pp.civilite = pp.particulier_civilite
605 LEFT JOIN ".DB_PREFIXE."civilite as civilite_pm
606 ON civilite_pm.civilite = pp.personne_morale_civilite
607 LEFT JOIN ".DB_PREFIXE."etat
608 ON etat.etat = dossier.etat
609 LEFT JOIN ".DB_PREFIXE."arrondissement
610 ON dossier_autorisation.arrondissement=arrondissement.arrondissement
611
612 WHERE dossier_instruction_type.mouvement_sitadel IS NOT NULL
613 AND ldd_pp.petitionnaire_principal is TRUE
614 AND (dossier.date_modification >= '".$datedebut."' AND dossier.date_modification <= '".$datefin."')
615 ORDER by dossier_instruction_type.mouvement_sitadel, dossier.dossier";
616 //Exécution de la requête
617 $res = $this->f->db -> query ($sql);
618 $this->f->addToLog("dossier.class.php : db->query(\"".$sql."\")", VERBOSE_MODE);
619 $this->f->isDatabaseError($res);
620 $export="";
621 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
622 // initialisation de la classe permettant la mise en forme de chaque ligne de l'export
623 require_once "../obj/export_sitadel.class.php";
624 $export_sitadel = new export_sitadel($row['dossier'], $this->f);
625 $export_sitadel->setRow($row);
626 //Ajout du fichier de variable
627 if(file_exists ("../sql/".OM_DB_PHPTYPE."/export_sitadel.inc.php")) {
628 include ("../sql/".OM_DB_PHPTYPE."/export_sitadel.inc.php");
629 }
630 //
631 $export_sitadel->setVal($val);
632 $departement = $export_sitadel->getDepartement($row["collectivite"]);
633 $commune = $export_sitadel->getCommune($row["collectivite"]);
634 $region = $this->f->getParameter("region");
635
636 // Initialisation des variables pour le tableau des
637 // surfaces en version 1
638 $prefix_su = 'su';
639 $count_su = 9;
640 // S'il faut utiliser le tableau des surfaces en
641 // version 2
642 if ($export_sitadel->get_tab_su_version() === 2) {
643 //
644 $prefix_su = 'su2';
645 $count_su = 20;
646 }
647
648 // Récupère la version du dossier d'instruction depuis son
649 // numéro
650 $version = 0;
651 $version = intval($this->get_dossier_instruction_version($row['dossier']));
652
653 // Mouvement de dépôt
654 $depot="";
655
656 // Tous les mouvements autres que transfert ont comme mouvement le code DEPOT
657 // les décisions devant êtres précédées par le dépôt correspondant,
658 // les dossiers avec date de décision comprise dans l'interval fourni sont
659 // réaffichés en tant que dépôts (mouvement DEPOT)
660 if (($row['mouvement_sitadel'] == 'DEPOT'||($row['mouvement_sitadel'] == 'MODIFICATIF'
661 AND $row['statut_di']=='cloture' AND $row['typeavis']=='F'))) {
662 $depot.=$export_sitadel->entete("DEPOT",$departement,$commune, $version);
663 $depot.=$export_sitadel->etatcivil();
664 $depot.=$export_sitadel->adresse();
665 $depot.=$export_sitadel->delegataire();
666 $depot.=$export_sitadel->meltel($row['mouvement_sitadel']);
667 $depot.=$export_sitadel->adresse_terrain();
668 $depot.=$export_sitadel->parcelle();
669 // ===========================
670 // contrat maison individuelle
671 // ===========================
672 // sitadel : contrat|
673 // openads : non renseigne
674 $depot.= $export_sitadel->defaultValue('contrat')."|";
675 // ==========
676 // architecte
677 // ==========
678 // sitadel : architecte|
679 // openads : données techniques.co_archi_recours
680 $depot.= ($row['co_archi_recours'] == "t")?"1|":"0|";
681 // =====================
682 // utilisation data cnil
683 // ======================
684 // sitadel : cnil
685 // openads : non renseigne
686 $depot.= $export_sitadel->defaultValue('cnil');
687 // fin d enregistrement depot
688 $depot.="\n";
689 }
690
691 // Seuls les dossier de type transfert ont comme mouvement le code TRANSFERT
692 $transfert ="";
693 if ($row['mouvement_sitadel']=='TRANSFERT') {
694 $transfert.=$export_sitadel->entete("TRANSFERT",$departement,$commune, $version);
695 $transfert.=$export_sitadel->etatcivil();
696 $transfert.=$export_sitadel->adresse();
697 $transfert.=$export_sitadel->meltel($row['mouvement_sitadel']);
698 $transfert.="\n";
699 }
700
701
702 // Une ligne de mouvement DECISION est insérée après chaque ligne
703 // de mouvement DEPOT
704 $decision="";
705 if ($row['mouvement_sitadel'] != 'TRANSFERT'
706 and $row['mouvement_sitadel'] != 'SUPPRESSION'
707 and $row['mouvement_sitadel'] == 'DEPOT') {
708
709 //Ajout de l'entête
710 $decision.=$export_sitadel->entete("DECISION",$departement,$commune, $version);
711
712 //Ajout du groupe 1
713 $decision.= $export_sitadel->decision_groupe1();
714 // Si la décision est favorable, on remplit le groupe 2
715 if ( $row['sitadel'] == 2 || $row['sitadel'] == 4 || $row['sitadel'] == 5
716 || $row['sitadel'] == 0 ){
717 //
718 $decision.= $export_sitadel->amenagement_terrain();
719 //Nature du projet
720 $natproj = 2;
721 $natprojlib= array(
722 1=>_("Nouvelle construction"),
723 2=>_("Travaux sur construction existante"),
724 3=>_("Nouvelle construction et travaux sur construction"),
725 );
726 if ( isset($row['co_cstr_nouv']) && isset($row['co_cstr_exist']) &&
727 $row['co_cstr_nouv'] == 't' &&
728 $row['co_cstr_exist'] == 't' ){
729 $natproj = 3;
730 }
731 //Nouvelle construction
732 elseif ( isset($row['co_cstr_nouv']) && $row['co_cstr_nouv'] == 't' ) {
733 $natproj = 1;
734 }
735 //
736 $su_avt_shon = $export_sitadel->shon("avt");
737 //Si la SHON existante avant travaux est supérieur à la SHON
738 //démolie alors la variable natproj est égale à 2
739 $shonExistante = 0;
740 $shonDemolie = 0;
741 // Pour chaque ligne du tableau
742 for ($i = 1; $i <= $count_su; $i++) {
743 //
744 $shonExistante += floor($row[$prefix_su.'_avt_shon'.$i]);
745 $shonDemolie += floor($row[$prefix_su.'_demo_shon'.$i]);
746 }
747 //Si la SHON existante avant travaux et la SHON démolie sont
748 //égales alors la variable natproj est égale à 1
749 if ( $shonExistante == 0 && $shonDemolie == 0 && $natproj != 1 &&
750 $row['code'] != 'DP' && $row['code'] != 'PA') {
751 $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";
752 } elseif ( $shonExistante > $shonDemolie && $natproj != 2 ){
753 $erreur .= _("Dossier ").$row['dossier']." \"".$natprojlib[$natproj]."\" "._("La SHON existante avant travaux ne doit pas être supérieure à la SHON démolie.")."\n";
754 }
755 $decision .= $su_avt_shon;
756
757 $su_demo_shon = $export_sitadel->shon("demo");
758 //La SHON démolie s'accompagne obligatoirement de la shon
759 //existante avant travaux
760 if ( $shonDemolie != 0 && $shonExistante == 0 ){
761 $erreur .= _("Dossier ").$row['dossier']." "._("La SHON demolie s'accompagne obligatoirement de la SHON existante avant travaux.")."\n";
762 }
763 $decision .= $su_demo_shon;
764 //
765 $su_sup_shon = $export_sitadel->shon("sup");
766 $su_chge_shon = $export_sitadel->shon("chge");
767 if ( strcasecmp($su_sup_shon, $su_chge_shon) != 0){
768 //
769 $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";
770 }
771 $decision .= $su_sup_shon;
772 $decision .= $su_chge_shon;
773 $decision .= $export_sitadel->shon("cstr");
774 $decision .= "0|0|0|0|0|0|0|0|0|";
775 // Les SHON créées par changement de destination ou
776 // de sous-destination s'accompagnent obligatoirement
777 // de SHON existante avant travaux non nulle
778 if (preg_match("/[0|]{7}/", $su_chge_shon) &&
779 preg_match("/[0|]{7}/", $su_avt_shon)){
780
781 $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";
782 }
783 // Un nombre de logements démolis strictement positif doit
784 // s'accompagner obligatoirement de SHON démolie.
785 if($row['dm_tot_log_nb'] > 0) {
786 if($export_sitadel->get_shon_val('demo', 1) <= 0) {
787 //
788 $erreur .= _("Dossier ").$row['dossier']." "._("Un nombre de logements demolis strictement positif doit s'accompagner obligatoirement de SHON demolie.")."\n";
789 }
790 }
791 // Un nombre de logements créés strictement positif doit
792 // s'accompagner obligatoirement de SHON créée ou de SHON
793 // créée par changement de destination ou de sous-destination
794 // ayant pour destination l'habitation.
795 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)) {
796 //
797 $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";
798 }
799
800 // La SHON créée ou issue de la transformation
801 // suffixée par 9 (intérêt collectif ou service public) doit
802 // obligatoirement s'accompagner de la décomposition
803 // en sous modalité renseignée par la variable cpublic et réciproquement.
804
805 // Test si une valeur est true
806 $cpublic = FALSE;
807 if (isset($row['co_sp_transport']) && $row['co_sp_transport'] == 't') {
808 $cpublic = TRUE;
809 }
810 if (isset($row['co_sp_enseign']) && $row['co_sp_enseign'] == 't') {
811 $cpublic = TRUE;
812 }
813 if (isset($row['co_sp_sante']) && $row['co_sp_sante'] == 't') {
814 $cpublic = TRUE;
815 }
816 if (isset($row['co_sp_act_soc']) && $row['co_sp_act_soc'] == 't') {
817 $cpublic = TRUE;
818 }
819 if (isset($row['co_sp_ouvr_spe']) && $row['co_sp_ouvr_spe'] == 't') {
820 $cpublic = TRUE;
821 }
822 if (isset($row['co_sp_culture']) && $row['co_sp_culture'] == 't') {
823 $cpublic = TRUE;
824 }
825 //
826 if($cpublic !== TRUE AND ($export_sitadel->get_shon_val('cstr', 9) > 0 OR $export_sitadel->get_shon_val('chge', 9) > 0)) {
827 $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";
828 }
829
830 // La destination principale du logement mise à résidence
831 // principale ou résidence secondaire doit obligatoirement
832 // s'accompagner d'un mode d'utilisation à occupation personnelle
833 if($row['co_uti_princ'] == 't' OR $row['co_uti_secon'] == 't') {
834 if($row['co_uti_pers'] != 't') {
835
836 $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";
837 }
838 }
839
840 $decision.= $export_sitadel->destination($row['mouvement_sitadel']);
841
842 // Le nombre total de logements créés (variable nbtotlog)
843 // doit être égal à la somme des nombres de logements créés
844 // ventilés par type de financement
845 if($row['co_tot_log_nb'] != ($row['co_fin_lls_nb'] + $row['co_fin_aa_nb'] +
846 $row['co_fin_ptz_nb'] + $row['co_fin_autr_nb'])) {
847
848 $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";
849 }
850
851 $decision.= $export_sitadel->repartitionFinan();
852
853 // Le nombre total de logements créés (variable nbtotlog)
854 // doit être égal à la totalisation de la répartition des
855 // logements par nombre de pièces
856 if($row['co_tot_log_nb'] != ($row['co_log_1p_nb'] + $row['co_log_2p_nb'] +
857 $row['co_log_3p_nb'] + $row['co_log_4p_nb'] + $row['co_log_5p_nb'] +
858 $row['co_log_6p_nb'])) {
859
860 $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";
861 }
862
863 $decision.= $export_sitadel->repartitionNbPiece($row['mouvement_sitadel']);
864 }
865 else {
866 //
867 $decision.= str_repeat("|", 6);
868 if($row['code']=='DP'){
869 $decision .= "00000|";
870 }else{
871 $decision .= "|";
872 }
873 $decision .= "0000|00000|";
874 $decision.= str_repeat("|", 74);
875 }
876 $decision.="\n";
877 }
878
879 // modificatif
880 $modificatif='';
881 if($row['mouvement_sitadel'] == 'MODIFICATIF' AND $row['statut_di']=='cloture' AND
882 $row['typeavis']=='F') {
883 $modificatif.=$export_sitadel->entete("MODIFICATIF",$departement,$commune, $version);
884
885 $modificatif.= $export_sitadel->decision_groupe1();
886
887 if(isset($row['date_decision']) or $row['date_decision']==""){
888 // avis_sitadel et avis_sitadel_motif
889 // si la decision est favorable, envoi des informations statistiques
890 if($row["sitadel"] == 2 or $row["sitadel"] == 4
891 or $row["sitadel"] == 5){
892 // si accordé : ajout du 2nd groupe d'informations
893 $modificatif .= $export_sitadel->adresse_terrain(); // adresse du terrain
894 $modificatif .= $export_sitadel->parcelle(); // 3 premières parcelles
895 $modificatif .= $export_sitadel->modificatif_terrain(); // Informations complémentaires
896
897 $modificatif.= $export_sitadel->shon("avt");
898 $modificatif.= $export_sitadel->shon("demo");
899 $modificatif.= $export_sitadel->shon("chge");
900 $modificatif.= $export_sitadel->shon("trsf");
901 $modificatif.= $export_sitadel->shon("cstr");
902
903 $modificatif.= "|||||||||";
904 $modificatif.= $export_sitadel->destination($row['mouvement_sitadel']);
905 $modificatif.= $export_sitadel->repartitionFinan();
906 $modificatif.= $export_sitadel->repartitionNbPiece($row['mouvement_sitadel']);
907 }
908 else {
909 $modificatif .= str_repeat("|", 90);
910 }
911 }
912 else {
913 $modificatif .= str_repeat("|", 90);
914 }
915
916 $modificatif.="\n";
917 }
918
919 // Mouvement suppression
920 $suppression = '';
921 if($row['mouvement_sitadel'] == 'SUPPRESSION') {
922 $suppression .= $export_sitadel->entete("SUPPRESSION",$departement,$commune, $version);
923 $suppression .= "\n";
924 }
925
926 // Règles sur le mouvement suivi
927 $suivi="";
928 if($row['mouvement_sitadel'] == 'SUIVI' and
929 ($row['date_chantier'] >= $datedebut and $row['date_chantier']<=$datefin) ||
930 ($row['date_achevement'] >= $datedebut and $row['date_achevement']<=$datefin)){
931 // Si le dossier est une DOC
932 if($row['dossier_instruction_type_code']=='DOC'){
933 // Une ouverture de chantier ne peut concerner qu'un permis autorisé
934 if($row['typeavis_da'] != 'F'&&$row['typeavis_da'] != '') {
935 $erreur .= _("Dossier ").$row['dossier']." "._("Une ouverture de chantier ne peut concerner qu'un permis autorise.")."\n";
936 }
937 // La date d'ouverture de chantier doit être supérieur à la date d'autorisation
938 if($row['doc_date'] > $row['date_decision_da']) {
939 $erreur .= _("Dossier ").$row['dossier']." "._("La date d'ouverture de chantier doit être superieur a la date d'autorisation.")."\n";
940 }
941 // Un achèvement de chantier ne peut concerner qu'un permis autorisé
942 if($row['typeavis_da'] != 'F'&&$row['typeavis_da'] != '') {
943 $erreur .= _("Dossier ").$row['dossier']." "._("Un achevement de chantier ne peut concerner qu'un permis autorise.")."\n";
944 }
945 if( $row['date_chantier_da'] == "" && $row['date_achevement']!="") {
946 $erreur .= _("Dossier ").$row['dossier']." "._("Un achevement de chantier ne peut concerner qu'un permis sur lequel un chantier a ete ouvert.")."\n";
947 }
948 // La date d'achevement de travaux doit être supérieur à la date d'ouverture des travaux
949 if($row['daact_date'] > $row['date_chantier_da']) {
950 $erreur .= _("Dossier ").$row['dossier']." "._("La date d'achevement de travaux doit etre superieur a la date d'ouverture des travaux.")."\n";
951 }
952 $suivi.=$export_sitadel->entete("SUIVI",$departement,$commune, $version);//8|
953 $suivi.=$export_sitadel->chantier($row);
954 //On récupère la DAACT si elle existe
955 $sqlDAACT = "SELECT
956 donnees_techniques.daact_date,
957 donnees_techniques.daact_date_chgmt_dest,
958 donnees_techniques.daact_tot_trav,
959 donnees_techniques.daact_tranche_trav,
960 donnees_techniques.daact_tranche_trav_desc,
961 donnees_techniques.daact_surf,
962 donnees_techniques.daact_nb_log,
963 donnees_techniques.daact_nb_log_indiv,
964 donnees_techniques.daact_nb_log_coll,
965 donnees_techniques.daact_nb_log_lls,
966 donnees_techniques.daact_nb_log_aa,
967 donnees_techniques.daact_nb_log_ptz,
968 donnees_techniques.daact_nb_log_autre,
969 etat.statut as statut_di
970
971 FROM ".DB_PREFIXE."dossier
972 LEFT JOIN ".DB_PREFIXE."donnees_techniques
973 ON dossier.dossier=donnees_techniques.dossier_instruction
974 LEFT JOIN ".DB_PREFIXE."etat
975 ON dossier.etat = etat.etat
976 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
977 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
978 WHERE dossier.dossier_autorisation ='".$row['dossier_autorisation']."' AND
979 dossier_instruction_type.code = 'DAACT' and mouvement_sitadel='SUIVI'";
980 $resDAACT = $this->f->db -> query ($sqlDAACT);
981 $this->f->addToLog("dossier.class.php : db->query(\"".$sqlDAACT."\")", VERBOSE_MODE);
982 $this->f->isDatabaseError($resDAACT);
983 $rowDAACT=& $resDAACT->fetchRow(DB_FETCHMODE_ASSOC);
984 $suivi.=$export_sitadel->achevement($rowDAACT);
985 $suivi.="\n";
986 }
987 elseif($row['dossier_instruction_type_code']=='DAACT'){
988
989 //On vérifie qu'une DOC existe
990 $sqlDOC = "SELECT dossier.dossier,
991 dossier.date_chantier,
992 donnees_techniques.doc_date,
993 donnees_techniques.terr_div_surf_av_div,
994 donnees_techniques.doc_tot_trav,
995 donnees_techniques.doc_tranche_trav,
996 donnees_techniques.doc_tranche_trav_desc,
997 donnees_techniques.doc_surf,
998 donnees_techniques.doc_nb_log,
999 donnees_techniques.doc_nb_log_indiv,
1000 donnees_techniques.doc_nb_log_coll,
1001 donnees_techniques.doc_nb_log_lls,
1002 donnees_techniques.doc_nb_log_aa,
1003 donnees_techniques.doc_nb_log_ptz,
1004 donnees_techniques.doc_nb_log_autre
1005 FROM ".DB_PREFIXE."dossier
1006 LEFT JOIN ".DB_PREFIXE."donnees_techniques
1007 ON dossier.dossier=donnees_techniques.dossier_instruction
1008 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
1009 ON dossier.dossier_instruction_type=dossier_instruction_type.dossier_instruction_type
1010 WHERE dossier.dossier_autorisation ='".$row['dossier_autorisation']."' AND
1011 dossier_instruction_type.code = 'DOC' and mouvement_sitadel='SUIVI'";
1012 $resDOC = $this->f->db -> query ($sqlDOC);
1013 $this->f->addToLog("dossier.class.php : db->query(\"".$sqlDOC."\")", VERBOSE_MODE);
1014 $this->f->isDatabaseError($resDOC);
1015 $rowDOC=& $resDOC->fetchRow(DB_FETCHMODE_ASSOC);
1016
1017 if((isset($rowDOC['dossier']) &&
1018 $rowDOC['date_chantier']<$datedebut || $rowDOC['date_chantier']>$datefin) ||
1019 !isset($rowDOC['dossier'])) {
1020 //
1021 $suivi.=$export_sitadel->entete("SUIVI",$departement,$commune, $version);//8|
1022 $suivi.=$export_sitadel->chantier($rowDOC);
1023 $suivi.=$export_sitadel->achevement($row);
1024 $suivi.="\n";
1025 }
1026 }
1027 }
1028 // Ligne SITADEL généré
1029 $line_sitadel = $depot.$decision.$transfert.$modificatif.$suivi.$suppression;
1030 if ($line_sitadel !== '') {
1031 // Hash la ligne SITADEL
1032 $hash_sitadel = md5($line_sitadel);
1033 // Si le hash de la ligne générée est différent du hash
1034 // sauvegardé sur le dossier
1035 if ($row['hash_sitadel'] !== $hash_sitadel) {
1036 // Met la ligne dans l'export
1037 $export .= $line_sitadel;
1038 // Met à jour le hash SITADEL du dossier
1039 $inst_di = $this->get_inst_dossier($row['dossier']);
1040 $inst_di->update_hash_sitadel($hash_sitadel);
1041 } else {
1042 // Supprime les erreurs liées à la ligne qui ne sera
1043 // pas exportée
1044 $erreur = '';
1045 }
1046 }
1047 } // fin while
1048
1049 /**
1050 *
1051 */
1052 //
1053 if (DBCHARSET == 'UTF8') {
1054 $export = utf8_decode($export);
1055 }
1056
1057 /**
1058 * En-tête de fichier.
1059 *
1060 * C'est la première ligne du fichier.
1061 */
1062 // on éclate la chaîne export par ligne pour calculer le nombre
1063 // d'enregistrements et la longueur maximale des enregistrements
1064 $export_by_line = explode("\n", $export);
1065 // longueur maximale des enregistrements
1066 // (Num)(6) longueur de l’enregistrement le plus long contenu dans le
1067 // fichier (sans compter la fin d’enregistrement ou la fin de fichier)
1068 $longueur_maximale_des_enregistrements = 0;
1069 foreach ($export_by_line as $export_line) {
1070 if ($longueur_maximale_des_enregistrements > strlen($export_line)) {
1071 continue;
1072 }
1073 $longueur_maximale_des_enregistrements = strlen($export_line);
1074 }
1075 // nombre d'enregistrements
1076 // (Num)(6) nombre d’enregistrements présents dans le fichier en
1077 // comptant l’en-tête du fichier
1078 // XXX Ne faut-il pas ajouter +1 pour la ligne d'en-tête ?
1079 $nombre_d_enregistrements = count($export_by_line);
1080 // code application
1081 // (Alphanum)(7) = SITADEL
1082 $code_application = "SITADEL";
1083 // code département
1084 // (Alphanum)(3) département dans lequel se trouve le service instructeur
1085 // nomenclature : 001 à 095, 02A, 02B, 971...974
1086 $code_departement = $this->f->getParameter("departement");
1087 // service expéditeur
1088 // (Alphanum)(3) DDE ou commune (la plus grosse en cas d'EPCI) ou DGI
1089 // nomenclature : 'ADS', ‘DGI ou code commune INSEE
1090 $service_expediteur = $this->f->getParameter("commune");
1091 // service destinataire
1092 // (Alphanum)(2) DRE
1093 // nomenclature : code région INSEE (exemple : Ile-de-France=11)
1094 $service_destinataire = $this->f->getParameter("region");
1095 // code du fichier transmis
1096 // (AlphaNum)(12) AAMMjjdddccc
1097 // ddd = département du service instructeur
1098 // ccc = code du service expéditeur
1099 // AAMMjj = date
1100 // par exemple : 090531093ADS dans le cas de la transmission mensuelle
1101 // des événements intervenus au mois de mai communiqués par la DDE de
1102 // Seine-Saint-Denis.
1103 // XXX La date du jour correspond bien à la date demandée ?
1104 $code_du_fichier_transmis = sprintf(
1105 "%s%s%s",
1106 date('ymd'),
1107 $code_departement,
1108 $service_expediteur
1109 );
1110 // numéro d'ordre
1111 // (AlphaNum)(1) numéro d’ordre du fichier en cas de rectificatif
1112 // XXX Le formulaire propose jusqu'à la valeur 10 alors que la taille
1113 // de la châine doit être (1) ?
1114 $numero_d_ordre = $this->f->get_submitted_post_value("numero");
1115 // date de création
1116 // (Alphanum)(6) AAMMjj date de création du fichier transmis
1117 $date_de_creation = date('ymd');
1118 // nom de l'applicatif expéditeur
1119 // (Alphanum)(20) Exemple : GESTIO
1120 $nom_de_l_applicatif_expediteur = "openADS";
1121 // version de l'applicatif expéditeur
1122 // (Alphanum)(8) Exemple : 2.05
1123 $version_de_l_applicatif_expediteur = substr($this->f->get_application_version(), 0, 8);
1124 // Consititution de la ligne d'en-tête.
1125 $entete = sprintf(
1126 "%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n",
1127 $code_application,
1128 $code_departement,
1129 $service_expediteur,
1130 $service_destinataire,
1131 $code_du_fichier_transmis,
1132 $numero_d_ordre,
1133 $longueur_maximale_des_enregistrements,
1134 $date_de_creation,
1135 $nombre_d_enregistrements,
1136 $nom_de_l_applicatif_expediteur,
1137 $version_de_l_applicatif_expediteur
1138 );
1139
1140 /**
1141 *
1142 */
1143 //
1144 $export = $entete.$export;
1145
1146 /**
1147 * Écriture de l'export dans un fichier sur le disque et affichage du
1148 * lien de téléchargement.
1149 */
1150 // Composition du nom du fichier
1151 $nom_fichier = "SITADEL".substr($this->f->get_submitted_post_value("datedebut"),3,2)."".substr($this->f->get_submitted_post_value("datedebut"),8,4).".txt";
1152 // Composition des métadonnées du fichier
1153 $metadata_fichier = array(
1154 "filename" => $nom_fichier,
1155 "size" => strlen($export),
1156 "mimetype" => "application/vnd.ms-excel",
1157 );
1158 // Écriture du fichier
1159 $uid_fichier = $this->f->storage->create_temporary($export, $metadata_fichier);
1160 //
1161 $message = _("Fichier")." ".$nom_fichier." "._("sauvegarde");
1162 $message .= "<br/>";
1163 $message .= _("Pour telecharger le fichier, cliquer ici :");
1164 $message .= " ";
1165 $message .= "<a href=\"../app/index.php?module=form&snippet=file&uid=".$uid_fichier."&amp;mode=temporary\" target=\"_blank\">";
1166 $message .= "<img src=\"../app/img/ico_trace.png\"";
1167 $message .= " alt=\""._("Telecharger le fichier Sitadel")."\"";
1168 $message .= " title=\""._("Telecharger le fichier Sitadel")."\"";
1169 $message .= " />";
1170 $message .= "</a>";
1171 $message .= _("avec le bouton droit et enregistrer la cible du lien sous.");
1172 //
1173 $this->f->displayMessage("ok", $message);
1174
1175 /**
1176 * Écriture d'une éventuelle erreur durant l'export dans un fichier sur
1177 * le disque et affichage du lien de téléchargement.
1178 */
1179 //
1180 if ($erreur != "") {
1181 // Composition du nom du fichier
1182 $nom_fichier_erreur = "probleme_".$nom_fichier;
1183 // Composition des métadonnées du fichier
1184 $metadata_fichier_erreur = array(
1185 "filename" => $nom_fichier_erreur,
1186 "size" => strlen($erreur),
1187 "mimetype" => "text/plain",
1188 );
1189 // Écriture du fichier
1190 $uid_fichier_erreur = $this->f->storage->create_temporary($erreur, $metadata_fichier_erreur);
1191 //
1192 $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");
1193 $message .= "<br/>";
1194 $message .= _("Fichier")." ".$nom_fichier_erreur." "._("sauvegarde");
1195 $message .= "<br/>";
1196 $message .= _("Pour telecharger le fichier, cliquer ici :");
1197 $message .= " ";
1198 $message .= "<a href=\"../app/index.php?module=form&snippet=file&uid=".$uid_fichier_erreur."&amp;mode=temporary\" target=\"_blank\">";
1199 $message .= "<img src=\"../app/img/ico_trace.png\"";
1200 $message .= " alt=\""._("Telecharger le fichier d'erreur")."\"";
1201 $message .= " title=\""._("Telecharger le fichier d'erreur")."\"";
1202 $message .= " />";
1203 $message .= "</a>";
1204 $message .= _("avec le bouton droit et enregistrer la cible du lien sous.");
1205 //
1206 $this->f->displayMessage("info", $message);
1207 }
1208
1209 if (DEBUG > 0) {
1210 printf($export);
1211 }
1212 // Appel de la méthode d'affichage du lien retour par le layout
1213 $this->f->layout->display_form_retour($params);
1214
1215 } else {// correct = false
1216 $this->affichageFormulaire($this->f->get_submitted_post_value("datedebut"), $this->f->get_submitted_post_value("datefin"), $numero, _("Les champs dates sont obligatoires"));
1217 }
1218 }
1219 }
1220
1221
1222 function affichageFormulaire($datedebut="", $datefin="", $numero="", $msg=null){
1223 //Description de la page
1224 $description = _("Cette page vous permet de Transmettre les dossiers suivant la procedure SITADEL");
1225 $this->f->displayDescription($description);
1226 // Affichage du message d'erreur si existe
1227 if($msg!==null){
1228 $this->f->displayMessage("error", $msg);
1229 }
1230 //
1231 printf("<form method=\"POST\" action=\"".OM_ROUTE_FORM."&obj=sitadel&action=6&idx=0\" name=f1>");
1232 //
1233 $input = "<input type=\"text\" name=\"%s\" id=\"%s\" value=\"%s\" size=\"15\" class=\"champFormulaire datepicker\" onchange=\"fdate(this)\"/>";
1234 // champ date debut
1235 printf(" "._("debut")." ");
1236 printf($input, "datedebut", "datedebut", $datedebut);
1237 // champ date fin
1238 printf(" "._("fin")." ");
1239 printf($input, "datefin", "datefin", $datefin);
1240 // numero d'ordre d'envoi
1241 printf(" "._("Numero d'ordre d'envoi")." : "."<select name=\"numero\">");
1242 for ($i = 1; $i < 11; $i++) {
1243 printf("<option value =\"%d\" ", $i);
1244 printf(($numero == $i )? "selected=\"selected\"":"");
1245 printf(">%d</option>", $i);
1246 }
1247 printf("</select>");
1248 printf("<br/><br/><input type=\"submit\" value=\"export SITADEL\" >");
1249 printf("</form>");
1250 }
1251
1252 /**
1253 * VIEW - view_document_numerise.
1254 *
1255 * Vue du tableau des pièces du dossier d'autorisation.
1256 *
1257 * Cette vue permet de gérer le contenu de l'onglet "Pièce(s)" sur un
1258 * dossier d'autorisation. Cette vue spécifique est nécessaire car
1259 * l'ergonomie standard du framework ne prend pas en charge ce cas.
1260 * C'est ici la vue spécifique des pièces liées au dossier qui est
1261 * affichée directement au clic de l'onglet au lieu du soustab.
1262 *
1263 * L'idée est donc de simuler l'ergonomie standard en créant un container
1264 * et d'appeler la méthode javascript 'ajaxit' pour charger le contenu
1265 * de la vue visualisation de l'objet lié.
1266 *
1267 * @return void
1268 */
1269 function view_document_numerise() {
1270 // Vérification de l'accessibilité sur l'élément
1271 $this->checkAccessibility();
1272 // Récupération des variables GET
1273 ($this->f->get_submitted_get_value('idxformulaire')!==null ? $idxformulaire =
1274 $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = "");
1275 ($this->f->get_submitted_get_value('retourformulaire')!==null ? $retourformulaire =
1276 $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = "");
1277 // Objet à charger
1278 $obj = "document_numerise";
1279 $type_aff_form = $this->get_type_affichage_formulaire();
1280 if ($type_aff_form === 'CTX RE' OR $type_aff_form === 'CTX IN') {
1281 $obj = "document_numerise_contexte_ctx";
1282 }
1283 // Construction de l'url de sousformulaire à appeler
1284 $url = OM_ROUTE_SOUSFORM."&obj=".$obj;
1285 $url .= "&idx=".$idxformulaire;
1286 $url .= "&action=4";
1287 $url .= "&retourformulaire=".$retourformulaire;
1288 $url .= "&idxformulaire=".$idxformulaire;
1289 $url .= "&retour=form";
1290 // Affichage du container permettant le reffraichissement du contenu
1291 // dans le cas des action-direct.
1292 printf('
1293 <div id="sousform-href" data-href="%s">
1294 </div>',
1295 $url
1296 );
1297 // Affichage du container permettant de charger le retour de la requête
1298 // ajax récupérant le sous formulaire.
1299 printf('
1300 <div id="sousform-%s">
1301 </div>
1302 <script>
1303 ajaxIt(\'%s\', \'%s\');
1304 </script>',
1305 $obj,
1306 $obj,
1307 $url
1308 );
1309 }
1310
1311
1312 /*
1313 * Définition de la version et du suffixe du DI lors de sa création.
1314 */
1315 function setValFAjout($val = array()) {
1316
1317 //
1318 // GESTION DE LA VERSION DU DI
1319 // Elle est unique et basée sur celle du DA qui débute à -1.
1320 // Ainsi la version du DI initial est à 0.
1321 //
1322 $numeroVersion = $this->getNumeroVersion($val['dossier_autorisation']);
1323 if (is_numeric($numeroVersion) or $numeroVersion == -1){
1324 $this->incrementNumeroVersion($val['dossier_autorisation'], ++$numeroVersion);
1325 }
1326
1327 //
1328 // GESTION DU SUFFIXE
1329 // La version du suffixe est celle du type de DI : à ne pas confondre
1330 // avec celle du DI lui même.
1331 // Exemple chronologique :
1332 // DI n° PC0130551600004 -> version 0
1333 // DI n° PC0130551600004M01 -> version 1
1334 // DI n° PC0130551600004PRO01 -> version 2 !!
1335 //
1336 $suffixe = "";
1337 // Si l'option suffixe de ce type de DI est activée
1338 if ( $this->getSuffixe($this->getDossierInstructionType()) === 't' ){
1339 // Récupération de la lettre associée au type de dossier d'instruction
1340 $code = $this->getCode($this->getDossierInstructionType());
1341 // Récupération du numéro de version en fonction du type de dossier d'instruction
1342 $numeroVersionDossierInstructionType = $this->getNumeroVersionDossierInstructionType($val['dossier_autorisation'], $val['dossier_instruction_type'], $numeroVersion);
1343 // Suffixe
1344 $suffixe = $code.$numeroVersionDossierInstructionType;
1345 }
1346
1347 // Numéro de dossier
1348 $this->valF['dossier'] = $val['dossier_autorisation'].$suffixe;
1349 // Identifiant du dossier d'instruction lisible
1350 $this->valF['dossier_libelle'] = $this->get_dossier_autorisation_libelle($val['dossier_autorisation']).$suffixe;
1351 // Version du dossier
1352 $this->valF['version'] = $numeroVersion;
1353 }
1354
1355 /*Récupère la valeur du suffixe d'un dossier_instruction_type*/
1356 function getSuffixe($dossierInstructionType){
1357
1358 $suffixe = "";
1359
1360 $sql = "SELECT
1361 suffixe
1362 FROM
1363 ".DB_PREFIXE."dossier_instruction_type
1364 WHERE
1365 dossier_instruction_type = $dossierInstructionType";
1366
1367 $this->addToLog("getSuffixe(): db->query(\"".$sql."\")", VERBOSE_MODE);
1368 $res = $this->db->query($sql);
1369 if (database :: isError($res))
1370 die($res->getMessage()."erreur ".$sql);
1371
1372 if ( $res->numRows() > 0 ){
1373
1374 $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
1375 $suffixe = $row['suffixe'];
1376 }
1377
1378 return $suffixe;
1379 }
1380
1381 /*Récupère dans la table de paramètrage la lettre correspondant
1382 * au dossier_instruction_type
1383 */
1384 function getCode($dossierInstructionType){
1385
1386 $code = "";
1387
1388 $sql = "SELECT
1389 code
1390 FROM
1391 ".DB_PREFIXE."dossier_instruction_type
1392 WHERE
1393 dossier_instruction_type = $dossierInstructionType";
1394
1395 $this->addToLog("getCode(): db->query(\"".$sql."\")", VERBOSE_MODE);
1396 $res = $this->db->query($sql);
1397 if (database :: isError($res))
1398 die($res->getMessage()."erreur ".$sql);
1399
1400 if ( $res->numRows() > 0 ){
1401
1402 $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
1403 $code = $row['code'];
1404 }
1405
1406 return $code;
1407 }
1408
1409 /*Récupère le numéro de version d'un dossier_autorisation*/
1410 function getNumeroVersion($dossierAutorisation){
1411
1412 $numeroVersion = "";
1413
1414 $sql = "SELECT
1415 numero_version
1416 FROM
1417 ".DB_PREFIXE."dossier_autorisation
1418 WHERE
1419 dossier_autorisation = '$dossierAutorisation'";
1420
1421 $this->addToLog("getNumeroVersion(): db->query(\"".$sql."\")", VERBOSE_MODE);
1422 $res = $this->db->query($sql);
1423 if (database :: isError($res))
1424 die($res->getMessage()."erreur ".$sql);
1425
1426 if ( $res->numRows() > 0 ){
1427
1428 $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
1429 $numeroVersion = $row['numero_version'];
1430 }
1431
1432 return $numeroVersion;
1433 }
1434
1435 /**
1436 * Retourne le numéro d'un dossier d'instruction et ses six parties.
1437 *
1438 * @param string $dossier_instruction Identifiant du dossier d'instruction (avec ou sans espace)
1439 *
1440 * @return array
1441 */
1442 function get_dossier_instruction_numero($dossier_instruction = null) {
1443
1444 // Si le DI n'a pas été fourni
1445 if ($dossier_instruction === null) {
1446 // On le récupère
1447 $dossier_instruction = $this->getVal($this->clePrimaire);
1448 }
1449
1450 /*
1451 Analyse du numéro du DI et extraction de ses parties
1452
1453 Retour : tableau à 7 entrées, chacune étant elle-même un tableau à 1 entrée :
1454
1455 - 0 : chaîne testée (identifiant du DI)
1456 - 1 : type du DA (2 ou 3 lettres)
1457 - 2 : code département + code communes(3 + 3 integer)
1458 - 3 : année (2 integer)
1459 - 4 : division + numéro (le premier peut être une lettre ou un
1460 - integer et le reste integer)
1461 - 5 : lettre(s) du type du dossier d'instruction (P, M, ANNUL, ...)
1462 - 6 : version du dossier d'instruction (1 ou 2 integer)
1463 */
1464 preg_match_all('|^([A-Z]{2,3})\s{0,1}(\d{6})\s{0,1}(\d{2})\s{0,1}([[:alnum:]]{5})([A-Z]{1,5})(\d{1,2})$|', $dossier_instruction, $return);
1465 //
1466 return $return;
1467 }
1468
1469 /**
1470 * Récupère le numéro de version du dossier d'instruction.
1471 *
1472 * @return string
1473 */
1474 function get_dossier_instruction_version($dossier_instruction = null) {
1475
1476 // Expression régulière qui découpe le numéro du dossier
1477 $return = $this->get_dossier_instruction_numero($dossier_instruction);
1478
1479 // Si l'expression régulière retourne une erreur
1480 if ($return == false) {
1481 // Message dans le log
1482 $this->f->addToLog(__METHOD__."(): "._("Erreur lors de la recuperation du numero de version du dossier d'instruction"), DEBUG_MODE);
1483 //
1484 return false;
1485 }
1486
1487 // Retourne seulement la version du dossier d'instruction.
1488 // Elle vaut 0 si le numéro du DI n'a pas de suffixe.
1489 if (isset($return[6][0])) {
1490 return $return[6][0];
1491 }
1492 return 0;
1493 }
1494
1495 /*Incrémente le numéro de version du dossier*/
1496 function incrementNumeroVersion($dossierAutorisation, $nouveauNumeroVersion) {
1497
1498 $valF = array (
1499 "numero_version" => $nouveauNumeroVersion
1500 );
1501
1502 $res = $this->db->autoExecute(DB_PREFIXE."dossier_autorisation",
1503 $valF,
1504 DB_AUTOQUERY_UPDATE,
1505 "dossier_autorisation = '$dossierAutorisation'");
1506
1507 if (database :: isError($res))
1508 die($res->getMessage()."erreur ".$sql);
1509
1510 }
1511
1512 /**
1513 * Retourne un numéro de version en fonction du type de dossier d'instruction
1514 * @param string $dossier_autorisation
1515 * @param integer $dossier_instruction_type
1516 * @return int
1517 */
1518 public function getNumeroVersionDossierInstructionType($dossier_autorisation, $dossier_instruction_type, $numero_version, $increment = true){
1519
1520 $numeroVersionDossierInstructionType = $numero_version;
1521
1522 //On récupère le code correspondant au type de dossier d'instruction passé
1523 //en paramètre
1524 $sql = "SELECT
1525 code
1526 FROM
1527 ".DB_PREFIXE."dossier_instruction_type
1528 WHERE
1529 dossier_instruction_type = ".$dossier_instruction_type;
1530 $codeDossierInstructionType = $this->db->getOne($sql);
1531 $this->f->addToLog("getNumeroVersionDossierInstructionType(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
1532 if ( database::isError($codeDossierInstructionType)){
1533 $this->f->addToError("", $codeDossierInstructionType, $codeDossierInstructionType);
1534 return false;
1535 }
1536
1537
1538 // Si c'est un dossier d'instruction de type "Initial", code "P", on retourne 0
1539 if ( strcmp($codeDossierInstructionType, "P") == 0 ){
1540 return 0;
1541 }
1542 //Si c'est un modificatif ou transfert on retourne un nombre correspondant au
1543 //nombre de dossier d'instruction de ce type, rattaché au dossier
1544 //d'autorisation complété par des 0 à gauche si besoin. Format du retour
1545 //attendu : 01 ou 02, etc.
1546 else {
1547
1548 //On récupère le nombre de dossier d'instruction de ce type rattaché au
1549 //dossier d'autorisation
1550 $sql = "SELECT
1551 count(dossier)
1552 FROM
1553 ".DB_PREFIXE."dossier
1554 LEFT JOIN
1555 ".DB_PREFIXE."dossier_autorisation
1556 ON
1557 dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
1558 WHERE
1559 dossier_autorisation.dossier_autorisation = '".$dossier_autorisation."'
1560 AND
1561 dossier.dossier_instruction_type = ".$dossier_instruction_type;
1562 $numeroVersionDossierInstructionType = $this->db->getOne($sql);
1563 $this->f->addToLog("getNumeroVersionDossierInstructionType(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
1564 if ( database::isError($numeroVersionDossierInstructionType)){
1565 $this->f->addToError("", $numeroVersionDossierInstructionType, $numeroVersionDossierInstructionType);
1566 return false;
1567 }
1568
1569 // Requête SQL
1570 $sql = "SELECT
1571 substring(dossier, '\d*$')::int as last_num_dossier
1572 FROM ".DB_PREFIXE."dossier
1573 WHERE dossier_instruction_type = ".$dossier_instruction_type."
1574 AND dossier_autorisation = '".$dossier_autorisation."'
1575 AND version = (
1576 SELECT max(version)
1577 FROM ".DB_PREFIXE."dossier
1578 WHERE dossier_instruction_type = ".$dossier_instruction_type."
1579 AND dossier_autorisation = '".$dossier_autorisation."'
1580 GROUP BY dossier_instruction_type, dossier_autorisation
1581 )";
1582 $res = $this->db->query($sql);
1583 $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\")", VERBOSE_MODE);
1584 $this->f->isDatabaseError($res);
1585 $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
1586
1587 $num_version_last_dossier = $row['last_num_dossier'];
1588
1589 if (!empty($num_version_last_dossier)
1590 && $num_version_last_dossier >= $numeroVersionDossierInstructionType) {
1591 // Modifie le numéro suivant
1592 $numeroVersionDossierInstructionType = $num_version_last_dossier;
1593 }
1594 //
1595 if ($increment === true) {
1596 $numeroVersionDossierInstructionType = ++$numeroVersionDossierInstructionType;
1597 }
1598 //On compléte par des 0 à gauche
1599 $numeroVersionDossierInstructionType = str_pad($numeroVersionDossierInstructionType, 2, "0", STR_PAD_LEFT);
1600
1601 return $numeroVersionDossierInstructionType;
1602 }
1603 }
1604 /**
1605 * Retourne le libellé du dossier d'autorisation
1606 * @param string $dossier_autorisation Identifiant du dossier d'autorisation
1607 * @return string Libellé dossier d'autorisation
1608 */
1609 function get_dossier_autorisation_libelle($dossier_autorisation) {
1610
1611 $dossier_autorisation_libelle = "";
1612
1613 // Requête SQL
1614 $sql = "SELECT
1615 dossier_autorisation_libelle
1616 FROM
1617 ".DB_PREFIXE."dossier_autorisation
1618 WHERE
1619 dossier_autorisation = '$dossier_autorisation'";
1620
1621 $dossier_autorisation_libelle = $this->db->getOne($sql);
1622 $this->addToLog("get_dossier_autorisation_libelle(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
1623 database::isError($dossier_autorisation_libelle);
1624
1625 // Retourne le résultat
1626 return $dossier_autorisation_libelle;
1627 }
1628
1629 function setvalF($val = array()){
1630 parent::setvalF($val);
1631
1632 // Récupération des id demandeurs postés
1633 $this->getPostedValues();
1634
1635 // enlever les valeurs a ne pas saisir -> recherche en trigger ajouter et modifier
1636 unset ($this->valF['geom']);
1637 unset ($this->valF['geom1']);
1638 // valeurs hiddenstatic (calcule)
1639 if($this->maj==1){
1640 // par defaut
1641 unset ($this->valF['etat']);
1642 unset ($this->valF['delai']);
1643 unset ($this->valF['accord_tacite']);
1644 }
1645 unset ($this->valF['avis_decision']); // avis + libelle avis
1646 unset ($this->valF['terrain_surface_calcul']);
1647 unset ($this->valF['shon_calcul']);
1648 unset ($this->valF['date_notification_delai']);
1649 unset ($this->valF['date_decision']);
1650 unset ($this->valF['date_limite']);
1651 unset ($this->valF['date_validite']);
1652 unset ($this->valF['date_chantier']);
1653 unset ($this->valF['date_achevement']);
1654 unset ($this->valF['date_conformite']);
1655 // Ce champ est mis à jour uniquement par la gestion spécifique du log
1656 // et donc jamais par les actions ajouter/modifier
1657 unset ($this->valF['log_instructions']);
1658
1659 // Durée de validité lors de la création du dossier d'instruction
1660 $this->valF['duree_validite'] = $this->get_duree_validite($this->valF['dossier_autorisation']);
1661 }
1662
1663
1664 /**
1665 * Retourne le type de formulaire : ADS, CTX RE, CTX IN ou DPC.
1666 *
1667 * @return mixed $type_aff_form Type de formulaire (string) ou false (bool) si erreur BDD.
1668 */
1669 function get_type_affichage_formulaire() {
1670 if (isset($this->type_aff_form) === true) {
1671 return $this->type_aff_form;
1672 }
1673 //
1674 if($this->getParameter('maj') == '0' OR $this->get_action_crud() === 'create') {
1675 $id_dossier_instruction_type = $this->valF["dossier_instruction_type"];
1676 } else {
1677 $id_dossier_instruction_type = $this->getVal("dossier_instruction_type");
1678 }
1679 $sql = "SELECT dossier_autorisation_type.affichage_form
1680 FROM " . DB_PREFIXE . "dossier_instruction_type
1681 INNER JOIN " . DB_PREFIXE . "dossier_autorisation_type_detaille
1682 ON dossier_instruction_type.dossier_autorisation_type_detaille=dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1683 INNER JOIN " . DB_PREFIXE . "dossier_autorisation_type
1684 ON dossier_autorisation_type.dossier_autorisation_type=dossier_autorisation_type_detaille.dossier_autorisation_type
1685 WHERE dossier_instruction_type.dossier_instruction_type=" . intval($id_dossier_instruction_type);
1686 $type_aff_form = $this->db->getOne($sql);
1687 $this->f->addToLog(__METHOD__ . " : db->getOne(\"" . $sql . "\")", VERBOSE_MODE);
1688 if($this->f->isDatabaseError($type_aff_form, true) === true) {
1689 return false;
1690 }
1691 $this->type_aff_form = $type_aff_form;
1692 //
1693 return $this->type_aff_form;
1694 }
1695
1696
1697 /**
1698 * Retourne le code du groupe du dossier d'instruction.
1699 *
1700 * @return string
1701 */
1702 public function get_groupe() {
1703 //
1704 if (isset($this->groupe) === true && $this->groupe !== null) {
1705 return $this->groupe;
1706 }
1707
1708 // Récupère le code du groupe
1709 $inst_dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
1710 $inst_dossier_autorisation_type = $this->get_inst_dossier_autorisation_type($inst_dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
1711 $inst_groupe = $this->get_inst_groupe($inst_dossier_autorisation_type->getVal('groupe'));
1712 $groupe = $inst_groupe->getVal('code');
1713
1714 //
1715 $this->groupe = $groupe;
1716 //
1717 return $this->groupe;
1718 }
1719
1720
1721 /**
1722 * Méthode de verification du contenu
1723 */
1724 function verifier($val = array(), &$db = null, $DEBUG = null) {
1725 parent::verifier($val,$db,$DEBUG);
1726
1727 // La date de dépôt est obligatoire
1728 if ($val['date_depot'] === '' || $val['date_depot'] === null) {
1729 //
1730 $this->correct = false;
1731 $this->addToMessage( _('Le champ').' <span class="bold">'.$this->getLibFromField('date_depot').'</span> '._('est obligatoire'));
1732 }
1733
1734 $type_aff_form = $this->get_type_affichage_formulaire();
1735 if ($type_aff_form ===false) {
1736 $this->correct = false;
1737 $this->addToMessage(_("Une erreur s'est produite lors de l'ajout de ce dossier. Veuillez contacter votre administrateur."));
1738 }
1739
1740 switch ($type_aff_form) {
1741 case 'ADS':
1742 case 'CTX RE':
1743 if (!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
1744 empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
1745 !is_null($this->form)) {
1746 $this->correct = false;
1747 $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
1748 }
1749 break;
1750 case 'CTX IN':
1751 if (!isset($this->postedIdDemandeur["contrevenant_principal"]) OR
1752 empty($this->postedIdDemandeur["contrevenant_principal"]) AND
1753 !is_null($this->form)) {
1754 $this->correct = false;
1755 $this->addToMessage(_("La saisie d'un contrevenant principal est obligatoire."));
1756 }
1757 break;
1758 case 'DPC':
1759 if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
1760 empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
1761 !is_null($this->form)) {
1762 $this->correct = false;
1763 $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
1764 }
1765 if(!isset($this->postedIdDemandeur["bailleur_principal"]) OR
1766 empty($this->postedIdDemandeur["bailleur_principal"]) AND
1767 !is_null($this->form)) {
1768 $this->correct = false;
1769 $this->addToMessage(_("La saisie d'un bailleur principal est obligatoire."));
1770 }
1771 break;
1772 }
1773
1774 // Récupération du crud par rapport au mode du formulaire
1775 $crud = $this->get_action_crud($this->getParameter("maj"));
1776
1777 // L'année de la date de dépot ne peut pas être modifiée
1778 if ($crud === 'update' && array_key_exists("date_depot", $val) === true && ($val["date_depot"] !== "" && $val["date_depot"] !== null)) {
1779 //
1780 $new_date = DateTime::createFromFormat('d/m/Y', $val["date_depot"]);
1781 $old_date = DateTime::createFromFormat('Y-m-d', $this->getVal("date_depot"));
1782 if ($new_date->format("Y") != $old_date->format("Y")) {
1783 $this->addToMessage(_("L'année de la date de dépôt n'est pas modifiable."));
1784 $this->correct = false;
1785 }
1786 }
1787 }
1788
1789
1790 function setType(&$form,$maj) {
1791 // Par défaut le type des champs est géré nativement par le framework
1792 parent::setType($form,$maj);
1793
1794 // Récupération du contexte : groupe, CRUD et paramètres
1795 $groupe = $this->get_type_affichage_formulaire();
1796 $crud = $this->get_action_crud($maj);
1797 $parameters = $this->f->getCollectivite($this->getVal('om_collectivite'));
1798
1799 //
1800 // Gestion du groupe
1801 //
1802
1803 // INFRACTION
1804 $inf_fields = array(
1805 'a_qualifier' => 'hidden',
1806 'autorisation_contestee' => 'hidden',
1807 'autorite_competente' => 'hidden',
1808 'cle_acces_citoyen' => 'hidden',
1809 'contrevenants' => 'static',
1810 'date_ait' => 'hiddenstaticdate',
1811 'date_audience' => 'hiddenstaticdate',
1812 'date_cloture_instruction' => 'hidden',
1813 'date_complet' => 'hidden',
1814 'date_contradictoire' => 'hiddenstaticdate',
1815 'date_decision' => 'hiddenstaticdate',
1816 'date_depot' => 'hiddenstaticdate',
1817 'date_dernier_depot' => 'hidden',
1818 'date_derniere_visite' => 'hiddenstaticdate',
1819 'date_limite' => 'hidden',
1820 'date_limite_incompletude' => 'hidden',
1821 'date_premiere_visite' => 'hiddenstaticdate',
1822 'date_transmission_parquet' => 'hiddenstaticdate',
1823 'date_validite' => 'hidden',
1824 'delai' => 'hidden',
1825 'description_projet' => 'hidden',
1826 'dossier_autorisation_type_detaille' => 'hidden',
1827 'dossier_instruction_type' => 'hidden',
1828 'dossier_petitionnaire' => 'hidden',
1829 'dossier_petitionnaires' => 'hidden',
1830 'dt_ctx_infraction' => 'checkboxhiddenstatic',
1831 'dt_ctx_regularisable' => 'checkboxhiddenstatic',
1832 'dt_ctx_synthese_anr' => 'static',
1833 'dt_ctx_synthese_nti' => 'static',
1834 'enjeu_ctx' => 'hidden',
1835 'enjeu_erp' => 'hidden',
1836 'enjeu_urba' => 'hidden',
1837 'erp' => 'hidden',
1838 'evenement_suivant_tacite' => 'hidden',
1839 'evenement_suivant_tacite_incompletude' => 'hidden',
1840 'numero_versement_archive' => 'hidden',
1841 'requerants' => 'hidden',
1842 'tax_mtn_part_commu' => 'hidden',
1843 'tax_mtn_part_depart' => 'hidden',
1844 'tax_mtn_part_reg' => 'hidden',
1845 'tax_mtn_total' => 'hidden',
1846 'tax_mtn_rap' => 'hidden',
1847 'tax_secteur' => 'hidden',
1848 'tax_mtn_part_commu_sans_exo' => 'hidden',
1849 'tax_mtn_part_depart_sans_exo' => 'hidden',
1850 'tax_mtn_part_reg_sans_exo' => 'hidden',
1851 'tax_mtn_total_sans_exo' => 'hidden',
1852 'tax_mtn_rap_sans_exo' => 'hidden',
1853 'bailleur' => 'hidden',
1854 );
1855 // RECOURS
1856 $re_fields = array(
1857 'a_qualifier' => 'hidden',
1858 'autorite_competente' => 'hidden',
1859 'cle_acces_citoyen' => 'hidden',
1860 'contrevenants' => 'hidden',
1861 'date_ait' => 'hidden',
1862 'date_audience' => 'hidden',
1863 'date_cloture_instruction' => 'hiddenstaticdate',
1864 'date_complet' => 'hidden',
1865 'date_contradictoire' => 'hidden',
1866 'date_decision' => 'hiddenstaticdate',
1867 'date_depot' => 'hiddenstaticdate',
1868 'date_dernier_depot' => 'hidden',
1869 'date_derniere_visite' => 'hidden',
1870 'date_limite' => 'hiddenstaticdate',
1871 'date_limite_incompletude' => 'hidden',
1872 'date_premiere_visite' => 'hidden',
1873 'date_transmission_parquet' => 'hidden',
1874 'date_validite' => 'hidden',
1875 'delai' => 'hidden',
1876 'description_projet' => 'hidden',
1877 'dossier_autorisation_type_detaille' => 'static',
1878 'dossier_instruction_type' => 'hidden',
1879 'dossier_petitionnaire' => 'hidden',
1880 'dossier_petitionnaires' => 'static',
1881 'dt_ctx_infraction' => 'hidden',
1882 'dt_ctx_regularisable' => 'hidden',
1883 'dt_ctx_synthese_anr' => 'hidden',
1884 'dt_ctx_synthese_nti' => 'hidden',
1885 'enjeu_ctx' => 'hidden',
1886 'enjeu_erp' => 'hidden',
1887 'enjeu_urba' => 'hidden',
1888 'erp' => 'hidden',
1889 'evenement_suivant_tacite' =>'selecthiddenstatic',
1890 'evenement_suivant_tacite_incompletude' => 'hidden',
1891 'instructeur_2' => 'hidden',
1892 'numero_versement_archive' => 'hidden',
1893 'requerants' => 'static',
1894 'tax_mtn_part_commu' => 'hidden',
1895 'tax_mtn_part_depart' => 'hidden',
1896 'tax_mtn_part_reg' => 'hidden',
1897 'tax_mtn_total' => 'hidden',
1898 'tax_mtn_rap' => 'hidden',
1899 'tax_secteur' => 'hidden',
1900 'tax_mtn_part_commu_sans_exo' => 'hidden',
1901 'tax_mtn_part_depart_sans_exo' => 'hidden',
1902 'tax_mtn_part_reg_sans_exo' => 'hidden',
1903 'tax_mtn_total_sans_exo' => 'hidden',
1904 'tax_mtn_rap_sans_exo' => 'hidden',
1905 'bailleur' => 'hidden',
1906 );
1907 // ADS
1908 $ads_fields = array(
1909 'autorisation_contestee' => 'hidden',
1910 'cle_acces_citoyen' => 'static',
1911 'contrevenants' => 'hidden',
1912 'date_ait' => 'hidden',
1913 'date_audience' => 'hidden',
1914 'date_cloture_instruction' => 'hidden',
1915 'date_contradictoire' => 'hidden',
1916 'date_derniere_visite' => 'hidden',
1917 'date_premiere_visite' => 'hidden',
1918 'date_transmission_parquet' => 'hidden',
1919 'dossier_autorisation_type_detaille' => 'hidden',
1920 'dossier_instruction_type' => 'selecthiddenstatic',
1921 'dossier_petitionnaires' => 'hidden',
1922 'dt_ctx_infraction' => 'hidden',
1923 'dt_ctx_regularisable' => 'hidden',
1924 'dt_ctx_synthese_anr' => 'hidden',
1925 'dt_ctx_synthese_nti' => 'hidden',
1926 'enjeu_ctx' => 'static',
1927 'instructeur_2' => 'hidden',
1928 'requerants' => 'hidden',
1929 'bailleur' => 'hidden',
1930 );
1931 // DPC
1932 $dpc_fields = array(
1933 'autorisation_contestee' => 'hidden',
1934 'cle_acces_citoyen' => 'static',
1935 'contrevenants' => 'hidden',
1936 'date_ait' => 'hidden',
1937 'date_audience' => 'hidden',
1938 'date_cloture_instruction' => 'hidden',
1939 'date_contradictoire' => 'hidden',
1940 'date_derniere_visite' => 'hidden',
1941 'date_premiere_visite' => 'hidden',
1942 'date_transmission_parquet' => 'hidden',
1943 'dossier_autorisation_type_detaille' => 'hidden',
1944 'dossier_instruction_type' => 'selecthiddenstatic',
1945 'dossier_petitionnaires' => 'hidden',
1946 'dt_ctx_infraction' => 'hidden',
1947 'dt_ctx_regularisable' => 'hidden',
1948 'dt_ctx_synthese_anr' => 'hidden',
1949 'dt_ctx_synthese_nti' => 'hidden',
1950 'enjeu_ctx' => 'static',
1951 'instructeur_2' => 'hidden',
1952 'requerants' => 'hidden',
1953 'bailleur' => 'static',
1954 );
1955 // COMMUN
1956 $all_fields = array(
1957 'accord_tacite' => 'hidden',
1958 'annee' => 'hidden',
1959 'autres_demandeurs' => 'hidden',
1960 'date_achevement' => 'hidden',
1961 'date_chantier' => 'hidden',
1962 'date_conformite' => 'hidden',
1963 'date_notification_delai' => 'hidden',
1964 'date_rejet' => 'hidden',
1965 'date_retour_contradictoire' => 'hidden',
1966 'delai_incompletude' => 'hidden',
1967 'description' => 'hidden',
1968 'dossier' => 'hidden',
1969 'dossier_arrondissement' => 'hidden',
1970 'dossier_autorisation' => 'hidden',
1971 'dossier_autorisation_libelle' => 'hidden',
1972 'duree_validite' => 'hidden',
1973 'etat_pendant_incompletude' => 'hidden',
1974 'geom' => 'hiddenstatic',
1975 'geom1' => 'hidden',
1976 'incomplet_notifie' => 'hidden',
1977 'incompletude' => 'hidden',
1978 'interface_referentiel_erp' => 'hidden',
1979 'log_instructions' => 'nodisplay',
1980 'om_collectivite' => 'hidden',
1981 'quartier' => 'hidden',
1982 'version' => 'hidden',
1983 'date_modification' => 'hidden',
1984 'hash_sitadel' => 'hidden',
1985 'depot_electronique' => 'hidden',
1986 );
1987 if (isset($parameters['option_afficher_division'])
1988 && $parameters['option_afficher_division'] !== 'true') {
1989 $all_fields['division'] = 'hidden';
1990 }
1991 if (isset($parameters['option_sig'])
1992 && $parameters['option_sig'] !== 'sig_interne'
1993 && $parameters['option_sig'] !== 'sig_externe'){
1994 $all_fields['geom'] = 'hidden';
1995 }
1996
1997 //
1998 // Gestion du contexte
1999 //
2000
2001 // AJOUTER, MODIFIER
2002 if ($crud === 'create' OR $crud === 'update') {
2003
2004 $all_fields['avis_decision'] = 'selecthiddenstatic';
2005 $all_fields['etat'] = 'hiddenstatic';
2006 $all_fields['terrain'] = 'hiddenstatic';
2007 //
2008 $ads_fields['a_qualifier'] = 'checkbox';
2009 $ads_fields['accord_tacite'] = 'hiddenstatic';
2010 $ads_fields['autorite_competente'] = 'selecthiddenstatic';
2011 $ads_fields['date_achevement'] = 'hiddenstaticdate';
2012 $ads_fields['date_chantier'] = 'hiddenstaticdate';
2013 $ads_fields['date_conformite'] = 'hiddenstaticdate';
2014 $ads_fields['date_decision'] = 'hiddenstaticdate';
2015 $ads_fields['date_depot'] = 'hiddenstaticdate';
2016 $ads_fields['date_dernier_depot'] = 'hiddenstaticdate';
2017 $ads_fields['date_notification_delai'] = 'hiddenstaticdate';
2018 $ads_fields['date_rejet'] = 'hiddenstaticdate';
2019 $ads_fields['date_validite'] = 'hiddenstaticdate';
2020 $ads_fields['delai'] = 'hiddenstatic';
2021 $ads_fields['description_projet'] = 'hiddenstatic';
2022 $ads_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
2023 $ads_fields['shon_calcul'] = 'hiddenstatic';
2024 $ads_fields['tax_mtn_part_commu'] = 'hidden';
2025 $ads_fields['tax_mtn_part_depart'] = 'hidden';
2026 $ads_fields['tax_mtn_part_reg'] = 'hidden';
2027 $ads_fields['tax_mtn_total'] = 'hidden';
2028 $ads_fields['tax_mtn_rap'] = 'hidden';
2029 $ads_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
2030 $ads_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
2031 $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
2032 $ads_fields['tax_mtn_total_sans_exo'] = 'hidden';
2033 $ads_fields['tax_mtn_rap_sans_exo'] = 'hidden';
2034 $ads_fields['terrain_surface_calcul'] = 'hiddenstatic';
2035 //
2036 $dpc_fields['a_qualifier'] = 'checkbox';
2037 $dpc_fields['accord_tacite'] = 'hiddenstatic';
2038 $dpc_fields['autorite_competente'] = 'selecthiddenstatic';
2039 $dpc_fields['date_achevement'] = 'hiddenstaticdate';
2040 $dpc_fields['date_chantier'] = 'hiddenstaticdate';
2041 $dpc_fields['date_conformite'] = 'hiddenstaticdate';
2042 $dpc_fields['date_decision'] = 'hiddenstaticdate';
2043 $dpc_fields['date_depot'] = 'hiddenstaticdate';
2044 $dpc_fields['date_dernier_depot'] = 'hiddenstaticdate';
2045 $dpc_fields['date_notification_delai'] = 'hiddenstaticdate';
2046 $dpc_fields['date_rejet'] = 'hiddenstaticdate';
2047 $dpc_fields['date_validite'] = 'hiddenstaticdate';
2048 $dpc_fields['delai'] = 'hiddenstatic';
2049 $dpc_fields['description_projet'] = 'hiddenstatic';
2050 $dpc_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
2051 $dpc_fields['shon_calcul'] = 'hiddenstatic';
2052 $dpc_fields['tax_mtn_part_commu'] = 'hidden';
2053 $dpc_fields['tax_mtn_part_depart'] = 'hidden';
2054 $dpc_fields['tax_mtn_part_reg'] = 'hidden';
2055 $dpc_fields['tax_mtn_total'] = 'hidden';
2056 $dpc_fields['tax_mtn_rap'] = 'hidden';
2057 $dpc_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
2058 $dpc_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
2059 $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
2060 $dpc_fields['tax_mtn_total_sans_exo'] = 'hidden';
2061 $dpc_fields['tax_mtn_rap_sans_exo'] = 'hidden';
2062 $dpc_fields['terrain_surface_calcul'] = 'hiddenstatic';
2063 //
2064 $re_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
2065 $re_fields['dossier_petitionnaires'] = 'hiddenstatic';
2066 $re_fields['requerants'] = 'hiddenstatic';
2067 $inf_fields['contrevenants'] = 'hiddenstatic';
2068 $inf_fields['dt_ctx_synthese_anr'] = 'hiddenstatic';
2069 $inf_fields['dt_ctx_synthese_nti'] = 'hiddenstatic';
2070 // Si l'état du dossier est incomplet
2071 if ($this->is_incomplet_notifie()) {
2072 // On cache les dates de complétude et de limite d'instruction
2073 $ads_fields['date_complet'] = 'hidden';
2074 $ads_fields['date_limite'] = 'hidden';
2075 $ads_fields['evenement_suivant_tacite_incompletude'] ='selecthiddenstatic';
2076 $ads_fields['evenement_suivant_tacite'] ='hidden';
2077 $ads_fields['date_limite_incompletude'] = 'hiddenstaticdate';
2078 //
2079 $dpc_fields['date_complet'] = 'hidden';
2080 $dpc_fields['date_limite'] = 'hidden';
2081 $dpc_fields['evenement_suivant_tacite_incompletude'] ='selecthiddenstatic';
2082 $dpc_fields['evenement_suivant_tacite'] ='hidden';
2083 $dpc_fields['date_limite_incompletude'] = 'hiddenstaticdate';
2084 } else {
2085 // Sinon on cache la date de limite d'incomplétude
2086 $ads_fields['date_limite_incompletude'] = 'hidden';
2087 $ads_fields['evenement_suivant_tacite_incompletude'] ='hidden';
2088 $ads_fields['evenement_suivant_tacite'] ='selecthiddenstatic';
2089 $ads_fields['date_complet'] = 'hiddenstaticdate';
2090 $ads_fields['date_limite'] = 'hiddenstaticdate';
2091 //
2092 $dpc_fields['date_limite_incompletude'] = 'hidden';
2093 $dpc_fields['evenement_suivant_tacite_incompletude'] ='hidden';
2094 $dpc_fields['evenement_suivant_tacite'] ='selecthiddenstatic';
2095 $dpc_fields['date_complet'] = 'hiddenstaticdate';
2096 $dpc_fields['date_limite'] = 'hiddenstaticdate';
2097 }
2098
2099 // MODIFIER
2100 if ($crud ==='update') {
2101 $all_fields['dossier_libelle'] = 'hiddenstatic';
2102 $ads_fields['dossier_petitionnaire'] = 'hiddenstatic';
2103 $dpc_fields['dossier_petitionnaire'] = 'hiddenstatic';
2104 //
2105 if ($this->f->isAccredited("dossier_modifier_instructeur")) {
2106 $all_fields['instructeur'] = 'select';
2107 $inf_fields['instructeur_2'] = 'select';
2108 } else {
2109 $all_fields['instructeur'] = 'selecthiddenstatic';
2110 $inf_fields['instructeur_2'] = 'selecthiddenstatic';
2111 }
2112 //
2113 if (isset($parameters['option_afficher_division'])
2114 && $parameters['option_afficher_division'] === 'true') {
2115 $all_fields['division'] = 'selecthiddenstatic';
2116 if ($this->f->isAccredited("dossier_modifier_division")) {
2117 $all_fields['division'] = 'select';
2118 }
2119 }
2120 // Si l'utilisateur ne peut pas qualifier un DI (guichet unique & guichet et suivi)
2121 if (!$this->f->isAccredited(array("dossier_instruction","dossier_instruction_qualifier"), "OR")) {
2122 // Il ne peut pas modifier les champs suivants
2123 $ads_fields['numero_versement_archive'] = 'hiddenstatic';
2124 $ads_fields['enjeu_urba'] = 'checkboxhiddenstatic';
2125 $ads_fields['enjeu_erp'] = 'checkboxhiddenstatic';
2126 $ads_fields['erp'] = 'checkboxhiddenstatic';
2127 $ads_fields['a_qualifier'] = 'checkboxhiddenstatic';
2128 //
2129 $dpc_fields['numero_versement_archive'] = 'hiddenstatic';
2130 $dpc_fields['enjeu_urba'] = 'checkboxhiddenstatic';
2131 $dpc_fields['enjeu_erp'] = 'checkboxhiddenstatic';
2132 $dpc_fields['erp'] = 'checkboxhiddenstatic';
2133 $dpc_fields['a_qualifier'] = 'checkboxhiddenstatic';
2134 }
2135 // Le profil Qualificateur peut modifier seulement les champs
2136 // autorite_competente, a_qualifier et erp
2137 if ($this->f->isUserQualificateur()) {
2138 $ads_fields['numero_versement_archive'] = 'static';
2139 $ads_fields['enjeu_urba'] = 'checkboxstatic';
2140 $ads_fields['enjeu_erp'] = 'checkboxstatic';
2141 //
2142 $dpc_fields['numero_versement_archive'] = 'static';
2143 $dpc_fields['enjeu_urba'] = 'checkboxstatic';
2144 $dpc_fields['enjeu_erp'] = 'checkboxstatic';
2145 }
2146 // Le dossier ne doit pas être instruit
2147 if ($this->has_only_recepisse() === true
2148 && $this->getStatut() !== 'cloture') {
2149 //
2150 $all_fields['date_depot'] = 'date';
2151 }
2152 }
2153 }
2154 // MODIFIER, SUPPRIMER, CONSULTER
2155 if ($crud !== 'create') {
2156 $re_fields['autorisation_contestee'] = 'selecthiddenstatic';
2157 $all_fields['date_demande'] = 'hidden';
2158 // La collectivité n'est jamais modifiable
2159 if ($_SESSION['niveau'] == 2) {
2160 $all_fields['om_collectivite'] = 'selecthiddenstatic';
2161 }
2162 // Instance du paramétrage des taxes
2163 $inst_taxe_amenagement = $this->get_inst_taxe_amenagement();
2164 // Instance de cerfa
2165 $inst_cerfa = $this->get_inst_cerfa();
2166 // Si l'option de simulation est activée pour la collectivité du
2167 // dossier, l'utilisateur connecté a la permissions de voir
2168 // la simulation des taxes, la collectivité à un paramétrage pour
2169 // les taxes et que le cerfa du dossier à les champs requis
2170 if ($this->f->is_option_simulation_taxes_enabled($this->getVal('om_collectivite')) === true
2171 && $this->f->isAccredited("dossier_instruction_simulation_taxes") === true
2172 && $inst_taxe_amenagement !== null
2173 && $inst_cerfa->can_simulate_taxe_amenagement() === true) {
2174
2175 // MODIFIER
2176 if ($crud === 'update') {
2177 //
2178 if ($this->is_in_context_of_foreign_key("tax_secteur", $this->retourformulaire)) {
2179 $ads_fields['tax_secteur'] = 'selecthiddenstatic';
2180 $dpc_fields['tax_secteur'] = 'selecthiddenstatic';
2181 } else {
2182 $ads_fields['tax_secteur'] = 'select';
2183 $dpc_fields['tax_secteur'] = 'select';
2184 }
2185 }
2186 // SUPPRIMER
2187 if ($crud === 'delete') {
2188 //
2189 $ads_fields['tax_secteur'] = 'selectstatic';
2190 $dpc_fields['tax_secteur'] = 'selectstatic';
2191 }
2192 // CONSULTER
2193 if ($crud === 'read') {
2194 //
2195 $ads_fields['tax_secteur'] = 'selectstatic';
2196 $dpc_fields['tax_secteur'] = 'selectstatic';
2197 }
2198 // Si ce n'est pas une commune d'Île-de-France
2199 if ($inst_taxe_amenagement->getVal('en_ile_de_france') == 'f') {
2200 //
2201 $ads_fields['tax_mtn_part_reg'] = 'hidden';
2202 $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
2203 $dpc_fields['tax_mtn_part_reg'] = 'hidden';
2204 $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
2205 }
2206 } else {
2207 // MODIFER
2208 if ($crud === 'update') {
2209 $ads_fields['tax_secteur'] = 'hidden';
2210 $dpc_fields['tax_secteur'] = 'hidden';
2211 }
2212 // SUPPRIMER, CONSULTER
2213 if ($crud === 'delete' OR $crud ==='read') {
2214 $ads_fields['tax_secteur'] = 'hidden';
2215 $ads_fields['tax_mtn_part_commu'] = 'hidden';
2216 $ads_fields['tax_mtn_part_depart'] = 'hidden';
2217 $ads_fields['tax_mtn_part_reg'] = 'hidden';
2218 $ads_fields['tax_mtn_total'] = 'hidden';
2219 $ads_fields['tax_mtn_rap'] = 'hidden';
2220 $ads_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
2221 $ads_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
2222 $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
2223 $ads_fields['tax_mtn_total_sans_exo'] = 'hidden';
2224 $ads_fields['tax_mtn_rap_sans_exo'] = 'hidden';
2225 //
2226 $dpc_fields['tax_secteur'] = 'hidden';
2227 $dpc_fields['tax_mtn_part_commu'] = 'hidden';
2228 $dpc_fields['tax_mtn_part_depart'] = 'hidden';
2229 $dpc_fields['tax_mtn_part_reg'] = 'hidden';
2230 $dpc_fields['tax_mtn_total'] = 'hidden';
2231 $dpc_fields['tax_mtn_rap'] = 'hidden';
2232 $dpc_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
2233 $dpc_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
2234 $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
2235 $dpc_fields['tax_mtn_total_sans_exo'] = 'hidden';
2236 $dpc_fields['tax_mtn_rap_sans_exo'] = 'hidden';
2237 }
2238 }
2239 }
2240 // SUPPRIMER, CONSULTER
2241 if ($crud === 'delete' OR $crud ==='read') {
2242
2243 $ads_fields['geom'] = 'static';
2244 $ads_fields['a_qualifier'] = 'checkboxstatic';
2245 $ads_fields['terrain_references_cadastrales'] = 'referencescadastralesstatic';
2246 //
2247 $dpc_fields['geom'] = 'static';
2248 $dpc_fields['a_qualifier'] = 'checkboxstatic';
2249 $dpc_fields['terrain_references_cadastrales'] = 'referencescadastralesstatic';
2250 // Si l'état du dossier est incomplet
2251 if ($this->is_incomplet_notifie()) {
2252 // on cache les dates de complétude et de limite d'instruction
2253 $ads_fields['date_complet'] = 'hidden';
2254 $ads_fields['date_limite'] = 'hidden';
2255 $ads_fields['evenement_suivant_tacite_incompletude'] = 'selecthiddenstatic';
2256 $ads_fields['evenement_suivant_tacite'] = 'hidden';
2257 //
2258 $dpc_fields['date_complet'] = 'hidden';
2259 $dpc_fields['date_limite'] = 'hidden';
2260 $dpc_fields['evenement_suivant_tacite_incompletude'] = 'selecthiddenstatic';
2261 $dpc_fields['evenement_suivant_tacite'] = 'hidden';
2262 } else {
2263 // sinon on cache la date de limite d'incomplétude
2264 $ads_fields['date_limite_incompletude'] = 'hidden';
2265 $ads_fields['evenement_suivant_tacite_incompletude'] = 'hidden';
2266 $ads_fields['evenement_suivant_tacite'] = 'selecthiddenstatic';
2267 //
2268 $dpc_fields['date_limite_incompletude'] = 'hidden';
2269 $dpc_fields['evenement_suivant_tacite_incompletude'] = 'hidden';
2270 $dpc_fields['evenement_suivant_tacite'] = 'selecthiddenstatic';
2271 }
2272 if (isset($parameters['option_arrondissement'])
2273 && $parameters['option_arrondissement'] === 'true') {
2274 $all_fields['dossier_arrondissement'] = 'static';
2275 }
2276 }
2277
2278 //
2279 // Typage
2280 //
2281
2282 switch ($groupe) {
2283 case 'CTX IN':
2284 $this->manage_type($form, $inf_fields);
2285 break;
2286 case 'CTX RE':
2287 $this->manage_type($form, $re_fields);
2288 break;
2289 case 'ADS':
2290 $this->manage_type($form, $ads_fields);
2291 break;
2292 case 'DPC':
2293 $this->manage_type($form, $dpc_fields);
2294 break;
2295 }
2296 $this->manage_type($form, $all_fields);
2297 }
2298
2299
2300 /**
2301 * Gestion du typage des champs
2302 *
2303 * @param object $form formulaire instancié
2304 * @param array $fields tableau associatif des champs avec leur widget de formulaire en valeur
2305 * @return void
2306 */
2307 protected function manage_type($form, $fields) {
2308 foreach ($this->champs as $key => $field) {
2309 if (array_key_exists($field, $fields) === true) {
2310 $form->setType($field, $fields[$field]);
2311 }
2312 }
2313 }
2314
2315
2316 /**
2317 * Retourne le nombre de parcelles qu'à en commun le dossier passé en
2318 * paramètre avec les dossiers contentieux en cours. Le nombre de parcelles
2319 * est groupé par type de dossier d'autorisation : RE ou IN.
2320 *
2321 * @param string $di identifiant du DI
2322 * @return array
2323 */
2324 function get_nb_parcelles_dossier_ciblees_par_contentieux($di) {
2325 $sql = "
2326 SELECT
2327 dossier_autorisation_type.code, COUNT(*) as nb
2328 FROM " . DB_PREFIXE . "dossier
2329 LEFT JOIN " . DB_PREFIXE . "dossier_parcelle
2330 ON dossier.dossier = dossier_parcelle.dossier
2331 LEFT JOIN " . DB_PREFIXE . "dossier_parcelle as parcelle_ctx
2332 ON dossier_parcelle.libelle = parcelle_ctx.libelle
2333 AND dossier_parcelle.dossier != parcelle_ctx.dossier
2334 LEFT JOIN " . DB_PREFIXE . "dossier as dossier_ctx
2335 ON dossier_ctx.dossier = parcelle_ctx.dossier
2336 INNER JOIN " . DB_PREFIXE . "etat
2337 ON dossier_ctx.etat = etat.etat AND etat.statut != 'cloture'
2338 LEFT JOIN " . DB_PREFIXE . "dossier_autorisation
2339 ON dossier_ctx.dossier_autorisation = dossier_autorisation.dossier_autorisation
2340 LEFT JOIN " . DB_PREFIXE . "dossier_autorisation_type_detaille
2341 ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2342 = dossier_autorisation.dossier_autorisation_type_detaille
2343 LEFT JOIN " . DB_PREFIXE . "dossier_autorisation_type
2344 ON dossier_autorisation_type_detaille.dossier_autorisation_type
2345 = dossier_autorisation_type.dossier_autorisation_type
2346 WHERE
2347 dossier.dossier = '" . $di . "'
2348 AND (dossier_autorisation_type.code = 'RE'
2349 OR dossier_autorisation_type.code = 'IN')
2350 GROUP BY dossier_autorisation_type.code
2351 ";
2352 $this->addToLog("get_nb_parcelles_dossier_ciblees_par_contentieux : db->query(\"$sql\")", VERBOSE_MODE);
2353 $res = $this->db->query($sql);
2354 $this->f->isDatabaseError($res);
2355
2356 $nb_re_inf = array('re' => 0, 'inf' => 0);
2357
2358 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
2359 if ($row["code"] == "RE"){
2360 $nb_re_inf['re'] += $row["nb"];
2361 }
2362 if ($row["code"] == "IN"){
2363 $nb_re_inf['inf'] += $row["nb"];
2364 }
2365 }
2366
2367 return $nb_re_inf;
2368 }
2369
2370 function setVal(&$form, $maj, $validation, &$db = null, $DEBUG = null) {
2371 $this->maj=$maj;
2372
2373 if($this->getVal('geom') != ""
2374 && $this->f->getParameter('option_sig') == 'sig_externe'
2375 && $this->f->issetSIGParameter($this->getVal('dossier')) === true) {
2376 $form->setVal('geom', $this->getGeolocalisationLink());
2377 }
2378 $affichage_form = $this->get_type_affichage_formulaire();
2379 if ($affichage_form === 'ADS') {
2380 // Dans le cas d'un dépôt électronique un pictogramme apparait devant le demandeur
2381 if ($maj == 1 || $maj == 2 || $maj == 3){
2382 if ($this->getVal('depot_electronique') === 't'
2383 || $this->getVal('depot_electronique') === true
2384 || $this->getVal('depot_electronique') === 1) {
2385 //
2386 $form->setVal('dossier_petitionnaire',"<span class='om-icon om-icon-16 om-icon-fix depot-electronique-16' title='Dépôt électronique'> </span>".$this->getVal('dossier_petitionnaire'));
2387 }
2388 }
2389 if ($maj == 3) {
2390
2391 $nb_re_inf = $this->get_nb_parcelles_dossier_ciblees_par_contentieux($this->getVal('dossier'));
2392
2393 $message = "";
2394 if ($nb_re_inf['re'] > 0) {
2395 $message .= "<span class=\"label label-warning\" ";
2396 $message .= "title=\""._("Au moins un dossier de recours contentieux ou gracieux en cours concerne les références cadastrales du dossier courant.")."\">";
2397 $message .= _("RE");
2398 $message .= "</span>";
2399 if ($nb_re_inf['inf'] > 0) {
2400 $message .= " ";
2401 }
2402 }
2403 if ($nb_re_inf['inf'] > 0) {
2404 $message .= "<span class=\"label label-important\" ";
2405 $message .= "title=\""._("Au moins un dossier d'infraction en cours concerne les références cadastrales du dossier courant.")."\">";
2406 $message .= _("IN");
2407 $message .= "</span>";
2408 }
2409
2410 $form->setVal('enjeu_ctx', $message);
2411 }
2412 }
2413 if ($affichage_form === 'CTX RE') {
2414 // Récupération des demandeurs liés au dossier
2415 $this->listeDemandeur("dossier", $this->getVal('dossier'));
2416 //
2417 $requerants = '';
2418 if ($this->getVal('requerants') != '') {
2419 $requerants = $this->getVal('requerants');
2420 if (isset($this->valIdDemandeur['requerant']) === true
2421 AND count($this->valIdDemandeur['requerant']) > 0) {
2422 $requerants .= ' '._('et autres');
2423 }
2424 }
2425 $form->setVal('requerants', $requerants);
2426 //
2427 $dossier_petitionnaires = '';
2428 if ($this->getVal('dossier_petitionnaire') != '') {
2429 $dossier_petitionnaires = $this->getVal('dossier_petitionnaire');
2430 }
2431 if (isset($this->valIdDemandeur['petitionnaire']) === true
2432 AND count($this->valIdDemandeur['petitionnaire']) > 0) {
2433 $dossier_petitionnaires .= ' '._('et autres');
2434 }
2435 $form->setVal('dossier_petitionnaires', $dossier_petitionnaires);
2436 }
2437 if ($affichage_form === 'CTX IN') {
2438 // Récupération des demandeurs liés au dossier
2439 $this->listeDemandeur("dossier", $this->getVal('dossier'));
2440 //
2441 $contrevenants = '';
2442 if ($this->getVal('contrevenants') != '') {
2443 $contrevenants = $this->getVal('contrevenants');
2444 if (isset($this->valIdDemandeur['contrevenant']) === true
2445 AND count($this->valIdDemandeur['contrevenant']) > 0) {
2446 $contrevenants .= ' '._('et autres');
2447 }
2448 }
2449 $form->setVal('contrevenants', $contrevenants);
2450 }
2451 if ($affichage_form === 'DPC') {
2452 // Récupération des demandeurs liés au dossier
2453 $this->listeDemandeur("dossier", $this->getVal('dossier'));
2454 //
2455 $bailleurs = '';
2456 if ($this->getVal('bailleurs') != '') {
2457 $bailleurs = $this->getVal('bailleurs');
2458 if (isset($this->valIdDemandeur['bailleur']) === true
2459 AND count($this->valIdDemandeur['bailleur']) > 0) {
2460 $bailleurs .= ' '._('et autres');
2461 }
2462 }
2463 $form->setVal('bailleurs', $bailleurs);
2464 }
2465 if ($validation == 0) {
2466 if ($maj == 0){
2467
2468 $form->setVal('annee', date('y'));
2469 $form->setVal('date_demande', date('Y-m-d'));
2470 $form->setVal('date_depot', date('Y-m-d'));
2471
2472 //$form->setVal('demandeur_cp', $dossier_cp);
2473 //$form->setVal('demandeur_ville', $dossier_ville);
2474
2475 //$form->setVal('delegataire_cp', $dossier_cp);
2476 //$form->setVal('delegataire_ville', $dossier_ville);
2477
2478 //$form->setVal('terrain_cp', $dossier_cp);
2479 //$form->setVal('terrain_ville', $dossier_ville);
2480
2481 $form->setVal('accord_tacite', 'Non');
2482 $form->setVal('etat', 'initialiser');
2483 }
2484 }
2485 }
2486
2487
2488 /**
2489 * getGeolocalisationLink retourne le code HTML affichant l'icone du globe, ainsi que
2490 * les coordonnées du centroide du dossier, le tout étant un lien vers le SIG.
2491 *
2492 * @return string Lien vers le SIG
2493 */
2494 function getGeolocalisationLink() {
2495 //
2496 $link = "<a id='action-form-localiser'".
2497 " target='_SIG' href='".OM_ROUTE_FORM."&obj=dossier_instruction&action=140&idx=".$this->getVal("dossier")."'>".
2498 "<span class='om-icon om-icon-16 om-icon-fix sig-16' title='Localiser'>Localiser</span> ".
2499 $this->getVal('geom').
2500 " </a>";
2501 return $link;
2502 }
2503
2504
2505 function setSelect(&$form, $maj, &$db = null, $debug = null) {
2506 // XXX Commenté pour patcher le problème de montée en charge de la base
2507 // de données en cas de reprise de données d'un gros volume de dossier
2508 // d'instruction
2509 //parent::setSelect($form, $maj, $db, $debug);
2510
2511 //optimisation sur table importante parcelle -> pas d appel methode parent
2512 if(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php"))
2513 include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php");
2514
2515 // om_collectivite
2516 $this->init_select($form, $this->f->db, $maj, null, "om_collectivite", $sql_om_collectivite, $sql_om_collectivite_by_id, false);
2517
2518 /*
2519 * Pour chaque init_select d'un select non modifiable on teste
2520 * si l'on est en mode modifier : si c'est le cas alors on initialise le
2521 * select en mode consulter (qui n'affiche rien s'il n'y a aucune valeur).
2522 */
2523
2524 $collectivite_idx = $this->getVal("om_collectivite");
2525 $affichage_form_dat = "";
2526 // Si recherche avancée om_collectivite = collectivité utilisateur
2527 if($maj == 999) {
2528 $collectivite_idx = $this->f->getParameter("om_collectivite_idx");
2529 } else {
2530 $affichage_form_dat = $this->get_type_affichage_formulaire();
2531 }
2532 // Définition de la qualité et de la traduction de l'instructeur
2533 switch ($affichage_form_dat) {
2534 case 'DPC':
2535 case 'ADS':
2536 $affichage_instr = "AND instructeur_qualite.code = 'instr'";
2537 $lib_instructeur = _("l'instructeur");
2538 break;
2539 case 'CTX RE':
2540 case 'CTX IN':
2541 $affichage_instr = "AND instructeur_qualite.code = 'juri'";
2542 $lib_instructeur = _('le juriste');
2543 break;
2544 default:
2545 $affichage_instr = "";
2546 $lib_instructeur = _("l'instructeur");
2547 break;
2548 }
2549
2550
2551 // instructeur
2552 // on recupère les services des multicollectivités et de celle du DI
2553 if($this->f->getParameter('option_afficher_division')==='true') {
2554 // instructeur
2555 $sql_instructeur_div_by_di = str_replace('<collectivite_di>', $collectivite_idx, $sql_instructeur_div_by_di);
2556 $sql_instructeur_div_by_di = str_replace('<instructeur_qualite>', $affichage_instr, $sql_instructeur_div_by_di);
2557 $this->init_select($form, $db, $maj, $debug, "instructeur",
2558 $sql_instructeur_div_by_di, $sql_instructeur_div_by_id, true, false, $lib_instructeur);
2559
2560 $sql_instructeur_2_div_by_di = str_replace('<collectivite_di>', $collectivite_idx, $sql_instructeur_2_div_by_di);
2561 $this->init_select($form, $db, $maj, $debug, "instructeur_2",
2562 $sql_instructeur_2_div_by_di, $sql_instructeur_2_div_by_id, true, false, _('le technicien'));
2563
2564 } else {
2565 $sql_instructeur_by_di = str_replace('<collectivite_di>', $collectivite_idx, $sql_instructeur_by_di);
2566 $sql_instructeur_by_di = str_replace('<instructeur_qualite>', $affichage_instr, $sql_instructeur_by_di);
2567 $this->init_select($form, $db, $maj, $debug, "instructeur",
2568 $sql_instructeur_by_di, $sql_instructeur_by_id, true, false, $lib_instructeur);
2569 $sql_instructeur_2_by_di = str_replace('<collectivite_di>', $collectivite_idx, $sql_instructeur_2_by_di);
2570 $this->init_select($form, $db, $maj, $debug, "instructeur_2",
2571 $sql_instructeur_2_by_di, $sql_instructeur_2_by_id, true, false, _('le technicien'));
2572 }
2573
2574 // etat
2575 if ($maj == 1) {
2576 $this->init_select($form, $db, 3, $debug, "etat",
2577 $sql_etat, $sql_etat_by_id, false);
2578 } else {
2579 $this->init_select($form, $db, $maj, $debug, "etat",
2580 $sql_etat, $sql_etat_by_id, false);
2581 }
2582
2583 // dossier_instruction_type
2584 $this->init_select($form, $db, $maj, $debug, "dossier_instruction_type",
2585 $sql_dossier_instruction_type, $sql_dossier_instruction_type_by_id, false);
2586
2587 // division
2588 $sql_division_by_di = str_replace('<collectivite_di>', $collectivite_idx, $sql_division_by_di);
2589 $this->init_select($form, $db, $maj, $debug, "division",
2590 $sql_division_by_di, $sql_division_by_id, true);
2591
2592 // autorite_competente
2593 $this->init_select($form, $db, $maj, $debug, "autorite_competente",
2594 $sql_autorite_competente, $sql_autorite_competente_by_id, false);
2595
2596 // avis_decision
2597 if ($maj == 1) {
2598 $this->init_select($form, $db, 3, $debug, "avis_decision",
2599 $sql_avis_decision, $sql_avis_decision_by_id, false);
2600 } else {
2601 $this->init_select($form, $db, $maj, $debug, "avis_decision",
2602 $sql_avis_decision, $sql_avis_decision_by_id, false);
2603 }
2604
2605 // autorisation_contestee
2606 if ($affichage_form_dat === 'CTX RE'
2607 && ($maj == 1 || $maj == 3)) {
2608 // À exécuter seulement en mode modifier ou consulter des recours
2609 // pour éviter le ralentissement de l'affichage des listings des DI
2610 $this->init_select($form, $db, $maj, $debug, "autorisation_contestee", $sql_autorisation_contestee, $sql_autorisation_contestee_by_id, false);
2611 }
2612
2613 // evenement_suivant_tacite
2614 $this->init_select($form, $db, $maj, $debug, "evenement_suivant_tacite",
2615 $sql_evenement_suivant_tacite, $sql_evenement_suivant_tacite_by_id, false);
2616
2617 // evenement_suivant_tacite_incompletude
2618 $this->init_select($form, $db, $maj, $debug, "evenement_suivant_tacite_incompletude",
2619 $sql_evenement_suivant_tacite_incompletude, $sql_evenement_suivant_tacite_incompletude_by_id, false);
2620
2621 // Ajout, modification et recherche avancée
2622 if($maj == 0 || $maj == 1 || $maj == 999){
2623 // accord tacite
2624 $contenu=array();
2625 $contenu[0]=array('Non','Oui');
2626 $contenu[1]=array('Non','Oui');
2627 $form->setSelect("accord_tacite",$contenu);
2628
2629 // geom *** a voir
2630 if($maj==1){ //modification
2631 $contenu=array();
2632 $contenu[0]=array("dossier",$this->getParameter("idx"));
2633 $form->setSelect('geom',$contenu);
2634 }
2635 // arrondissement recherche avancée
2636 $this->init_select($form, $db, $maj, $debug, "arrondissement",
2637 $sql_arrondissement, $sql_arrondissement_by_id, false);
2638 // dossier_autorisation_type_detaille recherche avancée
2639 $this->init_select($form, $db, $maj, $debug, "dossier_autorisation_type_detaille",
2640 $sql_dossier_autorisation_type_detaille, $sql_dossier_autorisation_type_detaille_by_id, false);
2641
2642 }
2643
2644 // Ce formulaire n'est pas accessible en ajout ni en recherche avancée
2645 // mais dans le cas où il le serait, rien ne doit être fait concernant
2646 // les taxes
2647 if ($maj != 0 && $maj != 999) {
2648
2649 // Instance du parmétrage des taxes
2650 $inst_taxe_amenagement = $this->get_inst_taxe_amenagement();
2651 // Si la colletivité à un paramétrage pour la taxe d'aménagement
2652 if ($inst_taxe_amenagement !== null) {
2653
2654 // Choix du secteur pour part communale
2655 $contenu = array();
2656 $contenu[0][0] = "";
2657 $contenu[1][0] = _('choisir')."&nbsp;"._("tax_secteur");
2658
2659 // Il y a 20 secteurs maximum dans une commune de France
2660 for ($i=1; $i < 21; $i++) {
2661
2662 // Valeur du secteur
2663 $value = $inst_taxe_amenagement->getVal('tx_comm_secteur_'.$i);
2664
2665 //
2666 if ($value !== null && $value !== '') {
2667 //
2668 $contenu[0][$i] = $i;
2669 $contenu[1][$i] = sprintf(_('Secteur %s'), $i);
2670 }
2671 }
2672 //
2673 $form->setSelect("tax_secteur", $contenu);
2674 }
2675 }
2676 }
2677
2678 function setLib(&$form,$maj) {
2679 parent::setLib($form,$maj);
2680 $affichage_form = $this->get_type_affichage_formulaire();
2681 if ($affichage_form === 'ADS') {
2682 $form->setLib('date_decision', _("date de la decision"));
2683 $form->setLib('date_limite', _("limite d'instruction"));
2684 }
2685 if ($affichage_form === 'CTX IN') {
2686 $form->setLib('avis_decision', _("Décision"));
2687 $form->setLib('date_cloture_instruction', _("Date de clôture d'instruction"));
2688 $form->setLib('date_decision', _("Date de décision"));
2689 $form->setLib('date_depot', _("Date de réception"));
2690 $form->setLib('date_limite', _("Tacicité"));
2691 $form->setLib('instructeur',_('Juriste'));
2692 }
2693 if ($affichage_form === 'CTX RE') {
2694 $form->setLib('autorisation_contestee', _("Autorisation contestée"));
2695 $form->setLib('avis_decision', _("Décision"));
2696 $form->setLib('date_cloture_instruction', _("Date de clôture d'instruction"));
2697 $form->setLib('date_decision', _("Date de décision"));
2698 $form->setLib('date_depot', _("Date de recours"));
2699 $form->setLib('date_limite', _("Tacicité"));
2700 $form->setLib('instructeur',_('Juriste'));
2701 }
2702 if ($affichage_form === 'DPC') {
2703 //
2704 }
2705 $form->setLib('accord_tacite',_("decision tacite"));
2706 $form->setLib('autorite_competente',_('competence'));
2707 $form->setLib('cle_acces_citoyen', _("cle_acces_citoyen"));
2708 $form->setLib('date_ait', _("Date d'AIT"));
2709 $form->setLib('date_audience', _("Date d'audience"));
2710 $form->setLib('date_complet', _("completude"));
2711 $form->setLib('date_contradictoire', _("Date de contradictoire"));
2712 $form->setLib('date_dernier_depot', _("dernier depot"));
2713 $form->setLib('date_derniere_visite', _("Date de dernière visite"));
2714 $form->setLib('date_limite_incompletude', _("limite d'instruction"));
2715 $form->setLib('date_premiere_visite', _("Date de 1ère visite"));
2716 $form->setLib('date_transmission_parquet', _('Date de transmission au Parquet'));
2717 $form->setLib('date_validite', _("fin de validite le"));
2718 $form->setLib('delai', _("delai (mois)"));
2719 $form->setLib('delai',_("delai d'instruction"));
2720 $form->setLib('description_projet',_('description du projet'));
2721 $form->setLib('dossier_arrondissement', _("Arrondissement"));
2722 $form->setLib('dossier_autorisation_libelle',_('dossier_autorisation_libelle'));
2723 $form->setLib('dossier_autorisation_type_detaille', _("Type"));
2724 $form->setLib('contrevenants', _("Contrevenant(s)"));
2725 $form->setLib('dossier_instruction_type',_('type de dossier'));
2726 $form->setLib('dossier_petitionnaire',_('demandeur'));
2727 $form->setLib('dossier_petitionnaires', _("Pétitionnaire(s)"));
2728 $form->setLib('requerants', _("Requérant(s)"));
2729 $form->setLib('dt_ctx_infraction', _("Infraction"));
2730 $form->setLib('dt_ctx_regularisable', _("Régularisable"));
2731 $form->setLib('dt_ctx_synthese_anr', _("Synthèse des ANR"));
2732 $form->setLib('dt_ctx_synthese_nti', _("Synthèse des NTI"));
2733 $form->setLib('enjeu_ctx', _("contentieux"));
2734 $form->setLib('enjeu_erp', _("ERP"));
2735 $form->setLib('enjeu_urba', _("urbanisme"));
2736 $form->setLib('erp', _("ERP"));
2737 $form->setLib('geom',_('geolocalisaion'));
2738 $form->setLib('instructeur_2', _('Technicien'));
2739 $form->setLib('numero_versement_archive', _("numero"));
2740 $form->setLib('bailleur', _("Bailleur(s)"));
2741 $form->setLib('terrain', _("Localisation"));
2742 }
2743
2744 function setOnchange(&$form,$maj){
2745 parent::setOnchange($form,$maj);
2746 // mise en majuscule
2747 $form->setOnchange("demandeur_nom","this.value=this.value.toUpperCase()");
2748 $form->setOnchange("demandeur_societe","this.value=this.value.toUpperCase()");
2749 $form->setOnchange("delegataire_nom","this.value=this.value.toUpperCase()");
2750 $form->setOnchange("delegataire_societe","this.value=this.value.toUpperCase()");
2751 $form->setOnchange("architecte_nom","this.value=this.value.toUpperCase()");
2752 $form->setOnchange("terrain_adresse","this.value=this.value.toUpperCase()");
2753 $form->setOnchange('terrain_surface','VerifNumdec(this)');
2754 $form->setOnchange('tax_mtn_part_commu', 'VerifFloat(this, 0)');
2755 $form->setOnchange('tax_mtn_part_depart', 'VerifFloat(this, 0)');
2756 $form->setOnchange('tax_mtn_part_reg', 'VerifFloat(this, 0)');
2757 $form->setOnchange('tax_mtn_total', 'VerifFloat(this, 0)');
2758 $form->setOnchange('tax_mtn_rap', 'VerifFloat(this, 0)');
2759 $form->setOnchange('tax_mtn_part_commu_sans_exo', 'VerifFloat(this, 0)');
2760 $form->setOnchange('tax_mtn_part_depart_sans_exo', 'VerifFloat(this, 0)');
2761 $form->setOnchange('tax_mtn_part_reg_sans_exo', 'VerifFloat(this, 0)');
2762 $form->setOnchange('tax_mtn_total_sans_exo', 'VerifFloat(this, 0)');
2763 $form->setOnchange('tax_mtn_rap_sans_exo', 'VerifFloat(this, 0)');
2764 }
2765
2766 function setLayout(&$form, $maj) {
2767
2768 $affichage_form = $this->get_type_affichage_formulaire();
2769 if ($affichage_form === 'ADS' || $affichage_form === 'DPC') {
2770 // En-tête
2771 $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
2772
2773 // Col1 : Fieldset "Dossier d'Instruction"
2774 $form->setBloc('om_collectivite', 'D', '', 'col_9');
2775
2776 $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
2777 $form->setFieldset('geom', 'F');
2778
2779
2780 $form->setBloc('geom', 'F');
2781
2782 // Col2 : 3 fieldsets
2783 $form->setBloc('enjeu_urba', 'D', '', 'col_3');
2784
2785 // Fieldset "Enjeu"
2786 $form->setFieldset('enjeu_urba', 'D', _("Enjeu"));
2787 $form->setFieldset('enjeu_ctx', 'F');
2788 // Fieldset "Qualification"
2789 $form->setFieldset('erp', 'D', _("Qualification"));
2790 $form->setFieldset('a_qualifier', 'F');
2791 // Fieldset "Archive"
2792 $form->setFieldset('numero_versement_archive', 'D', _("Archive"));
2793 $form->setFieldset('date_demande', 'F');
2794
2795 $form->setBloc('date_demande', 'F');
2796 $form->setBloc('date_demande', 'F');
2797
2798 // Fieldset "Instruction"
2799 $form->setBloc('date_depot', 'D', '', 'col_12');
2800 $form->setFieldset('date_depot', 'D', _('Instruction'), 'col_12');
2801
2802 // Fieldset "Suivi"
2803 $form->setBloc('date_depot', 'D', '', 'col_12');
2804
2805 $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
2806 // Col 1
2807 $form->setBloc('date_depot', 'D', '', 'col_6');
2808 $form->setBloc('date_depot', 'D');
2809 $form->setBloc('date_dernier_depot', 'F');
2810 $form->setBloc('date_limite', 'D', '', 'interligne');
2811 $form->setBloc('date_limite_incompletude', 'F');
2812 $form->setBloc('date_limite_incompletude', 'F');
2813 // Col 2
2814 $form->setBloc('etat', 'D', '', 'col_6');
2815 $form->setBloc('etat', 'D');
2816 $form->setBloc('etat', 'F');
2817 $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
2818 $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
2819 $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
2820 $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
2821
2822 $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
2823
2824 // Bloc 2 fieldsets
2825 $form->setBloc('date_decision', 'D', '', 'col_12');
2826
2827 // Col 1 Fieldset "Décision"
2828 $form->setFieldset('date_decision', 'D', _('Decision'), 'col_6');
2829 $form->setFieldset('avis_decision','F','');
2830 // Col 2 Fieldset "Validité de l'autorisation"
2831 $form->setFieldset('date_validite', 'D', _("Validite de l'autorisation"), 'col_6');
2832 $form->setFieldset('date_validite','F','');
2833
2834 $form->setBloc('date_validite', 'F'); // Fin bloc 2 fieldsets
2835
2836 $form->setFieldset('date_conformite','F','');
2837 $form->setBloc('date_conformite', 'F'); // Fin Instruction
2838
2839 // Fieldset "Simulation des taxes"
2840 $form->setBloc('tax_secteur', 'D', '', 'col_12');
2841 $form->setFieldset('tax_secteur', 'D', _("Simulation des taxes"), 'startClosed');
2842 //
2843 $form->setBloc('tax_secteur', 'D', '', 'col_12');
2844 $form->setFieldset('tax_secteur', 'D', _("Taxe d'aménagement"), 'collapsible');
2845 $form->setFieldset('tax_mtn_total_sans_exo', 'F', '');
2846 $form->setBloc('tax_mtn_total_sans_exo', 'F');
2847 //
2848 $form->setBloc('tax_mtn_rap', 'D', '', 'col_12');
2849 $form->setFieldset('tax_mtn_rap', 'D', _("Redevance d'archéologie préventive"), 'collapsible');
2850 $form->setFieldset('tax_mtn_rap_sans_exo', 'F', '');
2851 $form->setBloc('tax_mtn_rap_sans_exo', 'F');
2852 //
2853 $form->setFieldset('tax_mtn_rap_sans_exo', 'F', '');
2854 $form->setBloc('tax_mtn_rap_sans_exo', 'F');
2855
2856 // Fieldset "Localisation"
2857 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
2858
2859 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
2860 // Col 1
2861 $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
2862 $form->setBloc('terrain_references_cadastrales', 'F');
2863 // Col 2
2864 $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
2865 $form->setBloc('terrain_superficie', 'F');
2866
2867 $form->setFieldset('terrain_superficie', 'F', '');
2868
2869 $form->setBloc('terrain_superficie', 'F');
2870 }
2871 // RECOURS
2872 if ($affichage_form === 'CTX RE') {
2873 // Fieldset "Dossier d'Instruction"
2874 $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
2875 $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
2876 $form->setFieldset('date_demande', 'F');
2877 $form->setBloc('date_demande', 'F');
2878
2879 // Fieldset "Instruction"
2880 $form->setBloc('date_depot', 'D', '', 'col_12');
2881 $form->setFieldset('date_depot', 'D', _('Instruction'), 'col_12');
2882
2883 // Fieldset "Suivi"
2884 $form->setBloc('date_depot', 'D', '', 'col_12');
2885
2886 $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
2887 // Col 1
2888 $form->setBloc('date_depot', 'D', '', 'col_6');
2889 // $form->setBloc('date_depot', 'D');
2890 // $form->setBloc('date_dernier_depot', 'F');
2891 // $form->setBloc('date_limite', 'D', '');
2892 // $form->setBloc('date_limite_incompletude', 'F');
2893 $form->setBloc('date_cloture_instruction', 'F');
2894 // Col 2
2895 $form->setBloc('etat', 'D', '', 'col_6');
2896 $form->setBloc('etat', 'D');
2897 $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
2898 // $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
2899 // $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
2900 $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
2901 $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
2902
2903 $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
2904
2905 // Bloc 2 fieldsets
2906 $form->setBloc('date_decision', 'D', '', 'col_12');
2907
2908 // Col 1 Fieldset "Décision"
2909 $form->setFieldset('date_decision', 'D', _('Decision'), 'col_12');
2910 $form->setFieldset('avis_decision','F','');
2911 // Col 2 Fieldset "Validité de l'autorisation"
2912
2913 $form->setBloc('date_validite', 'F'); // Fin bloc 2 fieldsets
2914
2915 $form->setFieldset('date_conformite','F','');
2916 $form->setBloc('date_conformite', 'F'); // Fin Instruction
2917
2918 // Fieldset "Localisation"
2919 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
2920
2921 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
2922 // Col 1
2923 $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
2924 $form->setBloc('terrain_references_cadastrales', 'F');
2925 // Col 2
2926 $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
2927 $form->setBloc('terrain_superficie', 'F');
2928
2929 $form->setFieldset('terrain_superficie', 'F', '');
2930
2931 $form->setBloc('terrain_superficie', 'F');
2932 }
2933
2934 // INFRACTION
2935 if ($affichage_form === 'CTX IN') {
2936
2937 // Fieldset "Dossier d'Instruction"
2938 $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
2939 $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
2940 $form->setFieldset('date_demande', 'F');
2941 $form->setBloc('date_demande', 'F');
2942
2943 // Fieldset "Instruction"
2944 $form->setBloc('date_depot', 'D', '', 'col_12');
2945 $form->setFieldset('date_depot', 'D', _('Instruction'), 'col_12');
2946 // Fieldset "Suivi"
2947 $form->setBloc('date_depot', 'D', '', 'col_12');
2948 $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
2949 // Col 1
2950 $form->setBloc('date_depot', 'D', '', 'col_6');
2951 $form->setBloc('date_depot', 'D');
2952 $form->setBloc('date_dernier_depot', 'F');
2953 $form->setBloc('date_limite', 'D', '', 'interligne');
2954 $form->setBloc('date_limite_incompletude', 'F');
2955 $form->setBloc('date_limite_incompletude', 'F');
2956 // Col 2
2957 $form->setBloc('etat', 'D', '', 'col_6');
2958 $form->setBloc('etat', 'D');
2959 $form->setBloc('etat', 'F');
2960 $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
2961 $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
2962 $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
2963 $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
2964 $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
2965 // Fieldset "Décision"
2966 $form->setFieldset('date_decision', 'D', _('Decision'), 'col_12');
2967 $form->setFieldset('date_conformite','F',''); // Fin Décision
2968 $form->setFieldset('date_conformite','F','');
2969 $form->setBloc('date_conformite', 'F'); // Fin Instruction
2970
2971 // Fieldset "Localisation"
2972 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
2973 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
2974 // Col 1
2975 $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
2976 $form->setBloc('terrain_references_cadastrales', 'F');
2977 // Col 2
2978 $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
2979 $form->setBloc('terrain_superficie', 'F');
2980 $form->setFieldset('terrain_superficie', 'F', '');
2981 $form->setBloc('terrain_superficie', 'F');
2982
2983 // Fieldset "Demandeurs"
2984 // → cf. formSpecificContent()
2985 }
2986 }
2987
2988 /**
2989 * Permet de retourner si le dossier est incomplet notifié
2990 *
2991 * @return boolean true si incomplet notifié
2992 */
2993 function is_incomplet_notifie() {
2994 // Si le dossier est défini en tant qu'incomplet notifie
2995 if($this->getVal('incomplet_notifie') == 't' AND
2996 $this->getVal('incompletude') == 't') {
2997 return true;
2998 }
2999 return false;
3000 }
3001
3002
3003 /**
3004 * Vérifie que le dossier d'instruction en cours ne soit pas instruit.
3005 * Ne sont pas compté comme instruit les dossiers n'ayant que des événements
3006 * d'instruction de type 'affichage'.
3007 *
3008 * @return boolean
3009 */
3010 function has_only_recepisse() {
3011
3012 // Récupère la liste des instructions du dossier
3013 $list_instructions = $this->get_list_instructions(true);
3014
3015 // Si le dossier a pour seule instruction le récépissé de la demande
3016 if (count($list_instructions) === 1
3017 && $list_instructions[0] === $this->get_demande_instruction_recepisse()) {
3018 //
3019 return true;
3020 }
3021
3022 //
3023 return false;
3024 }
3025
3026
3027 /**
3028 * TRIGGER - triggerajouterapres.
3029 *
3030 * - Interface avec le référentiel ERP [108]
3031 * - Gestion des données techniques liées
3032 * - Mise à jour du DA
3033 * - Gestion des références cadastrales / parcelles liées
3034 *
3035 * @return boolean
3036 */
3037 function triggerajouterapres($id, &$db = null, $val = array(), $DEBUG = null) {
3038
3039 /**
3040 * Interface avec le référentiel ERP.
3041 *
3042 * (WS->ERP)[108] Dépôt de dossier DAT -> AT
3043 * Déclencheur :
3044 * - L'option ERP est activée
3045 * - Validation du formulaire d'ajout d'une demande de nouveau dossier
3046 * de type AT
3047 */
3048 //
3049 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
3050 && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__at')) {
3051 //
3052 $infos = array(
3053 "dossier_instruction" => $this->valF['dossier'],
3054 );
3055 //
3056 $ret = $this->f->send_message_to_referentiel_erp(108, $infos);
3057 if ($ret !== true) {
3058 $this->cleanMessage();
3059 $this->addToMessage(_("Une erreur s'est produite lors de la notification (108) du référentiel ERP. Contactez votre administrateur."));
3060 return false;
3061 }
3062 $this->addToMessage(_("Notification (108) du référentiel ERP OK."));
3063 }
3064
3065 /**
3066 * Gestion des données techniques liées.
3067 */
3068 // On ajoute les données techniques
3069 if ($this->ajoutDonneesTechniquesDI($id, $db, $val, $DEBUG) === false) {
3070 //
3071 $this->addToMessage(_("Erreur lors de l'enregistrement du dossier.")." "._("Contactez votre administrateur."));
3072 $this->correct = false;
3073 return false;
3074 }
3075
3076 /**
3077 * Mise à jour des données du DA.
3078 */
3079 //
3080 $inst_da = $this->get_inst_dossier_autorisation($this->valF["dossier_autorisation"]);
3081 //
3082 if ($inst_da->majDossierAutorisation() === false) {
3083 //
3084 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
3085 $this->correct = false;
3086 return false;
3087 }
3088
3089 /**
3090 * Gestion des références cadastrales / parcelles liées.
3091 */
3092 // Si le champ des références cadastrales n'est pas vide
3093 if ($this->valF['terrain_references_cadastrales'] != '') {
3094 // Ajout des parcelles dans la table dossier_parcelle
3095 $this->ajouter_dossier_parcelle($this->valF['dossier'],
3096 $this->valF['terrain_references_cadastrales']);
3097 }
3098
3099 /**
3100 * Notification de l'éventuelle autorisation contestée
3101 */
3102 if ($this->valF['autorisation_contestee'] !== null) {
3103 // Instancie la classe dossier_message
3104 $dossier_message = $this->get_inst_dossier_message(']');
3105 // Ajoute le message de notification
3106 $dossier_message_val = array();
3107 $dossier_message_val['dossier'] = $this->valF['autorisation_contestee'];
3108 $dossier_message_val['type'] = _('Autorisation contestée');
3109 $dossier_message_val['emetteur'] = $this->f->get_connected_user_login_name();
3110 $dossier_message_val['login'] = $_SESSION['login'];
3111 $dossier_message_val['date_emission'] = date('Y-m-d H:i:s');
3112 $dossier_message_val['contenu'] = sprintf(_('Cette autorisation a été contestée par le recours %s.'), $this->valF['dossier']);
3113 // Si une erreur se produit lors de l'ajout
3114 if ($dossier_message->add_notification_message($dossier_message_val) !== true) {
3115 // Message d'erreur affiché à l'utilisateur
3116 $this->addToMessage(_("L'autorisation contestée n'a pas pu être notifiée du recours."));
3117 $this->correct = false;
3118 return false;
3119 }
3120 }
3121
3122 //
3123 return true;
3124 }
3125
3126 /**
3127 * Récupère l'instance de dossier message.
3128 *
3129 * @param string $dossier_message Identifiant du message.
3130 *
3131 * @return object
3132 */
3133 private function get_inst_dossier_message($dossier_message = null) {
3134 //
3135 return $this->get_inst_common("dossier_message", $dossier_message);
3136 }
3137
3138 /**
3139 * Récupère l'identifiant du quartier et d'un arrondissement d'une référence
3140 * cadastrale
3141 * @param string $reference_cadastrale
3142 *
3143 * @return array
3144 */
3145 function getQuartierArrondissement($reference_cadastrale) {
3146
3147 $reference_cadastrale = trim($reference_cadastrale);
3148 $quartier = '';
3149
3150 //Récupère le code impot du quartier dans la référence cadastrale
3151 for ( $i = 0 ; $i < strlen($reference_cadastrale) ; $i++ ){
3152
3153 //Si c'est un chiffre, c'est le code quartier
3154 if (is_numeric($reference_cadastrale[$i]) ){
3155
3156 $quartier .= $reference_cadastrale[$i];
3157 }
3158 //Sinon c'est la section
3159 else{
3160 break;
3161 }
3162 }
3163
3164 //Si le code impôt du quartier a bien été renseigné
3165 if ( $quartier !== '' ){
3166
3167 //Requête de récupération de l'identifiantdu quartier et de
3168 //l'arrondissement
3169 $sql = "SELECT
3170 quartier, arrondissement
3171 FROM
3172 ".DB_PREFIXE."quartier
3173 WHERE
3174 code_impots='$quartier'";
3175 $this->addToLog("getQuartierArrondissement() : db->query(\"$sql\")", VERBOSE_MODE);
3176 $res = $this->db->query($sql);
3177 if (database::isError($res)) {
3178 die();
3179 }
3180
3181 //Si on a un résultat
3182 if ( $res->numRows() == 1 ){
3183 //
3184 return $res->fetchRow(DB_FETCHMODE_ASSOC);
3185 }
3186 }
3187
3188 return NULL;
3189 }
3190
3191 /**
3192 * Récupère la section d'une référence cadastrale
3193 * @param string $reference_cadastrale
3194 *
3195 * @return string
3196 */
3197 function getSection($reference_cadastrale){
3198
3199 $reference_cadastrale = trim($reference_cadastrale);
3200 $section = NULL;
3201
3202 for ( $i = 0 ; $i < strlen($reference_cadastrale) ; $i++ )
3203 if ( !is_numeric($reference_cadastrale[$i]) && is_string($reference_cadastrale[$i]) && $reference_cadastrale[$i] !== ' ' )
3204 $section .= $reference_cadastrale[$i];
3205
3206 return $section;
3207 }
3208
3209 /*
3210 * Retourne l'intructeur correspondant le mieux à la parcelle
3211 * */
3212 /**
3213 * Récupère la section d'une référence cadastrale
3214 * @param string $quartier
3215 * @param string $arrondissement
3216 * @param string $section
3217 * @param string $dossier_autorisation
3218 *
3219 * @return array
3220 */
3221 function getInstructeurDivision( $quartier, $arrondissement, $section, $dossier_autorisation_type_detaille, $collectivite, $column = 'instructeur') {
3222
3223 $quartier = ( $quartier == NULL ) ? -1 : $quartier;
3224 $arrondissement = ( $arrondissement == NULL ) ? -1 : $arrondissement;
3225 $collectivite = ( $collectivite == "" ) ? -1 : $collectivite;
3226
3227 //Si le dossier d'autorisation a un type détaillé de dossier
3228 //d'autorisation associé
3229 if ($dossier_autorisation_type_detaille != ''
3230 && $dossier_autorisation_type_detaille != null){
3231
3232 //Requête de récupération de l'instructeur à affecter
3233 $sql = "
3234 SELECT
3235 ".$column.", section, quartier, arrondissement, dossier_autorisation_type_detaille
3236 FROM
3237 ".DB_PREFIXE."affectation_automatique l
3238 WHERE
3239 ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier IS NULL AND section IS NULL AND om_collectivite IS NULL) OR
3240 ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier IS NULL AND section IS NULL AND om_collectivite = $collectivite) OR
3241 ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier IS NULL AND section = '$section' AND om_collectivite = $collectivite) OR
3242 ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier IS NULL AND section = '$section' AND om_collectivite IS NULL) OR
3243 ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier = $quartier AND section IS NULL AND om_collectivite = $collectivite) OR
3244 ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier = $quartier AND section IS NULL AND om_collectivite IS NULL) OR
3245 ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier = $quartier AND section = '$section' AND om_collectivite = $collectivite) OR
3246 ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier = $quartier AND section = '$section' AND om_collectivite IS NULL) OR
3247 ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier IS NULL AND section IS NULL AND om_collectivite = $collectivite) OR
3248 ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier IS NULL AND section IS NULL AND om_collectivite IS NULL) OR
3249 ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier IS NULL AND section = '$section' AND om_collectivite = $collectivite) OR
3250 ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier IS NULL AND section = '$section' AND om_collectivite IS NULL) OR
3251 ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier = $quartier AND section IS NULL AND om_collectivite = $collectivite) OR
3252 ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier = $quartier AND section IS NULL AND om_collectivite IS NULL) OR
3253 ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier = $quartier AND section = '$section' AND om_collectivite IS NULL) OR
3254 ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier = $quartier AND section = '$section' AND om_collectivite = $collectivite) OR
3255 ( 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
3256 ( 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
3257 ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier IS NULL AND section = '$section' AND om_collectivite = $collectivite) OR
3258 ( 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
3259 ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier = $quartier AND section IS NULL AND om_collectivite = $collectivite) OR
3260 ( 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
3261 ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier = $quartier AND section = '$section' AND om_collectivite = $collectivite) OR
3262 ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier = $quartier AND section = '$section' AND om_collectivite IS NULL) OR
3263 ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier IS NULL AND section IS NULL AND om_collectivite = $collectivite) OR
3264 ( 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
3265 ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier IS NULL AND section = '$section' AND om_collectivite = $collectivite) OR
3266 ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier IS NULL AND section = '$section' AND om_collectivite IS NULL) OR
3267 ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier = $quartier AND section IS NULL AND om_collectivite = $collectivite) OR
3268 ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier = $quartier AND section IS NULL AND om_collectivite IS NULL) OR
3269 ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier = $quartier AND section = '$section' AND om_collectivite IS NULL) OR
3270 ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier = $quartier AND section = '$section' AND om_collectivite = $collectivite)
3271 ORDER BY dossier_autorisation_type_detaille, section, quartier, arrondissement
3272 LIMIT 1";
3273 $this->addToLog("getInstructeurDivision : db->query(\"$sql\")", VERBOSE_MODE);
3274 $res = $this->db->query($sql);
3275 if (database :: isError($res))
3276 die($res->getMessage()."erreur ".$sql);
3277
3278 //Si on a récupéré un instructeur correspondant aux critères
3279 if ( $res->numRows() > 0 ){
3280
3281 $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
3282 // On vérifie que l'instructeur est paramétré
3283 if ($row[$column] !== '') {
3284 //On récupère sa division
3285 $sql = "SELECT division FROM ".DB_PREFIXE."instructeur WHERE instructeur = ".$row[$column];
3286 $res = $this->db->query($sql);
3287 if (database :: isError($res))
3288 die($res->getMessage()."erreur ".$sql);
3289
3290 $row['division'] = NULL;
3291 //S'il a une division
3292 if ( $res->numRows() > 0 ){
3293
3294 $rowT=& $res->fetchRow(DB_FETCHMODE_ASSOC);
3295 $row['division'] = $rowT['division'];
3296 }
3297
3298 return $row;
3299 }
3300 }
3301 }
3302
3303 return NULL;
3304 }
3305
3306 /**
3307 * Récupère le type détaillé d'une dossier d'autorisation.
3308 *
3309 * @param integer $dossier_autorisation DA
3310 *
3311 * @return mixed
3312 */
3313 function get_dossier_autorisation_da_type_detaille($dossier_autorisation) {
3314
3315 //
3316 $resDATD = "";
3317
3318 //Récupération du dossier_autorisation_type_detaille concerné par le
3319 //$dossier_autorisation
3320 $sql = "
3321 SELECT
3322 dossier_autorisation_type_detaille
3323 FROM
3324 ".DB_PREFIXE."dossier_autorisation
3325 WHERE
3326 dossier_autorisation = '$dossier_autorisation'";
3327 $this->addToLog(__METHOD__." : db->query(\"$sql\")", VERBOSE_MODE);
3328 $resDATD = $this->db->getOne($sql);
3329 $this->f->isDatabaseError($resDATD);
3330
3331 //
3332 return $resDATD;
3333 }
3334
3335 /* =============================================================
3336 * ===============================================================
3337 */
3338
3339 function triggerajouter($id, &$db = null, $val = array(), $DEBUG = null) {
3340 //
3341 $this->addToLog("triggerajouter() : start", EXTRA_VERBOSE_MODE);
3342
3343 // Initialisation des variables nécessaires à l'affectation automatique
3344 $quartier = NULL;
3345 $arrondissement = NULL;
3346 $section = NULL;
3347 $instructeur = NULL;
3348
3349 // Si la référence cadastrale n'est pas vide alors on récupère la
3350 //section, le quartier et l'arrondissement
3351 if ($this->valF['terrain_references_cadastrales'] != '') {
3352
3353 // Cette méthode récupère l'arrondissement et le quartier de la
3354 //référence cadastrale saisie
3355 $quartierArrondissement = $this->getQuartierArrondissement($this->valF['terrain_references_cadastrales']);
3356 if ( $quartierArrondissement!= NULL ){
3357
3358 $quartier = $quartierArrondissement['quartier'];
3359 $arrondissement = $quartierArrondissement['arrondissement'];
3360 }
3361 // Si il n'y a pas d'arrondissement alors on vide le quartier
3362 if ( strcmp($arrondissement,'') == 0 ) {
3363
3364 $arrondissement = NULL;
3365 $quartier = NULL;
3366 }
3367 // On récupère la section
3368 $section = $this->getSection($this->valF['terrain_references_cadastrales']);
3369 }
3370
3371 // Si aucun instructeur n'est saisi et que la dossier_autorisation_type_detaille n'est pas vide
3372 // alors on récupère l'instructeur et la division depuis l'affectation
3373 if ( ( empty($this->valF['instructeur']) || $this->valF['instructeur'] == '' ) && $val['dossier_autorisation'] != '' ) {
3374
3375 // Récupère le type détaillé du DA
3376 $dossier_autorisation_type_detaille = $this->get_dossier_autorisation_da_type_detaille($this->valF['dossier_autorisation']);
3377
3378 //Récupération de l'instructeur ainsi que de sa division
3379 $instructeurDivision = $this->getInstructeurDivision($quartier, $arrondissement, $section, $dossier_autorisation_type_detaille, $this->valF['om_collectivite']);
3380
3381 //Si un instructeur et sa division ont été récupérés
3382 if ( $instructeurDivision != NULL ){
3383
3384 $instructeur = $instructeurDivision['instructeur'];
3385 $division = $instructeurDivision['division'];
3386 }
3387 //Si un instructeur et sa division n'ont pas été récupérés, on
3388 //ajoute pas les données
3389 if ( $instructeur != NULL ){
3390
3391 $this->valF['instructeur'] = $instructeur;
3392 $this->valF['division'] = $division;
3393 } else {
3394 //On affiche un message à l'utilisateur pour lui signifier
3395 //qu'aucun instructeur n'a été assigné au dossier d'instruction
3396 //créé
3397 if ($this->f->isAccredited("dossier_modifier_instructeur")) {
3398 $this->addToMessage("<br/> "._("Pensez a assigner un instructeur a ce dossier.")." <br/>");
3399 } else {
3400 $this->addToMessage("<br/> "._("Aucun instructeur compatible avec ce dossier trouve, contactez votre administrateur afin d'en assigner un a ce dossier.")." <br/>");
3401 }
3402 }
3403
3404 // Gestion instructeur 2
3405 $instr2 = $this->getInstructeurDivision($quartier, $arrondissement, $section, $dossier_autorisation_type_detaille, $this->valF['om_collectivite'], 'instructeur_2');
3406 if ($instr2 != NULL){
3407 $this->valF['instructeur_2'] = $instr2['instructeur_2'];
3408 }
3409 } else {
3410 $this->addToMessage("<br/> "._("Aucun instructeur compatible avec ce dossier trouve, contactez votre administrateur afin d'en assigner un a ce dossier.")." <br/>");
3411 }
3412 //
3413 $this->addToLog("triggerajouter() : end", EXTRA_VERBOSE_MODE);
3414 }
3415
3416 /**
3417 * TRIGGER - triggermodifierapres.
3418 *
3419 * - Interface avec le référentiel ERP [101]
3420 * - Interface avec le référentiel ERP [102][103]
3421 * - Interface avec le référentiel ERP [114]
3422 * - Gestion des demandeurs liés
3423 * - Gestion des références cadastrales / parcelles liées
3424 * - Gestion des taxes
3425 *
3426 * @return boolean
3427 */
3428 function triggermodifierapres($id, &$db = null, $val = array(), $DEBUG = null) {
3429 // Mise à jour DA si miroir du DI
3430 $inst_da = $this->get_inst_dossier_autorisation($this->getVal('dossier_autorisation'));
3431 if ($inst_da->is_dossier_autorisation_visible() === false) {
3432 if ($inst_da->majDossierAutorisation() === false) {
3433 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
3434 return false;
3435 }
3436 }
3437
3438 /**
3439 * Interface avec le référentiel ERP.
3440 *
3441 * (WS->ERP)[101] ERP Qualifié -> AT
3442 * Déclencheur :
3443 * - L'option ERP est activée
3444 * - Le dossier est de type AT
3445 * - Le dossier est marqué comme "connecté au référentiel ERP"
3446 * - Le formulaire de modification du dossier est validé avec le
3447 * marqueur "à qualifier" à "NON" alors qu'il était précédemment à
3448 * "OUI"
3449 */
3450 //
3451 if ($this->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
3452 && $this->is_connected_to_referentiel_erp() === true
3453 && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__at')
3454 && $this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false) {
3455 // Récupère la liste des contraintes
3456 $contraintes_plu_list = $this->getListContrainte($this->valF['dossier'], false);
3457 // Extrait les libellés de chaque contraintes
3458 $contraintes_plu = array();
3459 $contraintes_plu_string = "";
3460 while($row = &$contraintes_plu_list->fetchRow(DB_FETCHMODE_ASSOC)) {
3461 //
3462 $contraintes_plu[] = $row['contrainte_libelle'];
3463 }
3464 // Chaîne de caractère listant toutes les contraintes du dossier
3465 $contraintes_plu_string = implode(' ; ', $contraintes_plu);
3466 $competence = "";
3467 if ($this->valF['autorite_competente'] !== null) {
3468 $inst_ac = $this->get_inst_autorite_competente($this->valF['autorite_competente']);
3469 $competence = $inst_ac->getVal("libelle");
3470 }
3471 //
3472 $infos = array(
3473 "dossier_instruction" => $this->valF['dossier'],
3474 "competence" => $competence,
3475 "contraintes_plu" => $contraintes_plu_string,
3476 "references_cadastrales" => $this->getReferenceCadastrale($this->valF['dossier']),
3477 );
3478 //
3479 $ret = $this->f->send_message_to_referentiel_erp(101, $infos);
3480 if ($ret !== true) {
3481 $this->cleanMessage();
3482 $this->addToMessage(_("Une erreur s'est produite lors de la notification (101) du référentiel ERP. Contactez votre administrateur."));
3483 return false;
3484 }
3485 $this->addToMessage(_("Notification (101) du référentiel ERP OK."));
3486 }
3487
3488 /**
3489 * Interface avec le référentiel ERP.
3490 *
3491 * (WS->ERP)[102] Demande de complétude de dossier PC pour un ERP -> PC qui concerne un ERP
3492 * (WS->ERP)[103] Demande de qualification de dossier PC pour un ERP -> PC qui concerne un ERP
3493 * Déclencheur :
3494 * - L'option ERP est activée
3495 * - Le dossier est de type PC
3496 * - Le formulaire de modification du dossier est validé avec le
3497 * marqueur "à qualifier" à "NON" alors qu'il était précédemment à
3498 * "OUI"
3499 * - Le formulaire de modification du dossier est validé avec le
3500 * marqueur "ERP" à "OUI"
3501 */
3502 //
3503 if ($this->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
3504 && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
3505 && $this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false
3506 && $this->valF['erp'] == true) {
3507 //
3508 $infos = array(
3509 "dossier_instruction" => $this->valF['dossier'],
3510 );
3511 // [102] Demande de complétude de dossier PC pour un ERP
3512 $ret = $this->f->send_message_to_referentiel_erp(102, $infos);
3513 if ($ret !== true) {
3514 $this->cleanMessage();
3515 $this->addToMessage(_("Une erreur s'est produite lors de la notification (102) du référentiel ERP. Contactez votre administrateur."));
3516 return false;
3517 }
3518 $this->addToMessage(_("Notification (102) du référentiel ERP OK."));
3519 // [103] Demande de qualification de dossier PC pour un ERP
3520 $ret = $this->f->send_message_to_referentiel_erp(103, $infos);
3521 if ($ret !== true) {
3522 $this->cleanMessage();
3523 $this->addToMessage(_("Une erreur s'est produite lors de la notification (103) du référentiel ERP. Contactez votre administrateur."));
3524 return false;
3525 }
3526 $this->addToMessage(_("Notification (103) du référentiel ERP OK."));
3527 }
3528
3529 /**
3530 * Interface avec le référentiel ERP.
3531 *
3532 * (WS->ERP)[114] ERP Qualifié -> PC
3533 * Déclencheur :
3534 * - l'option ERP est activée
3535 * - ET le dossier est marqué comme "connecté au référentiel ERP"
3536 * - ET le dossier est de type PC
3537 * - ET
3538 * - soit le formulaire de modification du dossier est validé avec le
3539 * marqueur "enjeu_urba" qui change de statut
3540 * - soit ce marqueur est vrai et le dossier passe à qualifié
3541 */
3542 // Étant donné que l'objet a été modifié en base après sa création,
3543 // il faut le ré-instancier pour récupérer ses informations.
3544 $dossier = $this->f->get_inst__om_dbform(array(
3545 "obj" => "dossier",
3546 "idx" => $this->valF['dossier'],
3547 ));
3548 if ($dossier->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
3549 && $dossier->is_connected_to_referentiel_erp() === true
3550 && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
3551 && (($this->getVal('enjeu_urba') == 't') != $this->valF['enjeu_urba']
3552 || ($this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false
3553 && $this->getVal('enjeu_urba') == 't'))) {
3554
3555 $enjeu = "non";
3556 if ($this->valF['enjeu_urba']) {
3557 $enjeu = "oui";
3558 }
3559
3560 $infos = array(
3561 "dossier_instruction" => $this->valF['dossier'],
3562 "Dossier à enjeu ADS" => $enjeu
3563 );
3564 //
3565 $ret = $this->f->send_message_to_referentiel_erp(114, $infos);
3566 if ($ret !== true) {
3567 $this->cleanMessage();
3568 $this->addToMessage(_("Une erreur s'est produite lors de la notification (114) du référentiel ERP. Contactez votre administrateur."));
3569 return false;
3570 }
3571 $this->addToMessage(_("Notification (114) du référentiel ERP OK."));
3572 }
3573
3574 /**
3575 * Gestion des demandeurs liés.
3576 */
3577 // Ajout ou modification des demandeurs
3578 $this->insertLinkDossierDemandeur($db, $DEBUG);
3579
3580 /**
3581 * Gestion des références cadastrales / parcelles liées.
3582 */
3583 // Si le champ des références cadastrales n'est pas vide
3584 if ($this->getVal('terrain_references_cadastrales')
3585 != $this->valF['terrain_references_cadastrales']) {
3586
3587 // On supprime toutes les lignes de la table dossier_parcelle qui
3588 // font référence le dossier en cours de modification
3589 $this->supprimer_dossier_parcelle($val['dossier']);
3590
3591 // Ajout des parcelles dans la table dossier_parcelle
3592 $this->ajouter_dossier_parcelle($val['dossier'],
3593 $val['terrain_references_cadastrales']);
3594
3595 }
3596
3597 /**
3598 * Gestion des taxes.
3599 */
3600 // Si le champ tax_secteur est modifié et que l'option de simulation des
3601 // taxes est activée
3602 if ($this->getVal('tax_secteur') != $this->valF['tax_secteur']
3603 && $this->f->is_option_simulation_taxes_enabled($this->getVal('om_collectivite')) === true) {
3604
3605 // Valeurs pour le calcul de la taxe d'aménagement
3606 $values = array();
3607 // Instance de la classe donnees_techniques
3608 $donnees_techniques = $this->get_inst_donnees_techniques();
3609 // Récupère les valeurs des données techniques
3610 $values = $donnees_techniques->get_form_val();
3611
3612 // Met à jour les montants du dossier
3613 $update_dossier_tax_mtn = $this->update_dossier_tax_mtn($this->valF['tax_secteur'], $values);
3614 if ($update_dossier_tax_mtn === false) {
3615 //
3616 $this->addToMessage(_("La mise a jour des montants de la simulation de la taxe d'amenagement a echouee."));
3617 //
3618 return false;
3619 }
3620 }
3621
3622 /**
3623 * Gestion des métadonées des pièces liés.
3624 * Vérifie les méthodes à exécuter configurées dans le connecteur du
3625 * filestorage.
3626 */
3627 //
3628 $ret = $this->post_update_metadata($val);
3629 //
3630 if ($ret === false) {
3631 //
3632 $this->cleanMessage();
3633 $this->addToMessage(_("La mise à jour des métadonnées des pièces liées à ce dossier a échouée."));
3634 return false;
3635 }
3636
3637 /**
3638 * Gestion des du changement de date de dépôt.
3639 * Vérification préalable de la présence de la date et de sa
3640 * modification.
3641 */
3642 //
3643 if (array_key_exists("date_depot", $val) === true) {
3644 //
3645 $inst_new_date = DateTime::createFromFormat('d/m/Y', $val["date_depot"]);
3646 $inst_old_date = DateTime::createFromFormat('Y-m-d', $this->getVal("date_depot"));
3647 $new_date = $inst_new_date->format('d/m/Y');
3648 $old_date = $inst_old_date->format('d/m/Y');
3649
3650 //
3651 if ($new_date !== $old_date) {
3652 //
3653 $status = $this->update_date_depot($val["date_depot"]);
3654 //
3655 if ($status === false) {
3656 //
3657 $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
3658 return false;
3659 }
3660
3661 }
3662 }
3663 //
3664 return true;
3665 }
3666
3667 /**
3668 * Permet d’effectuer des actions avant la modification des données dans la base.
3669 * @param mixed $id Identifiant de l'enregistrement
3670 * @param object &$db Objet de la base de données
3671 * @param array $val Valeurs du formulaire
3672 * @param boolean $DEBUG Mode DEBUG
3673 */
3674 function triggermodifier($id, &$db = null, $val = array(), $DEBUG = null) {
3675 // Si la date de dépôt a changé et si elle valait celle du dernier dépôt
3676 // alors cette dernière prend également sa valeur
3677 if ($this->f->formatDate($this->getVal('date_depot')) !== $val['date_depot']
3678 && $this->f->formatDate($this->getVal('date_depot')) === $this->f->formatDate($this->getVal('date_dernier_depot'))) {
3679 $this->valF['date_dernier_depot'] = $this->valF['date_depot'];
3680 }
3681
3682 //
3683 return true;
3684 }
3685
3686 /**
3687 * Methode de traitement suite à la modification de la date de dépot.
3688 *
3689 * @param string $new_date_str Nouvelle date de dépot.
3690 *
3691 * @return boolean
3692 */
3693 function update_date_depot($new_date_str) {
3694 $demande = $this->get_inst_demande();
3695 if ($demande === false) {
3696 return false;
3697 }
3698
3699 $retour = $this->majDateInstruction($demande->getVal("instruction_recepisse"), $new_date_str);
3700 if ($retour === false) {
3701 return false;
3702 }
3703
3704 $valF = array();
3705 foreach ($demande->champs as $id => $champ) {
3706 $valF[$champ] = $demande->val[$id];
3707 }
3708 $valF['date_demande'] = $new_date_str;
3709 $modification = $demande->modifier($valF, $this->f->db, DEBUG);
3710 if ($modification === false) {
3711 return false;
3712 }
3713
3714 $row_date = array("date_demande" => $new_date_str);
3715 $res = $this->db->autoExecute(
3716 DB_PREFIXE."dossier",
3717 $row_date,
3718 DB_AUTOQUERY_UPDATE,
3719 "dossier = '".$this->getVal("dossier")."'"
3720 );
3721 $this->f->addToLog(__METHOD__ . "() : db->autoExecute(" . $res . ")", VERBOSE_MODE);
3722 if ($this->f->isDatabaseError($res, true)) {
3723 return false;
3724 }
3725
3726 // Si c'est un dossier d'instruction initial
3727 $di_version = $this->get_dossier_instruction_version();
3728 if ($di_version === 0 || $di_version === '0') {
3729 //
3730 $row_date = array("depot_initial" => $new_date_str);
3731 $res = $this->db->autoExecute(
3732 DB_PREFIXE."dossier_autorisation",
3733 $row_date,
3734 DB_AUTOQUERY_UPDATE,
3735 "dossier_autorisation = '" . $this->getVal("dossier_autorisation") . "'"
3736 );
3737 $this->f->addToLog(__METHOD__ . "() : db->autoExecute(" . $res . ")", VERBOSE_MODE);
3738 if ($this->f->isDatabaseError($res, true)) {
3739 return false;
3740 }
3741 }
3742 }
3743
3744
3745 /**
3746 * Met à jour l'instruction en fonction de la nouvelle date
3747 * ou retourne false si il ya une erreur.
3748 *
3749 * @param integer $instruction_id Identifiant de l'instruction.
3750 * @param string $date_depot Nouvelle date de dépôt.
3751 *
3752 * @return boolean
3753 */
3754 public function majDateInstruction($instruction_id, $date_depot) {
3755
3756 // Definalise l'instruction de récépissé si nécessaire
3757 $instruction = $this->f->get_inst__om_dbform(array(
3758 "obj" => "instruction",
3759 "idx" => $instruction_id,
3760 ));
3761 $instruction->setParameter('maj', 110);
3762 //
3763 if ($instruction->is_unfinalizable_without_bypass() === true
3764 && $instruction->unfinalize($instruction->valF) === false) {
3765 return false;
3766 }
3767
3768 // Modifie la date d'événement
3769 $instruction->setParameter('maj', 1);
3770 //
3771 $valF = array();
3772 foreach ($instruction->champs as $id => $champ) {
3773 $valF[$champ] = $instruction->getVal($champ);
3774 }
3775 //
3776 $valF['date_evenement'] = $date_depot;
3777 $valF['date_finalisation_courrier'] = null;
3778 //
3779 $modification = $instruction->modifier($valF, $this->f->db, DEBUG);
3780 //
3781 if ($modification === false) {
3782 return false;
3783 }
3784
3785 // Finalise l'instruction
3786 $instruction->setParameter('maj', 100);
3787 if ($instruction->finalize($instruction->valF) === false) {
3788 return false;
3789 }
3790
3791 //
3792 return true;
3793 }
3794
3795 /**
3796 * Récupère l'instance de l'autorité compétente.
3797 *
3798 * @param string $autorite_competente Identifiant de l'autorité compétente.
3799 *
3800 * @return object
3801 */
3802 function get_inst_autorite_competente($autorite_competente = null) {
3803 //
3804 return $this->get_inst_common("autorite_competente", $autorite_competente);
3805 }
3806
3807
3808 /**
3809 * Met à jour les montants des taxes du dossier d'instruction.
3810 *
3811 * @param integer $tax_secteur Secteur communal.
3812 * @param array $val Valeurs des données techniques.
3813 *
3814 * @return boolean
3815 */
3816 public function update_dossier_tax_mtn($tax_secteur, $val = array()) {
3817 // Instance du paramétrage de la taxe d'aménagement
3818 $taxe_amenagement = $this->get_inst_taxe_amenagement();
3819
3820 // Liste des montants à mettre à jour
3821 $valF = array();
3822 $valF['tax_mtn_part_commu'] = null;
3823 $valF['tax_mtn_part_depart'] = null;
3824 $valF['tax_mtn_part_reg'] = null;
3825 $valF['tax_mtn_total'] = null;
3826 $valF['tax_mtn_rap'] = null;
3827 $valF['tax_mtn_part_commu_sans_exo'] = null;
3828 $valF['tax_mtn_part_depart_sans_exo'] = null;
3829 $valF['tax_mtn_part_reg_sans_exo'] = null;
3830 $valF['tax_mtn_total_sans_exo'] = null;
3831 $valF['tax_mtn_rap_sans_exo'] = null;
3832
3833 // Si le tableau des valeurs n'est pas vide
3834 if ($val !== array()) {
3835
3836 // Si le taux communal est renseigné
3837 if ($taxe_amenagement->getVal('tx_comm_secteur_'.$tax_secteur) !== null
3838 && $taxe_amenagement->getVal('tx_comm_secteur_'.$tax_secteur) !== '') {
3839
3840 // Calcul de la TA
3841 $calcul_ta = $taxe_amenagement->compute_ta($tax_secteur, $val);
3842
3843 // Si chaque résultat est calculable
3844 if ($calcul_ta !== null && is_array($calcul_ta) === true) {
3845
3846 // Total des parts de la TA avec exonération
3847 $total_ta = $calcul_ta['commu'] + $calcul_ta['depart'] + $calcul_ta['reg'];
3848 $total_ta_ss_exo = $calcul_ta['commu_ss_exo'] + $calcul_ta['depart_ss_exo'] + $calcul_ta['reg_ss_exo'];
3849
3850 // Valeurs à mettre à jour, les montants doivent être à l'entier
3851 // inférieur
3852 $valF['tax_mtn_part_commu'] = floor($calcul_ta['commu']);
3853 $valF['tax_mtn_part_depart'] = floor($calcul_ta['depart']);
3854 $valF['tax_mtn_part_reg'] = floor($calcul_ta['reg']);
3855 $valF['tax_mtn_total'] = floor($total_ta);
3856 $valF['tax_mtn_part_commu_sans_exo'] = floor($calcul_ta['commu_ss_exo']);
3857 $valF['tax_mtn_part_depart_sans_exo'] = floor($calcul_ta['depart_ss_exo']);
3858 $valF['tax_mtn_part_reg_sans_exo'] = floor($calcul_ta['reg_ss_exo']);
3859 $valF['tax_mtn_total_sans_exo'] = floor($total_ta_ss_exo);
3860 }
3861 }
3862
3863 // Calcul de la RAP
3864 $calcul_rap = $taxe_amenagement->compute_rap($val);
3865
3866 // Si chaque résultat est calculable
3867 if ($calcul_rap !== null && is_array($calcul_rap) === true) {
3868
3869 // RAP avec exonération
3870 $mtn_rap = $calcul_rap['rap'];
3871 // RAP sans exonération
3872 $mtn_rap_ss_exo = $calcul_rap['rap_ss_exo'];
3873
3874 // Valeurs à mettre à jour, les montants doivent être à l'entier
3875 // inférieur
3876 $valF['tax_mtn_rap'] = floor($mtn_rap);
3877 $valF['tax_mtn_rap_sans_exo'] = floor($mtn_rap_ss_exo);
3878 }
3879 }
3880
3881 // Met à jour l'enregistrement de dossier
3882 $res = $this->db->autoExecute(
3883 DB_PREFIXE.$this->table,
3884 $valF,
3885 DB_AUTOQUERY_UPDATE,
3886 $this->clePrimaire ."='".$this->getVal($this->clePrimaire)."'"
3887 );
3888 // Log
3889 $this->f->addToLog(__METHOD__."() : db->autoExecute(".$res.")", VERBOSE_MODE);
3890 //
3891 if ($this->f->isDatabaseError($res, true)) {
3892 //
3893 $this->correct = false;
3894 return false;
3895 }
3896
3897 //
3898 return true;
3899 }
3900
3901
3902 /**
3903 * Ne servira surement pas mais dans le doute autant recalculer les données du DA
3904 */
3905 function triggersupprimerapres($id, &$db = null, $val = array(), $DEBUG = null) {
3906 // Mise à jour des données du dossier d'autorisation
3907 $da = $this->f->get_inst__om_dbform(array(
3908 "obj" => "dossier_autorisation",
3909 "idx" => $this->valF["dossier_autorisation"],
3910 ));
3911 $da->majDossierAutorisation();
3912
3913 // On supprime toutes les lignes de la table dossier_parcelle qui
3914 // font référence le dossier en cours de suppression
3915 $this->supprimer_dossier_parcelle($this->valF['dossier']);
3916
3917 }
3918
3919
3920 /**
3921 * Retourne la reference cadastrale de la demande attache a un dossier ERP
3922 * specifique
3923 * @param string $dossier L'identifiant du dossier
3924 * @return string|null La reference cadastrale si elle est trouve,
3925 * sinon NULL. En cas d'erreur de la BD, l'execution s'arrete.
3926 */
3927 function getReferenceCadastrale($dossier) {
3928 $sql = "SELECT terrain_references_cadastrales FROM ".DB_PREFIXE."demande WHERE dossier_instruction = '" . $dossier . "'";
3929 $res = $this->db->limitquery($sql, 0, 1);
3930 $this->addToLog("getReferenceCadastrale(): db->limitquery(\"".
3931 str_replace(",",", ",$sql)."\", 0, 1);", VERBOSE_MODE);
3932 // Si une erreur survient on die
3933 if (database::isError($res, true)) {
3934 // Appel de la methode de recuperation des erreurs
3935 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), 'demande');
3936 }
3937 // retourne la nature du dossier
3938 while ($row =& $res->fetchRow()) {
3939 return $row[0];
3940 }
3941 // la nature n'etait pas trouve, ce qui ne devrait pas se passer
3942 return NULL;
3943 }
3944
3945 /**
3946 * Supprime puis recrée tous les liens entre dossier et demandeurs
3947 **/
3948 function insertLinkDossierDemandeur($db, $DEBUG) {
3949 // Suppression des anciens demandeurs
3950 $this->deleteLinkDossierDemandeur($db, $DEBUG);
3951 $types_demandeur = array(
3952 "petitionnaire_principal",
3953 "delegataire",
3954 "petitionnaire",
3955 "plaignant_principal",
3956 "plaignant",
3957 "contrevenant_principal",
3958 "contrevenant",
3959 "requerant_principal",
3960 "requerant",
3961 "avocat_principal",
3962 "avocat",
3963 "bailleur_principal",
3964 "bailleur",
3965 );
3966 foreach ($types_demandeur as $type) {
3967 // Comparaison des autres demandeurs
3968 if(isset($this->postedIdDemandeur[$type]) === true) {
3969 // Ajout des nouveaux liens
3970 foreach ($this->postedIdDemandeur[$type] as $demandeur) {
3971 //
3972 $principal = false;
3973 if (strpos($type, '_principal') !== false) {
3974 $principal = true;
3975 }
3976 if ($this->addLinkDossierDemandeur($demandeur, $principal, $db, $DEBUG) === false) {
3977 //
3978 return false;
3979 }
3980 }
3981 }
3982 }
3983 }
3984
3985
3986 /**
3987 * Fonction permettant d'ajouter un lien
3988 * entre la table dossier et demandeur
3989 **/
3990 function addLinkDossierDemandeur($id, $principal, $db, $DEBUG) {
3991 $lienAjout = $this->f->get_inst__om_dbform(array(
3992 "obj" => "lien_dossier_demandeur",
3993 "idx" => "]",
3994 ));
3995 $lien = array('lien_dossier_demandeur' => "",
3996 'petitionnaire_principal' => (($principal)?"t":"f"),
3997 'dossier' => $this->valF['dossier'],
3998 'demandeur' => $id);
3999 $lienAjout->ajouter($lien, $db, $DEBUG);
4000 $lienAjout->__destruct();
4001 }
4002
4003 /**
4004 * Fonction permettant de supprimer un lien
4005 * entre la table demande et demandeur
4006 **/
4007 function deleteLinkDossierDemandeur($db, $DEBUG) {
4008 // Suppression
4009 $sql = "DELETE FROM ".DB_PREFIXE."lien_dossier_demandeur ".
4010 "WHERE dossier='".$this->valF['dossier']."'";
4011 // Execution de la requete de suppression de l'objet
4012 $res = $db->query($sql);
4013 // Logger
4014 $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
4015 if ( database::isError($res)){
4016 die();
4017 }
4018
4019 }
4020
4021 /**
4022 * Methode de recupération des valeurs postées
4023 **/
4024 function getPostedValues() {
4025 // Récupération des demandeurs dans POST
4026 $types_demandeur = array(
4027 "petitionnaire_principal",
4028 "delegataire",
4029 "petitionnaire",
4030 "plaignant_principal",
4031 "plaignant",
4032 "contrevenant_principal",
4033 "contrevenant",
4034 "requerant_principal",
4035 "requerant",
4036 "avocat_principal",
4037 "avocat",
4038 "bailleur_principal",
4039 "bailleur",
4040 );
4041 foreach ($types_demandeur as $type) {
4042 if($this->f->get_submitted_post_value($type) !== null AND
4043 $this->f->get_submitted_post_value($type) != '') {
4044 $this->postedIdDemandeur[$type] = $this->f->get_submitted_post_value($type);
4045 }
4046 }
4047 }
4048
4049 /**
4050 * Méthode permettant de récupérer les id des demandeurs liés à la table
4051 * liée passée en paramètre
4052 *
4053 * @param string $from Table liée : "demande", "dossier", dossier_autorisation"
4054 * @param string $id Identifiant (clé primaire de la table liée en question)
4055 */
4056 function listeDemandeur($from, $id) {
4057
4058 // Si la donnée membre a déjà été remplie par un précédent appel à cette méthode,
4059 // on sort.
4060 if ($this->valIdDemandeur["petitionnaire_principal"] !== array() or
4061 $this->valIdDemandeur["delegataire"] !== array() or
4062 $this->valIdDemandeur["petitionnaire"] !== array() or
4063 $this->valIdDemandeur["plaignant_principal"] !== array() or
4064 $this->valIdDemandeur["plaignant"] !== array() or
4065 $this->valIdDemandeur["contrevenant_principal"] !== array() or
4066 $this->valIdDemandeur["contrevenant"] !== array() or
4067 $this->valIdDemandeur["requerant_principal"] !== array() or
4068 $this->valIdDemandeur["requerant"] !== array() or
4069 $this->valIdDemandeur["avocat_principal"] !== array() or
4070 $this->valIdDemandeur["avocat"] !== array() or
4071 $this->valIdDemandeur["bailleur_principal"] !== array() or
4072 $this->valIdDemandeur["bailleur"] !== array()) {
4073 return;
4074 }
4075
4076 // Récupération des demandeurs de la base
4077 $sql = "SELECT demandeur.demandeur,
4078 demandeur.type_demandeur,
4079 lien_".$from."_demandeur.petitionnaire_principal
4080 FROM ".DB_PREFIXE."lien_".$from."_demandeur
4081 INNER JOIN ".DB_PREFIXE."demandeur
4082 ON demandeur.demandeur=lien_".$from."_demandeur.demandeur
4083 WHERE ".$from." = '".$id."'";
4084 $res = $this->f->db->query($sql);
4085 $this->f->addToLog("listeDemandeur(): db->query(\"".$sql."\")", VERBOSE_MODE);
4086 $this->f->isDatabaseError($res);
4087
4088 // Stockage du résultat dans un tableau
4089 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
4090
4091 $demandeur_type = $row['type_demandeur'];
4092 if ($row['petitionnaire_principal'] == 't'){
4093 $demandeur_type .= "_principal";
4094 }
4095 $this->valIdDemandeur[$demandeur_type][] = $row['demandeur'];
4096 }
4097 }
4098
4099 /**
4100 * Récupère la liste des contraintes d'un dossier.
4101 *
4102 * @param string $dossier Identifiant du dossier.
4103 * @param boolean $for_di_view Liste avec condition affichage DI.
4104 *
4105 * @return object Résultat de la requête
4106 */
4107 function getListContrainte($dossier, $for_di_view = true) {
4108
4109 // Select
4110 $select = "SELECT dossier_contrainte.dossier_contrainte as dossier_contrainte_id,
4111 dossier_contrainte.texte_complete as dossier_contrainte_texte,
4112 dossier_contrainte.reference as dossier_contrainte_reference,
4113 contrainte.libelle as contrainte_libelle,
4114 contrainte.nature as contrainte_nature,
4115 contrainte.texte as contrainte_texte,
4116 contrainte.reference as contrainte_reference,
4117 lower(contrainte.groupe) as contrainte_groupe,
4118 lower(contrainte.sousgroupe) as contrainte_sousgroupe ";
4119
4120 // From
4121 $from = " FROM ".DB_PREFIXE."contrainte
4122 LEFT JOIN ".DB_PREFIXE."dossier_contrainte
4123 ON dossier_contrainte.contrainte = contrainte.contrainte ";
4124
4125 // Where
4126 $where = " WHERE dossier_contrainte.dossier = '".$dossier."' ";
4127
4128 // Si les contraintes sont listées pour être affichées dans le DI
4129 if ($for_di_view === true) {
4130 // Si le paramètre "option_contrainte_di" est défini
4131 if ($this->f->getParameter('option_contrainte_di') != 'aucun') {
4132 // Ajoute la condition
4133 $where .= $this->f->traitement_condition_contrainte(
4134 $this->f->getParameter('option_contrainte_di'));
4135 }
4136 }
4137
4138 // Tri
4139 $tri = " ORDER BY contrainte_groupe DESC, contrainte_sousgroupe,
4140 contrainte.no_ordre, contrainte.libelle ";
4141
4142 // Requête SQL
4143 $sql = $select.$from.$where.$tri;
4144 $res = $this->f->db->query($sql);
4145 $this->f->addToLog("listContrainte(): db->query(\"".$sql."\");", VERBOSE_MODE);
4146 $this->f->isDatabaseError($res);
4147
4148 // Retourne le résultat
4149 return $res;
4150 }
4151
4152 /**
4153 * Ajout de la liste des contraintes et des demandeurs
4154 */
4155 function formSpecificContent($maj) {
4156
4157 /**
4158 * Liste des contraintes
4159 */
4160 //
4161 $listContrainte = $this->getListContrainte($this->getVal('dossier'));
4162
4163 // Si le dossier possède des contraintes
4164 if ($listContrainte->numRows() != 0) {
4165
4166 // Affiche du fieldset
4167 printf("<div id=\"liste_contrainte\" class=\"demande_hidden_bloc\">");
4168 printf("<fieldset class=\"cadre ui-corner-all ui-widget-content col_12 startClosed\">");
4169 printf(" <legend class=\"ui-corner-all ui-widget-content ui-state-active\"
4170 id =\"fieldset_contraintes_liees\">"
4171 ._("dossier_contrainte")."</legend>");
4172 printf("<div class=\"fieldsetContent\" style=\"display: none;\">");
4173
4174 // Entête pour le groupe
4175 $groupeHeader = "
4176 <div class='dossier_contrainte_groupe'>
4177 <div class='dossier_contrainte_groupe_header'>
4178 <span class='name'>
4179 %s
4180 </span>
4181 </div>
4182 ";
4183
4184 // Entête pour le sous-groupe
4185 $sousgroupeHeader = "
4186 <div class='dossier_contrainte_sousgroupe'>
4187 <div class='dossier_contrainte_sousgroupe_header'>
4188 <span class='name'>
4189 %s
4190 </span>
4191 </div>
4192 ";
4193
4194 // Titres des colonnes
4195 $tableHeader = "
4196 <thead>
4197 <tr class='ui-tabs-nav ui-accordion ui-state-default tab-title'>
4198 <th class='title col-0 firstcol contrainte_th_texte_complete'>
4199 <span class='name'>
4200 "._('texte_complete')."
4201 </span>
4202 </th>
4203 <th class='title col-1 contrainte_th_reference'>
4204 <span class='name'>
4205 "._('reference')."
4206 </span>
4207 </th>
4208 <th class='title col-2 contrainte_th_nature'>
4209 <span class='name'>
4210 "._('nature')."
4211 </span>
4212 </th>
4213 </tr>
4214 </thead>
4215 ";
4216
4217 // Ligne de données
4218 $line = "
4219 <tr class='tab-data %s'>
4220 <td class='col-0 firstcol contrainte_th_texte_complete'>
4221 %s
4222 </td>
4223 <td class='col-1 contrainte_th_reference'>
4224 %s
4225 </td>
4226 <td class='col-2 contrainte_th_nature'>
4227 %s
4228 </td>
4229 ";
4230
4231 // Sauvegarde des données pour les comparer
4232 $lastRow = array();
4233 $lastRow['contrainte_groupe'] = 'empty';
4234 $lastRow['contrainte_sousgroupe'] = 'empty';
4235
4236 // Tant qu'il y a des résultats
4237 while($row = &$listContrainte->fetchRow(DB_FETCHMODE_ASSOC)) {
4238 // Si l'identifiant du groupe de la contrainte présente et
4239 // celle d'avant est différent
4240 if ($row['contrainte_groupe'] != $lastRow['contrainte_groupe']) {
4241
4242 // Si l'identifiant du groupe d'avant est vide
4243 if ($lastRow['contrainte_groupe'] != 'empty') {
4244 // Ferme le tableau
4245 printf("</table>");
4246 // Ferme le div
4247 printf("</div>");
4248 // Ferme le div
4249 printf("</div>");
4250 }
4251
4252 // Affiche le header du groupe
4253 printf($groupeHeader, $row['contrainte_groupe']);
4254 }
4255
4256 // Si l'identifiant du sous-groupe de la contrainte présente et
4257 // celle d'avant est différent
4258 // Ou qu'ils soient identique mais n'appartiennent pas au même groupe
4259 if ($row['contrainte_sousgroupe'] != $lastRow['contrainte_sousgroupe']
4260 || ($row['contrainte_sousgroupe'] == $lastRow['contrainte_sousgroupe']
4261 && $row['contrainte_groupe'] != $lastRow['contrainte_groupe'])) {
4262
4263 //
4264 if($row['contrainte_groupe'] == $lastRow['contrainte_groupe']) {
4265 // Si l'identifiant de la sous-groupe d'avant est vide
4266 if ($lastRow['contrainte_sousgroupe'] != 'empty') {
4267 // Ferme le tableau
4268 printf("</table>");
4269 // Ferme le div
4270 printf("</div>");
4271 }
4272 }
4273
4274 // Affiche le header du sous-groupe
4275 printf($sousgroupeHeader, $row['contrainte_sousgroupe']);
4276
4277 // Ouvre le tableau
4278 printf("<table id='sousgroupe_".$row['contrainte_sousgroupe']."' class='tab-tab dossier_contrainte_view'>");
4279
4280 // Affiche le header des données
4281 printf($tableHeader);
4282
4283 // Définis le style des lignes
4284 $style = 'odd';
4285 }
4286
4287 // Si toujours dans la même groupe et même sous-groupe,
4288 // on change le style de la ligne
4289 if ($row['contrainte_groupe'] == $lastRow['contrainte_groupe']
4290 && $row['contrainte_sousgroupe'] == $lastRow['contrainte_sousgroupe']) {
4291 // Définis le style
4292 $style = ($style=='even')?'odd':'even';
4293 }
4294
4295 // Affiche "Oui" ou "Non" pour le bouléen
4296 if ($row['dossier_contrainte_reference'] == 1
4297 || $row['dossier_contrainte_reference'] == "t"
4298 || $row['dossier_contrainte_reference'] == "Oui") {
4299 //
4300 $contrainte_reference = "Oui";
4301 } else {
4302 //
4303 $contrainte_reference = "Non";
4304 }
4305
4306 // Affiche les données
4307 printf($line, $style,
4308 $row['dossier_contrainte_texte'],
4309 $contrainte_reference,
4310 $row['contrainte_nature']
4311 );
4312
4313 // Sauvegarde les données
4314 $lastRow['contrainte_groupe'] = $row['contrainte_groupe'];
4315 $lastRow['contrainte_sousgroupe'] = $row['contrainte_sousgroupe'];
4316
4317 }
4318 // Ferme le tableau
4319 printf("</table>");
4320 // Ferme le sous-groupe
4321 printf("</div>");
4322 // Ferme le groupe
4323 printf("</div>");
4324
4325 printf("</div>");
4326
4327 printf("<div class=\"visualClear\"></div>");
4328 // Ferme le fieldset content
4329 printf("</div>");
4330 printf("</fieldset>");
4331 }
4332 /**
4333 * Fin Liste des contraintes
4334 */
4335
4336 /**
4337 * Liste des demandeurs
4338 */
4339 // Tableau des demandeurs selon le contexte
4340 $listeDemandeur = $this->valIdDemandeur;
4341 /**
4342 * Gestion du bloc des demandeurs
4343 */
4344 // Si le mode est (modification ou suppression ou consultation) ET que
4345 // le formulaire n'est pas correct (c'est-à-dire que le formulaire est
4346 // actif)
4347 if ($this->correct !== true AND
4348 $this->getParameter('validation') == 0 AND
4349 $this->getParameter("maj") != 0) {
4350 // Alors on récupère les demandeurs dans la table lien pour
4351 // affectation des résultats dans $this->valIdDemandeur
4352 $this->listeDemandeur("dossier", $this->getval($this->clePrimaire));
4353 $listeDemandeur = $this->valIdDemandeur;
4354 }
4355
4356 // Récupération des valeurs postées
4357 if ($this->getParameter('validation') != 0) {
4358 $listeDemandeur = $this->postedIdDemandeur;
4359 }
4360
4361 // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
4362 // correct (c'est-à-dire que le formulaire est actif)
4363 if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
4364 // Alors on positionne le marqueur linkable a true qui permet
4365 // d'afficher ou non les actions de gestion des demandeurs
4366 $linkable = true;
4367 } else {
4368 // Sinon on positionne le marqueur linkable a false qui permet
4369 // d'afficher ou non les actions de gestion des demandeurs
4370 $linkable = false;
4371 }
4372 $affichage_form = $this->get_type_affichage_formulaire();
4373 // Pour les dossiers contentieux, il faut un droit spécifique pour visualiser le
4374 // fieldset "Demandeurs"
4375 if (($affichage_form === 'ADS' || $affichage_form === 'DPC')
4376 OR ($affichage_form === 'CTX RE' AND $this->f->isAccredited('dossier_contentieux_recours_afficher_demandeurs') === true)
4377 OR ($affichage_form === 'CTX IN' AND $this->f->isAccredited('dossier_contentieux_infractions_afficher_demandeurs') === true)) {
4378
4379 // Conteneur de la listes des demandeurs
4380 echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">";
4381 echo "<fieldset id=\"fieldset-form-dossier_instruction-demandeur\" class=\"cadre ui-corner-all ui-widget-content startClosed\">";
4382 echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">"
4383 ._("Demandeurs")."</legend>";
4384 echo "<div class=\"fieldsetContent\" style=\"display: none;\">";
4385
4386
4387 // Pour les DI avec DA visible, dans tous les modes excepté en ajout et si l'option d'accès au
4388 // portail citoyen est activée
4389 $inst_da = $this->get_inst_dossier_autorisation();
4390 if ($this->getParameter("maj") != 0
4391 && $this->f->is_option_citizen_access_portal_enabled() === true
4392 && $inst_da->is_dossier_autorisation_visible() === true) {
4393 // Instance du dossier d'autorisation
4394 //
4395 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'));
4396 }
4397 // Sélection des demandeur à afficher en fonction du paramétrage du type
4398 // du dossier d'autorisation.
4399 switch ($affichage_form) {
4400 case 'ADS':
4401 $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
4402 break;
4403 case 'CTX RE':
4404 $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
4405 $this->display_demandeur_requerant_avocat($listeDemandeur);
4406 break;
4407 case 'CTX IN':
4408 $this->display_demandeur_plaignant_contrevenant($listeDemandeur);
4409 break;
4410 case 'DPC':
4411 $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
4412 $this->display_demandeur_petitionnaire_delegataire_bailleur($listeDemandeur);
4413 break;
4414 }
4415
4416 }
4417
4418 echo "</fieldset>";
4419 echo "</div>";
4420 /**
4421 * Fin liste des demandeurs
4422 */
4423
4424 /**
4425 * Interface avec le référentiel ERP.
4426 *
4427 * On affiche le message uniquement si le dossier est connecté.
4428 */
4429 if ($this->getParameter('maj') == 3 && $this->is_connected_to_referentiel_erp() === true) {
4430 //
4431 printf(
4432 '<div class="col_12">
4433 Ce dossier est connecté au référentiel ERP.
4434 </div>'
4435 );
4436 }
4437
4438 }
4439
4440 /**
4441 * Affiche le bloc d'affichage des demandeurs pour dossiers ADS avec actions.
4442 *
4443 * @param array $listeDemandeur Liste des demandeurs.
4444 */
4445 function display_demandeur_petitionnaire_delegataire($listeDemandeur) {
4446
4447 // Affichage du bloc pétitionnaire principal / délégataire
4448 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4449 echo "<div id=\"petitionnaire_principal_delegataire\">";
4450 // Affichage de la synthèse du pétitionnaire principal
4451 $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire_principal");
4452 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4453 echo "<div id=\"delegataire\">";
4454 // Affichage de la synthèse du délégataire
4455 $this->displaySyntheseDemandeur($listeDemandeur, "delegataire");
4456 echo "</div>";
4457 echo "<div class=\"both\"></div>";
4458 echo "</div>";
4459 // Bloc des pétitionnaires secondaires
4460 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4461 echo "<div id=\"listePetitionnaires\">";
4462 $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire");
4463 echo "</div>";
4464 }
4465
4466 /**
4467 * Affiche le bloc d'affichage des demandeurs pour dossiers CTX recours
4468 * avec actions.
4469 *
4470 * @param array $listeDemandeur Liste des demandeurs.
4471 */
4472 function display_demandeur_plaignant_contrevenant($listeDemandeur) {
4473
4474 echo "<div id=\"plaignant_contrevenant\">";
4475 // Affichage du bloc contrevenant
4476 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4477 echo "<div id=\"listeContrevenants\" class=\"col_12\">";
4478 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4479 echo "<div id=\"contrevenant_principal\">";
4480 // Affichage de la synthèse
4481 $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant_principal");
4482 echo "</div>";
4483 echo "<div id=\"listeAutresContrevenants\">";
4484 // Affichage de la synthèse
4485 $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant");
4486 echo "</div>";
4487 echo "</div>";
4488 // Affichage du bloc plaignant
4489 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4490 echo "<div id=\"listePlaignants\" class=\"col_12\">";
4491 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4492 echo "<div id=\"plaignant_principal\">";
4493 // Affichage de la synthèse
4494 $this->displaySyntheseDemandeur($listeDemandeur, "plaignant_principal");
4495 echo "</div>";
4496 echo "<div id=\"listeAutresPlaignants\">";
4497 $this->displaySyntheseDemandeur($listeDemandeur, "plaignant");
4498 echo "</div>";
4499 echo "</div>";
4500 echo "</div>";
4501
4502 }
4503
4504 /**
4505 * Affiche le bloc d'affichage des demandeurs pour dossiers CTX infraction
4506 * avec actions.
4507 *
4508 * @param array $listeDemandeur Liste des demandeurs.
4509 */
4510 function display_demandeur_requerant_avocat($listeDemandeur) {
4511 echo "<div id=\"requerant_avocat\">";
4512 // Affichage du bloc requérant
4513 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4514 echo "<div id=\"listeRequerants\" class=\"col_12\">";
4515 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4516 echo "<div id=\"requerant_principal\">";
4517 // Affichage de la synthèse
4518 $this->displaySyntheseDemandeur($listeDemandeur, "requerant_principal");
4519 echo "</div>";
4520 echo "<div id=\"listeAutresRequerants\">";
4521 $this->displaySyntheseDemandeur($listeDemandeur, "requerant");
4522 echo "</div>";
4523 echo "</div>";
4524 // Affichage du bloc avocat
4525 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4526 echo "<div id=\"listeAvocat\" class=\"col_12\">";
4527 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4528 echo "<div id=\"avocat_principal\">";
4529 $this->displaySyntheseDemandeur($listeDemandeur, "avocat_principal");
4530 echo "</div>";
4531 echo "<div id=\"listeAutresAvocats\">";
4532 $this->displaySyntheseDemandeur($listeDemandeur, "avocat");
4533 echo "</div>";
4534 echo "</div>";
4535 echo "</div>";
4536 echo "</fieldset>";
4537 // Champ flag permettant de récupérer la valeur de l'option sig pour
4538 // l'utiliser en javascript, notamment lors du chargement de l'interface
4539 // pour les références cadastrales
4540 // XXX Si un widget pour les références cadastrales existait, il n'y
4541 // aurait pas besoin de faire cela
4542 echo "<input id='option_sig' type='hidden' value='".$this->f->getParameter("option_sig")."' name='option_sig'>";
4543 echo "</div>";
4544 }
4545
4546
4547 /**
4548 * Affiche le bloc d'affichage des demandeurs pour dossiers DPC avec actions.
4549 *
4550 * @param array $listeDemandeur Liste des demandeurs.
4551 */
4552 function display_demandeur_petitionnaire_delegataire_bailleur($listeDemandeur) {
4553
4554 // Affichage du bloc pétitionnaire principal / délégataire / bailleur
4555 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4556 echo "<div id=\"petitionnaire_principal_delegataire_bailleur\">";
4557 // Doit être utilisé avec la div petitionnaire_principal_delegataire
4558 echo "<div id=\"listeBailleurs\" class=\"col_12\">";
4559 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4560 echo "<div id=\"bailleur_principal\">";
4561 // Affichage de la synthèse
4562 $this->displaySyntheseDemandeur($listeDemandeur, "bailleur_principal");
4563 echo "</div>";
4564 echo "<div id=\"listeAutresBailleurs\">";
4565 $this->displaySyntheseDemandeur($listeDemandeur, "bailleur");
4566 echo "</div>";
4567 echo "</div>";
4568 echo "</div>";
4569 }
4570
4571
4572 function displaySyntheseDemandeur($listeDemandeur, $type) {
4573 // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
4574 // correct (c'est-à-dire que le formulaire est actif)
4575 if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
4576 // Alors on positionne le marqueur linkable a true qui permet
4577 // d'afficher ou non les actions de gestion des demandeurs
4578 $linkable = true;
4579 } else {
4580 // Sinon on positionne le marqueur linkable a false qui permet
4581 // d'afficher ou non les actions de gestion des demandeurs
4582 $linkable = false;
4583 }
4584 // Récupération du type de demandeur pour l'affichage
4585 switch ($type) {
4586 case 'petitionnaire_principal':
4587 $legend = _("Petitionnaire principal");
4588 break;
4589
4590 case 'delegataire':
4591 $legend = _("Autre correspondant");
4592 break;
4593
4594 case 'petitionnaire':
4595 $legend = _("Petitionnaire");
4596 break;
4597
4598 case 'contrevenant_principal':
4599 $legend = _("Contrevenant principal");
4600 break;
4601
4602 case 'contrevenant':
4603 $legend = _("Autre contrevenant");
4604 break;
4605
4606 case 'plaignant_principal':
4607 $legend = _("Plaignant principal");
4608 break;
4609
4610 case 'plaignant':
4611 $legend = _("Autre plaignant");
4612 break;
4613
4614 case 'requerant_principal':
4615 $legend = _("Requérant principal");
4616 break;
4617
4618 case 'requerant':
4619 $legend = _("Autre requérant");
4620 break;
4621
4622 case 'avocat_principal':
4623 $legend = _("Avocat principal");
4624 break;
4625
4626 case 'avocat':
4627 $legend = _("Autre avocat");
4628 break;
4629
4630 case 'bailleur_principal':
4631 $legend = _("Bailleur principal");
4632 break;
4633
4634 case 'bailleur':
4635 $legend = _("Bailleur");
4636 break;
4637 }
4638 foreach ($listeDemandeur[$type] as $demandeur_id) {
4639 $obj = str_replace('_principal', '', $type);
4640 $demandeur = $this->f->get_inst__om_dbform(array(
4641 "obj" => $obj,
4642 "idx" => $demandeur_id,
4643 ));
4644 $demandeur -> afficherSynthese($type, $linkable);
4645 $demandeur -> __destruct();
4646 }
4647 // Si en édition de formulaire
4648 if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
4649 // Bouton d'ajout du avocat
4650 // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4651 echo "<a id=\"add_".$type."\"
4652 class=\"om-form-button add-16\">".
4653 $legend.
4654 "</a>";
4655 }
4656 }
4657 /**
4658 * Retourne le statut du dossier
4659 * @return string Le statut du dossier d'instruction
4660 */
4661 function getStatut(){
4662
4663 $statut = '';
4664
4665 $etat = $this->getVal("etat");
4666 //Si l'état du dossier d'instruction n'est pas vide
4667 if ( $etat != '' ){
4668
4669 $sql = "SELECT statut
4670 FROM ".DB_PREFIXE."etat
4671 WHERE libelle ='".$etat."'";
4672 $statut = $this->db->getOne($sql);
4673 $this->f->addToLog("getStatut() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
4674 if ( database::isError($statut, true)){
4675 die();
4676 }
4677 }
4678 return $statut;
4679 }
4680
4681 /**
4682 * Retourne le dernier événement lié au dossier instancié
4683 *
4684 * @return [string] ID du dernier événement
4685 */
4686 function get_dernier_evenement() {
4687 $sql = "SELECT max(instruction)
4688 FROM ".DB_PREFIXE."instruction
4689 WHERE dossier = '".$this->getVal($this->clePrimaire)."'";
4690 $id_dernier_evenement = $this->db->getOne($sql);
4691 $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
4692 $this->f->isDatabaseError($id_dernier_evenement);
4693 return $id_dernier_evenement;
4694 }
4695
4696 /**
4697 * Retourne l'identifiant du rapport d'instruction lié du dossier
4698 * @return string L'identifiant du rapport d'instruction lié du dossier
4699 */
4700 function getRapportInstruction() {
4701
4702 $rapport_instruction = null;
4703
4704 $sql = "SELECT rapport_instruction
4705 FROM ".DB_PREFIXE."rapport_instruction
4706 WHERE dossier_instruction ='".$this->getVal($this->clePrimaire)."'";
4707 $rapport_instruction = $this->db->getOne($sql);
4708 $this->f->addToLog(__METHOD__."() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
4709 $this->f->isDatabaseError($rapport_instruction);
4710
4711 return $rapport_instruction;
4712 }
4713
4714 /**
4715 * Retourne l'identifiant des données techniques liées du dossier
4716 * @return string L'identifiant des données techniques liées du dossier
4717 */
4718 function getDonneesTechniques() {
4719
4720 $donnees_techniques = '';
4721
4722 $sql = "SELECT donnees_techniques
4723 FROM ".DB_PREFIXE."donnees_techniques
4724 WHERE dossier_instruction ='".$this->getVal($this->clePrimaire)."'";
4725 $donnees_techniques = $this->db->getOne($sql);
4726 $this->f->addToLog("getStatut() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
4727 if ( database::isError($donnees_techniques)){
4728 die();
4729 }
4730
4731 return $donnees_techniques;
4732 }
4733
4734 /**
4735 * Surcharge du bouton retour afin de retourner sur la recherche de dossiers
4736 * d'instruction existant
4737 */
4738 function retour($premier = 0, $recherche = "", $tricol = "") {
4739
4740 echo "\n<a class=\"retour\" ";
4741 echo "href=\"";
4742 //
4743 if($this->getParameter("idx_dossier") != "") {
4744 echo OM_ROUTE_TAB;
4745 echo "&obj=recherche_dossier";
4746
4747 } else {
4748 if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
4749 echo OM_ROUTE_FORM;
4750 } else {
4751 echo OM_ROUTE_TAB;
4752 }
4753 echo "&obj=".$this->get_absolute_class_name();
4754 if ($this->f->get_submitted_get_value('retourformulaire2') !== null && $this->f->get_submitted_get_value('retourformulaire2') != '') {
4755 echo "&retourformulaire=".$this->f->get_submitted_get_value('retourformulaire2');
4756 }
4757 if($this->getParameter("retour")=="form") {
4758 $idx = $this->getParameter("idx");
4759 echo "&amp;idx=".$idx;
4760 echo "&amp;action=3";
4761 }
4762 }
4763 echo "&amp;premier=".$this->getParameter("premier");
4764 echo "&amp;tricol=".$this->getParameter("tricol");
4765 echo "&amp;advs_id=".$this->getParameter("advs_id");
4766 echo "&amp;valide=".$this->getParameter("valide");
4767 //
4768 echo "\"";
4769 echo ">";
4770 //
4771 echo _("Retour");
4772 //
4773 echo "</a>\n";
4774
4775 }
4776
4777 /**
4778 * Permet de modifier le fil d'Ariane
4779 * @param string $ent Fil d'Ariane
4780 * @param array $val Valeurs de l'objet
4781 * @param intger $maj Mode du formulaire
4782 */
4783 function getFormTitle($ent) {
4784
4785 // Fil d'Ariane
4786 $type_aff_form = $this->get_type_affichage_formulaire();
4787 switch ($type_aff_form) {
4788 case 'DPC':
4789 case 'ADS':
4790 $ent = _("instruction")." -> "._("dossiers d'instruction");
4791 break;
4792 case 'CTX IN':
4793 $ent = _("contentieux")." -> "._("infraction");
4794 break;
4795 case 'CTX RE':
4796 $ent = _("contentieux")." -> "._("recours");
4797 break;
4798 }
4799
4800 // Si différent de l'ajout
4801 if($this->getParameter("maj") != 0) {
4802 // Si le champ dossier_libelle existe
4803 if (trim($this->getVal("dossier_libelle")) != '') {
4804 $ent .= " -> ".strtoupper($this->getVal("dossier_libelle"));
4805 }
4806 // Si contexte ADS
4807 if ($type_aff_form ==='ADS'
4808 && trim($this->getVal("dossier")) != '') {
4809 $demandeur = $this->get_demandeur($this->getVal("dossier"));
4810 // Si le demandeur existe
4811 if (isset($demandeur) && trim($demandeur) != '') {
4812 $ent .= " ".mb_strtoupper($demandeur, "UTF-8");
4813 }
4814 }
4815 }
4816
4817 // Change le fil d'Ariane pour l'interface de géolocalisation automatique des DI
4818 if ($this->getParameter("maj") == 126) {
4819 $ent = _("administration")." -> "._("options avancées")." -> "._("Géolocalisation des dossiers");
4820 }
4821
4822 // Change le fil d'Ariane
4823 return $ent;
4824 }
4825
4826 /**
4827 * Récupère le demandeur du dossier
4828 * @return string Identifiant du dossier
4829 */
4830 private function get_demandeur($dossier) {
4831
4832 // init de la variable de retour
4833 $demandeur = '';
4834
4835 // Requête SQL
4836 $sql = "SELECT
4837 CASE WHEN demandeur.qualite='particulier'
4838 THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
4839 ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
4840 END as demandeur
4841 FROM ".DB_PREFIXE."dossier
4842 LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur
4843 ON lien_dossier_demandeur.dossier=dossier.dossier
4844 AND lien_dossier_demandeur.petitionnaire_principal IS TRUE
4845 LEFT JOIN ".DB_PREFIXE."demandeur
4846 ON lien_dossier_demandeur.demandeur=demandeur.demandeur
4847 WHERE dossier.dossier ='".$dossier."'";
4848 $demandeur = $this->db->getOne($sql);
4849 $this->f->addToLog("get_demandeur() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
4850 database::isError($demandeur);
4851
4852 // Résultat retourné
4853 return $demandeur;
4854 }
4855
4856 /**
4857 * Récupère la durée de validité
4858 * @param string $dossier_autorisation Identifiant dossier d'autorisation
4859 * @return intger Durée de validité
4860 */
4861 function get_duree_validite($dossier_autorisation) {
4862
4863 // init de la variable de retour
4864 $duree_validite = "";
4865
4866 // Récupère le numéro de version
4867 $numeroVersion = $this->getNumeroVersion($dossier_autorisation);
4868
4869 // Si c'est l'ajout du dossier initial
4870 if ($numeroVersion < 0) {
4871
4872 // Récupération de la duree de validite depuis la table
4873 // "dossier_autorisation_type_detaille"
4874 $sql = "SELECT duree_validite_parametrage
4875 FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
4876 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
4877 ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
4878 WHERE dossier_autorisation.dossier_autorisation='".$dossier_autorisation."'";
4879 $duree_validite = $this->db->getOne($sql);
4880 $this->f->addToLog("get_duree_validite(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
4881 database::isError($duree_validite);
4882
4883 } else {
4884
4885 // Récupération de la duree de validite depuis le P0
4886 $sql = "SELECT duree_validite
4887 FROM ".DB_PREFIXE."dossier
4888 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
4889 ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
4890 WHERE dossier_autorisation.dossier_autorisation='".$dossier_autorisation."'
4891 AND dossier.version = 0";
4892 $duree_validite = $this->db->getOne($sql);
4893 $this->f->addToLog("get_duree_validite(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
4894 database::isError($duree_validite);
4895 }
4896
4897 // retourne le résultat
4898 return $duree_validite;
4899
4900 }
4901
4902 /**
4903 * Ajoute les parcelles du dossier passé en paramètre et met à jour le
4904 * quartier du dossier.
4905 * @param string $dossier Identifiant du dossier
4906 * @param string $terrain_references_cadastrales Références cadastrales du
4907 * dossier
4908 */
4909 function ajouter_dossier_parcelle($dossier, $terrain_references_cadastrales) {
4910
4911 // Parse les parcelles
4912 $list_parcelles = $this->f->parseParcelles($terrain_references_cadastrales, $this->getVal('om_collectivite'));
4913
4914 // A chaque parcelle une nouvelle ligne est créée dans la table
4915 // dossier_parcelle
4916 foreach ($list_parcelles as $parcelle) {
4917
4918 // Instance de la classe dossier_parcelle
4919 $dossier_parcelle = $this->f->get_inst__om_dbform(array(
4920 "obj" => "dossier_parcelle",
4921 "idx" => "]",
4922 ));
4923
4924 // Valeurs à sauvegarder
4925 $value = array(
4926 'dossier_parcelle' => '',
4927 'dossier' => $dossier,
4928 'parcelle' => '',
4929 'libelle' => $parcelle['quartier']
4930 .$parcelle['section']
4931 .$parcelle['parcelle']
4932 );
4933
4934 // Ajout de la ligne
4935 $dossier_parcelle->ajouter($value, $this->db, DEBUG);
4936 }
4937
4938 // Si la liste des parcelles n'est pas vide
4939 if (count($list_parcelles) > 0) {
4940
4941 // Récupère le code impôt de la première référence cadastrale
4942 $quartier_code_impots = $list_parcelles[0]['quartier'];
4943 // Récupère l'identifiant du quartier
4944 $quartier = $this->get_quartier_by_code_impot($quartier_code_impots);
4945
4946 // Ajoute le quartier au dossier
4947 $this->modifier_quartier_dossier($dossier, $quartier);
4948 }
4949 }
4950
4951 /**
4952 * Supprime les parcelles du dossier passé en paramètre et met à jour le
4953 * quartier du dossier.
4954 * @param string $dossier Identifiant du dossier
4955 */
4956 function supprimer_dossier_parcelle($dossier) {
4957
4958 // Suppression des parcelles du dossier
4959 $sql = "DELETE FROM ".DB_PREFIXE."dossier_parcelle
4960 WHERE dossier='".$dossier."'";
4961 $res = $this->db->query($sql);
4962 $this->addToLog("supprimer_dossier_parcelle() db->query(\"".$sql."\");",
4963 VERBOSE_MODE);
4964 database::isError($res);
4965
4966 // Supprime le quartier dans dossier
4967 $this->modifier_quartier_dossier($dossier);
4968 }
4969
4970 /**
4971 * Modifie le quartier au dossier.
4972 * @param string $dossier Numéro du dossier
4973 * @param integer $quartier Identifiant du quartier
4974 */
4975 function modifier_quartier_dossier($dossier, $quartier = null) {
4976
4977 // Valeurs à mettre à jour
4978 $valF = array();
4979 $valF['quartier'] = $quartier;
4980
4981 // Met à jour le quartier du dossier
4982 $cle = " dossier='".$dossier."'";
4983 $res = $this->db->autoExecute(
4984 DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
4985 $this->addToLog("ajouter_quartier_dossier(): db->autoexecute(\""
4986 .DB_PREFIXE."dossier\", ".print_r($valF, true)
4987 .", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
4988 $this->f->isDatabaseError($res);
4989 }
4990
4991 /**
4992 * Récupère le quartier par rapport au code impôts.
4993 * @param string $code_impots Code impôts du quartier
4994 *
4995 * @return integer Identifiant du quartier
4996 */
4997 function get_quartier_by_code_impot($code_impots) {
4998
4999 // Initialisation résultat
5000 $quartier = null;
5001
5002 // Si la condition n'est pas vide
5003 if ($code_impots != ""
5004 && $code_impots != null) {
5005
5006 // Requête SQL
5007 $sql = "SELECT quartier
5008 FROM ".DB_PREFIXE."quartier
5009 WHERE code_impots = '".$code_impots."'";
5010 $this->f->addToLog(
5011 "get_quartier_by_code_impots() : db->getOne(\"".$sql."\")",
5012 VERBOSE_MODE);
5013 $quartier = $this->db->getOne($sql);
5014 $this->f->isDatabaseError($quartier);
5015 }
5016
5017 // Retourne résultat
5018 return $quartier;
5019 }
5020
5021 /**
5022 * Méthode permettant d'ajouter les données techniques d'un DI.
5023 *
5024 * @param integer $id identifiant de la demande
5025 * @param database &$db handler de la base de donnée
5026 * @param array $val tableau de valeurs postées via le formulaire
5027 * @param boolean $DEBUG debug
5028 *
5029 * @return boolean false si erreur
5030 */
5031 function ajoutDonneesTechniquesDI($id, &$db, $val, $DEBUG) {
5032
5033 //On vérifie que le dossier d'autorisation a des données techniques
5034 $sql = "SELECT * "
5035 ."FROM ".DB_PREFIXE."donnees_techniques "
5036 ."WHERE dossier_autorisation = '".$this->valF["dossier_autorisation"]."'";
5037 $dtda = $this->db->query($sql);
5038 $this->addToLog(__METHOD__."(): db->query(\"".$sql."\")", VERBOSE_MODE);
5039 if($this->f->isDatabaseError($dtda, true)){
5040 $this->f->addToLog(__METHOD__."() : ERROR - Erreur de base de données. Impossible d'ajouter les données techniques du dossier d'instruction.", DEBUG_MODE);
5041 return false;
5042 }
5043
5044 //Si le dossier d'autorisation a des données techniques
5045 if ( $dtda->numrows() == 1 ){
5046 //
5047 $dtdi = $this->f->get_inst__om_dbform(array(
5048 "obj" => "donnees_techniques",
5049 "idx" => "]",
5050 ));
5051 //Préparation des données
5052 $valF = $dtda->fetchRow(DB_FETCHMODE_ASSOC);
5053 //Suppression de l'identifiant
5054 $valF["donnees_techniques"] = null;
5055 // Ajout du numéro de dossier d'instruction
5056 $valF['dossier_instruction'] = $this->valF['dossier'];
5057 // Suppression du numéro de dossier d'autorisation
5058 $valF['dossier_autorisation'] = null;
5059 // Ajout des données techniques
5060 if($dtdi->ajouter($valF, $db, $DEBUG) === false) {
5061 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du dossier d'instruction.", DEBUG_MODE);
5062 return false;
5063 }
5064 }
5065 else {
5066 //Le dossier d'autorisation n'a pas de données techniques
5067 $this->f->addToLog(__METHOD__."() : ERROR - le DA n'a pas de données techniques.", DEBUG_MODE);
5068 return -1;
5069 }
5070
5071 //
5072 return true;
5073 }
5074
5075 /**
5076 * VIEW - contrainte.
5077 *
5078 * Vue des contraintes du dossier
5079 *
5080 * Cette vue permet de gérer le contenu de l'onglet "Contrainte(s)" sur un
5081 * dossier. Cette vue spécifique est nécessaire car l'ergonomie standard du
5082 * framework ne prend pas en charge ce cas.
5083 * C'est ici la vue spécifique des contraintes liées au dossier qui est
5084 * affichée directement au clic de l'onglet au lieu du soustab.
5085 *
5086 * L'idée est donc de simuler l'ergonomie standard en créant un container
5087 * et d'appeler la méthode javascript 'ajaxit' pour charger le contenu
5088 * de la vue visualisation de l'objet lié.
5089 *
5090 * @return void
5091 */
5092 function view_contrainte() {
5093 // Vérification de l'accessibilité sur l'élément
5094 $this->checkAccessibility();
5095 // Récupération des variables GET
5096 ($this->f->get_submitted_get_value('idxformulaire')!==null ? $idxformulaire =
5097 $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = "");
5098 ($this->f->get_submitted_get_value('retourformulaire')!==null ? $retourformulaire =
5099 $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = "");
5100 $obj = "dossier_contrainte";
5101 $type_aff_form = $this->get_type_affichage_formulaire();
5102 if ($type_aff_form === 'CTX RE' OR $type_aff_form === 'CTX IN') {
5103 $obj = "dossier_contrainte_contexte_ctx";
5104 }
5105 // Objet à charger
5106 // Construction de l'url de sousformulaire à appeler
5107 $url = OM_ROUTE_SOUSFORM."&obj=".$obj;
5108 $url .= "&action=4";
5109 $url .= "&idx=".$idxformulaire;
5110 $url .= "&retourformulaire=".$retourformulaire;
5111 $url .= "&idxformulaire=".$idxformulaire;
5112 $url .= "&retour=form";
5113 // Affichage du container permettant le reffraichissement du contenu
5114 // dans le cas des action-direct.
5115 printf('
5116 <div id="sousform-href" data-href="%s">
5117 </div>',
5118 $url
5119 );
5120 // Affichage du container permettant de charger le retour de la requête
5121 // ajax récupérant le sous formulaire.
5122 printf('
5123 <div id="sousform-%s">
5124 </div>
5125 <script>
5126 ajaxIt(\'%s\', \'%s\');
5127 </script>',
5128 $obj,
5129 $obj,
5130 $url
5131 );
5132 }
5133
5134 /**
5135 * Cette methode permet d'afficher le bouton de validation du formulaire
5136 *
5137 * @param integer $maj Mode de mise a jour
5138 * @return void
5139 */
5140 function bouton($maj) {
5141
5142 if (!$this->correct
5143 && $this->checkActionAvailability() == true) {
5144 //
5145 switch($maj) {
5146 case 0 :
5147 $bouton = _("Ajouter");
5148 break;
5149 case 1 :
5150 $bouton = _("Modifier");
5151 break;
5152 case 2 :
5153 $bouton = _("Supprimer");
5154 break;
5155 default :
5156 // Actions specifiques
5157 if ($this->get_action_param($maj, "button") != null) {
5158 //
5159 $bouton = $this->get_action_param($maj, "button");
5160 } else {
5161 //
5162 $bouton = _("Valider");
5163 }
5164 break;
5165 }
5166 //
5167 $params = array(
5168 "value" => $bouton,
5169 "name" => "submit",
5170 "onclick"=>"return getDataFieldReferenceCadastrale();",
5171 );
5172 //
5173 $this->f->layout->display_form_button($params);
5174 }
5175
5176 }
5177
5178 /**
5179 * Récupère l'instance de paramétrage des taxes.
5180 *
5181 * @param integer $taxe_amenagement Identifiant
5182 *
5183 * @return object
5184 */
5185 function get_inst_taxe_amenagement($taxe_amenagement = null) {
5186 //
5187 if ($this->inst_taxe_amenagement === null) {
5188 //
5189 if ($taxe_amenagement === null) {
5190 //
5191 $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($this->getVal('om_collectivite'));
5192
5193 // Si aucun paramétrage de taxe trouvé et que la collectivité
5194 // est mono
5195 if ($taxe_amenagement === null
5196 && $this->f->isCollectiviteMono($this->getVal('om_collectivite')) === true) {
5197 // Récupère la collectivité multi
5198 $om_collectivite_multi = $this->f->get_idx_collectivite_multi();
5199 //
5200 $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite_multi);
5201 }
5202
5203 //
5204 if ($taxe_amenagement === null) {
5205 //
5206 return null;
5207 }
5208 }
5209 //
5210 $this->inst_taxe_amenagement = $this->f->get_inst__om_dbform(array(
5211 "obj" => "taxe_amenagement",
5212 "idx" => $taxe_amenagement,
5213 ));
5214 }
5215 //
5216 return $this->inst_taxe_amenagement;
5217 }
5218
5219 /**
5220 * Récupère l'identifiant de la taxe d'aménagement par rapport à la collectivité.
5221 *
5222 * @param integer $om_collectivite La collectivité
5223 *
5224 * @return integer
5225 */
5226 function get_taxe_amenagement_by_om_collectivite($om_collectivite) {
5227 //
5228 $taxe_amenagement = null;
5229
5230 // Si la collectivité n'est pas renseigné
5231 if ($om_collectivite !== '' && $om_collectivite !== null) {
5232
5233 // SQL
5234 $sql = "SELECT taxe_amenagement
5235 FROM ".DB_PREFIXE."taxe_amenagement
5236 WHERE om_collectivite = ".intval($om_collectivite);
5237 $taxe_amenagement = $this->f->db->getOne($sql);
5238 $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
5239 $this->f->isDatabaseError($taxe_amenagement);
5240 }
5241
5242 //
5243 return $taxe_amenagement;
5244 }
5245
5246 /**
5247 * [get_inst_donnees_techniques description]
5248 *
5249 * @param [type] $donnees_techniques [description]
5250 *
5251 * @return [type] [description]
5252 */
5253 function get_inst_donnees_techniques($donnees_techniques = null) {
5254 //
5255 if (is_null($this->inst_donnees_techniques)) {
5256 //
5257 if (is_null($donnees_techniques)) {
5258 $donnees_techniques = $this->getDonneesTechniques();
5259 }
5260 //
5261 $this->inst_donnees_techniques = $this->f->get_inst__om_dbform(array(
5262 "obj" => "donnees_techniques",
5263 "idx" => $donnees_techniques,
5264 ));
5265 }
5266 //
5267 return $this->inst_donnees_techniques;
5268 }
5269
5270
5271 /**
5272 * Récupère l'instance du dossier d'autorisation.
5273 *
5274 * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
5275 *
5276 * @return object
5277 */
5278 function get_inst_dossier_autorisation($dossier_autorisation = null) {
5279 //
5280 return $this->get_inst_common("dossier_autorisation", $dossier_autorisation);
5281 }
5282
5283
5284 /**
5285 * Récupère l'instance du dossier d'autorisation, puis la clé d'accès au portail
5286 * citoyen associée à ce DA.
5287 *
5288 * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
5289 *
5290 * @return string $cle_acces_citoyen si la clé d'accès existe
5291 * boolean false si la clé n'existe pas
5292 */
5293 protected function get_citizen_access_key($dossier_autorisation = null) {
5294 //
5295 $inst_da = $this->get_inst_dossier_autorisation($dossier_autorisation);
5296 // Récupération de la valeur de la clé d'accès
5297 $cle_acces_citoyen = $inst_da->getVal('cle_acces_citoyen');
5298 if ($cle_acces_citoyen === '' OR $cle_acces_citoyen === null) {
5299 return false;
5300 }
5301 return $cle_acces_citoyen;
5302 }
5303
5304
5305 /**
5306 * Récupère l'instance du type détaillé du dossier d'autorisation.
5307 *
5308 * @param integer $dossier_autorisation_type_detaille Identifiant
5309 *
5310 * @return object
5311 */
5312 function get_inst_dossier_autorisation_type_detaille($dossier_autorisation_type_detaille = null) {
5313 //
5314 if (is_null($this->inst_dossier_autorisation_type_detaille)) {
5315 //
5316 if (is_null($dossier_autorisation_type_detaille)) {
5317 //
5318 $dossier_autorisation = $this->get_inst_dossier_autorisation();
5319 //
5320 $dossier_autorisation_type_detaille = $dossier_autorisation->getVal('dossier_autorisation_type_detaille');
5321 }
5322 //
5323 $this->inst_dossier_autorisation_type_detaille = $this->f->get_inst__om_dbform(array(
5324 "obj" => "dossier_autorisation_type_detaille",
5325 "idx" => $dossier_autorisation_type_detaille,
5326 ));
5327 }
5328 //
5329 return $this->inst_dossier_autorisation_type_detaille;
5330 }
5331
5332 /**
5333 * Récupère l'instance du cerfa
5334 *
5335 * @param integer $cerfa Identifiant du cerfa
5336 *
5337 * @return object
5338 */
5339 function get_inst_cerfa($cerfa = null) {
5340 //
5341 if (is_null($this->inst_cerfa)) {
5342 //
5343 if (is_null($cerfa)) {
5344 //
5345 $dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
5346 //
5347 $cerfa = $dossier_autorisation_type_detaille->getVal('cerfa');
5348 }
5349 //
5350 $this->inst_cerfa = $this->f->get_inst__om_dbform(array(
5351 "obj" => "cerfa",
5352 "idx" => $cerfa,
5353 ));
5354 }
5355 //
5356 return $this->inst_cerfa;
5357 }
5358
5359 /**
5360 * CONDITION - is_user_from_allowed_collectivite.
5361 *
5362 * Cette condition permet de vérifier si l'utilisateur connecté appartient
5363 * à une collectivité autorisée : c'est-à-dire de niveau 2 ou identique à
5364 * la collectivité de l'enregistrement sur lequel on se trouve.
5365 *
5366 * @return boolean
5367 */
5368 function is_user_from_allowed_collectivite() {
5369
5370 // Si l'utilisateur est de niveau 2
5371 if ($_SESSION["niveau"] == "2") {
5372 // Alors l'utilisateur fait partie d'une collectivité autorisée
5373 return true;
5374 }
5375
5376 // L'utilisateur est donc de niveau 1
5377 // On vérifie donc si la collectivité de l'utilisateur est la même
5378 // que la collectivité de l'élément sur lequel on se trouve
5379 if ($_SESSION["collectivite"] === $this->getVal("om_collectivite")) {
5380 // Alors l'utilisateur fait partie d'une collectivité autorisée
5381 return true;
5382 }
5383
5384 // L'utilisateur ne fait pas partie d'une collectivité autorisée
5385 return false;
5386 }
5387
5388 /**
5389 * Création ou mise à jour du répertoire de numérisation.
5390 *
5391 * L'objet de cette méthode est la création ou la mise à jour de la date de
5392 * modification du répertoire de numérisation destiné à recevoir les pièces
5393 * numérisées pour un import automatique.
5394 * À chaque saisie d'une nouvelle demande dans openADS, le répertoire est
5395 * soit créé soit mis à jour pour être disponible en dehors d'openADS
5396 * (point de montage sur le serveur) pour permettre de déposer les pièces
5397 * numérisées directement depuis le copieur. À intervalle régulier, un
5398 * service vérifie le contenu de ces répertoire pour importer
5399 * automatiquement ces fichiers dans l'onglet 'Pièce(s)' du dossier
5400 * concerné.
5401 * La mise à jour de la date de modification est importante pour réaliser
5402 * la purge des répertoires vides sur la base de la date de la dernière
5403 * demande qui concerne le dossier.
5404 *
5405 * @return boolean
5406 */
5407 function create_or_touch_digitalization_folder() {
5408
5409 // Nom du répertoire
5410 // Le répertoire créé possède comme nom le libellé du dossier avec
5411 // le suffixe séparé par un '.'. Exemple : PC0130551601234.P0
5412 $separateur = '';
5413 if ($this->getSuffixe($this->getVal('dossier_instruction_type')) === 't') {
5414 $separateur = '.';
5415 }
5416
5417 $digitalization_folder_name = str_replace(
5418 $this->getVal("dossier_autorisation"),
5419 $this->getVal("dossier_autorisation").$separateur,
5420 $this->getVal($this->clePrimaire)
5421 );
5422
5423 // Vérifie que l'option de numérisation des dossiers est désactivée
5424 if ($this->f->is_option_digitalization_folder_enabled() !== true) {
5425 //
5426 $this->addToLog(
5427 _("L'option de numerisation des dossiers n'est pas activee").".",
5428 DEBUG_MODE
5429 );
5430 return false;
5431 }
5432
5433 // Vérifie le paramétrage du répertoire de numérisation
5434 if ($this->f->getParameter("digitalization_folder_path") === null) {
5435 //
5436 $this->addToLog(
5437 "Configuration du répertoire de numérisation incorrecte.",
5438 DEBUG_MODE
5439 );
5440 return false;
5441 }
5442
5443 // Répertoire cible
5444 $root_folder_path = $this->f->getParameter("digitalization_folder_path");
5445
5446 // Vérifie que le répertoire existe
5447 if (is_dir($root_folder_path) !== true) {
5448 //
5449 $this->addToLog(
5450 sprintf(
5451 "Le répertoire '%s' n'existe pas.",
5452 $root_folder_path
5453 ),
5454 DEBUG_MODE
5455 );
5456 return false;
5457 }
5458
5459 // Répertoire des "à traiter"
5460 $todo_folder_path = $root_folder_path."Todo/";
5461
5462 // Vérifie que le répertoire existe
5463 if (is_dir($todo_folder_path) !== true) {
5464 //
5465 $this->addToLog(
5466 sprintf(
5467 "Le répertoire '%s' n'existe pas.",
5468 $todo_folder_path
5469 ),
5470 DEBUG_MODE
5471 );
5472 return false;
5473 }
5474
5475 // Répertoire de numérisation.
5476 $digitalization_folder_path = $todo_folder_path.$digitalization_folder_name;
5477
5478 // Si le répertore existe déjà le répertoire n'est pas créé
5479 if (file_exists($digitalization_folder_path) == true) {
5480 // Mise à jour du répertoire
5481 if (touch($digitalization_folder_path) !== true) {
5482 // Si une erreur survient
5483 $this->addToLog(
5484 sprintf(
5485 "Erreur lors de la mise à jour du répertoire '%s'.",
5486 $digitalization_folder_path
5487 ),
5488 DEBUG_MODE
5489 );
5490 return false;
5491 }
5492 //
5493 return true;
5494 } else {
5495 // Création du répertoire
5496 if (mkdir($digitalization_folder_path) !== true) {
5497 //
5498 $this->addToLog(
5499 sprintf(
5500 "Erreur lors de la création du répertoire '%s'.",
5501 $digitalization_folder_path
5502 ),
5503 DEBUG_MODE
5504 );
5505 return false;
5506 }
5507 //
5508 return true;
5509 }
5510 }
5511
5512 /**
5513 * Récupère, convertit et retourne les logs de toutes les instructions
5514 *
5515 * @return array tableau indexé de logs
5516 */
5517 public function get_log_instructions() {
5518 $log_instructions = $this->getVal('log_instructions');
5519 // Gestion du premier log
5520 if ($log_instructions === '') {
5521 $log_instructions = json_encode(array());
5522 }
5523 // Gestion du log invalide
5524 if(!$this->isJson($log_instructions)) {
5525 return false;
5526 }
5527 return json_decode($log_instructions, true);
5528 }
5529
5530 /**
5531 * Ajoute un log d'instruction aux logs existants
5532 *
5533 * @param array $log valeurs de l'instruction
5534 * @return bool vrai si traitement effectué avec succès
5535 */
5536 public function add_log_instructions($log) {
5537 // Begin
5538 $this->begin_treatment(__METHOD__);
5539 // Ajout du log
5540 $log_instructions = $this->get_log_instructions();
5541 if ($log_instructions === false) {
5542 $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
5543 return $this->end_treatment(__METHOD__, false);
5544 }
5545 array_push($log_instructions, $log);
5546 $log_instructions = json_encode($log_instructions);
5547 // Mise à jour du DI
5548 $val = array("log_instructions"=>$log_instructions);
5549 $ret = $this->f->db->autoExecute(
5550 DB_PREFIXE."dossier",
5551 $val,
5552 DB_AUTOQUERY_UPDATE,
5553 "dossier = '".$this->getVal('dossier')."'");
5554 if (database::isError($ret, true)) {
5555 $this->erreur_db($ret->getDebugInfo(), $ret->getMessage(), 'dossier');
5556 $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
5557 return $this->end_treatment(__METHOD__, false);
5558 }
5559 return $this->end_treatment(__METHOD__, true);
5560 }
5561
5562 /**
5563 * Vérifie qu'une chaîne est au format json
5564 *
5565 * @param string $text chaîne à analyser
5566 * @return boolean vrai si formatée json
5567 */
5568 function isJson($text) {
5569 json_decode($text);
5570 return (json_last_error() == JSON_ERROR_NONE);
5571 }
5572
5573 /**
5574 * TREATMENT - mark_as_connected_to_referentiel_erp.
5575 *
5576 * Cette méthode permet de positionner le marqueur
5577 * 'interface_referentiel_erp' à 'true'. Cela signifie que le dossier est
5578 * connecté au référentiel ERP.
5579 *
5580 * @return boolean
5581 */
5582 function mark_as_connected_to_referentiel_erp() {
5583 //
5584 $this->begin_treatment(__METHOD__);
5585 //
5586 $data = array("interface_referentiel_erp" => true, );
5587 // Exécution de la requête
5588 $res = $this->f->db->autoExecute(
5589 DB_PREFIXE.$this->table,
5590 $data,
5591 DB_AUTOQUERY_UPDATE,
5592 $this->getCle($this->getVal($this->clePrimaire))
5593 );
5594 // Logger
5595 $this->addToLog(
5596 __METHOD__."(): db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($data, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($this->getVal($this->clePrimaire))."\");",
5597 VERBOSE_MODE
5598 );
5599 //
5600 if ($this->f->isDatabaseError($res, true)) {
5601 // Appel de la methode de recuperation des erreurs
5602 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
5603 $this->correct = false;
5604 $this->addToLog(
5605 __METHOD__."(): Problème erreur lors de la mise à jour du dossier",
5606 DEBUG_MODE
5607 );
5608 // Termine le traitement
5609 return $this->end_treatment(__METHOD__, false);
5610 }
5611 //
5612 $this->addToMessage(_("Le dossier est désormais 'connecté avec le référentiel ERP'."));
5613 return $this->end_treatment(__METHOD__, true);
5614 }
5615
5616 /**
5617 * CONDITION - is_connected_to_referentiel_erp.
5618 *
5619 * @return boolean
5620 */
5621 function is_connected_to_referentiel_erp() {
5622 //
5623 if ($this->getVal("interface_referentiel_erp") !== "t") {
5624 return false;
5625 }
5626 //
5627 return true;
5628 }
5629
5630
5631 /**
5632 * Retourne les données techniques applicables au dossier courant, càd les données
5633 * techniques liées au dossier avec seulement les champs du CERFA associé au type de
5634 * dossier.
5635 *
5636 * @return array $donnees_techniques_applicables Tableau associatif contenant
5637 * seulement les données techniques
5638 * applicables au dossier.
5639 */
5640 public function get_donnees_techniques_applicables() {
5641
5642 // Récupération de l'identifiant des données techniques liées au dossier
5643 $donnees_techniques = $this->getDonneesTechniques();
5644
5645 $inst_donnees_techniques = $this->get_inst_common('donnees_techniques', $donnees_techniques);
5646 $donnees_techniques_applicables = $inst_donnees_techniques->get_donnees_techniques_applicables();
5647 //
5648 return $donnees_techniques_applicables;
5649
5650 }
5651
5652
5653 /**
5654 * Retourne un tableau avec les données du dossier d'instruction.
5655 *
5656 * L'objectif est de mettre à disposition via un WS REST un ensemble
5657 * de données exploitable par une autre application.
5658 */
5659 function get_datas() {
5660
5661 /**
5662 *
5663 */
5664
5665 $om_collectivite = $this->get_inst_common('om_collectivite', $this->getVal('om_collectivite'));
5666 $instructeur = $this->get_inst_common('instructeur', $this->getVal('instructeur'));
5667 $division = $this->get_inst_common('division', $this->getVal('division'));
5668 $dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
5669 $dossier_autorisation_type = $this->get_inst_common('dossier_autorisation_type', $dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
5670 $donnees_techniques = $this->get_donnees_techniques_applicables();
5671
5672 //
5673 $datas = array(
5674 //
5675 "dossier_instruction" => $this->getVal($this->clePrimaire),
5676 //
5677 "dossier_autorisation" => $this->getVal("dossier_autorisation"),
5678 //
5679 "terrain_adresse_voie_numero" => $this->getVal("terrain_adresse_voie_numero"),
5680 "terrain_adresse_lieu_dit" => $this->getVal("terrain_adresse_lieu_dit"),
5681 "terrain_adresse_code_postal" => $this->getVal("terrain_adresse_code_postal"),
5682 "terrain_adresse_cedex" => $this->getVal("terrain_adresse_cedex"),
5683 "terrain_adresse_voie" => $this->getVal("terrain_adresse_voie"),
5684 "terrain_adresse_bp" => $this->getVal("terrain_adresse_bp"),
5685 "terrain_adresse_localite" => $this->getVal("terrain_adresse_localite"),
5686 "terrain_superficie" => $this->getVal("terrain_superficie"),
5687 //
5688 "references_cadastrales" => $this->f->parseParcelles($this->getVal("terrain_references_cadastrales"), $this->getVal('om_collectivite')),
5689 "dossier_autorisation_type" => $dossier_autorisation_type->getVal("libelle"),
5690 "dossier_autorisation_type_detaille" => $dossier_autorisation_type_detaille->getVal("libelle"),
5691 "collectivite" => $om_collectivite->getVal("libelle"),
5692 "instructeur" => $instructeur->getVal("nom"),
5693 "division" => $division->getVal("libelle"),
5694 "etat_dossier" => $this->getVal("etat"),
5695 "statut_dossier" => $this->getStatut(),
5696 "date_depot_initial" => $this->getVal("date_depot"),
5697 "date_limite_instruction" => $this->getVal("date_limite"),
5698 "date_decision" => $this->getVal("date_decision"),
5699 "enjeu_urbanisme" => $this->getVal("enjeu_urba") == 't' ? 'true' : 'false',
5700 "enjeu_erp" => $this->getVal("enjeu_erp") == 't' ? 'true' : 'false',
5701 );
5702
5703 // Gestion des demandeurs.
5704 $this->listeDemandeur('dossier', $this->getVal($this->clePrimaire));
5705 //
5706 if (isset($this->valIdDemandeur["petitionnaire_principal"]) AND !empty($this->valIdDemandeur["petitionnaire_principal"])) {
5707 $demandeur = $this->f->get_inst__om_dbform(array(
5708 "obj" => "petitionnaire",
5709 "idx" => $this->valIdDemandeur["petitionnaire_principal"][0],
5710 ));
5711 $datas["petitionnaire_principal"] = $demandeur->get_datas();
5712 $demandeur->__destruct();
5713 }
5714 //
5715 if (isset($this->valIdDemandeur["delegataire"]) && !empty($this->valIdDemandeur["delegataire"])) {
5716 $demandeur = $this->f->get_inst__om_dbform(array(
5717 "obj" => "delegataire",
5718 "idx" => $this->valIdDemandeur["delegataire"][0],
5719 ));
5720 $datas["delegataire"] = $demandeur->get_datas();
5721 $demandeur->__destruct();
5722 }
5723 //
5724 if (isset($this->valIdDemandeur["petitionnaire"]) AND !empty($this->valIdDemandeur["petitionnaire"])) {
5725 $datas["autres_petitionnaires"] = array();
5726 foreach ($this->valIdDemandeur["petitionnaire"] as $petitionnaire) {
5727 $demandeur = $this->f->get_inst__om_dbform(array(
5728 "obj" => "petitionnaire",
5729 "idx" => $petitionnaire,
5730 ));
5731 $datas["autres_petitionnaires"][] = $demandeur->get_datas();
5732 $demandeur->__destruct();
5733 }
5734 }
5735
5736 // Tableau contenant le nom de chaque champ de données techniques à retourner
5737 $dt_a_afficher = array(
5738 "co_tot_log_nb",
5739 "co_cstr_exist",
5740 "co_uti_pers",
5741 "co_uti_vente",
5742 "co_uti_loc",
5743 "su_tot_shon_tot",
5744 "su_avt_shon_tot",
5745 "am_lot_max_nb",
5746 "am_empl_nb",
5747 );
5748
5749 // Tableau associatif contenant les données techniques voulues
5750 $tab_donnees_techniques = array();
5751 foreach ($dt_a_afficher as $key) {
5752 // On ajoute le champ de données techniques dans le retour seulement s'il
5753 // existe dans $donnees_techniques (s'il est applicable au dossier)
5754 if (array_key_exists($key, $donnees_techniques) === true) {
5755 if ($donnees_techniques[$key] === 't') {
5756 $donnees_techniques[$key] = 'true';
5757 };
5758 if ($donnees_techniques[$key] === 'f') {
5759 $donnees_techniques[$key] = 'false';
5760 };
5761 $tab_donnees_techniques[$key] = $donnees_techniques[$key];
5762 };
5763 };
5764
5765 $datas['donnees_techniques'] = $tab_donnees_techniques;
5766 /**
5767 *
5768 */
5769 //
5770 return $datas;
5771 }
5772
5773 /**
5774 * CONDITION - is_class_dossier_corresponding_to_his_groupe
5775 *
5776 * Vérifie la correspondance groupe/classe du dossier instancié.
5777 *
5778 * @param string $classe
5779 * @return boolean
5780 */
5781 protected function is_class_dossier_corresponding_to_type_form($classe) {
5782 $type_form = $this->get_type_affichage_formulaire();
5783 switch ($type_form) {
5784 case 'DPC';
5785 case 'ADS':
5786 if ($this->f->starts_with($classe, 'dossier_instruction') === true) {
5787 return true;
5788 }
5789 return false;
5790 case 'CTX RE':
5791 if ($this->f->ends_with($classe, '_recours') === true) {
5792 return true;
5793 }
5794 return false;
5795 case 'CTX IN':
5796 if ($this->f->ends_with($classe, '_infractions') === true) {
5797 return true;
5798 }
5799 return false;
5800 default:
5801 return false;
5802 }
5803 }
5804
5805
5806 /**
5807 * CONDITION - check_context
5808 *
5809 * Vérifie la correspondance groupes dossier/utilisateur.
5810 * Vérifie l'accès aux dossiers confidentiels.
5811 * Vérifie la correspondance groupe/classe.
5812 *
5813 * @return boolean
5814 */
5815 public function check_context() {
5816 // Le dossier doit être un objet valide
5817 $id = $this->getVal($this->clePrimaire);
5818 if ($id === 0 OR $id === '0' OR $id === '' OR $id === ']') {
5819 return false;
5820 }
5821
5822 // Vérification que l'utilisateur a accès au dossier
5823 if ($this->can_user_access_dossier() === false) {
5824 return false;
5825 }
5826 // Vérification que la classe métier instanciée est adéquate.
5827 return $this->is_class_dossier_corresponding_to_type_form($this->get_absolute_class_name());
5828 }
5829
5830 /**
5831 * VIEW - redirect.
5832 *
5833 * Cette vue est appelée lorsque l'on souhaite consulter un dossier dont on ne connaît pas le groupe.
5834 * Ce fonctionnement est nécessaire car les classes métier filles de 'dossier' sont relatives à ce groupe.
5835 *
5836 * Par exemple, depuis l'onglet "Dossiers Liés" du DI, le listing ne permet pas d'instancier chaque résultat
5837 * et par conséquent on n'a pas accès au groupe du dossier. L'action tableau consulter y est surchargée afin
5838 * d'amener à cette vue qui se charge de faire la redirection adéquate.
5839 *
5840 * @return void
5841 */
5842 public function redirect() {
5843 // Redirection vers la classe métier adéquate
5844 $context = $this->get_type_affichage_formulaire();
5845 switch ($context) {
5846 case 'ADS':
5847 $obj = 'dossier_instruction';
5848 break;
5849 case 'CTX RE':
5850 $obj = 'dossier_contentieux_tous_recours';
5851 break;
5852 case 'CTX IN':
5853 $obj = 'dossier_contentieux_toutes_infractions';
5854 break;
5855 default:
5856 return;
5857 }
5858 $idx = $this->getVal($this->clePrimaire);
5859 $link = OM_ROUTE_FORM.'&obj='.$obj.'&action=3&idx='.$idx;
5860 if ($this->f->get_submitted_get_value('retourformulaire') !== null
5861 && $this->f->get_submitted_get_value('idxformulaire') !== null) {
5862 $link .= '&premier=0&tricol=&retourformulaire='.$this->f->get_submitted_get_value('retourformulaire');
5863 $link .= '&idxformulaire='.$this->f->get_submitted_get_value('idxformulaire');
5864 }
5865
5866 header('Location: '.$link);
5867 exit();
5868 }
5869
5870
5871 /**
5872 * CONDITION - is_confidentiel
5873 *
5874 * Permet de savoir si le type de dossier d'autorisation du dossier courant est
5875 * confidentiel.
5876 *
5877 * @return boolean true si le dossier est confidentiel, sinon false.
5878 *
5879 */
5880 public function is_confidentiel() {
5881 //
5882 $inst_dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
5883 $inst_dossier_autorisation_type = $this->get_inst_dossier_autorisation_type($inst_dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
5884 $confidentiel = $inst_dossier_autorisation_type->getVal('confidentiel');
5885 //
5886 if ($confidentiel === 't') {
5887 return true;
5888 }
5889 return false;
5890 }
5891
5892
5893 /**
5894 * CONDITION - can_user_access_dossier
5895 *
5896 * Effectue les vérifications suivantes :
5897 * - L'utilisateur doit avoir accès au groupe du dossier
5898 * - Si le dossier est confidentiel, l'utilisateur doit avoir accès aux dossiers
5899 * confidentiels de ce groupe
5900 *
5901 * @return boolean true si les conditions ci-dessus sont réunies, sinon false
5902 *
5903 */
5904 public function can_user_access_dossier() {
5905 // Récupère le code du groupe
5906 $groupe_dossier = $this->get_groupe();
5907
5908 // Le groupe doit être accessible par l'utilisateur ;
5909 if ($this->f->is_user_in_group($groupe_dossier) === false) {
5910 return false;
5911 }
5912 if ($this->is_confidentiel() === true) {
5913 //
5914 if ($this->f->can_user_access_dossiers_confidentiels_from_groupe($groupe_dossier) === false) {
5915 return false;
5916 }
5917 }
5918 return true;
5919 }
5920
5921
5922 /**
5923 * Met à jour une métadonnée sur tous les fichiers liés au dossier.
5924 *
5925 * @param string $metadata Nom de la métadonnée.
5926 * @param string $metadata_value Nouvelle valeur de la métadonnée.
5927 *
5928 * @return boolean
5929 */
5930 public function update_metadata_by_dossier($metadata, $metadata_value) {
5931 // Rècupère la liste des fichiers stockés liés au dossier
5932 $sql = sprintf('
5933 SELECT uid AS uid
5934 FROM %1$sdocument_numerise
5935 WHERE dossier = \'%2$s\'
5936 AND document_numerise IS NOT NULL
5937 UNION
5938 SELECT fichier AS uid
5939 FROM %1$sconsultation
5940 WHERE dossier = \'%2$s\'
5941 AND fichier IS NOT NULL
5942 UNION
5943 SELECT om_fichier_consultation AS uid
5944 FROM %1$sconsultation
5945 WHERE dossier = \'%2$s\'
5946 AND om_fichier_consultation IS NOT NULL
5947 UNION
5948 SELECT om_fichier_instruction AS uid
5949 FROM %1$sinstruction
5950 WHERE dossier = \'%2$s\'
5951 AND om_fichier_instruction IS NOT NULL
5952 UNION
5953 SELECT om_fichier_rapport_instruction AS uid
5954 FROM %1$srapport_instruction
5955 WHERE dossier_instruction = \'%2$s\'
5956 AND om_fichier_rapport_instruction IS NOT NULL;
5957 ',
5958 DB_PREFIXE,
5959 $this->getVal($this->clePrimaire)
5960 );
5961 $res = $this->f->db->query($sql);
5962 $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
5963 $this->f->isDatabaseError($res);
5964
5965 // Définit la métadonnée à mettre à jour
5966 $metadata_update = array();
5967 $metadata_update[$metadata] = $metadata_value;
5968
5969 // Pour chaque résultat
5970 while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
5971 // Met à jour les métadonnées du fichier
5972 $uid_update = $this->f->storage->storage->update_metadata($row['uid'], $metadata_update);
5973
5974 // Si la méthode ne retourne pas l'uid du fichier alors la mise
5975 // à jour ne s'est pas réalisée
5976 if ($uid_update !== $row['uid']) {
5977 //
5978 return false;
5979 }
5980 }
5981 $res->free();
5982
5983 //
5984 return true;
5985 }
5986
5987
5988 /**
5989 * Traitement pour les ERP.
5990 * Si la valeur du champ 'erp' a été modifié, modifie la valeur de la
5991 * métadonnée concernceERP sur tous les fichiers liés au dossier.
5992 *
5993 * @param array $values Liste des nouvelles valeurs.
5994 *
5995 * @return boolean
5996 */
5997 public function update_concerneERP(array $values) {
5998 // Définit le champ et la métadonnée
5999 $champ = 'erp';
6000 $metadata = 'concerneERP';
6001
6002 // Définit les valeurs à comparer
6003 $value_after = $this->get_boolean_from_view_value($values[$champ]);
6004 $value_before = $this->get_boolean_from_pgsql_value($this->getVal($champ));
6005
6006 // Vérifie si la valeur du champ a été modifié
6007 if ($value_after !== $value_before) {
6008 // Transforme la valeur booléenne en string
6009 $metadata_value = 'false';
6010 if ($value_after === true) {
6011 $metadata_value = 'true';
6012 }
6013
6014 // Met à jour les métadonnées des fichiers liés au dossier
6015 $update = $this->update_metadata_by_dossier($metadata, $metadata_value);
6016 //
6017 if ($update !== true) {
6018 //
6019 return false;
6020 }
6021 }
6022
6023 //
6024 return true;
6025 }
6026
6027
6028 /**
6029 * Récupère l'instance du groupe.
6030 *
6031 * @param string $groupe Identifiant du groupe.
6032 *
6033 * @return object
6034 */
6035 private function get_inst_groupe($groupe) {
6036 //
6037 return $this->get_inst_common("groupe", $groupe);
6038 }
6039
6040
6041 /**
6042 * Récupère l'instance du type de dossier d'autorisation.
6043 *
6044 * @param string $dossier_autorisation_type Identifiant du type de dossier
6045 * d'autorisation.
6046 *
6047 * @return object
6048 */
6049 private function get_inst_dossier_autorisation_type($dossier_autorisation_type) {
6050 //
6051 return $this->get_inst_common("dossier_autorisation_type", $dossier_autorisation_type);
6052 }
6053
6054
6055 /**
6056 * Récupère l'instance de la demande du dossier
6057 *
6058 * @param mixed Identifiant de la demande
6059 *
6060 * @return object
6061 */
6062 function get_inst_demande($demande = null) {
6063 //
6064 if (is_null($this->inst_demande)) {
6065 //
6066 if (is_null($demande)) {
6067 $demande = $this->get_demande_by_dossier_instruction();
6068 }
6069 //
6070 return $this->get_inst_common("demande", $demande);
6071 }
6072 //
6073 return $this->inst_demande;
6074 }
6075
6076
6077 /**
6078 * Récupère l'identifiant de la demande initiale par le dossier d'instruction.
6079 *
6080 * @return integer
6081 */
6082 function get_demande_by_dossier_instruction() {
6083 // Initialisation de la variable de retour
6084 $res = null;
6085
6086 // SQL
6087 $sql = "SELECT demande
6088 FROM ".DB_PREFIXE."demande
6089 WHERE dossier_instruction = '".$this->getVal($this->clePrimaire)."'
6090 ORDER BY instruction_recepisse ASC
6091 LIMIT 1";
6092 $res = $this->f->db->getOne($sql);
6093 $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
6094 $this->f->isDatabaseError($res);
6095
6096 //
6097 return $res;
6098 }
6099
6100 /**
6101 * TREATMENT - update_last_modification_date.
6102 *
6103 * Cette methode met à jour la date de dernière modification du dossier.
6104 *
6105 * @return boolean
6106 */
6107 public function update_last_modification_date() {
6108 //
6109 $this->begin_treatment(__METHOD__);
6110 //
6111 $this->correct = true;
6112 $this->valF["date_modification"] = 'NOW';
6113 //
6114 $res = $this->f->db->autoExecute(
6115 DB_PREFIXE.$this->table,
6116 $this->valF,
6117 DB_AUTOQUERY_UPDATE,
6118 $this->clePrimaire." = '".$this->getVal($this->clePrimaire)."'"
6119 );
6120 if ($this->f->isDatabaseError($res, true)) {
6121 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
6122 $this->correct = false;
6123 return $this->end_treatment(__METHOD__, false);
6124 } else {
6125 return $this->end_treatment(__METHOD__, true);
6126 }
6127 //
6128 return $this->end_treatment(__METHOD__, false);
6129 }
6130
6131 /**
6132 * TREATMENT - update_hash_sitadel.
6133 *
6134 * Cette methode met à jour le hash SITADEL du dossier.
6135 *
6136 * @return boolean
6137 */
6138 public function update_hash_sitadel($hash_sitadel = null) {
6139 //
6140 $this->begin_treatment(__METHOD__);
6141 //
6142 if ($hash_sitadel !== null && $hash_sitadel !== '') {
6143 //
6144 $this->correct = true;
6145 $this->valF["hash_sitadel"] = $hash_sitadel;
6146 //
6147 $res = $this->f->db->autoExecute(
6148 DB_PREFIXE.$this->table,
6149 $this->valF,
6150 DB_AUTOQUERY_UPDATE,
6151 $this->clePrimaire." = '".$this->getVal($this->clePrimaire)."'"
6152 );
6153 if ($this->f->isDatabaseError($res, true)) {
6154 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
6155 $this->correct = false;
6156 return $this->end_treatment(__METHOD__, false);
6157 } else {
6158 return $this->end_treatment(__METHOD__, true);
6159 }
6160 }
6161 //
6162 return $this->end_treatment(__METHOD__, false);
6163 }
6164
6165
6166 }
6167
6168

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26