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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4048 - (hide annotations)
Thu Apr 28 14:58:32 2016 UTC (8 years, 9 months ago) by nhaye
File size: 104047 byte(s)
Correction apportée au recalcul des données techniques du DA : si les données n'existent pas, elle sont créées.

1 mbroquet 3730 <?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 jymadier 3807 $form->setLib('cle_acces_citoyen_complete', '');
1143     $form->setLib('timestamp_generation_formulaire', '');
1144 mbroquet 3730
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 nhaye 4041 $dti = new donnees_techniques($donnees_techniques, $this->db, DEBUG);
2107 mbroquet 3730
2108 nhaye 4041 // 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 nhaye 4048 $sql = "SELECT donnees_techniques FROM ".DB_PREFIXE."donnees_techniques
2121     WHERE dossier_autorisation='".$this->getVal($this->clePrimaire)."'";
2122    
2123     $dt_id = $this->db->getOne($sql);
2124     $this->addToLog(
2125     "get_da_dt(): db->query(\"".$sql."\")",
2126     VERBOSE_MODE
2127     );
2128     if($this->f->isDatabaseError($dt_id, true)) {
2129     return false;
2130     }
2131     if($dt_id === null) {
2132     $dt_id = "]";
2133     }
2134     // On instancie les données techniques
2135     $dta = new donnees_techniques($dt_id, $this->db, DEBUG);
2136 nhaye 4041 // On lie se tableau de DT au DA
2137     $dti->valF["dossier_autorisation"] = $this->getVal($this->clePrimaire);
2138     // On délie les données du DI et lots
2139 nhaye 4045 $dti->valF["dossier_instruction"] = null;
2140 nhaye 4041 $dti->valF["lot"] = null;
2141     $dti->valF["donnees_techniques"] = $dta->getVal("donnees_techniques");
2142 nhaye 4048 if($dt_id != "]") {
2143 nhaye 4041 // On met à jour
2144     $dta->setParameter('maj',1);
2145     if($dta->modifier($dti->valF, $this->db, DEBUG) === false) {
2146 mbroquet 3730 return false;
2147     }
2148 nhaye 4048 } else {
2149     // On ajoute
2150     $dta->setParameter('maj',0);
2151     if($dta->ajouter($dti->valF, $this->db, DEBUG) === false) {
2152     return false;
2153     }
2154 mbroquet 3730 }
2155    
2156     return true;
2157     }
2158    
2159 nhaye 4041
2160     /**
2161 mbroquet 3730 * Ajoute les parcelles du dossier d'autorisation passé en paramètre.
2162     *
2163     * @param string $dossier_autorisation Identifiant du dossier
2164     * @param string $terrain_references_cadastrales Références cadastrales du
2165     * dossier
2166     */
2167     function ajouter_dossier_autorisation_parcelle(
2168     $dossier_autorisation,
2169     $terrain_references_cadastrales
2170     ) {
2171    
2172     // Parse les parcelles
2173     $list_parcelles = $this->f->parseParcelles($terrain_references_cadastrales, $this->getVal('om_collectivite'));
2174    
2175     // Fichier requis
2176     require_once "../obj/dossier_autorisation_parcelle.class.php";
2177    
2178     // A chaque parcelle une nouvelle ligne est créée dans la table
2179     // dossier_parcelle
2180     foreach ($list_parcelles as $parcelle) {
2181    
2182     // Instance de la classe dossier_parcelle
2183     $dossier_autorisation_parcelle =
2184     new dossier_autorisation_parcelle("]", $this->db, DEBUG);
2185    
2186     // Valeurs à sauvegarder
2187     $value = array(
2188     'dossier_autorisation_parcelle' => '',
2189     'dossier_autorisation' => $dossier_autorisation,
2190     'parcelle' => '',
2191     'libelle' => $parcelle['quartier']
2192     .$parcelle['section']
2193     .$parcelle['parcelle']
2194     );
2195    
2196     // Ajout de la ligne
2197     $dossier_autorisation_parcelle->ajouter($value, $this->db, DEBUG);
2198     }
2199    
2200     }
2201    
2202     /**
2203     * Supprime les parcelles du dossier d'autorisation passé en paramètre
2204     * @param string $dossier_autorisation Identifiant du dossier
2205     */
2206     function supprimer_dossier_autorisation_parcelle($dossier_autorisation) {
2207    
2208     // Suppression des parcelles du dossier d'autorisation
2209     $sql = "DELETE FROM ".DB_PREFIXE."dossier_autorisation_parcelle
2210     WHERE dossier_autorisation='".$dossier_autorisation."'";
2211     $res = $this->db->query($sql);
2212     $this->addToLog("supprimer_dossier_autorisation_parcelle() db->query(\"".$sql."\");", VERBOSE_MODE);
2213     database::isError($res);
2214    
2215     }
2216    
2217     /**
2218     * Permet d’effectuer des actions après l’insertion des données dans la base
2219     */
2220     function triggerajouterapres($id, &$db, $val, $DEBUG) {
2221    
2222     // Si le champ des références cadastrales n'est pas vide
2223     if ($this->valF['terrain_references_cadastrales'] != '') {
2224    
2225     // Ajout des parcelles dans la table dossier_autorisation_parcelle
2226     $this->ajouter_dossier_autorisation_parcelle($this->valF['dossier_autorisation'],
2227     $this->valF['terrain_references_cadastrales']);
2228    
2229     }
2230    
2231     }
2232    
2233     /**
2234     * Surcharge du fil d'ariane en contexte formulaire.
2235     *
2236     * @param string $ent Chaîne initiale
2237     *
2238     * @return chaîne de sortie
2239     */
2240     function getFormTitle($ent) {
2241     //
2242     if (intval($this->getParameter("maj")) === 4) {
2243     // XXX - Manque demandeur
2244     $ent = _("Autorisation")." -> "._("Dossier d'autorisation")." -> ".$this->getVal('dossier_autorisation_libelle');
2245     }
2246     //
2247     return $ent;
2248     }
2249    
2250     /**
2251     * Surcharge du fil d'ariane en contexte sous-formulaire.
2252     *
2253     * @param string $subent Chaîne initiale
2254     *
2255     * @return chaîne de sortie
2256     */
2257     function getSubFormTitle($subent) {
2258     //
2259     if (intval($this->getParameter("maj")) === 4) {
2260     // XXX - Manque demandeur
2261     $subent = _("Autorisation")." -> "._("Dossier d'autorisation")." -> ".$this->getVal('dossier_autorisation_libelle');
2262     }
2263     //
2264     return $subent;
2265     }
2266    
2267    
2268     /**
2269     * Permet de générer une clé 4*4 chiffres, séparés par des "-".
2270     * Cette clé permet au citoyen de se connecter au portail pour consulter son
2271     * autorisation.
2272     * Exemple de clé générée : 0000-1111-2222-3333.
2273     *
2274     * @return string
2275     */
2276     public function generate_citizen_access_key() {
2277     // Initialisation d'un tableau
2278     $number_list = array();
2279    
2280     // Génération aléatoire d'un nombre sur 4 caractères, 4 fois
2281     for ($i = 0; $i < 4; $i++) {
2282     $number_list[] = str_pad(mt_rand(0, 9999), 4, 0, STR_PAD_LEFT);
2283     }
2284    
2285     // Transformation en chaîne tout en séparant les nombres par un "-"
2286     $result = implode('-', $number_list);
2287    
2288     //
2289     return $result;
2290     }
2291    
2292    
2293     /**
2294     * Permet de modifier le dossier d'autorisation pour mettre à jour la clé
2295     * d'accès au portail citoyen, si celle-ci n'existe pas déjà.
2296     * Il est possible de forcer sa génération.
2297     *
2298     * @param boolean $force Force la génération de la clé.
2299     *
2300     * @return boolean
2301     */
2302     public function update_citizen_access_key($force = false) {
2303     // Si une clé d'accès citoyen existe déjà et que la génération n'est pas
2304     // forcée
2305     if ($force == false &&
2306     ($this->getVal('cle_acces_citoyen') != ""
2307     || $this->getVal('cle_acces_citoyen') != null)) {
2308     //
2309     return true;
2310     }
2311    
2312     // Génération de la clé d'accès au portail citoyen
2313     $citizen_access_key = $this->generate_citizen_access_key();
2314    
2315     // Valeurs à mettre à jour
2316     $valF = array();
2317     // Récupération la valeur des champs
2318     foreach($this->champs as $key => $champ) {
2319     //
2320     $valF[$champ] = $this->val[$key];
2321     }
2322     $valF["cle_acces_citoyen"] = $citizen_access_key;
2323    
2324     // Modification
2325     $update = $this->modifier($valF);
2326    
2327     // Si la modification échoue
2328     if ($update !== true) {
2329     //
2330     return false;
2331     }
2332    
2333     //
2334     return true;
2335     }
2336    
2337    
2338     }// fin classe
2339    
2340     ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26