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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4045 - (show annotations)
Thu Apr 28 09:14:14 2016 UTC (8 years, 9 months ago) by nhaye
File size: 104359 byte(s)
Correction du recalcul des données techniques du DA

1 <?php
2 //$Id: dossier_autorisation.class.php 6139 2016-03-09 10:59:18Z stimezouaght $
3 //gen openMairie le 14/11/2012 12:54
4
5 require_once ("../gen/obj/dossier_autorisation.class.php");
6
7 class dossier_autorisation extends dossier_autorisation_gen {
8
9
10 var $valIdDemandeur = array("petitionnaire_principal" => "",
11 "delegataire" => "",
12 "petitionnaire" => array());
13
14 /** @var boolean Les nouvelles actions sont activées sur cet objet */
15 var $activate_class_action;
16
17 function dossier_autorisation($id,&$db,$debug) {
18 //On active les nouvelles actions
19 $this->activate_class_action = true;
20 //
21 $this->constructeur($id,$db,$debug);
22 }// fin constructeur
23
24 /**
25 * Définition des actions disponibles sur la classe.
26 *
27 * @return void
28 */
29 function init_class_actions() {
30
31 parent::init_class_actions();
32
33 // ACTION - 003 - view_consulter
34 // Interface spécifique du formulaire de consultation
35 $this->class_actions[3] = array(
36 "identifier" => "view_consulter",
37 "view" => "view_consulter",
38 "permission_suffix" => "consulter",
39 );
40
41 // ACTION - 004 - view_document_numerise
42 // Interface spécifique du tableau des pièces
43 $this->class_actions[4] = array(
44 "identifier" => "view_document_numerise",
45 "view" => "view_document_numerise",
46 "permission_suffix" => "document_numerise",
47 );
48 }
49
50 /**
51 * VIEW - view_document_numerise.
52 *
53 * Vue du tableau des pièces du dossier d'autorisation.
54 *
55 * Cette vue permet de gérer le contenu de l'onglet "Pièce(s)" sur un
56 * dossier d'autorisation. Cette vue spécifique est nécessaire car
57 * l'ergonomie standard du framework ne prend pas en charge ce cas.
58 * C'est ici la vue spécifique des pièces liées au dossier qui est
59 * affichée directement au clic de l'onglet au lieu du soustab.
60 *
61 * L'idée est donc de simuler l'ergonomie standard en créant un container
62 * et d'appeler la méthode javascript 'ajaxit' pour charger le contenu
63 * de la vue visualisation de l'objet lié.
64 *
65 * @return void
66 */
67 function view_document_numerise() {
68 // Vérification de l'accessibilité sur l'élément
69 $this->checkAccessibility();
70 // Récupération des variables GET
71 ($this->f->get_submitted_get_value('idxformulaire')!==null ? $idxformulaire =
72 $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = "");
73 ($this->f->get_submitted_get_value('retourformulaire')!==null ? $retourformulaire =
74 $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = "");
75 // Objet à charger
76 $obj = "document_numerise";
77 // Construction de l'url de sousformulaire à appeler
78 $url = "../scr/sousform.php?obj=".$obj;
79 $url .= "&idx=".$idxformulaire;
80 $url .= "&action=4";
81 $url .= "&retourformulaire=".$retourformulaire;
82 $url .= "&idxformulaire=".$idxformulaire;
83 $url .= "&retour=form";
84 // Affichage du container permettant le reffraichissement du contenu
85 // dans le cas des action-direct.
86 printf('
87 <div id="sousform-href" data-href="%s">
88 </div>',
89 $url
90 );
91 // Affichage du container permettant de charger le retour de la requête
92 // ajax récupérant le sous formulaire.
93 printf('
94 <div id="sousform-%s">
95 </div>
96 <script>
97 ajaxIt(\'%s\', \'%s\');
98 </script>',
99 $obj,
100 $obj,
101 $url
102 );
103 }
104
105
106 /**
107 * Affiche la fiche du dossier d'autorisation passé en paramètre.
108 *
109 * @param string $idx Identifiant du DA.
110 * @param mixed $bouton_retour Affiche ou non le bouton retour.
111 * @param boolean $display_cerfa Affiche ou non l'overlay sur le CERFA.
112 *
113 * @return void
114 */
115 protected function display_dossier_autorisation_data($idx, $bouton_retour, $display_cerfa = true) {
116 //Récupération des données
117 //Données du dossier d'autorisation
118 $sqlDonneesDA = "SELECT dossier_autorisation_libelle,
119 CASE WHEN etat_dernier_dossier_instruction_accepte IS NULL
120 THEN eda.libelle
121 ELSE edda.libelle
122 END as etat,
123 CASE WHEN demandeur.qualite='particulier' THEN
124 TRIM(CONCAT(civilite.code, ' ', demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
125 ELSE
126 TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
127 END as \"demandeur\",
128 CONCAT(
129 CASE WHEN terrain_references_cadastrales IS NULL THEN
130 ''
131 ELSE
132 TRIM(CONCAT(replace(terrain_references_cadastrales,';',' '), '<br/>')) END,
133 CASE WHEN terrain_adresse_voie_numero IS NULL AND
134 terrain_adresse_voie IS NULL THEN
135 ''
136 ELSE
137 TRIM(CONCAT(terrain_adresse_voie_numero, ' ', terrain_adresse_voie, '<br/>')) END,
138 CASE WHEN terrain_adresse_code_postal IS NULL AND
139 terrain_adresse_localite IS NULL THEN
140 ''
141 ELSE
142 TRIM(CONCAT(terrain_adresse_code_postal, ' ', terrain_adresse_localite, '<br/>')) END
143 ) as \"infos_localisation_terrain\",
144 to_char(depot_initial ,'DD/MM/YYYY') as \"depot_initial\",
145 to_char(date_decision ,'DD/MM/YYYY') as \"date_decision\",
146 to_char(date_validite ,'DD/MM/YYYY') as \"date_validite\",
147 to_char(date_chantier ,'DD/MM/YYYY') as \"date_chantier\",
148 to_char(date_achevement ,'DD/MM/YYYY') as \"date_achevement\",
149 dossier_autorisation_type_detaille.libelle as \"type_detaille\"
150 FROM
151 ".DB_PREFIXE."dossier_autorisation
152 LEFT JOIN
153 ".DB_PREFIXE."etat_dossier_autorisation as eda
154 ON
155 dossier_autorisation.etat_dossier_autorisation = eda.etat_dossier_autorisation
156 LEFT JOIN
157 ".DB_PREFIXE."etat_dossier_autorisation as edda
158 ON
159 dossier_autorisation.etat_dernier_dossier_instruction_accepte = edda.etat_dossier_autorisation
160 LEFT JOIN
161 ".DB_PREFIXE."lien_dossier_autorisation_demandeur
162 ON
163 dossier_autorisation.dossier_autorisation = lien_dossier_autorisation_demandeur.dossier_autorisation
164 LEFT JOIN
165 ".DB_PREFIXE."demandeur
166 ON
167 lien_dossier_autorisation_demandeur.demandeur = demandeur.demandeur AND
168 lien_dossier_autorisation_demandeur.petitionnaire_principal IS TRUE
169 LEFT JOIN
170 ".DB_PREFIXE."civilite
171 ON
172 civilite.civilite = demandeur.particulier_civilite OR civilite.civilite = demandeur.personne_morale_civilite
173 LEFT JOIN
174 ".DB_PREFIXE."dossier_autorisation_type_detaille
175 ON
176 dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
177 = dossier_autorisation.dossier_autorisation_type_detaille
178 WHERE
179 dossier_autorisation.dossier_autorisation = '".$idx."'";
180 $resDonneesDA = $this->f->db->query($sqlDonneesDA);
181 $this->f->addToLog(__METHOD__."() : db->query(\"".$sqlDonneesDA."\")", VERBOSE_MODE);
182 $this->f->isDatabaseError($resDonneesDA);
183 $rowDonneesDA = &$resDonneesDA->fetchRow(DB_FETCHMODE_ASSOC);
184
185 // Date du DAACT et DOC
186 $sqlDonneesDateDossiersDA = "SELECT
187 dossier_instruction_type.code as \"code\",
188 to_char(dossier.date_depot ,'DD/MM/YYYY') as \"date_depot\"
189 FROM ".DB_PREFIXE."dossier
190 LEFT JOIN
191 ".DB_PREFIXE."dossier_instruction_type
192 ON
193 dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
194 WHERE
195 dossier.dossier_autorisation='".$idx."' AND
196 (
197 dossier_instruction_type.code='DAACT' OR
198 dossier_instruction_type.code='DOC'
199 )
200 ORDER BY code desc;";
201 $resDonneesDateDossiersDA = $this->f->db->query($sqlDonneesDateDossiersDA);
202 $this->f->addToLog(__METHOD__."() : db->query(\"".$sqlDonneesDateDossiersDA."\")", VERBOSE_MODE);
203 $this->f->isDatabaseError($resDonneesDateDossiersDA);
204
205 //Récupération des données principales des données techniques rattachées au DA
206 $sqlPrincDonneesTechniques = "SELECT
207 donnees_techniques as \"donnees_techniques\" ,
208 CONCAT_WS(
209 '<br/>',
210 CASE WHEN co_projet_desc = '' THEN
211 NULL
212 ELSE
213 TRIM(co_projet_desc)
214 END,
215 CASE WHEN ope_proj_desc = '' THEN
216 NULL
217 ELSE
218 TRIM(ope_proj_desc)
219 END,
220 CASE WHEN am_projet_desc = '' THEN
221 NULL
222 ELSE
223 TRIM(am_projet_desc)
224 END,
225 CASE WHEN dm_projet_desc = '' THEN
226 NULL
227 ELSE
228 TRIM(dm_projet_desc)
229 END
230 ) as \"description_projet\",
231 REGEXP_REPLACE(CONCAT(
232 CASE
233 WHEN donnees_techniques.su_cstr_shon1 IS NULL
234 THEN ''
235 ELSE CONCAT('Habitation - ', donnees_techniques.su_cstr_shon1, ' m² <br/>')
236 END,
237 CASE
238 WHEN donnees_techniques.su_cstr_shon2 IS NULL
239 THEN ''
240 ELSE CONCAT('Hébergement hôtelier - ', donnees_techniques.su_cstr_shon2, ' m² <br/>')
241 END,
242 CASE
243 WHEN donnees_techniques.su_cstr_shon3 IS NULL
244 THEN ''
245 ELSE CONCAT('Bureaux - ', donnees_techniques.su_cstr_shon3, ' m² <br/>')
246 END,
247 CASE
248 WHEN donnees_techniques.su_cstr_shon4 IS NULL
249 THEN ''
250 ELSE CONCAT('Commerce - ', donnees_techniques.su_cstr_shon4, ' m² <br/>')
251 END,
252 CASE
253 WHEN donnees_techniques.su_cstr_shon5 IS NULL
254 THEN ''
255 ELSE CONCAT('Artisanat - ', donnees_techniques.su_cstr_shon5, ' m² <br/>')
256 END,
257 CASE
258 WHEN donnees_techniques.su_cstr_shon6 IS NULL
259 THEN ''
260 ELSE CONCAT('Industrie - ', donnees_techniques.su_cstr_shon6, ' m² <br/>')
261 END,
262 CASE
263 WHEN donnees_techniques.su_cstr_shon7 IS NULL
264 THEN ''
265 ELSE CONCAT('Exploitation agricole ou forestière - ', donnees_techniques.su_cstr_shon7, ' m² <br/>')
266 END,
267 CASE
268 WHEN donnees_techniques.su_cstr_shon8 IS NULL
269 THEN ''
270 ELSE CONCAT('Entrepôt - ', donnees_techniques.su_cstr_shon8, ' m² <br/>')
271 END,
272 CASE
273 WHEN donnees_techniques.su_cstr_shon9 IS NULL
274 THEN ''
275 ELSE CONCAT('Service public ou d''intérêt collectif - ', donnees_techniques.su_cstr_shon9, ' m²')
276 END
277 ), ' <br/>$', '') as \"surface\",
278 co_tot_ind_nb as \"nombre_logement_crees_individuel\",
279 co_tot_coll_nb as \"nombre_logement_crees_collectif\"
280 FROM
281 ".DB_PREFIXE."donnees_techniques
282 WHERE dossier_autorisation = '".$idx."'";
283 $resPrincDonneesTechniques = $this->f->db->query($sqlPrincDonneesTechniques);
284 $this->f->addToLog(__METHOD__."() : db->query(\"".$sqlPrincDonneesTechniques."\")", VERBOSE_MODE);
285 $this->f->isDatabaseError($resPrincDonneesTechniques);
286 $rowPrincDonneesTechniques = &$resPrincDonneesTechniques->fetchRow(DB_FETCHMODE_ASSOC);
287
288 //Historique des décisions du dossier d'autorisation
289 $sqlDonneesDecisionsDA = "SELECT
290 avis_decision.libelle as \"avis_libelle\",
291 dossier_instruction_type.libelle as \"di_libelle\",
292 civilite.code as \"code\",
293 CASE WHEN demandeur.qualite='particulier' THEN
294 TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
295 ELSE
296 TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
297 END as \"demandeur\",
298 to_char(dossier.date_decision ,'DD/MM/YYYY') as \"date_decision\"
299 FROM
300 ".DB_PREFIXE."dossier
301 LEFT JOIN
302 ".DB_PREFIXE."dossier_instruction_type
303 ON
304 dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
305 LEFT JOIN
306 ".DB_PREFIXE."lien_dossier_demandeur
307 ON
308 dossier.dossier = lien_dossier_demandeur.dossier
309 LEFT JOIN
310 ".DB_PREFIXE."demandeur
311 ON
312 lien_dossier_demandeur.demandeur = demandeur.demandeur
313 LEFT JOIN
314 ".DB_PREFIXE."avis_decision
315 ON
316 dossier.avis_decision = avis_decision.avis_decision
317 LEFT JOIN
318 ".DB_PREFIXE."civilite
319 ON
320 civilite.civilite = demandeur.particulier_civilite OR civilite.civilite = demandeur.personne_morale_civilite
321 WHERE
322 dossier.dossier_autorisation = '".$idx."' AND
323 dossier.avis_decision IS NOT NULL AND
324 demandeur.type_demandeur = 'petitionnaire'
325 ORDER BY dossier.date_decision ASC";
326 $resDonneesDecisionsDA = $this->f->db->query($sqlDonneesDecisionsDA);
327 $this->f->addToLog(__METHOD__."() : db->query(\"".$sqlDonneesDecisionsDA."\")", VERBOSE_MODE);
328 $this->f->isDatabaseError($resDonneesDecisionsDA);
329
330 //Les données des lots des dossiers d'autorisation
331 $sqlDonneesLotsDA = "SELECT
332 lot.libelle as \"libelle\", civilite.code as \"code\",
333 CASE WHEN demandeur.qualite='particulier' THEN
334 TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
335 ELSE
336 TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
337 END as \"demandeur\"
338 FROM ".DB_PREFIXE."lot
339 LEFT JOIN
340 ".DB_PREFIXE."lien_lot_demandeur
341 ON
342 lot.lot = lien_lot_demandeur.lot
343 LEFT JOIN
344 ".DB_PREFIXE."demandeur
345 ON
346 demandeur.demandeur = lien_lot_demandeur.demandeur
347 LEFT JOIN
348 ".DB_PREFIXE."civilite
349 ON
350 civilite.civilite = demandeur.particulier_civilite OR civilite.civilite = demandeur.personne_morale_civilite
351 WHERE lot.dossier_autorisation = '".$idx."' AND lien_lot_demandeur.petitionnaire_principal IS TRUE";
352 $resDonneesLotsDA = $this->f->db->query($sqlDonneesLotsDA);
353 $this->f->addToLog(__METHOD__."() : db->query(\"".$sqlDonneesLotsDA."\")", VERBOSE_MODE);
354 $this->f->isDatabaseError($resDonneesLotsDA);
355
356 //Données du dossier d'instruction en cours d'instruction
357 // Informations générales du dossier d'instruction
358 $sqlDonneesDI = "SELECT
359 dossier.dossier as \"dossier\", dossier.dossier_libelle as \"dossier_libelle\",
360 dossier_instruction_type.libelle as \"libelle_di\",
361 etat.libelle as \"etat\",
362 CASE WHEN demandeur.qualite='particulier' THEN
363 TRIM(CONCAT(civilite.code, ' ', demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
364 ELSE
365 TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
366 END as \"demandeur\"
367 FROM
368 ".DB_PREFIXE."dossier
369 LEFT JOIN
370 ".DB_PREFIXE."etat
371 ON
372 dossier.etat = etat.etat
373 LEFT JOIN
374 ".DB_PREFIXE."dossier_instruction_type
375 ON
376 dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
377 LEFT JOIN
378 ".DB_PREFIXE."lien_dossier_demandeur
379 ON
380 dossier.dossier = lien_dossier_demandeur.dossier
381 LEFT JOIN
382 ".DB_PREFIXE."demandeur
383 ON
384 lien_dossier_demandeur.demandeur = demandeur.demandeur AND
385 lien_dossier_demandeur.petitionnaire_principal IS TRUE
386 LEFT JOIN
387 ".DB_PREFIXE."civilite
388 ON
389 civilite.civilite = demandeur.particulier_civilite OR civilite.civilite = demandeur.personne_morale_civilite
390 WHERE
391 dossier.dossier_autorisation = '".$idx."' AND etat.statut = 'encours'";
392 $resDonneesDI = $this->f->db->query($sqlDonneesDI);
393 $this->f->addToLog(__METHOD__."() : db->query(\"".$sqlDonneesDI."\")", VERBOSE_MODE);
394 $this->f->isDatabaseError($resDonneesDI);
395 $rowDonneesDI = &$resDonneesDI->fetchRow(DB_FETCHMODE_ASSOC);
396
397 //Données techniques du dossier d'instruction en cours d'instruction
398 if ( $rowDonneesDI != NULL ){
399
400 //Date importante du di
401 $sqlDateImpDI = "SELECT
402 etat as \"etat_dossier\",
403 CASE WHEN dossier.incomplet_notifie IS TRUE AND dossier.incompletude IS TRUE
404 THEN to_char(dossier.date_limite_incompletude ,'DD/MM/YYYY')
405 ELSE to_char(dossier.date_limite ,'DD/MM/YYYY')
406 END as \"date_limite\"
407 FROM
408 ".DB_PREFIXE."dossier
409 WHERE
410 dossier.dossier_autorisation = '".$idx."' AND
411 version = (SELECT max(version) FROM ".DB_PREFIXE."dossier WHERE
412 dossier_autorisation = '".$idx."' )";
413 $resDateImpDI = $this->f->db->query($sqlDateImpDI);
414 $this->f->addToLog(__METHOD__."() : db->query(\"".$sqlDateImpDI."\")", VERBOSE_MODE);
415 $this->f->isDatabaseError($resDateImpDI);
416 $rowDateImpDI = &$resDateImpDI->fetchRow(DB_FETCHMODE_ASSOC);
417
418 //Récupération des données principales des données techniques rattachées au DI
419 $sqlPrincDonneesTechniquesDI = "SELECT
420 CONCAT_WS(
421 '<br/>',
422 CASE WHEN co_projet_desc = '' THEN
423 NULL
424 ELSE
425 TRIM(co_projet_desc)
426 END,
427 CASE WHEN ope_proj_desc = '' THEN
428 NULL
429 ELSE
430 TRIM(ope_proj_desc)
431 END,
432 CASE WHEN am_projet_desc = '' THEN
433 NULL
434 ELSE
435 TRIM(am_projet_desc)
436 END,
437 CASE WHEN dm_projet_desc = '' THEN
438 NULL
439 ELSE
440 TRIM(dm_projet_desc)
441 END
442 ) as \"description_projet\",
443 REGEXP_REPLACE(CONCAT(
444 CASE
445 WHEN donnees_techniques.su_cstr_shon1 IS NULL
446 THEN ''
447 ELSE CONCAT('Habitation - ', donnees_techniques.su_cstr_shon1, ' m² <br/>')
448 END,
449 CASE
450 WHEN donnees_techniques.su_cstr_shon2 IS NULL
451 THEN ''
452 ELSE CONCAT('Hébergement hôtelier - ', donnees_techniques.su_cstr_shon2, ' m² <br/>')
453 END,
454 CASE
455 WHEN donnees_techniques.su_cstr_shon3 IS NULL
456 THEN ''
457 ELSE CONCAT('Bureaux - ', donnees_techniques.su_cstr_shon3, ' m² <br/>')
458 END,
459 CASE
460 WHEN donnees_techniques.su_cstr_shon4 IS NULL
461 THEN ''
462 ELSE CONCAT('Commerce - ', donnees_techniques.su_cstr_shon4, ' m² <br/>')
463 END,
464 CASE
465 WHEN donnees_techniques.su_cstr_shon5 IS NULL
466 THEN ''
467 ELSE CONCAT('Artisanat - ', donnees_techniques.su_cstr_shon5, ' m² <br/>')
468 END,
469 CASE
470 WHEN donnees_techniques.su_cstr_shon6 IS NULL
471 THEN ''
472 ELSE CONCAT('Industrie - ', donnees_techniques.su_cstr_shon6, ' m² <br/>')
473 END,
474 CASE
475 WHEN donnees_techniques.su_cstr_shon7 IS NULL
476 THEN ''
477 ELSE CONCAT('Exploitation agricole ou forestière - ', donnees_techniques.su_cstr_shon7, ' m² <br/>')
478 END,
479 CASE
480 WHEN donnees_techniques.su_cstr_shon8 IS NULL
481 THEN ''
482 ELSE CONCAT('Entrepôt - ', donnees_techniques.su_cstr_shon8, ' m² <br/>')
483 END,
484 CASE
485 WHEN donnees_techniques.su_cstr_shon9 IS NULL
486 THEN ''
487 ELSE CONCAT('Service public ou d''intérêt collectif - ', donnees_techniques.su_cstr_shon9, ' m²')
488 END
489 ), ' <br/>$', '') as \"surface\",
490 co_tot_ind_nb as \"nombre_logement_crees_individuel\",
491 co_tot_coll_nb as \"nombre_logement_crees_collectif\"
492 FROM ".DB_PREFIXE."donnees_techniques
493 LEFT JOIN ".DB_PREFIXE."dossier
494 ON donnees_techniques.dossier_instruction = dossier.dossier
495 WHERE dossier.dossier = '".$rowDonneesDI['dossier']."'";
496 $resPrincDonneesTechniquesDI = $this->f->db->query($sqlPrincDonneesTechniquesDI);
497 $this->f->addToLog(__METHOD__."() : db->query(\"".$sqlPrincDonneesTechniquesDI."\")", VERBOSE_MODE);
498 $this->f->isDatabaseError($resPrincDonneesTechniquesDI);
499 $rowPrincDonneesTechniquesDI = &$resPrincDonneesTechniquesDI->fetchRow(DB_FETCHMODE_ASSOC);
500
501 //La liste des lots
502 $sqlDonneesLotsDI = "SELECT
503 lot.libelle as \"libelle\", civilite.code as \"code\",
504 CASE WHEN demandeur.qualite='particulier' THEN
505 TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
506 ELSE
507 TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
508 END as \"demandeur\"
509 FROM ".DB_PREFIXE."lot
510 LEFT JOIN
511 ".DB_PREFIXE."lien_lot_demandeur
512 ON
513 lot.lot = lien_lot_demandeur.lot
514 LEFT JOIN
515 ".DB_PREFIXE."dossier
516 ON
517 lot.dossier = dossier.dossier
518 LEFT JOIN
519 ".DB_PREFIXE."demandeur
520 ON
521 demandeur.demandeur = lien_lot_demandeur.demandeur
522 LEFT JOIN
523 ".DB_PREFIXE."civilite
524 ON
525 civilite.civilite = demandeur.particulier_civilite OR civilite.civilite = demandeur.personne_morale_civilite
526 WHERE dossier.dossier = '".$rowDonneesDI['dossier']."' AND lien_lot_demandeur.petitionnaire_principal IS TRUE";
527 $resDonneesLotsDI = $this->f->db->query($sqlDonneesLotsDI);
528 $this->f->addToLog(__METHOD__."() : db->query(\"".$sqlDonneesLotsDI."\")", VERBOSE_MODE);
529 $this->f->isDatabaseError($resDonneesLotsDI);
530 }
531
532 $da_liste_lots = '';
533 // Liste des lots du dossier d'autorisation
534 if ($resDonneesLotsDA->numrows() > 0 ){
535
536 // Entête de tableau
537 $header = '
538 <table class="tab-tab">
539 <thead>
540 <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
541 <th class="title col-0 firstcol">
542 <span class="name">
543 %s
544 </span>
545 </th>
546 <th class="title col-0 firstcol">
547 <span class="name">
548 %s
549 </span>
550 </th>
551 </tr>
552 </thead>
553 ';
554 $da_liste_lots .= sprintf($header, _('Libelle'), _('Demandeur'));
555
556 $da_liste_lots .= '<tbody>';
557
558 while($rowDonneesLotsDA = &$resDonneesLotsDA->fetchRow(DB_FETCHMODE_ASSOC)){
559
560 $content = '
561 <tr class="tab-data odd">
562 <td class="col-1 firstcol">
563 %s
564 </td>
565 <td class="col-1">
566 %s
567 </td>
568 </tr>
569 ';
570 $da_liste_lots .= sprintf($content, $rowDonneesLotsDA["libelle"], $rowDonneesLotsDA["code"]." ".$rowDonneesLotsDA["demandeur"]);
571 }
572
573 $da_liste_lots .= '</tbody></table>';
574 }
575 else {
576 $da_liste_lots .= _("Aucun lot lie a ce dossier d'autorisation.");
577 }
578
579 //Historique des décisions
580 $histo_decisions = '';
581 if ($resDonneesDecisionsDA->numrows() > 0 ){
582
583 // Entête de tableau
584 $header = '
585 <table class="tab-tab">
586 <thead>
587 <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
588 <th class="title col-0 firstcol">
589 <span class="name">
590 %s
591 </span>
592 </th>
593 <th class="title col-0 firstcol">
594 <span class="name">
595 %s
596 </span>
597 </th>
598 <th class="title col-0 firstcol">
599 <span class="name">
600 %s
601 </span>
602 </th>
603 <th class="title col-0 firstcol">
604 <span class="name">
605 %s
606 </span>
607 </th>
608 </tr>
609 </thead>
610 ';
611 $histo_decisions .= sprintf($header, _('Decision'), _('Type de dossier'),
612 _('Demandeur'), _('date_decision'));
613
614 $histo_decisions .= '<tbody>';
615
616 while($rowDonneesDecisionsDA = &$resDonneesDecisionsDA->fetchRow(DB_FETCHMODE_ASSOC)){
617
618 $content = '
619 <tr class="tab-data odd">
620 <td class="col-1 firstcol">
621 %s
622 </td>
623 <td class="col-1 firstcol">
624 %s
625 </td>
626 <td class="col-1">
627 %s
628 </td>
629 <td class="col-1">
630 %s
631 </td>
632 </tr>
633 ';
634 $histo_decisions .= sprintf($content, $rowDonneesDecisionsDA["avis_libelle"],
635 $rowDonneesDecisionsDA["di_libelle"],
636 $rowDonneesDecisionsDA["code"]." ".$rowDonneesDecisionsDA["demandeur"],
637 $rowDonneesDecisionsDA["date_decision"]);
638 }
639
640 $histo_decisions .= '</tbody></table>';
641 }
642 else {
643 $histo_decisions .= _("Aucune decision liee a ce dossier d'autorisation.");
644 }
645
646 // Affiche le bouton des données technique
647 $donnees_techniques = '';
648 if ($rowPrincDonneesTechniques['donnees_techniques'] != ''
649 && $display_cerfa === true) {
650
651 // Toutes les données du cerfa
652 $donnees_techniques = sprintf ("<a><span id=\"donnees_techniques_da\" class=\"om-prev-icon om-icon-16 om-form-button\"
653 onclick=\"popupIt('donnees_techniques',
654 '../scr/sousform.php?obj=donnees_techniques&action=3&idx=".$rowPrincDonneesTechniques['donnees_techniques']."'+
655 '&idxformulaire=".$idx."&retourformulaire=dossier_autorisation', 860, 'auto',
656 '', '');\"".
657 ">%s</span></a>", _("Cliquez pour voir les donnees techniques"));
658 }
659
660 // Si un DI est en cours d'instruction
661 if ($resDonneesDI->numrows() > 0 ) {
662
663 // Liste des lots du dossier d'instruction en cours
664 $liste_lots = '';
665 if ($resDonneesLotsDI->numrows() > 0 ){
666
667 // Entête de tableau
668 $header = '
669 <table class="tab-tab">
670 <thead>
671 <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
672 <th class="title col-0 firstcol">
673 <span class="name">
674 %s
675 </span>
676 </th>
677 <th class="title col-0 firstcol">
678 <span class="name">
679 %s
680 </span>
681 </th>
682 </tr>
683 </thead>
684 ';
685 $liste_lots .= sprintf($header, _('Libelle'), _('Demandeur'));
686
687 $liste_lots .= '<tbody>';
688
689 while($rowDonneesLotsDI = &$resDonneesLotsDI->fetchRow(DB_FETCHMODE_ASSOC)){
690
691 $content = '
692 <tr class="tab-data odd">
693 <td class="col-1 firstcol">
694 %s
695 </td>
696 <td class="col-1">
697 %s
698 </td>
699 </tr>
700 ';
701 $liste_lots .= sprintf($content, $rowDonneesLotsDI["libelle"], $rowDonneesLotsDI["code"]." ".$rowDonneesLotsDI["demandeur"]);
702 }
703
704 $liste_lots .= '</tbody></table>';
705 }
706 else {
707 $liste_lots .= _("Aucun lot lie a ce dossier d'instruction.");
708 }
709 }
710
711 //
712 if ($bouton_retour !== false) {
713 //
714 printf("<div class=\"formControls\">%s</div>", $bouton_retour);
715 } else {
716 //
717 printf("<h3>%s</h3>", $rowDonneesDA["dossier_autorisation_libelle"]);
718 }
719
720 printf("<div class=\"formulaire\"><form method=\"post\" id=\"dossier_autorisation\" action=\"#\" class=\"formEntete ui-corner-all\">");
721
722 //Le formualaire n'a pas été validé
723 $validation = 1;
724 //
725 $champs = array("dossier_autorisation","dossier_autorisation_libelle",
726 "type_detaille", "da_etat", "da_demandeur", "infos_localisation_terrain",
727 "depot_initial", "date_decision", "date_validite",
728 "date_depot_DAACT", "date_depot_DOC", "da_description_projet",
729 "surface", "da_nombre_logement_crees_individuel",
730 "da_nombre_logement_crees_collectif", "da_liste_lots", "histo_decisions", "donnees_techniques");
731
732 // Si un DI est en cours d'instruction
733 if ($resDonneesDI->numrows() > 0 ) {
734 //
735 $champs[] = "dossier";
736 $champs[] = "dossier_libelle";
737 $champs[] = "libelle_di";
738 $champs[] = "etat";
739 $champs[] = "demandeur";
740 $champs[] = "date_limite";
741 $champs[] = "description_projet";
742 $champs[] = "surface";
743 $champs[] = "nombre_logement_crees_individuel";
744 $champs[] = "nombre_logement_crees_collectif";
745 $champs[] = "liste_lots";
746 }
747
748 //Création d'un nouvel objet de type formulaire
749 $form = new formulaire(null, $validation, 3, $champs);
750
751 //Configuration des types de champs
752 foreach ($champs as $key) {
753 $form->setType($key, 'static');
754 }
755
756 //Le numéro de dossier d'instruction est caché, on affiche celui
757 //qui est formatté
758 $form->setType('dossier_autorisation', 'hidden');
759
760 //
761 $form->setType('da_liste_lots', 'htmlstatic');
762 $form->setType('histo_decisions', 'htmlstatic');
763 $form->setType('donnees_techniques', 'htmlstatic');
764
765 //Configuration des libellés
766 $form->setLib("dossier_autorisation", _("dossier_autorisation"));
767 $form->setLib("dossier_autorisation_libelle", _("No dossier autorisation"));
768 $form->setLib("type_detaille", _("Type d'autorisation"));
769 $form->setLib("da_etat", _("etat"));
770 $form->setLib("da_demandeur", _("Demandeur principal"));
771 $form->setLib("infos_localisation_terrain", _("infos_localisation_terrain"));
772 $form->setLib("depot_initial", _("Depot initial"));
773 $form->setLib("date_decision", _("Decision initiale"));
774 $form->setLib("date_validite", _("Date de validite"));
775 $form->setLib("date_depot_DAACT", _("Date de depot de la DAACT"));
776 $form->setLib("date_depot_DOC", _("Date de depot de la DOC"));
777 $form->setLib("da_description_projet", _("description_projet"));
778 $form->setLib("surface", _("Surface creee"));
779 $form->setLib("da_nombre_logement_crees_individuel", _("nombre_logement_crees_individuel"));
780 $form->setLib("da_nombre_logement_crees_collectif", _("nombre_logement_crees_collectif"));
781 $form->setLib("da_liste_lots", "");
782 $form->setLib("histo_decisions", "");
783 $form->setLib("donnees_techniques", "");
784
785 //Configuration des données
786 $form->setVal("dossier_autorisation", $idx);
787 $form->setVal("dossier_autorisation_libelle", $rowDonneesDA["dossier_autorisation_libelle"]);
788 $form->setVal("type_detaille", $rowDonneesDA["type_detaille"]);
789 $form->setVal("da_etat", $rowDonneesDA["etat"]);
790 $form->setVal("da_demandeur", $rowDonneesDA["demandeur"]);
791 $form->setVal("infos_localisation_terrain", ($rowDonneesDA["infos_localisation_terrain"]!=="")?$rowDonneesDA["infos_localisation_terrain"]:"-");
792 $form->setVal("depot_initial", ($rowDonneesDA["depot_initial"]!=="")?$rowDonneesDA["depot_initial"]:"-");
793 $form->setVal("date_decision", ($rowDonneesDA["date_decision"]!=="")?$rowDonneesDA["date_decision"]:"-");
794 //On met des valeurs par défaut dans ces deux champs
795 $form->setVal("date_depot_DAACT", ($rowDonneesDA["date_achevement"]!=="")?$rowDonneesDA["date_achevement"]:"-");
796 $form->setVal("date_depot_DOC", ($rowDonneesDA["date_chantier"]!=="")?$rowDonneesDA["date_chantier"]:"-");
797 $form->setVal("da_description_projet", ($rowPrincDonneesTechniques["description_projet"]!=="")?$rowPrincDonneesTechniques["description_projet"]:"-");
798 $form->setVal("surface",($rowPrincDonneesTechniques["surface"]!=="")?$rowPrincDonneesTechniques["surface"]:"-");
799 $form->setVal("da_nombre_logement_crees_individuel", ($rowPrincDonneesTechniques["nombre_logement_crees_individuel"]!=="")?$rowPrincDonneesTechniques["nombre_logement_crees_individuel"]:"-");
800 $form->setVal("da_nombre_logement_crees_collectif", ($rowPrincDonneesTechniques["nombre_logement_crees_collectif"]!=="")?$rowPrincDonneesTechniques["nombre_logement_crees_collectif"]:"-");
801 //On met les bonnes valeurs dans les champs s'il y en a
802 $val = "";
803 while ($rowDonneesDateDossiersDA = &$resDonneesDateDossiersDA->fetchRow(DB_FETCHMODE_ASSOC)){
804 $val = ($rowDonneesDateDossiersDA["date_depot"]!=="")?$rowDonneesDateDossiersDA["date_depot"]:"-";
805 if ( strcmp($rowDonneesDateDossiersDA['code'], 'DOC') == 0 ){
806 $form->setVal("date_depot_DOC", $val);
807 }
808 elseif(strcmp($rowDonneesDateDossiersDA['code'], 'DAACT') == 0){
809 $form->setVal("date_depot_DAACT", $val);
810 }
811 }
812 $form->setVal("date_validite", ($rowDonneesDA["date_validite"]!=="")?$rowDonneesDA["date_validite"]:"-");
813 $form->setVal("da_liste_lots", $da_liste_lots);
814 $form->setVal("histo_decisions", $histo_decisions);
815 $form->setVal("donnees_techniques", $donnees_techniques);
816
817 // Si un DI est en cours d'instruction
818 if ($resDonneesDI->numrows() > 0 ) {
819 //Le numéro de dossier d'instruction est caché, on affiche
820 //celui qui est formatté
821 $form->setType('dossier', 'hidden');
822
823 //
824 $form->setType('liste_lots', 'htmlstatic');
825
826 //Configuration des libellés
827 $form->setLib("dossier", _("dossier"));
828 $form->setLib("dossier_libelle", _("dossier_libelle"));
829 $form->setLib("libelle_di", _("libelle_di"));
830 $form->setLib("etat", _("etat"));
831 $form->setLib("demandeur", _("Demandeur principal"));
832 $form->setLib("date_limite", _("Date limite"));
833 $form->setLib("description_projet", _("description_projet"));
834 $form->setLib("surface", _("Surface creee"));
835 $form->setLib("nombre_logement_crees_individuel", _("nombre_logement_crees_individuel"));
836 $form->setLib("nombre_logement_crees_collectif", _("nombre_logement_crees_collectif"));
837 $form->setLib("liste_lots", "");
838
839 //Configuration des données
840 $form->setVal("dossier", $rowDonneesDI["dossier"]);
841 $form->setVal("dossier_libelle", $rowDonneesDI["dossier_libelle"]);
842 $form->setVal("libelle_di", $rowDonneesDI["libelle_di"]);
843 $form->setVal("etat", $rowDonneesDI["etat"]);
844 $form->setVal("demandeur", $rowDonneesDI["demandeur"]);
845 $form->setVal("date_limite", $rowDateImpDI["date_limite"]);
846 $form->setVal("description_projet", ($rowPrincDonneesTechniquesDI["description_projet"]!=="")?$rowPrincDonneesTechniquesDI["description_projet"]:"-");
847 $form->setVal("surface",($rowPrincDonneesTechniquesDI["surface"]!=="")?$rowPrincDonneesTechniquesDI["surface"]:"-");
848 $form->setVal("nombre_logement_crees_individuel", ($rowPrincDonneesTechniquesDI["nombre_logement_crees_individuel"]!=="")?$rowPrincDonneesTechniquesDI["nombre_logement_crees_individuel"]:"-");
849 $form->setVal("nombre_logement_crees_collectif", ($rowPrincDonneesTechniquesDI["nombre_logement_crees_collectif"]!=="")?$rowPrincDonneesTechniquesDI["nombre_logement_crees_collectif"]:"-");
850 $form->setVal("liste_lots", $liste_lots);
851 }
852
853 //
854 $form->setBloc("dossier_autorisation", "D", "", "col_6");
855
856 // Fieldset des dossiers en cours de validité
857 $form->setFieldset("dossier_autorisation", "D", _("En cours de validite"), "");
858
859 //Données générales
860 $form->setBloc("dossier_autorisation", "D", _("Donnees generales"), "col_12");;
861 $form->setBloc("infos_localisation_terrain", "F");
862
863 //Dates importantes
864 $form->setBloc("depot_initial", "D", _("Dates importantes"), "col_12");
865 $form->setBloc("date_depot_DOC", "F");
866
867 //Principales données techniques
868 $form->setBloc("da_description_projet", "D", _("Principales donnees techniques"), "col_12");
869 $form->setBloc("da_nombre_logement_crees_collectif", "F");
870
871 //
872 $form->setBloc("da_liste_lots", "DF", _("Liste des lots"), "col_12");
873
874 //
875 $form->setBloc("histo_decisions", "DF", _("Historique des decisions"), "col_12");
876
877 if ($rowPrincDonneesTechniques['donnees_techniques'] != ''
878 && $display_cerfa === true) {
879 //
880 $form->setBloc("donnees_techniques", "DF", _("Toutes les donnees du CERFA"), "col_12");
881 }
882
883 //
884 $form->setFieldset("donnees_techniques", "F", "");
885
886 //
887 $form->setBloc("donnees_techniques", "F");
888
889 // Si un DI est en cours d'instruction
890 if ($resDonneesDI->numrows() > 0 ) {
891
892 //
893 $form->setBloc("dossier", "D", "", "col_6");
894
895 //
896 $form->setFieldset("dossier", "D", _("En cours d'instruction"), " ");
897
898 //Données générales
899 $form->setBloc("dossier", "D", _("Donnees generales"), "col_12");
900 $form->setBloc("demandeur", "F");
901
902 //Si statut dossier différent d'incomplet
903 if ($rowDateImpDI["etat_dossier"] != 'incomplet'
904 && $rowDateImpDI["etat_dossier"] != 'incomplet_notifie') {
905
906 //Dates importantes
907 $form->setBloc("date_limite", "D", _("Dates importantes"), "col_12");
908 $form->setBloc("date_limite", "F");
909 }
910
911 //Principales données techniques
912 $form->setBloc("description_projet", "D", _("Principales données techniques"), "col_12");
913 $form->setBloc("nombre_logement_crees_collectif", "F");
914
915 //
916 $form->setBloc("liste_lots", "DF", _("Liste des lots"), "col_12");
917
918 //
919 $form->setFieldset("liste_lots", "F", "");
920
921 //
922 $form->setBloc("liste_lots", "F");
923 }
924
925 //
926 $form->afficher($champs, $validation, false, false);
927
928 printf("</form>");
929
930 if ($bouton_retour !== false) {
931 //
932 printf("%s</div>",$bouton_retour);
933 }
934 }
935
936
937 /**
938 * VIEW - view_consulter
939 *
940 * Cette vue permet d'afficher l'interface spécifique de consultation
941 * des dossiers d'autorisation.
942 *
943 * @return void
944 */
945 function view_consulter() {
946 // Vérification de l'accessibilité sur l'élément
947 $this->checkAccessibility();
948 //
949 $idx = $this->f->get_submitted_get_value('idx');
950 $idz = $this->f->get_submitted_get_value('idz');
951 $retour = $this->f->get_submitted_get_value('retour');
952 $premier = $this->f->get_submitted_get_value('premier');
953 $advs_id = $this->f->get_submitted_get_value('advs_id');
954 $recherche = $this->f->get_submitted_get_value('recherche');
955 $tricol = $this->f->get_submitted_get_value('tricol');
956 $selectioncol = $this->f->get_submitted_get_value('selectioncol');
957 $valide = $this->f->get_submitted_get_value('valide');
958 $retourformulaire = $this->f->get_submitted_get_value('retourformulaire');
959 $retourtab = $this->f->get_submitted_get_value('retourtab');
960 // Permet de composer le bouton retour avec le tableau depuis lequel la page a été ouverte
961 if ($retourtab == "") {
962 $retourtab = "dossier_autorisation";
963 }
964 // Si l'identifiant du dossier d'autorisation a été fourni
965 if (!is_null($idx)) {
966
967 // Configuration du bouton retour
968 if($retour != "" AND $retour != "tab") {
969 $bouton_retour = "<a class=\"retour\"".
970 " href=\"../scr/form.php?obj=dossier_instruction&idx=".$retour."&action=3".
971 "&premier=".$premier."&tricol=".$tricol."&recherche=".$recherche.
972 "&selectioncol=".$selectioncol."&retourformulaire=".$retourformulaire."\">".
973 _("Retour")."</a>";
974 } else {
975 $bouton_retour = "<a class=\"retour\"
976 href=\"../scr/tab.php?obj=".$retourtab."&premier=".$premier."&tricol=".$tricol.
977 "&recherche=".$recherche."&selectioncol=".$selectioncol."&retourformulaire=".$retourformulaire.
978 "&advs_id=".$advs_id."\">"._("Retour")."</a>";
979 }
980
981 // Affiche la fiche complète du dossier d'autorisation
982 $this->display_dossier_autorisation_data($idx, $bouton_retour);
983 }
984 }
985
986
987 /**
988 * Affiche la fiche du dossier d'autorisation pour les utilisateurs anonymes.
989 *
990 * @param boolean $content_only Affiche le contenu seulement.
991 *
992 * @return void
993 */
994 public function view_consulter_anonym($content_only = false) {
995
996 // Par défaut on considère qu'on va afficher le formulaire
997 $idx = 0;
998 // Flag d'erreur
999 $error = false;
1000 // Message d'erreur
1001 $message = '';
1002
1003 // Paramètres POST
1004 $validation = $this->f->get_submitted_post_value('validation');
1005 //
1006 $dossier = $this->f->get_submitted_post_value('dossier');
1007 $dossier = $this->f->db->escapeSimple($dossier);
1008 $dossier = preg_replace('/\s+/', '', $dossier);
1009 //
1010 $cle_acces_citoyen = $this->f->get_submitted_post_value('cle_acces_citoyen_complete');
1011 $cle_acces_citoyen = $this->f->db->escapeSimple($cle_acces_citoyen);
1012 //
1013 $timestamp_generation_formulaire = $this->f->get_submitted_post_value('timestamp_generation_formulaire');
1014
1015 // Si au moins un des champs n'est pas renseignés
1016 if ($error !== true
1017 && $validation !== null
1018 && (($dossier === null || $dossier == '')
1019 || ($cle_acces_citoyen === null || $cle_acces_citoyen == ''))) {
1020 //
1021 $message = _("Tous les champs doivent etre remplis.");
1022 $error = true;
1023 }
1024
1025 // Si le formulaire est expiré
1026 if ($error !== true
1027 && $validation !== null
1028 && time() >= strtotime('+5 minutes', $timestamp_generation_formulaire)) {
1029 //
1030 $message = _("Le formulaire a expire. Veuillez recharger la page.");
1031 $error = true;
1032 }
1033
1034 // Si les valeurs renseignées semblent correctes
1035 if ($error !== true
1036 && $validation !== null
1037 && (strlen($dossier) < 15 || strlen($cle_acces_citoyen) != 19)) {
1038 //
1039 $message = _("Le numero de dossier ou la cle d'acces n'est pas valide.");
1040 $error = true;
1041 }
1042
1043 // S'il n'y a pas eu d'erreur
1044 if ($error !== true
1045 && $validation !== null) {
1046 // Vérifie le couple numéro de dossier et clé d'accès citoyen
1047 $idx = $this->verify_citizen_access_portal_credentials($dossier, $cle_acces_citoyen);
1048
1049 // Si le couple n'est pas correct
1050 if ($idx === false) {
1051 //
1052 $message = _("Le numero de dossier ou la cle d'acces n'est pas valide.");
1053 $error = true;
1054 }
1055 }
1056
1057 // S'il n'y a pas d'erreur et que le formulaire a été validé
1058 if ($error !== true && $validation !== null) {
1059 // On affiche la fiche d'information du dossier d'autorisation
1060 $this->display_dossier_autorisation_data($idx, false, false);
1061 } else {
1062 // Sinon on affiche le formulaire d'accès au portail citoyen
1063 $this->display_citizen_access_portal_form($message, $content_only);
1064 }
1065 }
1066
1067
1068 /**
1069 * Vérifie le couple dossier/clé d'accès dans la base de données.
1070 *
1071 * @param string $dossier Le numéro du DI ou DA, sans espaces.
1072 * @param string $citizen_access_key La clé d'accès.
1073 *
1074 * @return string Identifiant du DA sinon 0.
1075 */
1076 public function verify_citizen_access_portal_credentials($dossier, $citizen_access_key) {
1077
1078 //
1079 $numero_da = "SELECT dossier_autorisation.dossier_autorisation
1080 FROM ".DB_PREFIXE."dossier LEFT JOIN ".DB_PREFIXE."dossier_autorisation ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
1081 WHERE (dossier.dossier = '".$dossier."' OR
1082 dossier_autorisation.dossier_autorisation = '".$dossier."') AND
1083 dossier_autorisation.cle_acces_citoyen = '".$citizen_access_key."'";
1084 $resDossier = $this->f->db->getOne($numero_da);
1085 $this->f->addToLog(__METHOD__."() : db->query(\"".$numero_da."\")", VERBOSE_MODE);
1086 $this->f->isDatabaseError($resDossier);
1087
1088 // Si aucun dossier n'existe avec la clé fournie, on renvoie faux
1089 if ($resDossier == null) {
1090 return false;
1091 }
1092 //
1093 return $resDossier;
1094 }
1095
1096
1097 /**
1098 * Affiche le formulaire d'accès au portail citoyen.
1099 *
1100 * @param string $message Message d'erreur.
1101 * @param boolean $content_only Affiche le contenu seulement.
1102 *
1103 * @return void
1104 */
1105 public function display_citizen_access_portal_form($message, $content_only) {
1106
1107 // Ajoute le paramètre content_only à l'url permettant de ne pas afficher
1108 // le header et le footer
1109 $param_get_content_only = '';
1110 if ($content_only === true) {
1111 $param_get_content_only = '?content_only=true';
1112 }
1113
1114 // Affichage du message d'erreur
1115 if (isset($message) && $message != "") {
1116 printf('<div class="alert alert-danger" role="alert">%s</div>', $message);
1117 }
1118
1119 // Ouverture du formulaire
1120 printf("<div class=\"formulaire\"><form class=\"form-signin\" method=\"POST\" id=\"acces_portail_citoyen\" action=\"citizen.php%s\">", $param_get_content_only);
1121
1122 $champs = array('dossier', 'cle_acces_citoyen_split', 'timestamp_generation_formulaire', 'cle_acces_citoyen_complete');
1123
1124 //
1125 require_once "../obj/om_formulaire.class.php";
1126 $form = new om_formulaire(null, 0, 0, $champs);
1127 $form->setType('dossier', 'text');
1128 $form->setType('cle_acces_citoyen_split', 'citizen_access_key');
1129 $form->setType('cle_acces_citoyen_complete', 'hidden');
1130 $form->setType('timestamp_generation_formulaire', 'hidden');
1131
1132 $form->setTaille("dossier", 30);
1133 $form->setTaille('cle_acces_citoyen_complete', 19);
1134 $form->setTaille('timestamp_generation_formulaire', 20);
1135
1136 $form->setMax("dossier", 30);
1137 $form->setMax('cle_acces_citoyen_complete', 19);
1138 $form->setMax('timestamp_generation_formulaire', 20);
1139
1140 $form->setLib('dossier', _('N° de dossier'));
1141 $form->setLib('cle_acces_citoyen_split', _('cle_acces'));
1142 $form->setLib('cle_acces_citoyen_complete', '');
1143 $form->setLib('timestamp_generation_formulaire', '');
1144
1145 $form->setVal('timestamp_generation_formulaire', time());
1146
1147 $form->setBloc("dossier", "D", "", "group");
1148 $form->setBloc("cle_acces_citoyen_split", "F");
1149 $form->afficher($champs, 0, false, false);
1150
1151 // Bouton de validation
1152 echo "<div class=\"formControls\">";
1153 echo "<input type=\"submit\" class=\"btn btn-lg btn-primary btn-block\" value=\""._("Valider")."\" name=\"validation\" />";
1154 echo "</div>";
1155 printf("</form>");
1156
1157 // Fermeture du div formulaire
1158 printf("</div>");
1159
1160 }
1161
1162
1163 /**
1164 * Assure que la date passee par reference soit en
1165 * format attendu par la fonction dateDB du fichier
1166 * core/om_dbform.class.php. Change le format de la
1167 * date si necessaire.
1168 * @param $string $field Le date dans format DB, ou
1169 * celui attendu par setvalF
1170 */
1171 private function changeDateFormat(&$field) {
1172 if (preg_match('/([0-9]{4})-([0-9]{2})-([0-9]{2})/',
1173 $field, $matches)) {
1174 $field = $matches[3].'/'.$matches[2].'/'.$matches[1];
1175 }
1176 }
1177
1178 function setvalF($val) {
1179 // verifie que les dates envoyes au parent::setvalF sont ont
1180 // bon format, et change le format si necessaire
1181 $this->changeDateFormat($val['erp_date_ouverture']);
1182 $this->changeDateFormat($val['erp_date_arrete_decision']);
1183
1184 parent::setvalF($val);
1185
1186 // si la valeur d'erp_arrete_decision n'etait pas set, laisse elle a null
1187 if ($val['erp_arrete_decision'] == null) {
1188 $this->valF['erp_arrete_decision'] = null;
1189 }
1190 // si la valeur d'erp_ouvert n'etait pas set, laisse elle a null
1191 if ($val['erp_ouvert'] == null) {
1192 $this->valF['erp_ouvert'] = null;
1193 }
1194 }
1195
1196 /**
1197 * Méthode permettant de définir des valeurs à envoyer en base après
1198 * validation du formulaire d'ajout.
1199 * @param array $val tableau des valeurs retournées par le formulaire
1200 */
1201 function setValFAjout($val) {
1202
1203 // On récupère les paramètres de la collectivité concernée
1204 // par la demande.
1205 $collectivite_parameters = $this->f->getCollectivite($this->valF['om_collectivite']);
1206
1207 // Le paramètre 'departement' est obligatoire si il n'est pas présent
1208 // dans le tableau des paramètres alors on stoppe le traitement.
1209 if (!isset($collectivite_parameters['departement'])) {
1210 $this->f->addToLog(
1211 __METHOD__."(): ERROR om_parametre 'departement' inexistant.",
1212 DEBUG_MODE
1213 );
1214 return false;
1215 }
1216 $departement = $collectivite_parameters['departement'];
1217
1218 // Le paramètre 'commune' est obligatoire si il n'est pas présent
1219 // dans le tableau des paramètres alors on stoppe le traitement.
1220 if (!isset($collectivite_parameters['commune'])) {
1221 $this->f->addToLog(
1222 __METHOD__."(): ERROR om_parametre 'commune' inexistant.",
1223 DEBUG_MODE
1224 );
1225 return false;
1226 }
1227 $commune = $collectivite_parameters['commune'];
1228
1229 // Récupération du type de dossier ou série
1230 $sql = "SELECT da_t.code
1231 FROM ".DB_PREFIXE."dossier_autorisation_type as da_t
1232 INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille as da_t_d
1233 ON da_t.dossier_autorisation_type=da_t_d.dossier_autorisation_type
1234 WHERE da_t_d.dossier_autorisation_type_detaille=".
1235 $val['dossier_autorisation_type_detaille'].";";
1236 //
1237 $da_type_code = $this->db->getone($sql);
1238 $this->addToLog("setValFAjout(): db->getone(\"".$sql."\")", VERBOSE_MODE);
1239 database::isError($da_type_code);
1240
1241 //
1242 $annee = date('y', strtotime($this->valF["depot_initial"]));
1243
1244 // Récupération de la division de l'instructeur
1245 $division_instructeur = $this->get_instructeur_division_for_numero_dossier();
1246 // Récupération du numéro du dossier
1247 $numero_dossier = $this->createNumeroDossier(
1248 $da_type_code,
1249 $annee,
1250 $departement,
1251 $commune
1252 );
1253 if($numero_dossier === false) {
1254 return false;
1255 }
1256
1257 /// IDENTIFIANT DU DOSSIER
1258 // PC 013 055 12 00001
1259 $this->valF[$this->clePrimaire] =
1260 $da_type_code.$departement.$commune.$annee.$division_instructeur.$numero_dossier;
1261
1262 // Identifiant du dossier d'autorisation lisible
1263 // Ex : DP 013055 13 00002
1264 $this->valF["dossier_autorisation_libelle"] =
1265 $da_type_code." ".$departement.$commune." ".$annee." ".$division_instructeur.$numero_dossier;
1266
1267 }
1268
1269 /**
1270 * Récupère le code de la division pour le numéro du dossier.
1271 * Par défaut retourne 0.
1272 *
1273 * @return mixed Division de l'instructeur ou 0
1274 */
1275 function get_instructeur_division_for_numero_dossier() {
1276
1277 // Récupère le paramètre numero_dossier_division_instructeur
1278 $option = $this->f->getParameter("option_instructeur_division_numero_dossier");
1279
1280 // Si l'option n'est pas activée
1281 if ($option != 'true') {
1282
1283 // Retourne la valeur par défaut 0
1284 return 0;
1285 }
1286
1287 // Instancie la classe dossier pour utiliser les fonctions de
1288 // récupération de l'instructeur automatiquement
1289 require_once '../obj/dossier.class.php';
1290 $dossier = new dossier(0, $this->db, false);
1291
1292 // Récupère le quartier et l'arrondissement depuis les ref cadastrales
1293 $quartierArrondissement = $dossier->getQuartierArrondissement($this->valF['terrain_references_cadastrales']);
1294 //
1295 $quartier = null;
1296 $arrondissement = null;
1297 if ($quartierArrondissement != NULL) {
1298 //
1299 $quartier = $quartierArrondissement['quartier'];
1300 $arrondissement = $quartierArrondissement['arrondissement'];
1301 }
1302 // Récupère la section depuis les ref cadastrales
1303 $section = $dossier->getSection($this->valF['terrain_references_cadastrales']);
1304
1305 // Récupère l'instructeur et la division qui seront affectés
1306 // automatiquement
1307 $instructeurDivision = $dossier->getInstructeurDivision($quartier, $arrondissement, $section, $this->valF['dossier_autorisation_type_detaille'], $this->valF['om_collectivite']);
1308
1309 // Si aucun instructeur est affecté automatiquement
1310 if ($instructeurDivision == null) {
1311
1312 // Retourne la valeur par défaut 0
1313 return 0;
1314 }
1315
1316 // Récupère la division
1317 $division = $instructeurDivision['division'];
1318
1319 // Récupère le code de la division
1320 require_once '../obj/division.class.php';
1321 $division_instance = new division($division, $this->db, false);
1322 $division_code = $division_instance->getVal("code");
1323
1324 // Retourne le libellé de la division
1325 return $division_code;
1326 }
1327
1328 // {{{
1329 // getter
1330 function getValIdDemandeur() {
1331 return $this->valIdDemandeur;
1332 }
1333 // setter
1334 function setValIdDemandeur($valIdDemandeur) {
1335 $this->valIdDemandeur = $valIdDemandeur;
1336 }
1337 // }}}
1338
1339 /**
1340 * Retourne le numéro suivant de la séquence des DA identifiées par les
1341 * quatre paramètres (PC, 15, 013, 055).
1342 *
1343 *
1344 * @param string $datc Code du type de dossier d'autorisation.
1345 * @param string $annee Année de la date de dépôt initial.
1346 * @param string $dep Code département.
1347 * @param string $com Code commune.
1348 *
1349 * @return string numéro de dossier ou false.
1350 */
1351 function createNumeroDossier($datc, $annee, $dep, $com) {
1352 /**
1353 * On vérifie la validité des trois paramètres.
1354 */
1355 // Vérification du code du type de dossier d'autorisation.
1356 if (!is_string($datc)) {
1357 // Logger
1358 $this->addToLog(
1359 __METHOD__.'(): parametre datc = '.var_export($datc, true),
1360 DEBUG_MODE
1361 );
1362 // Stop le traitement
1363 return false;
1364 }
1365 // Vérification du code département.
1366 if ($dep == null
1367 || !is_numeric($dep)
1368 || intval($dep) == 0
1369 || count($dep) > 3) {
1370 // Logger
1371 $this->addToLog(
1372 __METHOD__.'(): om_parametre departement = '.var_export($dep, true),
1373 DEBUG_MODE
1374 );
1375 // Stop le traitement
1376 return false;
1377 }
1378 // Vérification du code commune.
1379 if ($com == null
1380 || !is_numeric($com)
1381 || intval($com) == 0
1382 || count($com) > 3) {
1383 // Logger
1384 $this->addToLog(
1385 __METHOD__.'(): om_parametre commune = '.var_export($com, true),
1386 DEBUG_MODE
1387 );
1388 // Stop le traitement
1389 return false;
1390 }
1391
1392 /**
1393 * On compose les identifiants qui composent la séquence.
1394 */
1395 // Clé unique.
1396 // Exemple : pc_15_013_055
1397 $unique_key = sprintf('%s_%s_%s_%s', strtolower($datc), $annee, $dep, $com);
1398 // Nom de la table représentant la séquence pour appel via la méthode
1399 // database::nextId() qui prend un nom de séquence sans son suffixe
1400 // '_seq'.
1401 // Exemple : openads.dossier_pc_15_013_055
1402 $table_name = sprintf('%sdossier_%s', DB_PREFIXE, $unique_key);
1403 // Nom de la séquence avec son suffixe 'seq'.
1404 // Exemple : openads.dossier_pc_15_013_055_seq
1405 $sequence_name = sprintf('%s_seq', $table_name);
1406
1407 /**
1408 * On interroge la base de données pour vérifier si la séquence existe
1409 * ou non. Si il y a un retour à l'exécution de la requête alors la
1410 * séquence existe et si il n'y en a pas alors la séquence n'existe
1411 * pas.
1412 */
1413 $query_sequence_exists = sprintf(
1414 'SELECT
1415 *
1416 FROM
1417 pg_class
1418 WHERE
1419 relkind = \'S\'
1420 AND oid::regclass::text = \'%s\'
1421 ;',
1422 $sequence_name
1423 );
1424 $res_sequence_exists = $this->f->db->getone($query_sequence_exists);
1425 $this->addToLog(
1426 __METHOD__.'(): db->getone("'.$res_sequence_exists.'");',
1427 VERBOSE_MODE
1428 );
1429 if ($this->f->isDatabaseError($res_sequence_exists, true) === true) {
1430 // Appel de la methode de recuperation des erreurs
1431 $this->erreur_db(
1432 $res_sequence_exists->getDebugInfo(),
1433 $res_sequence_exists->getMessage(),
1434 'dossier_autorisation'
1435 );
1436 // Stop le traitement
1437 return false;
1438 }
1439
1440 /**
1441 * Si la séquence n'existe pas, alors on la cré. Puis si des DA
1442 * existent déjà avec cette clé unique alors on initialise cette
1443 * séquence avec le numéro du dernier DA correcspondant.
1444 */
1445 if ($res_sequence_exists === null) {
1446
1447 // Création de la sequence si elle n'existe pas
1448 $res = $this->db->createSequence($table_name);
1449 $this->f->addToLog(
1450 __METHOD__.'(): db->createSequence("'.$table_name.'");',
1451 VERBOSE_MODE
1452 );
1453 if ($this->f->isDatabaseError($res, true) === true) {
1454 // Appel de la methode de recuperation des erreurs
1455 $this->erreur_db(
1456 $res->getDebugInfo(),
1457 $res->getMessage(),
1458 'dossier_autorisation'
1459 );
1460 // Stop le traitement
1461 return false;
1462 }
1463
1464 // Récupération du dernier DA du typeDA passé en paramètre de
1465 // l'année de dépôt
1466 $sql_max_DA = sprintf(
1467 'SELECT
1468 dossier_autorisation
1469 FROM
1470 %sdossier_autorisation
1471 WHERE
1472 dossier_autorisation ILIKE \'%s%%\'
1473 ORDER BY
1474 dossier_autorisation DESC
1475 ;',
1476 DB_PREFIXE,
1477 $datc.$dep.$com.$annee
1478 );
1479 $last_DA = $this->db->getone($sql_max_DA);
1480 $this->f->addToLog(
1481 __METHOD__.'(): db->getone("'.$sql_max_DA.'");',
1482 VERBOSE_MODE
1483 );
1484 // Si une erreur est levé pour la création.
1485 if ($this->f->isDatabaseError($last_DA, true) === true) {
1486 // Appel de la methode de recuperation des erreurs
1487 $this->erreur_db(
1488 $nb_DA->getDebugInfo(),
1489 $nb_DA->getMessage(),
1490 'dossier_autorisation'
1491 );
1492 // Stop le traitement
1493 return false;
1494 }
1495
1496 // Si au moins un dossier on récupère son id
1497 if ($last_DA != "") {
1498 //
1499 $id = intval(substr($last_DA, -4));
1500 // Mise à jour de la sequence avec l'id recalculé
1501 $sql_maj_seq = sprintf(
1502 'SELECT setval(\'%s\',%s);',
1503 $sequence_name,
1504 $id
1505 );
1506 $res_seq = $this->db->query($sql_maj_seq);
1507 $this->f->addToLog(
1508 __METHOD__.'(): db->query("'.$sql_maj_seq.'");',
1509 VERBOSE_MODE
1510 );
1511 if ($this->f->isDatabaseError(res_seq, true) === true) {
1512 // Appel de la methode de recuperation des erreurs
1513 $this->erreur_db(
1514 $res_seq->getDebugInfo(),
1515 $res_seq->getMessage(),
1516 'dossier_autorisation'
1517 );
1518 // Stop le traitement
1519 return false;
1520 }
1521 }
1522
1523 }
1524
1525 /**
1526 * On récupère le prochain numéro de la séquence fraichement créée ou
1527 * créée de longue date.
1528 */
1529 $nextID = $this->db->nextId($table_name, false);
1530 $this->addToLog(
1531 __METHOD__.'(): db->nextId("'.$table_name.'", false);',
1532 VERBOSE_MODE
1533 );
1534 if ($this->f->isDatabaseError($nextID, true) === true) {
1535 // Appel de la methode de recuperation des erreurs
1536 $this->erreur_db(
1537 $res_seq->getDebugInfo(),
1538 $res_seq->getMessage(),
1539 'dossier_autorisation'
1540 );
1541 // Stop le traitement
1542 return false;
1543 }
1544
1545 /**
1546 * On retourne le numéro du dossier sur quatre caractères complétés
1547 * par des zéros. Exemple : '0012'
1548 */
1549 $numero_dossier = str_pad($nextID, 4, "0", STR_PAD_LEFT);
1550 return $numero_dossier;
1551 }
1552
1553 /**
1554 * Méthode permettant de récupérer les id des demandeur liés à la demande ou
1555 * liés au dossier d'autorisation
1556 **/
1557 function listeDemandeur($from, $id) {
1558 // Récupération des demandeurs de la base
1559 $sql = "SELECT demandeur.demandeur,
1560 demandeur.type_demandeur,
1561 lien_".$from."_demandeur.petitionnaire_principal
1562 FROM ".DB_PREFIXE."lien_".$from."_demandeur
1563 INNER JOIN ".DB_PREFIXE."demandeur
1564 ON demandeur.demandeur=lien_".$from."_demandeur.demandeur
1565 WHERE ".$from." = '".$id."'";
1566 $res = $this->f->db->query($sql);
1567 $this->f->addToLog("listeDemandeur() : db->query(\"".$sql."\")", VERBOSE_MODE);
1568 if ( database::isError($res)){
1569 die();
1570 }
1571 // Stoquage du résultat dans un tableau
1572 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
1573 if ($row['petitionnaire_principal'] == 't' AND
1574 $row['type_demandeur']=="petitionnaire") {
1575 $this->valIdDemandeur['petitionnaire_principal']=$row['demandeur'];
1576 } elseif ($row['petitionnaire_principal'] == 'f' AND
1577 $row['type_demandeur']=="petitionnaire"){
1578 $this->valIdDemandeur['petitionnaire'][]=$row['demandeur'];
1579 } elseif ($row['type_demandeur']=="delegataire"){
1580 $this->valIdDemandeur['delegataire']=$row['demandeur'];
1581 }
1582 }
1583 }
1584
1585 /**
1586 * Ajout de la liste des demandeurs
1587 */
1588 function formSpecificContent($maj) {
1589 if(!$this->correct AND $maj != 0) {
1590 $this->listeDemandeur("dossier_autorisation", $this->val[array_search('dossier_autorisation', $this->champs)]);
1591 }
1592 if($maj < 2 AND !$this->correct) {
1593 $linkable = true;
1594 } else {
1595 $linkable = false;
1596 }
1597
1598 // Conteneur de la listes des demandeurs
1599 echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">";
1600 echo "<fieldset class=\"cadre ui-corner-all ui-widget-content\">";
1601 echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">"
1602 ._("Petitionnaire")."</legend>";
1603 // Si des demandeurs sont liés à la demande
1604 require_once "../obj/petitionnaire.class.php";
1605 require_once "../obj/delegataire.class.php";
1606
1607 // Affichage du bloc pétitionnaire principal / délégataire
1608 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
1609 echo "<div id=\"petitionnaire_principal_delegataire\">";
1610 // Affichage de la synthèse
1611 if (isset ($this->valIdDemandeur["petitionnaire_principal"]) AND
1612 !empty($this->valIdDemandeur["petitionnaire_principal"])) {
1613 $demandeur = new petitionnaire(
1614 $this->valIdDemandeur["petitionnaire_principal"],
1615 $this->f->db,false);
1616 $demandeur -> afficherSynthese("petitionnaire_principal", $linkable);
1617 $demandeur -> __destruct();
1618 }
1619 // Si en édition de formulaire
1620 if($maj < 2) {
1621 // Bouton d'ajout du pétitionnaire principal
1622 // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
1623 echo "<span id=\"add_petitionnaire_principal\"
1624 class=\"om-form-button add-16\">".
1625 _("Saisir le petitionnaire principal").
1626 "</span>";
1627 }
1628 // Bouton d'ajout du delegataire
1629 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
1630 echo "<div id=\"delegataire\">";
1631 if ($maj < 2 OR ($maj == 3 AND !empty($this->valIdDemandeur["delegataire"]))) {
1632 echo " <span class=\"om-icon om-icon-16 om-icon-fix arrow-right-16\">
1633 <!-- -->
1634 </span> ";
1635 }
1636 // Affichage de la synthèse
1637 if (isset ($this->valIdDemandeur["delegataire"]) AND
1638 !empty($this->valIdDemandeur["delegataire"])) {
1639 $demandeur = new delegataire($this->valIdDemandeur["delegataire"],
1640 $this->f->db,false);
1641 $demandeur -> afficherSynthese("delegataire", $linkable);
1642 $demandeur -> __destruct();
1643 }
1644 if($maj < 2) {
1645 echo "<span id=\"add_delegataire\"
1646 class=\"om-form-button add-16\">".
1647 _("Saisir un autre correspondant").
1648 "</span>";
1649 }
1650 echo "</div>";
1651
1652 echo "</div>";
1653 // Bloc des pétitionnaires secondaires
1654 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
1655 echo "<div id=\"listePetitionnaires\">";
1656
1657 // Affichage de la synthèse
1658 if (isset ($this->valIdDemandeur["petitionnaire"]) AND
1659 !empty($this->valIdDemandeur["petitionnaire"])) {
1660
1661 foreach ($this->valIdDemandeur["petitionnaire"] as $petitionnaire) {
1662 $demandeur = new petitionnaire($petitionnaire,
1663 $this->f->db,false);
1664 $demandeur -> afficherSynthese("petitionnaire", $linkable);
1665 $demandeur -> __destruct();
1666 }
1667
1668 }
1669 if ($maj < 2) {
1670 // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
1671 echo "<span id=\"add_petitionnaire\"
1672 class=\"om-form-button add-16\">".
1673 _("Ajouter un petitionnaire")
1674 ."</span>";
1675 }
1676 echo "</div>";
1677 echo "</fieldset>";
1678 echo "</div>";
1679 }
1680
1681
1682 /**
1683 * Méthode permettant de recalculer à tout moment les données en cours de
1684 * validité d'un dossier d'autorisation
1685 */
1686 function majDossierAutorisation() {
1687
1688 /*
1689 * Mise à jour des données (terrain, ref. cadastrales, demandeurs, lots)
1690 * si au moins un dossier a été accepté
1691 */
1692 // Initialisation des requêtes
1693 $sql_terrain = "SELECT dossier.terrain_references_cadastrales,
1694 dossier.terrain_adresse_voie_numero,
1695 dossier.terrain_adresse_voie,
1696 dossier.terrain_adresse_lieu_dit,
1697 dossier.terrain_adresse_localite,
1698 dossier.terrain_adresse_code_postal,
1699 dossier.terrain_adresse_bp,
1700 dossier.terrain_adresse_cedex,
1701 dossier.terrain_superficie
1702 FROM ".DB_PREFIXE."dossier";
1703
1704 $sql_lots = "SELECT lot.lot
1705 FROM ".DB_PREFIXE."lot
1706 JOIN ".DB_PREFIXE."dossier ON dossier.dossier = lot.dossier";
1707
1708 $sql_demandeurs = "SELECT lien_dossier_demandeur.demandeur, lien_dossier_demandeur.petitionnaire_principal,
1709 lien_dossier_demandeur.lien_dossier_demandeur, lien_dossier_demandeur.dossier
1710 FROM ".DB_PREFIXE."lien_dossier_demandeur
1711 LEFT JOIN ".DB_PREFIXE."dossier ON
1712 lien_dossier_demandeur.dossier = dossier.dossier";
1713 $sql_etat = "SELECT avis_decision.typeavis, avis_decision.avis_decision
1714 FROM ".DB_PREFIXE."dossier
1715 LEFT JOIN ".DB_PREFIXE."avis_decision ON
1716 dossier.avis_decision = avis_decision.avis_decision";
1717 // Récupération du nombre de dossiers d'instruction liés au dossier d'autorisation
1718 $sql_count_di = "SELECT count(*) FROM ".DB_PREFIXE."dossier as di
1719 LEFT JOIN ".DB_PREFIXE."avis_decision
1720 ON di.avis_decision = avis_decision.avis_decision
1721 WHERE di.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'
1722 AND (di.version = 0
1723 OR (di.date_decision IS NOT NULL
1724 AND (avis_decision.typeavis='F'
1725 OR avis_decision.typeavis='A'
1726 )
1727 ))";
1728
1729 $count_di = $this->db->getOne($sql_count_di);
1730 $this->addToLog("majDossierAutorisation(): db->getone(\"".$sql_count_di."\")", VERBOSE_MODE);
1731 if(database::isError($count_di)) {
1732 // Appel de la methode de recuperation des erreurs
1733 $this->erreur_db($count_di->getDebugInfo(), $count_di->getMessage(), '');
1734 $this->addToLog('', 'majDossierAutorisation() : '.$count_di->getMessage(), __FUNCTION__);
1735 return false;
1736 }
1737 // Si pas de dossier : erreur
1738 if ($count_di == 0) {
1739 return false;
1740 } elseif ($count_di == 1) { // Cas P0 (en cours ou non) ou de plusieurs DI en cours
1741 $sql_where = " WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."' AND version = 0";
1742 } else { // Cas ou un dossier d'instruction est soumis à arrété
1743 $sql_where = " WHERE dossier.dossier = (
1744 SELECT dossier.dossier
1745 FROM ".DB_PREFIXE."dossier
1746 JOIN ".DB_PREFIXE."avis_decision
1747 ON dossier.avis_decision = avis_decision.avis_decision
1748 WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'
1749 AND date_decision IS NOT NULL
1750 AND (avis_decision.typeavis='F'
1751 OR avis_decision.typeavis='A')
1752 ORDER BY version DESC
1753 LIMIT 1
1754 )";
1755 }
1756
1757 //terrain
1758 $res_terrain = $this->db->query($sql_terrain.$sql_where);
1759 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_terrain.$sql_where."\")", VERBOSE_MODE);
1760 if(database::isError($res_terrain)) {
1761 // Appel de la methode de recuperation des erreurs
1762 $this->erreur_db($res_terrain->getDebugInfo(), $res_terrain->getMessage(), '');
1763 $this->addToLog('', 'majDossierAutorisation() : '.$res_terrain->getMessage(), __FUNCTION__);
1764 return false;
1765 }
1766 $row_terrain = $res_terrain->fetchRow(DB_FETCHMODE_ASSOC);
1767 if($row_terrain != null) {
1768
1769 //On récupère l'arrondissement, si le code postal est renseigné dans
1770 //le dossier d'instruction
1771 if (isset($row_terrain['terrain_adresse_code_postal']) &&
1772 $row_terrain['terrain_adresse_code_postal'] !== "") {
1773
1774 $sql_arrondissement = "SELECT arrondissement
1775 FROM ".DB_PREFIXE."arrondissement
1776 WHERE code_postal = '".$row_terrain['terrain_adresse_code_postal']."'";
1777 $row_arrondissement = $this->db->getOne($sql_arrondissement);
1778 $this->addToLog("majDossierAutorisation(): db->getone(\"".$sql_arrondissement."\")", VERBOSE_MODE);
1779 $this->f->isDatabaseError($row_arrondissement);
1780
1781 $row_terrain['arrondissement'] = $row_arrondissement;
1782 }
1783
1784 // Tous les champs vides sont mis à NULL pour éviter les erreurs de base lors de l'update
1785 foreach ($row_terrain as $key => $champ) {
1786 if ($champ == "") {
1787 $row_terrain[$key] = NULL;
1788 }
1789 }
1790 $res_update_terrain = $this->db->autoExecute(DB_PREFIXE."dossier_autorisation",
1791 $row_terrain,
1792 DB_AUTOQUERY_UPDATE,
1793 "dossier_autorisation = '".$this->getVal("dossier_autorisation")."'");
1794 if(database::isError($res_update_terrain)) {
1795 // Appel de la methode de recuperation des erreurs
1796 $this->erreur_db($res_update_terrain->getDebugInfo(), $res_update_terrain->getMessage(), '');
1797 $this->addToLog('', 'majDossierAutorisation() : '.$res_update_terrain->getMessage(), __FUNCTION__);
1798 return false;
1799 }
1800 }
1801
1802 // Lots / demandeur
1803 // Suppression des anciens liens entre les lots et le DA
1804 $valLot['dossier_autorisation'] = NULL;
1805 $res_update_lots = $this->db->autoExecute(DB_PREFIXE."lot",
1806 $valLot,
1807 DB_AUTOQUERY_UPDATE,
1808 "dossier_autorisation='".$this->getVal("dossier_autorisation")."'");
1809 $sql = "SELECT count(*) FROM ".DB_PREFIXE."lot WHERE dossier_autorisation='".$this->getVal("dossier_autorisation")."'";
1810 if(database::isError($res_update_lots)) {
1811 // Appel de la methode de recuperation des erreurs
1812 $this->erreur_db($res_update_terrain->getDebugInfo(), $res_update_terrain->getMessage(), '');
1813 $this->addToLog('', 'majDossierAutorisation() : '.$res_update_terrain->getMessage(), __FUNCTION__);
1814 return false;
1815 }
1816 // Suppression des anciens liens dossier_autorisation/demandeurs
1817 $sql_delete_liens_da_demandeur = "DELETE FROM ".DB_PREFIXE."lien_dossier_autorisation_demandeur
1818 WHERE dossier_autorisation='".$this->getVal("dossier_autorisation")."'";
1819 $res_delete_liens_da_demandeur = $this->db->query($sql_delete_liens_da_demandeur);
1820 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_delete_liens_da_demandeur."\")", VERBOSE_MODE);
1821 if(database::isError($res_delete_liens_da_demandeur)) {
1822 // Appel de la methode de recuperation des erreurs
1823 $this->erreur_db($res_delete_liens_da_demandeur->getDebugInfo(), $res_delete_liens_da_demandeur->getMessage(), '');
1824 $this->addToLog('', 'majDossierAutorisation() : '.$res_delete_liens_da_demandeur->getMessage(), __FUNCTION__);
1825 return false;
1826 }
1827 // Si il ya des lots liés on les remonte au DA et on omet les demandeurs
1828 // car ils sont liés aux lots
1829 $res_lots = $this->db->query($sql_lots.$sql_where);
1830 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_lots.$sql_where."\")", VERBOSE_MODE);
1831 if(database::isError($res_lots)) {
1832 // Appel de la methode de recuperation des erreurs
1833 $this->erreur_db($res_lots->getDebugInfo(), $res_lots->getMessage(), '');
1834 $this->addToLog('', 'majDossierAutorisation() : '.$res_lots->getMessage(), __FUNCTION__);
1835 return false;
1836 }
1837
1838 // XXX Si il existe des lots (auxquels les demandeurs sont lié) faut-il recupérer la liste des demandeurs liés au DI ?
1839 //if ($res_lots->numRows() > 0) {
1840 // Définition du lien entre lot et dossier_autorisation pour chaque lot
1841 $valLotUpdate['dossier_autorisation'] = $this->getVal("dossier_autorisation");
1842 // XXX Sauvegarde des id des lots pour traitement ultérieur
1843 // les lots ne devraient pas être liés au DA mais une copie de ces lots
1844 // devraient l'être.
1845 $liste_lots = array();
1846 // On lie chaque lot en définissant l'id du dossier d'autorisation
1847 while ($rowlot = $res_lots->fetchRow(DB_FETCHMODE_ASSOC)) {
1848 $res_lots_update = $this->db->autoExecute(DB_PREFIXE."lot",
1849 $valLotUpdate,
1850 DB_AUTOQUERY_UPDATE,
1851 "lot=".$rowlot['lot']);
1852 $liste_lots[] = $rowlot['lot'];
1853 if(database::isError($res_lots_update)) {
1854 // Appel de la methode de recuperation des erreurs
1855 $this->erreur_db($res_lots_update->getDebugInfo(), $res_lots_update->getMessage(), '');
1856 $this->addToLog('', 'majDossierAutorisation() : '.$res_lots_update->getMessage(), __FUNCTION__);
1857 return false;
1858 }
1859 }
1860 //} else { // Si pas de lot liaison avec les demandeurs
1861 // Récupération de la liste des demandeurs
1862 $res_demandeurs = $this->db->query($sql_demandeurs.$sql_where);
1863 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_demandeurs.$sql_where."\")", VERBOSE_MODE);
1864 if(database::isError($res_demandeurs)) {
1865 // Appel de la methode de recuperation des erreurs
1866 $this->erreur_db($res_demandeurs->getDebugInfo(), $res_demandeurs->getMessage(), '');
1867 $this->addToLog('', 'majDossierAutorisation() : '.$res_demandeurs->getMessage(), __FUNCTION__);
1868 return false;
1869 }
1870 // Définition de l'id du DA
1871 $valDemandeurUpdate["lien_dossier_autorisation_demandeur"] = NULL;
1872 $valDemandeurUpdate['dossier_autorisation'] = $this->getVal("dossier_autorisation");
1873 // Pour chaque demandeur on créer un lien avec le DA
1874 while ($rowDemandeur = $res_demandeurs->fetchRow(DB_FETCHMODE_ASSOC)) {
1875 // Ajout de l'id du demandeur et du flag petitionnaire_principal
1876 // aux données à insérer
1877 $valDemandeurUpdate["demandeur"] = $rowDemandeur["demandeur"];
1878 $valDemandeurUpdate["petitionnaire_principal"] =
1879 $rowDemandeur["petitionnaire_principal"];
1880 // Instanciation d'un lien dossier_autorisation/demandeur en ajout
1881 require_once "../obj/lien_dossier_autorisation_demandeur.class.php";
1882 $ldad = new lien_dossier_autorisation_demandeur("]", $this->db, DEBUG);
1883 // Ajout d'un enregistrement avec les données des liens
1884 $ldad->ajouter($valDemandeurUpdate, $this->db, DEBUG);
1885 }
1886 //}
1887
1888
1889 /**
1890 * Mise à jour des dates
1891 */
1892 // Requêtes permettant de les recupérer
1893 $sql_date_depot_decision_validite =
1894 "SELECT
1895 MIN(dossier.date_depot) as date_depot,
1896 MIN(dossier.date_decision) as date_decision,
1897 MAX(dossier.date_validite) as date_validite
1898 FROM ".DB_PREFIXE."dossier
1899 WHERE dossier.dossier_autorisation='".
1900 $this->getVal("dossier_autorisation")."'";
1901
1902 $sql_date_doc_daact =
1903 "SELECT
1904 MAX(dossier.date_chantier) as date_chantier,
1905 MAX(dossier.date_achevement) as date_achevement
1906 FROM ".DB_PREFIXE."dossier
1907 LEFT OUTER JOIN ".DB_PREFIXE."avis_decision ON
1908 dossier.avis_decision = avis_decision.avis_decision
1909 WHERE dossier.dossier_autorisation = '".
1910 $this->getVal("dossier_autorisation")."'
1911 AND date_decision IS NOT NULL
1912 AND (avis_decision.typeavis='F'
1913 OR avis_decision.typeavis='A')";
1914 // Récupération des infos avec la 1ere requête
1915 $res_date_depot_decision_validite =
1916 $this->db->query($sql_date_depot_decision_validite);
1917 $this->addToLog("majDossierAutorisation(): db->query(\"".
1918 $sql_date_depot_decision_validite."\")", VERBOSE_MODE);
1919 if(database::isError($res_date_depot_decision_validite)) {
1920 // Appel de la methode de recuperation des erreurs
1921 $this->erreur_db(
1922 $res_date_depot_decision_validite->getDebugInfo(),
1923 $res_date_depot_decision_validite->getMessage(),
1924 ''
1925 );
1926 $this->addToLog('', 'majDossierAutorisation() : '.$res_date_depot_decision_validite->getMessage(), __FUNCTION__);
1927 return false;
1928 }
1929 $row_date_depot_decision_validite =
1930 $res_date_depot_decision_validite->fetchRow(DB_FETCHMODE_ASSOC);
1931 // Récupération des infos avec la 2nd requête
1932 $res_date_doc_daact = $this->db->query($sql_date_doc_daact);
1933 $this->addToLog("majDossierAutorisation(): db->query(\"".
1934 $sql_date_doc_daact."\")", VERBOSE_MODE);
1935 if(database::isError($res_date_doc_daact)) {
1936 // Appel de la methode de recuperation des erreurs
1937 $this->erreur_db($res_date_doc_daact->getDebugInfo(),
1938 $res_date_doc_daact->getMessage(), '');
1939 $this->addToLog('', 'majDossierAutorisation() : '.$res_date_doc_daact->getMessage(), __FUNCTION__);
1940 return false;
1941 }
1942 $row_date_doc_daact = $res_date_doc_daact->fetchRow(DB_FETCHMODE_ASSOC);
1943 // Fusion des 2 résultats
1944 $row_date = array_merge($row_date_depot_decision_validite, $row_date_doc_daact);
1945 // Si pas de date on remplace "" par NULL pour éviter
1946 // les erreurs de base de données
1947 foreach($row_date as $key => $date) {
1948 if($date == "") {
1949 $row_date[$key] = null;
1950 }
1951 }
1952 // Mise à jour du DA avec ces nouvelles dates
1953 $res_update_date = $this->db->autoExecute(
1954 DB_PREFIXE."dossier_autorisation",
1955 $row_date,
1956 DB_AUTOQUERY_UPDATE,
1957 "dossier_autorisation = '".$this->getVal("dossier_autorisation")."'"
1958 );
1959 if(database::isError($res_update_date)) {
1960 // Appel de la methode de recuperation des erreurs
1961 $this->erreur_db(
1962 $res_update_date->getDebugInfo(),
1963 $res_update_date->getMessage(),
1964 ''
1965 );
1966 $this->addToLog('', 'majDossierAutorisation() : '.$res_update_date->getMessage(), __FUNCTION__);
1967 return false;
1968 }
1969
1970 /**
1971 * Mise à jour de l'état
1972 */
1973 $sql_etat .= " ".$sql_where;
1974 $res_etat = $this->db->query($sql_etat);
1975 $this->addToLog(
1976 "majDossierAutorisation(): db->query(\"".$sql_etat."\")",
1977 VERBOSE_MODE
1978 );
1979 if(database::isError($res_etat)) {
1980 // Appel de la methode de recuperation des erreurs
1981 $this->erreur_db($res_etat->getDebugInfo(), $res_etat->getMessage(), '');
1982 $this->addToLog('', 'majDossierAutorisation() : '.$res_etat->getMessage(), __FUNCTION__);
1983 return false;
1984 }
1985
1986 $row_etat = $res_etat->fetchRow(DB_FETCHMODE_ASSOC);
1987 $etatDA = array();
1988
1989 // Cas initial : on défini les trois valeurs par défaut
1990 // (elles seront écrasées si $res_encours->numRows() > 1)
1991
1992 // Correspondance entre typeavis et etat_dossier_autorisation
1993 switch ($row_etat['typeavis']) {
1994 case 'F':
1995 // typeavis F => Accordé
1996 $etatDA['etat_dernier_dossier_instruction_accepte'] = 2;
1997 $etatDA['etat_dossier_autorisation'] = 2;
1998 break;
1999 case 'D':
2000 // typeavis D => Refusé
2001 $etatDA['etat_dernier_dossier_instruction_accepte'] = 4;
2002 $etatDA['etat_dossier_autorisation'] = 4;
2003 break;
2004 case 'A':
2005 // typeavis A => Abandonné
2006 $etatDA['etat_dernier_dossier_instruction_accepte'] = 3;
2007 $etatDA['etat_dossier_autorisation'] = 3;
2008 break;
2009 default:
2010 // typeavis '' => En cours
2011 $etatDA['etat_dernier_dossier_instruction_accepte'] = null;
2012 $etatDA['etat_dossier_autorisation'] = 1;
2013 break;
2014 }
2015 $etatDA['avis_decision'] = $row_etat['avis_decision'];
2016
2017
2018 foreach($etatDA as $key=>$val) {
2019 if($val=="") {
2020 $etatDA[$key] = null;
2021 }
2022 }
2023
2024 // Mise à jour du DA avec ces nouvelles dates
2025 $res_update_etat = $this->db->autoExecute(
2026 DB_PREFIXE."dossier_autorisation",
2027 $etatDA,
2028 DB_AUTOQUERY_UPDATE,
2029 "dossier_autorisation = '".$this->getVal("dossier_autorisation")."'"
2030 );
2031 if(database::isError($res_update_date)) {
2032 // Appel de la methode de recuperation des erreurs
2033 $this->erreur_db(
2034 $res_update_date->getDebugInfo(),
2035 $res_update_date->getMessage(),
2036 ''
2037 );
2038 $this->addToLog('', 'majDossierAutorisation() : '.$res_update_date->getMessage(), __FUNCTION__);
2039 return false;
2040 }
2041
2042 // Si le champ des références cadastrales n'est pas vide
2043 if ($this->getVal('terrain_references_cadastrales')
2044 != $row_terrain['terrain_references_cadastrales']) {
2045
2046 // On supprime toutes les lignes de la table
2047 // dossier_autorisation_parcelle qui font référence au
2048 // dossier d'autorisation en cours de suppression
2049 $this->supprimer_dossier_autorisation_parcelle(
2050 $this->getVal('dossier_autorisation')
2051 );
2052
2053 // Ajout des parcelles dans la table dossier_autorisation_parcelle
2054 $this->ajouter_dossier_autorisation_parcelle(
2055 $this->getVal('dossier_autorisation'),
2056 $row_terrain['terrain_references_cadastrales']
2057 );
2058
2059 }
2060
2061 // Mise à jour des données techniques du dossier d'instruction
2062 $sql_donnees_techniques = "SELECT donnees_techniques
2063 FROM ".DB_PREFIXE."donnees_techniques
2064 INNER JOIN ".DB_PREFIXE."dossier ON
2065 dossier.dossier=donnees_techniques.dossier_instruction ";
2066 if ($count_di == 1) {
2067 $sql_donnees_techniques .= $sql_where;
2068 } else { // Cas ou un dossier d'instruction est soumis à arrété
2069 $sql_donnees_techniques .= " WHERE dossier.dossier = (
2070 SELECT dossier.dossier
2071 FROM ".DB_PREFIXE."dossier
2072 JOIN ".DB_PREFIXE."avis_decision
2073 ON dossier.avis_decision = avis_decision.avis_decision
2074 JOIN ".DB_PREFIXE."donnees_techniques
2075 ON donnees_techniques.dossier_instruction = dossier.dossier
2076 WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'
2077 AND (date_decision IS NOT NULL
2078 AND (avis_decision.typeavis='F'
2079 OR avis_decision.typeavis='A')
2080 OR version=0)
2081 ORDER BY version DESC
2082 LIMIT 1
2083 )";
2084 }
2085
2086 $donnees_techniques = $this->db->getOne($sql_donnees_techniques);
2087 $this->addToLog(
2088 "majDossierAutorisation(): db->query(\"".$sql_donnees_techniques."\")",
2089 VERBOSE_MODE
2090 );
2091 if(database::isError($donnees_techniques)) {
2092 // Appel de la methode de recuperation des erreurs
2093 $this->erreur_db(
2094 $donnees_techniques->getDebugInfo(),
2095 $donnees_techniques->getMessage(),
2096 ''
2097 );
2098 $this->addToLog('', 'majDossierAutorisation() : '.$donnees_techniques->getMessage(), __FUNCTION__);
2099 return false;
2100 }
2101 // Liaison des nouvelles données données techniques au DA
2102 require_once "../obj/donnees_techniques.class.php";
2103 if($donnees_techniques === null) {
2104 $donnees_techniques = "]";
2105 }
2106 $dti = new donnees_techniques($donnees_techniques, $this->db, DEBUG);
2107
2108 // Création du tableau de valeurs pour report des DT sur le DA
2109 $dti->setValFFromVal();
2110 unset($dti->valF["tab_surface"]);
2111 unset($dti->valF["tab_tax_su_princ"]);
2112 unset($dti->valF["tab_tax_su_heber"]);
2113 unset($dti->valF["tab_tax_su_secon"]);
2114 unset($dti->valF["tab_tax_su_tot"]);
2115 unset($dti->valF["tab_tax_su_non_habit_surf"]);
2116 unset($dti->valF["tab_tax_su_parc_statio_expl_comm"]);
2117 unset($dti->valF["tab_tax_am"]);
2118 unset($dti->valF["tab_erp_eff"]);
2119 // On récupère l'instance des DT du DA
2120 $dta = $this->get_da_dt();
2121 // On lie se tableau de DT au DA
2122 $dti->valF["dossier_autorisation"] = $this->getVal($this->clePrimaire);
2123 // On délie les données du DI et lots
2124 $dti->valF["dossier_instruction"] = null;
2125 $dti->valF["lot"] = null;
2126 $dti->valF["donnees_techniques"] = $dta->getVal("donnees_techniques");
2127 if($dta !== false) {
2128 // On met à jour
2129 $dta->setParameter('maj',1);
2130 if($dta->modifier($dti->valF, $this->db, DEBUG) === false) {
2131
2132 return false;
2133 }
2134 }
2135
2136 return true;
2137 }
2138
2139 /**
2140 * Methode permettant de récupérer l'instance des données techniques du DA courant.
2141 *
2142 * @return donnees_technique Handler de l'instance des données techniques.
2143 */
2144 function get_da_dt(){
2145
2146 // Si déjà instanciées on les retournes
2147 if(isset($this->donnees_techniques)) {
2148 return $this->donnees_techniques;
2149 }
2150 // Sinon on requête l'identifiant
2151 $sql = "SELECT donnees_techniques FROM ".DB_PREFIXE."donnees_techniques
2152 WHERE dossier_autorisation='".$this->getVal($this->clePrimaire)."'";
2153
2154 $dt_id = $this->db->getOne($sql);
2155 $this->addToLog(
2156 "get_da_dt(): db->query(\"".$sql."\")",
2157 VERBOSE_MODE
2158 );
2159 if($this->f->isDatabaseError($dt_id, true)) {
2160 return false;
2161 }
2162 // On instancie les données techniques
2163 $this->donnees_techniques = new donnees_techniques($dt_id, $this->db, DEBUG);
2164 // On les retourne.
2165 return $this->donnees_techniques;
2166
2167 }
2168
2169 /**
2170 * Ajoute les parcelles du dossier d'autorisation passé en paramètre.
2171 *
2172 * @param string $dossier_autorisation Identifiant du dossier
2173 * @param string $terrain_references_cadastrales Références cadastrales du
2174 * dossier
2175 */
2176 function ajouter_dossier_autorisation_parcelle(
2177 $dossier_autorisation,
2178 $terrain_references_cadastrales
2179 ) {
2180
2181 // Parse les parcelles
2182 $list_parcelles = $this->f->parseParcelles($terrain_references_cadastrales, $this->getVal('om_collectivite'));
2183
2184 // Fichier requis
2185 require_once "../obj/dossier_autorisation_parcelle.class.php";
2186
2187 // A chaque parcelle une nouvelle ligne est créée dans la table
2188 // dossier_parcelle
2189 foreach ($list_parcelles as $parcelle) {
2190
2191 // Instance de la classe dossier_parcelle
2192 $dossier_autorisation_parcelle =
2193 new dossier_autorisation_parcelle("]", $this->db, DEBUG);
2194
2195 // Valeurs à sauvegarder
2196 $value = array(
2197 'dossier_autorisation_parcelle' => '',
2198 'dossier_autorisation' => $dossier_autorisation,
2199 'parcelle' => '',
2200 'libelle' => $parcelle['quartier']
2201 .$parcelle['section']
2202 .$parcelle['parcelle']
2203 );
2204
2205 // Ajout de la ligne
2206 $dossier_autorisation_parcelle->ajouter($value, $this->db, DEBUG);
2207 }
2208
2209 }
2210
2211 /**
2212 * Supprime les parcelles du dossier d'autorisation passé en paramètre
2213 * @param string $dossier_autorisation Identifiant du dossier
2214 */
2215 function supprimer_dossier_autorisation_parcelle($dossier_autorisation) {
2216
2217 // Suppression des parcelles du dossier d'autorisation
2218 $sql = "DELETE FROM ".DB_PREFIXE."dossier_autorisation_parcelle
2219 WHERE dossier_autorisation='".$dossier_autorisation."'";
2220 $res = $this->db->query($sql);
2221 $this->addToLog("supprimer_dossier_autorisation_parcelle() db->query(\"".$sql."\");", VERBOSE_MODE);
2222 database::isError($res);
2223
2224 }
2225
2226 /**
2227 * Permet d’effectuer des actions après l’insertion des données dans la base
2228 */
2229 function triggerajouterapres($id, &$db, $val, $DEBUG) {
2230
2231 // Si le champ des références cadastrales n'est pas vide
2232 if ($this->valF['terrain_references_cadastrales'] != '') {
2233
2234 // Ajout des parcelles dans la table dossier_autorisation_parcelle
2235 $this->ajouter_dossier_autorisation_parcelle($this->valF['dossier_autorisation'],
2236 $this->valF['terrain_references_cadastrales']);
2237
2238 }
2239
2240 }
2241
2242 /**
2243 * Surcharge du fil d'ariane en contexte formulaire.
2244 *
2245 * @param string $ent Chaîne initiale
2246 *
2247 * @return chaîne de sortie
2248 */
2249 function getFormTitle($ent) {
2250 //
2251 if (intval($this->getParameter("maj")) === 4) {
2252 // XXX - Manque demandeur
2253 $ent = _("Autorisation")." -> "._("Dossier d'autorisation")." -> ".$this->getVal('dossier_autorisation_libelle');
2254 }
2255 //
2256 return $ent;
2257 }
2258
2259 /**
2260 * Surcharge du fil d'ariane en contexte sous-formulaire.
2261 *
2262 * @param string $subent Chaîne initiale
2263 *
2264 * @return chaîne de sortie
2265 */
2266 function getSubFormTitle($subent) {
2267 //
2268 if (intval($this->getParameter("maj")) === 4) {
2269 // XXX - Manque demandeur
2270 $subent = _("Autorisation")." -> "._("Dossier d'autorisation")." -> ".$this->getVal('dossier_autorisation_libelle');
2271 }
2272 //
2273 return $subent;
2274 }
2275
2276
2277 /**
2278 * Permet de générer une clé 4*4 chiffres, séparés par des "-".
2279 * Cette clé permet au citoyen de se connecter au portail pour consulter son
2280 * autorisation.
2281 * Exemple de clé générée : 0000-1111-2222-3333.
2282 *
2283 * @return string
2284 */
2285 public function generate_citizen_access_key() {
2286 // Initialisation d'un tableau
2287 $number_list = array();
2288
2289 // Génération aléatoire d'un nombre sur 4 caractères, 4 fois
2290 for ($i = 0; $i < 4; $i++) {
2291 $number_list[] = str_pad(mt_rand(0, 9999), 4, 0, STR_PAD_LEFT);
2292 }
2293
2294 // Transformation en chaîne tout en séparant les nombres par un "-"
2295 $result = implode('-', $number_list);
2296
2297 //
2298 return $result;
2299 }
2300
2301
2302 /**
2303 * Permet de modifier le dossier d'autorisation pour mettre à jour la clé
2304 * d'accès au portail citoyen, si celle-ci n'existe pas déjà.
2305 * Il est possible de forcer sa génération.
2306 *
2307 * @param boolean $force Force la génération de la clé.
2308 *
2309 * @return boolean
2310 */
2311 public function update_citizen_access_key($force = false) {
2312 // Si une clé d'accès citoyen existe déjà et que la génération n'est pas
2313 // forcée
2314 if ($force == false &&
2315 ($this->getVal('cle_acces_citoyen') != ""
2316 || $this->getVal('cle_acces_citoyen') != null)) {
2317 //
2318 return true;
2319 }
2320
2321 // Génération de la clé d'accès au portail citoyen
2322 $citizen_access_key = $this->generate_citizen_access_key();
2323
2324 // Valeurs à mettre à jour
2325 $valF = array();
2326 // Récupération la valeur des champs
2327 foreach($this->champs as $key => $champ) {
2328 //
2329 $valF[$champ] = $this->val[$key];
2330 }
2331 $valF["cle_acces_citoyen"] = $citizen_access_key;
2332
2333 // Modification
2334 $update = $this->modifier($valF);
2335
2336 // Si la modification échoue
2337 if ($update !== true) {
2338 //
2339 return false;
2340 }
2341
2342 //
2343 return true;
2344 }
2345
2346
2347 }// fin classe
2348
2349 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26