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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4526 - (hide annotations)
Wed Jun 22 08:18:23 2016 UTC (8 years, 7 months ago) by nmeucci
File size: 206539 byte(s)
* Évolution - Il est dorénavant possible de créer un dossier d'instruction sans
  suffixe dans son numéro. Pour ce faire il faut désactiver l'option dans le
  paramétrage du type de dossier d'instruction.
  Ticket #8261.

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26