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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4047 - (show annotations)
Thu Apr 28 14:32:32 2016 UTC (8 years, 9 months ago) by jymadier
File size: 206204 byte(s)
Correction d'une faute d'orthographe

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26