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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 9245 - (hide annotations)
Fri Apr 3 09:21:03 2020 UTC (4 years, 10 months ago) by softime
File size: 329009 byte(s)
* Merge de la branche d'intégration 4.13.0-develop dans le trunk

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26