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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6272 - (hide annotations)
Fri Mar 3 15:27:53 2017 UTC (7 years, 11 months ago) by softime
File size: 212722 byte(s)
* Merge de la branche 3.36.0

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26