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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 12433 - (hide annotations)
Thu Jun 23 17:40:44 2022 UTC (2 years, 7 months ago) by softime
File size: 441043 byte(s)
* Fusion de la branche d'intégration 5.11.0-develop vers 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 10573 "proprietaire" => array(),
30     "architecte_lc" => array(),
31     "paysagiste" => array(),
32 softime 6565 );
33     var $postedIdDemandeur = array("petitionnaire_principal" => array(),
34     "delegataire" => array(),
35     "petitionnaire" => array(),
36     "plaignant_principal" => array(),
37     "plaignant" => array(),
38     "contrevenant_principal" => array(),
39     "contrevenant" => array(),
40     "requerant_principal" => array(),
41     "requerant" => array(),
42     "avocat_principal" => array(),
43     "avocat" => array(),
44 softime 7067 "bailleur_principal" => array(),
45     "bailleur" => array(),
46 softime 10573 "proprietaire" => array(),
47     "architecte_lc" => array(),
48     "paysagiste" => array(),
49 softime 6565 );
50 mbroquet 3730 /**
51     * Instance de la classe taxe_amenagement.
52     *
53     * @var null
54     */
55     var $inst_taxe_amenagement = null;
56    
57     /**
58     * Instance de la classe donnees_techniques.
59     *
60     * @var null
61     */
62     var $inst_donnees_techniques = null;
63    
64     /**
65     * Instance de la classe dossier_autorisation.
66     *
67     * @var mixed (resource | null)
68     */
69     var $inst_dossier_autorisation = null;
70    
71     /**
72     * Instance de la classe dossier_autorisation_type_detaille.
73     *
74     * @var null
75     */
76     var $inst_dossier_autorisation_type_detaille = null;
77    
78     /**
79     * Instance de la classe cerfa.
80     *
81     * @var null
82     */
83     var $inst_cerfa = null;
84    
85 softime 6565 /**
86     * Groupe du dossier d'instruction.
87     *
88     * @var null
89     */
90     var $groupe = null;
91 mbroquet 3730
92 softime 6565 /**
93     * Instance de la classe groupe.
94     */
95     var $inst_groupe = null;
96    
97     /**
98     * Instance de la classe dossier_autorisation_type.
99     *
100     * @var null
101     */
102     var $inst_dossier_autorisation_type = null;
103    
104 softime 7366 /**
105     * Instance de la classe demande.
106     *
107     * @var mixed (resource | null)
108     */
109     var $inst_demande = null;
110 softime 10573
111     /**
112     * Liste des types de tâches.
113     *
114     * @var array
115     */
116     var $task_types = array(
117     'incompletude_DI',
118     'qualification_DI',
119     'decision_DI',
120     'completude_DI',
121     'pec_metier_consultation',
122     'avis_consultation',
123     'modification_DI',
124 softime 10869 'prescription',
125 softime 10573 );
126    
127     /**
128     * Liste des champs requis dans Plat'AU.
129     *
130     * @var array
131     */
132     var $list_platau_required_fields_dossier = array(
133     'donnees_techniques.enga_decla_date',
134     'donnees_techniques.enga_decla_lieu',
135     'dossier.terrain_adresse_localite',
136     'demandeur.localite',
137     'architecte.ville'
138     );
139    
140    
141 mbroquet 3730 /*Mutateur pour ma variable dossier_instruction_type*/
142     public function getDossierInstructionType(){
143     return $this->dossier_instruction_type;
144     }
145     public function setDossierInstructionType($dossier_instruction_type){
146     $this->dossier_instruction_type = $dossier_instruction_type;
147     }
148    
149     /**
150     * Définition des actions disponibles sur la classe.
151     *
152     * @return void
153     */
154     function init_class_actions() {
155    
156     parent::init_class_actions();
157    
158     // ACTION - 003 - consulter
159     //
160 softime 6565 $this->class_actions[3]["condition"] = array(
161     "is_user_from_allowed_collectivite",
162     "check_context",
163     );
164 mbroquet 3730
165     // ACTION - 004 - contrainte
166     //
167     $this->class_actions[4] = array(
168     "identifier" => "contrainte",
169     "view" => "view_contrainte",
170     "permission_suffix" => "contrainte_tab",
171     "condition" => array(
172     "is_user_from_allowed_collectivite",
173     ),
174     );
175    
176     // ACTION - 005 - view_document_numerise
177     // Interface spécifique du tableau des pièces
178     $this->class_actions[5] = array(
179     "identifier" => "view_document_numerise",
180     "view" => "view_document_numerise",
181     "permission_suffix" => "document_numerise",
182     "condition" => array(
183     "is_user_from_allowed_collectivite",
184     ),
185     );
186    
187     // ACTION - 006 - view_sitadel
188     //
189     $this->class_actions[6] = array(
190     "identifier" => "sitadel",
191     "view" => "view_sitadel",
192     "permission_suffix" => "export_sitadel",
193     );
194 softime 6565
195     // ACTION - 777 - Redirection vers la classe fille adéquate
196     //
197     $this->class_actions[777] = array(
198     "identifier" => "redirect",
199     "view" => "redirect",
200     "permission_suffix" => "consulter",
201     );
202 softime 10573
203     //
204     //
205     $this->class_actions[998] = array(
206     "identifier" => "json_data",
207     "view" => "view_json_data",
208     "permission_suffix" => "consulter",
209     );
210 mbroquet 3730 }
211    
212     /**
213 softime 8989 * Clause select pour la requête de sélection des données de l'enregistrement.
214     *
215     * @return array
216     */
217     function get_var_sql_forminc__champs() {
218 softime 10573 $champs = array(
219 softime 8989 "dossier.dossier",
220 softime 10573 "dossier.om_collectivite AS om_collectivite"
221     );
222     if ($this->f->is_option_dossier_commune_enabled()) {
223     $champs[] = "dossier.commune AS commune";
224     }
225     array_push($champs,
226 softime 8989 "dossier.dossier_libelle",
227     "dossier.dossier_instruction_type",
228     "dossier_autorisation_type_detaille.libelle as dossier_autorisation_type_detaille",
229     "autorisation_contestee",
230     "donnees_techniques.ctx_reference_dsj as ctx_reference_dsj",
231     "donnees_techniques.ctx_reference_sagace as ctx_reference_sagace",
232     "dossier.depot_electronique",
233     "CASE WHEN requerant_principal.qualite='particulier' THEN
234     TRIM(CONCAT(requerant_principal.particulier_nom, ' ', requerant_principal.particulier_prenom))
235     ELSE
236     TRIM(CONCAT(requerant_principal.personne_morale_raison_sociale, ' ', requerant_principal.personne_morale_denomination))
237     END as requerants",
238     "CASE WHEN petitionnaire_principal.qualite='particulier' THEN
239     TRIM(CONCAT(petitionnaire_principal.particulier_nom, ' ', petitionnaire_principal.particulier_prenom))
240     ELSE
241     TRIM(CONCAT(petitionnaire_principal.personne_morale_raison_sociale, ' ', petitionnaire_principal.personne_morale_denomination))
242     END as dossier_petitionnaire",
243     "'' as dossier_petitionnaires",
244     "CASE WHEN contrevenant_principal.qualite='particulier' THEN
245     TRIM(CONCAT(contrevenant_principal.particulier_nom, ' ', contrevenant_principal.particulier_prenom))
246     ELSE
247     TRIM(CONCAT(contrevenant_principal.personne_morale_raison_sociale, ' ', contrevenant_principal.personne_morale_denomination))
248     END as contrevenants",
249 softime 10573 "TRIM(
250     CONCAT_WS(
251     ' ',
252     replace(dossier.terrain_references_cadastrales,';',' '),
253     '<br/>',
254 softime 11057 CASE
255     WHEN dossier.adresse_normalisee IS NULL
256     OR TRIM(dossier.adresse_normalisee) = ''
257     THEN
258     CONCAT_WS(
259     ' ',
260     dossier.terrain_adresse_voie_numero,
261     dossier.terrain_adresse_voie,
262     dossier.terrain_adresse_code_postal
263     )
264     ELSE
265     dossier.adresse_normalisee
266     END
267 softime 10573 )
268     ) as terrain",
269 softime 8989 "arrondissement.libelle as dossier_arrondissement",
270 softime 10573 'dossier.adresse_normalisee',
271     'dossier.adresse_normalisee_json',
272 softime 8989 // description/nature des travaux. En cas de modif, bloc de code aussi
273     // présent dans 'dossier_instruction.inc.php','om_requete'
274     // et 'stats à la demande'.
275     "CONCAT_WS(
276     '<br/>',
277     CASE WHEN co_projet_desc = '' THEN
278     NULL
279     ELSE
280     TRIM(co_projet_desc)
281     END,
282     CASE WHEN ope_proj_desc = '' THEN
283     NULL
284     ELSE
285     TRIM(ope_proj_desc)
286     END,
287     CASE WHEN am_projet_desc = '' THEN
288     NULL
289     ELSE
290     TRIM(am_projet_desc)
291     END,
292     CASE WHEN dm_projet_desc = '' THEN
293     NULL
294     ELSE
295     TRIM(dm_projet_desc)
296     END,
297     CASE WHEN donnees_techniques.erp_cstr_neuve IS TRUE
298     THEN '".str_replace("'", "''", _('erp_cstr_neuve'))."' END,
299     CASE WHEN donnees_techniques.erp_trvx_acc IS TRUE
300     THEN '".str_replace("'", "''", _('erp_trvx_acc'))."' END,
301     CASE WHEN donnees_techniques.erp_extension IS TRUE
302     THEN '".str_replace("'", "''", _('erp_extension'))."' END,
303     CASE WHEN donnees_techniques.erp_rehab IS TRUE
304     THEN '".str_replace("'", "''", _('erp_rehab'))."' END,
305     CASE WHEN donnees_techniques.erp_trvx_am IS TRUE
306     THEN '".str_replace("'", "''", _('erp_trvx_am'))."' END,
307     CASE WHEN donnees_techniques.erp_vol_nouv_exist IS TRUE
308     THEN '".str_replace("'", "''", _('erp_vol_nouv_exist'))."' END
309     ) as \"description_projet\"",
310     //
311     "donnees_techniques.ctx_synthese_nti as dt_ctx_synthese_nti",
312     "donnees_techniques.ctx_synthese_anr as dt_ctx_synthese_anr ",
313     "donnees_techniques.ctx_infraction as dt_ctx_infraction ",
314     "donnees_techniques.ctx_regularisable as dt_ctx_regularisable ",
315     "dossier_autorisation.dossier_autorisation",
316     "dossier_autorisation.dossier_autorisation_libelle",
317     "annee",
318     "autorite_competente",
319     "dossier.instructeur",
320     "instructeur_2",
321     "dossier.division",
322     "public.ST_AsText(dossier.geom::geometry) as geom",
323 softime 10573 "'' as streetview",
324     "tax_secteur",
325 softime 8989 // Enjeu
326     "enjeu_urba",
327     "enjeu_erp",
328     "'' as enjeu_ctx",
329     // Qualification
330     "erp",
331     "a_qualifier",
332 softime 10573 "pec_metier",
333 softime 10968 "etat_transmission_platau",
334 softime 8989 // Archive
335     "numero_versement_archive",
336     "date_demande",
337     // Fieldset instruction
338     // Suivi
339     // Col 1
340     "dossier.date_depot",
341 softime 10573 "dossier.date_depot_mairie",
342 softime 8989 "dossier.date_affichage",
343     "date_premiere_visite",
344     "date_derniere_visite",
345     "date_contradictoire",
346     "date_retour_contradictoire",
347     "date_ait",
348     "date_transmission_parquet",
349     "donnees_techniques.ctx_date_audience as date_audience",
350     "delai",
351     "delai_incompletude",
352     "date_dernier_depot",
353     "date_limite",
354     "date_complet",
355     "date_limite_incompletude",
356     "date_cloture_instruction",
357     // Col 2
358 softime 9282 "dossier.etat",
359 softime 8989 "evenement_suivant_tacite",
360     "evenement_suivant_tacite_incompletude",
361     // Bloc 2 fieldsets
362     // Col 1 : Fieldset "Décision"
363     "dossier.date_decision",
364     "dossier.avis_decision",
365     // Col 2 : Fieldset "Validité de l'autorisation"
366     "dossier.date_validite",
367     // Autre
368     // Col 1
369     "accord_tacite",
370     // Col 2
371     "date_rejet",
372     "date_notification_delai",
373     "dossier.date_chantier",
374     "dossier.date_achevement",
375     // Col 3
376     "date_conformite",
377     // Fieldset "Simulation des taxes"
378     "tax_mtn_part_commu",
379     "tax_mtn_part_commu_sans_exo",
380     "tax_mtn_part_depart",
381     "tax_mtn_part_depart_sans_exo",
382     "tax_mtn_part_reg",
383     "tax_mtn_part_reg_sans_exo",
384     "tax_mtn_total",
385     "tax_mtn_total_sans_exo",
386     "tax_mtn_rap",
387     "tax_mtn_rap_sans_exo",
388     // Fieldset "Localisation du terrain"
389     // Col 1
390     "dossier.terrain_adresse_voie_numero",
391     "dossier.terrain_adresse_lieu_dit",
392     "dossier.terrain_adresse_code_postal",
393     "dossier.terrain_adresse_cedex",
394     "dossier.parcelle_temporaire",
395     "dossier.terrain_references_cadastrales",
396     // Col 2
397     "dossier.terrain_adresse_voie",
398     "dossier.terrain_adresse_bp",
399     "dossier.terrain_adresse_localite",
400     "dossier.terrain_superficie",
401     //
402     "geom1",
403     "dossier.description",
404     "version",
405     "incompletude",
406     "incomplet_notifie",
407     "etat_pendant_incompletude",
408     "dossier.duree_validite",
409     "quartier",
410     "dossier.log_instructions",
411     "interface_referentiel_erp",
412     "date_modification",
413     "hash_sitadel",
414 softime 9245 "version_clos",
415     "initial_dt",
416 softime 10573 // POC
417     "dossier.numerotation_type",
418     "dossier.numerotation_dep",
419     "dossier.numerotation_com",
420     "dossier.numerotation_division",
421     "dossier.numerotation_suffixe",
422     "dossier.numerotation_entite",
423     "dossier.numerotation_num",
424     "dossier.numerotation_num_suffixe",
425     "dossier.numerotation_num_entite",
426     // CONSULTATION ENTRANTE
427     "consultation_entrante.consultation_entrante",
428     "consultation_entrante.delai_reponse",
429     "consultation_entrante.type_delai",
430     "consultation_entrante.date_consultation",
431     "consultation_entrante.date_emission",
432     "consultation_entrante.date_production_notification",
433     "consultation_entrante.date_premiere_consultation",
434     "consultation_entrante.objet_consultation",
435     "consultation_entrante.etat_consultation",
436     "consultation_entrante.type_consultation",
437     "consultation_entrante.texte_fondement_reglementaire",
438     "consultation_entrante.texte_objet_consultation",
439     "consultation_entrante.service_consultant_id",
440     "consultation_entrante.service_consultant_libelle",
441     "consultation_entrante.service_consultant_insee",
442     "consultation_entrante.service_consultant_mail",
443     "consultation_entrante.service_consultant_type",
444     "consultation_entrante.service_consultant__siren",
445 softime 11585 "consultation_entrante.dossier as dossier_consultation",
446     //
447     "'' as lien_iiue"
448 softime 8989 );
449 softime 10573 return $champs;
450 softime 8989 }
451    
452     /**
453     * Clause from pour la requête de sélection des données de l'enregistrement.
454     *
455     * @return string
456     */
457     function get_var_sql_forminc__tableSelect() {
458     return sprintf(
459     '%1$s%2$s
460     LEFT JOIN %1$savis_decision
461     ON avis_decision.avis_decision=dossier.avis_decision
462     LEFT JOIN %1$sdossier_autorisation
463     ON dossier.dossier_autorisation=dossier_autorisation.dossier_autorisation
464     LEFT JOIN %1$sdossier_autorisation_type_detaille
465     ON dossier_autorisation.dossier_autorisation_type_detaille=dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
466     LEFT JOIN (
467     SELECT *
468     FROM %1$slien_dossier_demandeur
469     INNER JOIN %1$sdemandeur
470     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
471     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
472     AND LOWER(demandeur.type_demandeur) = LOWER(\'petitionnaire\')
473     ) as petitionnaire_principal
474     ON petitionnaire_principal.dossier = dossier.dossier
475     LEFT JOIN (
476     SELECT *
477     FROM %1$slien_dossier_demandeur
478     INNER JOIN %1$sdemandeur
479     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
480     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
481     AND LOWER(demandeur.type_demandeur) = LOWER(\'requerant\')
482     ) as requerant_principal
483     ON requerant_principal.dossier = dossier.dossier
484     LEFT JOIN (
485     SELECT *
486     FROM %1$slien_dossier_demandeur
487     INNER JOIN %1$sdemandeur
488     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
489     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
490     AND LOWER(demandeur.type_demandeur) = LOWER(\'contrevenant\')
491     ) as contrevenant_principal
492     ON contrevenant_principal.dossier = dossier.dossier
493     LEFT JOIN %1$sdonnees_techniques
494     ON donnees_techniques.dossier_instruction = dossier.dossier
495     LEFT JOIN %1$setat
496     ON dossier.etat = etat.etat
497     LEFT JOIN %1$sarrondissement
498 softime 10573 ON dossier.terrain_adresse_code_postal = arrondissement.code_postal
499     LEFT JOIN %1$sconsultation_entrante
500     ON dossier.dossier = consultation_entrante.dossier',
501 softime 8989 DB_PREFIXE,
502     $this->table
503     );
504     }
505    
506     /**
507     *
508     * @return string
509     */
510     function get_var_sql_forminc__sql_avis_decision() {
511     return "SELECT avis_decision,libelle from ".DB_PREFIXE."avis_decision order by libelle";
512     }
513    
514     /**
515     *
516     * @return string
517     */
518     function get_var_sql_forminc__sql_avis_decision_by_id() {
519     return "SELECT avis_decision.avis_decision, libelle FROM ".DB_PREFIXE."avis_decision WHERE avis_decision = '<idx>'";
520     }
521    
522     /**
523     *
524     * @return string
525     */
526     function get_var_sql_forminc__sql_dossier_autorisation() {
527     return "SELECT dossier_autorisation.dossier_autorisation, dossier_autorisation.dossier_autorisation FROM ".DB_PREFIXE."dossier_autorisation ORDER BY dossier_autorisation.dossier_autorisation ASC";
528     }
529    
530     /**
531     *
532     * @return string
533     */
534     function get_var_sql_forminc__sql_dossier_autorisation_by_id() {
535     return "SELECT dossier_autorisation.dossier_autorisation, dossier_autorisation.dossier_autorisation FROM ".DB_PREFIXE."dossier_autorisation WHERE dossier_autorisation = '<idx>'";
536     }
537    
538     /**
539     *
540     * @return string
541     */
542     function get_var_sql_forminc__sql_arrondissement() {
543     return "SELECT arrondissement.arrondissement, arrondissement.libelle FROM ".DB_PREFIXE."arrondissement ORDER BY arrondissement.libelle ASC";
544     }
545    
546     /**
547     *
548     * @return string
549     */
550     function get_var_sql_forminc__sql_arrondissement_by_id() {
551     return "SELECT arrondissement.arrondissement, arrondissement.libelle FROM ".DB_PREFIXE."arrondissement WHERE arrondissement = <idx>";
552     }
553    
554     /**
555     *
556     * @return string
557     */
558     function get_var_sql_forminc__sql_autorisation_contestee() {
559     return "SELECT dossier.dossier, dossier.dossier_libelle FROM ".DB_PREFIXE."dossier ORDER BY dossier.annee ASC";
560     }
561    
562     /**
563     *
564     * @return string
565     */
566     function get_var_sql_forminc__sql_autorisation_contestee_by_id() {
567     return "SELECT dossier.dossier, dossier.dossier_libelle FROM ".DB_PREFIXE."dossier WHERE dossier = '<idx>'";
568     }
569    
570     /**
571     *
572     * @return string
573     */
574     function get_var_sql_forminc__sql_dossier_autorisation_type_detaille() {
575     return "SELECT dossier_autorisation_type_detaille.dossier_autorisation_type_detaille, dossier_autorisation_type_detaille.code
576     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
577     ORDER BY dossier_autorisation_type_detaille.libelle";
578     }
579    
580     /**
581     *
582     * @return string
583     */
584     function get_var_sql_forminc__sql_dossier_autorisation_type_detaille_by_id() {
585     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>";
586     }
587    
588     /**
589     *
590     * @return string
591     */
592     function get_var_sql_forminc__sql_demandeur() {
593     return "SELECT dossier_autorisation_type_detaille.dossier_autorisation_type_detaille, dossier_autorisation_type_detaille.libelle
594     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
595     ORDER BY dossier_autorisation_type_detaille.libelle";
596     }
597    
598     /**
599     *
600     * @return string
601     */
602     function get_var_sql_forminc__sql_demandeur_by_id() {
603     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>";
604     }
605    
606     /**
607     *
608     * @return string
609     */
610     function get_var_sql_forminc__sql_instructeur_div() {
611     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
612     FROM ".DB_PREFIXE."instructeur
613     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
614     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
615     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)))
616     <instructeur_qualite>
617     ORDER BY nom";
618     }
619    
620     /**
621     *
622     * @return string
623     */
624     function get_var_sql_forminc__sql_instructeur_div_by_id() {
625     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
626     FROM ".DB_PREFIXE."instructeur
627     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
628     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
629     WHERE instructeur = <idx>";
630     }
631    
632     /**
633     *
634     * @return string
635     */
636     function get_var_sql_forminc__sql_instructeur_div_by_di() {
637     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
638     FROM ".DB_PREFIXE."instructeur
639     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
640     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
641     LEFT JOIN ".DB_PREFIXE."direction
642     ON division.direction = direction.direction
643     LEFT JOIN ".DB_PREFIXE."om_collectivite
644     ON direction.om_collectivite = om_collectivite.om_collectivite
645     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)))
646     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
647     <instructeur_qualite>
648     ORDER BY nom";
649     }
650    
651     /**
652     *
653     * @return string
654     */
655     function get_var_sql_forminc__sql_instructeur_by_di() {
656     return "SELECT instructeur.instructeur, instructeur.nom
657     FROM ".DB_PREFIXE."instructeur
658     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
659     LEFT JOIN ".DB_PREFIXE."division
660     ON instructeur.division = division.division
661     LEFT JOIN ".DB_PREFIXE."direction
662     ON division.direction = direction.direction
663     LEFT JOIN ".DB_PREFIXE."om_collectivite
664     ON direction.om_collectivite = om_collectivite.om_collectivite
665     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)))
666     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
667     <instructeur_qualite>
668     ORDER BY instructeur.nom ASC";
669     }
670    
671     /**
672     *
673     * @return string
674     */
675     function get_var_sql_forminc__sql_instructeur_2_div() {
676     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
677     FROM ".DB_PREFIXE."instructeur
678     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
679     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
680     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)))
681     AND instructeur_qualite.code = 'tech'
682     ORDER BY nom";
683     }
684    
685     /**
686     *
687     * @return string
688     */
689     function get_var_sql_forminc__sql_instructeur_2_div_by_id() {
690     return $this->get_var_sql_forminc__sql("instructeur_div_by_id");
691     }
692    
693     /**
694     *
695     * @return string
696     */
697     function get_var_sql_forminc__sql_instructeur_2_div_by_di() {
698     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
699     FROM ".DB_PREFIXE."instructeur
700     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
701     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
702     LEFT JOIN ".DB_PREFIXE."direction
703     ON division.direction = direction.direction
704     LEFT JOIN ".DB_PREFIXE."om_collectivite
705     ON direction.om_collectivite = om_collectivite.om_collectivite
706     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)))
707     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
708     AND instructeur_qualite.code = 'tech'
709     ORDER BY nom";
710     }
711    
712     /**
713     *
714     * @return string
715     */
716     function get_var_sql_forminc__sql_instructeur_2_by_di() {
717     return "SELECT instructeur.instructeur, instructeur.nom
718     FROM ".DB_PREFIXE."instructeur
719     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
720     LEFT JOIN ".DB_PREFIXE."division
721     ON instructeur.division = division.division
722     LEFT JOIN ".DB_PREFIXE."direction
723     ON division.direction = direction.direction
724     LEFT JOIN ".DB_PREFIXE."om_collectivite
725     ON direction.om_collectivite = om_collectivite.om_collectivite
726     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)))
727     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
728     AND instructeur_qualite.code = 'tech'
729     ORDER BY instructeur.nom ASC";
730     }
731    
732     /**
733     *
734     * @return string
735     */
736     function get_var_sql_forminc__sql_division_by_di() {
737     return "SELECT division.division, division.libelle
738     FROM ".DB_PREFIXE."division
739     LEFT JOIN ".DB_PREFIXE."direction
740     ON division.direction = direction.direction
741     LEFT JOIN ".DB_PREFIXE."om_collectivite
742     ON direction.om_collectivite = om_collectivite.om_collectivite
743     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)))
744     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
745     ORDER BY division.libelle ASC";
746     }
747    
748     /**
749 softime 10573 *
750     * @return string
751     */
752     function get_var_sql_forminc__sql_commune() {
753     return "
754     SELECT
755 softime 11228 commune.commune, commune.libelle AS libelle
756 softime 10573 FROM
757     ".DB_PREFIXE."commune
758 softime 11228 WHERE (commune.om_validite_debut IS NULL OR commune.om_validite_debut <= CURRENT_DATE)
759     AND (commune.om_validite_fin IS NULL OR commune.om_validite_fin > CURRENT_DATE)
760     ORDER BY commune.libelle ASC
761 softime 10573 ";
762     }
763    
764     /**
765 softime 11585 *
766     * @return string
767     */
768     function get_var_sql_forminc__sql_dossier_instruction_type_by_id() {
769     return sprintf('
770     SELECT dossier_instruction_type.dossier_instruction_type,
771     CONCAT_WS(\' - \', dossier_autorisation_type_detaille.libelle, dossier_instruction_type.libelle)
772     FROM %1$sdossier_instruction_type
773     LEFT JOIN %1$sdossier_autorisation_type_detaille ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
774     WHERE dossier_instruction_type = <idx>
775     ',
776     DB_PREFIXE
777     );
778     }
779    
780     /**
781 mbroquet 3730 * VIEW - view_sitadel.
782     *
783     * @return void
784     */
785     function view_sitadel() {
786 softime 8989 // Affichage du formulaire permettant le choix d'un interval de date
787 mbroquet 3730 // ainsi que le numéro de d'ordre qui est le numéro de la version de
788     // l'export
789 softime 8989 if (empty($this->f->get_submitted_post_value())) {
790 mbroquet 3730 // Affichage du formulaire
791 softime 8989 $this->affichageFormulaire();
792 mbroquet 3730 }
793     else {
794     // Initialisation des variables pour les messages de fin de traitement
795     $correct=true;
796     // Initialisation de la chaîne contenant le message d'erreur
797     $erreur = "";
798 softime 8989 //
799     $message_valid = '';
800     $message_info = '';
801 mbroquet 3730
802     // Initialisation des dates de début et de fin
803     $datedebut ='';
804     $datefin='';
805    
806     // Traitement des erreurs
807     if ($this->f->get_submitted_post_value("datedebut") == "") {
808     $correct=false;
809     } else {
810     $datedebut = substr($this->f->get_submitted_post_value("datedebut"),6,4).
811     "-".substr($this->f->get_submitted_post_value("datedebut"),3,2)."-".
812     substr($this->f->get_submitted_post_value("datedebut"),0,2);
813     }
814     if ($this->f->get_submitted_post_value("datefin") == "") {
815     $correct=false;
816     } else {
817     $datefin = substr($this->f->get_submitted_post_value("datefin"),6,4).
818     "-".substr($this->f->get_submitted_post_value("datefin"),3,2)."-".
819     substr($this->f->get_submitted_post_value("datefin"),0,2);
820     }
821     $numero = $this->f->get_submitted_post_value("numero");
822     //
823     if ($correct === true){ // ***
824     // Requête permettant de lister tous les dossiers de l'export
825     $sql= "SELECT dossier.dossier,
826     dossier.om_collectivite as collectivite,
827     dossier.dossier_autorisation,
828     dossier_instruction_type.mouvement_sitadel,
829     dossier_instruction_type.code as dossier_instruction_type_code,
830     dossier.date_depot,
831     dossier.date_decision,
832     dossier.date_chantier,
833     dossier.date_achevement,
834     dossier.terrain_references_cadastrales as dossier_terrain_references_cadastrales,
835     dossier.terrain_adresse_voie_numero as dossier_terrain_adresse_voie_numero,
836     dossier.terrain_adresse_voie as dossier_terrain_adresse_voie,
837     dossier.terrain_adresse_lieu_dit as dossier_terrain_adresse_lieu_dit,
838     dossier.terrain_adresse_localite as dossier_terrain_adresse_localite,
839     dossier.terrain_adresse_code_postal as dossier_terrain_adresse_code_postal,
840     dossier.terrain_adresse_bp as dossier_terrain_adresse_bp,
841     dossier.terrain_adresse_cedex as dossier_terrain_adresse_cedex,
842     dossier_autorisation_type.code,
843     dossier.date_limite,
844     dossier.date_limite_incompletude,
845     dossier.date_notification_delai,
846     dossier.terrain_superficie as dossier_terrain_superficie,
847 softime 7996 dossier.date_modification,
848     dossier.hash_sitadel,
849 mbroquet 3730
850     arrondissement.code_impots as code_impots,
851    
852     autorite_competente.autorite_competente_sitadel,
853     pp.type_demandeur,
854     pp.qualite,
855     civilite_pp.libelle as civilite_pp,
856     pp.particulier_nom as pp_particulier_nom,
857     pp.particulier_prenom as pp_particulier_prenom,
858     pp.personne_morale_denomination as pp_personne_morale_denomination,
859     pp.personne_morale_raison_sociale as pp_personne_morale_raison_sociale,
860     pp.personne_morale_siret as pp_personne_morale_siret,
861     pp.personne_morale_categorie_juridique as pp_personne_morale_categorie_juridique,
862     civilite_pm.libelle as civilite_pm_libelle,
863     pp.personne_morale_nom as pp_personne_morale_nom,
864     pp.personne_morale_prenom as pp_personne_morale_prenom,
865    
866     pp.numero as pp_numero,
867     pp.voie as pp_voie,
868     pp.complement as pp_complement,
869     pp.lieu_dit as pp_lieu_dit,
870     pp.localite as pp_localite,
871     pp.code_postal as pp_code_postal,
872     pp.bp as pp_bp,
873     pp.cedex as pp_cedex,
874     pp.pays as pp_pays,
875     pp.division_territoriale as pp_division_territoriale,
876    
877     pp.telephone_fixe as pp_telephone_fixe,
878     pp.courriel as pp_courriel,
879    
880     donnees_techniques.co_archi_recours,
881     donnees_techniques.am_terr_surf,
882     donnees_techniques.am_lotiss,
883     donnees_techniques.terr_juri_zac,
884     donnees_techniques.terr_juri_afu,
885     donnees_techniques.co_projet_desc,
886     donnees_techniques.am_projet_desc,
887     donnees_techniques.dm_projet_desc,
888     donnees_techniques.co_cstr_nouv,
889     donnees_techniques.co_cstr_exist,
890     donnees_techniques.co_modif_aspect,
891     donnees_techniques.co_modif_struct,
892     donnees_techniques.co_cloture,
893     donnees_techniques.co_trx_exten,
894     donnees_techniques.co_trx_surelev,
895     donnees_techniques.co_trx_nivsup,
896     donnees_techniques.co_trx_amgt,
897     donnees_techniques.co_anx_pisc,
898     donnees_techniques.co_anx_gara,
899     donnees_techniques.co_anx_veran,
900     donnees_techniques.co_anx_abri,
901     donnees_techniques.co_anx_autr,
902     donnees_techniques.co_bat_niv_nb,
903 softime 4636
904     -- Tableau des destinations
905 mbroquet 3730 donnees_techniques.su_avt_shon1,
906     donnees_techniques.su_avt_shon2,
907     donnees_techniques.su_avt_shon3,
908     donnees_techniques.su_avt_shon4,
909     donnees_techniques.su_avt_shon5,
910     donnees_techniques.su_avt_shon6,
911     donnees_techniques.su_avt_shon7,
912     donnees_techniques.su_avt_shon8,
913     donnees_techniques.su_avt_shon9,
914     donnees_techniques.su_demo_shon1,
915     donnees_techniques.su_demo_shon2,
916     donnees_techniques.su_demo_shon3,
917     donnees_techniques.su_demo_shon4,
918     donnees_techniques.su_demo_shon5,
919     donnees_techniques.su_demo_shon6,
920     donnees_techniques.su_demo_shon7,
921     donnees_techniques.su_demo_shon8,
922     donnees_techniques.su_demo_shon9,
923     donnees_techniques.su_chge_shon1,
924     donnees_techniques.su_chge_shon2,
925     donnees_techniques.su_chge_shon3,
926     donnees_techniques.su_chge_shon4,
927     donnees_techniques.su_chge_shon5,
928     donnees_techniques.su_chge_shon6,
929     donnees_techniques.su_chge_shon7,
930     donnees_techniques.su_chge_shon8,
931     donnees_techniques.su_chge_shon9,
932 softime 4636 donnees_techniques.su_sup_shon1,
933     donnees_techniques.su_sup_shon2,
934     donnees_techniques.su_sup_shon3,
935     donnees_techniques.su_sup_shon4,
936     donnees_techniques.su_sup_shon5,
937     donnees_techniques.su_sup_shon6,
938     donnees_techniques.su_sup_shon7,
939     donnees_techniques.su_sup_shon8,
940     donnees_techniques.su_sup_shon9,
941 mbroquet 3730 donnees_techniques.su_cstr_shon1,
942     donnees_techniques.su_cstr_shon2,
943     donnees_techniques.su_cstr_shon3,
944     donnees_techniques.su_cstr_shon4,
945     donnees_techniques.su_cstr_shon5,
946     donnees_techniques.su_cstr_shon6,
947     donnees_techniques.su_cstr_shon7,
948     donnees_techniques.su_cstr_shon8,
949     donnees_techniques.su_cstr_shon9,
950     donnees_techniques.su_tot_shon1,
951     donnees_techniques.su_tot_shon2,
952     donnees_techniques.su_tot_shon3,
953     donnees_techniques.su_tot_shon4,
954     donnees_techniques.su_tot_shon5,
955     donnees_techniques.su_tot_shon6,
956     donnees_techniques.su_tot_shon7,
957     donnees_techniques.su_tot_shon8,
958     donnees_techniques.su_tot_shon9,
959 softime 4636 -- XXX valeurs obsolètes mais utilisées dans les conditions
960     -- pour afficher les messages d'incohérence
961     donnees_techniques.su_trsf_shon1,
962     donnees_techniques.su_trsf_shon2,
963     donnees_techniques.su_trsf_shon3,
964     donnees_techniques.su_trsf_shon4,
965     donnees_techniques.su_trsf_shon5,
966     donnees_techniques.su_trsf_shon6,
967     donnees_techniques.su_trsf_shon7,
968     donnees_techniques.su_trsf_shon8,
969     donnees_techniques.su_trsf_shon9,
970    
971     -- Tableau des sous-destinations
972     donnees_techniques.su2_avt_shon1,
973     donnees_techniques.su2_avt_shon2,
974     donnees_techniques.su2_avt_shon3,
975     donnees_techniques.su2_avt_shon4,
976     donnees_techniques.su2_avt_shon5,
977     donnees_techniques.su2_avt_shon6,
978     donnees_techniques.su2_avt_shon7,
979     donnees_techniques.su2_avt_shon8,
980     donnees_techniques.su2_avt_shon9,
981     donnees_techniques.su2_avt_shon10,
982     donnees_techniques.su2_avt_shon11,
983     donnees_techniques.su2_avt_shon12,
984     donnees_techniques.su2_avt_shon13,
985     donnees_techniques.su2_avt_shon14,
986     donnees_techniques.su2_avt_shon15,
987     donnees_techniques.su2_avt_shon16,
988     donnees_techniques.su2_avt_shon17,
989     donnees_techniques.su2_avt_shon18,
990     donnees_techniques.su2_avt_shon19,
991     donnees_techniques.su2_avt_shon20,
992     donnees_techniques.su2_demo_shon1,
993     donnees_techniques.su2_demo_shon2,
994     donnees_techniques.su2_demo_shon3,
995     donnees_techniques.su2_demo_shon4,
996     donnees_techniques.su2_demo_shon5,
997     donnees_techniques.su2_demo_shon6,
998     donnees_techniques.su2_demo_shon7,
999     donnees_techniques.su2_demo_shon8,
1000     donnees_techniques.su2_demo_shon9,
1001     donnees_techniques.su2_demo_shon10,
1002     donnees_techniques.su2_demo_shon11,
1003     donnees_techniques.su2_demo_shon12,
1004     donnees_techniques.su2_demo_shon13,
1005     donnees_techniques.su2_demo_shon14,
1006     donnees_techniques.su2_demo_shon15,
1007     donnees_techniques.su2_demo_shon16,
1008     donnees_techniques.su2_demo_shon17,
1009     donnees_techniques.su2_demo_shon18,
1010     donnees_techniques.su2_demo_shon19,
1011     donnees_techniques.su2_demo_shon20,
1012     donnees_techniques.su2_chge_shon1,
1013     donnees_techniques.su2_chge_shon2,
1014     donnees_techniques.su2_chge_shon3,
1015     donnees_techniques.su2_chge_shon4,
1016     donnees_techniques.su2_chge_shon5,
1017     donnees_techniques.su2_chge_shon6,
1018     donnees_techniques.su2_chge_shon7,
1019     donnees_techniques.su2_chge_shon8,
1020     donnees_techniques.su2_chge_shon9,
1021     donnees_techniques.su2_chge_shon10,
1022     donnees_techniques.su2_chge_shon11,
1023     donnees_techniques.su2_chge_shon12,
1024     donnees_techniques.su2_chge_shon13,
1025     donnees_techniques.su2_chge_shon14,
1026     donnees_techniques.su2_chge_shon15,
1027     donnees_techniques.su2_chge_shon16,
1028     donnees_techniques.su2_chge_shon17,
1029     donnees_techniques.su2_chge_shon18,
1030     donnees_techniques.su2_chge_shon19,
1031     donnees_techniques.su2_chge_shon20,
1032     donnees_techniques.su2_sup_shon1,
1033     donnees_techniques.su2_sup_shon2,
1034     donnees_techniques.su2_sup_shon3,
1035     donnees_techniques.su2_sup_shon4,
1036     donnees_techniques.su2_sup_shon5,
1037     donnees_techniques.su2_sup_shon6,
1038     donnees_techniques.su2_sup_shon7,
1039     donnees_techniques.su2_sup_shon8,
1040     donnees_techniques.su2_sup_shon9,
1041     donnees_techniques.su2_sup_shon10,
1042     donnees_techniques.su2_sup_shon11,
1043     donnees_techniques.su2_sup_shon12,
1044     donnees_techniques.su2_sup_shon13,
1045     donnees_techniques.su2_sup_shon14,
1046     donnees_techniques.su2_sup_shon15,
1047     donnees_techniques.su2_sup_shon16,
1048     donnees_techniques.su2_sup_shon17,
1049     donnees_techniques.su2_sup_shon18,
1050     donnees_techniques.su2_sup_shon19,
1051     donnees_techniques.su2_sup_shon20,
1052     donnees_techniques.su2_cstr_shon1,
1053     donnees_techniques.su2_cstr_shon2,
1054     donnees_techniques.su2_cstr_shon3,
1055     donnees_techniques.su2_cstr_shon4,
1056     donnees_techniques.su2_cstr_shon5,
1057     donnees_techniques.su2_cstr_shon6,
1058     donnees_techniques.su2_cstr_shon7,
1059     donnees_techniques.su2_cstr_shon8,
1060     donnees_techniques.su2_cstr_shon9,
1061     donnees_techniques.su2_cstr_shon10,
1062     donnees_techniques.su2_cstr_shon11,
1063     donnees_techniques.su2_cstr_shon12,
1064     donnees_techniques.su2_cstr_shon13,
1065     donnees_techniques.su2_cstr_shon14,
1066     donnees_techniques.su2_cstr_shon15,
1067     donnees_techniques.su2_cstr_shon16,
1068     donnees_techniques.su2_cstr_shon17,
1069     donnees_techniques.su2_cstr_shon18,
1070     donnees_techniques.su2_cstr_shon19,
1071     donnees_techniques.su2_cstr_shon20,
1072     donnees_techniques.su2_tot_shon1,
1073     donnees_techniques.su2_tot_shon2,
1074     donnees_techniques.su2_tot_shon3,
1075     donnees_techniques.su2_tot_shon4,
1076     donnees_techniques.su2_tot_shon5,
1077     donnees_techniques.su2_tot_shon6,
1078     donnees_techniques.su2_tot_shon7,
1079     donnees_techniques.su2_tot_shon8,
1080     donnees_techniques.su2_tot_shon9,
1081     donnees_techniques.su2_tot_shon10,
1082     donnees_techniques.su2_tot_shon11,
1083     donnees_techniques.su2_tot_shon12,
1084     donnees_techniques.su2_tot_shon13,
1085     donnees_techniques.su2_tot_shon14,
1086     donnees_techniques.su2_tot_shon15,
1087     donnees_techniques.su2_tot_shon16,
1088     donnees_techniques.su2_tot_shon17,
1089     donnees_techniques.su2_tot_shon18,
1090     donnees_techniques.su2_tot_shon19,
1091     donnees_techniques.su2_tot_shon20,
1092    
1093 mbroquet 3730 donnees_techniques.co_sp_transport,
1094     donnees_techniques.co_sp_enseign,
1095     donnees_techniques.co_sp_sante,
1096     donnees_techniques.co_sp_act_soc,
1097     donnees_techniques.co_sp_ouvr_spe,
1098     donnees_techniques.co_sp_culture,
1099     donnees_techniques.dm_tot_log_nb,
1100     donnees_techniques.co_tot_ind_nb,
1101     donnees_techniques.co_tot_coll_nb,
1102     donnees_techniques.co_tot_log_nb,
1103     donnees_techniques.co_resid_agees,
1104     donnees_techniques.co_resid_etud,
1105     donnees_techniques.co_resid_tourism,
1106     donnees_techniques.co_resid_hot_soc,
1107     donnees_techniques.co_resid_hand,
1108     donnees_techniques.co_resid_autr,
1109     donnees_techniques.co_resid_autr_desc,
1110     donnees_techniques.co_uti_pers,
1111     donnees_techniques.co_uti_princ,
1112     donnees_techniques.co_uti_secon,
1113     donnees_techniques.co_uti_vente,
1114     donnees_techniques.co_uti_loc,
1115     donnees_techniques.co_foyer_chamb_nb,
1116     donnees_techniques.co_fin_lls_nb,
1117     donnees_techniques.co_fin_aa_nb,
1118     donnees_techniques.co_fin_ptz_nb,
1119     donnees_techniques.co_fin_autr_nb,
1120     donnees_techniques.co_mais_piece_nb,
1121     donnees_techniques.co_log_1p_nb,
1122     donnees_techniques.co_log_2p_nb,
1123     donnees_techniques.co_log_3p_nb,
1124     donnees_techniques.co_log_4p_nb,
1125     donnees_techniques.co_log_5p_nb,
1126     donnees_techniques.co_log_6p_nb,
1127     donnees_techniques.mod_desc,
1128    
1129     donnees_techniques.doc_date,
1130     donnees_techniques.terr_div_surf_av_div,
1131     donnees_techniques.doc_tot_trav,
1132     donnees_techniques.doc_tranche_trav,
1133     donnees_techniques.doc_tranche_trav_desc,
1134     donnees_techniques.doc_surf,
1135     donnees_techniques.doc_nb_log,
1136     donnees_techniques.doc_nb_log_indiv,
1137     donnees_techniques.doc_nb_log_coll,
1138     donnees_techniques.doc_nb_log_lls,
1139     donnees_techniques.doc_nb_log_aa,
1140     donnees_techniques.doc_nb_log_ptz,
1141     donnees_techniques.doc_nb_log_autre,
1142     donnees_techniques.daact_date,
1143     donnees_techniques.daact_date_chgmt_dest,
1144     donnees_techniques.daact_tot_trav,
1145     donnees_techniques.daact_tranche_trav,
1146     donnees_techniques.daact_tranche_trav_desc,
1147     donnees_techniques.daact_surf,
1148     donnees_techniques.daact_nb_log,
1149     donnees_techniques.daact_nb_log_indiv,
1150     donnees_techniques.daact_nb_log_coll,
1151     donnees_techniques.daact_nb_log_lls,
1152     donnees_techniques.daact_nb_log_aa,
1153     donnees_techniques.daact_nb_log_ptz,
1154     donnees_techniques.daact_nb_log_autre,
1155    
1156     dossier_autorisation.date_depot as date_depot_da,
1157     dossier_autorisation.date_decision as date_decision_da,
1158     dossier_autorisation.date_validite as date_validite_da,
1159     dossier_autorisation.date_chantier as date_chantier_da,
1160     dossier_autorisation.date_achevement as date_achevement_da,
1161     avis_decision.typeavis as typeavis_da,
1162     avis_decision.sitadel,
1163     avis_decision.sitadel_motif,
1164     avis_decision.typeavis,
1165     etat.statut as statut_di
1166    
1167     FROM ".DB_PREFIXE."dossier
1168    
1169     INNER JOIN ".DB_PREFIXE."dossier_instruction_type
1170     ON dossier.dossier_instruction_type =
1171     dossier_instruction_type.dossier_instruction_type
1172     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
1173     ON dossier_instruction_type.dossier_autorisation_type_detaille
1174     =dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1175     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
1176     ON dossier_autorisation_type.dossier_autorisation_type
1177     =dossier_autorisation_type_detaille.dossier_autorisation_type
1178 softime 6565 INNER JOIN ".DB_PREFIXE."groupe
1179     ON dossier_autorisation_type.groupe = groupe.groupe
1180     AND groupe.code != 'CTX'
1181 mbroquet 3730 INNER JOIN ".DB_PREFIXE."dossier_autorisation
1182     ON dossier_autorisation.dossier_autorisation
1183     =dossier.dossier_autorisation
1184     INNER JOIN ".DB_PREFIXE."autorite_competente
1185     ON autorite_competente.autorite_competente
1186     =dossier.autorite_competente
1187    
1188     LEFT JOIN ".DB_PREFIXE."donnees_techniques
1189     ON donnees_techniques.dossier_instruction = dossier.dossier
1190     LEFT JOIN ".DB_PREFIXE."avis_decision
1191     ON avis_decision.avis_decision = dossier.avis_decision
1192     LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur as ldd_pp
1193     ON ldd_pp.dossier = dossier.dossier
1194     LEFT JOIN ".DB_PREFIXE."demandeur as pp
1195     ON ldd_pp.demandeur = pp.demandeur
1196     LEFT JOIN ".DB_PREFIXE."civilite as civilite_pp
1197     ON civilite_pp.civilite = pp.particulier_civilite
1198     LEFT JOIN ".DB_PREFIXE."civilite as civilite_pm
1199     ON civilite_pm.civilite = pp.personne_morale_civilite
1200     LEFT JOIN ".DB_PREFIXE."etat
1201     ON etat.etat = dossier.etat
1202     LEFT JOIN ".DB_PREFIXE."arrondissement
1203     ON dossier_autorisation.arrondissement=arrondissement.arrondissement
1204    
1205     WHERE dossier_instruction_type.mouvement_sitadel IS NOT NULL
1206     AND ldd_pp.petitionnaire_principal is TRUE
1207 softime 7996 AND (dossier.date_modification >= '".$datedebut."' AND dossier.date_modification <= '".$datefin."')
1208 mbroquet 3730 ORDER by dossier_instruction_type.mouvement_sitadel, dossier.dossier";
1209     //Exécution de la requête
1210     $res = $this->f->db -> query ($sql);
1211     $this->f->addToLog("dossier.class.php : db->query(\"".$sql."\")", VERBOSE_MODE);
1212     $this->f->isDatabaseError($res);
1213     $export="";
1214     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
1215     // initialisation de la classe permettant la mise en forme de chaque ligne de l'export
1216     require_once "../obj/export_sitadel.class.php";
1217     $export_sitadel = new export_sitadel($row['dossier'], $this->f);
1218     $export_sitadel->setRow($row);
1219     //Ajout du fichier de variable
1220     if(file_exists ("../sql/".OM_DB_PHPTYPE."/export_sitadel.inc.php")) {
1221     include ("../sql/".OM_DB_PHPTYPE."/export_sitadel.inc.php");
1222     }
1223     //
1224     $export_sitadel->setVal($val);
1225     $departement = $export_sitadel->getDepartement($row["collectivite"]);
1226     $commune = $export_sitadel->getCommune($row["collectivite"]);
1227     $region = $this->f->getParameter("region");
1228 softime 4636
1229     // Initialisation des variables pour le tableau des
1230     // surfaces en version 1
1231     $prefix_su = 'su';
1232     $count_su = 9;
1233     // S'il faut utiliser le tableau des surfaces en
1234     // version 2
1235     if ($export_sitadel->get_tab_su_version() === 2) {
1236     //
1237     $prefix_su = 'su2';
1238     $count_su = 20;
1239     }
1240    
1241 softime 4838 // Récupère la version du dossier d'instruction depuis son
1242     // numéro
1243     $version = 0;
1244     $version = intval($this->get_dossier_instruction_version($row['dossier']));
1245    
1246 mbroquet 3730 // Mouvement de dépôt
1247     $depot="";
1248    
1249     // Tous les mouvements autres que transfert ont comme mouvement le code DEPOT
1250     // les décisions devant êtres précédées par le dépôt correspondant,
1251     // les dossiers avec date de décision comprise dans l'interval fourni sont
1252     // réaffichés en tant que dépôts (mouvement DEPOT)
1253     if (($row['mouvement_sitadel'] == 'DEPOT'||($row['mouvement_sitadel'] == 'MODIFICATIF'
1254 softime 7996 AND $row['statut_di']=='cloture' AND $row['typeavis']=='F'))) {
1255 softime 4838 $depot.=$export_sitadel->entete("DEPOT",$departement,$commune, $version);
1256 mbroquet 3730 $depot.=$export_sitadel->etatcivil();
1257     $depot.=$export_sitadel->adresse();
1258     $depot.=$export_sitadel->delegataire();
1259     $depot.=$export_sitadel->meltel($row['mouvement_sitadel']);
1260     $depot.=$export_sitadel->adresse_terrain();
1261     $depot.=$export_sitadel->parcelle();
1262     // ===========================
1263     // contrat maison individuelle
1264     // ===========================
1265     // sitadel : contrat|
1266     // openads : non renseigne
1267     $depot.= $export_sitadel->defaultValue('contrat')."|";
1268     // ==========
1269     // architecte
1270     // ==========
1271     // sitadel : architecte|
1272     // openads : données techniques.co_archi_recours
1273     $depot.= ($row['co_archi_recours'] == "t")?"1|":"0|";
1274     // =====================
1275     // utilisation data cnil
1276     // ======================
1277     // sitadel : cnil
1278     // openads : non renseigne
1279     $depot.= $export_sitadel->defaultValue('cnil');
1280     // fin d enregistrement depot
1281     $depot.="\n";
1282     }
1283    
1284     // Seuls les dossier de type transfert ont comme mouvement le code TRANSFERT
1285     $transfert ="";
1286 softime 7996 if ($row['mouvement_sitadel']=='TRANSFERT') {
1287 softime 4838 $transfert.=$export_sitadel->entete("TRANSFERT",$departement,$commune, $version);
1288 mbroquet 3730 $transfert.=$export_sitadel->etatcivil();
1289     $transfert.=$export_sitadel->adresse();
1290     $transfert.=$export_sitadel->meltel($row['mouvement_sitadel']);
1291     $transfert.="\n";
1292     }
1293    
1294    
1295     // Une ligne de mouvement DECISION est insérée après chaque ligne
1296     // de mouvement DEPOT
1297     $decision="";
1298     if ($row['mouvement_sitadel'] != 'TRANSFERT'
1299     and $row['mouvement_sitadel'] != 'SUPPRESSION'
1300 softime 7996 and $row['mouvement_sitadel'] == 'DEPOT') {
1301 mbroquet 3730
1302     //Ajout de l'entête
1303 softime 4838 $decision.=$export_sitadel->entete("DECISION",$departement,$commune, $version);
1304 mbroquet 3730
1305     //Ajout du groupe 1
1306     $decision.= $export_sitadel->decision_groupe1();
1307     // Si la décision est favorable, on remplit le groupe 2
1308     if ( $row['sitadel'] == 2 || $row['sitadel'] == 4 || $row['sitadel'] == 5
1309     || $row['sitadel'] == 0 ){
1310     //
1311     $decision.= $export_sitadel->amenagement_terrain();
1312     //Nature du projet
1313     $natproj = 2;
1314     $natprojlib= array(
1315     1=>_("Nouvelle construction"),
1316     2=>_("Travaux sur construction existante"),
1317     3=>_("Nouvelle construction et travaux sur construction"),
1318     );
1319     if ( isset($row['co_cstr_nouv']) && isset($row['co_cstr_exist']) &&
1320     $row['co_cstr_nouv'] == 't' &&
1321     $row['co_cstr_exist'] == 't' ){
1322     $natproj = 3;
1323     }
1324     //Nouvelle construction
1325     elseif ( isset($row['co_cstr_nouv']) && $row['co_cstr_nouv'] == 't' ) {
1326     $natproj = 1;
1327     }
1328     //
1329 softime 4636 $su_avt_shon = $export_sitadel->shon("avt");
1330 mbroquet 3730 //Si la SHON existante avant travaux est supérieur à la SHON
1331     //démolie alors la variable natproj est égale à 2
1332     $shonExistante = 0;
1333     $shonDemolie = 0;
1334 softime 4636 // Pour chaque ligne du tableau
1335     for ($i = 1; $i <= $count_su; $i++) {
1336     //
1337     $shonExistante += floor($row[$prefix_su.'_avt_shon'.$i]);
1338     $shonDemolie += floor($row[$prefix_su.'_demo_shon'.$i]);
1339 mbroquet 3730 }
1340     //Si la SHON existante avant travaux et la SHON démolie sont
1341     //égales alors la variable natproj est égale à 1
1342     if ( $shonExistante == 0 && $shonDemolie == 0 && $natproj != 1 &&
1343     $row['code'] != 'DP' && $row['code'] != 'PA') {
1344     $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";
1345     } elseif ( $shonExistante > $shonDemolie && $natproj != 2 ){
1346 softime 4640 $erreur .= _("Dossier ").$row['dossier']." \"".$natprojlib[$natproj]."\" "._("La SHON existante avant travaux ne doit pas être supérieure à la SHON démolie.")."\n";
1347 mbroquet 3730 }
1348     $decision .= $su_avt_shon;
1349    
1350 softime 4636 $su_demo_shon = $export_sitadel->shon("demo");
1351 mbroquet 3730 //La SHON démolie s'accompagne obligatoirement de la shon
1352     //existante avant travaux
1353     if ( $shonDemolie != 0 && $shonExistante == 0 ){
1354     $erreur .= _("Dossier ").$row['dossier']." "._("La SHON demolie s'accompagne obligatoirement de la SHON existante avant travaux.")."\n";
1355     }
1356     $decision .= $su_demo_shon;
1357     //
1358 softime 4636 $su_sup_shon = $export_sitadel->shon("sup");
1359     $su_chge_shon = $export_sitadel->shon("chge");
1360 mbroquet 3730 if ( strcasecmp($su_sup_shon, $su_chge_shon) != 0){
1361     //
1362 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";
1363 mbroquet 3730 }
1364     $decision .= $su_sup_shon;
1365     $decision .= $su_chge_shon;
1366 softime 4636 $decision .= $export_sitadel->shon("cstr");
1367 mbroquet 3730 $decision .= "0|0|0|0|0|0|0|0|0|";
1368 softime 4640 // Les SHON créées par changement de destination ou
1369     // de sous-destination s'accompagnent obligatoirement
1370     // de SHON existante avant travaux non nulle
1371 mbroquet 3730 if (preg_match("/[0|]{7}/", $su_chge_shon) &&
1372     preg_match("/[0|]{7}/", $su_avt_shon)){
1373    
1374 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";
1375 mbroquet 3730 }
1376     // Un nombre de logements démolis strictement positif doit
1377     // s'accompagner obligatoirement de SHON démolie.
1378     if($row['dm_tot_log_nb'] > 0) {
1379 softime 4636 if($export_sitadel->get_shon_val('demo', 1) <= 0) {
1380 mbroquet 3730 //
1381     $erreur .= _("Dossier ").$row['dossier']." "._("Un nombre de logements demolis strictement positif doit s'accompagner obligatoirement de SHON demolie.")."\n";
1382     }
1383     }
1384     // Un nombre de logements créés strictement positif doit
1385     // s'accompagner obligatoirement de SHON créée ou de SHON
1386 softime 4640 // créée par changement de destination ou de sous-destination
1387     // ayant pour destination l'habitation.
1388     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)) {
1389 mbroquet 3730 //
1390 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";
1391 mbroquet 3730 }
1392    
1393     // La SHON créée ou issue de la transformation
1394     // suffixée par 9 (intérêt collectif ou service public) doit
1395     // obligatoirement s'accompagner de la décomposition
1396     // en sous modalité renseignée par la variable cpublic et réciproquement.
1397    
1398     // Test si une valeur est true
1399     $cpublic = FALSE;
1400     if (isset($row['co_sp_transport']) && $row['co_sp_transport'] == 't') {
1401     $cpublic = TRUE;
1402     }
1403     if (isset($row['co_sp_enseign']) && $row['co_sp_enseign'] == 't') {
1404     $cpublic = TRUE;
1405     }
1406     if (isset($row['co_sp_sante']) && $row['co_sp_sante'] == 't') {
1407     $cpublic = TRUE;
1408     }
1409     if (isset($row['co_sp_act_soc']) && $row['co_sp_act_soc'] == 't') {
1410     $cpublic = TRUE;
1411     }
1412     if (isset($row['co_sp_ouvr_spe']) && $row['co_sp_ouvr_spe'] == 't') {
1413     $cpublic = TRUE;
1414     }
1415     if (isset($row['co_sp_culture']) && $row['co_sp_culture'] == 't') {
1416     $cpublic = TRUE;
1417     }
1418     //
1419 softime 4640 if($cpublic !== TRUE AND ($export_sitadel->get_shon_val('cstr', 9) > 0 OR $export_sitadel->get_shon_val('chge', 9) > 0)) {
1420     $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";
1421 mbroquet 3730 }
1422    
1423     // La destination principale du logement mise à résidence
1424     // principale ou résidence secondaire doit obligatoirement
1425     // s'accompagner d'un mode d'utilisation à occupation personnelle
1426     if($row['co_uti_princ'] == 't' OR $row['co_uti_secon'] == 't') {
1427     if($row['co_uti_pers'] != 't') {
1428    
1429     $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";
1430     }
1431     }
1432    
1433     $decision.= $export_sitadel->destination($row['mouvement_sitadel']);
1434    
1435     // Le nombre total de logements créés (variable nbtotlog)
1436     // doit être égal à la somme des nombres de logements créés
1437     // ventilés par type de financement
1438 softime 9245 if(intval($row['co_tot_log_nb']) != (intval($row['co_fin_lls_nb']) + intval($row['co_fin_aa_nb']) +
1439     intval($row['co_fin_ptz_nb']) + intval($row['co_fin_autr_nb']))) {
1440 mbroquet 3730
1441     $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";
1442     }
1443    
1444     $decision.= $export_sitadel->repartitionFinan();
1445    
1446     // Le nombre total de logements créés (variable nbtotlog)
1447     // doit être égal à la totalisation de la répartition des
1448     // logements par nombre de pièces
1449 softime 9245 if(intval($row['co_tot_log_nb']) != (intval($row['co_log_1p_nb']) + intval($row['co_log_2p_nb']) +
1450     intval($row['co_log_3p_nb']) + intval($row['co_log_4p_nb']) + intval($row['co_log_5p_nb']) +
1451     intval($row['co_log_6p_nb']))) {
1452 mbroquet 3730
1453     $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";
1454     }
1455    
1456     $decision.= $export_sitadel->repartitionNbPiece($row['mouvement_sitadel']);
1457     }
1458     else {
1459     //
1460     $decision.= str_repeat("|", 6);
1461     if($row['code']=='DP'){
1462     $decision .= "00000|";
1463     }else{
1464     $decision .= "|";
1465     }
1466     $decision .= "0000|00000|";
1467     $decision.= str_repeat("|", 74);
1468     }
1469     $decision.="\n";
1470     }
1471    
1472     // modificatif
1473     $modificatif='';
1474     if($row['mouvement_sitadel'] == 'MODIFICATIF' AND $row['statut_di']=='cloture' AND
1475 softime 7996 $row['typeavis']=='F') {
1476 softime 4838 $modificatif.=$export_sitadel->entete("MODIFICATIF",$departement,$commune, $version);
1477 mbroquet 3730
1478     $modificatif.= $export_sitadel->decision_groupe1();
1479    
1480     if(isset($row['date_decision']) or $row['date_decision']==""){
1481     // avis_sitadel et avis_sitadel_motif
1482     // si la decision est favorable, envoi des informations statistiques
1483     if($row["sitadel"] == 2 or $row["sitadel"] == 4
1484     or $row["sitadel"] == 5){
1485     // si accordé : ajout du 2nd groupe d'informations
1486     $modificatif .= $export_sitadel->adresse_terrain(); // adresse du terrain
1487     $modificatif .= $export_sitadel->parcelle(); // 3 premières parcelles
1488     $modificatif .= $export_sitadel->modificatif_terrain(); // Informations complémentaires
1489    
1490 softime 4636 $modificatif.= $export_sitadel->shon("avt");
1491     $modificatif.= $export_sitadel->shon("demo");
1492     $modificatif.= $export_sitadel->shon("chge");
1493     $modificatif.= $export_sitadel->shon("trsf");
1494     $modificatif.= $export_sitadel->shon("cstr");
1495 mbroquet 3730
1496     $modificatif.= "|||||||||";
1497     $modificatif.= $export_sitadel->destination($row['mouvement_sitadel']);
1498     $modificatif.= $export_sitadel->repartitionFinan();
1499     $modificatif.= $export_sitadel->repartitionNbPiece($row['mouvement_sitadel']);
1500     }
1501     else {
1502     $modificatif .= str_repeat("|", 90);
1503     }
1504     }
1505     else {
1506     $modificatif .= str_repeat("|", 90);
1507     }
1508    
1509     $modificatif.="\n";
1510     }
1511    
1512     // Mouvement suppression
1513     $suppression = '';
1514     if($row['mouvement_sitadel'] == 'SUPPRESSION') {
1515 softime 4838 $suppression .= $export_sitadel->entete("SUPPRESSION",$departement,$commune, $version);
1516 mbroquet 3730 $suppression .= "\n";
1517     }
1518    
1519     // Règles sur le mouvement suivi
1520     $suivi="";
1521     if($row['mouvement_sitadel'] == 'SUIVI' and
1522     ($row['date_chantier'] >= $datedebut and $row['date_chantier']<=$datefin) ||
1523     ($row['date_achevement'] >= $datedebut and $row['date_achevement']<=$datefin)){
1524     // Si le dossier est une DOC
1525     if($row['dossier_instruction_type_code']=='DOC'){
1526     // Une ouverture de chantier ne peut concerner qu'un permis autorisé
1527     if($row['typeavis_da'] != 'F'&&$row['typeavis_da'] != '') {
1528     $erreur .= _("Dossier ").$row['dossier']." "._("Une ouverture de chantier ne peut concerner qu'un permis autorise.")."\n";
1529     }
1530     // La date d'ouverture de chantier doit être supérieur à la date d'autorisation
1531     if($row['doc_date'] > $row['date_decision_da']) {
1532     $erreur .= _("Dossier ").$row['dossier']." "._("La date d'ouverture de chantier doit être superieur a la date d'autorisation.")."\n";
1533     }
1534     // Un achèvement de chantier ne peut concerner qu'un permis autorisé
1535     if($row['typeavis_da'] != 'F'&&$row['typeavis_da'] != '') {
1536     $erreur .= _("Dossier ").$row['dossier']." "._("Un achevement de chantier ne peut concerner qu'un permis autorise.")."\n";
1537     }
1538     if( $row['date_chantier_da'] == "" && $row['date_achevement']!="") {
1539     $erreur .= _("Dossier ").$row['dossier']." "._("Un achevement de chantier ne peut concerner qu'un permis sur lequel un chantier a ete ouvert.")."\n";
1540     }
1541     // La date d'achevement de travaux doit être supérieur à la date d'ouverture des travaux
1542     if($row['daact_date'] > $row['date_chantier_da']) {
1543     $erreur .= _("Dossier ").$row['dossier']." "._("La date d'achevement de travaux doit etre superieur a la date d'ouverture des travaux.")."\n";
1544     }
1545 softime 4838 $suivi.=$export_sitadel->entete("SUIVI",$departement,$commune, $version);//8|
1546 mbroquet 3730 $suivi.=$export_sitadel->chantier($row);
1547     //On récupère la DAACT si elle existe
1548     $sqlDAACT = "SELECT
1549     donnees_techniques.daact_date,
1550     donnees_techniques.daact_date_chgmt_dest,
1551     donnees_techniques.daact_tot_trav,
1552     donnees_techniques.daact_tranche_trav,
1553     donnees_techniques.daact_tranche_trav_desc,
1554     donnees_techniques.daact_surf,
1555     donnees_techniques.daact_nb_log,
1556     donnees_techniques.daact_nb_log_indiv,
1557     donnees_techniques.daact_nb_log_coll,
1558     donnees_techniques.daact_nb_log_lls,
1559     donnees_techniques.daact_nb_log_aa,
1560     donnees_techniques.daact_nb_log_ptz,
1561     donnees_techniques.daact_nb_log_autre,
1562     etat.statut as statut_di
1563    
1564     FROM ".DB_PREFIXE."dossier
1565     LEFT JOIN ".DB_PREFIXE."donnees_techniques
1566     ON dossier.dossier=donnees_techniques.dossier_instruction
1567     LEFT JOIN ".DB_PREFIXE."etat
1568     ON dossier.etat = etat.etat
1569     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
1570     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1571     WHERE dossier.dossier_autorisation ='".$row['dossier_autorisation']."' AND
1572     dossier_instruction_type.code = 'DAACT' and mouvement_sitadel='SUIVI'";
1573     $resDAACT = $this->f->db -> query ($sqlDAACT);
1574     $this->f->addToLog("dossier.class.php : db->query(\"".$sqlDAACT."\")", VERBOSE_MODE);
1575     $this->f->isDatabaseError($resDAACT);
1576     $rowDAACT=& $resDAACT->fetchRow(DB_FETCHMODE_ASSOC);
1577     $suivi.=$export_sitadel->achevement($rowDAACT);
1578     $suivi.="\n";
1579     }
1580     elseif($row['dossier_instruction_type_code']=='DAACT'){
1581    
1582     //On vérifie qu'une DOC existe
1583     $sqlDOC = "SELECT dossier.dossier,
1584     dossier.date_chantier,
1585     donnees_techniques.doc_date,
1586     donnees_techniques.terr_div_surf_av_div,
1587     donnees_techniques.doc_tot_trav,
1588     donnees_techniques.doc_tranche_trav,
1589     donnees_techniques.doc_tranche_trav_desc,
1590     donnees_techniques.doc_surf,
1591     donnees_techniques.doc_nb_log,
1592     donnees_techniques.doc_nb_log_indiv,
1593     donnees_techniques.doc_nb_log_coll,
1594     donnees_techniques.doc_nb_log_lls,
1595     donnees_techniques.doc_nb_log_aa,
1596     donnees_techniques.doc_nb_log_ptz,
1597     donnees_techniques.doc_nb_log_autre
1598     FROM ".DB_PREFIXE."dossier
1599     LEFT JOIN ".DB_PREFIXE."donnees_techniques
1600     ON dossier.dossier=donnees_techniques.dossier_instruction
1601     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
1602     ON dossier.dossier_instruction_type=dossier_instruction_type.dossier_instruction_type
1603     WHERE dossier.dossier_autorisation ='".$row['dossier_autorisation']."' AND
1604     dossier_instruction_type.code = 'DOC' and mouvement_sitadel='SUIVI'";
1605     $resDOC = $this->f->db -> query ($sqlDOC);
1606     $this->f->addToLog("dossier.class.php : db->query(\"".$sqlDOC."\")", VERBOSE_MODE);
1607     $this->f->isDatabaseError($resDOC);
1608     $rowDOC=& $resDOC->fetchRow(DB_FETCHMODE_ASSOC);
1609    
1610     if((isset($rowDOC['dossier']) &&
1611     $rowDOC['date_chantier']<$datedebut || $rowDOC['date_chantier']>$datefin) ||
1612     !isset($rowDOC['dossier'])) {
1613     //
1614 softime 4838 $suivi.=$export_sitadel->entete("SUIVI",$departement,$commune, $version);//8|
1615 mbroquet 3730 $suivi.=$export_sitadel->chantier($rowDOC);
1616     $suivi.=$export_sitadel->achevement($row);
1617 softime 7996 $suivi.="\n";
1618 mbroquet 3730 }
1619     }
1620 softime 7996 }
1621     // Ligne SITADEL généré
1622     $line_sitadel = $depot.$decision.$transfert.$modificatif.$suivi.$suppression;
1623     if ($line_sitadel !== '') {
1624     // Hash la ligne SITADEL
1625     $hash_sitadel = md5($line_sitadel);
1626     // Si le hash de la ligne générée est différent du hash
1627     // sauvegardé sur le dossier
1628     if ($row['hash_sitadel'] !== $hash_sitadel) {
1629     // Met la ligne dans l'export
1630     $export .= $line_sitadel;
1631     // Met à jour le hash SITADEL du dossier
1632     $inst_di = $this->get_inst_dossier($row['dossier']);
1633     $inst_di->update_hash_sitadel($hash_sitadel);
1634     } else {
1635     // Supprime les erreurs liées à la ligne qui ne sera
1636     // pas exportée
1637     $erreur = '';
1638     }
1639     }
1640 mbroquet 3730 } // fin while
1641    
1642     /**
1643     *
1644     */
1645     //
1646     if (DBCHARSET == 'UTF8') {
1647     $export = utf8_decode($export);
1648     }
1649    
1650     /**
1651     * En-tête de fichier.
1652     *
1653     * C'est la première ligne du fichier.
1654     */
1655     // on éclate la chaîne export par ligne pour calculer le nombre
1656     // d'enregistrements et la longueur maximale des enregistrements
1657     $export_by_line = explode("\n", $export);
1658     // longueur maximale des enregistrements
1659     // (Num)(6) longueur de l’enregistrement le plus long contenu dans le
1660     // fichier (sans compter la fin d’enregistrement ou la fin de fichier)
1661     $longueur_maximale_des_enregistrements = 0;
1662     foreach ($export_by_line as $export_line) {
1663     if ($longueur_maximale_des_enregistrements > strlen($export_line)) {
1664     continue;
1665     }
1666     $longueur_maximale_des_enregistrements = strlen($export_line);
1667     }
1668     // nombre d'enregistrements
1669     // (Num)(6) nombre d’enregistrements présents dans le fichier en
1670     // comptant l’en-tête du fichier
1671     // XXX Ne faut-il pas ajouter +1 pour la ligne d'en-tête ?
1672     $nombre_d_enregistrements = count($export_by_line);
1673     // code application
1674     // (Alphanum)(7) = SITADEL
1675     $code_application = "SITADEL";
1676     // code département
1677     // (Alphanum)(3) département dans lequel se trouve le service instructeur
1678     // nomenclature : 001 à 095, 02A, 02B, 971...974
1679     $code_departement = $this->f->getParameter("departement");
1680     // service expéditeur
1681     // (Alphanum)(3) DDE ou commune (la plus grosse en cas d'EPCI) ou DGI
1682     // nomenclature : 'ADS', ‘DGI ou code commune INSEE
1683     $service_expediteur = $this->f->getParameter("commune");
1684     // service destinataire
1685     // (Alphanum)(2) DRE
1686     // nomenclature : code région INSEE (exemple : Ile-de-France=11)
1687     $service_destinataire = $this->f->getParameter("region");
1688     // code du fichier transmis
1689     // (AlphaNum)(12) AAMMjjdddccc
1690     // ddd = département du service instructeur
1691     // ccc = code du service expéditeur
1692     // AAMMjj = date
1693     // par exemple : 090531093ADS dans le cas de la transmission mensuelle
1694     // des événements intervenus au mois de mai communiqués par la DDE de
1695     // Seine-Saint-Denis.
1696     // XXX La date du jour correspond bien à la date demandée ?
1697     $code_du_fichier_transmis = sprintf(
1698     "%s%s%s",
1699     date('ymd'),
1700     $code_departement,
1701     $service_expediteur
1702     );
1703     // numéro d'ordre
1704     // (AlphaNum)(1) numéro d’ordre du fichier en cas de rectificatif
1705     // XXX Le formulaire propose jusqu'à la valeur 10 alors que la taille
1706     // de la châine doit être (1) ?
1707     $numero_d_ordre = $this->f->get_submitted_post_value("numero");
1708     // date de création
1709     // (Alphanum)(6) AAMMjj date de création du fichier transmis
1710     $date_de_creation = date('ymd');
1711     // nom de l'applicatif expéditeur
1712     // (Alphanum)(20) Exemple : GESTIO
1713     $nom_de_l_applicatif_expediteur = "openADS";
1714     // version de l'applicatif expéditeur
1715     // (Alphanum)(8) Exemple : 2.05
1716 softime 7996 $version_de_l_applicatif_expediteur = substr($this->f->get_application_version(), 0, 8);
1717 mbroquet 3730 // Consititution de la ligne d'en-tête.
1718     $entete = sprintf(
1719     "%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n",
1720     $code_application,
1721     $code_departement,
1722     $service_expediteur,
1723     $service_destinataire,
1724     $code_du_fichier_transmis,
1725     $numero_d_ordre,
1726     $longueur_maximale_des_enregistrements,
1727     $date_de_creation,
1728     $nombre_d_enregistrements,
1729     $nom_de_l_applicatif_expediteur,
1730     $version_de_l_applicatif_expediteur
1731     );
1732    
1733     /**
1734     *
1735     */
1736     //
1737     $export = $entete.$export;
1738    
1739     /**
1740     * Écriture de l'export dans un fichier sur le disque et affichage du
1741     * lien de téléchargement.
1742     */
1743     // Composition du nom du fichier
1744     $nom_fichier = "SITADEL".substr($this->f->get_submitted_post_value("datedebut"),3,2)."".substr($this->f->get_submitted_post_value("datedebut"),8,4).".txt";
1745     // Composition des métadonnées du fichier
1746     $metadata_fichier = array(
1747     "filename" => $nom_fichier,
1748     "size" => strlen($export),
1749 softime 8989 "mimetype" => "text/csv",
1750 mbroquet 3730 );
1751     // Écriture du fichier
1752 softime 8989 $id_fichier = $this->f->store_file(
1753     $export,
1754     $metadata_fichier,
1755     "sitadel",
1756     json_encode(array(
1757     'date_debut' => $datedebut,
1758     'date_fin' => $datefin,
1759     ))
1760     );
1761     if ($id_fichier === false) {
1762     $msg_error = __("Erreur lors du stockage/enregistrement du fichier SITADEL.").' '.__("Veuillez contacter votre administrateur.");
1763     $this->f->displayMessage("error", $msg_error);
1764     $this->f->addToLog(__METHOD__."(): ".$msg_error, DEBUG_MODE);
1765     return;
1766     }
1767 mbroquet 3730 //
1768 softime 8989 $message_valid = sprintf(
1769     "%s<br/>%s",
1770     sprintf(__("Le fichier %s a été généré."), $nom_fichier),
1771     sprintf(
1772     '<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>',
1773     OM_ROUTE_FORM,
1774     $id_fichier,
1775     __("Télécharger le fichier SITADEL")
1776     )
1777     );
1778 mbroquet 3730
1779     /**
1780     * Écriture d'une éventuelle erreur durant l'export dans un fichier sur
1781     * le disque et affichage du lien de téléchargement.
1782     */
1783     //
1784     if ($erreur != "") {
1785     // Composition du nom du fichier
1786     $nom_fichier_erreur = "probleme_".$nom_fichier;
1787     // Composition des métadonnées du fichier
1788     $metadata_fichier_erreur = array(
1789     "filename" => $nom_fichier_erreur,
1790     "size" => strlen($erreur),
1791 softime 8989 "mimetype" => "application/octet-stream",
1792 mbroquet 3730 );
1793     // Écriture du fichier
1794 softime 8989 $id_fichier_erreur = $this->f->store_file(
1795     $erreur,
1796     $metadata_fichier_erreur,
1797     "sitadel",
1798     json_encode(array(
1799     'date_debut' => $datedebut,
1800     'date_fin' => $datefin,
1801     ))
1802     );
1803     if ($id_fichier_erreur === false) {
1804     $msg_error = __("Erreur lors du stockage/enregistrement du fichier des incohérences SITADEL.").' '.__("Veuillez contacter votre administrateur.");
1805     $this->f->displayMessage("error", $msg_error);
1806     $this->f->addToLog(__METHOD__."(): ".$msg_error, DEBUG_MODE);
1807     return;
1808     }
1809 mbroquet 3730 //
1810 softime 8989 $message_info .= sprintf(
1811     "%s<br/>%s",
1812     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),
1813     sprintf(
1814     '<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>',
1815     OM_ROUTE_FORM,
1816     $id_fichier_erreur,
1817     __("Télécharger le fichier d'incohérence SITADEL")
1818     )
1819     );
1820 mbroquet 3730 }
1821 softime 8989
1822     //
1823     $this->f->displayMessage("valid",
1824     sprintf(
1825     '%s%s%s',
1826     $message_valid,
1827     $message_info !== '' ? '<br/><br/>' : '',
1828     $message_info
1829     )
1830     );
1831    
1832     //
1833 mbroquet 3730 if (DEBUG > 0) {
1834     printf($export);
1835     }
1836    
1837     } else {// correct = false
1838 softime 8989 $this->f->displayMessage("error", __("Les champs dates sont obligatoires."));
1839 mbroquet 3730 }
1840     }
1841     }
1842    
1843    
1844 softime 8989 function affichageFormulaire() {
1845     printf("<form method=\"POST\" name=f1>");
1846     //
1847     printf(
1848     "<div id=\"sitadel-form-fonctionnement\" class=\"sitadel-form-bloc\"><h3>%s</h3><p>%s</p></div>",
1849     __("Fonctionnement"),
1850     __("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.")
1851     );
1852     //
1853     printf(
1854     "<div id=\"sitadel-form-export\" class=\"sitadel-form-bloc\"><h3>%s</h3>",
1855     __("Export")
1856     );
1857 mbroquet 3730 //Description de la page
1858 softime 8989 $description = __("Saisissez la période pour laquelle vous souhaitez exporter les mouvements des dossiers au format SITADEL.");
1859 mbroquet 3730 $this->f->displayDescription($description);
1860     //
1861 softime 8989 $input = "<input type=\"text\" name=\"%s\" id=\"%s\" value=\"%s\" size=\"15\" class=\"champFormulaire datepicker\" onchange=\"fdate(this)\" />";
1862 mbroquet 3730 // champ date debut
1863 softime 8989 printf(" "._("Date de début")." ");
1864     printf($input, "datedebut", "datedebut", '');
1865 mbroquet 3730 // champ date fin
1866 softime 8989 printf(" "._("Date de fin")." ");
1867     printf($input, "datefin", "datefin", '');
1868 mbroquet 3730 // numero d'ordre d'envoi
1869     printf(" "._("Numero d'ordre d'envoi")." : "."<select name=\"numero\">");
1870     for ($i = 1; $i < 11; $i++) {
1871     printf("<option value =\"%d\" ", $i);
1872     printf(">%d</option>", $i);
1873     }
1874     printf("</select>");
1875 softime 8989 printf(
1876     "<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\" />",
1877     __("Exporter le fichier SITADEL"),
1878     addslashes(sprintf(
1879     "<b>%s</b><br/><br/>%s",
1880     __("Important à lire avant de confirmer le message de validation."),
1881     __("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.")
1882     )),
1883     OM_ROUTE_FORM
1884     );
1885     printf("</div>");
1886    
1887     // Affiche le tableau des fichiers sitadel stocké
1888     $link_tab_storage = OM_ROUTE_SOUSTAB.'&obj=storage&idxformulaire=0&retour=tab&retourformulaire=sitadel';
1889     $tab_storage = sprintf(
1890     '<div id="sousform-storage-sitadel" class="sitadel-form-bloc-tab"></div>
1891     <script type="text/javascript" >
1892     ajaxIt(\'storage-sitadel\', \'%1$s\');
1893     </script>',
1894     $link_tab_storage
1895     );
1896     printf(
1897     "<div id=\"sitadel-form-histo\" class=\"sitadel-form-bloc-end\"><h3>%s</h3>%s</div>",
1898     __("Historique des exports"),
1899     $tab_storage
1900     );
1901    
1902 mbroquet 3730 printf("</form>");
1903     }
1904    
1905     /**
1906     * VIEW - view_document_numerise.
1907     *
1908     * Vue du tableau des pièces du dossier d'autorisation.
1909     *
1910     * Cette vue permet de gérer le contenu de l'onglet "Pièce(s)" sur un
1911     * dossier d'autorisation. Cette vue spécifique est nécessaire car
1912     * l'ergonomie standard du framework ne prend pas en charge ce cas.
1913     * C'est ici la vue spécifique des pièces liées au dossier qui est
1914     * affichée directement au clic de l'onglet au lieu du soustab.
1915     *
1916     * L'idée est donc de simuler l'ergonomie standard en créant un container
1917     * et d'appeler la méthode javascript 'ajaxit' pour charger le contenu
1918     * de la vue visualisation de l'objet lié.
1919     *
1920     * @return void
1921     */
1922     function view_document_numerise() {
1923     // Vérification de l'accessibilité sur l'élément
1924     $this->checkAccessibility();
1925     // Récupération des variables GET
1926     ($this->f->get_submitted_get_value('idxformulaire')!==null ? $idxformulaire =
1927     $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = "");
1928     ($this->f->get_submitted_get_value('retourformulaire')!==null ? $retourformulaire =
1929     $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = "");
1930     // Objet à charger
1931     $obj = "document_numerise";
1932 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
1933     if ($type_aff_form === 'CTX RE' OR $type_aff_form === 'CTX IN') {
1934     $obj = "document_numerise_contexte_ctx";
1935     }
1936 mbroquet 3730 // Construction de l'url de sousformulaire à appeler
1937 softime 7996 $url = OM_ROUTE_SOUSFORM."&obj=".$obj;
1938 mbroquet 3730 $url .= "&idx=".$idxformulaire;
1939     $url .= "&action=4";
1940     $url .= "&retourformulaire=".$retourformulaire;
1941     $url .= "&idxformulaire=".$idxformulaire;
1942     $url .= "&retour=form";
1943     // Affichage du container permettant le reffraichissement du contenu
1944     // dans le cas des action-direct.
1945     printf('
1946     <div id="sousform-href" data-href="%s">
1947     </div>',
1948     $url
1949     );
1950     // Affichage du container permettant de charger le retour de la requête
1951     // ajax récupérant le sous formulaire.
1952     printf('
1953     <div id="sousform-%s">
1954     </div>
1955     <script>
1956     ajaxIt(\'%s\', \'%s\');
1957     </script>',
1958     $obj,
1959     $obj,
1960     $url
1961     );
1962     }
1963    
1964     /*
1965 nmeucci 4526 * Définition de la version et du suffixe du DI lors de sa création.
1966 mbroquet 3730 */
1967     function setValFAjout($val = array()) {
1968 nmeucci 4526
1969 softime 10573 /**
1970     * GESTION DE LA NUMÉROTATION
1971     */
1972    
1973 nmeucci 4526 //
1974     // GESTION DE LA VERSION DU DI
1975     // Elle est unique et basée sur celle du DA qui débute à -1.
1976     // Ainsi la version du DI initial est à 0.
1977     //
1978     $numeroVersion = $this->getNumeroVersion($val['dossier_autorisation']);
1979     if (is_numeric($numeroVersion) or $numeroVersion == -1){
1980     $this->incrementNumeroVersion($val['dossier_autorisation'], ++$numeroVersion);
1981     }
1982 softime 10573 // Version du dossier
1983     $this->valF['version'] = $numeroVersion;
1984 nmeucci 4526
1985 softime 10573 // Vérification de la saisie manuelle du numéro complet
1986     $num_doss_comp = isset($val['numero_dossier_complet']) === true ? $val['numero_dossier_complet'] : null;
1987    
1988     if ($num_doss_comp !== null) {
1989     $num_urba = $this->f->numerotation_urbanisme($num_doss_comp);
1990     if (empty($num_urba['di']) === false) {
1991    
1992     //
1993     $this->valF[$this->clePrimaire] = sprintf("%s%s%s%s%s%s%s%s",
1994 softime 11418 $num_urba['di']['type'],
1995     $num_urba['di']['departement'],
1996     $num_urba['di']['commune'],
1997     $num_urba['di']['annee'],
1998     $num_urba['di']['division'],
1999     $num_urba['di']['numero'],
2000     isset($num_urba['di']['suffixe']) === true ? $num_urba['di']['suffixe'] : '',
2001     isset($num_urba['di']['num_suffixe']) === true ? str_pad($num_urba['di']['num_suffixe'], 2, '0', STR_PAD_LEFT) : ''
2002 softime 10573 );
2003     $this->valF["dossier_libelle"] = sprintf("%s %s%s %s %s%s%s%s",
2004 softime 11418 $num_urba['di']['type'],
2005     $num_urba['di']['departement'],
2006     $num_urba['di']['commune'],
2007     $num_urba['di']['annee'],
2008     $num_urba['di']['division'],
2009     $num_urba['di']['numero'],
2010     isset($num_urba['di']['suffixe']) === true ? $num_urba['di']['suffixe'] : '',
2011     isset($num_urba['di']['num_suffixe']) === true ? str_pad($num_urba['di']['num_suffixe'], 2, '0', STR_PAD_LEFT) : ''
2012 softime 10573 );
2013    
2014 softime 11418 $this->valF["numerotation_type"] = $num_urba['di']['type'];
2015     $this->valF["numerotation_dep"] = $num_urba['di']['departement'];
2016     $this->valF["numerotation_com"] = $num_urba['di']['commune'];
2017     $this->valF["numerotation_division"] = $num_urba['di']['division'];
2018     $this->valF["numerotation_num"] = $num_urba['di']['numero'];
2019     $this->valF["numerotation_suffixe"] = isset($num_urba['di']['suffixe']) === true ? $num_urba['di']['suffixe'] : null;
2020     $this->valF["numerotation_num_suffixe"] = isset($num_urba['di']['num_suffixe']) === true ? $num_urba['di']['num_suffixe'] : null;
2021 softime 10573 }
2022     else {
2023     $this->valF[$this->clePrimaire] = $num_doss_comp;
2024     $this->valF["dossier_libelle"] = $num_doss_comp;
2025     }
2026     }
2027     else {
2028    
2029     //
2030     // GESTION DU SUFFIXE
2031     // La version du suffixe est celle du type de DI : à ne pas confondre
2032     // avec celle du DI lui même.
2033     // Exemple chronologique :
2034     // DI n° PC0130551600004 -> version 0
2035     // DI n° PC0130551600004M01 -> version 1
2036     // DI n° PC0130551600004PRO01 -> version 2 !!
2037     //
2038     $code = null;
2039     $numeroVersionDossierInstructionType = null;
2040     $suffixe = "";
2041     // Si l'option suffixe de ce type de DI est activée
2042     if ( $this->getSuffixe($this->getDossierInstructionType()) === 't' ){
2043     // Récupération de la lettre associée au type de dossier d'instruction
2044     $code = $this->getCode($this->getDossierInstructionType());
2045     // Récupération du numéro de version en fonction du type de dossier d'instruction
2046     $numeroVersionDossierInstructionType = $this->getNumeroVersionDossierInstructionType($val['dossier_autorisation'], $val['dossier_instruction_type'], $val['demande_type'], $numeroVersion);
2047     // Suffixe
2048     $suffixe = $code.$numeroVersionDossierInstructionType;
2049     }
2050    
2051     // Numéro de dossier
2052     $this->valF['dossier'] = $val['dossier_autorisation'].$suffixe;
2053     // Identifiant du dossier d'instruction lisible
2054     $this->valF['dossier_libelle'] = $this->get_dossier_autorisation_libelle($val['dossier_autorisation']).$suffixe;
2055    
2056    
2057     // Sauvegarde les valeurs composants la numérotation
2058     $da = $this->f->get_inst__om_dbform(array(
2059     "obj" => "dossier_autorisation",
2060     "idx" => $val['dossier_autorisation'],
2061     ));
2062 softime 10713 $this->valF["numerotation_type"] = ($da->getVal("numerotation_type") !== null && $da->getVal("numerotation_type") !== '') ? $da->getVal("numerotation_type") : null;
2063     $this->valF["numerotation_dep"] = ($da->getVal("numerotation_dep") !== null && $da->getVal("numerotation_dep") !== '') ? $da->getVal("numerotation_dep") : null;
2064     $this->valF["numerotation_com"] = ($da->getVal("numerotation_com") !== null && $da->getVal("numerotation_com") !== '') ? $da->getVal("numerotation_com") : null;
2065     $this->valF["numerotation_division"] = ($da->getVal("numerotation_division") !== null && $da->getVal("numerotation_division") !== '') ? $da->getVal("numerotation_division") : null;
2066     $this->valF["numerotation_num"] = ($da->getVal("numerotation_num") !== null && $da->getVal("numerotation_num") !== '') ? $da->getVal("numerotation_num") : null;
2067 softime 10573 $this->valF["numerotation_suffixe"] = $code;
2068     $this->valF["numerotation_num_suffixe"] = $numeroVersionDossierInstructionType;
2069     }
2070    
2071     $collectivite = $this->f->getCollectivite($val['om_collectivite']);
2072     if ($this->f->is_option_om_collectivite_entity_enabled($val['om_collectivite']) === true
2073     && $collectivite['code_entite'] !== null) {
2074     //
2075     $this->valF["numerotation_entite"] = $collectivite['code_entite'];
2076     $this->valF["numerotation_num_entite"] = $this->increment_num_entite($val['dossier_autorisation']);
2077     $numerotation_num_entite = str_pad($this->valF["numerotation_num_entite"], 2, "0", STR_PAD_LEFT);
2078     $this->valF[$this->clePrimaire] = $this->valF[$this->clePrimaire].$this->valF["numerotation_entite"].$numerotation_num_entite;
2079     $this->valF['dossier_libelle'] = $this->valF['dossier_libelle']." ".$this->valF["numerotation_entite"].$numerotation_num_entite;
2080     }
2081    
2082     }
2083    
2084     // Permet d'incrémenter le numéro de version de l'entité
2085     public function increment_num_entite($da) {
2086     if ($da === null || $da === '') {
2087     return false;
2088     }
2089     $last_entity_num = 0;
2090 nmeucci 4526 //
2091 softime 10573 $inst_da = $this->f->get_inst__om_dbform(array(
2092     "obj" => "dossier_autorisation",
2093     "idx" => $da,
2094     ));
2095     $list_di = $inst_da->get_list_dossier_instruction();
2096     foreach ($list_di as $di) {
2097     $inst_di = $this->f->get_inst__om_dbform(array(
2098     "obj" => "dossier",
2099     "idx" => $di['dossier'],
2100     ));
2101     if (intval($inst_di->getVal('numerotation_num_entite')) > $last_entity_num) {
2102     $last_entity_num = intval($inst_di->getVal('numerotation_num_entite'));
2103     }
2104 mbroquet 3730 }
2105 softime 10573 return ++$last_entity_num;
2106 mbroquet 3730 }
2107    
2108     /*Récupère la valeur du suffixe d'un dossier_instruction_type*/
2109     function getSuffixe($dossierInstructionType){
2110    
2111     $suffixe = "";
2112    
2113     $sql = "SELECT
2114     suffixe
2115     FROM
2116     ".DB_PREFIXE."dossier_instruction_type
2117     WHERE
2118     dossier_instruction_type = $dossierInstructionType";
2119    
2120     $this->addToLog("getSuffixe(): db->query(\"".$sql."\")", VERBOSE_MODE);
2121 softime 8989 $res = $this->f->db->query($sql);
2122 mbroquet 3730 if (database :: isError($res))
2123     die($res->getMessage()."erreur ".$sql);
2124    
2125     if ( $res->numRows() > 0 ){
2126    
2127     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
2128     $suffixe = $row['suffixe'];
2129     }
2130    
2131     return $suffixe;
2132     }
2133    
2134     /*Récupère dans la table de paramètrage la lettre correspondant
2135     * au dossier_instruction_type
2136     */
2137     function getCode($dossierInstructionType){
2138    
2139     $code = "";
2140    
2141     $sql = "SELECT
2142     code
2143     FROM
2144     ".DB_PREFIXE."dossier_instruction_type
2145     WHERE
2146     dossier_instruction_type = $dossierInstructionType";
2147    
2148     $this->addToLog("getCode(): db->query(\"".$sql."\")", VERBOSE_MODE);
2149 softime 8989 $res = $this->f->db->query($sql);
2150 mbroquet 3730 if (database :: isError($res))
2151     die($res->getMessage()."erreur ".$sql);
2152    
2153     if ( $res->numRows() > 0 ){
2154    
2155     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
2156     $code = $row['code'];
2157     }
2158    
2159     return $code;
2160     }
2161    
2162     /*Récupère le numéro de version d'un dossier_autorisation*/
2163     function getNumeroVersion($dossierAutorisation){
2164    
2165     $numeroVersion = "";
2166    
2167     $sql = "SELECT
2168     numero_version
2169     FROM
2170     ".DB_PREFIXE."dossier_autorisation
2171     WHERE
2172     dossier_autorisation = '$dossierAutorisation'";
2173    
2174     $this->addToLog("getNumeroVersion(): db->query(\"".$sql."\")", VERBOSE_MODE);
2175 softime 8989 $res = $this->f->db->query($sql);
2176 mbroquet 3730 if (database :: isError($res))
2177     die($res->getMessage()."erreur ".$sql);
2178    
2179     if ( $res->numRows() > 0 ){
2180    
2181     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
2182     $numeroVersion = $row['numero_version'];
2183     }
2184    
2185     return $numeroVersion;
2186     }
2187 fmichon 3892
2188     /**
2189     * Retourne le numéro d'un dossier d'instruction et ses six parties.
2190     *
2191     * @param string $dossier_instruction Identifiant du dossier d'instruction (avec ou sans espace)
2192     *
2193     * @return array
2194     */
2195     function get_dossier_instruction_numero($dossier_instruction = null) {
2196    
2197     // Si le DI n'a pas été fourni
2198     if ($dossier_instruction === null) {
2199     // On le récupère
2200     $dossier_instruction = $this->getVal($this->clePrimaire);
2201     }
2202    
2203     /*
2204     Analyse du numéro du DI et extraction de ses parties
2205    
2206 softime 11228 Retour : tableau associatif:
2207     - type : type du DA (2 ou 3 lettres)
2208     - depcom : code département + code communes(3 + 3 integer)
2209     - annee : année (2 integer)
2210     - division : division (une lettre ou un entier)
2211     - numero : numéro
2212     - mod : lettre(s) du type du dossier d'instruction (P, M, ANNUL, ...)
2213     - version : version du dossier d'instruction (1 ou 2 integer)
2214 fmichon 3892 */
2215 softime 11228 //if (preg_match_all('/^([A-Z]{2,3})\s{0,1}((\d{3}|02[AB])\d{3})\s{0,1}(\d{2})\s{0,1}([[:alnum:]]{5})([A-Z]{1,5})?(\d{1,2})?$/', $dossier_instruction, $return) === false) {
2216     $matches = array();
2217     if (! preg_match_all(
2218     '/^(?P<type>[A-Z]{2,3})'.'\s{0,1}'.
2219     '(?P<departement>(\d{3}|02[AB]))'.
2220     '(?P<commune>\d{3})'.'\s{0,1}'.
2221     '(?P<annee>\d{2})'.'\s{0,1}'.
2222     '(?P<division>[[:alnum:]])'.
2223     '(?P<numero>\d{4})'.
2224 softime 11418 '(?P<suffixe>[A-Z]{1,5})?'.
2225     '(?P<num_suffixe>\d{1,2})?'.'$/', $dossier_instruction, $matches)) {
2226 softime 11228 $this->f->addToLog(
2227     __METHOD__."()".sprintf(__("Échec du parsing du numéro de dossier %s."), $dossier_instruction),
2228     DEBUG_MODE);
2229 softime 10573 return false;
2230     }
2231 softime 11228 $res = array();
2232     foreach(array(
2233 softime 11418 'type', 'departement', 'commune', 'annee', 'division', 'numero', 'suffixe', 'num_suffixe')
2234 softime 11228 as $key) {
2235     if(isset($matches[$key][0])) {
2236     $res[$key] = $matches[$key][0];
2237     }
2238     }
2239     //$this->f->addToLog(__METHOD__."() res: ".var_export($res, true), DEBUG_MODE);
2240     return $res;
2241 fmichon 3892 }
2242    
2243     /**
2244 softime 8989 * Récupère les arguments nécessaires à la construction d'une séquence de
2245     * dossier.
2246 softime 8477 *
2247 softime 8989 * @return array
2248 softime 8477 */
2249 softime 8989 function get_sequence_args() {
2250 softime 8477 //
2251 softime 8989 $result = array();
2252 softime 10573
2253 softime 8477 $inst_datd = $this->get_inst_dossier_autorisation_type_detaille();
2254     $inst_dat = $this->get_inst_dossier_autorisation_type($inst_datd->getVal('dossier_autorisation_type'));
2255 softime 8989 $result['datc'] = $inst_dat->getVal('code');
2256     $result['annee'] = $this->getVal('annee');
2257 softime 10573
2258 softime 8477 $parse_id = $this->get_dossier_instruction_numero();
2259 softime 10573 if ($parse_id === false
2260     || (is_array($parse_id) && empty(array_filter($parse_id)) === true)) {
2261     // Message dans le log
2262     $this->f->addToLog(__METHOD__."(): ".__("Erreur lors de la récupération du numéro de version du dossier d'instruction."), DEBUG_MODE);
2263     return false;
2264     }
2265    
2266 softime 11228 $result['dep'] = $parse_id['departement'];
2267     $result['com'] = $parse_id['commune'];
2268     //$this->f->addToLog(__METHOD__."(): res: ".var_export($result, true), DEBUG_MODE);
2269 softime 8989 return $result;
2270     }
2271    
2272     /**
2273     * Retourne le nom de la sequence du dossier d'instruction courant.
2274     *
2275     * @return String
2276     */
2277     function get_sequence_name() {
2278     $sequence_args = $this->get_sequence_args();
2279 softime 10573 if (empty($sequence_args) === true) {
2280     // Message dans le log
2281     $this->f->addToLog(__METHOD__."(): ".__("Erreur lors de la récupération des arguments de la séquence."), DEBUG_MODE);
2282     return false;
2283     }
2284 softime 11228 return $this->compose_sequence_name(
2285     $sequence_args['datc'], $sequence_args['annee'],
2286     $sequence_args['dep'], $sequence_args['com']);
2287 softime 8477 }
2288    
2289     /**
2290 fmichon 3892 * Récupère le numéro de version du dossier d'instruction.
2291     *
2292     * @return string
2293     */
2294 softime 4838 function get_dossier_instruction_version($dossier_instruction = null) {
2295 fmichon 3892
2296     // Expression régulière qui découpe le numéro du dossier
2297 softime 4838 $return = $this->get_dossier_instruction_numero($dossier_instruction);
2298 fmichon 3892
2299     // Si l'expression régulière retourne une erreur
2300     if ($return == false) {
2301     // Message dans le log
2302 softime 10573 $this->f->addToLog(__METHOD__."(): ".__("Erreur lors de la récupération du numéro de version du dossier d'instruction"), DEBUG_MODE);
2303 fmichon 3892 //
2304     return false;
2305     }
2306    
2307 nmeucci 4526 // Retourne seulement la version du dossier d'instruction.
2308     // Elle vaut 0 si le numéro du DI n'a pas de suffixe.
2309 softime 11418 if (isset($return['num_suffixe'])) {
2310     return $return['num_suffixe'];
2311 nmeucci 4526 }
2312     return 0;
2313 fmichon 3892 }
2314 mbroquet 3730
2315     /*Incrémente le numéro de version du dossier*/
2316     function incrementNumeroVersion($dossierAutorisation, $nouveauNumeroVersion) {
2317    
2318     $valF = array (
2319     "numero_version" => $nouveauNumeroVersion
2320     );
2321    
2322 softime 8989 $res = $this->f->db->autoExecute(DB_PREFIXE."dossier_autorisation",
2323 mbroquet 3730 $valF,
2324     DB_AUTOQUERY_UPDATE,
2325     "dossier_autorisation = '$dossierAutorisation'");
2326    
2327     if (database :: isError($res))
2328     die($res->getMessage()."erreur ".$sql);
2329    
2330     }
2331    
2332     /**
2333     * Retourne un numéro de version en fonction du type de dossier d'instruction
2334     * @param string $dossier_autorisation
2335     * @param integer $dossier_instruction_type
2336     * @return int
2337     */
2338 softime 10573 public function getNumeroVersionDossierInstructionType($dossier_autorisation, $dossier_instruction_type, $demande_type, $numero_version, $increment = true){
2339    
2340 mbroquet 3730 $numeroVersionDossierInstructionType = $numero_version;
2341 softime 10573
2342     // Récupère la nature de la demande
2343     $inst_demande_type = $this->f->get_inst__om_dbform(array(
2344     "obj" => "demande_type",
2345     "idx" => $demande_type
2346     ));
2347     $inst_demande_nature = $this->f->get_inst__om_dbform(array(
2348     "obj" => "demande_nature",
2349     "idx" => $inst_demande_type->getVal('demande_nature')
2350     ));
2351    
2352     // Si c'est un dossier d'instruction de type "Initial"
2353     if (strtolower($inst_demande_nature->getVal('code')) === 'nouv') {
2354 mbroquet 3730 return 0;
2355     }
2356     //Si c'est un modificatif ou transfert on retourne un nombre correspondant au
2357     //nombre de dossier d'instruction de ce type, rattaché au dossier
2358     //d'autorisation complété par des 0 à gauche si besoin. Format du retour
2359     //attendu : 01 ou 02, etc.
2360     else {
2361    
2362     //On récupère le nombre de dossier d'instruction de ce type rattaché au
2363     //dossier d'autorisation
2364     $sql = "SELECT
2365     count(dossier)
2366     FROM
2367     ".DB_PREFIXE."dossier
2368     LEFT JOIN
2369     ".DB_PREFIXE."dossier_autorisation
2370     ON
2371     dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
2372     WHERE
2373     dossier_autorisation.dossier_autorisation = '".$dossier_autorisation."'
2374     AND
2375     dossier.dossier_instruction_type = ".$dossier_instruction_type;
2376 softime 8989 $numeroVersionDossierInstructionType = $this->f->db->getOne($sql);
2377 mbroquet 3730 $this->f->addToLog("getNumeroVersionDossierInstructionType(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
2378     if ( database::isError($numeroVersionDossierInstructionType)){
2379     $this->f->addToError("", $numeroVersionDossierInstructionType, $numeroVersionDossierInstructionType);
2380     return false;
2381     }
2382    
2383     // Requête SQL
2384     $sql = "SELECT
2385     substring(dossier, '\d*$')::int as last_num_dossier
2386     FROM ".DB_PREFIXE."dossier
2387     WHERE dossier_instruction_type = ".$dossier_instruction_type."
2388     AND dossier_autorisation = '".$dossier_autorisation."'
2389     AND version = (
2390     SELECT max(version)
2391     FROM ".DB_PREFIXE."dossier
2392     WHERE dossier_instruction_type = ".$dossier_instruction_type."
2393     AND dossier_autorisation = '".$dossier_autorisation."'
2394     GROUP BY dossier_instruction_type, dossier_autorisation
2395     )";
2396 softime 8989 $res = $this->f->db->query($sql);
2397 mbroquet 3730 $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\")", VERBOSE_MODE);
2398     $this->f->isDatabaseError($res);
2399 softime 9282 $num_version_last_dossier = null;
2400     if ($res->numRows() > 0) {
2401     $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
2402     $num_version_last_dossier = $row['last_num_dossier'];
2403     }
2404 mbroquet 3730
2405     if (!empty($num_version_last_dossier)
2406     && $num_version_last_dossier >= $numeroVersionDossierInstructionType) {
2407     // Modifie le numéro suivant
2408     $numeroVersionDossierInstructionType = $num_version_last_dossier;
2409     }
2410     //
2411     if ($increment === true) {
2412     $numeroVersionDossierInstructionType = ++$numeroVersionDossierInstructionType;
2413     }
2414     //On compléte par des 0 à gauche
2415     $numeroVersionDossierInstructionType = str_pad($numeroVersionDossierInstructionType, 2, "0", STR_PAD_LEFT);
2416    
2417     return $numeroVersionDossierInstructionType;
2418     }
2419     }
2420     /**
2421     * Retourne le libellé du dossier d'autorisation
2422     * @param string $dossier_autorisation Identifiant du dossier d'autorisation
2423     * @return string Libellé dossier d'autorisation
2424     */
2425     function get_dossier_autorisation_libelle($dossier_autorisation) {
2426    
2427     $dossier_autorisation_libelle = "";
2428    
2429     // Requête SQL
2430     $sql = "SELECT
2431     dossier_autorisation_libelle
2432     FROM
2433     ".DB_PREFIXE."dossier_autorisation
2434     WHERE
2435     dossier_autorisation = '$dossier_autorisation'";
2436    
2437 softime 8989 $dossier_autorisation_libelle = $this->f->db->getOne($sql);
2438 mbroquet 3730 $this->addToLog("get_dossier_autorisation_libelle(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
2439     database::isError($dossier_autorisation_libelle);
2440 softime 10573
2441 mbroquet 3730 // Retourne le résultat
2442     return $dossier_autorisation_libelle;
2443     }
2444 softime 10573
2445 softime 6929 function setvalF($val = array()){
2446 softime 10573
2447     if (! $this->f->is_option_dossier_commune_enabled()) {
2448     // ajoute une "fausse" clé 'commune' dans le tableau des données envoyées
2449     // car la fonction 'setValF()' dans 'gen/obj/demande.class.php'
2450     // déclenche une erreur 'Undefined index: commune' sinon
2451     $val['commune'] = null;
2452     // idem pour cette valeur qui est passée au dossier d'instruction
2453     $this->valF['commune'] = null;
2454     }
2455    
2456 mbroquet 3730 parent::setvalF($val);
2457    
2458     // Récupération des id demandeurs postés
2459     $this->getPostedValues();
2460    
2461     // enlever les valeurs a ne pas saisir -> recherche en trigger ajouter et modifier
2462     unset ($this->valF['geom']);
2463     unset ($this->valF['geom1']);
2464     // valeurs hiddenstatic (calcule)
2465     if($this->maj==1){
2466     // par defaut
2467     unset ($this->valF['etat']);
2468     unset ($this->valF['delai']);
2469     unset ($this->valF['accord_tacite']);
2470     }
2471     unset ($this->valF['avis_decision']); // avis + libelle avis
2472     unset ($this->valF['terrain_surface_calcul']);
2473     unset ($this->valF['shon_calcul']);
2474     unset ($this->valF['date_notification_delai']);
2475     unset ($this->valF['date_decision']);
2476     unset ($this->valF['date_limite']);
2477     unset ($this->valF['date_validite']);
2478     unset ($this->valF['date_chantier']);
2479     unset ($this->valF['date_achevement']);
2480     unset ($this->valF['date_conformite']);
2481 nmeucci 3887 // Ce champ est mis à jour uniquement par la gestion spécifique du log
2482     // et donc jamais par les actions ajouter/modifier
2483     unset ($this->valF['log_instructions']);
2484 softime 9245 // Ce champ n'est jamais mis à jour, seulement initialisé à la création
2485     // du dossier d'instruction
2486     unset($this->valF['initial_dt']);
2487 mbroquet 3730
2488 softime 10573 // Vérification de la saisie manuelle du numéro complet
2489     $force_param_duree_val = false;
2490     $num_doss_comp = isset($val['numero_dossier_complet']) === true ? $val['numero_dossier_complet'] : null;
2491     if ($num_doss_comp !== null) {
2492     $num_urba = $this->f->numerotation_urbanisme($num_doss_comp);
2493     if (empty($num_urba['di']) === false) {
2494     $force_param_duree_val = true;
2495     }
2496     }
2497 mbroquet 3730 // Durée de validité lors de la création du dossier d'instruction
2498 softime 10573 $this->valF['duree_validite'] = $this->get_duree_validite($this->valF['dossier_autorisation'], $force_param_duree_val);
2499 mbroquet 3730 }
2500    
2501 softime 6929
2502 softime 6565 /**
2503 softime 7067 * Retourne le type de formulaire : ADS, CTX RE, CTX IN ou DPC.
2504 softime 6565 *
2505     * @return mixed $type_aff_form Type de formulaire (string) ou false (bool) si erreur BDD.
2506     */
2507     function get_type_affichage_formulaire() {
2508     if (isset($this->type_aff_form) === true) {
2509     return $this->type_aff_form;
2510 mbroquet 3730 }
2511 softime 6565 //
2512 softime 7996 if($this->getParameter('maj') == '0' OR $this->get_action_crud() === 'create') {
2513 softime 6565 $id_dossier_instruction_type = $this->valF["dossier_instruction_type"];
2514     } else {
2515     $id_dossier_instruction_type = $this->getVal("dossier_instruction_type");
2516     }
2517     $sql = "SELECT dossier_autorisation_type.affichage_form
2518     FROM " . DB_PREFIXE . "dossier_instruction_type
2519     INNER JOIN " . DB_PREFIXE . "dossier_autorisation_type_detaille
2520     ON dossier_instruction_type.dossier_autorisation_type_detaille=dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2521     INNER JOIN " . DB_PREFIXE . "dossier_autorisation_type
2522     ON dossier_autorisation_type.dossier_autorisation_type=dossier_autorisation_type_detaille.dossier_autorisation_type
2523     WHERE dossier_instruction_type.dossier_instruction_type=" . intval($id_dossier_instruction_type);
2524 softime 8989 $type_aff_form = $this->f->db->getOne($sql);
2525 softime 6565 $this->f->addToLog(__METHOD__ . " : db->getOne(\"" . $sql . "\")", VERBOSE_MODE);
2526     if($this->f->isDatabaseError($type_aff_form, true) === true) {
2527     return false;
2528     }
2529     $this->type_aff_form = $type_aff_form;
2530     //
2531     return $this->type_aff_form;
2532     }
2533 mbroquet 3730
2534    
2535 softime 6565 /**
2536     * Retourne le code du groupe du dossier d'instruction.
2537     *
2538     * @return string
2539     */
2540     public function get_groupe() {
2541     //
2542     if (isset($this->groupe) === true && $this->groupe !== null) {
2543     return $this->groupe;
2544 mbroquet 3730 }
2545    
2546 softime 6565 // Récupère le code du groupe
2547     $inst_dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
2548     $inst_dossier_autorisation_type = $this->get_inst_dossier_autorisation_type($inst_dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
2549     $inst_groupe = $this->get_inst_groupe($inst_dossier_autorisation_type->getVal('groupe'));
2550     $groupe = $inst_groupe->getVal('code');
2551 mbroquet 3730
2552 softime 6565 //
2553     $this->groupe = $groupe;
2554     //
2555     return $this->groupe;
2556     }
2557 mbroquet 3730
2558 softime 6565 /**
2559 softime 8989 * @return void
2560 softime 6565 */
2561 softime 8989 function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
2562     parent::verifier($val);
2563 softime 7366 // La date de dépôt est obligatoire
2564 softime 11876 if (isset($val['date_depot']) && ($val['date_depot'] === '' || $val['date_depot'] === null)) {
2565 softime 7366 //
2566     $this->correct = false;
2567     $this->addToMessage( _('Le champ').' <span class="bold">'.$this->getLibFromField('date_depot').'</span> '._('est obligatoire'));
2568 softime 11876 } else {
2569     //
2570     $date_depot = $val["date_depot"];
2571     if (preg_match('/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/', $val["date_depot"], $d_match)) {
2572     $date_depot = $d_match[3].'-'.$d_match[2].'-'.$d_match[1];
2573     }
2574     // Il faut avoir une date de dépôt pour pouvoir vérifier si elle est supérieure à la date du jour
2575     $date_depot = DateTime::createFromFormat('Y-m-d', $date_depot);
2576     $aujourdhui = new DateTime();
2577     try {
2578     if (! $date_depot instanceof DateTime) {
2579     throw new RuntimeException("Not a DateTime");
2580     }
2581     // Si la date issus du formulaire n'a pas pu être converti, date_demande vaudra
2582     // false. Avant de comparer on vérifie donc que la date a bien été récupérée
2583     if($date_depot > $aujourdhui) {
2584     $this->correct = false;
2585     $this->addToMessage(_("La date de depot ne peut pas être superieure à la date du jour."));
2586     }
2587     } catch (RuntimeException $e) {
2588     $this->correct = false;
2589     $this->addToLog($e.' : '._("Le format de la date de depot n'est pas valide."));
2590     $this->addToMessage(_("Erreur : le format de la date de depot n'est pas correct. Contactez votre administrateur."));
2591     }
2592 softime 7366 }
2593    
2594 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
2595     if ($type_aff_form ===false) {
2596     $this->correct = false;
2597     $this->addToMessage(_("Une erreur s'est produite lors de l'ajout de ce dossier. Veuillez contacter votre administrateur."));
2598 mbroquet 3730 }
2599 softime 6565
2600     switch ($type_aff_form) {
2601     case 'ADS':
2602     case 'CTX RE':
2603 softime 10573 case 'CONSULTATION ENTRANTE':
2604 softime 6565 if (!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
2605     empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
2606     !is_null($this->form)) {
2607     $this->correct = false;
2608     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
2609 mbroquet 3730 }
2610 softime 6565 break;
2611     case 'CTX IN':
2612     if (!isset($this->postedIdDemandeur["contrevenant_principal"]) OR
2613     empty($this->postedIdDemandeur["contrevenant_principal"]) AND
2614     !is_null($this->form)) {
2615     $this->correct = false;
2616     $this->addToMessage(_("La saisie d'un contrevenant principal est obligatoire."));
2617     }
2618     break;
2619 softime 7067 case 'DPC':
2620     if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
2621     empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
2622     !is_null($this->form)) {
2623     $this->correct = false;
2624     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
2625     }
2626     if(!isset($this->postedIdDemandeur["bailleur_principal"]) OR
2627     empty($this->postedIdDemandeur["bailleur_principal"]) AND
2628     !is_null($this->form)) {
2629     $this->correct = false;
2630     $this->addToMessage(_("La saisie d'un bailleur principal est obligatoire."));
2631     }
2632     break;
2633 mbroquet 3730 }
2634 softime 7366
2635     // Récupération du crud par rapport au mode du formulaire
2636     $crud = $this->get_action_crud($this->getParameter("maj"));
2637    
2638     // L'année de la date de dépot ne peut pas être modifiée
2639     if ($crud === 'update' && array_key_exists("date_depot", $val) === true && ($val["date_depot"] !== "" && $val["date_depot"] !== null)) {
2640     //
2641     $new_date = DateTime::createFromFormat('d/m/Y', $val["date_depot"]);
2642     $old_date = DateTime::createFromFormat('Y-m-d', $this->getVal("date_depot"));
2643     if ($new_date->format("Y") != $old_date->format("Y")) {
2644     $this->addToMessage(_("L'année de la date de dépôt n'est pas modifiable."));
2645     $this->correct = false;
2646     }
2647     }
2648 softime 10573
2649     // L'année de la date de dépot en mairie ne peut pas être modifiée
2650 softime 10869 if ($crud === 'update' && array_key_exists("date_depot_mairie", $val) === true && (isset($val["date_depot_mairie"]) === true && $val["date_depot_mairie"] !== "" && $val["date_depot_mairie"] !== null)) {
2651 softime 10573 //
2652     $new_date = DateTime::createFromFormat('d/m/Y', $val["date_depot_mairie"]);
2653 softime 10869 // Dans le cas où une date de dépôt en mairie est saisie et que l'option pour afficher
2654     // ce champ est désactivée, le champ sera mis en hidden et donc le format de la date
2655     // dans la valeur ne sera plus "d/m/Y" mais "Y-m-d".
2656     $new_date = $new_date !== false ? $new_date : DateTime::createFromFormat('Y-m-d', $val["date_depot_mairie"]);
2657 softime 10573 $old_date = DateTime::createFromFormat('Y-m-d', $this->getVal("date_depot_mairie"));
2658 softime 10869 if ($old_date !== false && $new_date->format("Y") != $old_date->format("Y")) {
2659 softime 10573 $this->addToMessage(_("L'année de la date de dépôt en mairie n'est pas modifiable."));
2660     $this->correct = false;
2661     }
2662     }
2663    
2664     // option dossier_commune activée
2665     if ($this->f->is_option_dossier_commune_enabled()) {
2666    
2667     // La commune doit être définie
2668     if ($crud !== 'delete') {
2669     if (! array_key_exists("commune", $val) || empty($val["commune"])) {
2670     $this->addToMessage(__("La commune doit être définie."));
2671     $this->correct = false;
2672     }
2673     else {
2674     // récupération de la date de demande
2675     $date_demande = 'NOW';
2676     $d_match = array();
2677     if (isset($val["date_demande"])
2678     && preg_match('/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/',
2679     $val["date_demande"], $d_match)) {
2680     $date_demande = $d_match[3].'-'.$d_match[2].'-'.$d_match[1];
2681     }
2682     $date_demande = new DateTime($date_demande);
2683    
2684     // La commune doit exister
2685     $commune = $this->f->findObjectById("commune", $val["commune"]);
2686     if (empty($commune)) {
2687     $this->addToMessage(__("La commune doit exister."));
2688     $this->correct = false;
2689     }
2690     // La commune ne peut pas être modifiée
2691     elseif ($crud === 'update') {
2692     if ($val["commune"] != $this->getVal('commune')) {
2693     $this->addToMessage(__("La commune n'est pas modifiable."));
2694     $this->correct = false;
2695     }
2696     }
2697     // La commune doit être valide
2698     elseif (! $commune->valid($date_demande)) {
2699     $this->addToMessage(__(
2700     "La commune doit être valide ".
2701     "à la date du '".$date_demande->format('d/m/Y')."'."));
2702     $this->correct = false;
2703     }
2704     }
2705     }
2706     }
2707 softime 6565 }
2708 mbroquet 3730
2709    
2710 softime 10573 /**
2711     * Permet de vérifier si les champs requis Plat'AU ont été remplis
2712     *
2713     * @param $dossier l'identifiant du dossier
2714     *
2715     * @return array un tableau contenant une clé is_ok qui indique
2716     * si tous les champs sont saisis ou non et une clé
2717     * required_fields_empty qui contient les champs qui n'ont pas été saisis
2718     * | false si une erreur survient
2719     *
2720     */
2721     function check_platau_required_fields($dossier) {
2722    
2723     // On récupère les champs Plat'AU requis
2724     $fields_list = $this->list_platau_required_fields_dossier;
2725    
2726     // On fait un tableau qui contiendra les tables et un tableau
2727     // qui contient les champs au format 'table.champ'
2728     $tables = array();
2729     $champs = array();
2730    
2731     foreach ($fields_list as $value) {
2732     $expl_tab = explode('.', $value);
2733     if (! in_array($expl_tab[0], $tables)) {
2734     $tables[] = $expl_tab[0];
2735     }
2736     $champs[] = $value;
2737     }
2738    
2739     // Il y aura toujours la table dossier dans la requête
2740     if (in_array('dossier', $tables)) {
2741     $key = array_keys($tables, 'dossier');
2742     unset($tables[$key[0]]);
2743     }
2744    
2745     $from_tables = array();
2746     // On construit le 'FROM' de la requête sql avec les jointures
2747     foreach($tables as $table) {
2748     // Cas particulier pour la table demandeur et architecte
2749     if ($table == "demandeur") {
2750     $from_tables[] = sprintf(
2751     ' LEFT JOIN %1$slien_dossier_demandeur ON lien_dossier_demandeur.dossier = dossier.dossier LEFT JOIN %1$sdemandeur ON lien_dossier_demandeur.demandeur = demandeur.demandeur',
2752     DB_PREFIXE
2753     );
2754     } elseif ($table == "architecte") {
2755     $from_tables[] = sprintf(
2756     ' LEFT JOIN %sarchitecte ON architecte.architecte = donnees_techniques.architecte',
2757     DB_PREFIXE
2758     );
2759     } else {
2760     $from_tables[] = sprintf(" LEFT JOIN %s$table ON dossier.dossier = $table.%s ", DB_PREFIXE, $table == 'donnees_techniques' ? 'dossier_instruction' : 'dossier');
2761     }
2762     }
2763    
2764     // Construction de la requête sql
2765     $sql = sprintf(
2766     '
2767     SELECT
2768     %s,
2769     CASE WHEN demandeur.qualite=\'particulier\'
2770     THEN
2771     TRIM(CONCAT_WS(\' \', demandeur.particulier_nom, demandeur.particulier_prenom))
2772     ELSE
2773     CASE WHEN demandeur.personne_morale_nom IS NOT NULL OR demandeur.personne_morale_prenom IS NOT NULL
2774     THEN
2775     TRIM(CONCAT_WS(\' \', demandeur.personne_morale_raison_sociale, demandeur.personne_morale_denomination, \'%s\', demandeur.personne_morale_nom, demandeur.personne_morale_prenom))
2776     ELSE
2777     TRIM(CONCAT(demandeur.personne_morale_raison_sociale, \' \', demandeur.personne_morale_denomination))
2778     END
2779 softime 10713 END as petitionnaire,
2780     demandeur.demandeur
2781 softime 10573 FROM
2782     %sdossier
2783     %s
2784     WHERE dossier.dossier = \'%s\'
2785     ',
2786     implode(', ', $champs),
2787     __("représenté(e) par"),
2788     DB_PREFIXE,
2789     implode(' ', $from_tables),
2790     $dossier
2791     );
2792    
2793     // On récupère les champs
2794     $result_fields = $this->f->get_all_results_from_db_query($sql);
2795    
2796     // Si il y a une erreur
2797     if ($result_fields['code'] == 'KO'
2798     || $result_fields['result'] == ''
2799     || $result_fields['result'] == null) {
2800    
2801     $this->addToLog(__METHOD__."() query : ".var_export($sql, true)." error: ".var_export($result_fields['message'], true), DEBUG_MODE);
2802     return false;
2803     }
2804    
2805     // On récupère le résultat de la requête
2806     $required_fields = $result_fields['result'];
2807    
2808     $required_fields_with_tab = array();
2809    
2810     // Pour chaque champ on récupère la table
2811     $demandeur_num = 1;
2812     foreach ($required_fields as $required_field) {
2813     foreach ($champs as $champ) {
2814     if ($champ == "demandeur.localite") {
2815 softime 10713 $required_fields_with_tab[$champ.','.$required_field['petitionnaire'].' '.$required_field['demandeur']] = $required_field[explode('.', $champ)[1]];
2816 softime 10573 } else {
2817     $required_fields_with_tab[$champ] = $required_field[explode('.', $champ)[1]];
2818     }
2819     }
2820     }
2821    
2822     // On vérifie si un architecte est lié
2823     $sql_architecte = sprintf(
2824     'SELECT
2825     architecte.*
2826     FROM
2827     %1$sdossier
2828     LEFT JOIN %1$sdonnees_techniques on dossier.dossier = donnees_techniques.dossier_instruction
2829     LEFT JOIN %1$sarchitecte ON donnees_techniques.architecte = architecte.architecte
2830     WHERE
2831     dossier.dossier = \'%2$s\'',
2832     DB_PREFIXE,
2833     $this->f->db->escapeSimple($dossier)
2834     );
2835    
2836     $result_architecte = $this->f->get_one_result_from_db_query($sql_architecte);
2837    
2838     if ($result_architecte['code'] == 'KO') {
2839     $this->addToLog(__METHOD__."() plop error: ".var_export($result_architecte['message'], true), DEBUG_MODE);
2840     return false;
2841     }
2842    
2843     // Si il n'est pas lié on enlève le champs architecte
2844     if ($result_architecte['result'] == '' || $result_architecte['result'] == null) {
2845     unset($required_fields_with_tab['architecte.ville']);
2846     }
2847    
2848     $result_tab = array(
2849     'is_ok' => false,
2850     'required_fields_empty' => array()
2851     );
2852    
2853     // Construction du message avec les tables et les champs
2854     foreach ($required_fields_with_tab as $required_field => $value) {
2855     if ($value == null || $value == '') {
2856     $required_fields_splited = explode('.', $required_field);
2857     if (isset(explode(',', $required_fields_splited[1])[1])) {
2858     $required_fields_splited = explode('.', $required_field);
2859 softime 10713 // On enlève l'identifiant du demandeur dans le message
2860     $required_fields_splited[1] = preg_replace('/[0-9]*$/', '', $required_fields_splited[1]);
2861 softime 10573 $result_tab['required_fields_empty'][] = sprintf("%s %s <i>%s</i>",
2862     sprintf(__("Dans le formulaire %s"), "<i>".__($required_fields_splited[0])."</i>"),
2863     __(" le champ : "),
2864     __(explode(',', $required_fields_splited[1])[0]).' pour '.explode(',', $required_fields_splited[1])[1]
2865     );
2866     } else {
2867     $result_tab['required_fields_empty'][] = sprintf("%s %s <i>%s</i>",
2868     sprintf(__("Dans le formulaire %s"), "<i>".__($required_fields_splited[0])."</i>"),
2869     __(" le champ : "),
2870     __($required_fields_splited[1])
2871     );
2872     }
2873     }
2874     }
2875    
2876     if (empty($result_tab['required_fields_empty'])) {
2877     $result_tab['is_ok'] = true;
2878     }
2879    
2880     return $result_tab;
2881    
2882     }
2883    
2884    
2885     /**
2886     * Permet de mettre à jour le state d'une task selon certains paramètre
2887     * Si le paramètre $dossier_autorisation est spécifié cela signifie que
2888     * le dossier a été transmis et qu'on doit modifier les state seulement
2889     * des tache de modification du di et d da
2890     *
2891     * @param dossier l'identifiant du dossier
2892     * @param state_prev le state de la tâche
2893     * @param state_wanted le state que doit avoir la tâche
2894     * @param dossier_autorisation l'identifiant du dossier d'autorisation
2895     *
2896     * @return void
2897     *
2898     */
2899 softime 10808 function update_task_state($dossier, $state_prev, $state_wanted, $dossier_autorisation=null, $modif_task=false) {
2900 softime 10573
2901     $already_transmitted_updated = '';
2902     $type_task_to_update = '';
2903 softime 10808
2904     $already_transmitted_updated = sprintf('OR task.dossier=\'%s\'', $dossier_autorisation !== null ? $dossier_autorisation : $this->valF['dossier_autorisation']);
2905 softime 10573 // Si le dossier_autorisation est spécifié on construit le WHERE
2906 softime 10808 if ($modif_task === true) {
2907 softime 10573 $type_task_to_update = sprintf('AND (type=\'modification_DI\' OR type=\'modification_DA\')');
2908     }
2909    
2910     $sql = sprintf(
2911 softime 10808 'SELECT task FROM %stask WHERE task.state = \'%s\' AND (task.dossier=\'%s\' %s) %s %s',
2912 softime 10573 DB_PREFIXE,
2913     $state_prev,
2914     $dossier,
2915     $already_transmitted_updated,
2916 softime 10808 $type_task_to_update,
2917     " AND type NOT IN ('notification_recepisse', 'notification_instruction', 'notification_decision') "
2918 softime 10573 );
2919     $tasks_id = $this->f->get_all_results_from_db_query($sql);
2920     $params = array('val' => array('state' => $state_wanted));
2921     foreach ($tasks_id['result'] as $task_id) {
2922     $inst_task = $this->f->get_inst__om_dbform(array(
2923     "obj" => "task",
2924     "idx" => intval($task_id['task'])
2925     ));
2926     $inst_task->update_task($params);
2927     }
2928     }
2929    
2930    
2931 softime 6565 function setType(&$form,$maj) {
2932     // Par défaut le type des champs est géré nativement par le framework
2933     parent::setType($form,$maj);
2934    
2935     // Récupération du contexte : groupe, CRUD et paramètres
2936     $groupe = $this->get_type_affichage_formulaire();
2937     $crud = $this->get_action_crud($maj);
2938     $parameters = $this->f->getCollectivite($this->getVal('om_collectivite'));
2939    
2940 mbroquet 3730 //
2941 softime 6565 // Gestion du groupe
2942 mbroquet 3730 //
2943    
2944 softime 10573 // CONSULTATION ENTRANTE
2945     $ce_fields = array(
2946     'autorisation_contestee' => 'hidden',
2947     'cle_acces_citoyen' => 'static',
2948     'contrevenants' => 'hidden',
2949     'date_ait' => 'hidden',
2950     'date_audience' => 'hidden',
2951     'date_affichage' => 'datestatic',
2952     'date_cloture_instruction' => 'hidden',
2953     'date_contradictoire' => 'hidden',
2954     'date_derniere_visite' => 'hidden',
2955     'date_premiere_visite' => 'hidden',
2956     'date_transmission_parquet' => 'hidden',
2957     'dossier_autorisation_type_detaille' => 'hidden',
2958     'dossier_instruction_type' => 'selecthiddenstatic',
2959     'dossier_petitionnaires' => 'hidden',
2960     'dt_ctx_infraction' => 'hidden',
2961     'dt_ctx_regularisable' => 'hidden',
2962     'dt_ctx_synthese_anr' => 'hidden',
2963     'dt_ctx_synthese_nti' => 'hidden',
2964     'ctx_reference_dsj' => 'hidden',
2965     'enjeu_ctx' => 'static',
2966     'instructeur_2' => 'hidden',
2967     'requerants' => 'hidden',
2968     'bailleur' => 'hidden',
2969     'ctx_reference_sagace' => 'hidden',
2970 softime 10808 'pec_metier' => 'selecthiddenstatic',
2971 softime 10573 "consultation_entrante" => 'hidden',
2972     "delai_reponse" => 'hidden',
2973     "type_delai" => 'hidden',
2974     "objet_consultation" => 'hidden',
2975     "date_production_notification" => 'hidden',
2976     "date_premiere_consultation" => 'hidden',
2977     "date_consultation" => 'hidden',
2978     "date_emission" => 'hidden',
2979     "service_consultant_id" => 'hidden',
2980     "service_consultant_libelle" => 'hidden',
2981     "service_consultant_insee" => 'hidden',
2982     "service_consultant_mail" => 'hidden',
2983     "service_consultant_type" => 'hidden',
2984     "service_consultant__siren" => 'hidden',
2985     "etat_consultation" => 'hidden',
2986     "type_consultation" => 'hidden',
2987     "texte_fondement_reglementaire" => 'hidden',
2988     "texte_objet_consultation" => 'hidden',
2989     "dossier_consultation" => 'hidden',
2990     );
2991 softime 6565 // INFRACTION
2992     $inf_fields = array(
2993     'a_qualifier' => 'hidden',
2994     'autorisation_contestee' => 'hidden',
2995     'autorite_competente' => 'hidden',
2996     'cle_acces_citoyen' => 'hidden',
2997     'contrevenants' => 'static',
2998     'date_ait' => 'hiddenstaticdate',
2999     'date_audience' => 'hiddenstaticdate',
3000     'date_cloture_instruction' => 'hidden',
3001     'date_complet' => 'hidden',
3002     'date_contradictoire' => 'hiddenstaticdate',
3003     'date_decision' => 'hiddenstaticdate',
3004     'date_depot' => 'hiddenstaticdate',
3005 softime 10573 'date_depot_mairie' => 'hiddenstaticdate',
3006 softime 6565 'date_dernier_depot' => 'hidden',
3007     'date_derniere_visite' => 'hiddenstaticdate',
3008     'date_limite' => 'hidden',
3009     'date_limite_incompletude' => 'hidden',
3010     'date_premiere_visite' => 'hiddenstaticdate',
3011     'date_transmission_parquet' => 'hiddenstaticdate',
3012     'date_validite' => 'hidden',
3013     'delai' => 'hidden',
3014     'description_projet' => 'hidden',
3015     'dossier_autorisation_type_detaille' => 'hidden',
3016     'dossier_instruction_type' => 'hidden',
3017     'dossier_petitionnaire' => 'hidden',
3018     'dossier_petitionnaires' => 'hidden',
3019     'dt_ctx_infraction' => 'checkboxhiddenstatic',
3020     'dt_ctx_regularisable' => 'checkboxhiddenstatic',
3021     'dt_ctx_synthese_anr' => 'static',
3022     'dt_ctx_synthese_nti' => 'static',
3023 softime 8477 'ctx_reference_dsj' => 'static',
3024 softime 6565 'enjeu_ctx' => 'hidden',
3025     'enjeu_erp' => 'hidden',
3026     'enjeu_urba' => 'hidden',
3027     'erp' => 'hidden',
3028     'evenement_suivant_tacite' => 'hidden',
3029     'evenement_suivant_tacite_incompletude' => 'hidden',
3030     'numero_versement_archive' => 'hidden',
3031     'requerants' => 'hidden',
3032     'tax_mtn_part_commu' => 'hidden',
3033     'tax_mtn_part_depart' => 'hidden',
3034     'tax_mtn_part_reg' => 'hidden',
3035     'tax_mtn_total' => 'hidden',
3036 softime 6929 'tax_mtn_rap' => 'hidden',
3037 softime 6565 'tax_secteur' => 'hidden',
3038 softime 6929 'tax_mtn_part_commu_sans_exo' => 'hidden',
3039     'tax_mtn_part_depart_sans_exo' => 'hidden',
3040     'tax_mtn_part_reg_sans_exo' => 'hidden',
3041     'tax_mtn_total_sans_exo' => 'hidden',
3042     'tax_mtn_rap_sans_exo' => 'hidden',
3043 softime 7067 'bailleur' => 'hidden',
3044 softime 8477 'ctx_reference_sagace' => 'static',
3045 softime 10573 'pec_metier' => 'hidden',
3046     "consultation_entrante" => 'hidden',
3047     "delai_reponse" => 'hidden',
3048     "type_delai" => 'hidden',
3049     "objet_consultation" => 'hidden',
3050     "date_production_notification" => 'hidden',
3051     "date_premiere_consultation" => 'hidden',
3052     "date_consultation" => 'hidden',
3053     "date_emission" => 'hidden',
3054     "service_consultant_id" => 'hidden',
3055     "service_consultant_libelle" => 'hidden',
3056     "service_consultant_insee" => 'hidden',
3057     "service_consultant_mail" => 'hidden',
3058     "service_consultant_type" => 'hidden',
3059     "service_consultant__siren" => 'hidden',
3060     "etat_consultation" => 'hidden',
3061     "type_consultation" => 'hidden',
3062     "texte_fondement_reglementaire" => 'hidden',
3063     "texte_objet_consultation" => 'hidden',
3064     "dossier_consultation" => 'hidden',
3065 softime 6565 );
3066     // RECOURS
3067     $re_fields = array(
3068     'a_qualifier' => 'hidden',
3069     'autorite_competente' => 'hidden',
3070     'cle_acces_citoyen' => 'hidden',
3071     'contrevenants' => 'hidden',
3072     'date_ait' => 'hidden',
3073     'date_audience' => 'hidden',
3074     'date_cloture_instruction' => 'hiddenstaticdate',
3075     'date_complet' => 'hidden',
3076     'date_contradictoire' => 'hidden',
3077     'date_decision' => 'hiddenstaticdate',
3078     'date_depot' => 'hiddenstaticdate',
3079 softime 10573 'date_depot_mairie' => 'hiddenstaticdate',
3080 softime 6565 'date_dernier_depot' => 'hidden',
3081     'date_derniere_visite' => 'hidden',
3082     'date_limite' => 'hiddenstaticdate',
3083     'date_limite_incompletude' => 'hidden',
3084     'date_premiere_visite' => 'hidden',
3085     'date_transmission_parquet' => 'hidden',
3086     'date_validite' => 'hidden',
3087     'delai' => 'hidden',
3088     'description_projet' => 'hidden',
3089     'dossier_autorisation_type_detaille' => 'static',
3090     'dossier_instruction_type' => 'hidden',
3091     'dossier_petitionnaire' => 'hidden',
3092     'dossier_petitionnaires' => 'static',
3093     'dt_ctx_infraction' => 'hidden',
3094     'dt_ctx_regularisable' => 'hidden',
3095     'dt_ctx_synthese_anr' => 'hidden',
3096     'dt_ctx_synthese_nti' => 'hidden',
3097     'enjeu_ctx' => 'hidden',
3098     'enjeu_erp' => 'hidden',
3099     'enjeu_urba' => 'hidden',
3100     'erp' => 'hidden',
3101     'evenement_suivant_tacite' =>'selecthiddenstatic',
3102     'evenement_suivant_tacite_incompletude' => 'hidden',
3103     'instructeur_2' => 'hidden',
3104     'numero_versement_archive' => 'hidden',
3105     'requerants' => 'static',
3106     'tax_mtn_part_commu' => 'hidden',
3107     'tax_mtn_part_depart' => 'hidden',
3108     'tax_mtn_part_reg' => 'hidden',
3109     'tax_mtn_total' => 'hidden',
3110 softime 6929 'tax_mtn_rap' => 'hidden',
3111 softime 6565 'tax_secteur' => 'hidden',
3112 softime 6929 'tax_mtn_part_commu_sans_exo' => 'hidden',
3113     'tax_mtn_part_depart_sans_exo' => 'hidden',
3114     'tax_mtn_part_reg_sans_exo' => 'hidden',
3115     'tax_mtn_total_sans_exo' => 'hidden',
3116     'tax_mtn_rap_sans_exo' => 'hidden',
3117 softime 7067 'bailleur' => 'hidden',
3118 softime 8477 'ctx_reference_dsj' => 'static',
3119     'ctx_reference_sagace' => 'static',
3120 softime 10573 'pec_metier' => 'hidden',
3121     "consultation_entrante" => 'hidden',
3122     "delai_reponse" => 'hidden',
3123     "type_delai" => 'hidden',
3124     "objet_consultation" => 'hidden',
3125     "date_production_notification" => 'hidden',
3126     "date_premiere_consultation" => 'hidden',
3127     "date_consultation" => 'hidden',
3128     "date_emission" => 'hidden',
3129     "service_consultant_id" => 'hidden',
3130     "service_consultant_libelle" => 'hidden',
3131     "service_consultant_insee" => 'hidden',
3132     "service_consultant_mail" => 'hidden',
3133     "service_consultant_type" => 'hidden',
3134     "service_consultant__siren" => 'hidden',
3135     "etat_consultation" => 'hidden',
3136     "type_consultation" => 'hidden',
3137     "texte_fondement_reglementaire" => 'hidden',
3138     "texte_objet_consultation" => 'hidden',
3139     "dossier_consultation" => 'hidden',
3140 softime 6565 );
3141     // ADS
3142     $ads_fields = array(
3143     'autorisation_contestee' => 'hidden',
3144     'cle_acces_citoyen' => 'static',
3145     'contrevenants' => 'hidden',
3146     'date_ait' => 'hidden',
3147     'date_audience' => 'hidden',
3148 softime 8989 'date_affichage' => 'datestatic',
3149 softime 6565 'date_cloture_instruction' => 'hidden',
3150     'date_contradictoire' => 'hidden',
3151     'date_derniere_visite' => 'hidden',
3152     'date_premiere_visite' => 'hidden',
3153     'date_transmission_parquet' => 'hidden',
3154     'dossier_autorisation_type_detaille' => 'hidden',
3155     'dossier_instruction_type' => 'selecthiddenstatic',
3156     'dossier_petitionnaires' => 'hidden',
3157     'dt_ctx_infraction' => 'hidden',
3158     'dt_ctx_regularisable' => 'hidden',
3159     'dt_ctx_synthese_anr' => 'hidden',
3160     'dt_ctx_synthese_nti' => 'hidden',
3161 softime 8477 'ctx_reference_dsj' => 'hidden',
3162 softime 6565 'enjeu_ctx' => 'static',
3163     'instructeur_2' => 'hidden',
3164     'requerants' => 'hidden',
3165 softime 7067 'bailleur' => 'hidden',
3166 softime 8477 'ctx_reference_sagace' => 'hidden',
3167 softime 10573 'pec_metier' => 'selectstatic',
3168     "consultation_entrante" => 'hidden',
3169     "delai_reponse" => 'hidden',
3170     "type_delai" => 'hidden',
3171     "objet_consultation" => 'hidden',
3172     "date_production_notification" => 'hidden',
3173     "date_premiere_consultation" => 'hidden',
3174     "date_consultation" => 'hidden',
3175     "date_emission" => 'hidden',
3176     "service_consultant_id" => 'hidden',
3177     "service_consultant_libelle" => 'hidden',
3178     "service_consultant_insee" => 'hidden',
3179     "service_consultant_mail" => 'hidden',
3180     "service_consultant_type" => 'hidden',
3181     "service_consultant__siren" => 'hidden',
3182     "etat_consultation" => 'hidden',
3183     "type_consultation" => 'hidden',
3184     "texte_fondement_reglementaire" => 'hidden',
3185     "texte_objet_consultation" => 'hidden',
3186     "dossier_consultation" => 'hidden',
3187 softime 6565 );
3188 softime 7067 // DPC
3189     $dpc_fields = array(
3190     'autorisation_contestee' => 'hidden',
3191     'cle_acces_citoyen' => 'static',
3192     'contrevenants' => 'hidden',
3193     'date_ait' => 'hidden',
3194     'date_audience' => 'hidden',
3195     'date_cloture_instruction' => 'hidden',
3196     'date_contradictoire' => 'hidden',
3197     'date_derniere_visite' => 'hidden',
3198     'date_premiere_visite' => 'hidden',
3199     'date_transmission_parquet' => 'hidden',
3200     'dossier_autorisation_type_detaille' => 'hidden',
3201     'dossier_instruction_type' => 'selecthiddenstatic',
3202     'dossier_petitionnaires' => 'hidden',
3203     'dt_ctx_infraction' => 'hidden',
3204     'dt_ctx_regularisable' => 'hidden',
3205     'dt_ctx_synthese_anr' => 'hidden',
3206     'dt_ctx_synthese_nti' => 'hidden',
3207 softime 8477 'ctx_reference_dsj' => 'hidden',
3208 softime 7067 'enjeu_ctx' => 'static',
3209     'instructeur_2' => 'hidden',
3210     'requerants' => 'hidden',
3211     'bailleur' => 'static',
3212 softime 8477 'ctx_reference_sagace' => 'hidden',
3213 softime 10573 'pec_metier' => 'hidden',
3214     "consultation_entrante" => 'hidden',
3215     "delai_reponse" => 'hidden',
3216     "type_delai" => 'hidden',
3217     "objet_consultation" => 'hidden',
3218     "date_production_notification" => 'hidden',
3219     "date_premiere_consultation" => 'hidden',
3220     "date_consultation" => 'hidden',
3221     "date_emission" => 'hidden',
3222     "service_consultant_id" => 'hidden',
3223     "service_consultant_libelle" => 'hidden',
3224     "service_consultant_insee" => 'hidden',
3225     "service_consultant_mail" => 'hidden',
3226     "service_consultant_type" => 'hidden',
3227     "service_consultant__siren" => 'hidden',
3228     "etat_consultation" => 'hidden',
3229     "type_consultation" => 'hidden',
3230     "texte_fondement_reglementaire" => 'hidden',
3231     "texte_objet_consultation" => 'hidden',
3232     "dossier_consultation" => 'hidden',
3233 softime 7067 );
3234 softime 6565 // COMMUN
3235     $all_fields = array(
3236     'accord_tacite' => 'hidden',
3237     'annee' => 'hidden',
3238     'autres_demandeurs' => 'hidden',
3239     'date_achevement' => 'hidden',
3240     'date_chantier' => 'hidden',
3241     'date_conformite' => 'hidden',
3242     'date_notification_delai' => 'hidden',
3243     'date_rejet' => 'hidden',
3244     'date_retour_contradictoire' => 'hidden',
3245     'delai_incompletude' => 'hidden',
3246     'description' => 'hidden',
3247     'dossier' => 'hidden',
3248     'dossier_arrondissement' => 'hidden',
3249     'dossier_autorisation' => 'hidden',
3250     'dossier_autorisation_libelle' => 'hidden',
3251     'duree_validite' => 'hidden',
3252     'etat_pendant_incompletude' => 'hidden',
3253     'geom' => 'hiddenstatic',
3254     'geom1' => 'hidden',
3255     'incomplet_notifie' => 'hidden',
3256     'incompletude' => 'hidden',
3257     'interface_referentiel_erp' => 'hidden',
3258     'log_instructions' => 'nodisplay',
3259     'om_collectivite' => 'hidden',
3260     'quartier' => 'hidden',
3261     'version' => 'hidden',
3262 softime 7996 'date_modification' => 'hidden',
3263     'hash_sitadel' => 'hidden',
3264 softime 8329 'depot_electronique' => 'hidden',
3265 softime 9245 'version_clos' => 'hidden',
3266     'initial_dt' => 'hidden',
3267 softime 10573 'adresse_normalisee' => 'hidden',
3268     'adresse_normalisee_json' => 'hidden',
3269     'streetview' => 'hidden',
3270     'numerotation_type' => 'hidden',
3271     'numerotation_dep' => 'hidden',
3272     'numerotation_com' => 'hidden',
3273     'numerotation_division' => 'hidden',
3274     'numerotation_suffixe' => 'hidden',
3275     'numerotation_entite' => 'hidden',
3276     'numerotation_num' => 'hidden',
3277     'numerotation_num_suffixe' => 'hidden',
3278     'numerotation_num_entite' => 'hidden',
3279 softime 11585 'lien_iiue' => 'hidden',
3280 softime 6565 );
3281     if (isset($parameters['option_afficher_division'])
3282     && $parameters['option_afficher_division'] !== 'true') {
3283     $all_fields['division'] = 'hidden';
3284 mbroquet 3730 }
3285 softime 6565 if (isset($parameters['option_sig'])
3286     && $parameters['option_sig'] !== 'sig_interne'
3287     && $parameters['option_sig'] !== 'sig_externe'){
3288     $all_fields['geom'] = 'hidden';
3289 mbroquet 3730 }
3290    
3291 softime 10573 if ($this->f->is_option_date_depot_mairie_enabled() === true) {
3292 softime 10869 $all_fields['date_depot_mairie'] = 'hiddenstaticdate';
3293 softime 10573 } else {
3294     $all_fields['date_depot_mairie'] = 'hidden';
3295     }
3296    
3297 softime 11585 // Affichage des identifiants techniques Plat'AU
3298     if ($crud === 'read'
3299     && $this->f->is_type_dossier_platau($this->getVal('dossier_autorisation')) === true
3300     && $this->f->is_option_mode_service_consulte_enabled() !== true
3301     || ($this->f->is_option_mode_service_consulte_enabled() === true
3302     && ($this->get_source_depot_from_demande() === 'platau'
3303     || $this->get_source_depot_from_demande() === 'portal'))) {
3304     //
3305     $all_fields['lien_iiue'] = 'jsontotab';
3306     }
3307    
3308 softime 6565 //
3309     // Gestion du contexte
3310     //
3311 mbroquet 3730
3312 softime 6565 // AJOUTER, MODIFIER
3313     if ($crud === 'create' OR $crud === 'update') {
3314 mbroquet 3730
3315 softime 7366 $all_fields['avis_decision'] = 'selecthiddenstatic';
3316 softime 6565 $all_fields['etat'] = 'hiddenstatic';
3317     $all_fields['terrain'] = 'hiddenstatic';
3318     //
3319     $ads_fields['a_qualifier'] = 'checkbox';
3320     $ads_fields['accord_tacite'] = 'hiddenstatic';
3321     $ads_fields['autorite_competente'] = 'selecthiddenstatic';
3322     $ads_fields['date_achevement'] = 'hiddenstaticdate';
3323     $ads_fields['date_chantier'] = 'hiddenstaticdate';
3324     $ads_fields['date_conformite'] = 'hiddenstaticdate';
3325     $ads_fields['date_decision'] = 'hiddenstaticdate';
3326 softime 8989 $ads_fields['date_affichage'] = 'hiddenstaticdate';
3327 softime 6565 $ads_fields['date_depot'] = 'hiddenstaticdate';
3328 softime 10573 //
3329     $ce_fields['a_qualifier'] = 'checkbox';
3330     $ce_fields['accord_tacite'] = 'hiddenstatic';
3331     $ce_fields['autorite_competente'] = 'selecthiddenstatic';
3332     $ce_fields['date_achevement'] = 'hiddenstaticdate';
3333     $ce_fields['date_chantier'] = 'hiddenstaticdate';
3334     $ce_fields['date_conformite'] = 'hiddenstaticdate';
3335     $ce_fields['date_decision'] = 'hiddenstaticdate';
3336     $ce_fields['date_affichage'] = 'hiddenstaticdate';
3337     $ce_fields['date_depot'] = 'hiddenstaticdate';
3338     if ($this->f->is_option_date_depot_mairie_enabled() === true) {
3339     $ads_fields['date_depot_mairie'] = 'date';
3340     $ce_fields['date_depot_mairie'] = 'date';
3341     } else {
3342     $ads_fields['date_depot_mairie'] = 'hidden';
3343     $ce_fields['date_depot_mairie'] = 'hidden';
3344     }
3345 softime 6565 $ads_fields['date_dernier_depot'] = 'hiddenstaticdate';
3346     $ads_fields['date_notification_delai'] = 'hiddenstaticdate';
3347     $ads_fields['date_rejet'] = 'hiddenstaticdate';
3348     $ads_fields['date_validite'] = 'hiddenstaticdate';
3349     $ads_fields['delai'] = 'hiddenstatic';
3350     $ads_fields['description_projet'] = 'hiddenstatic';
3351 softime 7366 $ads_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
3352 softime 6565 $ads_fields['shon_calcul'] = 'hiddenstatic';
3353     $ads_fields['tax_mtn_part_commu'] = 'hidden';
3354     $ads_fields['tax_mtn_part_depart'] = 'hidden';
3355     $ads_fields['tax_mtn_part_reg'] = 'hidden';
3356     $ads_fields['tax_mtn_total'] = 'hidden';
3357 softime 6929 $ads_fields['tax_mtn_rap'] = 'hidden';
3358     $ads_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
3359     $ads_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
3360     $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3361     $ads_fields['tax_mtn_total_sans_exo'] = 'hidden';
3362     $ads_fields['tax_mtn_rap_sans_exo'] = 'hidden';
3363 softime 6565 $ads_fields['terrain_surface_calcul'] = 'hiddenstatic';
3364 softime 7067 //
3365 softime 10573 $ce_fields['date_dernier_depot'] = 'hiddenstaticdate';
3366     $ce_fields['date_notification_delai'] = 'hiddenstaticdate';
3367     $ce_fields['date_rejet'] = 'hiddenstaticdate';
3368     $ce_fields['date_validite'] = 'hiddenstaticdate';
3369     $ce_fields['delai'] = 'hiddenstatic';
3370     $ce_fields['description_projet'] = 'hiddenstatic';
3371     $ce_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
3372     $ce_fields['shon_calcul'] = 'hiddenstatic';
3373     $ce_fields['tax_mtn_part_commu'] = 'hidden';
3374     $ce_fields['tax_mtn_part_depart'] = 'hidden';
3375     $ce_fields['tax_mtn_part_reg'] = 'hidden';
3376     $ce_fields['tax_mtn_total'] = 'hidden';
3377     $ce_fields['tax_mtn_rap'] = 'hidden';
3378     $ce_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
3379     $ce_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
3380     $ce_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3381     $ce_fields['tax_mtn_total_sans_exo'] = 'hidden';
3382     $ce_fields['tax_mtn_rap_sans_exo'] = 'hidden';
3383     $ce_fields['terrain_surface_calcul'] = 'hiddenstatic';
3384     //
3385 softime 7067 $dpc_fields['a_qualifier'] = 'checkbox';
3386     $dpc_fields['accord_tacite'] = 'hiddenstatic';
3387     $dpc_fields['autorite_competente'] = 'selecthiddenstatic';
3388     $dpc_fields['date_achevement'] = 'hiddenstaticdate';
3389     $dpc_fields['date_chantier'] = 'hiddenstaticdate';
3390     $dpc_fields['date_conformite'] = 'hiddenstaticdate';
3391     $dpc_fields['date_decision'] = 'hiddenstaticdate';
3392     $dpc_fields['date_depot'] = 'hiddenstaticdate';
3393 softime 10573 $dpc_fields['date_depot_mairie'] = 'hiddenstaticdate';
3394 softime 7067 $dpc_fields['date_dernier_depot'] = 'hiddenstaticdate';
3395     $dpc_fields['date_notification_delai'] = 'hiddenstaticdate';
3396     $dpc_fields['date_rejet'] = 'hiddenstaticdate';
3397     $dpc_fields['date_validite'] = 'hiddenstaticdate';
3398     $dpc_fields['delai'] = 'hiddenstatic';
3399     $dpc_fields['description_projet'] = 'hiddenstatic';
3400 softime 7366 $dpc_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
3401 softime 7067 $dpc_fields['shon_calcul'] = 'hiddenstatic';
3402     $dpc_fields['tax_mtn_part_commu'] = 'hidden';
3403     $dpc_fields['tax_mtn_part_depart'] = 'hidden';
3404     $dpc_fields['tax_mtn_part_reg'] = 'hidden';
3405     $dpc_fields['tax_mtn_total'] = 'hidden';
3406     $dpc_fields['tax_mtn_rap'] = 'hidden';
3407     $dpc_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
3408     $dpc_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
3409     $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3410     $dpc_fields['tax_mtn_total_sans_exo'] = 'hidden';
3411     $dpc_fields['tax_mtn_rap_sans_exo'] = 'hidden';
3412     $dpc_fields['terrain_surface_calcul'] = 'hiddenstatic';
3413 softime 7366 //
3414     $re_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
3415 softime 10573 $re_fields['dossier_petitionnaires'] = 'static';
3416 softime 7366 $re_fields['requerants'] = 'hiddenstatic';
3417     $inf_fields['contrevenants'] = 'hiddenstatic';
3418     $inf_fields['dt_ctx_synthese_anr'] = 'hiddenstatic';
3419     $inf_fields['dt_ctx_synthese_nti'] = 'hiddenstatic';
3420 softime 10573 //
3421 softime 10808 // Vérifie que le dossier a été déposé depuis Plat'AU ou le portail citoyen
3422     if ($this->get_source_depot_from_demande() === 'platau'
3423     || $this->get_source_depot_from_demande() === 'portal') {
3424     //
3425 softime 10573 $ce_fields["consultation_entrante"] = 'hidden';
3426     $ce_fields["delai_reponse"] = 'static';
3427     $ce_fields["type_delai"] = 'static';
3428     $ce_fields["objet_consultation"] = 'static';
3429     $ce_fields["date_production_notification"] = 'datestatic';
3430     $ce_fields["date_premiere_consultation"] = 'datestatic';
3431     $ce_fields["date_consultation"] = 'datestatic';
3432     $ce_fields["date_emission"] = 'datestatic';
3433     $ce_fields["service_consultant_id"] = 'static';
3434     $ce_fields["service_consultant_libelle"] = 'static';
3435     $ce_fields["service_consultant_insee"] = 'static';
3436     $ce_fields["service_consultant_mail"] = 'static';
3437     $ce_fields["service_consultant_type"] = 'static';
3438     $ce_fields["service_consultant__siren"] = 'static';
3439     $ce_fields["etat_consultation"] = 'static';
3440     $ce_fields["type_consultation"] = 'static';
3441     $ce_fields["texte_fondement_reglementaire"] = 'static';
3442     $ce_fields["texte_objet_consultation"] = 'static';
3443     $ce_fields["dossier_consultation"] = 'hidden';
3444     }
3445 softime 6565 // Si l'état du dossier est incomplet
3446     if ($this->is_incomplet_notifie()) {
3447     // On cache les dates de complétude et de limite d'instruction
3448     $ads_fields['date_complet'] = 'hidden';
3449     $ads_fields['date_limite'] = 'hidden';
3450     $ads_fields['evenement_suivant_tacite_incompletude'] ='selecthiddenstatic';
3451     $ads_fields['evenement_suivant_tacite'] ='hidden';
3452     $ads_fields['date_limite_incompletude'] = 'hiddenstaticdate';
3453 softime 7067 //
3454     $dpc_fields['date_complet'] = 'hidden';
3455     $dpc_fields['date_limite'] = 'hidden';
3456     $dpc_fields['evenement_suivant_tacite_incompletude'] ='selecthiddenstatic';
3457     $dpc_fields['evenement_suivant_tacite'] ='hidden';
3458     $dpc_fields['date_limite_incompletude'] = 'hiddenstaticdate';
3459 softime 10573 //
3460     $ce_fields['date_complet'] = 'hidden';
3461     $ce_fields['date_limite'] = 'hidden';
3462     $ce_fields['evenement_suivant_tacite_incompletude'] ='selecthiddenstatic';
3463     $ce_fields['evenement_suivant_tacite'] ='hidden';
3464     $ce_fields['date_limite_incompletude'] = 'hiddenstaticdate';
3465 softime 6565 } else {
3466     // Sinon on cache la date de limite d'incomplétude
3467     $ads_fields['date_limite_incompletude'] = 'hidden';
3468     $ads_fields['evenement_suivant_tacite_incompletude'] ='hidden';
3469     $ads_fields['evenement_suivant_tacite'] ='selecthiddenstatic';
3470     $ads_fields['date_complet'] = 'hiddenstaticdate';
3471     $ads_fields['date_limite'] = 'hiddenstaticdate';
3472 softime 7067 //
3473     $dpc_fields['date_limite_incompletude'] = 'hidden';
3474     $dpc_fields['evenement_suivant_tacite_incompletude'] ='hidden';
3475     $dpc_fields['evenement_suivant_tacite'] ='selecthiddenstatic';
3476     $dpc_fields['date_complet'] = 'hiddenstaticdate';
3477     $dpc_fields['date_limite'] = 'hiddenstaticdate';
3478 softime 10573 //
3479     $ce_fields['date_limite_incompletude'] = 'hidden';
3480     $ce_fields['evenement_suivant_tacite_incompletude'] ='hidden';
3481     $ce_fields['evenement_suivant_tacite'] ='selecthiddenstatic';
3482     $ce_fields['date_complet'] = 'hiddenstaticdate';
3483     $ce_fields['date_limite'] = 'hiddenstaticdate';
3484 softime 6565 }
3485    
3486     // MODIFIER
3487     if ($crud ==='update') {
3488     $all_fields['dossier_libelle'] = 'hiddenstatic';
3489 softime 10573 $ads_fields['dossier_petitionnaire'] = 'static';
3490     $dpc_fields['dossier_petitionnaire'] = 'static';
3491     $ce_fields['dossier_petitionnaire'] = 'static';
3492 softime 6565 //
3493     if ($this->f->isAccredited("dossier_modifier_instructeur")) {
3494     $all_fields['instructeur'] = 'select';
3495     $inf_fields['instructeur_2'] = 'select';
3496     } else {
3497     $all_fields['instructeur'] = 'selecthiddenstatic';
3498     $inf_fields['instructeur_2'] = 'selecthiddenstatic';
3499     }
3500     //
3501     if (isset($parameters['option_afficher_division'])
3502     && $parameters['option_afficher_division'] === 'true') {
3503     $all_fields['division'] = 'selecthiddenstatic';
3504     if ($this->f->isAccredited("dossier_modifier_division")) {
3505     $all_fields['division'] = 'select';
3506     }
3507     }
3508     // Si l'utilisateur ne peut pas qualifier un DI (guichet unique & guichet et suivi)
3509     if (!$this->f->isAccredited(array("dossier_instruction","dossier_instruction_qualifier"), "OR")) {
3510     // Il ne peut pas modifier les champs suivants
3511     $ads_fields['numero_versement_archive'] = 'hiddenstatic';
3512     $ads_fields['enjeu_urba'] = 'checkboxhiddenstatic';
3513     $ads_fields['enjeu_erp'] = 'checkboxhiddenstatic';
3514     $ads_fields['erp'] = 'checkboxhiddenstatic';
3515     $ads_fields['a_qualifier'] = 'checkboxhiddenstatic';
3516 softime 7067 //
3517     $dpc_fields['numero_versement_archive'] = 'hiddenstatic';
3518     $dpc_fields['enjeu_urba'] = 'checkboxhiddenstatic';
3519     $dpc_fields['enjeu_erp'] = 'checkboxhiddenstatic';
3520     $dpc_fields['erp'] = 'checkboxhiddenstatic';
3521     $dpc_fields['a_qualifier'] = 'checkboxhiddenstatic';
3522 softime 10573 //
3523     $ce_fields['numero_versement_archive'] = 'hiddenstatic';
3524     $ce_fields['enjeu_urba'] = 'checkboxhiddenstatic';
3525     $ce_fields['enjeu_erp'] = 'checkboxhiddenstatic';
3526     $ce_fields['erp'] = 'checkboxhiddenstatic';
3527     $ce_fields['a_qualifier'] = 'checkboxhiddenstatic';
3528 softime 6565 }
3529     // Le profil Qualificateur peut modifier seulement les champs
3530     // autorite_competente, a_qualifier et erp
3531     if ($this->f->isUserQualificateur()) {
3532     $ads_fields['numero_versement_archive'] = 'static';
3533     $ads_fields['enjeu_urba'] = 'checkboxstatic';
3534     $ads_fields['enjeu_erp'] = 'checkboxstatic';
3535 softime 7067 //
3536     $dpc_fields['numero_versement_archive'] = 'static';
3537     $dpc_fields['enjeu_urba'] = 'checkboxstatic';
3538     $dpc_fields['enjeu_erp'] = 'checkboxstatic';
3539 softime 10573 //
3540     $ce_fields['numero_versement_archive'] = 'static';
3541     $ce_fields['enjeu_urba'] = 'checkboxstatic';
3542     $ce_fields['enjeu_erp'] = 'checkboxstatic';
3543 softime 6565 }
3544 softime 7366 // Le dossier ne doit pas être instruit
3545     if ($this->has_only_recepisse() === true
3546     && $this->getStatut() !== 'cloture') {
3547     //
3548     $all_fields['date_depot'] = 'date';
3549 softime 10573 if ($this->f->is_option_date_depot_mairie_enabled() === true) {
3550     $all_fields['date_depot_mairie'] = 'date';
3551     } else {
3552     $all_fields['date_depot_mairie'] = 'hidden';
3553     }
3554 softime 7366 }
3555 softime 8593 // Gestion de la case à cocher ERP en cas d'interfaçage avec le
3556     // référentiel ERP
3557     if ($this->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true) {
3558     // Par défaut la case à cocher ERP est non modifiable
3559     $all_fields['erp'] = 'checkboxhiddenstatic';
3560     // Si le type du dossier d'instruction en cours est présent
3561     // dans les paramètres autorisant l'interfaçage avec le référentiel ERP
3562     if (isset($parameters['erp__dossier__nature__at']) === true
3563     && $this->f->getDATCode($this->getVal($this->clePrimaire)) == $parameters['erp__dossier__nature__at']) {
3564     //
3565     $all_fields['erp'] = 'checkbox';
3566     }
3567     if (isset($parameters['erp__dossier__nature__pc']) === true
3568     && $this->f->getDATCode($this->getVal($this->clePrimaire)) == $parameters['erp__dossier__nature__pc']
3569     && isset($parameters['erp__dossier__type_di__pc']) === true) {
3570     //
3571     $erp_di_pc = explode(";", $parameters['erp__dossier__type_di__pc']);
3572     if (is_array($erp_di_pc) === true
3573     && in_array($this->getVal("dossier_instruction_type"), $erp_di_pc) === true) {
3574     //
3575     $all_fields['erp'] = 'checkbox';
3576     }
3577     }
3578     }
3579 softime 8989 // modification de la date d'affichage pour les ADS
3580     if ($this->f->isAccredited($this->get_absolute_class_name()."_modifier_date_affichage")) {
3581     $ads_fields['date_affichage'] = 'date';
3582 softime 10573 $ce_fields['date_affichage'] = 'date';
3583 softime 8989 }
3584 softime 10573
3585     // pas de modificiation de la commune associée au dossier (si l'option est activée)
3586     if ($this->f->is_option_dossier_commune_enabled($this->getVal('om_collectivite'))) {
3587     $ads_fields['commune'] = 'selecthiddenstatic';
3588     $ce_fields['commune'] = 'selecthiddenstatic';
3589     }
3590 softime 6565 }
3591     }
3592     // MODIFIER, SUPPRIMER, CONSULTER
3593     if ($crud !== 'create') {
3594     $re_fields['autorisation_contestee'] = 'selecthiddenstatic';
3595     $all_fields['date_demande'] = 'hidden';
3596     // La collectivité n'est jamais modifiable
3597     if ($_SESSION['niveau'] == 2) {
3598     $all_fields['om_collectivite'] = 'selecthiddenstatic';
3599     }
3600 softime 6929 // Instance du paramétrage des taxes
3601 mbroquet 3730 $inst_taxe_amenagement = $this->get_inst_taxe_amenagement();
3602     // Instance de cerfa
3603     $inst_cerfa = $this->get_inst_cerfa();
3604 softime 10573
3605     // Gestion du secteur pour la taxe d'aménagement
3606     // MODIFIER
3607     if ($crud === 'update') {
3608     //
3609     if ($this->is_in_context_of_foreign_key("tax_secteur", $this->getParameter("retourformulaire"))) {
3610     $ads_fields['tax_secteur'] = 'selecthiddenstatic';
3611     $dpc_fields['tax_secteur'] = 'selecthiddenstatic';
3612     $ce_fields['tax_secteur'] = 'selecthiddenstatic';
3613     } else {
3614     $ads_fields['tax_secteur'] = 'select';
3615     $dpc_fields['tax_secteur'] = 'select';
3616     $ce_fields['tax_secteur'] = 'select';
3617     }
3618     }
3619     // SUPPRIMER
3620     if ($crud === 'delete') {
3621     //
3622     $ads_fields['tax_secteur'] = 'selectstatic';
3623     $dpc_fields['tax_secteur'] = 'selectstatic';
3624     $ce_fields['tax_secteur'] = 'selectstatic';
3625     }
3626     // CONSULTER
3627     if ($crud === 'read') {
3628     //
3629     $ads_fields['tax_secteur'] = 'selectstatic';
3630     $dpc_fields['tax_secteur'] = 'selectstatic';
3631     $ce_fields['tax_secteur'] = 'selectstatic';
3632     }
3633    
3634 softime 6929 // Si l'option de simulation est activée pour la collectivité du
3635     // dossier, l'utilisateur connecté a la permissions de voir
3636     // la simulation des taxes, la collectivité à un paramétrage pour
3637     // les taxes et que le cerfa du dossier à les champs requis
3638     if ($this->f->is_option_simulation_taxes_enabled($this->getVal('om_collectivite')) === true
3639     && $this->f->isAccredited("dossier_instruction_simulation_taxes") === true
3640     && $inst_taxe_amenagement !== null
3641     && $inst_cerfa->can_simulate_taxe_amenagement() === true) {
3642 mbroquet 3730
3643 softime 6565 // Si ce n'est pas une commune d'Île-de-France
3644 mbroquet 3730 if ($inst_taxe_amenagement->getVal('en_ile_de_france') == 'f') {
3645     //
3646 softime 6565 $ads_fields['tax_mtn_part_reg'] = 'hidden';
3647 softime 6929 $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3648 softime 7067 $dpc_fields['tax_mtn_part_reg'] = 'hidden';
3649     $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3650 softime 10573 $ce_fields['tax_mtn_part_reg'] = 'hidden';
3651     $ce_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3652 mbroquet 3730 }
3653     } else {
3654 softime 6565 // SUPPRIMER, CONSULTER
3655     if ($crud === 'delete' OR $crud ==='read') {
3656     $ads_fields['tax_mtn_part_commu'] = 'hidden';
3657     $ads_fields['tax_mtn_part_depart'] = 'hidden';
3658     $ads_fields['tax_mtn_part_reg'] = 'hidden';
3659     $ads_fields['tax_mtn_total'] = 'hidden';
3660 softime 6929 $ads_fields['tax_mtn_rap'] = 'hidden';
3661     $ads_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
3662     $ads_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
3663     $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3664     $ads_fields['tax_mtn_total_sans_exo'] = 'hidden';
3665     $ads_fields['tax_mtn_rap_sans_exo'] = 'hidden';
3666 softime 7067 //
3667     $dpc_fields['tax_mtn_part_commu'] = 'hidden';
3668     $dpc_fields['tax_mtn_part_depart'] = 'hidden';
3669     $dpc_fields['tax_mtn_part_reg'] = 'hidden';
3670     $dpc_fields['tax_mtn_total'] = 'hidden';
3671     $dpc_fields['tax_mtn_rap'] = 'hidden';
3672     $dpc_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
3673     $dpc_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
3674     $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3675     $dpc_fields['tax_mtn_total_sans_exo'] = 'hidden';
3676     $dpc_fields['tax_mtn_rap_sans_exo'] = 'hidden';
3677 softime 10573 //
3678     $ce_fields['tax_mtn_part_commu'] = 'hidden';
3679     $ce_fields['tax_mtn_part_depart'] = 'hidden';
3680     $ce_fields['tax_mtn_part_reg'] = 'hidden';
3681     $ce_fields['tax_mtn_total'] = 'hidden';
3682     $ce_fields['tax_mtn_rap'] = 'hidden';
3683     $ce_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
3684     $ce_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
3685     $ce_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3686     $ce_fields['tax_mtn_total_sans_exo'] = 'hidden';
3687     $ce_fields['tax_mtn_rap_sans_exo'] = 'hidden';
3688 mbroquet 3730 }
3689     }
3690     }
3691 softime 8477 // CONSULTER
3692     if ($crud ==='read') {
3693 mbroquet 3730
3694 softime 6565 $ads_fields['geom'] = 'static';
3695     $ads_fields['a_qualifier'] = 'checkboxstatic';
3696     $ads_fields['terrain_references_cadastrales'] = 'referencescadastralesstatic';
3697 softime 7067 //
3698     $dpc_fields['geom'] = 'static';
3699     $dpc_fields['a_qualifier'] = 'checkboxstatic';
3700     $dpc_fields['terrain_references_cadastrales'] = 'referencescadastralesstatic';
3701 softime 10573 //
3702     $ce_fields['geom'] = 'static';
3703     $ce_fields['a_qualifier'] = 'checkboxstatic';
3704     $ce_fields['terrain_references_cadastrales'] = 'referencescadastralesstatic';
3705     // Affiche le champ streetview si l'option est active
3706     if ($this->f->is_option_streetview_enabled($this->getVal("om_collectivite")) === true) {
3707     $all_fields['streetview'] = 'static';
3708     }
3709    
3710 softime 6565 // Si l'état du dossier est incomplet
3711     if ($this->is_incomplet_notifie()) {
3712     // on cache les dates de complétude et de limite d'instruction
3713     $ads_fields['date_complet'] = 'hidden';
3714     $ads_fields['date_limite'] = 'hidden';
3715     $ads_fields['evenement_suivant_tacite_incompletude'] = 'selecthiddenstatic';
3716     $ads_fields['evenement_suivant_tacite'] = 'hidden';
3717 softime 7067 //
3718     $dpc_fields['date_complet'] = 'hidden';
3719     $dpc_fields['date_limite'] = 'hidden';
3720     $dpc_fields['evenement_suivant_tacite_incompletude'] = 'selecthiddenstatic';
3721     $dpc_fields['evenement_suivant_tacite'] = 'hidden';
3722 softime 10573 //
3723     $ce_fields['date_complet'] = 'hidden';
3724     $ce_fields['date_limite'] = 'hidden';
3725     $ce_fields['evenement_suivant_tacite_incompletude'] = 'selecthiddenstatic';
3726     $ce_fields['evenement_suivant_tacite'] = 'hidden';
3727 softime 6565 } else {
3728     // sinon on cache la date de limite d'incomplétude
3729     $ads_fields['date_limite_incompletude'] = 'hidden';
3730     $ads_fields['evenement_suivant_tacite_incompletude'] = 'hidden';
3731     $ads_fields['evenement_suivant_tacite'] = 'selecthiddenstatic';
3732 softime 7067 //
3733     $dpc_fields['date_limite_incompletude'] = 'hidden';
3734     $dpc_fields['evenement_suivant_tacite_incompletude'] = 'hidden';
3735     $dpc_fields['evenement_suivant_tacite'] = 'selecthiddenstatic';
3736 softime 10573 //
3737     $ce_fields['date_limite_incompletude'] = 'hidden';
3738     $ce_fields['evenement_suivant_tacite_incompletude'] = 'hidden';
3739     $ce_fields['evenement_suivant_tacite'] = 'selecthiddenstatic';
3740 softime 6565 }
3741     if (isset($parameters['option_arrondissement'])
3742     && $parameters['option_arrondissement'] === 'true') {
3743     $all_fields['dossier_arrondissement'] = 'static';
3744     }
3745 softime 10573 //
3746 softime 10808 // Vérifie que le dossier a été déposé depuis Plat'AU ou le portail citoyen
3747     if ($this->get_source_depot_from_demande() === 'platau'
3748     || $this->get_source_depot_from_demande() === 'portal') {
3749     //
3750 softime 10573 $ce_fields["consultation_entrante"] = 'hidden';
3751     $ce_fields["delai_reponse"] = 'static';
3752     $ce_fields["type_delai"] = 'static';
3753     $ce_fields["objet_consultation"] = 'static';
3754     $ce_fields["date_production_notification"] = 'datestatic';
3755     $ce_fields["date_premiere_consultation"] = 'datestatic';
3756     $ce_fields["date_consultation"] = 'datestatic';
3757     $ce_fields["date_emission"] = 'datestatic';
3758     $ce_fields["service_consultant_id"] = 'static';
3759     $ce_fields["service_consultant_libelle"] = 'static';
3760     $ce_fields["service_consultant_insee"] = 'static';
3761     $ce_fields["service_consultant_mail"] = 'static';
3762     $ce_fields["service_consultant_type"] = 'static';
3763     $ce_fields["service_consultant__siren"] = 'static';
3764     $ce_fields["etat_consultation"] = 'static';
3765     $ce_fields["type_consultation"] = 'static';
3766     $ce_fields["texte_fondement_reglementaire"] = 'static';
3767     $ce_fields["texte_objet_consultation"] = 'static';
3768     $ce_fields["dossier_consultation"] = 'hidden';
3769     }
3770 softime 6565 }
3771 softime 8477 // SUPPRIMER
3772     if($crud === 'delete') {
3773     // Cache tous les champs execepté le libellé du dossier
3774     foreach ($this->champs as $champ) {
3775     $all_fields[$champ] = 'hidden';
3776     }
3777     $all_fields['dossier_libelle'] = 'hiddenstatic';
3778     }
3779 softime 6565
3780 softime 10573 $all_fields['etat_transmission_platau'] = 'hidden';
3781 softime 10968 if ($crud !== 'create') {
3782     //
3783     $inst_datd = $this->get_inst_dossier_autorisation_type_detaille();
3784     if ($inst_datd->getVal('dossier_platau') === 't') {
3785     //
3786     $all_fields['etat_transmission_platau'] = 'selecthiddenstatic';
3787     }
3788     }
3789    
3790    
3791 softime 10573 if ($crud == 'create' || $crud == 'update') {
3792     $required_fields_platau = $this->list_platau_required_fields_dossier;
3793     if ($this->f->is_option_mode_service_consulte_enabled() === false) {
3794 softime 10808 if ($this->f->is_type_dossier_platau($this->getVal('dossier_autorisation')) === true
3795     && $this->getVal('etat_transmission_platau') !== 'jamais_transmissible') {
3796     //
3797 softime 10573 foreach ($required_fields_platau as $required_field_platau) {
3798     $champ = explode('.', $required_field_platau)[1];
3799     if (in_array($champ, $this->champs)) {
3800     $form->setType($champ ,$form->type[$champ].'_demat_color');
3801     }
3802     }
3803     }
3804     }
3805     }
3806    
3807 softime 6565 //
3808     // Typage
3809     //
3810    
3811     switch ($groupe) {
3812     case 'CTX IN':
3813     $this->manage_type($form, $inf_fields);
3814     break;
3815     case 'CTX RE':
3816     $this->manage_type($form, $re_fields);
3817     break;
3818     case 'ADS':
3819     $this->manage_type($form, $ads_fields);
3820     break;
3821 softime 7067 case 'DPC':
3822     $this->manage_type($form, $dpc_fields);
3823     break;
3824 softime 10573 case 'CONSULTATION ENTRANTE':
3825     $this->manage_type($form, $ce_fields);
3826     break;
3827 softime 6565 }
3828     $this->manage_type($form, $all_fields);
3829 mbroquet 3730 }
3830    
3831 softime 6929
3832 softime 6565 /**
3833     * Gestion du typage des champs
3834     *
3835     * @param object $form formulaire instancié
3836     * @param array $fields tableau associatif des champs avec leur widget de formulaire en valeur
3837     * @return void
3838     */
3839     protected function manage_type($form, $fields) {
3840     foreach ($this->champs as $key => $field) {
3841     if (array_key_exists($field, $fields) === true) {
3842     $form->setType($field, $fields[$field]);
3843     }
3844     }
3845     }
3846    
3847    
3848     /**
3849 softime 7067 * Retourne le nombre de parcelles qu'à en commun le dossier passé en
3850     * paramètre avec les dossiers contentieux en cours. Le nombre de parcelles
3851     * est groupé par type de dossier d'autorisation : RE ou IN.
3852 softime 6565 *
3853 softime 7067 * @param string $di identifiant du DI
3854 softime 6565 * @return array
3855     */
3856 softime 7067 function get_nb_parcelles_dossier_ciblees_par_contentieux($di) {
3857 softime 6565 $sql = "
3858     SELECT
3859     dossier_autorisation_type.code, COUNT(*) as nb
3860     FROM " . DB_PREFIXE . "dossier
3861     LEFT JOIN " . DB_PREFIXE . "dossier_parcelle
3862     ON dossier.dossier = dossier_parcelle.dossier
3863     LEFT JOIN " . DB_PREFIXE . "dossier_parcelle as parcelle_ctx
3864     ON dossier_parcelle.libelle = parcelle_ctx.libelle
3865     AND dossier_parcelle.dossier != parcelle_ctx.dossier
3866     LEFT JOIN " . DB_PREFIXE . "dossier as dossier_ctx
3867     ON dossier_ctx.dossier = parcelle_ctx.dossier
3868 softime 7067 INNER JOIN " . DB_PREFIXE . "etat
3869     ON dossier_ctx.etat = etat.etat AND etat.statut != 'cloture'
3870 softime 6565 LEFT JOIN " . DB_PREFIXE . "dossier_autorisation
3871     ON dossier_ctx.dossier_autorisation = dossier_autorisation.dossier_autorisation
3872     LEFT JOIN " . DB_PREFIXE . "dossier_autorisation_type_detaille
3873     ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
3874     = dossier_autorisation.dossier_autorisation_type_detaille
3875     LEFT JOIN " . DB_PREFIXE . "dossier_autorisation_type
3876     ON dossier_autorisation_type_detaille.dossier_autorisation_type
3877     = dossier_autorisation_type.dossier_autorisation_type
3878     WHERE
3879     dossier.dossier = '" . $di . "'
3880     AND (dossier_autorisation_type.code = 'RE'
3881     OR dossier_autorisation_type.code = 'IN')
3882     GROUP BY dossier_autorisation_type.code
3883     ";
3884 softime 7067 $this->addToLog("get_nb_parcelles_dossier_ciblees_par_contentieux : db->query(\"$sql\")", VERBOSE_MODE);
3885 softime 8989 $res = $this->f->db->query($sql);
3886 softime 7067 $this->f->isDatabaseError($res);
3887 softime 6565
3888     $nb_re_inf = array('re' => 0, 'inf' => 0);
3889    
3890     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
3891     if ($row["code"] == "RE"){
3892     $nb_re_inf['re'] += $row["nb"];
3893     }
3894     if ($row["code"] == "IN"){
3895     $nb_re_inf['inf'] += $row["nb"];
3896     }
3897     }
3898    
3899     return $nb_re_inf;
3900     }
3901    
3902 softime 8989 /**
3903     * SETTER_FORM - setVal (setVal).
3904     *
3905     * @return void
3906     */
3907     function setVal(&$form, $maj, $validation, &$dnu1 = null, $dnu2 = null) {
3908     // parent::setVal($form, $maj, $validation);
3909     //
3910 mbroquet 3730 $this->maj=$maj;
3911 softime 10573
3912     if ($this->f->is_option_sig_enabled($this->getVal("om_collectivite")) === true
3913 softime 8989 && $this->f->issetSIGParameter($this->getVal("dossier")) === true) {
3914 softime 10573
3915     // lien vers le SIG
3916     $geoLinksHtml = $this->getGeolocalisationLink();
3917     $form->setVal("geom", $geoLinksHtml);
3918 mbroquet 3730 }
3919 softime 10573 // si l'option 'streetview' est activée ajoute un lien vers Google Maps Street View
3920 softime 10713 if ($this->f->is_option_streetview_enabled($this->getVal("om_collectivite")) === true
3921 softime 10808 && $maj == 3) {
3922     //
3923 softime 10573 $gStreetViewLinkHtml = $this->getGoogleMapsStreetViewLink();
3924     $form->setVal("streetview", $gStreetViewLinkHtml);
3925     }
3926 softime 8989 //
3927 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
3928 softime 10573 if ($affichage_form === "ADS" || $affichage_form === "CONSULTATION ENTRANTE") {
3929 softime 8989 // Dans le cas d'un dépôt électronique un pictogramme apparait devant le demandeur
3930     if ($maj == 1 || $maj == 2 || $maj == 3) {
3931     if ($this->getVal("depot_electronique") === "t"
3932     || $this->getVal("depot_electronique") === true
3933     || $this->getVal("depot_electronique") === 1) {
3934 softime 8329 //
3935 softime 8989 $form->setVal(
3936     "dossier_petitionnaire",
3937     sprintf(
3938     '<span class="om-icon om-icon-16 om-icon-fix depot-electronique-16" title="%s"> </span>%s',
3939     "Dépôt électronique",
3940     $this->getVal("dossier_petitionnaire")
3941     )
3942     );
3943 softime 8329 }
3944     }
3945 softime 6565 if ($maj == 3) {
3946 softime 8989 $nb_re_inf = $this->get_nb_parcelles_dossier_ciblees_par_contentieux($this->getVal("dossier"));
3947 softime 6565 $message = "";
3948 softime 8989 if ($nb_re_inf["re"] > 0) {
3949 softime 6565 $message .= "<span class=\"label label-warning\" ";
3950 nmeucci 7085 $message .= "title=\""._("Au moins un dossier de recours contentieux ou gracieux en cours concerne les références cadastrales du dossier courant.")."\">";
3951 softime 6565 $message .= _("RE");
3952     $message .= "</span>";
3953 softime 8989 if ($nb_re_inf["inf"] > 0) {
3954 softime 6565 $message .= " ";
3955     }
3956     }
3957 softime 8989 if ($nb_re_inf["inf"] > 0) {
3958 softime 6565 $message .= "<span class=\"label label-important\" ";
3959 nmeucci 7085 $message .= "title=\""._("Au moins un dossier d'infraction en cours concerne les références cadastrales du dossier courant.")."\">";
3960 softime 6565 $message .= _("IN");
3961     $message .= "</span>";
3962     }
3963 softime 8989 $form->setVal("enjeu_ctx", $message);
3964 softime 6565 }
3965 softime 8989 } elseif ($affichage_form === "CTX RE") {
3966 softime 6565 // Récupération des demandeurs liés au dossier
3967 softime 8989 $this->listeDemandeur("dossier", $this->getVal("dossier"));
3968 softime 6565 //
3969 softime 8989 $requerants = "";
3970     if ($this->getVal("requerants") != "") {
3971     $requerants = $this->getVal("requerants");
3972     if (isset($this->valIdDemandeur["requerant"]) === true
3973     && count($this->valIdDemandeur["requerant"]) > 0) {
3974     //
3975     $requerants .= " "._("et autres");
3976 softime 6565 }
3977     }
3978 softime 8989 $form->setVal("requerants", $requerants);
3979 softime 6565 //
3980 softime 8989 $dossier_petitionnaires = "";
3981     if ($this->getVal("dossier_petitionnaire") != "") {
3982     $dossier_petitionnaires = $this->getVal("dossier_petitionnaire");
3983 softime 6565 }
3984 softime 8989 if (isset($this->valIdDemandeur["petitionnaire"]) === true
3985     && count($this->valIdDemandeur["petitionnaire"]) > 0) {
3986     //
3987     $dossier_petitionnaires .= " "._("et autres");
3988 softime 6565 }
3989 softime 8989 $form->setVal("dossier_petitionnaires", $dossier_petitionnaires);
3990     } elseif ($affichage_form === "CTX IN") {
3991 softime 6565 // Récupération des demandeurs liés au dossier
3992 softime 8989 $this->listeDemandeur("dossier", $this->getVal("dossier"));
3993 softime 6565 //
3994 softime 8989 $contrevenants = "";
3995     if ($this->getVal("contrevenants") != "") {
3996     $contrevenants = $this->getVal("contrevenants");
3997     if (isset($this->valIdDemandeur["contrevenant"]) === true
3998     && count($this->valIdDemandeur["contrevenant"]) > 0) {
3999     //
4000     $contrevenants .= " "._("et autres");
4001 softime 6565 }
4002     }
4003 softime 8989 $form->setVal("contrevenants", $contrevenants);
4004     } elseif ($affichage_form === "DPC") {
4005 softime 7067 // Récupération des demandeurs liés au dossier
4006 softime 8989 $this->listeDemandeur("dossier", $this->getVal("dossier"));
4007 softime 7067 //
4008 softime 8989 $bailleurs = "";
4009     if ($this->getVal("bailleurs") != "") {
4010     $bailleurs = $this->getVal("bailleurs");
4011     if (isset($this->valIdDemandeur["bailleur"]) === true
4012     && count($this->valIdDemandeur["bailleur"]) > 0) {
4013     //
4014     $bailleurs .= " "._("et autres");
4015 softime 7067 }
4016     }
4017 softime 8989 $form->setVal("bailleurs", $bailleurs);
4018 softime 7067 }
4019 softime 8989 //
4020 softime 6565 if ($validation == 0) {
4021 softime 8989 if ($maj == 0) {
4022     $form->setVal("annee", date("y"));
4023     $form->setVal("date_demande", date("Y-m-d"));
4024     $form->setVal("date_depot", date("Y-m-d"));
4025     $form->setVal("accord_tacite", "Non");
4026     $form->setVal("etat", "initialiser");
4027 mbroquet 3730 }
4028     }
4029 softime 11585 //
4030     if ($maj == 3) {
4031     $form->setVal("lien_iiue", $this->get_json_lien_iiue());
4032     }
4033 mbroquet 3730 }
4034    
4035     /**
4036     * getGeolocalisationLink retourne le code HTML affichant l'icone du globe, ainsi que
4037     * les coordonnées du centroide du dossier, le tout étant un lien vers le SIG.
4038     *
4039     * @return string Lien vers le SIG
4040     */
4041     function getGeolocalisationLink() {
4042     //
4043     $link = "<a id='action-form-localiser'".
4044 softime 7996 " target='_SIG' href='".OM_ROUTE_FORM."&obj=dossier_instruction&action=140&idx=".$this->getVal("dossier")."'>".
4045 mbroquet 3730 "<span class='om-icon om-icon-16 om-icon-fix sig-16' title='Localiser'>Localiser</span> ".
4046     $this->getVal('geom').
4047     " </a>";
4048 softime 12433 $nogeoloc = "<div class='no-geoloc_label'><span class='om-icon om-icon-16 om-icon-fix sig-16 no-geoloc' title='Localiser'></span><span>"._("Aucune geolocalisation")."</span>";
4049     return $this->getVal('geom') ? $link : $nogeoloc;
4050 mbroquet 3730 }
4051    
4052 softime 10573
4053 softime 8989 /**
4054 softime 10573 * converti un geom au format Lat,Lon
4055     *
4056     * @param string $geom Le Geom
4057     * @param string $fromRefId Le référentiel dans lequel le geom est défini
4058     * @param string $toLongLatId Le référentiel dans lequel le geom doit être converti
4059     *
4060     * @return array[2] Long,Lat ou bien false,"message" en cas d'erreur
4061     */
4062     protected function convertGeomToLongLat(string $geom, string $fromRefId = '2154',
4063     string $toLongLatId = '4326') {
4064     $sql = "
4065     SELECT
4066     ST_X(ST_Transform(ST_GeomFromText('$geom', $fromRefId), $toLongLatId)) AS longitude,
4067     ST_Y(ST_Transform(ST_GeomFromText('$geom', $fromRefId), $toLongLatId)) AS latitude
4068     ";
4069     $this->addToLog(__METHOD__."() sql: '$sql'", EXTRA_VERBOSE_MODE);
4070     $res = $this->f->db->query($sql);
4071     if(database::isError($res)) {
4072     $this->addToLog(__METHOD__."() error: ".var_export($res->getMessage(), true), DEBUG_MODE);
4073     return array(false, $res->getMessage());
4074     }
4075     if ($res->numRows() != 1) {
4076     $this->addToLog(__METHOD__."() error: ".var_export($res->numRows(), true), DEBUG_MODE);
4077     return array(false, __("Erreur: Plus d'un enregistrement retourné").
4078     '('.$res->numRows().')');
4079     }
4080     $coord = $res->fetchRow(DB_FETCHMODE_ASSOC);
4081     $this->addToLog(__METHOD__."() coord: ".var_export($coord, true), EXTRA_VERBOSE_MODE);
4082     return array_values($coord);
4083     }
4084    
4085     /**
4086     * getGoogleMapsStreetViewLink retourne le code HTML affichant un lien vers une vue
4087     * Google Maps Street View à partir des coordonnées du geom.
4088     *
4089     * @return string Lien vers Google Maps Street View
4090     */
4091     protected function getGoogleMapsStreetViewLink() {
4092     // Récupération coordonnées du terrain
4093    
4094     // Passage du numéro de dossier comme id pour pouvoir le récupérer dans le
4095     // jscript lors du clic
4096     $html = sprintf(
4097     "<a id='action-form-gstreetview' class='simple-btn' title='%s' onclick='get_adresse_terrain(this.id, \"%s\")'>
4098     <span class='om-icon om-icon-16 om-icon-fix consult-16'></span>%s
4099     </a>",
4100     __("Ouvrir dans Google Maps Street View"),
4101     $this->getVal($this->clePrimaire),
4102     __("Street View")
4103     );
4104     return $html;
4105     }
4106    
4107     /**
4108 softime 8989 * SETTER_FORM - setSelect.
4109     *
4110     * @return void
4111     */
4112     function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
4113 softime 10573 $crud = $this->get_action_crud($this->getParameter("maj"));
4114    
4115 mbroquet 3730 // XXX Commenté pour patcher le problème de montée en charge de la base
4116     // de données en cas de reprise de données d'un gros volume de dossier
4117     // d'instruction
4118 softime 8989 // parent::setSelect($form, $maj);
4119 mbroquet 3730 // om_collectivite
4120 softime 8989 $this->init_select(
4121     $form,
4122     $this->f->db,
4123     $maj,
4124     null,
4125     "om_collectivite",
4126     $this->get_var_sql_forminc__sql("om_collectivite"),
4127     $this->get_var_sql_forminc__sql("om_collectivite_by_id"),
4128     false
4129     );
4130 mbroquet 3730
4131     /*
4132     * Pour chaque init_select d'un select non modifiable on teste
4133     * si l'on est en mode modifier : si c'est le cas alors on initialise le
4134     * select en mode consulter (qui n'affiche rien s'il n'y a aucune valeur).
4135     */
4136    
4137     $collectivite_idx = $this->getVal("om_collectivite");
4138 softime 6565 $affichage_form_dat = "";
4139 mbroquet 3730 // Si recherche avancée om_collectivite = collectivité utilisateur
4140 softime 8989 if ($maj == 999) {
4141 mbroquet 3730 $collectivite_idx = $this->f->getParameter("om_collectivite_idx");
4142 softime 6565 } else {
4143     $affichage_form_dat = $this->get_type_affichage_formulaire();
4144 mbroquet 3730 }
4145 softime 6565 // Définition de la qualité et de la traduction de l'instructeur
4146     switch ($affichage_form_dat) {
4147 softime 7067 case 'DPC':
4148 softime 6565 case 'ADS':
4149 softime 10573 case 'CONSULTATION ENTRANTE':
4150 softime 6565 $affichage_instr = "AND instructeur_qualite.code = 'instr'";
4151     $lib_instructeur = _("l'instructeur");
4152     break;
4153     case 'CTX RE':
4154     case 'CTX IN':
4155     $affichage_instr = "AND instructeur_qualite.code = 'juri'";
4156     $lib_instructeur = _('le juriste');
4157     break;
4158     default:
4159     $affichage_instr = "";
4160     $lib_instructeur = _("l'instructeur");
4161     break;
4162     }
4163 mbroquet 3730
4164     // instructeur
4165     // on recupère les services des multicollectivités et de celle du DI
4166 softime 8989 if ($this->f->getParameter('option_afficher_division')==='true') {
4167 mbroquet 3730 // instructeur
4168 softime 8989 $sql_instructeur_div_by_di = str_replace(
4169     '<collectivite_di>',
4170     $collectivite_idx,
4171     $this->get_var_sql_forminc__sql("instructeur_div_by_di")
4172     );
4173     $sql_instructeur_div_by_di = str_replace(
4174     '<instructeur_qualite>',
4175     $affichage_instr,
4176     $sql_instructeur_div_by_di
4177     );
4178     $this->init_select(
4179     $form,
4180     $this->f->db,
4181     $maj,
4182     null,
4183     "instructeur",
4184     $sql_instructeur_div_by_di,
4185     $this->get_var_sql_forminc__sql("instructeur_div_by_id"),
4186     true,
4187     false,
4188     $lib_instructeur
4189     );
4190     // instructeur_2
4191     $sql_instructeur_2_div_by_di = str_replace(
4192     '<collectivite_di>',
4193     $collectivite_idx,
4194     $this->get_var_sql_forminc__sql("instructeur_2_div_by_di")
4195     );
4196     $this->init_select(
4197     $form,
4198     $this->f->db,
4199     $maj,
4200     null,
4201     "instructeur_2",
4202     $sql_instructeur_2_div_by_di,
4203     $this->get_var_sql_forminc__sql("instructeur_2_div_by_id"),
4204     true,
4205     false,
4206     _('le technicien')
4207     );
4208 mbroquet 3730 } else {
4209 softime 8989 $sql_instructeur_by_di = str_replace(
4210     '<collectivite_di>',
4211     $collectivite_idx,
4212     $this->get_var_sql_forminc__sql("instructeur_by_di")
4213     );
4214     $sql_instructeur_by_di = str_replace(
4215     '<instructeur_qualite>',
4216     $affichage_instr,
4217     $sql_instructeur_by_di
4218     );
4219     $this->init_select(
4220     $form,
4221     $this->f->db,
4222     $maj,
4223     null,
4224     "instructeur",
4225     $sql_instructeur_by_di,
4226     $this->get_var_sql_forminc__sql("instructeur_by_id"),
4227     true,
4228     false,
4229     $lib_instructeur
4230     );
4231     $sql_instructeur_2_by_di = str_replace(
4232     '<collectivite_di>',
4233     $collectivite_idx,
4234     $this->get_var_sql_forminc__sql("instructeur_2_by_di")
4235     );
4236     $this->init_select(
4237     $form,
4238     $this->f->db,
4239     $maj,
4240     null,
4241     "instructeur_2",
4242     $sql_instructeur_2_by_di,
4243     $this->get_var_sql_forminc__sql("instructeur_2_by_id"),
4244     true,
4245     false,
4246     _('le technicien')
4247     );
4248 mbroquet 3730 }
4249 softime 6565
4250 mbroquet 3730 // etat
4251     if ($maj == 1) {
4252 softime 8989 $this->init_select(
4253     $form,
4254     $this->f->db,
4255     3,
4256     null,
4257     "etat",
4258     $this->get_var_sql_forminc__sql("etat"),
4259     $this->get_var_sql_forminc__sql("etat_by_id"),
4260     false
4261     );
4262 mbroquet 3730 } else {
4263 softime 8989 $this->init_select(
4264     $form,
4265     $this->f->db,
4266     $maj,
4267     null,
4268     "etat",
4269     $this->get_var_sql_forminc__sql("etat"),
4270     $this->get_var_sql_forminc__sql("etat_by_id"),
4271     false
4272     );
4273 mbroquet 3730 }
4274    
4275     // dossier_instruction_type
4276 softime 8989 $this->init_select(
4277     $form,
4278     $this->f->db,
4279     $maj,
4280     null,
4281     "dossier_instruction_type",
4282     $this->get_var_sql_forminc__sql("dossier_instruction_type"),
4283     $this->get_var_sql_forminc__sql("dossier_instruction_type_by_id"),
4284     false
4285     );
4286 mbroquet 3730
4287     // division
4288 softime 8989 $sql_division_by_di = str_replace(
4289     '<collectivite_di>',
4290     $collectivite_idx,
4291     $this->get_var_sql_forminc__sql("division_by_di")
4292     );
4293     $this->init_select(
4294     $form,
4295     $this->f->db,
4296     $maj,
4297     null,
4298     "division",
4299     $sql_division_by_di,
4300     $this->get_var_sql_forminc__sql("division_by_id"),
4301     true
4302     );
4303 mbroquet 3730
4304     // autorite_competente
4305 softime 8989 $this->init_select(
4306     $form,
4307     $this->f->db,
4308     $maj,
4309     null,
4310     "autorite_competente",
4311     $this->get_var_sql_forminc__sql("autorite_competente"),
4312     $this->get_var_sql_forminc__sql("autorite_competente_by_id"),
4313     false
4314     );
4315 mbroquet 3730
4316     // avis_decision
4317     if ($maj == 1) {
4318 softime 8989 $this->init_select(
4319     $form,
4320     $this->f->db,
4321     3,
4322     null,
4323     "avis_decision",
4324     $this->get_var_sql_forminc__sql("avis_decision"),
4325     $this->get_var_sql_forminc__sql("avis_decision_by_id"),
4326     false
4327     );
4328 mbroquet 3730 } else {
4329 softime 8989 $this->init_select(
4330     $form,
4331     $this->f->db,
4332     $maj,
4333     null,
4334     "avis_decision",
4335     $this->get_var_sql_forminc__sql("avis_decision"),
4336     $this->get_var_sql_forminc__sql("avis_decision_by_id"),
4337     false
4338     );
4339 mbroquet 3730 }
4340 softime 7366
4341 softime 6565 // autorisation_contestee
4342 softime 7366 if ($affichage_form_dat === 'CTX RE'
4343     && ($maj == 1 || $maj == 3)) {
4344     // À exécuter seulement en mode modifier ou consulter des recours
4345     // pour éviter le ralentissement de l'affichage des listings des DI
4346 softime 8989 $this->init_select(
4347     $form,
4348     $this->f->db,
4349     $maj,
4350     null,
4351     "autorisation_contestee",
4352     $this->get_var_sql_forminc__sql("autorisation_contestee"),
4353     $this->get_var_sql_forminc__sql("autorisation_contestee_by_id"),
4354     false
4355     );
4356 softime 6565 }
4357 mbroquet 3730
4358     // evenement_suivant_tacite
4359 softime 8989 $this->init_select(
4360     $form,
4361     $this->f->db,
4362     $maj,
4363     null,
4364     "evenement_suivant_tacite",
4365     $this->get_var_sql_forminc__sql("evenement_suivant_tacite"),
4366     $this->get_var_sql_forminc__sql("evenement_suivant_tacite_by_id"),
4367     false
4368     );
4369 mbroquet 3730
4370     // evenement_suivant_tacite_incompletude
4371 softime 8989 $this->init_select(
4372     $form,
4373     $this->f->db,
4374     $maj,
4375     null,
4376     "evenement_suivant_tacite_incompletude",
4377     $this->get_var_sql_forminc__sql("evenement_suivant_tacite_incompletude"),
4378     $this->get_var_sql_forminc__sql("evenement_suivant_tacite_incompletude_by_id"),
4379     false
4380     );
4381 mbroquet 3730
4382     // Ajout, modification et recherche avancée
4383 softime 8989 if ($maj == 0 || $maj == 1 || $maj == 999) {
4384 mbroquet 3730 // accord tacite
4385     $contenu=array();
4386     $contenu[0]=array('Non','Oui');
4387     $contenu[1]=array('Non','Oui');
4388 softime 8989 $form->setSelect("accord_tacite", $contenu);
4389 mbroquet 3730 // geom *** a voir
4390 softime 8989 if ($maj == 1) { //modification
4391 mbroquet 3730 $contenu=array();
4392 softime 8989 $contenu[0]=array("dossier", $this->getParameter("idx"));
4393     $form->setSelect('geom', $contenu);
4394 mbroquet 3730 }
4395 softime 6565 // arrondissement recherche avancée
4396 softime 8989 $this->init_select(
4397     $form,
4398     $this->f->db,
4399     $maj,
4400     null,
4401     "arrondissement",
4402     $this->get_var_sql_forminc__sql("arrondissement"),
4403     $this->get_var_sql_forminc__sql("arrondissement_by_id"),
4404     false
4405     );
4406 softime 6565 // dossier_autorisation_type_detaille recherche avancée
4407 softime 8989 $this->init_select(
4408     $form,
4409     $this->f->db,
4410     $maj,
4411     null,
4412     "dossier_autorisation_type_detaille",
4413     $this->get_var_sql_forminc__sql("dossier_autorisation_type_detaille"),
4414     $this->get_var_sql_forminc__sql("dossier_autorisation_type_detaille_by_id"),
4415     false
4416     );
4417 mbroquet 3730 }
4418    
4419     // Ce formulaire n'est pas accessible en ajout ni en recherche avancée
4420     // mais dans le cas où il le serait, rien ne doit être fait concernant
4421 softime 6929 // les taxes
4422 mbroquet 3730 if ($maj != 0 && $maj != 999) {
4423 softime 10573 // Choix du secteur pour part communale
4424     $contenu = array();
4425     $contenu[0][0] = "";
4426     $contenu[1][0] = __('choisir')."&nbsp;".__("le")."&nbsp;".__("tax_secteur");
4427     if ($crud === 'read') {
4428     $contenu[1][0] = "";
4429     }
4430 softime 6929 // Instance du parmétrage des taxes
4431 mbroquet 3730 $inst_taxe_amenagement = $this->get_inst_taxe_amenagement();
4432     // Si la colletivité à un paramétrage pour la taxe d'aménagement
4433 softime 6929 if ($inst_taxe_amenagement !== null) {
4434 mbroquet 3730 // Il y a 20 secteurs maximum dans une commune de France
4435     for ($i=1; $i < 21; $i++) {
4436     // Valeur du secteur
4437     $value = $inst_taxe_amenagement->getVal('tx_comm_secteur_'.$i);
4438     //
4439 softime 6929 if ($value !== null && $value !== '') {
4440 mbroquet 3730 //
4441     $contenu[0][$i] = $i;
4442 softime 10573 $contenu[1][$i] = sprintf(__('Secteur %s'), $i);
4443 mbroquet 3730 }
4444     }
4445     }
4446 softime 10573 //
4447     $form->setSelect("tax_secteur", $contenu);
4448 mbroquet 3730 }
4449 softime 10573 // commune
4450     $this->init_select(
4451     $form,
4452     $this->f->db,
4453     $maj,
4454     null,
4455     "commune",
4456     $this->get_var_sql_forminc__sql("commune"),
4457     $this->get_var_sql_forminc__sql("commune_by_id"),
4458     false
4459     );
4460     // pec_metier
4461     $this->init_select(
4462     $form,
4463     $this->f->db,
4464     $maj,
4465     null,
4466     "pec_metier",
4467     $this->get_var_sql_forminc__sql("pec_metier"),
4468     $this->get_var_sql_forminc__sql("pec_metier_by_id"),
4469     false
4470     );
4471 softime 10968 // etat_transmission_platau
4472     $contenu = array();
4473     $contenu[0] = array(
4474     'jamais_transmissible',
4475     'non_transmissible',
4476     'transmis_mais_non_transmissible',
4477     'transmissible',
4478     );
4479     $contenu[1] = array(
4480     __('Ne sera jamais transmis'),
4481     __('Non transmissible'),
4482     __('Déjà transmis mais non transmissible'),
4483     __('Transmissible'),
4484     );
4485     $form->setSelect("etat_transmission_platau", $contenu);
4486 mbroquet 3730 }
4487    
4488 softime 8989 /**
4489     * SETTER_FORM - setLib.
4490     *
4491     * @return void
4492     */
4493     function setLib(&$form, $maj) {
4494     parent::setLib($form, $maj);
4495     //
4496 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
4497     if ($affichage_form === 'ADS') {
4498     $form->setLib('date_decision', _("date de la decision"));
4499     $form->setLib('date_limite', _("limite d'instruction"));
4500     }
4501     if ($affichage_form === 'CTX IN') {
4502     $form->setLib('avis_decision', _("Décision"));
4503     $form->setLib('date_cloture_instruction', _("Date de clôture d'instruction"));
4504     $form->setLib('date_decision', _("Date de décision"));
4505     $form->setLib('date_depot', _("Date de réception"));
4506     $form->setLib('date_limite', _("Tacicité"));
4507     $form->setLib('instructeur',_('Juriste'));
4508     }
4509     if ($affichage_form === 'CTX RE') {
4510     $form->setLib('autorisation_contestee', _("Autorisation contestée"));
4511     $form->setLib('avis_decision', _("Décision"));
4512     $form->setLib('date_cloture_instruction', _("Date de clôture d'instruction"));
4513     $form->setLib('date_decision', _("Date de décision"));
4514     $form->setLib('date_depot', _("Date de recours"));
4515     $form->setLib('date_limite', _("Tacicité"));
4516     $form->setLib('instructeur',_('Juriste'));
4517     }
4518 softime 7067 if ($affichage_form === 'DPC') {
4519     //
4520     }
4521 softime 10573 if ($affichage_form === 'CONSULTATION ENTRANTE') {
4522     $form->setLib('date_decision', _("date de la decision"));
4523     $form->setLib('date_limite', _("limite d'instruction"));
4524     //
4525     $form->setLib('delai_reponse', __('Délai de réponse'));
4526     $form->setLib('date_consultation', __('Date de la consultation'));
4527     $form->setLib('date_emission', __("Date d'émission"));
4528     $form->setLib('etat_consultation', __('État de la consultation'));
4529     $form->setLib('type_consultation', __('Type de la consultation'));
4530     $form->setLib('texte_fondement_reglementaire', __('Article(s) réglementaire sur le(s)quel(s) se fonde la consultation'));
4531     $form->setLib('texte_objet_consultation', __("Texte de l'objet de la consultation"));
4532     $form->setLib('service_consultant_id', __('Service consultant : identifiant'));
4533     $form->setLib('service_consultant_libelle', __('Service consultant : libellé'));
4534     $form->setLib('service_consultant_insee', __('Service consultant : INSEE'));
4535     $form->setLib('service_consultant_mail', __('Service consultant : mail'));
4536     $form->setLib('service_consultant_type', __('Service consultant : type'));
4537     $form->setLib('service_consultant__siren', __('Service consultant : SIREN'));
4538    
4539     $form->setLib('type_delai', __('Type de délai'));
4540     $form->setLib('objet_consultation', __('Objet de la consultation'));
4541     $form->setLib('date_production_notification', __('Date de production de la notification'));
4542     $form->setLib('date_premiere_consultation', __('Date de la première consultation'));
4543     }
4544 softime 6565 $form->setLib('accord_tacite',_("decision tacite"));
4545     $form->setLib('autorite_competente',_('competence'));
4546     $form->setLib('cle_acces_citoyen', _("cle_acces_citoyen"));
4547     $form->setLib('date_ait', _("Date d'AIT"));
4548     $form->setLib('date_audience', _("Date d'audience"));
4549     $form->setLib('date_complet', _("completude"));
4550     $form->setLib('date_contradictoire', _("Date de contradictoire"));
4551     $form->setLib('date_dernier_depot', _("dernier depot"));
4552     $form->setLib('date_derniere_visite', _("Date de dernière visite"));
4553     $form->setLib('date_limite_incompletude', _("limite d'instruction"));
4554     $form->setLib('date_premiere_visite', _("Date de 1ère visite"));
4555     $form->setLib('date_transmission_parquet', _('Date de transmission au Parquet'));
4556     $form->setLib('date_validite', _("fin de validite le"));
4557     $form->setLib('delai', _("delai (mois)"));
4558     $form->setLib('delai',_("delai d'instruction"));
4559     $form->setLib('description_projet',_('description du projet'));
4560     $form->setLib('dossier_arrondissement', _("Arrondissement"));
4561 mbroquet 3730 $form->setLib('dossier_autorisation_libelle',_('dossier_autorisation_libelle'));
4562 softime 6565 $form->setLib('dossier_autorisation_type_detaille', _("Type"));
4563     $form->setLib('contrevenants', _("Contrevenant(s)"));
4564 mbroquet 3730 $form->setLib('dossier_instruction_type',_('type de dossier'));
4565 softime 6565 $form->setLib('dossier_petitionnaire',_('demandeur'));
4566     $form->setLib('dossier_petitionnaires', _("Pétitionnaire(s)"));
4567     $form->setLib('requerants', _("Requérant(s)"));
4568     $form->setLib('dt_ctx_infraction', _("Infraction"));
4569     $form->setLib('dt_ctx_regularisable', _("Régularisable"));
4570     $form->setLib('dt_ctx_synthese_anr', _("Synthèse des ANR"));
4571     $form->setLib('dt_ctx_synthese_nti', _("Synthèse des NTI"));
4572 softime 8477 $form->setLib('ctx_reference_dsj', _("ctx_reference_dsj"));
4573     $form->setLib('ctx_reference_sagace', _("ctx_reference_sagace"));
4574 softime 6565 $form->setLib('enjeu_ctx', _("contentieux"));
4575     $form->setLib('enjeu_erp', _("ERP"));
4576     $form->setLib('enjeu_urba', _("urbanisme"));
4577     $form->setLib('erp', _("ERP"));
4578 mbroquet 3730 $form->setLib('geom',_('geolocalisaion'));
4579 softime 6565 $form->setLib('instructeur_2', _('Technicien'));
4580 mbroquet 3730 $form->setLib('numero_versement_archive', _("numero"));
4581 softime 7067 $form->setLib('bailleur', _("Bailleur(s)"));
4582     $form->setLib('terrain', _("Localisation"));
4583 softime 10968 $form->setLib('etat_transmission_platau', __("Statut Plat'AU"));
4584 softime 11585 $form->setLib('lien_iiue', '');
4585 softime 6565 }
4586 mbroquet 3730
4587     function setOnchange(&$form,$maj){
4588     parent::setOnchange($form,$maj);
4589     // mise en majuscule
4590     $form->setOnchange("demandeur_nom","this.value=this.value.toUpperCase()");
4591     $form->setOnchange("demandeur_societe","this.value=this.value.toUpperCase()");
4592     $form->setOnchange("delegataire_nom","this.value=this.value.toUpperCase()");
4593     $form->setOnchange("delegataire_societe","this.value=this.value.toUpperCase()");
4594     $form->setOnchange("architecte_nom","this.value=this.value.toUpperCase()");
4595     $form->setOnchange("terrain_adresse","this.value=this.value.toUpperCase()");
4596     $form->setOnchange('terrain_surface','VerifNumdec(this)');
4597     $form->setOnchange('tax_mtn_part_commu', 'VerifFloat(this, 0)');
4598     $form->setOnchange('tax_mtn_part_depart', 'VerifFloat(this, 0)');
4599     $form->setOnchange('tax_mtn_part_reg', 'VerifFloat(this, 0)');
4600     $form->setOnchange('tax_mtn_total', 'VerifFloat(this, 0)');
4601 softime 6929 $form->setOnchange('tax_mtn_rap', 'VerifFloat(this, 0)');
4602     $form->setOnchange('tax_mtn_part_commu_sans_exo', 'VerifFloat(this, 0)');
4603     $form->setOnchange('tax_mtn_part_depart_sans_exo', 'VerifFloat(this, 0)');
4604     $form->setOnchange('tax_mtn_part_reg_sans_exo', 'VerifFloat(this, 0)');
4605     $form->setOnchange('tax_mtn_total_sans_exo', 'VerifFloat(this, 0)');
4606     $form->setOnchange('tax_mtn_rap_sans_exo', 'VerifFloat(this, 0)');
4607 mbroquet 3730 }
4608    
4609     function setLayout(&$form, $maj) {
4610    
4611 softime 8477 // Récupère le CRUD
4612     $crud = $this->get_action_crud($this->getParameter("maj"));
4613    
4614     // Il n'y a pas d'affichage spécifique dans le cas d'une suppression
4615     if ($crud === 'delete') {
4616     return;
4617     }
4618    
4619 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
4620 softime 10573 if ($affichage_form === 'ADS' || $affichage_form === 'DPC' || $affichage_form === 'CONSULTATION ENTRANTE') {
4621     // Le contrôle de données est seulement possible si on est pas en mode service consulté.
4622     // et si le champ dossier_platau du dossier d'autorisation type detaillé est à true
4623     if ($this->f->is_option_mode_service_consulte_enabled() === false
4624 softime 10808 && $this->f->is_type_dossier_platau($this->getVal('dossier_autorisation')) === true
4625     && $this->getVal('etat_transmission_platau') !== 'jamais_transmissible') {
4626     //
4627 softime 10573 $required_fields_platau = $this->check_platau_required_fields($this->getVal('dossier'));
4628    
4629     if (isset($required_fields_platau['is_ok']) && $required_fields_platau['is_ok'] === false) {
4630     $class = 'demat-color demat-color-text';
4631     $message = __("La transmission à Plat'AU n'est pas possible car certains champs requis ne sont pas saisis.");
4632     if ($this->getVal('etat_transmission_platau') == "transmis_mais_non_transmissible") {
4633     $message = __("La transmission des modifications à Plat'AU n'est pas possible car certains champs requis ne sont pas saisis.");
4634     }
4635     $this->f->display_panel_information($class, $message, $required_fields_platau['required_fields_empty'], __('Champs requis'), 'demat-color');
4636     }
4637     }
4638 softime 6565 // En-tête
4639     $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
4640 mbroquet 3730
4641 softime 6565 // Col1 : Fieldset "Dossier d'Instruction"
4642     $form->setBloc('om_collectivite', 'D', '', 'col_9');
4643 mbroquet 3730
4644 softime 6565 $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
4645 softime 10573 $form->setFieldset('tax_secteur', 'F');
4646 softime 6565
4647 mbroquet 3730
4648 softime 10573 $form->setBloc('tax_secteur', 'F');
4649 softime 6565
4650     // Col2 : 3 fieldsets
4651     $form->setBloc('enjeu_urba', 'D', '', 'col_3');
4652 mbroquet 3730
4653 softime 6565 // Fieldset "Enjeu"
4654     $form->setFieldset('enjeu_urba', 'D', _("Enjeu"));
4655     $form->setFieldset('enjeu_ctx', 'F');
4656     // Fieldset "Qualification"
4657     $form->setFieldset('erp', 'D', _("Qualification"));
4658 softime 10968 $form->setFieldset('etat_transmission_platau', 'F');
4659 softime 6565 // Fieldset "Archive"
4660     $form->setFieldset('numero_versement_archive', 'D', _("Archive"));
4661     $form->setFieldset('date_demande', 'F');
4662    
4663     $form->setBloc('date_demande', 'F');
4664 mbroquet 3730 $form->setBloc('date_demande', 'F');
4665    
4666 softime 6565 // Fieldset "Instruction"
4667     $form->setBloc('date_depot', 'D', '', 'col_12');
4668     $form->setFieldset('date_depot', 'D', _('Instruction'), 'col_12');
4669 mbroquet 3730
4670 softime 6565 // Fieldset "Suivi"
4671     $form->setBloc('date_depot', 'D', '', 'col_12');
4672    
4673     $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
4674     // Col 1
4675     $form->setBloc('date_depot', 'D', '', 'col_6');
4676     $form->setBloc('date_depot', 'D');
4677     $form->setBloc('date_dernier_depot', 'F');
4678     $form->setBloc('date_limite', 'D', '', 'interligne');
4679     $form->setBloc('date_limite_incompletude', 'F');
4680 mbroquet 3730 $form->setBloc('date_limite_incompletude', 'F');
4681 softime 6565 // Col 2
4682     $form->setBloc('etat', 'D', '', 'col_6');
4683     $form->setBloc('etat', 'D');
4684     $form->setBloc('etat', 'F');
4685     $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
4686     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
4687 mbroquet 3730 $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
4688 softime 6565 $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
4689    
4690     $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
4691 mbroquet 3730
4692 softime 6565 // Bloc 2 fieldsets
4693     $form->setBloc('date_decision', 'D', '', 'col_12');
4694 mbroquet 3730
4695 softime 6565 // Col 1 Fieldset "Décision"
4696     $form->setFieldset('date_decision', 'D', _('Decision'), 'col_6');
4697     $form->setFieldset('avis_decision','F','');
4698     // Col 2 Fieldset "Validité de l'autorisation"
4699     $form->setFieldset('date_validite', 'D', _("Validite de l'autorisation"), 'col_6');
4700     $form->setFieldset('date_validite','F','');
4701 mbroquet 3730
4702 softime 6565 $form->setBloc('date_validite', 'F'); // Fin bloc 2 fieldsets
4703 mbroquet 3730
4704 softime 6565 $form->setFieldset('date_conformite','F','');
4705     $form->setBloc('date_conformite', 'F'); // Fin Instruction
4706 mbroquet 3730
4707 softime 6929 // Fieldset "Simulation des taxes"
4708 softime 10573 $form->setBloc('tax_mtn_part_commu', 'D', '', 'col_12');
4709     $form->setFieldset('tax_mtn_part_commu', 'D', _("Simulation des taxes"), 'startClosed');
4710 softime 6929 //
4711 softime 10573 $form->setBloc('tax_mtn_part_commu', 'D', '', 'col_12');
4712     $form->setFieldset('tax_mtn_part_commu', 'D', _("Taxe d'aménagement"), 'collapsible');
4713 softime 6929 $form->setFieldset('tax_mtn_total_sans_exo', 'F', '');
4714     $form->setBloc('tax_mtn_total_sans_exo', 'F');
4715     //
4716     $form->setBloc('tax_mtn_rap', 'D', '', 'col_12');
4717     $form->setFieldset('tax_mtn_rap', 'D', _("Redevance d'archéologie préventive"), 'collapsible');
4718     $form->setFieldset('tax_mtn_rap_sans_exo', 'F', '');
4719     $form->setBloc('tax_mtn_rap_sans_exo', 'F');
4720     //
4721     $form->setFieldset('tax_mtn_rap_sans_exo', 'F', '');
4722     $form->setBloc('tax_mtn_rap_sans_exo', 'F');
4723 mbroquet 3730
4724 softime 7067 // Fieldset "Localisation"
4725 softime 6565 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
4726 mbroquet 3730
4727 softime 7067 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
4728 softime 6565 // Col 1
4729     $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
4730     $form->setBloc('terrain_references_cadastrales', 'F');
4731     // Col 2
4732     $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
4733     $form->setBloc('terrain_superficie', 'F');
4734 mbroquet 3730
4735 softime 6565 $form->setFieldset('terrain_superficie', 'F', '');
4736 mbroquet 3730
4737 softime 6565 $form->setBloc('terrain_superficie', 'F');
4738 softime 11585
4739     // Fieldset "Plat'AU : identifiants techniques"
4740     $form->setBloc('lien_iiue', 'D', '', 'col_12');
4741     $form->setFieldset('lien_iiue', 'D', __("Plat'AU - Identifiants techniques"), 'demat-color-fieldset startClosed');
4742     $form->setFieldset('lien_iiue', 'F', '');
4743     $form->setBloc('lien_iiue', 'F');
4744 softime 6565 }
4745 softime 10573 // CONSULTATION ENTRANTE
4746     // Vérifie que le dossier a été déposé électroniquement
4747 softime 10808 if ($affichage_form === 'CONSULTATION ENTRANTE'
4748     && ($this->get_source_depot_from_demande() === 'platau'
4749     || $this->get_source_depot_from_demande() === 'portal')) {
4750 softime 10573 // Fieldset "Consultation"
4751     $form->setBloc('consultation_entrante', 'D', '', 'col_12');
4752     $form->setFieldset('consultation_entrante', 'D', __('Consultation'), '');
4753     $form->setBloc('consultation_entrante', 'D', "", "col_6");
4754     $form->setBloc('type_consultation', 'F');
4755     $form->setBloc('texte_fondement_reglementaire', 'D', "", "col_6");
4756     $form->setBloc('dossier_consultation', 'F');
4757     $form->setFieldset('dossier_consultation', 'F', '');
4758     $form->setBloc('dossier_consultation', 'F');
4759     }
4760 softime 6565 // RECOURS
4761     if ($affichage_form === 'CTX RE') {
4762     // Fieldset "Dossier d'Instruction"
4763     $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
4764     $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
4765     $form->setFieldset('date_demande', 'F');
4766     $form->setBloc('date_demande', 'F');
4767 mbroquet 3730
4768 softime 6565 // Fieldset "Instruction"
4769     $form->setBloc('date_depot', 'D', '', 'col_12');
4770     $form->setFieldset('date_depot', 'D', _('Instruction'), 'col_12');
4771 mbroquet 3730
4772 softime 6565 // Fieldset "Suivi"
4773     $form->setBloc('date_depot', 'D', '', 'col_12');
4774    
4775     $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
4776 mbroquet 3730 // Col 1
4777 softime 6565 $form->setBloc('date_depot', 'D', '', 'col_6');
4778     // $form->setBloc('date_depot', 'D');
4779     // $form->setBloc('date_dernier_depot', 'F');
4780     // $form->setBloc('date_limite', 'D', '');
4781     // $form->setBloc('date_limite_incompletude', 'F');
4782     $form->setBloc('date_cloture_instruction', 'F');
4783 mbroquet 3730 // Col 2
4784 softime 6565 $form->setBloc('etat', 'D', '', 'col_6');
4785     $form->setBloc('etat', 'D');
4786     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
4787     // $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
4788     // $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
4789     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
4790     $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
4791    
4792     $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
4793 mbroquet 3730
4794 softime 6565 // Bloc 2 fieldsets
4795     $form->setBloc('date_decision', 'D', '', 'col_12');
4796 mbroquet 3730
4797 softime 6565 // Col 1 Fieldset "Décision"
4798     $form->setFieldset('date_decision', 'D', _('Decision'), 'col_12');
4799     $form->setFieldset('avis_decision','F','');
4800     // Col 2 Fieldset "Validité de l'autorisation"
4801    
4802     $form->setBloc('date_validite', 'F'); // Fin bloc 2 fieldsets
4803    
4804     $form->setFieldset('date_conformite','F','');
4805     $form->setBloc('date_conformite', 'F'); // Fin Instruction
4806    
4807 softime 7067 // Fieldset "Localisation"
4808 softime 6565 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
4809    
4810 softime 7067 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
4811 softime 6565 // Col 1
4812     $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
4813     $form->setBloc('terrain_references_cadastrales', 'F');
4814     // Col 2
4815     $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
4816     $form->setBloc('terrain_superficie', 'F');
4817    
4818     $form->setFieldset('terrain_superficie', 'F', '');
4819    
4820     $form->setBloc('terrain_superficie', 'F');
4821     }
4822    
4823     // INFRACTION
4824     if ($affichage_form === 'CTX IN') {
4825    
4826     // Fieldset "Dossier d'Instruction"
4827     $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
4828     $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
4829     $form->setFieldset('date_demande', 'F');
4830     $form->setBloc('date_demande', 'F');
4831    
4832     // Fieldset "Instruction"
4833     $form->setBloc('date_depot', 'D', '', 'col_12');
4834     $form->setFieldset('date_depot', 'D', _('Instruction'), 'col_12');
4835     // Fieldset "Suivi"
4836     $form->setBloc('date_depot', 'D', '', 'col_12');
4837     $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
4838     // Col 1
4839     $form->setBloc('date_depot', 'D', '', 'col_6');
4840     $form->setBloc('date_depot', 'D');
4841     $form->setBloc('date_dernier_depot', 'F');
4842     $form->setBloc('date_limite', 'D', '', 'interligne');
4843     $form->setBloc('date_limite_incompletude', 'F');
4844     $form->setBloc('date_limite_incompletude', 'F');
4845     // Col 2
4846     $form->setBloc('etat', 'D', '', 'col_6');
4847     $form->setBloc('etat', 'D');
4848     $form->setBloc('etat', 'F');
4849     $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
4850     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
4851     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
4852     $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
4853     $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
4854     // Fieldset "Décision"
4855     $form->setFieldset('date_decision', 'D', _('Decision'), 'col_12');
4856     $form->setFieldset('date_conformite','F',''); // Fin Décision
4857     $form->setFieldset('date_conformite','F','');
4858     $form->setBloc('date_conformite', 'F'); // Fin Instruction
4859    
4860 softime 7067 // Fieldset "Localisation"
4861 softime 6565 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
4862 softime 7067 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
4863 softime 6565 // Col 1
4864     $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
4865     $form->setBloc('terrain_references_cadastrales', 'F');
4866     // Col 2
4867     $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
4868     $form->setBloc('terrain_superficie', 'F');
4869     $form->setFieldset('terrain_superficie', 'F', '');
4870     $form->setBloc('terrain_superficie', 'F');
4871    
4872     // Fieldset "Demandeurs"
4873     // → cf. formSpecificContent()
4874     }
4875 mbroquet 3730 }
4876    
4877     /**
4878     * Permet de retourner si le dossier est incomplet notifié
4879     *
4880     * @return boolean true si incomplet notifié
4881     */
4882     function is_incomplet_notifie() {
4883     // Si le dossier est défini en tant qu'incomplet notifie
4884     if($this->getVal('incomplet_notifie') == 't' AND
4885     $this->getVal('incompletude') == 't') {
4886     return true;
4887     }
4888     return false;
4889     }
4890    
4891 softime 6929
4892 fmichon 4708 /**
4893 softime 7366 * Vérifie que le dossier d'instruction en cours ne soit pas instruit.
4894     * Ne sont pas compté comme instruit les dossiers n'ayant que des événements
4895     * d'instruction de type 'affichage'.
4896 softime 6929 *
4897     * @return boolean
4898     */
4899 softime 7366 function has_only_recepisse() {
4900 softime 6929
4901 softime 7366 // Récupère la liste des instructions du dossier
4902 softime 6929 $list_instructions = $this->get_list_instructions(true);
4903    
4904 softime 7366 // Si le dossier a pour seule instruction le récépissé de la demande
4905     if (count($list_instructions) === 1
4906     && $list_instructions[0] === $this->get_demande_instruction_recepisse()) {
4907 softime 6929 //
4908 softime 7366 return true;
4909 softime 6929 }
4910    
4911     //
4912 softime 7366 return false;
4913 softime 6929 }
4914    
4915    
4916     /**
4917 fmichon 4708 * TRIGGER - triggerajouterapres.
4918     *
4919     * - Interface avec le référentiel ERP [108]
4920     * - Gestion des données techniques liées
4921     * - Mise à jour du DA
4922     * - Gestion des références cadastrales / parcelles liées
4923     *
4924     * @return boolean
4925     */
4926 softime 8989 function triggerajouterapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
4927     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
4928 mbroquet 3730
4929 fmichon 4708 /**
4930     * Interface avec le référentiel ERP.
4931     *
4932     * (WS->ERP)[108] Dépôt de dossier DAT -> AT
4933     * Déclencheur :
4934     * - L'option ERP est activée
4935     * - Validation du formulaire d'ajout d'une demande de nouveau dossier
4936     * de type AT
4937     */
4938     //
4939 softime 8989 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
4940 fmichon 4708 && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__at')) {
4941     //
4942     $infos = array(
4943     "dossier_instruction" => $this->valF['dossier'],
4944     );
4945     //
4946     $ret = $this->f->send_message_to_referentiel_erp(108, $infos);
4947     if ($ret !== true) {
4948     $this->cleanMessage();
4949     $this->addToMessage(_("Une erreur s'est produite lors de la notification (108) du référentiel ERP. Contactez votre administrateur."));
4950     return false;
4951 mbroquet 3730 }
4952 fmichon 4708 $this->addToMessage(_("Notification (108) du référentiel ERP OK."));
4953     }
4954    
4955     /**
4956     * Gestion des données techniques liées.
4957     */
4958     // On ajoute les données techniques
4959 softime 8989 if ($this->ajoutDonneesTechniquesDI($id, $val) === false) {
4960 mbroquet 3730 //
4961 fmichon 4708 $this->addToMessage(_("Erreur lors de l'enregistrement du dossier.")." "._("Contactez votre administrateur."));
4962 mbroquet 3730 $this->correct = false;
4963     return false;
4964     }
4965    
4966 fmichon 4708 /**
4967     * Mise à jour des données du DA.
4968     */
4969     //
4970     $inst_da = $this->get_inst_dossier_autorisation($this->valF["dossier_autorisation"]);
4971     //
4972 softime 8640 $params = array(
4973     'di_id' => $this->valF[$this->clePrimaire],
4974     );
4975     if ($inst_da->majDossierAutorisation($params) === false) {
4976 fmichon 4708 //
4977     $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
4978     $this->correct = false;
4979     return false;
4980     }
4981    
4982     /**
4983     * Gestion des références cadastrales / parcelles liées.
4984     */
4985 mbroquet 3730 // Si le champ des références cadastrales n'est pas vide
4986     if ($this->valF['terrain_references_cadastrales'] != '') {
4987     // Ajout des parcelles dans la table dossier_parcelle
4988 softime 8989 $this->ajouter_dossier_parcelle(
4989     $this->valF['dossier'],
4990     $this->valF['terrain_references_cadastrales']
4991     );
4992 softime 6565 }
4993 mbroquet 3730
4994 softime 6565 /**
4995     * Notification de l'éventuelle autorisation contestée
4996     */
4997     if ($this->valF['autorisation_contestee'] !== null) {
4998     // Instancie la classe dossier_message
4999     $dossier_message = $this->get_inst_dossier_message(']');
5000     // Ajoute le message de notification
5001 softime 12124 $dossier_message_val = array(
5002     'dossier' => $this->valF['autorisation_contestee'],
5003     'type' => __('Autorisation contestée'),
5004     'emetteur' => $this->f->get_connected_user_login_name(),
5005     'login' => $_SESSION['login'],
5006     'date_emission' => date('Y-m-d H:i:s'),
5007     'contenu' => sprintf(
5008     __('Cette autorisation a été contestée par le recours %s.'),
5009     $this->valF['dossier']
5010     )
5011     );
5012 softime 6565 // Si une erreur se produit lors de l'ajout
5013 softime 12124 if ($dossier_message->add_notification_message($dossier_message_val, false, true) !== true) {
5014 softime 6565 // Message d'erreur affiché à l'utilisateur
5015     $this->addToMessage(_("L'autorisation contestée n'a pas pu être notifiée du recours."));
5016     $this->correct = false;
5017     return false;
5018     }
5019 mbroquet 3730 }
5020 softime 12433 // Gestion dossier operateur liées.
5021     //
5022     // En mode service consulté, on ajoute suite à la création du dossier un
5023     // élément dans la table dossier_operateur qui permettra par la suite d'effectuer
5024     // la désignation de l'opérateur
5025     if ($this->f->is_option_mode_service_consulte_enabled() === true) {
5026     // On ajoute le dossier opérateur
5027     if ($this->ajoutDossierOperateurDI($id, $val) === false) {
5028 mbroquet 3730
5029 softime 12433 $this->addToMessage(_("Erreur lors de l'enregistrement du dossier.")." "._("Contactez votre administrateur."));
5030     $this->correct = false;
5031     return false;
5032     }
5033     }
5034    
5035 softime 10573 if ($this->f->is_option_mode_service_consulte_enabled() === false
5036 softime 10808 && $this->f->is_type_dossier_platau($this->valF['dossier_autorisation']) === true
5037     && $this->valF['etat_transmission_platau'] !== 'jamais_transmissible') {
5038     //
5039 softime 10573 $trigger_platau_required_fields = $this->trigger_platau_required_fields($this->valF['dossier'], 'add');
5040     }
5041    
5042     /**
5043     * Gestion des tâches pour la dématérialisation
5044     */
5045 softime 6565 //
5046 softime 10808 if ($this->f->is_type_dossier_platau($this->valF['dossier_autorisation'])
5047     && $this->valF['etat_transmission_platau'] !== 'jamais_transmissible') {
5048 softime 10573 //
5049     if (isset($val['source_depot']) === false || $val['source_depot'] !== 'platau') {
5050     $inst_task = $this->f->get_inst__om_dbform(array(
5051     "obj" => "task",
5052     "idx" => 0,
5053     ));
5054     $task_val = array(
5055     'type' => 'creation_DI',
5056     'object_id' => $id,
5057     'dossier' => $id,
5058     );
5059    
5060     if ($this->f->is_option_mode_service_consulte_enabled() === false
5061     && $this->valF['etat_transmission_platau'] === 'non_transmissible') {
5062     $task_val['state'] = $inst_task::STATUS_DRAFT;
5063     }
5064    
5065     $add_task = $inst_task->add_task(array('val' => $task_val));
5066     if ($add_task === false) {
5067     $this->addToMessage(sprintf('%s %s',
5068     __("Une erreur s'est produite lors de la création tâche."),
5069     __("Veuillez contacter votre administrateur.")
5070     ));
5071     $this->correct = false;
5072     return false;
5073     }
5074     }
5075     if (isset($val['source_depot']) === true && $val['source_depot'] == 'platau') {
5076     //
5077     $inst_task = $this->f->get_inst__om_dbform(array(
5078     "obj" => "task",
5079     "idx" => 0,
5080     ));
5081     $task_val = array(
5082     'type' => 'modification_DI',
5083     'object_id' => $id,
5084     'dossier' => $id,
5085     );
5086     $add_task = $inst_task->add_task(array('val' => $task_val));
5087     if ($add_task === false) {
5088     $this->addToMessage(sprintf('%s %s',
5089     __("Une erreur s'est produite lors de la création tâche."),
5090     __("Veuillez contacter votre administrateur.")
5091     ));
5092     $this->correct = false;
5093     return false;
5094 softime 10808 }
5095 softime 10573 }
5096     //
5097     $inst_task = $this->f->get_inst__om_dbform(array(
5098     "obj" => "task",
5099     "idx" => 0,
5100     ));
5101     $task_val = array(
5102     'type' => 'depot_DI',
5103     'object_id' => $id,
5104     'dossier' => $id,
5105     );
5106     // Change l'état de la tâche de notification en fonction de l'état de
5107     // transmission du dossier d'instruction
5108     if ($this->f->is_option_mode_service_consulte_enabled() === false
5109     && $this->valF['etat_transmission_platau'] === 'non_transmissible') {
5110     //
5111     $task_val['state'] = $inst_task::STATUS_DRAFT;
5112     }
5113     $add_task = $inst_task->add_task(array('val' => $task_val));
5114     if ($add_task === false) {
5115     $this->addToMessage(sprintf('%s %s',
5116     __("Une erreur s'est produite lors de la création tâche."),
5117     __("Veuillez contacter votre administrateur.")
5118     ));
5119     $this->correct = false;
5120     return false;
5121     }
5122     }
5123    
5124     //
5125 softime 6565 return true;
5126 mbroquet 3730 }
5127 softime 6565
5128 mbroquet 3730 /**
5129 softime 10573 * Permet de vérifier que les champs requis pour platau ont été saisis
5130     * et si oui mettre à jour le statut des taches à new
5131     *
5132     * @param string $dossier L'identifiant du dossier.
5133     * @param string $add_or_update Permet de déterminer si on est en ajout ou en modification
5134     *
5135     * @return bool true|false
5136     */
5137     function trigger_platau_required_fields($dossier, $add_or_update) {
5138     // Vérification des champs Plat'AU requis pour transmission
5139     // Si les champs requis sont saisis on met à jour le flag
5140     // etat_transmission_platau à transmitted pour indiquer que le dossier a été transmis à Plat'AU
5141     $is_required_fields_fulfilled = $this->check_platau_required_fields($dossier);
5142    
5143     // Instanciation de l'objet formulaire
5144     $this->form = $this->f->get_inst__om_formulaire(array(
5145     "validation" => 0,
5146     "maj" => $this->getParameter("maj"),
5147     "champs" => $this->champs,
5148     ));
5149 softime 10968
5150 softime 10573 if ($add_or_update == 'add') {
5151     if ($is_required_fields_fulfilled['is_ok']) {
5152     $this->form->setVal('etat_transmission_platau', 'transmissible');
5153     return true;
5154 softime 10968 } elseif (isset($this->valF['etat_transmission_platau'])
5155     && $this->valF['etat_transmission_platau'] === 'transmissible'
5156     || $this->getVal('etat_transmission_platau') === 'transmissible') {
5157     //
5158     $this->update_task_state($dossier, 'draft', 'new');
5159 softime 10808 } else {
5160     $this->update_task_state($dossier, 'new', 'draft');
5161 softime 10573 }
5162     }
5163    
5164     $dossier_autorisation = null;
5165    
5166     if ($add_or_update === 'update') {
5167     $inst_task = $this->f->get_inst__om_dbform(array(
5168     "obj" => "task",
5169     "idx" => 0,
5170     ));
5171     if ($is_required_fields_fulfilled['is_ok'] == true) {
5172     if (isset($this->valF['etat_transmission_platau'])
5173     && ($this->valF['etat_transmission_platau'] === 'non_transmissible'
5174     || $this->valF['etat_transmission_platau'] === 'transmis_mais_non_transmissible')
5175     || $this->getVal('etat_transmission_platau') == 'non_transmissible'
5176     || $this->getVal('etat_transmission_platau') == 'transmis_mais_non_transmissible') {
5177 softime 10808 //
5178     $modif_task = false;
5179 softime 10573 if ($inst_task->task_exists('creation_DI', $dossier) === false) {
5180 softime 10808 $modif_task = true;
5181 softime 10573 }
5182 softime 10808
5183     $dossier_autorisation = $this->getVal('dossier_autorisation');
5184 softime 10573
5185     // Valeurs à mettre à jour
5186     $valF = array();
5187     $valF['etat_transmission_platau'] = 'transmissible';
5188    
5189     // Met à jour le quartier du dossier
5190     $cle = " dossier='".$dossier."'";
5191     $res = $this->f->db->autoExecute(
5192     DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
5193     $this->addToLog(__METHOD__."(): db->autoexecute(\""
5194     .DB_PREFIXE."dossier\", ".print_r($valF, true)
5195     .", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
5196     $this->f->isDatabaseError($res);
5197    
5198 softime 10808 $this->update_task_state($dossier, 'draft', 'new', $dossier_autorisation, $modif_task);
5199 softime 10573 }
5200     } else {
5201     if ((isset($this->valF['etat_transmission_platau']) && $this->valF['etat_transmission_platau'] === 'transmissible' || $this->getVal('etat_transmission_platau') === 'transmissible')) {
5202 softime 10808
5203 softime 10573 $valF = array();
5204 softime 10808 $dossier_autorisation = $this->getVal('dossier_autorisation');
5205 softime 10573 if ($inst_task->task_exists('creation_DI', $dossier)) {
5206     $valF['etat_transmission_platau'] = 'non_transmissible';
5207 softime 10808 $modif_task = false;
5208 softime 10573 } else {
5209     $valF['etat_transmission_platau'] = 'transmis_mais_non_transmissible';
5210 softime 10808 $modif_task = true;
5211 softime 10573 }
5212    
5213     // Met à jour le quartier du dossier
5214     $cle = " dossier='".$dossier."'";
5215     $res = $this->f->db->autoExecute(
5216     DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
5217     $this->addToLog(__METHOD__."(): db->autoexecute(\""
5218     .DB_PREFIXE."dossier\", ".print_r($valF, true)
5219     .", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
5220     $this->f->isDatabaseError($res);
5221 softime 10808 $this->update_task_state($dossier, 'new', 'draft', $dossier_autorisation, $modif_task);
5222 softime 10573 }
5223     }
5224    
5225     return true;
5226     }
5227     }
5228    
5229     /**
5230     * TODO: replace with '$this->f->findObjectById' ?
5231     *
5232 softime 6565 * Récupère l'instance de dossier message.
5233     *
5234     * @param string $dossier_message Identifiant du message.
5235     *
5236     * @return object
5237     */
5238     private function get_inst_dossier_message($dossier_message = null) {
5239     //
5240     return $this->get_inst_common("dossier_message", $dossier_message);
5241     }
5242    
5243     /**
5244 mbroquet 3730 * Récupère l'identifiant du quartier et d'un arrondissement d'une référence
5245     * cadastrale
5246     * @param string $reference_cadastrale
5247     *
5248     * @return array
5249     */
5250     function getQuartierArrondissement($reference_cadastrale) {
5251    
5252     $reference_cadastrale = trim($reference_cadastrale);
5253     $quartier = '';
5254    
5255     //Récupère le code impot du quartier dans la référence cadastrale
5256     for ( $i = 0 ; $i < strlen($reference_cadastrale) ; $i++ ){
5257    
5258     //Si c'est un chiffre, c'est le code quartier
5259     if (is_numeric($reference_cadastrale[$i]) ){
5260    
5261     $quartier .= $reference_cadastrale[$i];
5262     }
5263     //Sinon c'est la section
5264     else{
5265     break;
5266     }
5267     }
5268    
5269     //Si le code impôt du quartier a bien été renseigné
5270     if ( $quartier !== '' ){
5271    
5272     //Requête de récupération de l'identifiantdu quartier et de
5273     //l'arrondissement
5274     $sql = "SELECT
5275     quartier, arrondissement
5276     FROM
5277     ".DB_PREFIXE."quartier
5278     WHERE
5279     code_impots='$quartier'";
5280     $this->addToLog("getQuartierArrondissement() : db->query(\"$sql\")", VERBOSE_MODE);
5281 softime 8989 $res = $this->f->db->query($sql);
5282 mbroquet 3730 if (database::isError($res)) {
5283     die();
5284     }
5285    
5286     //Si on a un résultat
5287     if ( $res->numRows() == 1 ){
5288     //
5289     return $res->fetchRow(DB_FETCHMODE_ASSOC);
5290     }
5291     }
5292    
5293     return NULL;
5294     }
5295    
5296     /**
5297     * Récupère la section d'une référence cadastrale
5298     * @param string $reference_cadastrale
5299     *
5300     * @return string
5301     */
5302     function getSection($reference_cadastrale){
5303    
5304     $reference_cadastrale = trim($reference_cadastrale);
5305     $section = NULL;
5306    
5307     for ( $i = 0 ; $i < strlen($reference_cadastrale) ; $i++ )
5308 softime 10573 if (ctype_alnum($reference_cadastrale[$i]) === true && $reference_cadastrale[$i] !== ' ')
5309 mbroquet 3730 $section .= $reference_cadastrale[$i];
5310    
5311     return $section;
5312     }
5313 softime 10573
5314 mbroquet 3730 /**
5315 softime 10573 * Retourne l'intructeur correspondant le mieux à la parcelle.
5316     *
5317     * @param int $quartier le numéro de quartier
5318     * @param int $arrondissement le numéro d'arrondissement
5319     * @param string $section la section
5320     * @param int $dadt le type détaillé de dossier d'autorisation
5321     * @param int $collectivite l'identifiant de la collectivité
5322     * @param int $commune_id l'identifiant de la commune (optionel)
5323     * @param string $instructeurColumn l'identifiant de la colonne en BDD de l'instructeur (optionel)
5324     *
5325     * @return array contenant l'instructeur, et éventuellement sa division
5326     */
5327     public function getInstructeurDivision (
5328 softime 11585 int $quartier, int $arrondissement, $section,
5329 softime 10573 int $dadt, int $collectivite, int $commune_id = 0,
5330     string $instructeurColumn = 'instructeur') : array {
5331 mbroquet 3730
5332 softime 10573 $instrAndDiv = array();
5333 mbroquet 3730
5334 softime 10573 // requête de récupération de l'instructeur à affecter
5335     // (exclu les affectations manuelles supposées avoir été utilisées avant)
5336     $sql = sprintf("
5337     SELECT
5338     %1\$s, section, quartier, arrondissement, dossier_autorisation_type_detaille
5339     FROM
5340     ".DB_PREFIXE."affectation_automatique AS AA
5341     WHERE
5342     (AA.affectation_manuelle IS NULL OR AA.affectation_manuelle = '')
5343     AND AA.%1\$s IS NOT NULL
5344     ",
5345     $this->f->db->quoteIdentifier($instructeurColumn)
5346     );
5347    
5348     // ajoute les conditions SQL correspondantes aux paramètres de filtrage
5349     foreach(array(
5350     'om_collectivite ' => $collectivite,
5351     'dossier_autorisation_type_detaille' => $dadt,
5352     'quartier' => $quartier,
5353     'arrondissement' => $arrondissement,
5354     'section' => $section
5355     ) as $column => $value) {
5356     if (empty($value) === false) {
5357     $valType = 'd'; // int
5358     if ($column == 'section') {
5359     $valType = 's'; // string
5360     $value = $this->f->db->escapeSimple($value);
5361 mbroquet 3730 }
5362 softime 10573 $sql .= sprintf(" AND (AA.$column IS NULL OR AA.$column = '%$valType') ",
5363     $value);
5364 mbroquet 3730 }
5365     }
5366 softime 10573 if (!empty($commune_id) && $this->f->is_option_dossier_commune_enabled()) {
5367     $commune = $this->f->findObjectById('commune', $commune_id);
5368     if (!empty($commune)) {
5369     $code_departement = $commune->getVal('dep');
5370     $code_commune = preg_replace('/^'.$code_departement.'/', '', $commune->getVal('com'));
5371     $sql .= sprintf(
5372     " AND (AA.communes IS NULL OR AA.communes ~ '%s') ",
5373     "(^|,)$code_departement($code_commune)?(,|$)");
5374     }
5375     else {
5376     $this->addToLog(__METHOD__."(): commune '$commune_id' non trouvée", DEBUG_MODE);
5377     }
5378     }
5379 mbroquet 3730
5380 softime 10573 // ordonnancement et limite à un seul résultat
5381     $sql .= sprintf("
5382     ORDER BY
5383     communes %s,
5384     dossier_autorisation_type_detaille %s,
5385     section %s,
5386     quartier %s,
5387     arrondissement %s
5388     LIMIT 1
5389     ",
5390     // on positionne les valeurs NULL en premier si le filtre sur ce champ n'a pas été saisi
5391     $commune_id === 0 ? 'NULLS FIRST' : '',
5392     $dadt === 0 ? 'NULLS FIRST' : '',
5393     empty($section) === true ? 'NULLS FIRST' : '',
5394     $quartier === 0 ? 'NULLS FIRST' : '',
5395     $arrondissement === 0 ? 'NULLS FIRST' : ''
5396     );
5397    
5398     // exécution de la requête
5399     $this->addToLog(__METHOD__."() : db->query(\"$sql\")", VERBOSE_MODE);
5400     $res = $this->f->db->query($sql);
5401     $this->f->isDatabaseError($res);
5402    
5403     // si on a récupéré un instructeur correspondant aux critères
5404     if ($res->numRows() > 0) {
5405    
5406     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
5407    
5408     // récupère sa division
5409     $sql = sprintf(
5410     "SELECT division FROM ".DB_PREFIXE."instructeur WHERE instructeur = '%d'",
5411     intval($row[$instructeurColumn])
5412     );
5413     $this->addToLog(__METHOD__."() : db->getOne(\"$sql\")", VERBOSE_MODE);
5414     $divisionId = $this->f->db->getOne($sql);
5415     $this->f->isDatabaseError($divisionId);
5416    
5417     // s'il a une division, retourne l'instructeur et sa division
5418     if (empty($divisionId === false)) {
5419     return array(
5420     'instructeur' => $row[$instructeurColumn],
5421     'division' => $divisionId,
5422     );
5423     }
5424    
5425     // aucune division trouvée, retour uniquement l'instructeur
5426     return array('instructeur' => $row[$instructeurColumn]);
5427     }
5428    
5429     return $instrAndDiv;
5430 mbroquet 3730 }
5431    
5432     /**
5433     * Récupère le type détaillé d'une dossier d'autorisation.
5434     *
5435     * @param integer $dossier_autorisation DA
5436     *
5437     * @return mixed
5438     */
5439     function get_dossier_autorisation_da_type_detaille($dossier_autorisation) {
5440    
5441     //
5442     $resDATD = "";
5443    
5444     //Récupération du dossier_autorisation_type_detaille concerné par le
5445     //$dossier_autorisation
5446     $sql = "
5447     SELECT
5448     dossier_autorisation_type_detaille
5449     FROM
5450     ".DB_PREFIXE."dossier_autorisation
5451     WHERE
5452     dossier_autorisation = '$dossier_autorisation'";
5453     $this->addToLog(__METHOD__." : db->query(\"$sql\")", VERBOSE_MODE);
5454 softime 8989 $resDATD = $this->f->db->getOne($sql);
5455 mbroquet 3730 $this->f->isDatabaseError($resDATD);
5456    
5457     //
5458     return $resDATD;
5459     }
5460    
5461 softime 8989 /**
5462     * TRIGGER - triggerajouter.
5463     *
5464     * @return boolean
5465     */
5466     function triggerajouter($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
5467     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
5468 softime 10573
5469 mbroquet 3730 // Initialisation des variables nécessaires à l'affectation automatique
5470 softime 10573 $quartier = 0;
5471     $arrondissement = 0;
5472     $section = '';
5473    
5474 softime 8989 // Si la référence cadastrale n'est pas vide alors on récupère la
5475     // section, le quartier et l'arrondissement
5476 mbroquet 3730 if ($this->valF['terrain_references_cadastrales'] != '') {
5477 softime 10573
5478 mbroquet 3730 // Cette méthode récupère l'arrondissement et le quartier de la
5479 softime 8989 // référence cadastrale saisie
5480 softime 10573 $quartierArr = $this->getQuartierArrondissement(
5481     $this->valF['terrain_references_cadastrales']);
5482     if ($quartierArr != null) {
5483     $quartier = $quartierArr['quartier'];
5484     $arrondissement = $quartierArr['arrondissement'];
5485 mbroquet 3730 }
5486 softime 10573
5487 mbroquet 3730 // Si il n'y a pas d'arrondissement alors on vide le quartier
5488 softime 8989 if (strcmp($arrondissement, '') == 0) {
5489     $arrondissement = null;
5490     $quartier = null;
5491 mbroquet 3730 }
5492 softime 10573
5493 mbroquet 3730 // On récupère la section
5494     $section = $this->getSection($this->valF['terrain_references_cadastrales']);
5495     }
5496 softime 10573
5497     // Si une affectation automatique a été spécifiée
5498     if (isset($val['affectation_automatique']) === true &&
5499     empty($val['affectation_automatique']) === false) {
5500     //
5501     $affect_auto_id = intval($val['affectation_automatique']);
5502    
5503     // log si l'affectation automatique n'existe pas
5504     $logMsg = __METHOD__."(): affectation automatique '$affect_auto_id' ".
5505     "non trouvée";
5506     $logMsgMode = DEBUG_MODE;
5507    
5508     // si l'affectation automatique existe
5509     $affectation_auto = $this->f->get_inst__om_dbform(array(
5510     "obj" => "affectation_automatique",
5511     "idx" => $affect_auto_id
5512     ));
5513     if (empty($affectation_auto->getVal($affectation_auto->clePrimaire)) === false) {
5514    
5515     // log si l'instructeur n'est pas défini
5516     $logMsg = __METHOD__."(): affectation automatique '$affect_auto_id' ".
5517     "pas d'instructeur défini";
5518    
5519     // si un instructeur est défini
5520     $instructeur_id = $affectation_auto->getVal('instructeur');
5521     if (empty($instructeur_id) === false) {
5522    
5523     // log si l'instructeur n'existe pas
5524     $logMsg = __METHOD__."(): affectation automatique '$affect_auto_id' ".
5525     "instructeur '$instructeur_id' non trouvé";
5526    
5527     // si l'instructeur existe
5528     $instructeur = $this->f->get_inst__om_dbform(array(
5529     "obj" => "instructeur",
5530     "idx" => intval($instructeur_id)
5531     ));
5532     if (empty($instructeur->getVal($instructeur->clePrimaire)) === false) {
5533    
5534     // récupère son ID et sa division
5535     $this->valF['instructeur'] = $instructeur_id;
5536     $this->valF['division'] = $instructeur->getVal('division');
5537    
5538     // log le succès
5539     $logMsg = __METHOD__."(): affectation automatique '$affect_auto_id' ".
5540     "instructeur [".$this->valF['instructeur']."] ".
5541     "'".$instructeur->getVal('nom')."' affecté, avec sa division ".
5542     "'".$this->valF['division']."'";
5543     $logMsgMode = EXTRA_VERBOSE_MODE;
5544     }
5545 mbroquet 3730 }
5546 softime 10573 $this->addToLog($logMsg, $logMsgMode);
5547    
5548     // log si aucun instructeur secondaire est défini
5549     $logMsg = __METHOD__."(): affectation automatique '$affect_auto_id' ".
5550     "pas de second instructeur défini";
5551     $logMsgMode = EXTRA_VERBOSE_MODE;
5552    
5553     // si l'instructeur secondaire est défini
5554     $instructeur2_id = $affectation_auto->getVal('instructeur_2');
5555     if (empty($instructeur2_id) === false) {
5556    
5557     // log si l'instructeur n'existe pas
5558     $logMsg = __METHOD__."(): affectation automatique '$affect_auto_id' ".
5559     "second instructeur '$instructeur2_id' non trouvé";
5560     $logMsgMode = DEBUG_MODE;
5561    
5562     // si l'instructeur existe
5563     $instructeur2 = $this->f->get_inst__om_dbform(array(
5564     "obj" => "instructeur",
5565     "idx" => intval($instructeur2_id)
5566     ));
5567     if (empty($instructeur2) === false) {
5568    
5569     // récupère son ID
5570     $this->valF['instructeur_2'] = $instructeur2_id;
5571    
5572     // log le succès
5573     $logMsg = __METHOD__."(): affectation automatique '$affect_auto_id' ".
5574     "second instructeur [".$this->valF['instructeur_2']."] ".
5575     "'".$instructeur2->getVal('nom')."' affecté";
5576     $logMsgMode = EXTRA_VERBOSE_MODE;
5577     }
5578     }
5579     $this->addToLog($logMsg, $logMsgMode);
5580    
5581     // succès : plus rien à logger
5582     $logMsg = null;
5583     $logMsgMode = null;
5584 mbroquet 3730 }
5585 softime 10573
5586     // affectation automatique inexistante
5587     if (empty($logMsg) === false && empty($logMsgMode) === false) {
5588     $this->addToLog($logMsg, $logMsgMode);
5589 softime 6565 }
5590 mbroquet 3730 }
5591 softime 10573
5592     // message affiché si aucune instructeur défini/récupéré
5593     $affMsg = "<br/> "._("Aucun instructeur compatible avec ce dossier trouve, ".
5594     "contactez votre administrateur afin d'en assigner un ".
5595     "a ce dossier.")." <br/>";
5596     if ($this->f->isAccredited("dossier_modifier_instructeur") === true) {
5597     $affMsg = "<br/> "._("Pensez a assigner un instructeur a ce dossier.")." <br/>";
5598     }
5599    
5600     // si aucun instructeur n'est saisi et que le dossier_autorisation_type_detaille n'est pas
5601     // vide alors on récupère l'instructeur et la division depuis l'affectation automatique
5602     if (empty($this->valF['instructeur']) === true && empty($val['dossier_autorisation']) === false) {
5603    
5604     // récupère le type détaillé du DA
5605     $dadt = $this->get_dossier_autorisation_da_type_detaille(
5606     $this->valF['dossier_autorisation']);
5607    
5608     // si la commune est spécifiée
5609     $commune_id = 0;
5610     if (isset($this->valF['commune']) && $this->f->is_option_dossier_commune_enabled()) {
5611     $commune_id = $this->valF['commune'];
5612     }
5613    
5614     // récupération de l'instructeur ainsi que de sa division
5615     $instructeurDivision = $this->getInstructeurDivision(
5616     intval($quartier), intval($arrondissement), $section,
5617     intval($dadt), intval($this->valF['om_collectivite']),
5618     intval($commune_id)
5619     );
5620    
5621     // si un instructeur et sa division ont été récupérés
5622     if (isset($instructeurDivision['instructeur']) === true &&
5623     isset($instructeurDivision['division']) === true) {
5624    
5625     // stocke les valeurs dans les données de formulaire
5626     // (pour pouvoir être exploitées ensuite)
5627     $this->valF['instructeur'] = $instructeurDivision['instructeur'];
5628     $this->valF['division'] = $instructeurDivision['division'];
5629    
5630     // n'affiche aucun message à l'utilisateur
5631     $affMsg = null;
5632     }
5633    
5634     // récupération de l'instructeur secondaire
5635     $instr2 = $this->getInstructeurDivision(
5636     intval($quartier), intval($arrondissement), $section,
5637     intval($dadt), intval($this->valF['om_collectivite']),
5638     intval($commune_id), 'instructeur_2'
5639     );
5640     if (isset($instr2['instructeur']) === true) {
5641     $this->valF['instructeur_2'] = $instr2['instructeur'];
5642     }
5643     }
5644    
5645     // si on doit afficher un message à l'utilisateur
5646     if (empty($affMsg) === false) {
5647     $this->addToMessage($affMsg);
5648     }
5649    
5650 softime 8989 $this->addToLog(__METHOD__."(): end", EXTRA_VERBOSE_MODE);
5651 mbroquet 3730 }
5652    
5653 fmichon 4708 /**
5654     * TRIGGER - triggermodifierapres.
5655     *
5656     * - Interface avec le référentiel ERP [101]
5657     * - Interface avec le référentiel ERP [102][103]
5658 softime 6272 * - Interface avec le référentiel ERP [114]
5659 fmichon 4708 * - Gestion des demandeurs liés
5660     * - Gestion des références cadastrales / parcelles liées
5661     * - Gestion des taxes
5662 softime 8989 *
5663 fmichon 4708 * @return boolean
5664     */
5665 softime 8989 function triggermodifierapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
5666     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
5667    
5668 softime 6565 // Mise à jour DA si miroir du DI
5669     $inst_da = $this->get_inst_dossier_autorisation($this->getVal('dossier_autorisation'));
5670     if ($inst_da->is_dossier_autorisation_visible() === false) {
5671 softime 8640 $params = array(
5672     'di_id' => $this->getVal($this->clePrimaire),
5673     );
5674     if ($inst_da->majDossierAutorisation($params) === false) {
5675 softime 6565 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
5676     return false;
5677     }
5678     }
5679 fmichon 4708
5680     /**
5681     * Interface avec le référentiel ERP.
5682     *
5683     * (WS->ERP)[101] ERP Qualifié -> AT
5684     * Déclencheur :
5685     * - L'option ERP est activée
5686     * - Le dossier est de type AT
5687     * - Le dossier est marqué comme "connecté au référentiel ERP"
5688     * - Le formulaire de modification du dossier est validé avec le
5689     * marqueur "à qualifier" à "NON" alors qu'il était précédemment à
5690     * "OUI"
5691     */
5692 softime 8989 //
5693 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
5694 fmichon 4708 && $this->is_connected_to_referentiel_erp() === true
5695     && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__at')
5696     && $this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false) {
5697 softime 4740 // Récupère la liste des contraintes
5698     $contraintes_plu_list = $this->getListContrainte($this->valF['dossier'], false);
5699     // Extrait les libellés de chaque contraintes
5700     $contraintes_plu = array();
5701     $contraintes_plu_string = "";
5702 softime 8989 while ($row =& $contraintes_plu_list->fetchRow(DB_FETCHMODE_ASSOC)) {
5703 softime 4740 //
5704     $contraintes_plu[] = $row['contrainte_libelle'];
5705     }
5706     // Chaîne de caractère listant toutes les contraintes du dossier
5707     $contraintes_plu_string = implode(' ; ', $contraintes_plu);
5708 nhaye 6052 $competence = "";
5709     if ($this->valF['autorite_competente'] !== null) {
5710     $inst_ac = $this->get_inst_autorite_competente($this->valF['autorite_competente']);
5711     $competence = $inst_ac->getVal("libelle");
5712     }
5713 fmichon 4708 //
5714     $infos = array(
5715     "dossier_instruction" => $this->valF['dossier'],
5716 nhaye 6052 "competence" => $competence,
5717 softime 4740 "contraintes_plu" => $contraintes_plu_string,
5718 fmichon 4708 "references_cadastrales" => $this->getReferenceCadastrale($this->valF['dossier']),
5719     );
5720     //
5721     $ret = $this->f->send_message_to_referentiel_erp(101, $infos);
5722     if ($ret !== true) {
5723     $this->cleanMessage();
5724     $this->addToMessage(_("Une erreur s'est produite lors de la notification (101) du référentiel ERP. Contactez votre administrateur."));
5725     return false;
5726 mbroquet 3730 }
5727 fmichon 4708 $this->addToMessage(_("Notification (101) du référentiel ERP OK."));
5728     }
5729 mbroquet 3730
5730 fmichon 4708 /**
5731     * Interface avec le référentiel ERP.
5732     *
5733     * (WS->ERP)[102] Demande de complétude de dossier PC pour un ERP -> PC qui concerne un ERP
5734     * (WS->ERP)[103] Demande de qualification de dossier PC pour un ERP -> PC qui concerne un ERP
5735     * Déclencheur :
5736     * - L'option ERP est activée
5737     * - Le dossier est de type PC
5738     * - Le formulaire de modification du dossier est validé avec le
5739     * marqueur "à qualifier" à "NON" alors qu'il était précédemment à
5740     * "OUI"
5741     * - Le formulaire de modification du dossier est validé avec le
5742     * marqueur "ERP" à "OUI"
5743     */
5744     //
5745 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
5746 fmichon 4708 && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
5747     && $this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false
5748     && $this->valF['erp'] == true) {
5749     //
5750     $infos = array(
5751     "dossier_instruction" => $this->valF['dossier'],
5752     );
5753     // [102] Demande de complétude de dossier PC pour un ERP
5754     $ret = $this->f->send_message_to_referentiel_erp(102, $infos);
5755     if ($ret !== true) {
5756     $this->cleanMessage();
5757     $this->addToMessage(_("Une erreur s'est produite lors de la notification (102) du référentiel ERP. Contactez votre administrateur."));
5758     return false;
5759     }
5760     $this->addToMessage(_("Notification (102) du référentiel ERP OK."));
5761     // [103] Demande de qualification de dossier PC pour un ERP
5762     $ret = $this->f->send_message_to_referentiel_erp(103, $infos);
5763     if ($ret !== true) {
5764     $this->cleanMessage();
5765     $this->addToMessage(_("Une erreur s'est produite lors de la notification (103) du référentiel ERP. Contactez votre administrateur."));
5766     return false;
5767     }
5768     $this->addToMessage(_("Notification (103) du référentiel ERP OK."));
5769     }
5770    
5771     /**
5772 softime 6272 * Interface avec le référentiel ERP.
5773     *
5774     * (WS->ERP)[114] ERP Qualifié -> PC
5775     * Déclencheur :
5776     * - l'option ERP est activée
5777     * - ET le dossier est marqué comme "connecté au référentiel ERP"
5778     * - ET le dossier est de type PC
5779     * - ET
5780     * - soit le formulaire de modification du dossier est validé avec le
5781     * marqueur "enjeu_urba" qui change de statut
5782     * - soit ce marqueur est vrai et le dossier passe à qualifié
5783     */
5784     // Étant donné que l'objet a été modifié en base après sa création,
5785     // il faut le ré-instancier pour récupérer ses informations.
5786 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
5787     "obj" => "dossier",
5788     "idx" => $this->valF['dossier'],
5789     ));
5790 softime 7366 if ($dossier->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
5791 softime 6272 && $dossier->is_connected_to_referentiel_erp() === true
5792     && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
5793     && (($this->getVal('enjeu_urba') == 't') != $this->valF['enjeu_urba']
5794     || ($this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false
5795     && $this->getVal('enjeu_urba') == 't'))) {
5796    
5797     $enjeu = "non";
5798     if ($this->valF['enjeu_urba']) {
5799     $enjeu = "oui";
5800     }
5801    
5802     $infos = array(
5803     "dossier_instruction" => $this->valF['dossier'],
5804     "Dossier à enjeu ADS" => $enjeu
5805     );
5806     //
5807     $ret = $this->f->send_message_to_referentiel_erp(114, $infos);
5808     if ($ret !== true) {
5809     $this->cleanMessage();
5810     $this->addToMessage(_("Une erreur s'est produite lors de la notification (114) du référentiel ERP. Contactez votre administrateur."));
5811     return false;
5812     }
5813     $this->addToMessage(_("Notification (114) du référentiel ERP OK."));
5814     }
5815    
5816     /**
5817 fmichon 4708 * Gestion des demandeurs liés.
5818     */
5819 mbroquet 3730 // Ajout ou modification des demandeurs
5820 softime 8989 $this->insertLinkDossierDemandeur();
5821 mbroquet 3730
5822 fmichon 4708 /**
5823     * Gestion des références cadastrales / parcelles liées.
5824     */
5825 mbroquet 3730 // Si le champ des références cadastrales n'est pas vide
5826     if ($this->getVal('terrain_references_cadastrales')
5827     != $this->valF['terrain_references_cadastrales']) {
5828    
5829     // On supprime toutes les lignes de la table dossier_parcelle qui
5830     // font référence le dossier en cours de modification
5831     $this->supprimer_dossier_parcelle($val['dossier']);
5832    
5833     // Ajout des parcelles dans la table dossier_parcelle
5834     $this->ajouter_dossier_parcelle($val['dossier'],
5835     $val['terrain_references_cadastrales']);
5836    
5837     }
5838    
5839 fmichon 4708 /**
5840     * Gestion des taxes.
5841     */
5842 softime 6929 // Si le champ tax_secteur est modifié et que l'option de simulation des
5843     // taxes est activée
5844     if ($this->getVal('tax_secteur') != $this->valF['tax_secteur']
5845     && $this->f->is_option_simulation_taxes_enabled($this->getVal('om_collectivite')) === true) {
5846 mbroquet 3730
5847     // Valeurs pour le calcul de la taxe d'aménagement
5848 softime 6929 $values = array();
5849     // Instance de la classe donnees_techniques
5850     $donnees_techniques = $this->get_inst_donnees_techniques();
5851     // Récupère les valeurs des données techniques
5852     $values = $donnees_techniques->get_form_val();
5853 mbroquet 3730
5854     // Met à jour les montants du dossier
5855 softime 6929 $update_dossier_tax_mtn = $this->update_dossier_tax_mtn($this->valF['tax_secteur'], $values);
5856     if ($update_dossier_tax_mtn === false) {
5857 mbroquet 3730 //
5858     $this->addToMessage(_("La mise a jour des montants de la simulation de la taxe d'amenagement a echouee."));
5859 softime 6929 //
5860 mbroquet 3730 return false;
5861     }
5862     }
5863    
5864 softime 6272 /**
5865     * Gestion des métadonées des pièces liés.
5866     * Vérifie les méthodes à exécuter configurées dans le connecteur du
5867     * filestorage.
5868     */
5869 mbroquet 3730 //
5870 softime 6272 $ret = $this->post_update_metadata($val);
5871     //
5872     if ($ret === false) {
5873     //
5874     $this->cleanMessage();
5875     $this->addToMessage(_("La mise à jour des métadonnées des pièces liées à ce dossier a échouée."));
5876     return false;
5877     }
5878    
5879 softime 7366 /**
5880     * Gestion des du changement de date de dépôt.
5881     * Vérification préalable de la présence de la date et de sa
5882     * modification.
5883     */
5884 softime 6272 //
5885 softime 7366 if (array_key_exists("date_depot", $val) === true) {
5886     //
5887 softime 7540 $inst_new_date = DateTime::createFromFormat('d/m/Y', $val["date_depot"]);
5888     $inst_old_date = DateTime::createFromFormat('Y-m-d', $this->getVal("date_depot"));
5889     $new_date = $inst_new_date->format('d/m/Y');
5890     $old_date = $inst_old_date->format('d/m/Y');
5891 softime 7366
5892     //
5893     if ($new_date !== $old_date) {
5894     //
5895     $status = $this->update_date_depot($val["date_depot"]);
5896     //
5897     if ($status === false) {
5898     //
5899     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
5900     return false;
5901     }
5902    
5903     }
5904     }
5905 softime 10573
5906     /**
5907     * Gestion de la normalisation de l'adresse.
5908     * En cas de modification de l'adresse du terrain, l'adresse normalisée
5909     * est supprimée.
5910     */
5911     $list_address_keys = array(
5912     'terrain_adresse_voie_numero',
5913     'terrain_adresse_voie',
5914     'terrain_adresse_lieu_dit',
5915     'terrain_adresse_localite',
5916     'terrain_adresse_code_postal',
5917     'terrain_adresse_bp',
5918     'terrain_adresse_cedex',
5919     );
5920     $change = false;
5921     foreach ($list_address_keys as $key) {
5922     if (array_key_exists($key, $val) === true
5923     && $val[$key] !== $this->getVal($key)) {
5924     //
5925     $change = true;
5926     break;
5927     }
5928     }
5929     if ($change === true) {
5930     $this->normalize_address();
5931     }
5932    
5933     if ($this->f->is_option_mode_service_consulte_enabled() === false
5934 softime 10808 && $this->f->is_type_dossier_platau($this->valF['dossier_autorisation']) === true
5935     && $this->getVal('etat_transmission_platau') !== 'jamais_transmissible') {
5936     //
5937 softime 10573 $trigger_platau_required_fields = $this->trigger_platau_required_fields($this->valF['dossier'], 'update');
5938     }
5939    
5940     /**
5941     * Gestion des tâches pour la dématérialisation
5942     */
5943     // Qualification du dossier d'instruction
5944     if ($this->getVal('instructeur') != $this->valF['instructeur']
5945     || $this->getVal('division') != $this->valF['division']) {
5946     //
5947 softime 10808 if ($this->f->is_type_dossier_platau($this->valF['dossier_autorisation'])
5948     && $this->valF['etat_transmission_platau'] !== 'jamais_transmissible'
5949     && ($this->f->is_option_mode_service_consulte_enabled() !== true
5950     || ($this->f->is_option_mode_service_consulte_enabled() === true
5951     && ($this->get_source_depot_from_demande() === 'platau'
5952     || $this->get_source_depot_from_demande() === 'portal')))) {
5953 softime 10573 //
5954     $inst_task = $this->f->get_inst__om_dbform(array(
5955     "obj" => "task",
5956     "idx" => 0,
5957     ));
5958     $task_val = array(
5959     'type' => 'qualification_DI',
5960     'object_id' => $id,
5961     'dossier' => $id,
5962     );
5963     if ($this->f->is_option_mode_service_consulte_enabled() === false
5964     && $this->valF['etat_transmission_platau'] === 'non_transmissible'
5965     || $this->valF['etat_transmission_platau'] === 'transmis_mais_non_transmissible') {
5966     $task_val['state'] = $inst_task::STATUS_DRAFT;
5967     }
5968     $add_task = $inst_task->add_task(array('val' => $task_val));
5969     if ($add_task === false) {
5970     $this->addToMessage(sprintf('%s %s',
5971     __("Une erreur s'est produite lors de la création tâche."),
5972     __("Veuillez contacter votre administrateur.")
5973     ));
5974     $this->correct = false;
5975     return false;
5976     }
5977     }
5978     }
5979     // Modification du dossier d'instruction
5980     if ($this->f->is_type_dossier_platau($this->valF['dossier_autorisation'])
5981 softime 10808 && $this->valF['etat_transmission_platau'] !== 'jamais_transmissible'
5982 softime 10573 && ($this->f->is_option_mode_service_consulte_enabled() !== true
5983     || ($this->f->is_option_mode_service_consulte_enabled() === true
5984     && ($this->get_source_depot_from_demande() === 'platau'
5985 softime 10808 || $this->get_source_depot_from_demande() === 'portal')))) {
5986 softime 10573 //
5987     $inst_task = $this->f->get_inst__om_dbform(array(
5988     "obj" => "task",
5989     "idx" => 0,
5990     ));
5991     $task_val = array(
5992     'type' => 'modification_DI',
5993     'object_id' => $id,
5994     'dossier' => $id,
5995     );
5996     // Change l'état de la tâche de notification en fonction de l'état de
5997     // transmission du dossier d'instruction
5998     if ($this->f->is_option_mode_service_consulte_enabled() === false
5999     && $this->valF['etat_transmission_platau'] === 'non_transmissible'
6000     || $this->valF['etat_transmission_platau'] === 'transmis_mais_non_transmissible') {
6001     //
6002     $task_val['state'] = $inst_task::STATUS_DRAFT;
6003     }
6004     $add_task = $inst_task->add_task(array('val' => $task_val));
6005     if ($add_task === false) {
6006     $this->addToMessage(sprintf('%s %s',
6007     __("Une erreur s'est produite lors de la création tâche."),
6008     __("Veuillez contacter votre administrateur.")
6009     ));
6010     $this->correct = false;
6011     return false;
6012     }
6013     // XXX Les données du DA sont mises à jour seulement lors de l'ajout ou modification
6014     // d'une instruction du DI initial et lors de la décision sur le DI non initial.
6015     // Sachant ce comportement, voir si cette tâche modification_DA est bien située.
6016 softime 10968 // $inst_task = $this->f->get_inst__om_dbform(array(
6017     // "obj" => "task",
6018     // "idx" => 0,
6019     // ));
6020     // $task_val = array(
6021     // 'type' => 'modification_DA',
6022     // 'object_id' => $this->getVal('dossier_autorisation'),
6023     // 'dossier' => $this->getVal('dossier_autorisation'),
6024     // );
6025     // // Change l'état de la tâche de notification en fonction de l'état de
6026     // // transmission du dossier d'instruction
6027     // if ($this->f->is_option_mode_service_consulte_enabled() === false
6028     // && $this->valF['etat_transmission_platau'] === 'non_transmissible'
6029     // || $this->valF['etat_transmission_platau'] === 'transmis_mais_non_transmissible') {
6030     // //
6031     // $task_val['state'] = $inst_task::STATUS_DRAFT;
6032     // }
6033     // $add_task = $inst_task->add_task(array('val' => $task_val));
6034     // if ($add_task === false) {
6035     // $this->addToMessage(sprintf('%s %s',
6036     // __("Une erreur s'est produite lors de la création tâche."),
6037     // __("Veuillez contacter votre administrateur.")
6038     // ));
6039     // $this->correct = false;
6040     // return false;
6041     // }
6042 softime 10573 }
6043    
6044 softime 7366 //
6045 mbroquet 3730 return true;
6046     }
6047    
6048 softime 7366 /**
6049 softime 8989 * TRIGGER - triggermodifier.
6050     *
6051     * @return boolean
6052 softime 7366 */
6053 softime 8989 function triggermodifier($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
6054     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
6055 softime 7366 // Si la date de dépôt a changé et si elle valait celle du dernier dépôt
6056     // alors cette dernière prend également sa valeur
6057     if ($this->f->formatDate($this->getVal('date_depot')) !== $val['date_depot']
6058     && $this->f->formatDate($this->getVal('date_depot')) === $this->f->formatDate($this->getVal('date_dernier_depot'))) {
6059     $this->valF['date_dernier_depot'] = $this->valF['date_depot'];
6060     }
6061     //
6062     return true;
6063     }
6064    
6065 mbroquet 3730 /**
6066 softime 7366 * Methode de traitement suite à la modification de la date de dépot.
6067     *
6068     * @param string $new_date_str Nouvelle date de dépot.
6069     *
6070     * @return boolean
6071     */
6072     function update_date_depot($new_date_str) {
6073     $demande = $this->get_inst_demande();
6074 softime 10573 // TODO: should return null instead of false
6075 softime 7366 if ($demande === false) {
6076     return false;
6077     }
6078    
6079     $retour = $this->majDateInstruction($demande->getVal("instruction_recepisse"), $new_date_str);
6080     if ($retour === false) {
6081     return false;
6082     }
6083 softime 11876
6084 softime 7366 $valF = array();
6085     foreach ($demande->champs as $id => $champ) {
6086     $valF[$champ] = $demande->val[$id];
6087     }
6088     $valF['date_demande'] = $new_date_str;
6089 softime 8989 $modification = $demande->modifier($valF);
6090 softime 7366 if ($modification === false) {
6091     return false;
6092     }
6093    
6094     $row_date = array("date_demande" => $new_date_str);
6095 softime 8989 $res = $this->f->db->autoExecute(
6096 softime 7366 DB_PREFIXE."dossier",
6097     $row_date,
6098     DB_AUTOQUERY_UPDATE,
6099     "dossier = '".$this->getVal("dossier")."'"
6100     );
6101     $this->f->addToLog(__METHOD__ . "() : db->autoExecute(" . $res . ")", VERBOSE_MODE);
6102     if ($this->f->isDatabaseError($res, true)) {
6103     return false;
6104     }
6105    
6106 softime 7541 // Si c'est un dossier d'instruction initial
6107     $di_version = $this->get_dossier_instruction_version();
6108     if ($di_version === 0 || $di_version === '0') {
6109     //
6110     $row_date = array("depot_initial" => $new_date_str);
6111 softime 8989 $res = $this->f->db->autoExecute(
6112 softime 7541 DB_PREFIXE."dossier_autorisation",
6113     $row_date,
6114     DB_AUTOQUERY_UPDATE,
6115     "dossier_autorisation = '" . $this->getVal("dossier_autorisation") . "'"
6116     );
6117     $this->f->addToLog(__METHOD__ . "() : db->autoExecute(" . $res . ")", VERBOSE_MODE);
6118     if ($this->f->isDatabaseError($res, true)) {
6119     return false;
6120     }
6121 softime 7366 }
6122     }
6123    
6124    
6125     /**
6126     * Met à jour l'instruction en fonction de la nouvelle date
6127     * ou retourne false si il ya une erreur.
6128     *
6129     * @param integer $instruction_id Identifiant de l'instruction.
6130     * @param string $date_depot Nouvelle date de dépôt.
6131     *
6132     * @return boolean
6133     */
6134     public function majDateInstruction($instruction_id, $date_depot) {
6135    
6136     // Definalise l'instruction de récépissé si nécessaire
6137 softime 7996 $instruction = $this->f->get_inst__om_dbform(array(
6138     "obj" => "instruction",
6139     "idx" => $instruction_id,
6140     ));
6141 softime 7366 $instruction->setParameter('maj', 110);
6142     //
6143     if ($instruction->is_unfinalizable_without_bypass() === true
6144     && $instruction->unfinalize($instruction->valF) === false) {
6145     return false;
6146     }
6147    
6148     // Modifie la date d'événement
6149     $instruction->setParameter('maj', 1);
6150     //
6151     $valF = array();
6152     foreach ($instruction->champs as $id => $champ) {
6153     $valF[$champ] = $instruction->getVal($champ);
6154     }
6155     //
6156     $valF['date_evenement'] = $date_depot;
6157     $valF['date_finalisation_courrier'] = null;
6158     //
6159 softime 8989 $modification = $instruction->modifier($valF);
6160 softime 7366 //
6161     if ($modification === false) {
6162     return false;
6163     }
6164    
6165     // Finalise l'instruction
6166     $instruction->setParameter('maj', 100);
6167     if ($instruction->finalize($instruction->valF) === false) {
6168     return false;
6169     }
6170    
6171     //
6172     return true;
6173     }
6174    
6175     /**
6176 softime 10573 * TODO: replace with '$this->f->findObjectById' ?
6177     *
6178 softime 6272 * Récupère l'instance de l'autorité compétente.
6179     *
6180     * @param string $autorite_competente Identifiant de l'autorité compétente.
6181     *
6182     * @return object
6183     */
6184     function get_inst_autorite_competente($autorite_competente = null) {
6185     //
6186     return $this->get_inst_common("autorite_competente", $autorite_competente);
6187     }
6188    
6189    
6190     /**
6191 softime 6929 * Met à jour les montants des taxes du dossier d'instruction.
6192 mbroquet 3730 *
6193 softime 6929 * @param integer $tax_secteur Secteur communal.
6194     * @param array $val Valeurs des données techniques.
6195 mbroquet 3730 *
6196     * @return boolean
6197     */
6198 softime 6929 public function update_dossier_tax_mtn($tax_secteur, $val = array()) {
6199 mbroquet 3730 // Instance du paramétrage de la taxe d'aménagement
6200     $taxe_amenagement = $this->get_inst_taxe_amenagement();
6201    
6202 softime 6929 // Liste des montants à mettre à jour
6203     $valF = array();
6204     $valF['tax_mtn_part_commu'] = null;
6205     $valF['tax_mtn_part_depart'] = null;
6206     $valF['tax_mtn_part_reg'] = null;
6207     $valF['tax_mtn_total'] = null;
6208     $valF['tax_mtn_rap'] = null;
6209     $valF['tax_mtn_part_commu_sans_exo'] = null;
6210     $valF['tax_mtn_part_depart_sans_exo'] = null;
6211     $valF['tax_mtn_part_reg_sans_exo'] = null;
6212     $valF['tax_mtn_total_sans_exo'] = null;
6213     $valF['tax_mtn_rap_sans_exo'] = null;
6214 mbroquet 3730
6215 softime 6929 // Si le tableau des valeurs n'est pas vide
6216     if ($val !== array()) {
6217 mbroquet 3730
6218 softime 6929 // Si le taux communal est renseigné
6219     if ($taxe_amenagement->getVal('tx_comm_secteur_'.$tax_secteur) !== null
6220     && $taxe_amenagement->getVal('tx_comm_secteur_'.$tax_secteur) !== '') {
6221 mbroquet 3730
6222 softime 6929 // Calcul de la TA
6223     $calcul_ta = $taxe_amenagement->compute_ta($tax_secteur, $val);
6224    
6225     // Si chaque résultat est calculable
6226     if ($calcul_ta !== null && is_array($calcul_ta) === true) {
6227    
6228     // Total des parts de la TA avec exonération
6229     $total_ta = $calcul_ta['commu'] + $calcul_ta['depart'] + $calcul_ta['reg'];
6230     $total_ta_ss_exo = $calcul_ta['commu_ss_exo'] + $calcul_ta['depart_ss_exo'] + $calcul_ta['reg_ss_exo'];
6231    
6232     // Valeurs à mettre à jour, les montants doivent être à l'entier
6233     // inférieur
6234     $valF['tax_mtn_part_commu'] = floor($calcul_ta['commu']);
6235     $valF['tax_mtn_part_depart'] = floor($calcul_ta['depart']);
6236     $valF['tax_mtn_part_reg'] = floor($calcul_ta['reg']);
6237     $valF['tax_mtn_total'] = floor($total_ta);
6238     $valF['tax_mtn_part_commu_sans_exo'] = floor($calcul_ta['commu_ss_exo']);
6239     $valF['tax_mtn_part_depart_sans_exo'] = floor($calcul_ta['depart_ss_exo']);
6240     $valF['tax_mtn_part_reg_sans_exo'] = floor($calcul_ta['reg_ss_exo']);
6241     $valF['tax_mtn_total_sans_exo'] = floor($total_ta_ss_exo);
6242     }
6243     }
6244    
6245     // Calcul de la RAP
6246     $calcul_rap = $taxe_amenagement->compute_rap($val);
6247    
6248     // Si chaque résultat est calculable
6249     if ($calcul_rap !== null && is_array($calcul_rap) === true) {
6250    
6251     // RAP avec exonération
6252     $mtn_rap = $calcul_rap['rap'];
6253     // RAP sans exonération
6254     $mtn_rap_ss_exo = $calcul_rap['rap_ss_exo'];
6255    
6256     // Valeurs à mettre à jour, les montants doivent être à l'entier
6257     // inférieur
6258     $valF['tax_mtn_rap'] = floor($mtn_rap);
6259     $valF['tax_mtn_rap_sans_exo'] = floor($mtn_rap_ss_exo);
6260     }
6261 mbroquet 3730 }
6262    
6263     // Met à jour l'enregistrement de dossier
6264 softime 8989 $res = $this->f->db->autoExecute(
6265 softime 6929 DB_PREFIXE.$this->table,
6266     $valF,
6267     DB_AUTOQUERY_UPDATE,
6268     $this->clePrimaire ."='".$this->getVal($this->clePrimaire)."'"
6269     );
6270 mbroquet 3730 // Log
6271     $this->f->addToLog(__METHOD__."() : db->autoExecute(".$res.")", VERBOSE_MODE);
6272     //
6273     if ($this->f->isDatabaseError($res, true)) {
6274     //
6275     $this->correct = false;
6276     return false;
6277     }
6278    
6279     //
6280     return true;
6281     }
6282    
6283 softime 8477 /**
6284 softime 8989 * TRIGGER - triggersupprimer.
6285 softime 8477 *
6286     * @return boolean
6287     */
6288 softime 8989 function triggersupprimer($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
6289     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
6290 softime 6929
6291 softime 8477 // Le dossier d'instruction n'est pas supprimé si celui-ci est lié à un
6292     // contentieux
6293     $autorisation_contestee = $this->get_idx_by_args('autorisation_contestee', 'dossier', 'autorisation_contestee', $this->getVal($this->clePrimaire));
6294     if ($autorisation_contestee !== null && $autorisation_contestee !== '') {
6295     $this->addToMessage("Le dossier d'instruction ne peut pas être supprimé car celui-ci est lié à un contentieux.");
6296     return false;
6297     }
6298    
6299     /**
6300     * Gestion de la suppression des tables liées au dossier d'instruction.
6301     * Les fichiers potentiellement liés aux tables ne sont pas supprimés.
6302     */
6303     // Tableau pour la conception des requêtes de suppression
6304     $related_tables = array(
6305     'lien_demande_demandeur' => array(
6306     'condition_field' => 'demande',
6307     'condition_value' => $this->get_idx_by_args('demande', 'demande', 'dossier_instruction', $this->getVal($this->clePrimaire)),
6308     ),
6309     'demande' => array(
6310     'condition_field' => 'dossier_instruction',
6311     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6312     ),
6313     'lien_dossier_demandeur' => array(
6314     'condition_field' => 'dossier',
6315     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6316     ),
6317 softime 11228 'instruction_notification_document' => array(
6318     'condition_field' => 'instruction_notification',
6319     'condition_value' => sprintf('SELECT %2$s FROM %1$s%2$s WHERE %3$s IN (%4$s)', DB_PREFIXE, 'instruction_notification', 'instruction', sprintf('SELECT %2$s FROM %1$s%2$s WHERE %3$s = \'%4$s\'', DB_PREFIXE, 'instruction', 'dossier', $this->getVal($this->clePrimaire))),
6320     ),
6321     'instruction_notification' => array(
6322     'condition_field' => 'instruction',
6323     'condition_value' => sprintf('SELECT %2$s FROM %1$s%2$s WHERE %3$s = \'%4$s\'', DB_PREFIXE, 'instruction', 'dossier', $this->getVal($this->clePrimaire)),
6324     ),
6325 softime 8477 'instruction' => array(
6326     'condition_field' => 'dossier',
6327     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6328     ),
6329     'dossier_parcelle' => array(
6330     'condition_field' => 'dossier',
6331     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6332     ),
6333     'dossier_contrainte' => array(
6334     'condition_field' => 'dossier',
6335     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6336     ),
6337     'lien_donnees_techniques_moyen_retenu_juge' => array(
6338     'condition_field' => 'donnees_techniques',
6339     'condition_value' => $this->get_idx_by_args('donnees_techniques', 'donnees_techniques', 'dossier_instruction', $this->getVal($this->clePrimaire)),
6340     ),
6341     'lien_donnees_techniques_moyen_souleve' => array(
6342     'condition_field' => 'donnees_techniques',
6343     'condition_value' => $this->get_idx_by_args('donnees_techniques', 'donnees_techniques', 'dossier_instruction', $this->getVal($this->clePrimaire)),
6344     ),
6345     'donnees_techniques_di' => array(
6346     'table' => 'donnees_techniques',
6347     'condition_field' => 'dossier_instruction',
6348     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6349     ),
6350     'blocnote' => array(
6351     'condition_field' => 'dossier',
6352     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6353     ),
6354 softime 11228 'consultation_entrante' => array(
6355     'condition_field' => 'dossier',
6356     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6357     ),
6358 softime 8477 'consultation' => array(
6359     'condition_field' => 'dossier',
6360     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6361     ),
6362     'document_numerise' => array(
6363     'condition_field' => 'dossier',
6364     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6365     ),
6366     'rapport_instruction' => array(
6367     'condition_field' => 'dossier_instruction',
6368     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6369     ),
6370     'dossier_commission' => array(
6371     'condition_field' => 'dossier',
6372     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6373     ),
6374     'dossier_message' => array(
6375     'condition_field' => 'dossier',
6376     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6377     ),
6378     'lien_dossier_dossier_1' => array(
6379     'table' => 'lien_dossier_dossier',
6380     'condition_field' => 'dossier_src',
6381     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6382     ),
6383     'lien_dossier_dossier_2' => array(
6384     'table' => 'lien_dossier_dossier',
6385     'condition_field' => 'dossier_cible',
6386     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6387     ),
6388     'dossier_geolocalisation' => array(
6389     'condition_field' => 'dossier',
6390     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6391     ),
6392     'donnees_techniques_lot' => array(
6393     'table' => 'donnees_techniques',
6394     'condition_field' => 'lot',
6395     'condition_value' => $this->get_idx_by_args("string_agg(lot::text, ', ')", 'lot', 'dossier', $this->getVal($this->clePrimaire)),
6396     ),
6397     'lien_lot_demandeur' => array(
6398     'condition_field' => 'lot',
6399     'condition_value' => $this->get_idx_by_args("string_agg(lot::text, ', ')", 'lot', 'dossier', $this->getVal($this->clePrimaire)),
6400     ),
6401     'lot' => array(
6402     'condition_field' => 'dossier',
6403     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6404     ),
6405     );
6406     // Supprime les enregistrements des tables
6407     $delete = $this->delete_related_tables($related_tables);
6408     if ($delete === false) {
6409     return false;
6410     }
6411    
6412     //
6413     return true;
6414     }
6415    
6416 mbroquet 3730 /**
6417 softime 8989 * TRIGGER - triggersupprimerapres.
6418 softime 8477 *
6419     * @return boolean
6420 mbroquet 3730 */
6421 softime 8989 function triggersupprimerapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
6422     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
6423 mbroquet 3730
6424 softime 8477 /**
6425     * Gestion de la suppression des tables liées au dossier d'instruction.
6426     * Dans le cas d'un dossier d'instruction initial le dossier
6427     * d'autorisation est également supprimé pour libérer la numéroration.
6428     * S'il s'agit d'un dossier d'instruction sur exsitant alors le dossier
6429     * d'autorisation est mise à jour.
6430     * Les fichiers potentiellement liés aux tables ne sont pas supprimés.
6431     */
6432     // S'il s'agit d'une suppression de dossier d'instruction sur existant
6433     if ($this->has_only_initial_di(true) === false) {
6434     // Mise à jour des données du dossier d'autorisation
6435     $da = $this->f->get_inst__om_dbform(array(
6436     "obj" => "dossier_autorisation",
6437     "idx" => $this->getVal("dossier_autorisation"),
6438     ));
6439     $da->majDossierAutorisation();
6440 mbroquet 3730
6441 softime 8477 } else {
6442     // S'il s'agit d'une suppression de dossier d'instruction initial
6443     // Tableau pour la conception des requêtes de suppression
6444     $related_tables = array(
6445     'lien_dossier_autorisation_demandeur' => array(
6446     'condition_field' => 'dossier_autorisation',
6447     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
6448     ),
6449     'dossier_autorisation_parcelle' => array(
6450     'condition_field' => 'dossier_autorisation',
6451     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
6452     ),
6453     'donnees_techniques' => array(
6454     'condition_field' => 'dossier_autorisation',
6455     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
6456     ),
6457     'dossier_autorisation' => array(
6458     'condition_field' => 'dossier_autorisation',
6459     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
6460     ),
6461     );
6462     // Supprime les tables
6463     $delete = $this->delete_related_tables($related_tables);
6464     if ($delete === false) {
6465     return false;
6466     }
6467    
6468     /**
6469     * Mise à jour de la séquence.
6470     */
6471 softime 8989 $curr_da_num = $this->get_max_da_num();
6472     if (is_integer($curr_da_num) !== true) {
6473     $this->addToMessage(__('Erreur lors du calcul du numéro de dossier.'));
6474     return false;
6475     }
6476 softime 10573
6477     $seq_name = $this->get_sequence_name();
6478     if (empty($seq_name) === true) {
6479     $this->f->addToLog(sprintf('%s() : %s',
6480     __METHOD__,
6481     __("Échec de la récupération du nom de la séquence.")
6482     ), DEBUG_MODE);
6483     return false;
6484     }
6485    
6486 softime 8477 // Dans le cas de la suppression du dernier dossier d'instruction de
6487     // sa numérotation alors la séquence est supprimée
6488 softime 8989 if ($curr_da_num === 0) {
6489 softime 10573 $table_name = substr($seq_name, 0, -4);
6490 softime 8989 $res = $this->f->db->dropSequence($table_name);
6491 softime 8477 $this->f->addToLog(__METHOD__."(): db->createSequence(\"".$table_name."\");", VERBOSE_MODE);
6492     $this->f->isDatabaseError($res);
6493    
6494     } else {
6495     // La méthode setval avec la valeur true en troisième argument
6496     // signifie que le prochain nextval avancera la séquence avant
6497     // de renvoyer une valeur.
6498     $sql = sprintf("
6499     SELECT setval('%s', %s, true)",
6500 softime 10573 $seq_name,
6501 softime 8989 $curr_da_num
6502 softime 8477 );
6503     $res = $this->f->db->query($sql);
6504     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
6505     $this->f->isDatabaseError($res);
6506     }
6507     }
6508    
6509     /**
6510     * Supprime le dossier d'instruction des derniers dossiers consultés,
6511     * sauvegardé en session
6512     */
6513     if (isset($_SESSION['dossiers_consulte']) !== false) {
6514     $id_di = $this->getVal($this->clePrimaire);
6515     if (in_array($id_di, $_SESSION['dossiers_consulte']) === true) {
6516     unset($_SESSION['dossiers_consulte'][$id_di]);
6517     }
6518     // Supprime le tableau s'il n'y a plus de dossier consulté
6519     if (count($_SESSION['dossiers_consulte']) === 0) {
6520     unset($_SESSION['dossiers_consulte']);
6521     }
6522     }
6523 softime 10573
6524     /**
6525     * Gestion des tâches pour la dématérialisation
6526     */
6527     $inst_task_empty = $this->f->get_inst__om_dbform(array(
6528     "obj" => "task",
6529     "idx" => 0,
6530     ));
6531     $task_types = array(
6532     "creation_DI",
6533     "depot_DI",
6534     );
6535     foreach ($task_types as $task_type) {
6536     $task_exists = $inst_task_empty->task_exists($task_type, $id);
6537     if ($task_exists !== false) {
6538     $inst_task = $this->f->get_inst__om_dbform(array(
6539     "obj" => "task",
6540     "idx" => $task_exists,
6541     ));
6542     if ($inst_task->getVal('state') === $inst_task::STATUS_NEW || $inst_task->getVal('state') === $inst_task::STATUS_DRAFT) {
6543     $task_val = array(
6544     'state' => $inst_task::STATUS_CANCELED,
6545     );
6546     $update_task = $inst_task->update_task(array('val' => $task_val));
6547     if ($update_task === false) {
6548     $this->addToMessage(sprintf('%s %s',
6549     sprintf(__("Une erreur s'est produite lors de la modification de la tâche %."), $inst_task->getVal($inst_task->clePrimaire)),
6550     __("Veuillez contacter votre administrateur.")
6551     ));
6552     $this->correct = false;
6553     return false;
6554     }
6555     }
6556     }
6557     }
6558    
6559     return true;
6560 mbroquet 3730 }
6561 softime 8477
6562 mbroquet 3730 /**
6563 softime 8477 * TREATMENT - delete_related_tables.
6564     *
6565     * Suppression par requête SQL les enregistrements des tables passées en
6566     * paramètre.
6567     *
6568     * @param array $related_tables Liste des enregistrements à supprimer
6569     *
6570     * @return boolean
6571     */
6572     function delete_related_tables(array $related_tables) {
6573     $this->begin_treatment(__METHOD__);
6574    
6575     // Supprime chaque enregistrement liés au dossier d'instruction
6576     $template_delete_sql = 'DELETE FROM %s%s WHERE %s IN (%s)';
6577     foreach ($related_tables as $table => $value) {
6578     if (isset($value['table']) === true) {
6579     $table = $value['table'];
6580     }
6581     if ($value['condition_value'] !== '' && $value['condition_value'] !== null) {
6582     $sql = sprintf($template_delete_sql, DB_PREFIXE, $table, $value['condition_field'], $value['condition_value']);
6583     $res = $this->f->db->query($sql);
6584     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
6585     $this->f->isDatabaseError($res);
6586 softime 10573
6587     /**
6588     * Gestion des tâches pour la dématérialisation
6589     */
6590     // Annule toutes les tâches liées au dossier
6591     $inst_task_empty = $this->f->get_inst__om_dbform(array(
6592     "obj" => "task",
6593     "idx" => 0,
6594     ));
6595     $all_task_type = array_merge($inst_task_empty::TASK_TYPE_SI, $inst_task_empty::TASK_TYPE_SC);
6596     foreach ($all_task_type as $task_type) {
6597     $task_exists = $inst_task_empty->task_exists($task_type, $this->getVal($this->clePrimaire), $this->getVal($this->clePrimaire));
6598     if ($task_exists !== false) {
6599     $inst_task = $this->f->get_inst__om_dbform(array(
6600     "obj" => "task",
6601     "idx" => $task_exists,
6602     ));
6603     if ($inst_task->getVal('state') === $inst_task::STATUS_NEW || $inst_task->getVal('state') === $inst_task::STATUS_DRAFT) {
6604     $task_val = array(
6605     'state' => $inst_task::STATUS_CANCELED,
6606     );
6607     $update_task = $inst_task->update_task(array('val' => $task_val));
6608     if ($update_task === false) {
6609     $this->addToMessage(sprintf('%s %s',
6610     sprintf(__("Une erreur s'est produite lors de la modification de la tâche %."), $inst_task->getVal($inst_task->clePrimaire)),
6611     __("Veuillez contacter votre administrateur.")
6612     ));
6613     $this->correct = false;
6614     return false;
6615     }
6616     }
6617     }
6618     }
6619     // Spécifique au dossier d'autorisation
6620     if ($table === 'dossier_autorisation') {
6621     $task_exists = $inst_task_empty->task_exists('creation_DA', $this->getVal($table));
6622     if ($task_exists !== false) {
6623     $inst_task = $this->f->get_inst__om_dbform(array(
6624     "obj" => "task",
6625     "idx" => $task_exists,
6626     ));
6627     if ($inst_task->getVal('state') === $inst_task::STATUS_NEW || $inst_task->getVal('state') === $inst_task::STATUS_DRAFT) {
6628     $task_val = array(
6629     'state' => $inst_task::STATUS_CANCELED,
6630     );
6631     $update_task = $inst_task->update_task(array('val' => $task_val));
6632     if ($update_task === false) {
6633     $this->addToMessage(sprintf('%s %s',
6634     sprintf(__("Une erreur s'est produite lors de la modification de la tâche %."), $inst_task->getVal($inst_task->clePrimaire)),
6635     __("Veuillez contacter votre administrateur.")
6636     ));
6637     $this->correct = false;
6638     return false;
6639     }
6640     }
6641     }
6642     }
6643 softime 8477 }
6644     }
6645    
6646     return $this->end_treatment(__METHOD__, true);
6647     }
6648    
6649     /**
6650     * CONDITION - has_only_initial_di.
6651     *
6652     * Permet de vérifier qu'il s'agit du dossier d'instruction initial de
6653     * l'autorisation.
6654     *
6655     * @param boolean $after_delete À activer si la méthode est utilisée lors de
6656     * la suppression.
6657     *
6658     * @return boolean
6659     */
6660     function has_only_initial_di($after_delete=false) {
6661    
6662     // Compte le nombre de dossier lié au dossier d'autorisation
6663     $res = $this->get_idx_by_args('COUNT(dossier)', 'dossier', 'dossier_autorisation', $this->getVal('dossier_autorisation'));
6664    
6665     // Si la méthode est utilisé dans le triggersupprimerapres alors le
6666     // dossier d'instruction est déjà supprimé dans la base de données, le
6667     // retour doit donc être 0 pour prouver la suppression du DI initial
6668     if ($after_delete === true) {
6669     if ($res === '0') {
6670     return true;
6671     }
6672     //
6673     return false;
6674     }
6675    
6676     // S'il y a qu'un seul dossier d'instruction alors le DI courant est
6677     // forcément l'initial
6678     if ($res === '1') {
6679     return true;
6680     }
6681     //
6682     return false;
6683     }
6684    
6685     /**
6686     * Récupère la dernière valeur d'une séquence.
6687     *
6688     * @param string $sequence_name Nom de la séquence (optionnel)
6689     *
6690     * @return integer Dernière valeur de la séquence
6691     */
6692     function get_last_value_sequence($sequence_name=null) {
6693     // Récupère autoamtiquement le nom de la séquence du dossier
6694     // d'instruction courant
6695     if ($sequence_name === null) {
6696     $sequence_name = $this->get_sequence_name();
6697 softime 10573
6698     if (empty($sequence_name) === true) {
6699     $this->f->addToLog(sprintf('%s() : %s',
6700     __METHOD__,
6701     __("Échec de la récupération du nom de la séquence.")
6702     ), DEBUG_MODE);
6703     return false;
6704     }
6705 softime 8477 }
6706    
6707     $sql = sprintf(
6708     "SELECT last_value FROM %s",
6709 softime 10573 $sequence_name
6710 softime 8477 );
6711 softime 11057 $res = $this->f->get_one_result_from_db_query($sql, true);
6712     if ($res['code'] === 'KO') {
6713     return false;
6714     }
6715 softime 8477
6716 softime 11057 return intval($res['result']);
6717 softime 8477 }
6718    
6719     /**
6720 softime 8989 * [get_max_da_num description]
6721     * @param [type] $sequence_name [description]
6722     * @return [type] [description]
6723     */
6724     function get_max_da_num($sequence_name = null) {
6725     if ($sequence_name === null) {
6726     $sequence_name = $this->get_sequence_name();
6727     }
6728     $da = $this->f->get_inst__om_dbform(array(
6729     "obj" => "dossier_autorisation",
6730     "idx" => $this->getVal('dossier_autorisation'),
6731     ));
6732     if ($da->doesNumeroDossierSequenceExists($sequence_name) !== true) {
6733     return false;
6734     }
6735     $sequence_args = $this->get_sequence_args();
6736     return $da->getMaxDANumeroDossier($sequence_args['datc'], $sequence_args['annee'], $sequence_args['dep'], $sequence_args['com']);
6737     }
6738    
6739     /**
6740 mbroquet 3730 * Retourne la reference cadastrale de la demande attache a un dossier ERP
6741     * specifique
6742     * @param string $dossier L'identifiant du dossier
6743     * @return string|null La reference cadastrale si elle est trouve,
6744     * sinon NULL. En cas d'erreur de la BD, l'execution s'arrete.
6745     */
6746     function getReferenceCadastrale($dossier) {
6747     $sql = "SELECT terrain_references_cadastrales FROM ".DB_PREFIXE."demande WHERE dossier_instruction = '" . $dossier . "'";
6748 softime 8989 $res = $this->f->db->limitquery($sql, 0, 1);
6749 mbroquet 3730 $this->addToLog("getReferenceCadastrale(): db->limitquery(\"".
6750     str_replace(",",", ",$sql)."\", 0, 1);", VERBOSE_MODE);
6751     // Si une erreur survient on die
6752     if (database::isError($res, true)) {
6753     // Appel de la methode de recuperation des erreurs
6754     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), 'demande');
6755     }
6756     // retourne la nature du dossier
6757     while ($row =& $res->fetchRow()) {
6758     return $row[0];
6759     }
6760     // la nature n'etait pas trouve, ce qui ne devrait pas se passer
6761     return NULL;
6762     }
6763    
6764     /**
6765 softime 6565 * Supprime puis recrée tous les liens entre dossier et demandeurs
6766 mbroquet 3730 **/
6767 softime 8989 function insertLinkDossierDemandeur() {
6768 softime 6565 // Suppression des anciens demandeurs
6769 softime 8989 $this->deleteLinkDossierDemandeur();
6770 softime 6565 $types_demandeur = array(
6771     "petitionnaire_principal",
6772     "delegataire",
6773     "petitionnaire",
6774     "plaignant_principal",
6775     "plaignant",
6776     "contrevenant_principal",
6777     "contrevenant",
6778     "requerant_principal",
6779     "requerant",
6780     "avocat_principal",
6781     "avocat",
6782 softime 7067 "bailleur_principal",
6783     "bailleur",
6784 softime 10573 "proprietaire",
6785     "architecte_lc",
6786     "paysagiste",
6787 softime 6565 );
6788     foreach ($types_demandeur as $type) {
6789     // Comparaison des autres demandeurs
6790     if(isset($this->postedIdDemandeur[$type]) === true) {
6791     // Ajout des nouveaux liens
6792     foreach ($this->postedIdDemandeur[$type] as $demandeur) {
6793     //
6794     $principal = false;
6795     if (strpos($type, '_principal') !== false) {
6796     $principal = true;
6797     }
6798 softime 8989 if ($this->addLinkDossierDemandeur($demandeur, $principal) === false) {
6799 softime 6565 //
6800     return false;
6801     }
6802     }
6803 mbroquet 3730 }
6804     }
6805     }
6806    
6807    
6808     /**
6809     * Fonction permettant d'ajouter un lien
6810 softime 6565 * entre la table dossier et demandeur
6811 mbroquet 3730 **/
6812 softime 8989 function addLinkDossierDemandeur($id, $principal) {
6813 softime 7996 $lienAjout = $this->f->get_inst__om_dbform(array(
6814     "obj" => "lien_dossier_demandeur",
6815     "idx" => "]",
6816     ));
6817 mbroquet 3730 $lien = array('lien_dossier_demandeur' => "",
6818     'petitionnaire_principal' => (($principal)?"t":"f"),
6819     'dossier' => $this->valF['dossier'],
6820     'demandeur' => $id);
6821 softime 8989 $lienAjout->ajouter($lien);
6822 mbroquet 3730 $lienAjout->__destruct();
6823     }
6824    
6825     /**
6826     * Fonction permettant de supprimer un lien
6827     * entre la table demande et demandeur
6828     **/
6829 softime 8989 function deleteLinkDossierDemandeur() {
6830 mbroquet 3730 // Suppression
6831     $sql = "DELETE FROM ".DB_PREFIXE."lien_dossier_demandeur ".
6832     "WHERE dossier='".$this->valF['dossier']."'";
6833     // Execution de la requete de suppression de l'objet
6834 softime 8989 $res = $this->f->db->query($sql);
6835 mbroquet 3730 // Logger
6836 softime 6565 $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
6837 mbroquet 3730 if ( database::isError($res)){
6838     die();
6839     }
6840     }
6841    
6842     /**
6843     * Methode de recupération des valeurs postées
6844     **/
6845     function getPostedValues() {
6846     // Récupération des demandeurs dans POST
6847 softime 6565 $types_demandeur = array(
6848     "petitionnaire_principal",
6849     "delegataire",
6850     "petitionnaire",
6851     "plaignant_principal",
6852     "plaignant",
6853     "contrevenant_principal",
6854     "contrevenant",
6855     "requerant_principal",
6856     "requerant",
6857     "avocat_principal",
6858     "avocat",
6859 softime 7067 "bailleur_principal",
6860     "bailleur",
6861 softime 10573 "proprietaire",
6862     "architecte_lc",
6863     "paysagiste",
6864 softime 6565 );
6865     foreach ($types_demandeur as $type) {
6866     if($this->f->get_submitted_post_value($type) !== null AND
6867     $this->f->get_submitted_post_value($type) != '') {
6868     $this->postedIdDemandeur[$type] = $this->f->get_submitted_post_value($type);
6869 mbroquet 3730 }
6870     }
6871     }
6872    
6873     /**
6874     * Méthode permettant de récupérer les id des demandeurs liés à la table
6875     * liée passée en paramètre
6876     *
6877     * @param string $from Table liée : "demande", "dossier", dossier_autorisation"
6878     * @param string $id Identifiant (clé primaire de la table liée en question)
6879     */
6880     function listeDemandeur($from, $id) {
6881 softime 6565
6882     // Si la donnée membre a déjà été remplie par un précédent appel à cette méthode,
6883     // on sort.
6884     if ($this->valIdDemandeur["petitionnaire_principal"] !== array() or
6885     $this->valIdDemandeur["delegataire"] !== array() or
6886     $this->valIdDemandeur["petitionnaire"] !== array() or
6887     $this->valIdDemandeur["plaignant_principal"] !== array() or
6888     $this->valIdDemandeur["plaignant"] !== array() or
6889     $this->valIdDemandeur["contrevenant_principal"] !== array() or
6890     $this->valIdDemandeur["contrevenant"] !== array() or
6891     $this->valIdDemandeur["requerant_principal"] !== array() or
6892     $this->valIdDemandeur["requerant"] !== array() or
6893     $this->valIdDemandeur["avocat_principal"] !== array() or
6894 softime 7067 $this->valIdDemandeur["avocat"] !== array() or
6895     $this->valIdDemandeur["bailleur_principal"] !== array() or
6896 softime 10573 $this->valIdDemandeur["bailleur"] !== array() or
6897     $this->valIdDemandeur["proprietaire"] !== array() or
6898     $this->valIdDemandeur["architecte_lc"] !== array() or
6899     $this->valIdDemandeur["paysagiste"] !== array()) {
6900 softime 6565 return;
6901     }
6902    
6903 mbroquet 3730 // Récupération des demandeurs de la base
6904     $sql = "SELECT demandeur.demandeur,
6905     demandeur.type_demandeur,
6906     lien_".$from."_demandeur.petitionnaire_principal
6907     FROM ".DB_PREFIXE."lien_".$from."_demandeur
6908     INNER JOIN ".DB_PREFIXE."demandeur
6909     ON demandeur.demandeur=lien_".$from."_demandeur.demandeur
6910     WHERE ".$from." = '".$id."'";
6911     $res = $this->f->db->query($sql);
6912     $this->f->addToLog("listeDemandeur(): db->query(\"".$sql."\")", VERBOSE_MODE);
6913 softime 6565 $this->f->isDatabaseError($res);
6914    
6915 mbroquet 3730 // Stockage du résultat dans un tableau
6916     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
6917 softime 6565
6918     $demandeur_type = $row['type_demandeur'];
6919     if ($row['petitionnaire_principal'] == 't'){
6920     $demandeur_type .= "_principal";
6921 mbroquet 3730 }
6922 softime 6565 $this->valIdDemandeur[$demandeur_type][] = $row['demandeur'];
6923 mbroquet 3730 }
6924     }
6925    
6926     /**
6927     * Récupère la liste des contraintes d'un dossier.
6928     *
6929 softime 4740 * @param string $dossier Identifiant du dossier.
6930     * @param boolean $for_di_view Liste avec condition affichage DI.
6931     *
6932 mbroquet 3730 * @return object Résultat de la requête
6933     */
6934 softime 4740 function getListContrainte($dossier, $for_di_view = true) {
6935 mbroquet 3730
6936     // Select
6937     $select = "SELECT dossier_contrainte.dossier_contrainte as dossier_contrainte_id,
6938     dossier_contrainte.texte_complete as dossier_contrainte_texte,
6939     dossier_contrainte.reference as dossier_contrainte_reference,
6940     contrainte.libelle as contrainte_libelle,
6941     contrainte.nature as contrainte_nature,
6942     contrainte.texte as contrainte_texte,
6943     contrainte.reference as contrainte_reference,
6944     lower(contrainte.groupe) as contrainte_groupe,
6945     lower(contrainte.sousgroupe) as contrainte_sousgroupe ";
6946    
6947     // From
6948     $from = " FROM ".DB_PREFIXE."contrainte
6949     LEFT JOIN ".DB_PREFIXE."dossier_contrainte
6950     ON dossier_contrainte.contrainte = contrainte.contrainte ";
6951    
6952     // Where
6953     $where = " WHERE dossier_contrainte.dossier = '".$dossier."' ";
6954    
6955 softime 4740 // Si les contraintes sont listées pour être affichées dans le DI
6956     if ($for_di_view === true) {
6957     // Si le paramètre "option_contrainte_di" est défini
6958     if ($this->f->getParameter('option_contrainte_di') != 'aucun') {
6959     // Ajoute la condition
6960     $where .= $this->f->traitement_condition_contrainte(
6961     $this->f->getParameter('option_contrainte_di'));
6962     }
6963 mbroquet 3730 }
6964    
6965     // Tri
6966     $tri = " ORDER BY contrainte_groupe DESC, contrainte_sousgroupe,
6967     contrainte.no_ordre, contrainte.libelle ";
6968    
6969     // Requête SQL
6970     $sql = $select.$from.$where.$tri;
6971     $res = $this->f->db->query($sql);
6972     $this->f->addToLog("listContrainte(): db->query(\"".$sql."\");", VERBOSE_MODE);
6973     $this->f->isDatabaseError($res);
6974    
6975     // Retourne le résultat
6976     return $res;
6977     }
6978    
6979     /**
6980 softime 11585 * Récupère les informations à afficher dans le tableau des identifiants
6981     * tehniques Plat'AU. Stocke ces informations dans un tableau.
6982     * Converti le tableau au format json et renvoi le json obtenu
6983     *
6984     * @return json
6985     */
6986     protected function get_json_lien_iiue() {
6987     // Tableau de retour
6988     $val_suivi = array();
6989    
6990     // Liste des champs à afficher. Permet également la traduction des noms de colonnes.
6991     $liste_champs = array(
6992     'object' => __('type'),
6993     'object_id' => __('identifiant openADS'),
6994     'external_uid' => __("identifiant Plat'AU"),
6995     'state' => __('état du versement'),
6996     );
6997     // Mapping entre la valeur 'object' de la table de liaison des identifiants
6998     // et la valeur de 'object' dans la tables des tâches
6999     $mapping_one_to_one_object_liiue_task = array(
7000     'dossier_autorisation' => 'creation_DA',
7001     'dossier' => 'creation_DI',
7002     'piece' => 'ajout_piece',
7003     'consultation' => 'creation_consultation',
7004     'instruction_action_cl' => 'envoi_CL',
7005     );
7006     // Traduction des états de versement
7007     $trad_state = array(
7008     'done' => sprintf('%s %s', __('terminé'), '[V]'),
7009     'pending' => __('en cours'),
7010     'error' => __('en erreur'),
7011     'new' => __('à réaliser'),
7012     );
7013     // Traduction des objets
7014     $trad_object = array(
7015     'dossier_autorisation' => __('dossier_autorisation'),
7016     'dossier' => __('dossier'),
7017     'piece' => __('pièce'),
7018     'dossier_consultation' => __('consultation'),
7019     'pec_dossier_consultation' => __('prise en compte'),
7020     'avis_dossier_consultation' => __('avis'),
7021     'instruction_action_cl' => __('instruction transmise au CL'),
7022     );
7023     // Instance de la table de liaison des identifiants
7024     $inst_liiue = $this->f->get_inst__om_dbform(array(
7025     "obj" => "lien_id_interne_uid_externe",
7026     "idx" => 0,
7027     ));
7028     // Instance de la table des tâches
7029     $inst_task = $this->f->get_inst__om_dbform(array(
7030     "obj" => "task",
7031     "idx" => 0,
7032     ));
7033     // Récupération de toutes les occurences du dossier en cours dans la table des
7034     // liaisons des identifiants
7035     $external_uids = $inst_liiue->get_all_lien_id_interne_uid_externe_by_dossier($this->getVal('dossier'), 'platau');
7036     if (is_array($external_uids) === true && count($external_uids) > 0) {
7037     //
7038     foreach ($external_uids as $external_uid) {
7039    
7040     /**
7041     * Gestion de l'état du versement dans Plat'AU
7042     */
7043     // État par défaut
7044     $external_uid['state'] = __('état non disponible');
7045     // Tente d'identifier le type, dans certains cas il n'est pas
7046     // possible de le définir avec certitude
7047     $type = isset($mapping_one_to_one_object_liiue_task[$external_uid['object']]) === true ? $mapping_one_to_one_object_liiue_task[$external_uid['object']] : null;
7048     $search_values = array(
7049     sprintf('type = \'%s\'', $type),
7050     sprintf('object_id = \'%s\'', $external_uid['object_id']),
7051     sprintf('state != \'%s\'', $inst_task::STATUS_CANCELED),
7052     );
7053     // Si le type ne peut pas être défini avec certitude, alors on ne
7054     // l'inclut pas dans la recherche de la tâche
7055     if ($type === null) {
7056     unset($search_values[0]);
7057     }
7058     $task_exists = $inst_task->task_exists_multi_search($search_values);
7059     // Pour récupérer un état, il ne faut qu'un résultat
7060     if ($task_exists !== false) {
7061     //
7062     foreach ($task_exists as $task_value) {
7063     $external_uid['state'] = $task_value['state'];
7064     if ($task_value['state'] === 'pending') {
7065     break;
7066     }
7067     }
7068     }
7069     // Remplace les valeurs des états de versement par les traductions
7070     foreach ($trad_state as $key => $value) {
7071     if ($external_uid['state'] === $key) {
7072     $external_uid['state'] = $value;
7073     }
7074     }
7075    
7076     // Remplace les valeurs des états de versement par les traductions
7077     foreach ($trad_object as $key => $value) {
7078     if ($external_uid['object'] === $key) {
7079     $external_uid['object'] = __($value);
7080     }
7081     }
7082    
7083     //
7084     $val_notif = array();
7085     foreach($liste_champs as $key => $champ) {
7086     $val_notif[$champ] = $external_uid[$key];
7087     }
7088     array_push($val_suivi, $val_notif);
7089     }
7090     }
7091    
7092     // Passage du tableau au format json
7093     return json_encode($val_suivi, JSON_HEX_APOS);
7094     }
7095    
7096     /**
7097 mbroquet 3730 * Ajout de la liste des contraintes et des demandeurs
7098     */
7099     function formSpecificContent($maj) {
7100    
7101 softime 8477 // Récupère le CRUD
7102     $crud = $this->get_action_crud($this->getParameter("maj"));
7103    
7104     // Les contenus spécifiques ne sont pas affichés en cas de suppression
7105     if ($crud === 'delete') {
7106     return;
7107     }
7108    
7109 mbroquet 3730 /**
7110     * Liste des contraintes
7111     */
7112     //
7113     $listContrainte = $this->getListContrainte($this->getVal('dossier'));
7114    
7115     // Si le dossier possède des contraintes
7116     if ($listContrainte->numRows() != 0) {
7117    
7118     // Affiche du fieldset
7119     printf("<div id=\"liste_contrainte\" class=\"demande_hidden_bloc\">");
7120     printf("<fieldset class=\"cadre ui-corner-all ui-widget-content col_12 startClosed\">");
7121     printf(" <legend class=\"ui-corner-all ui-widget-content ui-state-active\"
7122     id =\"fieldset_contraintes_liees\">"
7123     ._("dossier_contrainte")."</legend>");
7124     printf("<div class=\"fieldsetContent\" style=\"display: none;\">");
7125    
7126     // Entête pour le groupe
7127     $groupeHeader = "
7128     <div class='dossier_contrainte_groupe'>
7129     <div class='dossier_contrainte_groupe_header'>
7130     <span class='name'>
7131     %s
7132     </span>
7133     </div>
7134     ";
7135    
7136     // Entête pour le sous-groupe
7137     $sousgroupeHeader = "
7138     <div class='dossier_contrainte_sousgroupe'>
7139     <div class='dossier_contrainte_sousgroupe_header'>
7140     <span class='name'>
7141     %s
7142     </span>
7143     </div>
7144     ";
7145    
7146     // Titres des colonnes
7147     $tableHeader = "
7148     <thead>
7149     <tr class='ui-tabs-nav ui-accordion ui-state-default tab-title'>
7150     <th class='title col-0 firstcol contrainte_th_texte_complete'>
7151     <span class='name'>
7152     "._('texte_complete')."
7153     </span>
7154     </th>
7155     <th class='title col-1 contrainte_th_reference'>
7156     <span class='name'>
7157     "._('reference')."
7158     </span>
7159     </th>
7160     <th class='title col-2 contrainte_th_nature'>
7161     <span class='name'>
7162     "._('nature')."
7163     </span>
7164     </th>
7165     </tr>
7166     </thead>
7167     ";
7168    
7169     // Ligne de données
7170     $line = "
7171     <tr class='tab-data %s'>
7172     <td class='col-0 firstcol contrainte_th_texte_complete'>
7173     %s
7174     </td>
7175     <td class='col-1 contrainte_th_reference'>
7176     %s
7177     </td>
7178     <td class='col-2 contrainte_th_nature'>
7179     %s
7180     </td>
7181     ";
7182    
7183     // Sauvegarde des données pour les comparer
7184     $lastRow = array();
7185     $lastRow['contrainte_groupe'] = 'empty';
7186     $lastRow['contrainte_sousgroupe'] = 'empty';
7187    
7188     // Tant qu'il y a des résultats
7189     while($row = &$listContrainte->fetchRow(DB_FETCHMODE_ASSOC)) {
7190     // Si l'identifiant du groupe de la contrainte présente et
7191     // celle d'avant est différent
7192     if ($row['contrainte_groupe'] != $lastRow['contrainte_groupe']) {
7193    
7194     // Si l'identifiant du groupe d'avant est vide
7195     if ($lastRow['contrainte_groupe'] != 'empty') {
7196     // Ferme le tableau
7197     printf("</table>");
7198     // Ferme le div
7199     printf("</div>");
7200     // Ferme le div
7201     printf("</div>");
7202     }
7203    
7204     // Affiche le header du groupe
7205     printf($groupeHeader, $row['contrainte_groupe']);
7206     }
7207    
7208     // Si l'identifiant du sous-groupe de la contrainte présente et
7209     // celle d'avant est différent
7210     // Ou qu'ils soient identique mais n'appartiennent pas au même groupe
7211     if ($row['contrainte_sousgroupe'] != $lastRow['contrainte_sousgroupe']
7212     || ($row['contrainte_sousgroupe'] == $lastRow['contrainte_sousgroupe']
7213     && $row['contrainte_groupe'] != $lastRow['contrainte_groupe'])) {
7214    
7215     //
7216     if($row['contrainte_groupe'] == $lastRow['contrainte_groupe']) {
7217     // Si l'identifiant de la sous-groupe d'avant est vide
7218     if ($lastRow['contrainte_sousgroupe'] != 'empty') {
7219     // Ferme le tableau
7220     printf("</table>");
7221     // Ferme le div
7222     printf("</div>");
7223     }
7224     }
7225    
7226     // Affiche le header du sous-groupe
7227     printf($sousgroupeHeader, $row['contrainte_sousgroupe']);
7228    
7229     // Ouvre le tableau
7230     printf("<table id='sousgroupe_".$row['contrainte_sousgroupe']."' class='tab-tab dossier_contrainte_view'>");
7231    
7232     // Affiche le header des données
7233     printf($tableHeader);
7234    
7235     // Définis le style des lignes
7236     $style = 'odd';
7237     }
7238    
7239     // Si toujours dans la même groupe et même sous-groupe,
7240     // on change le style de la ligne
7241     if ($row['contrainte_groupe'] == $lastRow['contrainte_groupe']
7242     && $row['contrainte_sousgroupe'] == $lastRow['contrainte_sousgroupe']) {
7243     // Définis le style
7244     $style = ($style=='even')?'odd':'even';
7245     }
7246    
7247     // Affiche "Oui" ou "Non" pour le bouléen
7248     if ($row['dossier_contrainte_reference'] == 1
7249     || $row['dossier_contrainte_reference'] == "t"
7250     || $row['dossier_contrainte_reference'] == "Oui") {
7251     //
7252     $contrainte_reference = "Oui";
7253     } else {
7254     //
7255     $contrainte_reference = "Non";
7256     }
7257    
7258     // Affiche les données
7259     printf($line, $style,
7260     $row['dossier_contrainte_texte'],
7261     $contrainte_reference,
7262     $row['contrainte_nature']
7263     );
7264    
7265     // Sauvegarde les données
7266     $lastRow['contrainte_groupe'] = $row['contrainte_groupe'];
7267     $lastRow['contrainte_sousgroupe'] = $row['contrainte_sousgroupe'];
7268    
7269     }
7270     // Ferme le tableau
7271     printf("</table>");
7272     // Ferme le sous-groupe
7273     printf("</div>");
7274     // Ferme le groupe
7275     printf("</div>");
7276    
7277     printf("</div>");
7278    
7279     printf("<div class=\"visualClear\"></div>");
7280     // Ferme le fieldset content
7281     printf("</div>");
7282     printf("</fieldset>");
7283     }
7284     /**
7285     * Fin Liste des contraintes
7286     */
7287    
7288     /**
7289     * Liste des demandeurs
7290     */
7291 softime 6565 // Tableau des demandeurs selon le contexte
7292     $listeDemandeur = $this->valIdDemandeur;
7293     /**
7294     * Gestion du bloc des demandeurs
7295     */
7296     // Si le mode est (modification ou suppression ou consultation) ET que
7297     // le formulaire n'est pas correct (c'est-à-dire que le formulaire est
7298     // actif)
7299     if ($this->correct !== true AND
7300 softime 7996 $this->getParameter('validation') == 0 AND
7301     $this->getParameter("maj") != 0) {
7302 softime 6565 // Alors on récupère les demandeurs dans la table lien pour
7303     // affectation des résultats dans $this->valIdDemandeur
7304     $this->listeDemandeur("dossier", $this->getval($this->clePrimaire));
7305     $listeDemandeur = $this->valIdDemandeur;
7306     }
7307 mbroquet 3730
7308 softime 6565 // Récupération des valeurs postées
7309 softime 7996 if ($this->getParameter('validation') != 0) {
7310 softime 6565 $listeDemandeur = $this->postedIdDemandeur;
7311     }
7312    
7313 softime 12124 // Si le mode est (ajout ou modification)
7314     // ET que le mode n'est pas (journal d'instruction)
7315     // ET que le formulaire n'est pas correct
7316     // (c'est-à-dire que le formulaire est actif)
7317     if (($this->getParameter("maj") < 2 AND $this->correct !== true)) {
7318 softime 6565 // Alors on positionne le marqueur linkable a true qui permet
7319     // d'afficher ou non les actions de gestion des demandeurs
7320 mbroquet 3730 $linkable = true;
7321     } else {
7322 softime 6565 // Sinon on positionne le marqueur linkable a false qui permet
7323     // d'afficher ou non les actions de gestion des demandeurs
7324 mbroquet 3730 $linkable = false;
7325     }
7326 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
7327     // Pour les dossiers contentieux, il faut un droit spécifique pour visualiser le
7328     // fieldset "Demandeurs"
7329 softime 12124 if ($this->getParameter("maj") != 200 &&
7330     ($affichage_form === 'ADS' || $affichage_form === 'DPC' || $affichage_form === 'CONSULTATION ENTRANTE')
7331 softime 6565 OR ($affichage_form === 'CTX RE' AND $this->f->isAccredited('dossier_contentieux_recours_afficher_demandeurs') === true)
7332 softime 12124 OR ($affichage_form === 'CTX IN' AND $this->f->isAccredited('dossier_contentieux_infractions_afficher_demandeurs') === true)
7333     ) {
7334 mbroquet 3730
7335 softime 6565 // Conteneur de la listes des demandeurs
7336     echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">";
7337     echo "<fieldset id=\"fieldset-form-dossier_instruction-demandeur\" class=\"cadre ui-corner-all ui-widget-content startClosed\">";
7338     echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">"
7339     ._("Demandeurs")."</legend>";
7340     echo "<div class=\"fieldsetContent\" style=\"display: none;\">";
7341 mbroquet 3730
7342 softime 6565
7343     // Pour les DI avec DA visible, dans tous les modes excepté en ajout et si l'option d'accès au
7344     // portail citoyen est activée
7345 mbroquet 3730 $inst_da = $this->get_inst_dossier_autorisation();
7346 softime 6565 if ($this->getParameter("maj") != 0
7347     && $this->f->is_option_citizen_access_portal_enabled() === true
7348     && $inst_da->is_dossier_autorisation_visible() === true) {
7349     // Instance du dossier d'autorisation
7350     //
7351     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'));
7352     }
7353     // Sélection des demandeur à afficher en fonction du paramétrage du type
7354     // du dossier d'autorisation.
7355     switch ($affichage_form) {
7356     case 'ADS':
7357 softime 10573 case 'CONSULTATION ENTRANTE':
7358 softime 6565 $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
7359     break;
7360     case 'CTX RE':
7361     $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
7362     $this->display_demandeur_requerant_avocat($listeDemandeur);
7363     break;
7364     case 'CTX IN':
7365     $this->display_demandeur_plaignant_contrevenant($listeDemandeur);
7366     break;
7367 softime 7067 case 'DPC':
7368     $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
7369     $this->display_demandeur_petitionnaire_delegataire_bailleur($listeDemandeur);
7370     break;
7371 softime 6565 }
7372 mbroquet 3730
7373     }
7374    
7375     echo "</fieldset>";
7376     echo "</div>";
7377     /**
7378     * Fin liste des demandeurs
7379     */
7380 fmichon 4708
7381     /**
7382     * Interface avec le référentiel ERP.
7383     *
7384     * On affiche le message uniquement si le dossier est connecté.
7385     */
7386 softime 6565 if ($this->getParameter('maj') == 3 && $this->is_connected_to_referentiel_erp() === true) {
7387 fmichon 4708 //
7388     printf(
7389     '<div class="col_12">
7390     Ce dossier est connecté au référentiel ERP.
7391     </div>'
7392     );
7393     }
7394    
7395 mbroquet 3730 }
7396    
7397     /**
7398 softime 6565 * Affiche le bloc d'affichage des demandeurs pour dossiers ADS avec actions.
7399     *
7400     * @param array $listeDemandeur Liste des demandeurs.
7401     */
7402     function display_demandeur_petitionnaire_delegataire($listeDemandeur) {
7403    
7404     // Affichage du bloc pétitionnaire principal / délégataire
7405     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7406     echo "<div id=\"petitionnaire_principal_delegataire\">";
7407     // Affichage de la synthèse du pétitionnaire principal
7408     $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire_principal");
7409     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7410     echo "<div id=\"delegataire\">";
7411     // Affichage de la synthèse du délégataire
7412     $this->displaySyntheseDemandeur($listeDemandeur, "delegataire");
7413     echo "</div>";
7414 softime 10573 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7415     echo "<div id=\"proprietaire\">";
7416     // Affichage de la synthèse du délégataire
7417     $this->displaySyntheseDemandeur($listeDemandeur, "proprietaire");
7418     echo "</div>";
7419     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7420     echo "<div id=\"architecte_lc\">";
7421     // Affichage de la synthèse du délégataire
7422     $this->displaySyntheseDemandeur($listeDemandeur, "architecte_lc");
7423     echo "</div>";
7424     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7425     echo "<div id=\"paysagiste\">";
7426     // Affichage de la synthèse du délégataire
7427     $this->displaySyntheseDemandeur($listeDemandeur, "paysagiste");
7428     echo "</div>";
7429 softime 6565 echo "<div class=\"both\"></div>";
7430     echo "</div>";
7431     // Bloc des pétitionnaires secondaires
7432     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7433     echo "<div id=\"listePetitionnaires\">";
7434     $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire");
7435     echo "</div>";
7436     }
7437    
7438     /**
7439     * Affiche le bloc d'affichage des demandeurs pour dossiers CTX recours
7440     * avec actions.
7441     *
7442     * @param array $listeDemandeur Liste des demandeurs.
7443     */
7444     function display_demandeur_plaignant_contrevenant($listeDemandeur) {
7445    
7446     echo "<div id=\"plaignant_contrevenant\">";
7447     // Affichage du bloc contrevenant
7448     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7449     echo "<div id=\"listeContrevenants\" class=\"col_12\">";
7450     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7451     echo "<div id=\"contrevenant_principal\">";
7452     // Affichage de la synthèse
7453     $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant_principal");
7454     echo "</div>";
7455     echo "<div id=\"listeAutresContrevenants\">";
7456     // Affichage de la synthèse
7457     $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant");
7458     echo "</div>";
7459     echo "</div>";
7460     // Affichage du bloc plaignant
7461     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7462     echo "<div id=\"listePlaignants\" class=\"col_12\">";
7463     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7464     echo "<div id=\"plaignant_principal\">";
7465     // Affichage de la synthèse
7466     $this->displaySyntheseDemandeur($listeDemandeur, "plaignant_principal");
7467     echo "</div>";
7468     echo "<div id=\"listeAutresPlaignants\">";
7469     $this->displaySyntheseDemandeur($listeDemandeur, "plaignant");
7470     echo "</div>";
7471     echo "</div>";
7472     echo "</div>";
7473    
7474     }
7475    
7476     /**
7477     * Affiche le bloc d'affichage des demandeurs pour dossiers CTX infraction
7478     * avec actions.
7479     *
7480     * @param array $listeDemandeur Liste des demandeurs.
7481     */
7482     function display_demandeur_requerant_avocat($listeDemandeur) {
7483     echo "<div id=\"requerant_avocat\">";
7484     // Affichage du bloc requérant
7485     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7486     echo "<div id=\"listeRequerants\" class=\"col_12\">";
7487     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7488     echo "<div id=\"requerant_principal\">";
7489     // Affichage de la synthèse
7490     $this->displaySyntheseDemandeur($listeDemandeur, "requerant_principal");
7491     echo "</div>";
7492     echo "<div id=\"listeAutresRequerants\">";
7493     $this->displaySyntheseDemandeur($listeDemandeur, "requerant");
7494     echo "</div>";
7495     echo "</div>";
7496     // Affichage du bloc avocat
7497     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7498     echo "<div id=\"listeAvocat\" class=\"col_12\">";
7499     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7500     echo "<div id=\"avocat_principal\">";
7501     $this->displaySyntheseDemandeur($listeDemandeur, "avocat_principal");
7502     echo "</div>";
7503     echo "<div id=\"listeAutresAvocats\">";
7504     $this->displaySyntheseDemandeur($listeDemandeur, "avocat");
7505     echo "</div>";
7506     echo "</div>";
7507     echo "</div>";
7508     echo "</fieldset>";
7509     // Champ flag permettant de récupérer la valeur de l'option sig pour
7510     // l'utiliser en javascript, notamment lors du chargement de l'interface
7511     // pour les références cadastrales
7512     // XXX Si un widget pour les références cadastrales existait, il n'y
7513     // aurait pas besoin de faire cela
7514     echo "<input id='option_sig' type='hidden' value='".$this->f->getParameter("option_sig")."' name='option_sig'>";
7515     echo "</div>";
7516     }
7517    
7518    
7519 softime 7067 /**
7520     * Affiche le bloc d'affichage des demandeurs pour dossiers DPC avec actions.
7521     *
7522     * @param array $listeDemandeur Liste des demandeurs.
7523     */
7524     function display_demandeur_petitionnaire_delegataire_bailleur($listeDemandeur) {
7525    
7526     // Affichage du bloc pétitionnaire principal / délégataire / bailleur
7527     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7528     echo "<div id=\"petitionnaire_principal_delegataire_bailleur\">";
7529     // Doit être utilisé avec la div petitionnaire_principal_delegataire
7530     echo "<div id=\"listeBailleurs\" class=\"col_12\">";
7531     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7532     echo "<div id=\"bailleur_principal\">";
7533     // Affichage de la synthèse
7534     $this->displaySyntheseDemandeur($listeDemandeur, "bailleur_principal");
7535     echo "</div>";
7536     echo "<div id=\"listeAutresBailleurs\">";
7537     $this->displaySyntheseDemandeur($listeDemandeur, "bailleur");
7538     echo "</div>";
7539     echo "</div>";
7540     echo "</div>";
7541     }
7542    
7543    
7544 softime 6565 function displaySyntheseDemandeur($listeDemandeur, $type) {
7545     // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
7546     // correct (c'est-à-dire que le formulaire est actif)
7547     if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
7548     // Alors on positionne le marqueur linkable a true qui permet
7549     // d'afficher ou non les actions de gestion des demandeurs
7550     $linkable = true;
7551     } else {
7552     // Sinon on positionne le marqueur linkable a false qui permet
7553     // d'afficher ou non les actions de gestion des demandeurs
7554     $linkable = false;
7555     }
7556     // Récupération du type de demandeur pour l'affichage
7557     switch ($type) {
7558     case 'petitionnaire_principal':
7559     $legend = _("Petitionnaire principal");
7560     break;
7561    
7562     case 'delegataire':
7563     $legend = _("Autre correspondant");
7564     break;
7565    
7566     case 'petitionnaire':
7567     $legend = _("Petitionnaire");
7568     break;
7569    
7570     case 'contrevenant_principal':
7571     $legend = _("Contrevenant principal");
7572     break;
7573    
7574     case 'contrevenant':
7575     $legend = _("Autre contrevenant");
7576     break;
7577    
7578     case 'plaignant_principal':
7579     $legend = _("Plaignant principal");
7580     break;
7581    
7582     case 'plaignant':
7583     $legend = _("Autre plaignant");
7584     break;
7585    
7586     case 'requerant_principal':
7587     $legend = _("Requérant principal");
7588     break;
7589    
7590     case 'requerant':
7591     $legend = _("Autre requérant");
7592     break;
7593    
7594     case 'avocat_principal':
7595     $legend = _("Avocat principal");
7596     break;
7597    
7598     case 'avocat':
7599     $legend = _("Autre avocat");
7600     break;
7601 softime 7067
7602     case 'bailleur_principal':
7603     $legend = _("Bailleur principal");
7604     break;
7605    
7606     case 'bailleur':
7607     $legend = _("Bailleur");
7608     break;
7609 softime 10573
7610     case 'proprietaire':
7611     $legend = __("Propriétaire");
7612     break;
7613    
7614     case 'architecte_lc':
7615     $legend = __("Architecte législation connexe");
7616     break;
7617    
7618     case 'paysagiste':
7619     $legend = __("Concepteur-Paysagiste");
7620     break;
7621 softime 6565 }
7622     foreach ($listeDemandeur[$type] as $demandeur_id) {
7623     $obj = str_replace('_principal', '', $type);
7624 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
7625     "obj" => $obj,
7626     "idx" => $demandeur_id,
7627     ));
7628 softime 6565 $demandeur -> afficherSynthese($type, $linkable);
7629     $demandeur -> __destruct();
7630     }
7631     // Si en édition de formulaire
7632     if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
7633     // Bouton d'ajout du avocat
7634     // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7635     echo "<a id=\"add_".$type."\"
7636     class=\"om-form-button add-16\">".
7637     $legend.
7638     "</a>";
7639     }
7640     }
7641     /**
7642 mbroquet 3730 * Retourne le statut du dossier
7643     * @return string Le statut du dossier d'instruction
7644     */
7645     function getStatut(){
7646    
7647     $statut = '';
7648    
7649     $etat = $this->getVal("etat");
7650     //Si l'état du dossier d'instruction n'est pas vide
7651     if ( $etat != '' ){
7652    
7653     $sql = "SELECT statut
7654     FROM ".DB_PREFIXE."etat
7655 softime 9282 WHERE etat ='".$etat."'";
7656 softime 8989 $statut = $this->f->db->getOne($sql);
7657 mbroquet 3730 $this->f->addToLog("getStatut() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
7658     if ( database::isError($statut, true)){
7659     die();
7660     }
7661     }
7662     return $statut;
7663     }
7664 softime 5024
7665 mbroquet 3730 /**
7666 softime 5024 * Retourne le dernier événement lié au dossier instancié
7667     *
7668     * @return [string] ID du dernier événement
7669     */
7670     function get_dernier_evenement() {
7671     $sql = "SELECT max(instruction)
7672     FROM ".DB_PREFIXE."instruction
7673     WHERE dossier = '".$this->getVal($this->clePrimaire)."'";
7674 softime 8989 $id_dernier_evenement = $this->f->db->getOne($sql);
7675 softime 5024 $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
7676     $this->f->isDatabaseError($id_dernier_evenement);
7677     return $id_dernier_evenement;
7678     }
7679    
7680     /**
7681 mbroquet 3730 * Retourne l'identifiant du rapport d'instruction lié du dossier
7682     * @return string L'identifiant du rapport d'instruction lié du dossier
7683     */
7684 softime 6565 function getRapportInstruction() {
7685 mbroquet 3730
7686 softime 7366 $rapport_instruction = null;
7687 mbroquet 3730
7688     $sql = "SELECT rapport_instruction
7689     FROM ".DB_PREFIXE."rapport_instruction
7690     WHERE dossier_instruction ='".$this->getVal($this->clePrimaire)."'";
7691 softime 8989 $rapport_instruction = $this->f->db->getOne($sql);
7692 softime 7366 $this->f->addToLog(__METHOD__."() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
7693     $this->f->isDatabaseError($rapport_instruction);
7694 mbroquet 3730
7695     return $rapport_instruction;
7696     }
7697    
7698     /**
7699     * Retourne l'identifiant des données techniques liées du dossier
7700     * @return string L'identifiant des données techniques liées du dossier
7701     */
7702 softime 6565 function getDonneesTechniques() {
7703 mbroquet 3730
7704     $donnees_techniques = '';
7705    
7706     $sql = "SELECT donnees_techniques
7707     FROM ".DB_PREFIXE."donnees_techniques
7708     WHERE dossier_instruction ='".$this->getVal($this->clePrimaire)."'";
7709 softime 8989 $donnees_techniques = $this->f->db->getOne($sql);
7710 mbroquet 3730 $this->f->addToLog("getStatut() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
7711     if ( database::isError($donnees_techniques)){
7712     die();
7713     }
7714    
7715     return $donnees_techniques;
7716     }
7717    
7718     /**
7719     * Surcharge du bouton retour afin de retourner sur la recherche de dossiers
7720     * d'instruction existant
7721     */
7722     function retour($premier = 0, $recherche = "", $tricol = "") {
7723    
7724     echo "\n<a class=\"retour\" ";
7725     echo "href=\"";
7726     //
7727     if($this->getParameter("idx_dossier") != "") {
7728 softime 7996 echo OM_ROUTE_TAB;
7729     echo "&obj=recherche_dossier";
7730 mbroquet 3730
7731     } else {
7732     if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
7733 softime 7996 echo OM_ROUTE_FORM;
7734 mbroquet 3730 } else {
7735 softime 7996 echo OM_ROUTE_TAB;
7736 mbroquet 3730 }
7737 softime 11228 if ($this->f->get_submitted_get_value('retour_widget') !== null) {
7738     echo "&obj=".$this->f->get_submitted_get_value('retour_widget');
7739     } else {
7740     echo "&obj=".$this->get_absolute_class_name();
7741     }
7742     if ($this->f->get_submitted_get_value('widget_recherche_id') !== null) {
7743     echo "&widget_recherche_id=".$this->f->get_submitted_get_value('widget_recherche_id');
7744     }
7745 mbroquet 3730 if ($this->f->get_submitted_get_value('retourformulaire2') !== null && $this->f->get_submitted_get_value('retourformulaire2') != '') {
7746     echo "&retourformulaire=".$this->f->get_submitted_get_value('retourformulaire2');
7747     }
7748     if($this->getParameter("retour")=="form") {
7749 softime 6565 $idx = $this->getParameter("idx");
7750     echo "&amp;idx=".$idx;
7751 mbroquet 3730 echo "&amp;action=3";
7752     }
7753     }
7754     echo "&amp;premier=".$this->getParameter("premier");
7755     echo "&amp;tricol=".$this->getParameter("tricol");
7756     echo "&amp;advs_id=".$this->getParameter("advs_id");
7757     echo "&amp;valide=".$this->getParameter("valide");
7758 softime 10869 // Si on vient d'un widget de recherche paramétrable avec un message d'aide paramétré
7759     if ($this->f->get_submitted_get_value("message_help") !== null && $this->f->get_submitted_get_value("message_help") !== "") {
7760     // On ajoute le message d'aide dans l'url de retour
7761     echo "&amp;message_help=".urlencode($this->f->get_submitted_get_value("message_help"));
7762     }
7763 mbroquet 3730 //
7764     echo "\"";
7765     echo ">";
7766     //
7767     echo _("Retour");
7768     //
7769     echo "</a>\n";
7770    
7771     }
7772    
7773     /**
7774     * Permet de modifier le fil d'Ariane
7775     * @param string $ent Fil d'Ariane
7776     * @param array $val Valeurs de l'objet
7777     * @param intger $maj Mode du formulaire
7778     */
7779     function getFormTitle($ent) {
7780    
7781     // Fil d'Ariane
7782 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
7783     switch ($type_aff_form) {
7784 softime 7067 case 'DPC':
7785 softime 6565 case 'ADS':
7786     $ent = _("instruction")." -> "._("dossiers d'instruction");
7787     break;
7788     case 'CTX IN':
7789     $ent = _("contentieux")." -> "._("infraction");
7790     break;
7791     case 'CTX RE':
7792     $ent = _("contentieux")." -> "._("recours");
7793     break;
7794 softime 10573 case 'CONSULTATION ENTRANTE':
7795     $ent = __("instruction")." -> ".__("dossiers de consultation");
7796 softime 6565 }
7797 mbroquet 3730
7798     // Si différent de l'ajout
7799     if($this->getParameter("maj") != 0) {
7800     // Si le champ dossier_libelle existe
7801     if (trim($this->getVal("dossier_libelle")) != '') {
7802     $ent .= " -> ".strtoupper($this->getVal("dossier_libelle"));
7803     }
7804 softime 6565 // Si contexte ADS
7805     if ($type_aff_form ==='ADS'
7806     && trim($this->getVal("dossier")) != '') {
7807 mbroquet 3730 $demandeur = $this->get_demandeur($this->getVal("dossier"));
7808     // Si le demandeur existe
7809     if (isset($demandeur) && trim($demandeur) != '') {
7810     $ent .= " ".mb_strtoupper($demandeur, "UTF-8");
7811     }
7812     }
7813 softime 10968
7814     // Dans le cas d'un dossier d'instruction issu d'un dépôt électronique
7815     // applique un style spécifique sur le fil d'Arianne
7816     if ($this->getVal('depot_electronique') === 't') {
7817     $this->f->addStyleForTitle("demat-color-breadcrumb");
7818     }
7819 mbroquet 3730 }
7820    
7821 softime 7996 // Change le fil d'Ariane pour l'interface de géolocalisation automatique des DI
7822     if ($this->getParameter("maj") == 126) {
7823     $ent = _("administration")." -> "._("options avancées")." -> "._("Géolocalisation des dossiers");
7824     }
7825    
7826 mbroquet 3730 // Change le fil d'Ariane
7827     return $ent;
7828     }
7829    
7830     /**
7831     * Récupère le demandeur du dossier
7832     * @return string Identifiant du dossier
7833     */
7834     private function get_demandeur($dossier) {
7835    
7836     // init de la variable de retour
7837     $demandeur = '';
7838    
7839     // Requête SQL
7840     $sql = "SELECT
7841     CASE WHEN demandeur.qualite='particulier'
7842     THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
7843     ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
7844     END as demandeur
7845     FROM ".DB_PREFIXE."dossier
7846     LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur
7847     ON lien_dossier_demandeur.dossier=dossier.dossier
7848     AND lien_dossier_demandeur.petitionnaire_principal IS TRUE
7849     LEFT JOIN ".DB_PREFIXE."demandeur
7850     ON lien_dossier_demandeur.demandeur=demandeur.demandeur
7851     WHERE dossier.dossier ='".$dossier."'";
7852 softime 8989 $demandeur = $this->f->db->getOne($sql);
7853 mbroquet 3730 $this->f->addToLog("get_demandeur() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
7854     database::isError($demandeur);
7855    
7856     // Résultat retourné
7857     return $demandeur;
7858     }
7859    
7860     /**
7861     * Récupère la durée de validité
7862     * @param string $dossier_autorisation Identifiant dossier d'autorisation
7863     * @return intger Durée de validité
7864     */
7865 softime 10573 function get_duree_validite($dossier_autorisation, $force_param = false) {
7866 mbroquet 3730
7867     // Récupère le numéro de version
7868     $numeroVersion = $this->getNumeroVersion($dossier_autorisation);
7869    
7870     // Si c'est l'ajout du dossier initial
7871 softime 10573 if ($numeroVersion < 0 || $force_param === true) {
7872 mbroquet 3730
7873     // Récupération de la duree de validite depuis la table
7874     // "dossier_autorisation_type_detaille"
7875     $sql = "SELECT duree_validite_parametrage
7876     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
7877     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
7878     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
7879     WHERE dossier_autorisation.dossier_autorisation='".$dossier_autorisation."'";
7880 softime 8989 $duree_validite = $this->f->db->getOne($sql);
7881 mbroquet 3730 $this->f->addToLog("get_duree_validite(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
7882     database::isError($duree_validite);
7883    
7884     } else {
7885    
7886     // Récupération de la duree de validite depuis le P0
7887     $sql = "SELECT duree_validite
7888     FROM ".DB_PREFIXE."dossier
7889     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
7890     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
7891     WHERE dossier_autorisation.dossier_autorisation='".$dossier_autorisation."'
7892     AND dossier.version = 0";
7893 softime 8989 $duree_validite = $this->f->db->getOne($sql);
7894 mbroquet 3730 $this->f->addToLog("get_duree_validite(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
7895     database::isError($duree_validite);
7896     }
7897 softime 11876 // Vérifie si la duree de validité a bien été récupérée. Si ce n'est pas le cas
7898     // la duree de validite est mise à 0 par défaut pour ne pas bloquer le traitement
7899     // (notamment en modification du dossier) et on affiche le problème dans les logs.
7900     try {
7901     if (! isset($duree_validite) || $duree_validite == null || $duree_validite == '') {
7902     $duree_validite = '0';
7903     throw new UnexpectedValueException('Unexpected NULL value');
7904     }
7905     } catch (UnexpectedValueException $e) {
7906     $this->addToLog(
7907     $e.
7908     ' : '.
7909     _("Erreur : la récupération de la durée de validité à échouée pour le dossier : ").
7910     $dossier_autorisation
7911     );
7912     }
7913 mbroquet 3730
7914     // retourne le résultat
7915     return $duree_validite;
7916    
7917     }
7918    
7919     /**
7920     * Ajoute les parcelles du dossier passé en paramètre et met à jour le
7921     * quartier du dossier.
7922     * @param string $dossier Identifiant du dossier
7923     * @param string $terrain_references_cadastrales Références cadastrales du
7924     * dossier
7925     */
7926     function ajouter_dossier_parcelle($dossier, $terrain_references_cadastrales) {
7927    
7928     // Parse les parcelles
7929     $list_parcelles = $this->f->parseParcelles($terrain_references_cadastrales, $this->getVal('om_collectivite'));
7930    
7931     // A chaque parcelle une nouvelle ligne est créée dans la table
7932     // dossier_parcelle
7933     foreach ($list_parcelles as $parcelle) {
7934    
7935     // Instance de la classe dossier_parcelle
7936 softime 7996 $dossier_parcelle = $this->f->get_inst__om_dbform(array(
7937     "obj" => "dossier_parcelle",
7938     "idx" => "]",
7939     ));
7940 mbroquet 3730
7941     // Valeurs à sauvegarder
7942     $value = array(
7943     'dossier_parcelle' => '',
7944     'dossier' => $dossier,
7945     'parcelle' => '',
7946     'libelle' => $parcelle['quartier']
7947     .$parcelle['section']
7948     .$parcelle['parcelle']
7949     );
7950    
7951     // Ajout de la ligne
7952 softime 8989 $dossier_parcelle->ajouter($value);
7953 mbroquet 3730 }
7954    
7955     // Si la liste des parcelles n'est pas vide
7956     if (count($list_parcelles) > 0) {
7957    
7958     // Récupère le code impôt de la première référence cadastrale
7959     $quartier_code_impots = $list_parcelles[0]['quartier'];
7960     // Récupère l'identifiant du quartier
7961     $quartier = $this->get_quartier_by_code_impot($quartier_code_impots);
7962    
7963     // Ajoute le quartier au dossier
7964     $this->modifier_quartier_dossier($dossier, $quartier);
7965     }
7966     }
7967    
7968     /**
7969     * Supprime les parcelles du dossier passé en paramètre et met à jour le
7970     * quartier du dossier.
7971     * @param string $dossier Identifiant du dossier
7972     */
7973     function supprimer_dossier_parcelle($dossier) {
7974    
7975     // Suppression des parcelles du dossier
7976     $sql = "DELETE FROM ".DB_PREFIXE."dossier_parcelle
7977     WHERE dossier='".$dossier."'";
7978 softime 8989 $res = $this->f->db->query($sql);
7979 mbroquet 3730 $this->addToLog("supprimer_dossier_parcelle() db->query(\"".$sql."\");",
7980     VERBOSE_MODE);
7981     database::isError($res);
7982    
7983     // Supprime le quartier dans dossier
7984     $this->modifier_quartier_dossier($dossier);
7985     }
7986    
7987     /**
7988     * Modifie le quartier au dossier.
7989     * @param string $dossier Numéro du dossier
7990     * @param integer $quartier Identifiant du quartier
7991     */
7992     function modifier_quartier_dossier($dossier, $quartier = null) {
7993    
7994     // Valeurs à mettre à jour
7995     $valF = array();
7996     $valF['quartier'] = $quartier;
7997    
7998     // Met à jour le quartier du dossier
7999     $cle = " dossier='".$dossier."'";
8000 softime 8989 $res = $this->f->db->autoExecute(
8001 mbroquet 3730 DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
8002     $this->addToLog("ajouter_quartier_dossier(): db->autoexecute(\""
8003     .DB_PREFIXE."dossier\", ".print_r($valF, true)
8004     .", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
8005     $this->f->isDatabaseError($res);
8006     }
8007    
8008     /**
8009     * Récupère le quartier par rapport au code impôts.
8010     * @param string $code_impots Code impôts du quartier
8011     *
8012     * @return integer Identifiant du quartier
8013     */
8014     function get_quartier_by_code_impot($code_impots) {
8015    
8016     // Initialisation résultat
8017     $quartier = null;
8018    
8019     // Si la condition n'est pas vide
8020     if ($code_impots != ""
8021     && $code_impots != null) {
8022    
8023     // Requête SQL
8024     $sql = "SELECT quartier
8025     FROM ".DB_PREFIXE."quartier
8026     WHERE code_impots = '".$code_impots."'";
8027     $this->f->addToLog(
8028     "get_quartier_by_code_impots() : db->getOne(\"".$sql."\")",
8029     VERBOSE_MODE);
8030 softime 8989 $quartier = $this->f->db->getOne($sql);
8031 mbroquet 3730 $this->f->isDatabaseError($quartier);
8032     }
8033    
8034     // Retourne résultat
8035     return $quartier;
8036     }
8037 softime 9245
8038     /**
8039     * TREATMENT - update_initial_dt.
8040     *
8041     * Cette méthode ajoute les données techniques initiales d'un DI au format JSON.
8042     *
8043     * @return boolean
8044     */
8045     public function update_initial_dt($dt_json) {
8046     //
8047     $this->begin_treatment(__METHOD__);
8048     //
8049     if ($dt_json === null || $dt_json === '') {
8050     return $this->end_treatment(__METHOD__, false);
8051     }
8052     //
8053     $this->correct = true;
8054     $data = array();
8055     $data["initial_dt"] = $dt_json;
8056     //
8057     $res = $this->f->db->autoExecute(
8058     sprintf('%s%s', DB_PREFIXE, $this->table),
8059     $data,
8060     DB_AUTOQUERY_UPDATE,
8061     sprintf("%s = '%s'", $this->clePrimaire, $this->valF[$this->clePrimaire])
8062     );
8063     $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);
8064     if ($this->f->isDatabaseError($res, true) === true) {
8065     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
8066     $this->correct = false;
8067     return $this->end_treatment(__METHOD__, false);
8068     }
8069     return $this->end_treatment(__METHOD__, true);
8070     }
8071    
8072    
8073 mbroquet 3730
8074     /**
8075     * Méthode permettant d'ajouter les données techniques d'un DI.
8076     *
8077     * @param integer $id identifiant de la demande
8078     * @param array $val tableau de valeurs postées via le formulaire
8079     *
8080     * @return boolean false si erreur
8081     */
8082 softime 8989 function ajoutDonneesTechniquesDI($id, $val) {
8083 mbroquet 3730
8084     //On vérifie que le dossier d'autorisation a des données techniques
8085     $sql = "SELECT * "
8086     ."FROM ".DB_PREFIXE."donnees_techniques "
8087     ."WHERE dossier_autorisation = '".$this->valF["dossier_autorisation"]."'";
8088 softime 8989 $dtda = $this->f->db->query($sql);
8089 mbroquet 3730 $this->addToLog(__METHOD__."(): db->query(\"".$sql."\")", VERBOSE_MODE);
8090     if($this->f->isDatabaseError($dtda, true)){
8091     $this->f->addToLog(__METHOD__."() : ERROR - Erreur de base de données. Impossible d'ajouter les données techniques du dossier d'instruction.", DEBUG_MODE);
8092     return false;
8093     }
8094    
8095     //Si le dossier d'autorisation a des données techniques
8096     if ( $dtda->numrows() == 1 ){
8097     //
8098 softime 7996 $dtdi = $this->f->get_inst__om_dbform(array(
8099     "obj" => "donnees_techniques",
8100     "idx" => "]",
8101     ));
8102 mbroquet 3730 //Préparation des données
8103     $valF = $dtda->fetchRow(DB_FETCHMODE_ASSOC);
8104 softime 9245
8105     //Sauvegarde des données techniques initiales
8106     //Conversion en JSON
8107     $dt_json = json_encode($valF);
8108    
8109     //Enregistrement en BDD
8110     $sauvegarde_bdd = $this->update_initial_dt($dt_json);
8111    
8112     //Gestion des erreurs
8113     if ($sauvegarde_bdd === false){
8114     $msg_error = __("Erreur de base de données. Impossible de sauvegarder les données techniques du dossier d'instruction au format JSON.");
8115     $this->f->addToLog(sprintf(
8116     "%s() : ERREUR - %s",
8117     __METHOD__,
8118     $msg_error
8119     ));
8120     $this->addToMessage(sprintf(
8121     "%s %s",
8122     $msg_error,
8123     __("Veuillez contacter votre administrateur.")
8124     ));
8125    
8126     return false;
8127     }
8128    
8129 mbroquet 3730 //Suppression de l'identifiant
8130     $valF["donnees_techniques"] = null;
8131     // Ajout du numéro de dossier d'instruction
8132     $valF['dossier_instruction'] = $this->valF['dossier'];
8133     // Suppression du numéro de dossier d'autorisation
8134     $valF['dossier_autorisation'] = null;
8135     // Ajout des données techniques
8136 softime 8989 if($dtdi->ajouter($valF) === false) {
8137 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du dossier d'instruction.", DEBUG_MODE);
8138     return false;
8139     }
8140     }
8141     else {
8142     //Le dossier d'autorisation n'a pas de données techniques
8143     $this->f->addToLog(__METHOD__."() : ERROR - le DA n'a pas de données techniques.", DEBUG_MODE);
8144     return -1;
8145     }
8146    
8147     //
8148     return true;
8149     }
8150    
8151     /**
8152 softime 12433 * Méthode permettant d'ajouter le dossier operateur d'un DI.
8153     *
8154     * @param integer $id identifiant de la demande
8155     * @param array $val tableau de valeurs postées via le formulaire
8156     *
8157     * @return boolean false si erreur
8158     */
8159     function ajoutDossierOperateurDI($id, $val) {
8160     //
8161     $dodi = $this->f->get_inst__om_dbform(array(
8162     "obj" => "dossier_operateur",
8163     "idx" => "]",
8164     ));
8165    
8166     $valF = array();
8167     foreach ($dodi->champs as $champ) {
8168     $valF[$champ] = null;
8169     }
8170     // Ajout du numéro de dossier d'instruction
8171     $valF['dossier_instruction'] = $this->valF['dossier'];
8172     // Ajout du dossier operateur
8173     if($dodi->ajouter($valF) === false) {
8174     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les dossier opérateur du dossier d'instruction.", DEBUG_MODE);
8175     return false;
8176     }
8177    
8178     //
8179     return true;
8180     }
8181    
8182     /**
8183 mbroquet 3730 * VIEW - contrainte.
8184     *
8185     * Vue des contraintes du dossier
8186     *
8187     * Cette vue permet de gérer le contenu de l'onglet "Contrainte(s)" sur un
8188     * dossier. Cette vue spécifique est nécessaire car l'ergonomie standard du
8189     * framework ne prend pas en charge ce cas.
8190     * C'est ici la vue spécifique des contraintes liées au dossier qui est
8191     * affichée directement au clic de l'onglet au lieu du soustab.
8192     *
8193     * L'idée est donc de simuler l'ergonomie standard en créant un container
8194     * et d'appeler la méthode javascript 'ajaxit' pour charger le contenu
8195     * de la vue visualisation de l'objet lié.
8196     *
8197     * @return void
8198     */
8199     function view_contrainte() {
8200     // Vérification de l'accessibilité sur l'élément
8201     $this->checkAccessibility();
8202     // Récupération des variables GET
8203     ($this->f->get_submitted_get_value('idxformulaire')!==null ? $idxformulaire =
8204     $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = "");
8205     ($this->f->get_submitted_get_value('retourformulaire')!==null ? $retourformulaire =
8206     $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = "");
8207 softime 6565 $obj = "dossier_contrainte";
8208     $type_aff_form = $this->get_type_affichage_formulaire();
8209     if ($type_aff_form === 'CTX RE' OR $type_aff_form === 'CTX IN') {
8210     $obj = "dossier_contrainte_contexte_ctx";
8211     }
8212 mbroquet 3730 // Objet à charger
8213     // Construction de l'url de sousformulaire à appeler
8214 softime 7996 $url = OM_ROUTE_SOUSFORM."&obj=".$obj;
8215 mbroquet 3730 $url .= "&action=4";
8216 softime 6929 $url .= "&idx=".$idxformulaire;
8217 mbroquet 3730 $url .= "&retourformulaire=".$retourformulaire;
8218     $url .= "&idxformulaire=".$idxformulaire;
8219     $url .= "&retour=form";
8220     // Affichage du container permettant le reffraichissement du contenu
8221     // dans le cas des action-direct.
8222     printf('
8223     <div id="sousform-href" data-href="%s">
8224     </div>',
8225     $url
8226     );
8227     // Affichage du container permettant de charger le retour de la requête
8228     // ajax récupérant le sous formulaire.
8229     printf('
8230     <div id="sousform-%s">
8231     </div>
8232     <script>
8233     ajaxIt(\'%s\', \'%s\');
8234     </script>',
8235     $obj,
8236     $obj,
8237     $url
8238     );
8239     }
8240    
8241     /**
8242     * Cette methode permet d'afficher le bouton de validation du formulaire
8243     *
8244     * @param integer $maj Mode de mise a jour
8245     * @return void
8246     */
8247     function bouton($maj) {
8248    
8249     if (!$this->correct
8250     && $this->checkActionAvailability() == true) {
8251     //
8252     switch($maj) {
8253     case 0 :
8254     $bouton = _("Ajouter");
8255     break;
8256     case 1 :
8257     $bouton = _("Modifier");
8258     break;
8259     case 2 :
8260     $bouton = _("Supprimer");
8261     break;
8262 softime 12124 case 200 :
8263     return;
8264 mbroquet 3730 default :
8265     // Actions specifiques
8266     if ($this->get_action_param($maj, "button") != null) {
8267     //
8268     $bouton = $this->get_action_param($maj, "button");
8269     } else {
8270     //
8271     $bouton = _("Valider");
8272     }
8273     break;
8274     }
8275     //
8276     $params = array(
8277     "value" => $bouton,
8278     "name" => "submit",
8279     "onclick"=>"return getDataFieldReferenceCadastrale();",
8280     );
8281     //
8282     $this->f->layout->display_form_button($params);
8283     }
8284    
8285     }
8286    
8287     /**
8288 softime 6929 * Récupère l'instance de paramétrage des taxes.
8289 mbroquet 3730 *
8290     * @param integer $taxe_amenagement Identifiant
8291     *
8292     * @return object
8293     */
8294     function get_inst_taxe_amenagement($taxe_amenagement = null) {
8295     //
8296 softime 6929 if ($this->inst_taxe_amenagement === null) {
8297 mbroquet 3730 //
8298 softime 6929 if ($taxe_amenagement === null) {
8299     //
8300 mbroquet 3730 $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($this->getVal('om_collectivite'));
8301 softime 6929
8302     // Si aucun paramétrage de taxe trouvé et que la collectivité
8303     // est mono
8304     if ($taxe_amenagement === null
8305     && $this->f->isCollectiviteMono($this->getVal('om_collectivite')) === true) {
8306     // Récupère la collectivité multi
8307     $om_collectivite_multi = $this->f->get_idx_collectivite_multi();
8308     //
8309     $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite_multi);
8310     }
8311    
8312     //
8313     if ($taxe_amenagement === null) {
8314     //
8315     return null;
8316     }
8317 mbroquet 3730 }
8318     //
8319 softime 7996 $this->inst_taxe_amenagement = $this->f->get_inst__om_dbform(array(
8320     "obj" => "taxe_amenagement",
8321     "idx" => $taxe_amenagement,
8322     ));
8323 mbroquet 3730 }
8324     //
8325     return $this->inst_taxe_amenagement;
8326     }
8327    
8328     /**
8329     * Récupère l'identifiant de la taxe d'aménagement par rapport à la collectivité.
8330     *
8331     * @param integer $om_collectivite La collectivité
8332     *
8333     * @return integer
8334     */
8335     function get_taxe_amenagement_by_om_collectivite($om_collectivite) {
8336 softime 6929 //
8337     $taxe_amenagement = null;
8338    
8339 mbroquet 3730 // Si la collectivité n'est pas renseigné
8340 softime 6929 if ($om_collectivite !== '' && $om_collectivite !== null) {
8341    
8342     // SQL
8343     $sql = "SELECT taxe_amenagement
8344     FROM ".DB_PREFIXE."taxe_amenagement
8345     WHERE om_collectivite = ".intval($om_collectivite);
8346     $taxe_amenagement = $this->f->db->getOne($sql);
8347     $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
8348     $this->f->isDatabaseError($taxe_amenagement);
8349 mbroquet 3730 }
8350    
8351     //
8352 softime 6929 return $taxe_amenagement;
8353 mbroquet 3730 }
8354    
8355     /**
8356     * [get_inst_donnees_techniques description]
8357     *
8358     * @param [type] $donnees_techniques [description]
8359     *
8360     * @return [type] [description]
8361     */
8362     function get_inst_donnees_techniques($donnees_techniques = null) {
8363     //
8364     if (is_null($this->inst_donnees_techniques)) {
8365     //
8366     if (is_null($donnees_techniques)) {
8367     $donnees_techniques = $this->getDonneesTechniques();
8368     }
8369     //
8370 softime 7996 $this->inst_donnees_techniques = $this->f->get_inst__om_dbform(array(
8371     "obj" => "donnees_techniques",
8372     "idx" => $donnees_techniques,
8373     ));
8374 mbroquet 3730 }
8375     //
8376     return $this->inst_donnees_techniques;
8377     }
8378    
8379    
8380     /**
8381 softime 10573 * TODO: replace with '$this->f->findObjectById' ?
8382     *
8383 mbroquet 3730 * Récupère l'instance du dossier d'autorisation.
8384     *
8385     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
8386     *
8387     * @return object
8388     */
8389 fmichon 4708 function get_inst_dossier_autorisation($dossier_autorisation = null) {
8390 mbroquet 3730 //
8391     return $this->get_inst_common("dossier_autorisation", $dossier_autorisation);
8392     }
8393    
8394    
8395     /**
8396     * Récupère l'instance du dossier d'autorisation, puis la clé d'accès au portail
8397     * citoyen associée à ce DA.
8398     *
8399     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
8400     *
8401     * @return string $cle_acces_citoyen si la clé d'accès existe
8402     * boolean false si la clé n'existe pas
8403     */
8404     protected function get_citizen_access_key($dossier_autorisation = null) {
8405     //
8406     $inst_da = $this->get_inst_dossier_autorisation($dossier_autorisation);
8407     // Récupération de la valeur de la clé d'accès
8408     $cle_acces_citoyen = $inst_da->getVal('cle_acces_citoyen');
8409     if ($cle_acces_citoyen === '' OR $cle_acces_citoyen === null) {
8410     return false;
8411     }
8412     return $cle_acces_citoyen;
8413     }
8414    
8415    
8416     /**
8417     * Récupère l'instance du type détaillé du dossier d'autorisation.
8418     *
8419     * @param integer $dossier_autorisation_type_detaille Identifiant
8420     *
8421     * @return object
8422     */
8423     function get_inst_dossier_autorisation_type_detaille($dossier_autorisation_type_detaille = null) {
8424     //
8425     if (is_null($this->inst_dossier_autorisation_type_detaille)) {
8426     //
8427     if (is_null($dossier_autorisation_type_detaille)) {
8428     //
8429     $dossier_autorisation = $this->get_inst_dossier_autorisation();
8430     //
8431     $dossier_autorisation_type_detaille = $dossier_autorisation->getVal('dossier_autorisation_type_detaille');
8432     }
8433     //
8434 softime 7996 $this->inst_dossier_autorisation_type_detaille = $this->f->get_inst__om_dbform(array(
8435     "obj" => "dossier_autorisation_type_detaille",
8436     "idx" => $dossier_autorisation_type_detaille,
8437     ));
8438 mbroquet 3730 }
8439     //
8440     return $this->inst_dossier_autorisation_type_detaille;
8441     }
8442    
8443     /**
8444     * Récupère l'instance du cerfa
8445     *
8446     * @param integer $cerfa Identifiant du cerfa
8447     *
8448     * @return object
8449     */
8450     function get_inst_cerfa($cerfa = null) {
8451     //
8452     if (is_null($this->inst_cerfa)) {
8453     //
8454     if (is_null($cerfa)) {
8455     //
8456     $dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
8457     //
8458     $cerfa = $dossier_autorisation_type_detaille->getVal('cerfa');
8459     }
8460     //
8461 softime 7996 $this->inst_cerfa = $this->f->get_inst__om_dbform(array(
8462     "obj" => "cerfa",
8463     "idx" => $cerfa,
8464     ));
8465 mbroquet 3730 }
8466     //
8467     return $this->inst_cerfa;
8468     }
8469    
8470     /**
8471     * CONDITION - is_user_from_allowed_collectivite.
8472     *
8473     * Cette condition permet de vérifier si l'utilisateur connecté appartient
8474     * à une collectivité autorisée : c'est-à-dire de niveau 2 ou identique à
8475     * la collectivité de l'enregistrement sur lequel on se trouve.
8476     *
8477     * @return boolean
8478     */
8479     function is_user_from_allowed_collectivite() {
8480    
8481     // Si l'utilisateur est de niveau 2
8482     if ($_SESSION["niveau"] == "2") {
8483     // Alors l'utilisateur fait partie d'une collectivité autorisée
8484     return true;
8485     }
8486    
8487     // L'utilisateur est donc de niveau 1
8488     // On vérifie donc si la collectivité de l'utilisateur est la même
8489     // que la collectivité de l'élément sur lequel on se trouve
8490     if ($_SESSION["collectivite"] === $this->getVal("om_collectivite")) {
8491     // Alors l'utilisateur fait partie d'une collectivité autorisée
8492     return true;
8493     }
8494    
8495     // L'utilisateur ne fait pas partie d'une collectivité autorisée
8496     return false;
8497     }
8498    
8499     /**
8500     * Création ou mise à jour du répertoire de numérisation.
8501     *
8502     * L'objet de cette méthode est la création ou la mise à jour de la date de
8503     * modification du répertoire de numérisation destiné à recevoir les pièces
8504     * numérisées pour un import automatique.
8505     * À chaque saisie d'une nouvelle demande dans openADS, le répertoire est
8506     * soit créé soit mis à jour pour être disponible en dehors d'openADS
8507     * (point de montage sur le serveur) pour permettre de déposer les pièces
8508     * numérisées directement depuis le copieur. À intervalle régulier, un
8509     * service vérifie le contenu de ces répertoire pour importer
8510     * automatiquement ces fichiers dans l'onglet 'Pièce(s)' du dossier
8511     * concerné.
8512     * La mise à jour de la date de modification est importante pour réaliser
8513     * la purge des répertoires vides sur la base de la date de la dernière
8514     * demande qui concerne le dossier.
8515     *
8516     * @return boolean
8517     */
8518     function create_or_touch_digitalization_folder() {
8519    
8520     // Nom du répertoire
8521     // Le répertoire créé possède comme nom le libellé du dossier avec
8522     // le suffixe séparé par un '.'. Exemple : PC0130551601234.P0
8523 nmeucci 4526 $separateur = '';
8524     if ($this->getSuffixe($this->getVal('dossier_instruction_type')) === 't') {
8525     $separateur = '.';
8526     }
8527    
8528 mbroquet 3730 $digitalization_folder_name = str_replace(
8529     $this->getVal("dossier_autorisation"),
8530 nmeucci 4526 $this->getVal("dossier_autorisation").$separateur,
8531 mbroquet 3730 $this->getVal($this->clePrimaire)
8532     );
8533    
8534     // Vérifie que l'option de numérisation des dossiers est désactivée
8535     if ($this->f->is_option_digitalization_folder_enabled() !== true) {
8536     //
8537     $this->addToLog(
8538     _("L'option de numerisation des dossiers n'est pas activee").".",
8539     DEBUG_MODE
8540     );
8541     return false;
8542     }
8543    
8544     // Vérifie le paramétrage du répertoire de numérisation
8545     if ($this->f->getParameter("digitalization_folder_path") === null) {
8546     //
8547     $this->addToLog(
8548     "Configuration du répertoire de numérisation incorrecte.",
8549     DEBUG_MODE
8550     );
8551     return false;
8552     }
8553    
8554     // Répertoire cible
8555     $root_folder_path = $this->f->getParameter("digitalization_folder_path");
8556    
8557     // Vérifie que le répertoire existe
8558     if (is_dir($root_folder_path) !== true) {
8559     //
8560     $this->addToLog(
8561     sprintf(
8562     "Le répertoire '%s' n'existe pas.",
8563     $root_folder_path
8564     ),
8565     DEBUG_MODE
8566     );
8567     return false;
8568     }
8569    
8570     // Répertoire des "à traiter"
8571     $todo_folder_path = $root_folder_path."Todo/";
8572    
8573     // Vérifie que le répertoire existe
8574     if (is_dir($todo_folder_path) !== true) {
8575     //
8576     $this->addToLog(
8577     sprintf(
8578     "Le répertoire '%s' n'existe pas.",
8579     $todo_folder_path
8580     ),
8581     DEBUG_MODE
8582     );
8583     return false;
8584     }
8585    
8586     // Répertoire de numérisation.
8587     $digitalization_folder_path = $todo_folder_path.$digitalization_folder_name;
8588    
8589     // Si le répertore existe déjà le répertoire n'est pas créé
8590     if (file_exists($digitalization_folder_path) == true) {
8591     // Mise à jour du répertoire
8592     if (touch($digitalization_folder_path) !== true) {
8593     // Si une erreur survient
8594     $this->addToLog(
8595     sprintf(
8596     "Erreur lors de la mise à jour du répertoire '%s'.",
8597     $digitalization_folder_path
8598     ),
8599     DEBUG_MODE
8600     );
8601     return false;
8602     }
8603     //
8604     return true;
8605     } else {
8606     // Création du répertoire
8607     if (mkdir($digitalization_folder_path) !== true) {
8608     //
8609     $this->addToLog(
8610     sprintf(
8611     "Erreur lors de la création du répertoire '%s'.",
8612     $digitalization_folder_path
8613     ),
8614     DEBUG_MODE
8615     );
8616     return false;
8617     }
8618     //
8619     return true;
8620     }
8621     }
8622    
8623 nmeucci 3876 /**
8624     * Récupère, convertit et retourne les logs de toutes les instructions
8625     *
8626     * @return array tableau indexé de logs
8627     */
8628     public function get_log_instructions() {
8629     $log_instructions = $this->getVal('log_instructions');
8630     // Gestion du premier log
8631 nmeucci 3887 if ($log_instructions === '') {
8632 nmeucci 3876 $log_instructions = json_encode(array());
8633     }
8634 nmeucci 3887 // Gestion du log invalide
8635     if(!$this->isJson($log_instructions)) {
8636     return false;
8637     }
8638 nmeucci 3876 return json_decode($log_instructions, true);
8639     }
8640    
8641     /**
8642     * Ajoute un log d'instruction aux logs existants
8643     *
8644     * @param array $log valeurs de l'instruction
8645     * @return bool vrai si traitement effectué avec succès
8646     */
8647     public function add_log_instructions($log) {
8648     // Begin
8649     $this->begin_treatment(__METHOD__);
8650     // Ajout du log
8651     $log_instructions = $this->get_log_instructions();
8652 nmeucci 3887 if ($log_instructions === false) {
8653     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
8654     return $this->end_treatment(__METHOD__, false);
8655     }
8656 nmeucci 3876 array_push($log_instructions, $log);
8657 nmeucci 3907 $log_instructions = json_encode($log_instructions);
8658 nmeucci 3876 // Mise à jour du DI
8659     $val = array("log_instructions"=>$log_instructions);
8660     $ret = $this->f->db->autoExecute(
8661     DB_PREFIXE."dossier",
8662     $val,
8663     DB_AUTOQUERY_UPDATE,
8664     "dossier = '".$this->getVal('dossier')."'");
8665     if (database::isError($ret, true)) {
8666     $this->erreur_db($ret->getDebugInfo(), $ret->getMessage(), 'dossier');
8667     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
8668     return $this->end_treatment(__METHOD__, false);
8669     }
8670     return $this->end_treatment(__METHOD__, true);
8671     }
8672    
8673 nmeucci 3887 /**
8674 fmichon 4708 * TREATMENT - mark_as_connected_to_referentiel_erp.
8675     *
8676     * Cette méthode permet de positionner le marqueur
8677     * 'interface_referentiel_erp' à 'true'. Cela signifie que le dossier est
8678     * connecté au référentiel ERP.
8679     *
8680     * @return boolean
8681     */
8682     function mark_as_connected_to_referentiel_erp() {
8683     //
8684     $this->begin_treatment(__METHOD__);
8685     //
8686     $data = array("interface_referentiel_erp" => true, );
8687     // Exécution de la requête
8688     $res = $this->f->db->autoExecute(
8689     DB_PREFIXE.$this->table,
8690     $data,
8691     DB_AUTOQUERY_UPDATE,
8692     $this->getCle($this->getVal($this->clePrimaire))
8693     );
8694     // Logger
8695     $this->addToLog(
8696     __METHOD__."(): db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($data, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($this->getVal($this->clePrimaire))."\");",
8697     VERBOSE_MODE
8698     );
8699     //
8700     if ($this->f->isDatabaseError($res, true)) {
8701     // Appel de la methode de recuperation des erreurs
8702     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
8703     $this->correct = false;
8704     $this->addToLog(
8705     __METHOD__."(): Problème erreur lors de la mise à jour du dossier",
8706     DEBUG_MODE
8707     );
8708     // Termine le traitement
8709     return $this->end_treatment(__METHOD__, false);
8710     }
8711     //
8712     $this->addToMessage(_("Le dossier est désormais 'connecté avec le référentiel ERP'."));
8713     return $this->end_treatment(__METHOD__, true);
8714     }
8715 nmeucci 3887
8716 fmichon 4708 /**
8717     * CONDITION - is_connected_to_referentiel_erp.
8718     *
8719     * @return boolean
8720     */
8721     function is_connected_to_referentiel_erp() {
8722     //
8723     if ($this->getVal("interface_referentiel_erp") !== "t") {
8724     return false;
8725     }
8726     //
8727     return true;
8728     }
8729    
8730 nhaye 4777
8731 fmichon 4708 /**
8732 nhaye 4777 * Retourne les données techniques applicables au dossier courant, càd les données
8733     * techniques liées au dossier avec seulement les champs du CERFA associé au type de
8734     * dossier.
8735     *
8736     * @return array $donnees_techniques_applicables Tableau associatif contenant
8737     * seulement les données techniques
8738     * applicables au dossier.
8739     */
8740     public function get_donnees_techniques_applicables() {
8741    
8742     // Récupération de l'identifiant des données techniques liées au dossier
8743     $donnees_techniques = $this->getDonneesTechniques();
8744    
8745     $inst_donnees_techniques = $this->get_inst_common('donnees_techniques', $donnees_techniques);
8746     $donnees_techniques_applicables = $inst_donnees_techniques->get_donnees_techniques_applicables();
8747     //
8748     return $donnees_techniques_applicables;
8749    
8750     }
8751    
8752    
8753     /**
8754 fmichon 4708 * Retourne un tableau avec les données du dossier d'instruction.
8755     *
8756 jymadier 5275 * L'objectif est de mettre à disposition via un WS REST un ensemble
8757 fmichon 4708 * de données exploitable par une autre application.
8758     */
8759     function get_datas() {
8760    
8761     /**
8762     *
8763     */
8764 nhaye 4777
8765 softime 10573 // TODO: replace '$this->get_inst_common' with '$this->f->findObjectById' ?
8766 nhaye 4777 $om_collectivite = $this->get_inst_common('om_collectivite', $this->getVal('om_collectivite'));
8767     $instructeur = $this->get_inst_common('instructeur', $this->getVal('instructeur'));
8768     $division = $this->get_inst_common('division', $this->getVal('division'));
8769 softime 9282 $etat = $this->get_inst_common('etat', $this->getVal('etat'));
8770 nhaye 4777 $dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
8771     $dossier_autorisation_type = $this->get_inst_common('dossier_autorisation_type', $dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
8772     $donnees_techniques = $this->get_donnees_techniques_applicables();
8773    
8774 fmichon 4708 //
8775     $datas = array(
8776     //
8777     "dossier_instruction" => $this->getVal($this->clePrimaire),
8778     //
8779     "dossier_autorisation" => $this->getVal("dossier_autorisation"),
8780     //
8781     "terrain_adresse_voie_numero" => $this->getVal("terrain_adresse_voie_numero"),
8782     "terrain_adresse_lieu_dit" => $this->getVal("terrain_adresse_lieu_dit"),
8783     "terrain_adresse_code_postal" => $this->getVal("terrain_adresse_code_postal"),
8784     "terrain_adresse_cedex" => $this->getVal("terrain_adresse_cedex"),
8785     "terrain_adresse_voie" => $this->getVal("terrain_adresse_voie"),
8786     "terrain_adresse_bp" => $this->getVal("terrain_adresse_bp"),
8787     "terrain_adresse_localite" => $this->getVal("terrain_adresse_localite"),
8788     "terrain_superficie" => $this->getVal("terrain_superficie"),
8789     //
8790     "references_cadastrales" => $this->f->parseParcelles($this->getVal("terrain_references_cadastrales"), $this->getVal('om_collectivite')),
8791 nhaye 4777 "dossier_autorisation_type" => $dossier_autorisation_type->getVal("libelle"),
8792     "dossier_autorisation_type_detaille" => $dossier_autorisation_type_detaille->getVal("libelle"),
8793     "collectivite" => $om_collectivite->getVal("libelle"),
8794     "instructeur" => $instructeur->getVal("nom"),
8795     "division" => $division->getVal("libelle"),
8796 softime 9282 "etat_dossier" => $etat->getVal("libelle"),
8797 nhaye 4777 "statut_dossier" => $this->getStatut(),
8798     "date_depot_initial" => $this->getVal("date_depot"),
8799     "date_limite_instruction" => $this->getVal("date_limite"),
8800     "date_decision" => $this->getVal("date_decision"),
8801     "enjeu_urbanisme" => $this->getVal("enjeu_urba") == 't' ? 'true' : 'false',
8802     "enjeu_erp" => $this->getVal("enjeu_erp") == 't' ? 'true' : 'false',
8803 fmichon 4708 );
8804    
8805 softime 6565 // Gestion des demandeurs.
8806 fmichon 4708 $this->listeDemandeur('dossier', $this->getVal($this->clePrimaire));
8807     //
8808 softime 6565 if (isset($this->valIdDemandeur["petitionnaire_principal"]) AND !empty($this->valIdDemandeur["petitionnaire_principal"])) {
8809 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
8810     "obj" => "petitionnaire",
8811     "idx" => $this->valIdDemandeur["petitionnaire_principal"][0],
8812     ));
8813 softime 6565 $datas["petitionnaire_principal"] = $demandeur->get_datas();
8814     $demandeur->__destruct();
8815     }
8816 fmichon 4708 //
8817     if (isset($this->valIdDemandeur["delegataire"]) && !empty($this->valIdDemandeur["delegataire"])) {
8818 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
8819     "obj" => "delegataire",
8820     "idx" => $this->valIdDemandeur["delegataire"][0],
8821     ));
8822 fmichon 4708 $datas["delegataire"] = $demandeur->get_datas();
8823     $demandeur->__destruct();
8824     }
8825     //
8826     if (isset($this->valIdDemandeur["petitionnaire"]) AND !empty($this->valIdDemandeur["petitionnaire"])) {
8827     $datas["autres_petitionnaires"] = array();
8828     foreach ($this->valIdDemandeur["petitionnaire"] as $petitionnaire) {
8829 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
8830     "obj" => "petitionnaire",
8831     "idx" => $petitionnaire,
8832     ));
8833 fmichon 4708 $datas["autres_petitionnaires"][] = $demandeur->get_datas();
8834     $demandeur->__destruct();
8835     }
8836     }
8837    
8838 nhaye 4777 // Tableau contenant le nom de chaque champ de données techniques à retourner
8839     $dt_a_afficher = array(
8840     "co_tot_log_nb",
8841     "co_cstr_exist",
8842     "co_uti_pers",
8843     "co_uti_vente",
8844     "co_uti_loc",
8845     "su_tot_shon_tot",
8846     "su_avt_shon_tot",
8847     "am_lot_max_nb",
8848     "am_empl_nb",
8849     );
8850    
8851 jymadier 4785 // Tableau associatif contenant les données techniques voulues
8852     $tab_donnees_techniques = array();
8853 nhaye 4777 foreach ($dt_a_afficher as $key) {
8854     // On ajoute le champ de données techniques dans le retour seulement s'il
8855     // existe dans $donnees_techniques (s'il est applicable au dossier)
8856 jymadier 4785 if (array_key_exists($key, $donnees_techniques) === true) {
8857 nhaye 4777 if ($donnees_techniques[$key] === 't') {
8858     $donnees_techniques[$key] = 'true';
8859     };
8860     if ($donnees_techniques[$key] === 'f') {
8861     $donnees_techniques[$key] = 'false';
8862     };
8863 jymadier 4785 $tab_donnees_techniques[$key] = $donnees_techniques[$key];
8864 nhaye 4777 };
8865     };
8866    
8867 jymadier 4785 $datas['donnees_techniques'] = $tab_donnees_techniques;
8868 softime 10573
8869     // Affiche le code INSEE de la collectivité du dossier d'instruction
8870     /*$collectivite = $this->f->getCollectivite($this->getVal('om_collectivite'));
8871     $datas['collectivite_insee'] = $collectivite["insee"];*/
8872     $datas['collectivite_insee'] = $this->get_da_insee();
8873 fmichon 4708 //
8874     return $datas;
8875     }
8876    
8877 softime 6565 /**
8878 softime 10573 * Renvoi le code INSEE du DA associé
8879     */
8880     protected function get_da_insee() {
8881     $inst_da = $this->f->get_inst__om_dbform(array(
8882     "obj" => "dossier_autorisation",
8883     "idx" => $this->getVal('dossier_autorisation')
8884     ));
8885     return $inst_da->getVal('insee');
8886     }
8887    
8888     /**
8889 softime 6565 * CONDITION - is_class_dossier_corresponding_to_his_groupe
8890     *
8891     * Vérifie la correspondance groupe/classe du dossier instancié.
8892     *
8893     * @param string $classe
8894     * @return boolean
8895     */
8896     protected function is_class_dossier_corresponding_to_type_form($classe) {
8897     $type_form = $this->get_type_affichage_formulaire();
8898     switch ($type_form) {
8899 softime 7067 case 'DPC';
8900 softime 6565 case 'ADS':
8901 softime 10573 case 'CONSULTATION ENTRANTE':
8902 softime 6565 if ($this->f->starts_with($classe, 'dossier_instruction') === true) {
8903     return true;
8904     }
8905     return false;
8906     case 'CTX RE':
8907     if ($this->f->ends_with($classe, '_recours') === true) {
8908     return true;
8909     }
8910     return false;
8911     case 'CTX IN':
8912     if ($this->f->ends_with($classe, '_infractions') === true) {
8913     return true;
8914     }
8915     return false;
8916     default:
8917     return false;
8918     }
8919     }
8920 nhaye 4777
8921 softime 6565
8922 softime 6272 /**
8923 softime 6565 * CONDITION - check_context
8924     *
8925     * Vérifie la correspondance groupes dossier/utilisateur.
8926     * Vérifie l'accès aux dossiers confidentiels.
8927     * Vérifie la correspondance groupe/classe.
8928     *
8929     * @return boolean
8930     */
8931     public function check_context() {
8932     // Le dossier doit être un objet valide
8933     $id = $this->getVal($this->clePrimaire);
8934     if ($id === 0 OR $id === '0' OR $id === '' OR $id === ']') {
8935     return false;
8936     }
8937    
8938     // Vérification que l'utilisateur a accès au dossier
8939     if ($this->can_user_access_dossier() === false) {
8940     return false;
8941     }
8942     // Vérification que la classe métier instanciée est adéquate.
8943 softime 7996 return $this->is_class_dossier_corresponding_to_type_form($this->get_absolute_class_name());
8944 softime 6565 }
8945    
8946     /**
8947     * VIEW - redirect.
8948     *
8949     * Cette vue est appelée lorsque l'on souhaite consulter un dossier dont on ne connaît pas le groupe.
8950     * Ce fonctionnement est nécessaire car les classes métier filles de 'dossier' sont relatives à ce groupe.
8951     *
8952     * Par exemple, depuis l'onglet "Dossiers Liés" du DI, le listing ne permet pas d'instancier chaque résultat
8953     * et par conséquent on n'a pas accès au groupe du dossier. L'action tableau consulter y est surchargée afin
8954     * d'amener à cette vue qui se charge de faire la redirection adéquate.
8955     *
8956     * @return void
8957     */
8958     public function redirect() {
8959     // Redirection vers la classe métier adéquate
8960     $context = $this->get_type_affichage_formulaire();
8961     switch ($context) {
8962     case 'ADS':
8963 softime 10573 case 'CONSULTATION ENTRANTE':
8964 softime 6565 $obj = 'dossier_instruction';
8965     break;
8966     case 'CTX RE':
8967     $obj = 'dossier_contentieux_tous_recours';
8968     break;
8969     case 'CTX IN':
8970     $obj = 'dossier_contentieux_toutes_infractions';
8971     break;
8972     default:
8973     return;
8974     }
8975     $idx = $this->getVal($this->clePrimaire);
8976 softime 7996 $link = OM_ROUTE_FORM.'&obj='.$obj.'&action=3&idx='.$idx;
8977 softime 6565 if ($this->f->get_submitted_get_value('retourformulaire') !== null
8978     && $this->f->get_submitted_get_value('idxformulaire') !== null) {
8979 softime 7996 $link .= '&premier=0&tricol=&retourformulaire='.$this->f->get_submitted_get_value('retourformulaire');
8980 softime 6565 $link .= '&idxformulaire='.$this->f->get_submitted_get_value('idxformulaire');
8981     }
8982    
8983     header('Location: '.$link);
8984     exit();
8985     }
8986    
8987    
8988     /**
8989     * CONDITION - is_confidentiel
8990     *
8991     * Permet de savoir si le type de dossier d'autorisation du dossier courant est
8992     * confidentiel.
8993     *
8994     * @return boolean true si le dossier est confidentiel, sinon false.
8995     *
8996     */
8997     public function is_confidentiel() {
8998     //
8999     $inst_dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
9000     $inst_dossier_autorisation_type = $this->get_inst_dossier_autorisation_type($inst_dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
9001     $confidentiel = $inst_dossier_autorisation_type->getVal('confidentiel');
9002     //
9003     if ($confidentiel === 't') {
9004     return true;
9005     }
9006     return false;
9007     }
9008    
9009    
9010     /**
9011     * CONDITION - can_user_access_dossier
9012     *
9013     * Effectue les vérifications suivantes :
9014     * - L'utilisateur doit avoir accès au groupe du dossier
9015     * - Si le dossier est confidentiel, l'utilisateur doit avoir accès aux dossiers
9016     * confidentiels de ce groupe
9017     *
9018     * @return boolean true si les conditions ci-dessus sont réunies, sinon false
9019     *
9020     */
9021     public function can_user_access_dossier() {
9022     // Récupère le code du groupe
9023     $groupe_dossier = $this->get_groupe();
9024    
9025     // Le groupe doit être accessible par l'utilisateur ;
9026     if ($this->f->is_user_in_group($groupe_dossier) === false) {
9027     return false;
9028     }
9029     if ($this->is_confidentiel() === true) {
9030     //
9031     if ($this->f->can_user_access_dossiers_confidentiels_from_groupe($groupe_dossier) === false) {
9032     return false;
9033     }
9034     }
9035     return true;
9036     }
9037    
9038    
9039     /**
9040 softime 6272 * Met à jour une métadonnée sur tous les fichiers liés au dossier.
9041     *
9042     * @param string $metadata Nom de la métadonnée.
9043     * @param string $metadata_value Nouvelle valeur de la métadonnée.
9044     *
9045     * @return boolean
9046     */
9047     public function update_metadata_by_dossier($metadata, $metadata_value) {
9048     // Rècupère la liste des fichiers stockés liés au dossier
9049     $sql = sprintf('
9050     SELECT uid AS uid
9051     FROM %1$sdocument_numerise
9052     WHERE dossier = \'%2$s\'
9053     AND document_numerise IS NOT NULL
9054     UNION
9055     SELECT fichier AS uid
9056     FROM %1$sconsultation
9057     WHERE dossier = \'%2$s\'
9058     AND fichier IS NOT NULL
9059     UNION
9060     SELECT om_fichier_consultation AS uid
9061     FROM %1$sconsultation
9062     WHERE dossier = \'%2$s\'
9063     AND om_fichier_consultation IS NOT NULL
9064     UNION
9065     SELECT om_fichier_instruction AS uid
9066     FROM %1$sinstruction
9067     WHERE dossier = \'%2$s\'
9068     AND om_fichier_instruction IS NOT NULL
9069     UNION
9070     SELECT om_fichier_rapport_instruction AS uid
9071     FROM %1$srapport_instruction
9072     WHERE dossier_instruction = \'%2$s\'
9073     AND om_fichier_rapport_instruction IS NOT NULL;
9074     ',
9075     DB_PREFIXE,
9076     $this->getVal($this->clePrimaire)
9077     );
9078     $res = $this->f->db->query($sql);
9079     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
9080     $this->f->isDatabaseError($res);
9081    
9082     // Définit la métadonnée à mettre à jour
9083     $metadata_update = array();
9084     $metadata_update[$metadata] = $metadata_value;
9085    
9086     // Pour chaque résultat
9087     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
9088     // Met à jour les métadonnées du fichier
9089     $uid_update = $this->f->storage->storage->update_metadata($row['uid'], $metadata_update);
9090    
9091     // Si la méthode ne retourne pas l'uid du fichier alors la mise
9092     // à jour ne s'est pas réalisée
9093     if ($uid_update !== $row['uid']) {
9094     //
9095     return false;
9096     }
9097     }
9098     $res->free();
9099    
9100     //
9101     return true;
9102     }
9103    
9104    
9105     /**
9106     * Traitement pour les ERP.
9107     * Si la valeur du champ 'erp' a été modifié, modifie la valeur de la
9108     * métadonnée concernceERP sur tous les fichiers liés au dossier.
9109     *
9110     * @param array $values Liste des nouvelles valeurs.
9111     *
9112     * @return boolean
9113     */
9114     public function update_concerneERP(array $values) {
9115     // Définit le champ et la métadonnée
9116     $champ = 'erp';
9117     $metadata = 'concerneERP';
9118    
9119     // Définit les valeurs à comparer
9120     $value_after = $this->get_boolean_from_view_value($values[$champ]);
9121     $value_before = $this->get_boolean_from_pgsql_value($this->getVal($champ));
9122    
9123     // Vérifie si la valeur du champ a été modifié
9124     if ($value_after !== $value_before) {
9125     // Transforme la valeur booléenne en string
9126     $metadata_value = 'false';
9127     if ($value_after === true) {
9128     $metadata_value = 'true';
9129     }
9130    
9131     // Met à jour les métadonnées des fichiers liés au dossier
9132     $update = $this->update_metadata_by_dossier($metadata, $metadata_value);
9133     //
9134     if ($update !== true) {
9135     //
9136     return false;
9137     }
9138     }
9139    
9140     //
9141     return true;
9142     }
9143    
9144    
9145 softime 6565 /**
9146 softime 10573 * TODO: replace with '$this->f->findObjectById' ?
9147     *
9148 softime 6565 * Récupère l'instance du groupe.
9149     *
9150     * @param string $groupe Identifiant du groupe.
9151     *
9152     * @return object
9153     */
9154     private function get_inst_groupe($groupe) {
9155     //
9156     return $this->get_inst_common("groupe", $groupe);
9157     }
9158    
9159    
9160     /**
9161 softime 10573 * TODO: replace with '$this->f->findObjectById' ?
9162     *
9163 softime 6565 * Récupère l'instance du type de dossier d'autorisation.
9164     *
9165     * @param string $dossier_autorisation_type Identifiant du type de dossier
9166     * d'autorisation.
9167     *
9168     * @return object
9169     */
9170     private function get_inst_dossier_autorisation_type($dossier_autorisation_type) {
9171     //
9172     return $this->get_inst_common("dossier_autorisation_type", $dossier_autorisation_type);
9173     }
9174    
9175    
9176 softime 7366 /**
9177     * Récupère l'instance de la demande du dossier
9178     *
9179     * @param mixed Identifiant de la demande
9180     *
9181     * @return object
9182     */
9183     function get_inst_demande($demande = null) {
9184     //
9185     if (is_null($this->inst_demande)) {
9186     //
9187     if (is_null($demande)) {
9188     $demande = $this->get_demande_by_dossier_instruction();
9189     }
9190     //
9191     return $this->get_inst_common("demande", $demande);
9192     }
9193     //
9194     return $this->inst_demande;
9195     }
9196    
9197    
9198     /**
9199 softime 7541 * Récupère l'identifiant de la demande initiale par le dossier d'instruction.
9200 softime 7366 *
9201     * @return integer
9202     */
9203     function get_demande_by_dossier_instruction() {
9204     // Initialisation de la variable de retour
9205     $res = null;
9206    
9207     // SQL
9208     $sql = "SELECT demande
9209     FROM ".DB_PREFIXE."demande
9210 softime 7541 WHERE dossier_instruction = '".$this->getVal($this->clePrimaire)."'
9211     ORDER BY instruction_recepisse ASC
9212     LIMIT 1";
9213 softime 7366 $res = $this->f->db->getOne($sql);
9214     $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
9215     $this->f->isDatabaseError($res);
9216    
9217     //
9218     return $res;
9219     }
9220    
9221 softime 7996 /**
9222     * TREATMENT - update_last_modification_date.
9223     *
9224     * Cette methode met à jour la date de dernière modification du dossier.
9225     *
9226     * @return boolean
9227     */
9228     public function update_last_modification_date() {
9229     //
9230     $this->begin_treatment(__METHOD__);
9231     //
9232     $this->correct = true;
9233 softime 9245 $valF = array();
9234     $valF["date_modification"] = 'NOW';
9235 softime 7996 //
9236     $res = $this->f->db->autoExecute(
9237     DB_PREFIXE.$this->table,
9238 softime 9245 $valF,
9239 softime 7996 DB_AUTOQUERY_UPDATE,
9240     $this->clePrimaire." = '".$this->getVal($this->clePrimaire)."'"
9241     );
9242     if ($this->f->isDatabaseError($res, true)) {
9243     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
9244     $this->correct = false;
9245     return $this->end_treatment(__METHOD__, false);
9246     } else {
9247     return $this->end_treatment(__METHOD__, true);
9248     }
9249     //
9250     return $this->end_treatment(__METHOD__, false);
9251     }
9252 softime 7366
9253 softime 7996 /**
9254     * TREATMENT - update_hash_sitadel.
9255     *
9256     * Cette methode met à jour le hash SITADEL du dossier.
9257     *
9258     * @return boolean
9259     */
9260     public function update_hash_sitadel($hash_sitadel = null) {
9261     //
9262     $this->begin_treatment(__METHOD__);
9263     //
9264     if ($hash_sitadel !== null && $hash_sitadel !== '') {
9265     //
9266     $this->correct = true;
9267 softime 9245 $valF = array();
9268     $valF["hash_sitadel"] = $hash_sitadel;
9269 softime 7996 //
9270     $res = $this->f->db->autoExecute(
9271     DB_PREFIXE.$this->table,
9272 softime 9245 $valF,
9273 softime 7996 DB_AUTOQUERY_UPDATE,
9274     $this->clePrimaire." = '".$this->getVal($this->clePrimaire)."'"
9275     );
9276     if ($this->f->isDatabaseError($res, true)) {
9277     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
9278     $this->correct = false;
9279     return $this->end_treatment(__METHOD__, false);
9280     } else {
9281     return $this->end_treatment(__METHOD__, true);
9282     }
9283     }
9284     //
9285     return $this->end_treatment(__METHOD__, false);
9286     }
9287    
9288 softime 8477 /**
9289 softime 9245 * TREATMENT - update_version_clos
9290     *
9291     * @param string $mode Mode de mise à jour ("up" ou "down")
9292     *
9293     * @return boolean
9294     */
9295     public function update_version_clos($mode) {
9296     //
9297     $this->begin_treatment(__METHOD__);
9298     //
9299     if ($mode !== 'up' && $mode !== 'down') {
9300     return $this->end_treatment(__METHOD__, false);
9301     }
9302     //
9303     $inst_da = $this->get_inst_dossier_autorisation($this->getVal("dossier_autorisation"));
9304     $da_version_clos = $inst_da->getval('numero_version_clos');
9305     //
9306     $this->correct = true;
9307     $data = array();
9308     $data["version_clos"] = 0;
9309     if ($da_version_clos !== null
9310     && $da_version_clos !== '') {
9311     //
9312     if ($mode === 'up') {
9313     $data["version_clos"] = intval($da_version_clos)+1;
9314     $inst_da->update_numero_version_clos($data["version_clos"]);
9315     }
9316     if ($mode === 'down') {
9317     $data["version_clos"] = null;
9318     }
9319     } else {
9320     $inst_da->update_numero_version_clos($data["version_clos"]);
9321     }
9322     //
9323     $res = $this->f->db->autoExecute(
9324     sprintf('%s%s', DB_PREFIXE, $this->table),
9325     $data,
9326     DB_AUTOQUERY_UPDATE,
9327     sprintf("%s = '%s'", $this->clePrimaire, $this->getVal($this->clePrimaire))
9328     );
9329     $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);
9330     if ($this->f->isDatabaseError($res, true) === true) {
9331     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
9332     $this->correct = false;
9333     return $this->end_treatment(__METHOD__, false);
9334     }
9335     return $this->end_treatment(__METHOD__, true);
9336     }
9337    
9338     /**
9339     * Récupère l'identifiant de l'état car le getVal() récupère le libellé.
9340     *
9341     * @return mixed Soit un string, soit "false"
9342     */
9343     function get_id_etat() {
9344     $query = sprintf('
9345     SELECT etat
9346     FROM %1$sdossier
9347     WHERE dossier = \'%2$s\'
9348     ',
9349     DB_PREFIXE,
9350     $this->getVal($this->clePrimaire)
9351     );
9352     $res = $this->f->get_one_result_from_db_query(
9353     $query,
9354     true
9355     );
9356     if ($res['code'] === 'KO') {
9357     return false;
9358     }
9359     return $res['result'];
9360     }
9361    
9362     /**
9363 softime 8477 * Surcharge de la méthode rechercheTable pour éviter de court-circuiter le
9364     * générateur en devant surcharger la méthode cleSecondaire afin de supprimer
9365     * les éléments liés dans les tables NaN.
9366     *
9367     * @param mixed $dnu1 Instance BDD - À ne pas utiliser
9368     * @param string $table Table
9369     * @param string $field Champ
9370     * @param mixed $id Identifiant
9371     * @param mixed $dnu2 Marqueur de débogage - À ne pas utiliser
9372     * @param string $selection Condition de la requête
9373     *
9374     * @return void
9375     */
9376     function rechercheTable(&$dnu1 = null, $table, $field, $id, $dnu2 = null, $selection = "") {
9377 softime 7996
9378 softime 8477 // Dans le cas d'une suppression du dossier d'instruction, les tables
9379     // liées ne sont pas vérifiées
9380     $liaison_suppr = array (
9381     "demande",
9382     "donnees_techniques",
9383     "instruction",
9384     "lien_dossier_demandeur",
9385     );
9386     if ($this->get_action_crud() === 'delete'
9387     && in_array($table, array_keys($liaison_suppr)) === true) {
9388     // Annule la vérid
9389     $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);
9390     return;
9391     }
9392     //
9393     parent::rechercheTable($this->f->db, $table, $field, $id, null, $selection);
9394     }
9395    
9396 softime 12124 /**
9397     * Effectue une requête sql pour récupérer la liste des id des demandeurs
9398     * associé au dossier et l'indicateur permettant de savoir si c'est un
9399     * demandeur principal ou pas.
9400     * Renvoi les résultats sous la forme d'un tableau.
9401     *
9402     * @return array|boolean tableau contenant les infos des demandeurs et false
9403     * en cas d'erreur de base de données.
9404     */
9405 softime 10573 public function get_demandeurs() {
9406     $query = sprintf('
9407     SELECT demandeur.demandeur,
9408     lien_dossier_demandeur.petitionnaire_principal
9409     FROM %1$sdemandeur
9410     INNER JOIN %1$slien_dossier_demandeur
9411     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
9412     WHERE lien_dossier_demandeur.dossier = \'%2$s\'
9413     ',
9414     DB_PREFIXE,
9415     $this->getVal($this->clePrimaire)
9416     );
9417     $res = $this->f->get_all_results_from_db_query($query, true);
9418     if ($res['code'] === 'KO') {
9419     return false;
9420     }
9421     return $res['result'];
9422     }
9423 softime 8477
9424 softime 10573 /**
9425     * TREATMENT - normalize_address
9426     *
9427     * Enregistre en base de données les valeurs concernant l'adresse normalisée.
9428     *
9429     * @param string $address Valeur de l'adresse normalisée.
9430     * @param string $address_json JSON de toutes les données de l'adresse normalisée.
9431     * @return boolean
9432     */
9433     public function normalize_address(string $address = null, string $address_json = '{}') {
9434     //
9435     $this->begin_treatment(__METHOD__);
9436     // Valeurs par défaut si l'adresse normalisée est vide
9437     if ($address === '') {
9438     $address = null;
9439     $address_json = '{}';
9440     }
9441     // Valeur par défaut pour le JSON de l'adresse si l'adresse saisie ne
9442     // correspond au label du JSON, donc adresse non sélectionnée parmis les
9443     // résultats retourner par l'API adresse
9444     if ($address !== null) {
9445     $address_json_decode = json_decode($address_json, true);
9446     if (isset($address_json_decode['label']) === true
9447     && $address !== $address_json_decode['label']) {
9448     //
9449     $address_json = '{}';
9450     }
9451     }
9452     //
9453     $this->correct = true;
9454     $data = array();
9455     $data["adresse_normalisee"] = $address;
9456     $data["adresse_normalisee_json"] = $address_json;
9457     //
9458     $res = $this->f->db->autoExecute(
9459     sprintf('%s%s', DB_PREFIXE, $this->table),
9460     $data,
9461     DB_AUTOQUERY_UPDATE,
9462     sprintf("%s = '%s'", $this->clePrimaire, $this->getVal($this->clePrimaire))
9463     );
9464     $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);
9465     if ($this->f->isDatabaseError($res, true) === true) {
9466     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
9467     $this->correct = false;
9468     return $this->end_treatment(__METHOD__, false);
9469     }
9470     return $this->end_treatment(__METHOD__, true);
9471     }
9472 mbroquet 3730
9473 softime 10573 public function get_last_instruction_decision() {
9474     $query = sprintf('
9475     SELECT
9476     instruction.instruction
9477     FROM %1$sinstruction
9478     INNER JOIN %1$sdossier
9479     ON dossier.dossier = instruction.dossier
9480     INNER JOIN %1$setat
9481     ON dossier.etat = etat.etat
9482     WHERE instruction.etat = dossier.etat
9483     AND instruction.dossier = \'%2$s\'
9484     AND etat.statut = \'%3$s\'
9485     ORDER BY instruction.instruction DESC
9486     LIMIT 1
9487     ',
9488     DB_PREFIXE,
9489     $this->getVal('dossier'),
9490     'cloture'
9491     );
9492     $res = $this->f->get_one_result_from_db_query($query, true);
9493     if ($res['code'] === 'KO') {
9494     return false;
9495     }
9496     return $res['result'];
9497     }
9498 softime 7996
9499 softime 10573 /**
9500     * VIEW - view_normalize_address.
9501     *
9502     * Formulaire de recherche de l'adresse normalisée.
9503     *
9504     * @return void
9505     */
9506     public function view_normalize_address() {
9507     // Vérification de l'accessibilité sur l'élément
9508     $this->checkAccessibility();
9509    
9510     // Par défaut l'adresse saisie est celle renseignée sur le dossier
9511     $address_val = trim(preg_replace('/\s\s+/', ' ', sprintf('%s %s %s %s %s %s %s',
9512     $this->getVal('terrain_adresse_voie_numero'),
9513     $this->getVal('terrain_adresse_voie'),
9514     $this->getVal('terrain_adresse_lieu_dit'),
9515     $this->getVal('terrain_adresse_localite'),
9516     $this->getVal('terrain_adresse_code_postal'),
9517     $this->getVal('terrain_adresse_bp'),
9518     $this->getVal('terrain_adresse_cedex')
9519     )));
9520     $address_val_json = '{}';
9521     if ($this->getVal('adresse_normalisee') !== null
9522     && $this->getVal('adresse_normalisee') !== '') {
9523     //
9524     $address_val = $this->getVal('adresse_normalisee');
9525     $address_val_json = htmlentities($this->getVal('adresse_normalisee_json'));
9526     if ($this->f->get_submitted_post_value("submit-normalize") === null) {
9527     $this->f->displayMessage("error", __("L'adresse de ce terrain a déjà été normalisée."));
9528     }
9529     }
9530    
9531     /**
9532     * TREATMENT
9533     */
9534     // Traitement si validation du formulaire
9535     if ($this->f->get_submitted_post_value("submit-normalize") !== null) {
9536     //
9537     $this->normalize_address($_POST["address"], $_POST["address_json"]);
9538     return;
9539     }
9540    
9541     // Formulaire de validation
9542     $this->f->layout->display__form_container__begin(array(
9543     "action" => "",
9544     "name" => "f2_normalize_address",
9545     "onsubmit" => "normalize_address(this);return false;",
9546     ));
9547     //
9548     printf('
9549     <div id="sousform-href" data-href="%s"></div>',
9550     $this->compose_form_url("form", array(
9551     "validation" => null,
9552     "maj" => 160,
9553     "retour" => "form",
9554     ))
9555     );
9556     $champs = array('address', 'address_json', );
9557     // Instanciation de l'objet formulaire
9558     $this->form = $this->f->get_inst__om_formulaire(array(
9559     "validation" => 0,
9560     "maj" => $this->getParameter("maj"),
9561     "champs" => $champs,
9562     ));
9563     // Paramétrage des champs du formulaire
9564     // address
9565     $this->form->setLib("address", __("adresse à normaliser"));
9566     $this->form->setTaille("address", 60);
9567     $this->form->setMax("address", 255);
9568     $this->form->setType("address", "text");
9569     $this->form->setVal('address', $address_val);
9570     // address_json
9571     $this->form->setType("address_json", "hidden");
9572     $this->form->setVal('address_json', $address_val_json);
9573     $this->f->displayDescription(__("Veuillez sélectionner l'adresse normalisée qui se rapproche le plus de l'adresse du terrain."));
9574     // Ouverture du conteneur de formulaire
9575     $this->form->entete();
9576     $this->form->afficher($champs, 0, false, false);
9577     $this->form->enpied();
9578     $this->f->layout->display__form_controls_container__begin(array(
9579     "controls" => "bottom",
9580     ));
9581     $this->f->layout->display__form_input_submit(array(
9582     "name" => "submit-normalize",
9583     "value" => __("Normaliser l'adresse"),
9584     "class" => "boutonFormulaire",
9585     ));
9586     $this->f->layout->display__form_controls_container__end();
9587     //
9588     $this->f->layout->display__form_container__end();
9589     }
9590    
9591    
9592     public function get_last_instruction_incompletude() {
9593     $query = sprintf('
9594     SELECT
9595     instruction.instruction
9596     FROM %1$sinstruction
9597     INNER JOIN %1$sevenement
9598     ON evenement.evenement = instruction.evenement
9599     WHERE instruction.dossier = \'%2$s\'
9600     AND evenement.type = \'%3$s\'
9601     ORDER BY instruction.instruction DESC
9602     LIMIT 1
9603     ',
9604     DB_PREFIXE,
9605     $this->getVal('dossier'),
9606     'incompletude'
9607     );
9608     $res = $this->f->get_one_result_from_db_query($query, true);
9609     if ($res['code'] === 'KO') {
9610     return false;
9611     }
9612     return $res['result'];
9613     }
9614    
9615     function get_max_num_suffixe($dat_c, $annee, $dep_c, $com_c, $num) {
9616     //
9617     $query = sprintf('
9618     SELECT MAX(numerotation_num_suffixe) as max_num_suffixe
9619     FROM %1$sdossier
9620     WHERE numerotation_type = \'%2$s\'
9621     AND annee = \'%3$s\'
9622     AND numerotation_dep = \'%4$s\'
9623     AND numerotation_com = \'%5$s\'
9624     AND numerotation_num = \'%6$s\'
9625     ',
9626     DB_PREFIXE,
9627     $dat_c,
9628     $annee,
9629     $dep_c,
9630     $com_c,
9631     $num
9632     );
9633     $res = $this->f->get_one_result_from_db_query($query, true);
9634     if ($res['code'] === 'KO') {
9635     return null;
9636     }
9637     //
9638     return $res['result'];
9639     }
9640    
9641     public function view_json_data() {
9642     $this->checkAccessibility();
9643     $this->f->disableLog();
9644     $view = $this->get_json_data();
9645     printf(json_encode($view));
9646     }
9647    
9648     public function get_json_data() {
9649     $val = array_combine($this->champs, $this->val);
9650     foreach ($val as $key => $value) {
9651     $val[$key] = strip_tags($value);
9652     }
9653     $inst_datd = $this->get_inst_dossier_autorisation_type_detaille();
9654     $inst_dat = $this->get_inst_dossier_autorisation_type($inst_datd->getVal('dossier_autorisation_type'));
9655     $val['dossier_autorisation_type_detaille_code'] = $inst_datd->getVal('code');
9656     $val['dossier_autorisation_type_code'] = $inst_dat->getVal('code');
9657     $val['dossier_instruction_type_code'] = $this->getCode($this->getVal('dossier_instruction_type'));
9658     $val['dossier_suffixe'] = '';
9659     if ($this->getSuffixe($this->getVal('dossier_instruction_type')) === 't') {
9660     $val['dossier_suffixe'] = sprintf('%s%s',
9661     $this->getCode($this->getVal('dossier_instruction_type')),
9662     $this->get_dossier_instruction_version()
9663     );
9664     }
9665     /*$parameters = $this->f->getCollectivite($this->getVal('om_collectivite'));
9666     $val['insee'] = $parameters['insee'];*/
9667     $val['insee'] = $this->get_da_insee();
9668     $inst_ac = $this->get_inst_autorite_competente($val['autorite_competente']);
9669     $val['autorite_competente_code'] = $inst_ac->getVal('code');
9670 softime 10808 $val['source_depot'] = $this->get_source_depot_from_demande();
9671 softime 10573 return $val;
9672     }
9673    
9674     public function update_by_instruction(array $val, array $extra_params = array()) {
9675     $this->begin_treatment(__METHOD__);
9676     // XXX Supprime les champs qui n'existent pas dans dossier
9677     $valF = $val;
9678     unset($valF['instruction']);
9679 softime 10968 unset($valF['crud']);
9680 softime 10573 if (empty($valF) === false) {
9681     $res = $this->f->db->autoExecute(
9682     sprintf('%s%s', DB_PREFIXE, $this->table),
9683     $valF,
9684     DB_AUTOQUERY_UPDATE,
9685     sprintf("%s = '%s'", $this->clePrimaire, $this->getVal($this->clePrimaire))
9686     );
9687     $this->f->addToLog(__METHOD__."(): db->autoexecute(\"".sprintf('%s%s', DB_PREFIXE, $this->table)."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".sprintf("%s = '%s'", $this->clePrimaire, $this->getVal($this->clePrimaire))."\");", VERBOSE_MODE);
9688     if ($this->f->isDatabaseError($res, true) === true) {
9689     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
9690     $this->correct = false;
9691     return $this->end_treatment(__METHOD__, false);
9692     }
9693     }
9694     $trigger = $this->trigger_update_by_instruction($val);
9695     if ($trigger === false) {
9696 softime 10808 $this->addToLog(__METHOD__."(): ".__("Erreur lors de la mise à jour par instruction."), DEBUG_MODE);
9697 softime 10573 $this->correct = false;
9698     return $this->end_treatment(__METHOD__, false);
9699     }
9700     return $this->end_treatment(__METHOD__, true);
9701     }
9702    
9703     protected function trigger_update_by_instruction(array $val, array $extra_params = array()) {
9704     foreach ($this->task_types as $task_type) {
9705     $method = sprintf('add_task_%s', $task_type);
9706     if (method_exists($this, $method) === true) {
9707     //
9708     if ($this->f->is_type_dossier_platau($this->getVal('dossier_autorisation')) === true
9709 softime 10808 && $this->getVal('etat_transmission_platau') !== 'jamais_transmissible'
9710     && ($this->f->is_option_mode_service_consulte_enabled() !== true
9711     || ($this->f->is_option_mode_service_consulte_enabled() === true
9712     && ($this->get_source_depot_from_demande() === 'platau'
9713     || $this->get_source_depot_from_demande() === 'portal')))) {
9714 softime 10573 //
9715     $res = $this->$method($val, $extra_params);
9716     if ($res !== true) {
9717     return $res;
9718     }
9719     }
9720     }
9721     }
9722     return true;
9723     }
9724    
9725     protected function add_task_pec_metier_consultation(array $val, array $extra_params = array()) {
9726     if (array_key_exists("pec_metier", $val) === true
9727 softime 11228 && $val['pec_metier'] !== null
9728     && $val['pec_metier'] !== '') {
9729 softime 10573 //
9730     $inst_task = $this->f->get_inst__om_dbform(array(
9731     "obj" => "task",
9732     "idx" => 0,
9733     ));
9734     $task_val = array(
9735     'type' => 'pec_metier_consultation',
9736     'object_id' => $val['instruction'],
9737     'dossier' => $this->getVal($this->clePrimaire),
9738     );
9739     if ($this->f->is_option_mode_service_consulte_enabled() === false
9740     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
9741     $task_val['state'] = $inst_task::STATUS_DRAFT;
9742     }
9743     $add_task = $inst_task->add_task(array('val' => $task_val));
9744     if ($add_task === false) {
9745     return false;
9746     }
9747     }
9748     return true;
9749     }
9750    
9751     protected function add_task_qualification_DI(array $val, array $extra_params = array()) {
9752     if (array_key_exists("autorite_competente", $val) === true
9753     && $val["autorite_competente"] !== $this->getVal('autorite_competente')) {
9754     //
9755     $inst_task = $this->f->get_inst__om_dbform(array(
9756     "obj" => "task",
9757     "idx" => 0,
9758     ));
9759     $task_val = array(
9760     'type' => 'qualification_DI',
9761     'object_id' => $val['instruction'],
9762     'dossier' => $this->getVal($this->clePrimaire),
9763     );
9764     if ($this->f->is_option_mode_service_consulte_enabled() === false
9765     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
9766     $task_val['state'] = $inst_task::STATUS_DRAFT;
9767     }
9768     $add_task = $inst_task->add_task(array('val' => $task_val));
9769     if ($add_task === false) {
9770     return false;
9771     }
9772     }
9773     return true;
9774     }
9775    
9776     protected function add_task_decision_DI(array $val, array $extra_params = array()) {
9777     if (array_key_exists("date_decision", $val) === true
9778     && array_key_exists("avis_decision", $val) === true
9779     && $val['date_decision'] !== null
9780     && $val['date_decision'] !== ''
9781     && $val['avis_decision'] !== null
9782 softime 11228 && $val['avis_decision'] !== '') {
9783 softime 10573 //
9784 softime 10869 $inst_ad = $this->f->get_inst__om_dbform(array(
9785     "obj" => "avis_decision",
9786     "idx" => $val['avis_decision'],
9787 softime 10573 ));
9788 softime 10869 if ($inst_ad->getVal('prescription') === 'f') {
9789     //
9790     $inst_task = $this->f->get_inst__om_dbform(array(
9791     "obj" => "task",
9792     "idx" => 0,
9793     ));
9794     $task_val = array(
9795     'type' => 'decision_DI',
9796     'object_id' => $val['instruction'],
9797     'dossier' => $this->getVal($this->clePrimaire),
9798     );
9799     if ($this->f->is_option_mode_service_consulte_enabled() === false
9800     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
9801     $task_val['state'] = $inst_task::STATUS_DRAFT;
9802     }
9803     $add_task = $inst_task->add_task(array('val' => $task_val));
9804     if ($add_task === false) {
9805     return false;
9806     }
9807 softime 10573 }
9808     }
9809     return true;
9810     }
9811    
9812     protected function add_task_avis_consultation(array $val, array $extra_params = array()) {
9813     if (array_key_exists("date_decision", $val) === true
9814     && array_key_exists("avis_decision", $val) === true
9815     && $val['date_decision'] !== null
9816     && $val['date_decision'] !== ''
9817     && $val['avis_decision'] !== null
9818 softime 11228 && $val['avis_decision'] !== '') {
9819 softime 10573 //
9820 softime 10869 $inst_ad = $this->f->get_inst__om_dbform(array(
9821     "obj" => "avis_decision",
9822     "idx" => $val['avis_decision'],
9823 softime 10573 ));
9824 softime 10869 if ($inst_ad->getVal('prescription') === 'f') {
9825     //
9826     $inst_task = $this->f->get_inst__om_dbform(array(
9827     "obj" => "task",
9828     "idx" => 0,
9829     ));
9830     $task_val = array(
9831     'type' => 'avis_consultation',
9832     'object_id' => $val['instruction'],
9833     'dossier' => $this->getVal($this->clePrimaire),
9834     );
9835     if ($this->f->is_option_mode_service_consulte_enabled() === false
9836     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
9837     $task_val['state'] = $inst_task::STATUS_DRAFT;
9838     }
9839     $add_task = $inst_task->add_task(array('val' => $task_val));
9840     if ($add_task === false) {
9841     return false;
9842     }
9843 softime 10573 }
9844 softime 10869 }
9845     return true;
9846     }
9847    
9848     protected function add_task_prescription(array $val, array $extra_params = array()) {
9849     if (array_key_exists("date_decision", $val) === true
9850     && array_key_exists("avis_decision", $val) === true
9851     && $val['date_decision'] !== null
9852     && $val['date_decision'] !== ''
9853     && $val['avis_decision'] !== null
9854 softime 11228 && $val['avis_decision'] !== '') {
9855 softime 10869 //
9856     $inst_ad = $this->f->get_inst__om_dbform(array(
9857     "obj" => "avis_decision",
9858     "idx" => $val['avis_decision'],
9859     ));
9860     if ($inst_ad->getVal('prescription') === 't') {
9861     //
9862     $inst_task = $this->f->get_inst__om_dbform(array(
9863     "obj" => "task",
9864     "idx" => 0,
9865     ));
9866     $task_val = array(
9867     'type' => 'prescription',
9868     'object_id' => $val['instruction'],
9869     'dossier' => $this->getVal($this->clePrimaire),
9870     );
9871     if ($this->f->is_option_mode_service_consulte_enabled() === false
9872     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
9873     $task_val['state'] = $inst_task::STATUS_DRAFT;
9874     }
9875     $add_task = $inst_task->add_task(array('val' => $task_val));
9876     if ($add_task === false) {
9877     return false;
9878     }
9879 softime 10573 }
9880     }
9881     return true;
9882     }
9883    
9884     protected function add_task_completude_DI(array $val, array $extra_params = array()) {
9885     if (array_key_exists("incomplet_notifie", $val) === true
9886 softime 10968 && $val['incomplet_notifie'] === 'f'
9887     && array_key_exists("crud", $val) === true
9888     && $val['crud'] !== 'delete') {
9889 softime 10573 //
9890     $inst_task = $this->f->get_inst__om_dbform(array(
9891     "obj" => "task",
9892     "idx" => 0,
9893     ));
9894     $task_val = array(
9895     'type' => 'completude_DI',
9896     'object_id' => $val['instruction'],
9897     'dossier' => $this->getVal($this->clePrimaire),
9898     );
9899     if ($this->f->is_option_mode_service_consulte_enabled() === false
9900     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
9901     $task_val['state'] = $inst_task::STATUS_DRAFT;
9902     }
9903     $add_task = $inst_task->add_task(array('val' => $task_val));
9904     if ($add_task === false) {
9905     return false;
9906     }
9907     }
9908     return true;
9909     }
9910    
9911     public function add_task_incompletude_DI(array $val, array $extra_params = array()) {
9912     if (array_key_exists("incomplet_notifie", $val) === true
9913 softime 10968 && $val['incomplet_notifie'] === 't'
9914     && array_key_exists("crud", $val) === true
9915     && $val['crud'] !== 'delete') {
9916 softime 10573 //
9917     $inst_task = $this->f->get_inst__om_dbform(array(
9918     "obj" => "task",
9919     "idx" => 0,
9920     ));
9921     $task_val = array(
9922     'type' => 'incompletude_DI',
9923     'object_id' => $val['instruction'],
9924     'dossier' => $this->getVal($this->clePrimaire),
9925     );
9926     if ($this->f->is_option_mode_service_consulte_enabled() === false
9927     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
9928     $task_val['state'] = $inst_task::STATUS_DRAFT;
9929     }
9930     $add_task = $inst_task->add_task(array('val' => $task_val));
9931     if ($add_task === false) {
9932     return false;
9933     }
9934     }
9935     return true;
9936     }
9937    
9938     public function get_parcelles($dossier = null) {
9939     if ($dossier === null) {
9940     $dossier = $this->getVal('dossier');
9941     }
9942     $query = sprintf('
9943     SELECT *
9944     FROM %1$sdossier_parcelle
9945     WHERE dossier = \'%2$s\'
9946     ORDER BY dossier_parcelle
9947     ',
9948     DB_PREFIXE,
9949     $dossier
9950     );
9951     $res = $this->f->get_all_results_from_db_query($query, true);
9952     if ($res['code'] === 'KO') {
9953     return false;
9954     }
9955     return $res['result'];
9956     }
9957    
9958     protected function getDossier($champ = null) {
9959     return $this->getVal($this->clePrimaire);
9960     }
9961    
9962     protected function getDossierObject() {
9963     return $this;
9964     }
9965    
9966     /**
9967     * Recupère la source du dépôt
9968     *
9969     * @return string source du dépôt
9970     */
9971     public function get_source_depot_from_demande() {
9972     $demande = $this->get_inst_demande();
9973     return $demande->getVal('source_depot');
9974     }
9975    
9976     }

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26