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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26