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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 13528 - (hide annotations)
Thu Dec 15 22:46:03 2022 UTC (2 years, 1 month ago) by softime
File size: 482523 byte(s)
chore(branch): fusion de la branche d'intégration 5.15.0-develop dans le trunk

1 mbroquet 3730 <?php
2 softime 7996 /**
3     * DBFORM - 'dossier' - Surcharge gen.
4     *
5     * @package openads
6     * @version SVN : $$Id: dossier.class.php 6912 2017-06-15 08:20:09Z tuxayo $
7     */
8 mbroquet 3730
9 softime 6565 require_once "../gen/obj/dossier.class.php";
10 mbroquet 3730
11 softime 13528 require_once "../obj/geoads.class.php";
12    
13 mbroquet 3730 class dossier extends dossier_gen {
14    
15     var $maj;
16     var $dossier_instruction_type;
17     var $is_incomplet_notifie = null;
18 softime 6565 var $valIdDemandeur = array("petitionnaire_principal" => array(),
19     "delegataire" => array(),
20     "petitionnaire" => array(),
21     "plaignant_principal" => array(),
22     "plaignant" => array(),
23     "contrevenant_principal" => array(),
24     "contrevenant" => array(),
25     "requerant_principal" => array(),
26     "requerant" => array(),
27     "avocat_principal" => array(),
28     "avocat" => array(),
29 softime 7067 "bailleur_principal" => array(),
30     "bailleur" => array(),
31 softime 10573 "proprietaire" => array(),
32     "architecte_lc" => array(),
33     "paysagiste" => array(),
34 softime 6565 );
35     var $postedIdDemandeur = array("petitionnaire_principal" => array(),
36     "delegataire" => array(),
37     "petitionnaire" => array(),
38     "plaignant_principal" => array(),
39     "plaignant" => array(),
40     "contrevenant_principal" => array(),
41     "contrevenant" => array(),
42     "requerant_principal" => array(),
43     "requerant" => array(),
44     "avocat_principal" => array(),
45     "avocat" => array(),
46 softime 7067 "bailleur_principal" => array(),
47     "bailleur" => array(),
48 softime 10573 "proprietaire" => array(),
49     "architecte_lc" => array(),
50     "paysagiste" => array(),
51 softime 6565 );
52 mbroquet 3730 /**
53     * Instance de la classe taxe_amenagement.
54     *
55     * @var null
56     */
57     var $inst_taxe_amenagement = null;
58    
59     /**
60     * Instance de la classe donnees_techniques.
61     *
62     * @var null
63     */
64     var $inst_donnees_techniques = null;
65    
66     /**
67     * Instance de la classe dossier_autorisation.
68     *
69     * @var mixed (resource | null)
70     */
71     var $inst_dossier_autorisation = null;
72    
73     /**
74     * Instance de la classe dossier_autorisation_type_detaille.
75     *
76     * @var null
77     */
78     var $inst_dossier_autorisation_type_detaille = null;
79    
80     /**
81     * Instance de la classe cerfa.
82     *
83     * @var null
84     */
85     var $inst_cerfa = null;
86    
87 softime 6565 /**
88     * Groupe du dossier d'instruction.
89     *
90     * @var null
91     */
92     var $groupe = null;
93 mbroquet 3730
94 softime 6565 /**
95     * Instance de la classe groupe.
96     */
97     var $inst_groupe = null;
98    
99     /**
100     * Instance de la classe dossier_autorisation_type.
101     *
102     * @var null
103     */
104     var $inst_dossier_autorisation_type = null;
105    
106 softime 7366 /**
107     * Instance de la classe demande.
108     *
109     * @var mixed (resource | null)
110     */
111     var $inst_demande = null;
112 softime 10573
113     /**
114     * Liste des types de tâches.
115     *
116     * @var array
117     */
118     var $task_types = array(
119     'incompletude_DI',
120     'qualification_DI',
121     'decision_DI',
122     'completude_DI',
123     'pec_metier_consultation',
124     'avis_consultation',
125     'modification_DI',
126 softime 10869 'prescription',
127 softime 10573 );
128    
129     /**
130     * Liste des champs requis dans Plat'AU.
131     *
132     * @var array
133     */
134     var $list_platau_required_fields_dossier = array(
135     'donnees_techniques.enga_decla_date',
136     'donnees_techniques.enga_decla_lieu',
137     'dossier.terrain_adresse_localite',
138     'demandeur.localite',
139     'architecte.ville'
140     );
141    
142 softime 13528 /**
143     * Set un tableau pour la conception des requêtes de suppression des éléments
144     * dans les tables de liaisons.
145     * Le tableau est constitué de la manière suivante :
146     * 'nom_de_la_table' => array(
147     * 'table' => "nom de la table à supprimer si il
148     * n'a pas pu être renseigné comme clé du tableau",
149     * 'condition_field' => 'nom du champs utilisée pour identifier
150     * les éléments liés',
151     * 'condition_value' => 'valeur utilisée pour identifier les
152     * éléments liés'
153     * ),
154     *
155     * @var array
156     */
157     public function set_related_tables() {
158     $this->related_tables = array(
159     'lien_demande_demandeur' => array(
160     'condition_field' => 'demande',
161     'condition_value' => $this->get_idx_by_args(
162     'demande',
163     'demande',
164     'dossier_instruction',
165     $this->getVal($this->clePrimaire)),
166     ),
167     'demande' => array(
168     'condition_field' => 'dossier_instruction',
169     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
170     ),
171     'lien_dossier_demandeur' => array(
172     'condition_field' => 'dossier',
173     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
174     ),
175     'instruction_notification_document' => array(
176     'condition_field' => 'instruction_notification',
177     'condition_value' => sprintf(
178     'SELECT
179     %2$s
180     FROM
181     %1$s%2$s
182     WHERE
183     %3$s IN (%4$s)',
184     DB_PREFIXE,
185     'instruction_notification',
186     'instruction',
187     sprintf(
188     'SELECT
189     %2$s
190     FROM
191     %1$s%2$s
192     WHERE
193     %3$s = \'%4$s\'',
194     DB_PREFIXE,
195     'instruction',
196     'dossier',
197     $this->getVal($this->clePrimaire)
198     )
199     ),
200     ),
201     'instruction_notification' => array(
202     'condition_field' => 'instruction',
203     'condition_value' => sprintf(
204     'SELECT
205     %2$s
206     FROM
207     %1$s%2$s
208     WHERE
209     %3$s = \'%4$s\'',
210     DB_PREFIXE,
211     'instruction',
212     'dossier',
213     $this->getVal($this->clePrimaire)
214     ),
215     ),
216     'instruction' => array(
217     'condition_field' => 'dossier',
218     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
219     ),
220     'dossier_parcelle' => array(
221     'condition_field' => 'dossier',
222     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
223     ),
224     'dossier_contrainte' => array(
225     'condition_field' => 'dossier',
226     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
227     ),
228     'lien_donnees_techniques_moyen_retenu_juge' => array(
229     'condition_field' => 'donnees_techniques',
230     'condition_value' => $this->get_idx_by_args(
231     'donnees_techniques',
232     'donnees_techniques',
233     'dossier_instruction',
234     $this->getVal($this->clePrimaire)),
235     ),
236     'lien_donnees_techniques_moyen_souleve' => array(
237     'condition_field' => 'donnees_techniques',
238     'condition_value' => $this->get_idx_by_args(
239     'donnees_techniques',
240     'donnees_techniques',
241     'dossier_instruction',
242     $this->getVal($this->clePrimaire)),
243     ),
244     'donnees_techniques_di' => array(
245     'table' => 'donnees_techniques',
246     'condition_field' => 'dossier_instruction',
247     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
248     ),
249     'blocnote' => array(
250     'condition_field' => 'dossier',
251     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
252     ),
253     'consultation_entrante' => array(
254     'condition_field' => 'dossier',
255     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
256     ),
257     'consultation' => array(
258     'condition_field' => 'dossier',
259     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
260     ),
261     'document_numerise' => array(
262     'condition_field' => 'dossier',
263     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
264     ),
265     'rapport_instruction' => array(
266     'condition_field' => 'dossier_instruction',
267     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
268     ),
269     'dossier_commission' => array(
270     'condition_field' => 'dossier',
271     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
272     ),
273     'dossier_message' => array(
274     'condition_field' => 'dossier',
275     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
276     ),
277     'lien_dossier_dossier_1' => array(
278     'table' => 'lien_dossier_dossier',
279     'condition_field' => 'dossier_src',
280     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
281     ),
282     'lien_dossier_dossier_2' => array(
283     'table' => 'lien_dossier_dossier',
284     'condition_field' => 'dossier_cible',
285     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
286     ),
287     'dossier_geolocalisation' => array(
288     'condition_field' => 'dossier',
289     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
290     ),
291     'donnees_techniques_lot' => array(
292     'table' => 'donnees_techniques',
293     'condition_field' => 'lot',
294     'condition_value' => $this->get_idx_by_args(
295     "string_agg(lot::text, ', ')",
296     'lot',
297     'dossier',
298     $this->getVal($this->clePrimaire)),
299     ),
300     'lien_lot_demandeur' => array(
301     'condition_field' => 'lot',
302     'condition_value' => $this->get_idx_by_args(
303     "string_agg(lot::text, ', ')",
304     'lot',
305     'dossier',
306     $this->getVal($this->clePrimaire)),
307     ),
308     'lot' => array(
309     'condition_field' => 'dossier',
310     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
311     ),
312     'dossier_operateur' => array(
313     'condition_field' => 'dossier_instruction',
314     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
315     )
316     );
317     }
318 softime 10573
319 softime 13528
320 mbroquet 3730 /*Mutateur pour ma variable dossier_instruction_type*/
321     public function getDossierInstructionType(){
322     return $this->dossier_instruction_type;
323     }
324     public function setDossierInstructionType($dossier_instruction_type){
325     $this->dossier_instruction_type = $dossier_instruction_type;
326     }
327    
328     /**
329     * Définition des actions disponibles sur la classe.
330     *
331     * @return void
332     */
333     function init_class_actions() {
334    
335     parent::init_class_actions();
336    
337     // ACTION - 003 - consulter
338     //
339 softime 6565 $this->class_actions[3]["condition"] = array(
340     "is_user_from_allowed_collectivite",
341     "check_context",
342     );
343 mbroquet 3730
344     // ACTION - 004 - contrainte
345     //
346     $this->class_actions[4] = array(
347     "identifier" => "contrainte",
348     "view" => "view_contrainte",
349     "permission_suffix" => "contrainte_tab",
350     "condition" => array(
351     "is_user_from_allowed_collectivite",
352     ),
353     );
354    
355     // ACTION - 005 - view_document_numerise
356     // Interface spécifique du tableau des pièces
357     $this->class_actions[5] = array(
358     "identifier" => "view_document_numerise",
359     "view" => "view_document_numerise",
360     "permission_suffix" => "document_numerise",
361     "condition" => array(
362     "is_user_from_allowed_collectivite",
363     ),
364     );
365    
366     // ACTION - 006 - view_sitadel
367     //
368     $this->class_actions[6] = array(
369     "identifier" => "sitadel",
370     "view" => "view_sitadel",
371     "permission_suffix" => "export_sitadel",
372     );
373 softime 6565
374     // ACTION - 777 - Redirection vers la classe fille adéquate
375     //
376     $this->class_actions[777] = array(
377     "identifier" => "redirect",
378     "view" => "redirect",
379     "permission_suffix" => "consulter",
380     );
381 softime 10573
382     //
383     //
384     $this->class_actions[998] = array(
385     "identifier" => "json_data",
386     "view" => "view_json_data",
387     "permission_suffix" => "consulter",
388     );
389 mbroquet 3730 }
390    
391     /**
392 softime 8989 * Clause select pour la requête de sélection des données de l'enregistrement.
393     *
394     * @return array
395     */
396     function get_var_sql_forminc__champs() {
397 softime 10573 $champs = array(
398 softime 8989 "dossier.dossier",
399 softime 10573 "dossier.om_collectivite AS om_collectivite"
400     );
401     if ($this->f->is_option_dossier_commune_enabled()) {
402     $champs[] = "dossier.commune AS commune";
403     }
404     array_push($champs,
405 softime 8989 "dossier.dossier_libelle",
406     "dossier.dossier_instruction_type",
407     "dossier_autorisation_type_detaille.libelle as dossier_autorisation_type_detaille",
408     "autorisation_contestee",
409     "donnees_techniques.ctx_reference_dsj as ctx_reference_dsj",
410     "donnees_techniques.ctx_reference_sagace as ctx_reference_sagace",
411     "dossier.depot_electronique",
412     "CASE WHEN requerant_principal.qualite='particulier' THEN
413     TRIM(CONCAT(requerant_principal.particulier_nom, ' ', requerant_principal.particulier_prenom))
414     ELSE
415     TRIM(CONCAT(requerant_principal.personne_morale_raison_sociale, ' ', requerant_principal.personne_morale_denomination))
416     END as requerants",
417     "CASE WHEN petitionnaire_principal.qualite='particulier' THEN
418     TRIM(CONCAT(petitionnaire_principal.particulier_nom, ' ', petitionnaire_principal.particulier_prenom))
419     ELSE
420     TRIM(CONCAT(petitionnaire_principal.personne_morale_raison_sociale, ' ', petitionnaire_principal.personne_morale_denomination))
421     END as dossier_petitionnaire",
422     "'' as dossier_petitionnaires",
423     "CASE WHEN contrevenant_principal.qualite='particulier' THEN
424     TRIM(CONCAT(contrevenant_principal.particulier_nom, ' ', contrevenant_principal.particulier_prenom))
425     ELSE
426     TRIM(CONCAT(contrevenant_principal.personne_morale_raison_sociale, ' ', contrevenant_principal.personne_morale_denomination))
427     END as contrevenants",
428 softime 10573 "TRIM(
429     CONCAT_WS(
430     ' ',
431     replace(dossier.terrain_references_cadastrales,';',' '),
432     '<br/>',
433 softime 11057 CASE
434     WHEN dossier.adresse_normalisee IS NULL
435     OR TRIM(dossier.adresse_normalisee) = ''
436     THEN
437     CONCAT_WS(
438     ' ',
439     dossier.terrain_adresse_voie_numero,
440     dossier.terrain_adresse_voie,
441     dossier.terrain_adresse_code_postal
442     )
443     ELSE
444     dossier.adresse_normalisee
445     END
446 softime 10573 )
447     ) as terrain",
448 softime 8989 "arrondissement.libelle as dossier_arrondissement",
449 softime 10573 'dossier.adresse_normalisee',
450     'dossier.adresse_normalisee_json',
451 softime 12847 'dossier.dossier_parent',
452 softime 8989 // description/nature des travaux. En cas de modif, bloc de code aussi
453     // présent dans 'dossier_instruction.inc.php','om_requete'
454     // et 'stats à la demande'.
455     "CONCAT_WS(
456     '<br/>',
457     CASE WHEN co_projet_desc = '' THEN
458     NULL
459     ELSE
460     TRIM(co_projet_desc)
461     END,
462     CASE WHEN ope_proj_desc = '' THEN
463     NULL
464     ELSE
465     TRIM(ope_proj_desc)
466     END,
467     CASE WHEN am_projet_desc = '' THEN
468     NULL
469     ELSE
470     TRIM(am_projet_desc)
471     END,
472     CASE WHEN dm_projet_desc = '' THEN
473     NULL
474     ELSE
475     TRIM(dm_projet_desc)
476     END,
477     CASE WHEN donnees_techniques.erp_cstr_neuve IS TRUE
478     THEN '".str_replace("'", "''", _('erp_cstr_neuve'))."' END,
479     CASE WHEN donnees_techniques.erp_trvx_acc IS TRUE
480     THEN '".str_replace("'", "''", _('erp_trvx_acc'))."' END,
481     CASE WHEN donnees_techniques.erp_extension IS TRUE
482     THEN '".str_replace("'", "''", _('erp_extension'))."' END,
483     CASE WHEN donnees_techniques.erp_rehab IS TRUE
484     THEN '".str_replace("'", "''", _('erp_rehab'))."' END,
485     CASE WHEN donnees_techniques.erp_trvx_am IS TRUE
486     THEN '".str_replace("'", "''", _('erp_trvx_am'))."' END,
487     CASE WHEN donnees_techniques.erp_vol_nouv_exist IS TRUE
488     THEN '".str_replace("'", "''", _('erp_vol_nouv_exist'))."' END
489     ) as \"description_projet\"",
490     //
491     "donnees_techniques.ctx_synthese_nti as dt_ctx_synthese_nti",
492     "donnees_techniques.ctx_synthese_anr as dt_ctx_synthese_anr ",
493     "donnees_techniques.ctx_infraction as dt_ctx_infraction ",
494     "donnees_techniques.ctx_regularisable as dt_ctx_regularisable ",
495     "dossier_autorisation.dossier_autorisation",
496     "dossier_autorisation.dossier_autorisation_libelle",
497     "annee",
498     "autorite_competente",
499     "dossier.instructeur",
500     "instructeur_2",
501     "dossier.division",
502     "public.ST_AsText(dossier.geom::geometry) as geom",
503 softime 10573 "'' as streetview",
504     "tax_secteur",
505 softime 8989 // Enjeu
506     "enjeu_urba",
507     "enjeu_erp",
508     "'' as enjeu_ctx",
509     // Qualification
510     "erp",
511     "a_qualifier",
512 softime 10573 "pec_metier",
513 softime 10968 "etat_transmission_platau",
514 softime 8989 // Archive
515     "numero_versement_archive",
516     "date_demande",
517     // Fieldset instruction
518     // Suivi
519     // Col 1
520     "dossier.date_depot",
521 softime 10573 "dossier.date_depot_mairie",
522 softime 8989 "dossier.date_affichage",
523     "date_premiere_visite",
524     "date_derniere_visite",
525     "date_contradictoire",
526     "date_retour_contradictoire",
527     "date_ait",
528     "date_transmission_parquet",
529     "donnees_techniques.ctx_date_audience as date_audience",
530     "delai",
531     "delai_incompletude",
532     "date_dernier_depot",
533     "date_limite",
534     "date_complet",
535     "date_limite_incompletude",
536     "date_cloture_instruction",
537     // Col 2
538 softime 9282 "dossier.etat",
539 softime 8989 "evenement_suivant_tacite",
540     "evenement_suivant_tacite_incompletude",
541     // Bloc 2 fieldsets
542     // Col 1 : Fieldset "Décision"
543     "dossier.date_decision",
544     "dossier.avis_decision",
545     // Col 2 : Fieldset "Validité de l'autorisation"
546     "dossier.date_validite",
547     // Autre
548     // Col 1
549     "accord_tacite",
550     // Col 2
551     "date_rejet",
552     "date_notification_delai",
553     "dossier.date_chantier",
554     "dossier.date_achevement",
555     // Col 3
556     "date_conformite",
557     // Fieldset "Simulation des taxes"
558     "tax_mtn_part_commu",
559     "tax_mtn_part_commu_sans_exo",
560     "tax_mtn_part_depart",
561     "tax_mtn_part_depart_sans_exo",
562     "tax_mtn_part_reg",
563     "tax_mtn_part_reg_sans_exo",
564     "tax_mtn_total",
565     "tax_mtn_total_sans_exo",
566     "tax_mtn_rap",
567     "tax_mtn_rap_sans_exo",
568     // Fieldset "Localisation du terrain"
569     // Col 1
570     "dossier.terrain_adresse_voie_numero",
571     "dossier.terrain_adresse_lieu_dit",
572     "dossier.terrain_adresse_code_postal",
573     "dossier.terrain_adresse_cedex",
574     "dossier.parcelle_temporaire",
575     "dossier.terrain_references_cadastrales",
576     // Col 2
577     "dossier.terrain_adresse_voie",
578     "dossier.terrain_adresse_bp",
579     "dossier.terrain_adresse_localite",
580     "dossier.terrain_superficie",
581 softime 13528 "dossier.terrain_superficie_calculee",
582 softime 8989 //
583     "geom1",
584     "dossier.description",
585     "version",
586     "incompletude",
587     "incomplet_notifie",
588     "etat_pendant_incompletude",
589     "dossier.duree_validite",
590     "quartier",
591     "dossier.log_instructions",
592     "interface_referentiel_erp",
593     "date_modification",
594     "hash_sitadel",
595 softime 9245 "version_clos",
596     "initial_dt",
597 softime 10573 // POC
598     "dossier.numerotation_type",
599     "dossier.numerotation_dep",
600     "dossier.numerotation_com",
601     "dossier.numerotation_division",
602     "dossier.numerotation_suffixe",
603     "dossier.numerotation_entite",
604     "dossier.numerotation_num",
605     "dossier.numerotation_num_suffixe",
606     "dossier.numerotation_num_entite",
607     // CONSULTATION ENTRANTE
608     "consultation_entrante.consultation_entrante",
609     "consultation_entrante.delai_reponse",
610     "consultation_entrante.type_delai",
611     "consultation_entrante.date_consultation",
612     "consultation_entrante.date_emission",
613     "consultation_entrante.date_production_notification",
614     "consultation_entrante.date_premiere_consultation",
615     "consultation_entrante.objet_consultation",
616     "consultation_entrante.etat_consultation",
617     "consultation_entrante.type_consultation",
618     "consultation_entrante.texte_fondement_reglementaire",
619     "consultation_entrante.texte_objet_consultation",
620     "consultation_entrante.service_consultant_id",
621     "consultation_entrante.service_consultant_libelle",
622     "consultation_entrante.service_consultant_insee",
623     "consultation_entrante.service_consultant_mail",
624     "consultation_entrante.service_consultant_type",
625     "consultation_entrante.service_consultant__siren",
626 softime 11585 "consultation_entrante.dossier as dossier_consultation",
627     //
628     "'' as lien_iiue"
629 softime 8989 );
630 softime 10573 return $champs;
631 softime 8989 }
632    
633     /**
634     * Clause from pour la requête de sélection des données de l'enregistrement.
635     *
636     * @return string
637     */
638     function get_var_sql_forminc__tableSelect() {
639     return sprintf(
640     '%1$s%2$s
641     LEFT JOIN %1$savis_decision
642     ON avis_decision.avis_decision=dossier.avis_decision
643     LEFT JOIN %1$sdossier_autorisation
644     ON dossier.dossier_autorisation=dossier_autorisation.dossier_autorisation
645     LEFT JOIN %1$sdossier_autorisation_type_detaille
646     ON dossier_autorisation.dossier_autorisation_type_detaille=dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
647     LEFT JOIN (
648     SELECT *
649     FROM %1$slien_dossier_demandeur
650     INNER JOIN %1$sdemandeur
651     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
652     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
653     AND LOWER(demandeur.type_demandeur) = LOWER(\'petitionnaire\')
654     ) as petitionnaire_principal
655     ON petitionnaire_principal.dossier = dossier.dossier
656     LEFT JOIN (
657     SELECT *
658     FROM %1$slien_dossier_demandeur
659     INNER JOIN %1$sdemandeur
660     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
661     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
662     AND LOWER(demandeur.type_demandeur) = LOWER(\'requerant\')
663     ) as requerant_principal
664     ON requerant_principal.dossier = dossier.dossier
665     LEFT JOIN (
666     SELECT *
667     FROM %1$slien_dossier_demandeur
668     INNER JOIN %1$sdemandeur
669     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
670     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
671     AND LOWER(demandeur.type_demandeur) = LOWER(\'contrevenant\')
672     ) as contrevenant_principal
673     ON contrevenant_principal.dossier = dossier.dossier
674     LEFT JOIN %1$sdonnees_techniques
675     ON donnees_techniques.dossier_instruction = dossier.dossier
676     LEFT JOIN %1$setat
677     ON dossier.etat = etat.etat
678     LEFT JOIN %1$sarrondissement
679 softime 10573 ON dossier.terrain_adresse_code_postal = arrondissement.code_postal
680     LEFT JOIN %1$sconsultation_entrante
681     ON dossier.dossier = consultation_entrante.dossier',
682 softime 8989 DB_PREFIXE,
683     $this->table
684     );
685     }
686    
687     /**
688     *
689     * @return string
690     */
691     function get_var_sql_forminc__sql_avis_decision() {
692     return "SELECT avis_decision,libelle from ".DB_PREFIXE."avis_decision order by libelle";
693     }
694    
695     /**
696     *
697     * @return string
698     */
699     function get_var_sql_forminc__sql_avis_decision_by_id() {
700     return "SELECT avis_decision.avis_decision, libelle FROM ".DB_PREFIXE."avis_decision WHERE avis_decision = '<idx>'";
701     }
702    
703     /**
704     *
705     * @return string
706     */
707     function get_var_sql_forminc__sql_dossier_autorisation() {
708     return "SELECT dossier_autorisation.dossier_autorisation, dossier_autorisation.dossier_autorisation FROM ".DB_PREFIXE."dossier_autorisation ORDER BY dossier_autorisation.dossier_autorisation ASC";
709     }
710    
711     /**
712     *
713     * @return string
714     */
715     function get_var_sql_forminc__sql_dossier_autorisation_by_id() {
716     return "SELECT dossier_autorisation.dossier_autorisation, dossier_autorisation.dossier_autorisation FROM ".DB_PREFIXE."dossier_autorisation WHERE dossier_autorisation = '<idx>'";
717     }
718    
719     /**
720     *
721     * @return string
722     */
723     function get_var_sql_forminc__sql_arrondissement() {
724     return "SELECT arrondissement.arrondissement, arrondissement.libelle FROM ".DB_PREFIXE."arrondissement ORDER BY arrondissement.libelle ASC";
725     }
726    
727     /**
728     *
729     * @return string
730     */
731     function get_var_sql_forminc__sql_arrondissement_by_id() {
732     return "SELECT arrondissement.arrondissement, arrondissement.libelle FROM ".DB_PREFIXE."arrondissement WHERE arrondissement = <idx>";
733     }
734    
735     /**
736     *
737     * @return string
738     */
739     function get_var_sql_forminc__sql_autorisation_contestee() {
740     return "SELECT dossier.dossier, dossier.dossier_libelle FROM ".DB_PREFIXE."dossier ORDER BY dossier.annee ASC";
741     }
742    
743     /**
744     *
745     * @return string
746     */
747     function get_var_sql_forminc__sql_autorisation_contestee_by_id() {
748     return "SELECT dossier.dossier, dossier.dossier_libelle FROM ".DB_PREFIXE."dossier WHERE dossier = '<idx>'";
749     }
750    
751     /**
752     *
753     * @return string
754     */
755     function get_var_sql_forminc__sql_dossier_autorisation_type_detaille() {
756     return "SELECT dossier_autorisation_type_detaille.dossier_autorisation_type_detaille, dossier_autorisation_type_detaille.code
757     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
758     ORDER BY dossier_autorisation_type_detaille.libelle";
759     }
760    
761     /**
762     *
763     * @return string
764     */
765     function get_var_sql_forminc__sql_dossier_autorisation_type_detaille_by_id() {
766     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>";
767     }
768    
769     /**
770     *
771     * @return string
772     */
773     function get_var_sql_forminc__sql_demandeur() {
774     return "SELECT dossier_autorisation_type_detaille.dossier_autorisation_type_detaille, dossier_autorisation_type_detaille.libelle
775     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
776     ORDER BY dossier_autorisation_type_detaille.libelle";
777     }
778    
779     /**
780     *
781     * @return string
782     */
783     function get_var_sql_forminc__sql_demandeur_by_id() {
784     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>";
785     }
786    
787     /**
788     *
789     * @return string
790     */
791     function get_var_sql_forminc__sql_instructeur_div() {
792     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
793     FROM ".DB_PREFIXE."instructeur
794     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
795     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
796     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)))
797     <instructeur_qualite>
798     ORDER BY nom";
799     }
800    
801     /**
802     *
803     * @return string
804     */
805     function get_var_sql_forminc__sql_instructeur_div_by_id() {
806     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
807     FROM ".DB_PREFIXE."instructeur
808     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
809     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
810     WHERE instructeur = <idx>";
811     }
812    
813     /**
814     *
815     * @return string
816     */
817     function get_var_sql_forminc__sql_instructeur_div_by_di() {
818     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
819     FROM ".DB_PREFIXE."instructeur
820     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
821     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
822     LEFT JOIN ".DB_PREFIXE."direction
823     ON division.direction = direction.direction
824     LEFT JOIN ".DB_PREFIXE."om_collectivite
825     ON direction.om_collectivite = om_collectivite.om_collectivite
826     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)))
827     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
828     <instructeur_qualite>
829     ORDER BY nom";
830     }
831    
832     /**
833     *
834     * @return string
835     */
836     function get_var_sql_forminc__sql_instructeur_by_di() {
837     return "SELECT instructeur.instructeur, instructeur.nom
838     FROM ".DB_PREFIXE."instructeur
839     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
840     LEFT JOIN ".DB_PREFIXE."division
841     ON instructeur.division = division.division
842     LEFT JOIN ".DB_PREFIXE."direction
843     ON division.direction = direction.direction
844     LEFT JOIN ".DB_PREFIXE."om_collectivite
845     ON direction.om_collectivite = om_collectivite.om_collectivite
846     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)))
847     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
848     <instructeur_qualite>
849     ORDER BY instructeur.nom ASC";
850     }
851    
852     /**
853     *
854     * @return string
855     */
856     function get_var_sql_forminc__sql_instructeur_2_div() {
857     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
858     FROM ".DB_PREFIXE."instructeur
859     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
860     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
861     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)))
862 softime 13137 AND instructeur_qualite.code = <instructeur_qualite>
863 softime 8989 ORDER BY nom";
864     }
865    
866     /**
867     *
868     * @return string
869     */
870     function get_var_sql_forminc__sql_instructeur_2_div_by_id() {
871     return $this->get_var_sql_forminc__sql("instructeur_div_by_id");
872     }
873    
874     /**
875     *
876     * @return string
877     */
878     function get_var_sql_forminc__sql_instructeur_2_div_by_di() {
879     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
880     FROM ".DB_PREFIXE."instructeur
881     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
882     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
883     LEFT JOIN ".DB_PREFIXE."direction
884     ON division.direction = direction.direction
885     LEFT JOIN ".DB_PREFIXE."om_collectivite
886     ON direction.om_collectivite = om_collectivite.om_collectivite
887     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)))
888     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
889 softime 13137 AND instructeur_qualite.code = '<instructeur_qualite>'
890 softime 8989 ORDER BY nom";
891     }
892    
893     /**
894     *
895     * @return string
896     */
897     function get_var_sql_forminc__sql_instructeur_2_by_di() {
898     return "SELECT instructeur.instructeur, instructeur.nom
899     FROM ".DB_PREFIXE."instructeur
900     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
901     LEFT JOIN ".DB_PREFIXE."division
902     ON instructeur.division = division.division
903     LEFT JOIN ".DB_PREFIXE."direction
904     ON division.direction = direction.direction
905     LEFT JOIN ".DB_PREFIXE."om_collectivite
906     ON direction.om_collectivite = om_collectivite.om_collectivite
907     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)))
908     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
909 softime 13137 AND instructeur_qualite.code = '<instructeur_qualite>'
910 softime 8989 ORDER BY instructeur.nom ASC";
911     }
912    
913     /**
914     *
915     * @return string
916     */
917     function get_var_sql_forminc__sql_division_by_di() {
918     return "SELECT division.division, division.libelle
919     FROM ".DB_PREFIXE."division
920     LEFT JOIN ".DB_PREFIXE."direction
921     ON division.direction = direction.direction
922     LEFT JOIN ".DB_PREFIXE."om_collectivite
923     ON direction.om_collectivite = om_collectivite.om_collectivite
924     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)))
925     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
926     ORDER BY division.libelle ASC";
927     }
928    
929     /**
930 softime 10573 *
931     * @return string
932     */
933     function get_var_sql_forminc__sql_commune() {
934     return "
935     SELECT
936 softime 11228 commune.commune, commune.libelle AS libelle
937 softime 10573 FROM
938     ".DB_PREFIXE."commune
939 softime 11228 WHERE (commune.om_validite_debut IS NULL OR commune.om_validite_debut <= CURRENT_DATE)
940     AND (commune.om_validite_fin IS NULL OR commune.om_validite_fin > CURRENT_DATE)
941     ORDER BY commune.libelle ASC
942 softime 10573 ";
943     }
944    
945     /**
946 softime 11585 *
947     * @return string
948     */
949     function get_var_sql_forminc__sql_dossier_instruction_type_by_id() {
950     return sprintf('
951     SELECT dossier_instruction_type.dossier_instruction_type,
952     CONCAT_WS(\' - \', dossier_autorisation_type_detaille.libelle, dossier_instruction_type.libelle)
953     FROM %1$sdossier_instruction_type
954     LEFT JOIN %1$sdossier_autorisation_type_detaille ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
955     WHERE dossier_instruction_type = <idx>
956     ',
957     DB_PREFIXE
958     );
959     }
960    
961     /**
962 mbroquet 3730 * VIEW - view_sitadel.
963     *
964     * @return void
965     */
966     function view_sitadel() {
967 softime 8989 // Affichage du formulaire permettant le choix d'un interval de date
968 mbroquet 3730 // ainsi que le numéro de d'ordre qui est le numéro de la version de
969     // l'export
970 softime 8989 if (empty($this->f->get_submitted_post_value())) {
971 mbroquet 3730 // Affichage du formulaire
972 softime 8989 $this->affichageFormulaire();
973 mbroquet 3730 }
974     else {
975     // Initialisation des variables pour les messages de fin de traitement
976     $correct=true;
977     // Initialisation de la chaîne contenant le message d'erreur
978     $erreur = "";
979 softime 8989 //
980     $message_valid = '';
981     $message_info = '';
982 mbroquet 3730
983     // Initialisation des dates de début et de fin
984     $datedebut ='';
985     $datefin='';
986    
987     // Traitement des erreurs
988     if ($this->f->get_submitted_post_value("datedebut") == "") {
989     $correct=false;
990     } else {
991     $datedebut = substr($this->f->get_submitted_post_value("datedebut"),6,4).
992     "-".substr($this->f->get_submitted_post_value("datedebut"),3,2)."-".
993     substr($this->f->get_submitted_post_value("datedebut"),0,2);
994     }
995     if ($this->f->get_submitted_post_value("datefin") == "") {
996     $correct=false;
997     } else {
998     $datefin = substr($this->f->get_submitted_post_value("datefin"),6,4).
999     "-".substr($this->f->get_submitted_post_value("datefin"),3,2)."-".
1000     substr($this->f->get_submitted_post_value("datefin"),0,2);
1001     }
1002     $numero = $this->f->get_submitted_post_value("numero");
1003 softime 13528
1004     if ($correct === true){
1005     // Vérifie la collectivité de l'utilisateur et si c'est un utilisateur
1006     // mono les résultats de l'exports concerneront uniquement sa collectivité
1007     $filtreCollectivite = '';
1008     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
1009     $filtreCollectivite = sprintf(
1010     'AND dossier_autorisation.om_collectivite = %d',
1011     intval($_SESSION['collectivite'])
1012     );
1013     }
1014 mbroquet 3730 // Requête permettant de lister tous les dossiers de l'export
1015 softime 13528 $sql = sprintf(
1016     "SELECT
1017     dossier.dossier,
1018     dossier.om_collectivite as collectivite,
1019     dossier.dossier_autorisation,
1020     dossier_instruction_type.mouvement_sitadel,
1021     dossier_instruction_type.code as dossier_instruction_type_code,
1022     dossier.date_depot,
1023     dossier.date_decision,
1024     dossier.date_chantier,
1025     dossier.date_achevement,
1026     dossier.terrain_references_cadastrales as dossier_terrain_references_cadastrales,
1027     dossier.terrain_adresse_voie_numero as dossier_terrain_adresse_voie_numero,
1028     dossier.terrain_adresse_voie as dossier_terrain_adresse_voie,
1029     dossier.terrain_adresse_lieu_dit as dossier_terrain_adresse_lieu_dit,
1030     dossier.terrain_adresse_localite as dossier_terrain_adresse_localite,
1031     dossier.terrain_adresse_code_postal as dossier_terrain_adresse_code_postal,
1032     dossier.terrain_adresse_bp as dossier_terrain_adresse_bp,
1033     dossier.terrain_adresse_cedex as dossier_terrain_adresse_cedex,
1034     dossier_autorisation_type.code,
1035     dossier.date_limite,
1036     dossier.date_limite_incompletude,
1037     dossier.date_notification_delai,
1038     dossier.terrain_superficie as dossier_terrain_superficie,
1039     dossier.terrain_superficie_calculee as dossier_terrain_superficie_calculee,
1040     dossier.date_modification,
1041     dossier.hash_sitadel,
1042 mbroquet 3730
1043 softime 13528 arrondissement.code_impots as code_impots,
1044 mbroquet 3730
1045 softime 13528 autorite_competente.autorite_competente_sitadel,
1046     pp.type_demandeur,
1047     pp.qualite,
1048     civilite_pp.libelle as civilite_pp,
1049     pp.particulier_nom as pp_particulier_nom,
1050     pp.particulier_prenom as pp_particulier_prenom,
1051     pp.personne_morale_denomination as pp_personne_morale_denomination,
1052     pp.personne_morale_raison_sociale as pp_personne_morale_raison_sociale,
1053     pp.personne_morale_siret as pp_personne_morale_siret,
1054     pp.personne_morale_categorie_juridique as pp_personne_morale_categorie_juridique,
1055     civilite_pm.libelle as civilite_pm_libelle,
1056     pp.personne_morale_nom as pp_personne_morale_nom,
1057     pp.personne_morale_prenom as pp_personne_morale_prenom,
1058 mbroquet 3730
1059 softime 13528 pp.numero as pp_numero,
1060     pp.voie as pp_voie,
1061     pp.complement as pp_complement,
1062     pp.lieu_dit as pp_lieu_dit,
1063     pp.localite as pp_localite,
1064     pp.code_postal as pp_code_postal,
1065     pp.bp as pp_bp,
1066     pp.cedex as pp_cedex,
1067     pp.pays as pp_pays,
1068     pp.division_territoriale as pp_division_territoriale,
1069 mbroquet 3730
1070 softime 13528 pp.telephone_fixe as pp_telephone_fixe,
1071     pp.courriel as pp_courriel,
1072 mbroquet 3730
1073 softime 13528 donnees_techniques.co_archi_recours,
1074     donnees_techniques.am_terr_surf,
1075     donnees_techniques.am_lotiss,
1076     donnees_techniques.terr_juri_zac,
1077     donnees_techniques.terr_juri_afu,
1078     donnees_techniques.co_projet_desc,
1079     donnees_techniques.am_projet_desc,
1080     donnees_techniques.dm_projet_desc,
1081     donnees_techniques.co_cstr_nouv,
1082     donnees_techniques.co_cstr_exist,
1083     donnees_techniques.co_modif_aspect,
1084     donnees_techniques.co_modif_struct,
1085     donnees_techniques.co_cloture,
1086     donnees_techniques.co_trx_exten,
1087     donnees_techniques.co_trx_surelev,
1088     donnees_techniques.co_trx_nivsup,
1089     donnees_techniques.co_trx_amgt,
1090     donnees_techniques.co_anx_pisc,
1091     donnees_techniques.co_anx_gara,
1092     donnees_techniques.co_anx_veran,
1093     donnees_techniques.co_anx_abri,
1094     donnees_techniques.co_anx_autr,
1095     donnees_techniques.co_bat_niv_nb,
1096 softime 4636
1097 softime 13528 -- Tableau des destinations
1098     donnees_techniques.su_avt_shon1,
1099     donnees_techniques.su_avt_shon2,
1100     donnees_techniques.su_avt_shon3,
1101     donnees_techniques.su_avt_shon4,
1102     donnees_techniques.su_avt_shon5,
1103     donnees_techniques.su_avt_shon6,
1104     donnees_techniques.su_avt_shon7,
1105     donnees_techniques.su_avt_shon8,
1106     donnees_techniques.su_avt_shon9,
1107     donnees_techniques.su_demo_shon1,
1108     donnees_techniques.su_demo_shon2,
1109     donnees_techniques.su_demo_shon3,
1110     donnees_techniques.su_demo_shon4,
1111     donnees_techniques.su_demo_shon5,
1112     donnees_techniques.su_demo_shon6,
1113     donnees_techniques.su_demo_shon7,
1114     donnees_techniques.su_demo_shon8,
1115     donnees_techniques.su_demo_shon9,
1116     donnees_techniques.su_chge_shon1,
1117     donnees_techniques.su_chge_shon2,
1118     donnees_techniques.su_chge_shon3,
1119     donnees_techniques.su_chge_shon4,
1120     donnees_techniques.su_chge_shon5,
1121     donnees_techniques.su_chge_shon6,
1122     donnees_techniques.su_chge_shon7,
1123     donnees_techniques.su_chge_shon8,
1124     donnees_techniques.su_chge_shon9,
1125     donnees_techniques.su_sup_shon1,
1126     donnees_techniques.su_sup_shon2,
1127     donnees_techniques.su_sup_shon3,
1128     donnees_techniques.su_sup_shon4,
1129     donnees_techniques.su_sup_shon5,
1130     donnees_techniques.su_sup_shon6,
1131     donnees_techniques.su_sup_shon7,
1132     donnees_techniques.su_sup_shon8,
1133     donnees_techniques.su_sup_shon9,
1134     donnees_techniques.su_cstr_shon1,
1135     donnees_techniques.su_cstr_shon2,
1136     donnees_techniques.su_cstr_shon3,
1137     donnees_techniques.su_cstr_shon4,
1138     donnees_techniques.su_cstr_shon5,
1139     donnees_techniques.su_cstr_shon6,
1140     donnees_techniques.su_cstr_shon7,
1141     donnees_techniques.su_cstr_shon8,
1142     donnees_techniques.su_cstr_shon9,
1143     donnees_techniques.su_tot_shon1,
1144     donnees_techniques.su_tot_shon2,
1145     donnees_techniques.su_tot_shon3,
1146     donnees_techniques.su_tot_shon4,
1147     donnees_techniques.su_tot_shon5,
1148     donnees_techniques.su_tot_shon6,
1149     donnees_techniques.su_tot_shon7,
1150     donnees_techniques.su_tot_shon8,
1151     donnees_techniques.su_tot_shon9,
1152     -- XXX valeurs obsolètes mais utilisées dans les conditions
1153     -- pour afficher les messages d'incohérence
1154     donnees_techniques.su_trsf_shon1,
1155     donnees_techniques.su_trsf_shon2,
1156     donnees_techniques.su_trsf_shon3,
1157     donnees_techniques.su_trsf_shon4,
1158     donnees_techniques.su_trsf_shon5,
1159     donnees_techniques.su_trsf_shon6,
1160     donnees_techniques.su_trsf_shon7,
1161     donnees_techniques.su_trsf_shon8,
1162     donnees_techniques.su_trsf_shon9,
1163 softime 4636
1164 softime 13528 -- Tableau des sous-destinations
1165     donnees_techniques.su2_avt_shon1,
1166     donnees_techniques.su2_avt_shon2,
1167     donnees_techniques.su2_avt_shon3,
1168     donnees_techniques.su2_avt_shon4,
1169     donnees_techniques.su2_avt_shon5,
1170     donnees_techniques.su2_avt_shon6,
1171     donnees_techniques.su2_avt_shon7,
1172     donnees_techniques.su2_avt_shon8,
1173     donnees_techniques.su2_avt_shon9,
1174     donnees_techniques.su2_avt_shon10,
1175     donnees_techniques.su2_avt_shon11,
1176     donnees_techniques.su2_avt_shon12,
1177     donnees_techniques.su2_avt_shon13,
1178     donnees_techniques.su2_avt_shon14,
1179     donnees_techniques.su2_avt_shon15,
1180     donnees_techniques.su2_avt_shon16,
1181     donnees_techniques.su2_avt_shon17,
1182     donnees_techniques.su2_avt_shon18,
1183     donnees_techniques.su2_avt_shon19,
1184     donnees_techniques.su2_avt_shon20,
1185     donnees_techniques.su2_avt_shon21,
1186     donnees_techniques.su2_avt_shon22,
1187     donnees_techniques.su2_demo_shon1,
1188     donnees_techniques.su2_demo_shon2,
1189     donnees_techniques.su2_demo_shon3,
1190     donnees_techniques.su2_demo_shon4,
1191     donnees_techniques.su2_demo_shon5,
1192     donnees_techniques.su2_demo_shon6,
1193     donnees_techniques.su2_demo_shon7,
1194     donnees_techniques.su2_demo_shon8,
1195     donnees_techniques.su2_demo_shon9,
1196     donnees_techniques.su2_demo_shon10,
1197     donnees_techniques.su2_demo_shon11,
1198     donnees_techniques.su2_demo_shon12,
1199     donnees_techniques.su2_demo_shon13,
1200     donnees_techniques.su2_demo_shon14,
1201     donnees_techniques.su2_demo_shon15,
1202     donnees_techniques.su2_demo_shon16,
1203     donnees_techniques.su2_demo_shon17,
1204     donnees_techniques.su2_demo_shon18,
1205     donnees_techniques.su2_demo_shon19,
1206     donnees_techniques.su2_demo_shon20,
1207     donnees_techniques.su2_demo_shon21,
1208     donnees_techniques.su2_demo_shon22,
1209     donnees_techniques.su2_chge_shon1,
1210     donnees_techniques.su2_chge_shon2,
1211     donnees_techniques.su2_chge_shon3,
1212     donnees_techniques.su2_chge_shon4,
1213     donnees_techniques.su2_chge_shon5,
1214     donnees_techniques.su2_chge_shon6,
1215     donnees_techniques.su2_chge_shon7,
1216     donnees_techniques.su2_chge_shon8,
1217     donnees_techniques.su2_chge_shon9,
1218     donnees_techniques.su2_chge_shon10,
1219     donnees_techniques.su2_chge_shon11,
1220     donnees_techniques.su2_chge_shon12,
1221     donnees_techniques.su2_chge_shon13,
1222     donnees_techniques.su2_chge_shon14,
1223     donnees_techniques.su2_chge_shon15,
1224     donnees_techniques.su2_chge_shon16,
1225     donnees_techniques.su2_chge_shon17,
1226     donnees_techniques.su2_chge_shon18,
1227     donnees_techniques.su2_chge_shon19,
1228     donnees_techniques.su2_chge_shon20,
1229     donnees_techniques.su2_chge_shon21,
1230     donnees_techniques.su2_chge_shon22,
1231     donnees_techniques.su2_sup_shon1,
1232     donnees_techniques.su2_sup_shon2,
1233     donnees_techniques.su2_sup_shon3,
1234     donnees_techniques.su2_sup_shon4,
1235     donnees_techniques.su2_sup_shon5,
1236     donnees_techniques.su2_sup_shon6,
1237     donnees_techniques.su2_sup_shon7,
1238     donnees_techniques.su2_sup_shon8,
1239     donnees_techniques.su2_sup_shon9,
1240     donnees_techniques.su2_sup_shon10,
1241     donnees_techniques.su2_sup_shon11,
1242     donnees_techniques.su2_sup_shon12,
1243     donnees_techniques.su2_sup_shon13,
1244     donnees_techniques.su2_sup_shon14,
1245     donnees_techniques.su2_sup_shon15,
1246     donnees_techniques.su2_sup_shon16,
1247     donnees_techniques.su2_sup_shon17,
1248     donnees_techniques.su2_sup_shon18,
1249     donnees_techniques.su2_sup_shon19,
1250     donnees_techniques.su2_sup_shon20,
1251     donnees_techniques.su2_sup_shon21,
1252     donnees_techniques.su2_sup_shon22,
1253     donnees_techniques.su2_cstr_shon1,
1254     donnees_techniques.su2_cstr_shon2,
1255     donnees_techniques.su2_cstr_shon3,
1256     donnees_techniques.su2_cstr_shon4,
1257     donnees_techniques.su2_cstr_shon5,
1258     donnees_techniques.su2_cstr_shon6,
1259     donnees_techniques.su2_cstr_shon7,
1260     donnees_techniques.su2_cstr_shon8,
1261     donnees_techniques.su2_cstr_shon9,
1262     donnees_techniques.su2_cstr_shon10,
1263     donnees_techniques.su2_cstr_shon11,
1264     donnees_techniques.su2_cstr_shon12,
1265     donnees_techniques.su2_cstr_shon13,
1266     donnees_techniques.su2_cstr_shon14,
1267     donnees_techniques.su2_cstr_shon15,
1268     donnees_techniques.su2_cstr_shon16,
1269     donnees_techniques.su2_cstr_shon17,
1270     donnees_techniques.su2_cstr_shon18,
1271     donnees_techniques.su2_cstr_shon19,
1272     donnees_techniques.su2_cstr_shon20,
1273     donnees_techniques.su2_cstr_shon21,
1274     donnees_techniques.su2_cstr_shon22,
1275     donnees_techniques.su2_tot_shon1,
1276     donnees_techniques.su2_tot_shon2,
1277     donnees_techniques.su2_tot_shon3,
1278     donnees_techniques.su2_tot_shon4,
1279     donnees_techniques.su2_tot_shon5,
1280     donnees_techniques.su2_tot_shon6,
1281     donnees_techniques.su2_tot_shon7,
1282     donnees_techniques.su2_tot_shon8,
1283     donnees_techniques.su2_tot_shon9,
1284     donnees_techniques.su2_tot_shon10,
1285     donnees_techniques.su2_tot_shon11,
1286     donnees_techniques.su2_tot_shon12,
1287     donnees_techniques.su2_tot_shon13,
1288     donnees_techniques.su2_tot_shon14,
1289     donnees_techniques.su2_tot_shon15,
1290     donnees_techniques.su2_tot_shon16,
1291     donnees_techniques.su2_tot_shon17,
1292     donnees_techniques.su2_tot_shon18,
1293     donnees_techniques.su2_tot_shon19,
1294     donnees_techniques.su2_tot_shon20,
1295     donnees_techniques.su2_tot_shon21,
1296     donnees_techniques.su2_tot_shon22,
1297 softime 4636
1298 softime 13528 donnees_techniques.co_sp_transport,
1299     donnees_techniques.co_sp_enseign,
1300     donnees_techniques.co_sp_sante,
1301     donnees_techniques.co_sp_act_soc,
1302     donnees_techniques.co_sp_ouvr_spe,
1303     donnees_techniques.co_sp_culture,
1304     donnees_techniques.dm_tot_log_nb,
1305     donnees_techniques.co_tot_ind_nb,
1306     donnees_techniques.co_tot_coll_nb,
1307     donnees_techniques.co_tot_log_nb,
1308     donnees_techniques.co_resid_agees,
1309     donnees_techniques.co_resid_etud,
1310     donnees_techniques.co_resid_tourism,
1311     donnees_techniques.co_resid_hot_soc,
1312     donnees_techniques.co_resid_hand,
1313     donnees_techniques.co_resid_autr,
1314     donnees_techniques.co_resid_autr_desc,
1315     donnees_techniques.co_uti_pers,
1316     donnees_techniques.co_uti_princ,
1317     donnees_techniques.co_uti_secon,
1318     donnees_techniques.co_uti_vente,
1319     donnees_techniques.co_uti_loc,
1320     donnees_techniques.co_foyer_chamb_nb,
1321     donnees_techniques.co_fin_lls_nb,
1322     donnees_techniques.co_fin_aa_nb,
1323     donnees_techniques.co_fin_ptz_nb,
1324     donnees_techniques.co_fin_autr_nb,
1325     donnees_techniques.co_mais_piece_nb,
1326     donnees_techniques.co_log_1p_nb,
1327     donnees_techniques.co_log_2p_nb,
1328     donnees_techniques.co_log_3p_nb,
1329     donnees_techniques.co_log_4p_nb,
1330     donnees_techniques.co_log_5p_nb,
1331     donnees_techniques.co_log_6p_nb,
1332     donnees_techniques.mod_desc,
1333 mbroquet 3730
1334 softime 13528 donnees_techniques.doc_date,
1335     donnees_techniques.terr_div_surf_av_div,
1336     donnees_techniques.doc_tot_trav,
1337     donnees_techniques.doc_tranche_trav,
1338     donnees_techniques.doc_tranche_trav_desc,
1339     donnees_techniques.doc_surf,
1340     donnees_techniques.doc_nb_log,
1341     donnees_techniques.doc_nb_log_indiv,
1342     donnees_techniques.doc_nb_log_coll,
1343     donnees_techniques.doc_nb_log_lls,
1344     donnees_techniques.doc_nb_log_aa,
1345     donnees_techniques.doc_nb_log_ptz,
1346     donnees_techniques.doc_nb_log_autre,
1347     donnees_techniques.daact_date,
1348     donnees_techniques.daact_date_chgmt_dest,
1349     donnees_techniques.daact_tot_trav,
1350     donnees_techniques.daact_tranche_trav,
1351     donnees_techniques.daact_tranche_trav_desc,
1352     donnees_techniques.daact_surf,
1353     donnees_techniques.daact_nb_log,
1354     donnees_techniques.daact_nb_log_indiv,
1355     donnees_techniques.daact_nb_log_coll,
1356     donnees_techniques.daact_nb_log_lls,
1357     donnees_techniques.daact_nb_log_aa,
1358     donnees_techniques.daact_nb_log_ptz,
1359     donnees_techniques.daact_nb_log_autre,
1360 mbroquet 3730
1361 softime 13528 dossier_autorisation.date_depot as date_depot_da,
1362     dossier_autorisation.date_decision as date_decision_da,
1363     dossier_autorisation.date_validite as date_validite_da,
1364     dossier_autorisation.date_chantier as date_chantier_da,
1365     dossier_autorisation.date_achevement as date_achevement_da,
1366     avis_decision.typeavis as typeavis_da,
1367     avis_decision.sitadel,
1368     avis_decision.sitadel_motif,
1369     avis_decision.typeavis,
1370     etat.statut as statut_di
1371 mbroquet 3730
1372 softime 13528 FROM
1373     %1\$sdossier
1374     INNER JOIN %1\$sdossier_instruction_type
1375     ON dossier.dossier_instruction_type =
1376     dossier_instruction_type.dossier_instruction_type
1377     INNER JOIN %1\$sdossier_autorisation_type_detaille
1378     ON dossier_instruction_type.dossier_autorisation_type_detaille
1379     =dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1380     INNER JOIN %1\$sdossier_autorisation_type
1381     ON dossier_autorisation_type.dossier_autorisation_type
1382     =dossier_autorisation_type_detaille.dossier_autorisation_type
1383     INNER JOIN %1\$sgroupe
1384     ON dossier_autorisation_type.groupe = groupe.groupe
1385     AND groupe.code != 'CTX'
1386     INNER JOIN %1\$sdossier_autorisation
1387     ON dossier_autorisation.dossier_autorisation
1388     =dossier.dossier_autorisation
1389     INNER JOIN %1\$sautorite_competente
1390     ON autorite_competente.autorite_competente
1391     =dossier.autorite_competente
1392 mbroquet 3730
1393 softime 13528 LEFT JOIN %1\$sdonnees_techniques
1394     ON donnees_techniques.dossier_instruction = dossier.dossier
1395     LEFT JOIN %1\$savis_decision
1396     ON avis_decision.avis_decision = dossier.avis_decision
1397     LEFT JOIN %1\$slien_dossier_demandeur as ldd_pp
1398     ON ldd_pp.dossier = dossier.dossier
1399     LEFT JOIN %1\$sdemandeur as pp
1400     ON ldd_pp.demandeur = pp.demandeur
1401     LEFT JOIN %1\$scivilite as civilite_pp
1402     ON civilite_pp.civilite = pp.particulier_civilite
1403     LEFT JOIN %1\$scivilite as civilite_pm
1404     ON civilite_pm.civilite = pp.personne_morale_civilite
1405     LEFT JOIN %1\$setat
1406     ON etat.etat = dossier.etat
1407     LEFT JOIN %1\$sarrondissement
1408     ON dossier_autorisation.arrondissement=arrondissement.arrondissement
1409    
1410     WHERE
1411     dossier_instruction_type.mouvement_sitadel IS NOT NULL
1412     AND ldd_pp.petitionnaire_principal is TRUE
1413     AND (dossier.date_modification >= '%2\$s'
1414     AND dossier.date_modification <= '%3\$s')
1415     %4\$s
1416     ORDER
1417     by dossier_instruction_type.mouvement_sitadel,
1418     dossier.dossier",
1419     DB_PREFIXE,
1420     $this->f->db->escapeSimple($datedebut),
1421     $this->f->db->escapeSimple($datefin),
1422     $filtreCollectivite
1423     );
1424 mbroquet 3730 //Exécution de la requête
1425 softime 13528 $query = $this->f->get_all_results_from_db_query(
1426     $sql,
1427     array(
1428     'origin' => __METHOD__
1429     ));
1430 mbroquet 3730 $export="";
1431 softime 13528 foreach ($query['result'] as $row) {
1432 mbroquet 3730 // initialisation de la classe permettant la mise en forme de chaque ligne de l'export
1433     require_once "../obj/export_sitadel.class.php";
1434     $export_sitadel = new export_sitadel($row['dossier'], $this->f);
1435     $export_sitadel->setRow($row);
1436     //Ajout du fichier de variable
1437     if(file_exists ("../sql/".OM_DB_PHPTYPE."/export_sitadel.inc.php")) {
1438     include ("../sql/".OM_DB_PHPTYPE."/export_sitadel.inc.php");
1439     }
1440     //
1441 softime 13528 $export_sitadel->setVal($val);
1442 mbroquet 3730 $departement = $export_sitadel->getDepartement($row["collectivite"]);
1443     $commune = $export_sitadel->getCommune($row["collectivite"]);
1444     $region = $this->f->getParameter("region");
1445 softime 4636
1446     // Initialisation des variables pour le tableau des
1447     // surfaces en version 1
1448     $prefix_su = 'su';
1449     $count_su = 9;
1450     // S'il faut utiliser le tableau des surfaces en
1451     // version 2
1452     if ($export_sitadel->get_tab_su_version() === 2) {
1453     //
1454     $prefix_su = 'su2';
1455     $count_su = 20;
1456     }
1457    
1458 softime 4838 // Récupère la version du dossier d'instruction depuis son
1459     // numéro
1460     $version = 0;
1461     $version = intval($this->get_dossier_instruction_version($row['dossier']));
1462    
1463 mbroquet 3730 // Mouvement de dépôt
1464     $depot="";
1465    
1466     // Tous les mouvements autres que transfert ont comme mouvement le code DEPOT
1467     // les décisions devant êtres précédées par le dépôt correspondant,
1468     // les dossiers avec date de décision comprise dans l'interval fourni sont
1469     // réaffichés en tant que dépôts (mouvement DEPOT)
1470     if (($row['mouvement_sitadel'] == 'DEPOT'||($row['mouvement_sitadel'] == 'MODIFICATIF'
1471 softime 7996 AND $row['statut_di']=='cloture' AND $row['typeavis']=='F'))) {
1472 softime 4838 $depot.=$export_sitadel->entete("DEPOT",$departement,$commune, $version);
1473 mbroquet 3730 $depot.=$export_sitadel->etatcivil();
1474     $depot.=$export_sitadel->adresse();
1475     $depot.=$export_sitadel->delegataire();
1476     $depot.=$export_sitadel->meltel($row['mouvement_sitadel']);
1477 softime 13528 $depot.=$export_sitadel->adresse_terrain();
1478 mbroquet 3730 $depot.=$export_sitadel->parcelle();
1479     // ===========================
1480     // contrat maison individuelle
1481     // ===========================
1482     // sitadel : contrat|
1483     // openads : non renseigne
1484     $depot.= $export_sitadel->defaultValue('contrat')."|";
1485     // ==========
1486     // architecte
1487     // ==========
1488     // sitadel : architecte|
1489     // openads : données techniques.co_archi_recours
1490     $depot.= ($row['co_archi_recours'] == "t")?"1|":"0|";
1491     // =====================
1492     // utilisation data cnil
1493     // ======================
1494     // sitadel : cnil
1495     // openads : non renseigne
1496     $depot.= $export_sitadel->defaultValue('cnil');
1497 softime 13528 // fin d enregistrement depot
1498 mbroquet 3730 $depot.="\n";
1499     }
1500    
1501     // Seuls les dossier de type transfert ont comme mouvement le code TRANSFERT
1502     $transfert ="";
1503 softime 7996 if ($row['mouvement_sitadel']=='TRANSFERT') {
1504 softime 4838 $transfert.=$export_sitadel->entete("TRANSFERT",$departement,$commune, $version);
1505 mbroquet 3730 $transfert.=$export_sitadel->etatcivil();
1506 softime 13528 $transfert.=$export_sitadel->adresse();
1507 mbroquet 3730 $transfert.=$export_sitadel->meltel($row['mouvement_sitadel']);
1508     $transfert.="\n";
1509     }
1510    
1511    
1512     // Une ligne de mouvement DECISION est insérée après chaque ligne
1513     // de mouvement DEPOT
1514     $decision="";
1515     if ($row['mouvement_sitadel'] != 'TRANSFERT'
1516     and $row['mouvement_sitadel'] != 'SUPPRESSION'
1517 softime 7996 and $row['mouvement_sitadel'] == 'DEPOT') {
1518 mbroquet 3730
1519     //Ajout de l'entête
1520 softime 4838 $decision.=$export_sitadel->entete("DECISION",$departement,$commune, $version);
1521 mbroquet 3730
1522     //Ajout du groupe 1
1523     $decision.= $export_sitadel->decision_groupe1();
1524     // Si la décision est favorable, on remplit le groupe 2
1525     if ( $row['sitadel'] == 2 || $row['sitadel'] == 4 || $row['sitadel'] == 5
1526 softime 13528 || $row['sitadel'] === '' || $row['sitadel'] === 0){
1527 mbroquet 3730 //
1528     $decision.= $export_sitadel->amenagement_terrain();
1529     //Nature du projet
1530     $natproj = 2;
1531     $natprojlib= array(
1532     1=>_("Nouvelle construction"),
1533     2=>_("Travaux sur construction existante"),
1534     3=>_("Nouvelle construction et travaux sur construction"),
1535     );
1536     if ( isset($row['co_cstr_nouv']) && isset($row['co_cstr_exist']) &&
1537     $row['co_cstr_nouv'] == 't' &&
1538     $row['co_cstr_exist'] == 't' ){
1539     $natproj = 3;
1540     }
1541     //Nouvelle construction
1542     elseif ( isset($row['co_cstr_nouv']) && $row['co_cstr_nouv'] == 't' ) {
1543     $natproj = 1;
1544     }
1545     //
1546 softime 4636 $su_avt_shon = $export_sitadel->shon("avt");
1547 mbroquet 3730 //Si la SHON existante avant travaux est supérieur à la SHON
1548     //démolie alors la variable natproj est égale à 2
1549     $shonExistante = 0;
1550     $shonDemolie = 0;
1551 softime 4636 // Pour chaque ligne du tableau
1552     for ($i = 1; $i <= $count_su; $i++) {
1553     //
1554 softime 13528 $shonExistante += floor(floatval($row[$prefix_su.'_avt_shon'.$i]));
1555     $shonDemolie += floor(floatval($row[$prefix_su.'_demo_shon'.$i]));
1556 mbroquet 3730 }
1557     //Si la SHON existante avant travaux et la SHON démolie sont
1558     //égales alors la variable natproj est égale à 1
1559     if ( $shonExistante == 0 && $shonDemolie == 0 && $natproj != 1 &&
1560     $row['code'] != 'DP' && $row['code'] != 'PA') {
1561     $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";
1562     } elseif ( $shonExistante > $shonDemolie && $natproj != 2 ){
1563 softime 4640 $erreur .= _("Dossier ").$row['dossier']." \"".$natprojlib[$natproj]."\" "._("La SHON existante avant travaux ne doit pas être supérieure à la SHON démolie.")."\n";
1564 mbroquet 3730 }
1565     $decision .= $su_avt_shon;
1566    
1567 softime 4636 $su_demo_shon = $export_sitadel->shon("demo");
1568 mbroquet 3730 //La SHON démolie s'accompagne obligatoirement de la shon
1569     //existante avant travaux
1570     if ( $shonDemolie != 0 && $shonExistante == 0 ){
1571     $erreur .= _("Dossier ").$row['dossier']." "._("La SHON demolie s'accompagne obligatoirement de la SHON existante avant travaux.")."\n";
1572     }
1573     $decision .= $su_demo_shon;
1574     //
1575 softime 4636 $su_sup_shon = $export_sitadel->shon("sup");
1576     $su_chge_shon = $export_sitadel->shon("chge");
1577 mbroquet 3730 if ( strcasecmp($su_sup_shon, $su_chge_shon) != 0){
1578     //
1579 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";
1580 mbroquet 3730 }
1581     $decision .= $su_sup_shon;
1582     $decision .= $su_chge_shon;
1583 softime 4636 $decision .= $export_sitadel->shon("cstr");
1584 mbroquet 3730 $decision .= "0|0|0|0|0|0|0|0|0|";
1585 softime 4640 // Les SHON créées par changement de destination ou
1586     // de sous-destination s'accompagnent obligatoirement
1587     // de SHON existante avant travaux non nulle
1588 mbroquet 3730 if (preg_match("/[0|]{7}/", $su_chge_shon) &&
1589     preg_match("/[0|]{7}/", $su_avt_shon)){
1590    
1591 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";
1592 mbroquet 3730 }
1593     // Un nombre de logements démolis strictement positif doit
1594     // s'accompagner obligatoirement de SHON démolie.
1595     if($row['dm_tot_log_nb'] > 0) {
1596 softime 4636 if($export_sitadel->get_shon_val('demo', 1) <= 0) {
1597 mbroquet 3730 //
1598     $erreur .= _("Dossier ").$row['dossier']." "._("Un nombre de logements demolis strictement positif doit s'accompagner obligatoirement de SHON demolie.")."\n";
1599     }
1600     }
1601     // Un nombre de logements créés strictement positif doit
1602     // s'accompagner obligatoirement de SHON créée ou de SHON
1603 softime 4640 // créée par changement de destination ou de sous-destination
1604     // ayant pour destination l'habitation.
1605     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)) {
1606 mbroquet 3730 //
1607 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";
1608 mbroquet 3730 }
1609    
1610     // La SHON créée ou issue de la transformation
1611     // suffixée par 9 (intérêt collectif ou service public) doit
1612     // obligatoirement s'accompagner de la décomposition
1613     // en sous modalité renseignée par la variable cpublic et réciproquement.
1614    
1615     // Test si une valeur est true
1616     $cpublic = FALSE;
1617     if (isset($row['co_sp_transport']) && $row['co_sp_transport'] == 't') {
1618     $cpublic = TRUE;
1619     }
1620     if (isset($row['co_sp_enseign']) && $row['co_sp_enseign'] == 't') {
1621     $cpublic = TRUE;
1622     }
1623     if (isset($row['co_sp_sante']) && $row['co_sp_sante'] == 't') {
1624     $cpublic = TRUE;
1625     }
1626     if (isset($row['co_sp_act_soc']) && $row['co_sp_act_soc'] == 't') {
1627     $cpublic = TRUE;
1628     }
1629     if (isset($row['co_sp_ouvr_spe']) && $row['co_sp_ouvr_spe'] == 't') {
1630     $cpublic = TRUE;
1631     }
1632     if (isset($row['co_sp_culture']) && $row['co_sp_culture'] == 't') {
1633     $cpublic = TRUE;
1634     }
1635     //
1636 softime 4640 if($cpublic !== TRUE AND ($export_sitadel->get_shon_val('cstr', 9) > 0 OR $export_sitadel->get_shon_val('chge', 9) > 0)) {
1637     $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";
1638 mbroquet 3730 }
1639    
1640     // La destination principale du logement mise à résidence
1641     // principale ou résidence secondaire doit obligatoirement
1642     // s'accompagner d'un mode d'utilisation à occupation personnelle
1643     if($row['co_uti_princ'] == 't' OR $row['co_uti_secon'] == 't') {
1644     if($row['co_uti_pers'] != 't') {
1645    
1646     $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";
1647     }
1648     }
1649    
1650     $decision.= $export_sitadel->destination($row['mouvement_sitadel']);
1651    
1652     // Le nombre total de logements créés (variable nbtotlog)
1653     // doit être égal à la somme des nombres de logements créés
1654     // ventilés par type de financement
1655 softime 9245 if(intval($row['co_tot_log_nb']) != (intval($row['co_fin_lls_nb']) + intval($row['co_fin_aa_nb']) +
1656     intval($row['co_fin_ptz_nb']) + intval($row['co_fin_autr_nb']))) {
1657 mbroquet 3730
1658     $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";
1659     }
1660    
1661     $decision.= $export_sitadel->repartitionFinan();
1662    
1663     // Le nombre total de logements créés (variable nbtotlog)
1664     // doit être égal à la totalisation de la répartition des
1665     // logements par nombre de pièces
1666 softime 9245 if(intval($row['co_tot_log_nb']) != (intval($row['co_log_1p_nb']) + intval($row['co_log_2p_nb']) +
1667     intval($row['co_log_3p_nb']) + intval($row['co_log_4p_nb']) + intval($row['co_log_5p_nb']) +
1668     intval($row['co_log_6p_nb']))) {
1669 mbroquet 3730
1670     $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";
1671     }
1672    
1673     $decision.= $export_sitadel->repartitionNbPiece($row['mouvement_sitadel']);
1674     }
1675     else {
1676     //
1677     $decision.= str_repeat("|", 6);
1678     if($row['code']=='DP'){
1679     $decision .= "00000|";
1680     }else{
1681     $decision .= "|";
1682     }
1683     $decision .= "0000|00000|";
1684     $decision.= str_repeat("|", 74);
1685     }
1686     $decision.="\n";
1687     }
1688    
1689     // modificatif
1690     $modificatif='';
1691     if($row['mouvement_sitadel'] == 'MODIFICATIF' AND $row['statut_di']=='cloture' AND
1692 softime 7996 $row['typeavis']=='F') {
1693 softime 4838 $modificatif.=$export_sitadel->entete("MODIFICATIF",$departement,$commune, $version);
1694 mbroquet 3730
1695     $modificatif.= $export_sitadel->decision_groupe1();
1696    
1697     if(isset($row['date_decision']) or $row['date_decision']==""){
1698     // avis_sitadel et avis_sitadel_motif
1699     // si la decision est favorable, envoi des informations statistiques
1700     if($row["sitadel"] == 2 or $row["sitadel"] == 4
1701     or $row["sitadel"] == 5){
1702     // si accordé : ajout du 2nd groupe d'informations
1703     $modificatif .= $export_sitadel->adresse_terrain(); // adresse du terrain
1704     $modificatif .= $export_sitadel->parcelle(); // 3 premières parcelles
1705     $modificatif .= $export_sitadel->modificatif_terrain(); // Informations complémentaires
1706    
1707 softime 4636 $modificatif.= $export_sitadel->shon("avt");
1708     $modificatif.= $export_sitadel->shon("demo");
1709     $modificatif.= $export_sitadel->shon("chge");
1710     $modificatif.= $export_sitadel->shon("trsf");
1711     $modificatif.= $export_sitadel->shon("cstr");
1712 mbroquet 3730
1713     $modificatif.= "|||||||||";
1714     $modificatif.= $export_sitadel->destination($row['mouvement_sitadel']);
1715     $modificatif.= $export_sitadel->repartitionFinan();
1716     $modificatif.= $export_sitadel->repartitionNbPiece($row['mouvement_sitadel']);
1717     }
1718     else {
1719     $modificatif .= str_repeat("|", 90);
1720     }
1721     }
1722     else {
1723     $modificatif .= str_repeat("|", 90);
1724     }
1725    
1726     $modificatif.="\n";
1727     }
1728    
1729     // Mouvement suppression
1730     $suppression = '';
1731     if($row['mouvement_sitadel'] == 'SUPPRESSION') {
1732 softime 4838 $suppression .= $export_sitadel->entete("SUPPRESSION",$departement,$commune, $version);
1733 mbroquet 3730 $suppression .= "\n";
1734     }
1735    
1736     // Règles sur le mouvement suivi
1737     $suivi="";
1738     if($row['mouvement_sitadel'] == 'SUIVI' and
1739     ($row['date_chantier'] >= $datedebut and $row['date_chantier']<=$datefin) ||
1740     ($row['date_achevement'] >= $datedebut and $row['date_achevement']<=$datefin)){
1741     // Si le dossier est une DOC
1742     if($row['dossier_instruction_type_code']=='DOC'){
1743     // Une ouverture de chantier ne peut concerner qu'un permis autorisé
1744     if($row['typeavis_da'] != 'F'&&$row['typeavis_da'] != '') {
1745     $erreur .= _("Dossier ").$row['dossier']." "._("Une ouverture de chantier ne peut concerner qu'un permis autorise.")."\n";
1746     }
1747     // La date d'ouverture de chantier doit être supérieur à la date d'autorisation
1748     if($row['doc_date'] > $row['date_decision_da']) {
1749     $erreur .= _("Dossier ").$row['dossier']." "._("La date d'ouverture de chantier doit être superieur a la date d'autorisation.")."\n";
1750     }
1751     // Un achèvement de chantier ne peut concerner qu'un permis autorisé
1752     if($row['typeavis_da'] != 'F'&&$row['typeavis_da'] != '') {
1753     $erreur .= _("Dossier ").$row['dossier']." "._("Un achevement de chantier ne peut concerner qu'un permis autorise.")."\n";
1754     }
1755     if( $row['date_chantier_da'] == "" && $row['date_achevement']!="") {
1756     $erreur .= _("Dossier ").$row['dossier']." "._("Un achevement de chantier ne peut concerner qu'un permis sur lequel un chantier a ete ouvert.")."\n";
1757     }
1758     // La date d'achevement de travaux doit être supérieur à la date d'ouverture des travaux
1759     if($row['daact_date'] > $row['date_chantier_da']) {
1760     $erreur .= _("Dossier ").$row['dossier']." "._("La date d'achevement de travaux doit etre superieur a la date d'ouverture des travaux.")."\n";
1761     }
1762 softime 4838 $suivi.=$export_sitadel->entete("SUIVI",$departement,$commune, $version);//8|
1763 mbroquet 3730 $suivi.=$export_sitadel->chantier($row);
1764     //On récupère la DAACT si elle existe
1765     $sqlDAACT = "SELECT
1766     donnees_techniques.daact_date,
1767     donnees_techniques.daact_date_chgmt_dest,
1768     donnees_techniques.daact_tot_trav,
1769     donnees_techniques.daact_tranche_trav,
1770     donnees_techniques.daact_tranche_trav_desc,
1771     donnees_techniques.daact_surf,
1772     donnees_techniques.daact_nb_log,
1773     donnees_techniques.daact_nb_log_indiv,
1774     donnees_techniques.daact_nb_log_coll,
1775     donnees_techniques.daact_nb_log_lls,
1776     donnees_techniques.daact_nb_log_aa,
1777     donnees_techniques.daact_nb_log_ptz,
1778     donnees_techniques.daact_nb_log_autre,
1779     etat.statut as statut_di
1780    
1781     FROM ".DB_PREFIXE."dossier
1782     LEFT JOIN ".DB_PREFIXE."donnees_techniques
1783     ON dossier.dossier=donnees_techniques.dossier_instruction
1784     LEFT JOIN ".DB_PREFIXE."etat
1785     ON dossier.etat = etat.etat
1786     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
1787     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1788     WHERE dossier.dossier_autorisation ='".$row['dossier_autorisation']."' AND
1789     dossier_instruction_type.code = 'DAACT' and mouvement_sitadel='SUIVI'";
1790     $resDAACT = $this->f->db -> query ($sqlDAACT);
1791     $this->f->addToLog("dossier.class.php : db->query(\"".$sqlDAACT."\")", VERBOSE_MODE);
1792     $this->f->isDatabaseError($resDAACT);
1793     $rowDAACT=& $resDAACT->fetchRow(DB_FETCHMODE_ASSOC);
1794     $suivi.=$export_sitadel->achevement($rowDAACT);
1795     $suivi.="\n";
1796     }
1797     elseif($row['dossier_instruction_type_code']=='DAACT'){
1798    
1799     //On vérifie qu'une DOC existe
1800     $sqlDOC = "SELECT dossier.dossier,
1801     dossier.date_chantier,
1802     donnees_techniques.doc_date,
1803     donnees_techniques.terr_div_surf_av_div,
1804     donnees_techniques.doc_tot_trav,
1805     donnees_techniques.doc_tranche_trav,
1806     donnees_techniques.doc_tranche_trav_desc,
1807     donnees_techniques.doc_surf,
1808     donnees_techniques.doc_nb_log,
1809     donnees_techniques.doc_nb_log_indiv,
1810     donnees_techniques.doc_nb_log_coll,
1811     donnees_techniques.doc_nb_log_lls,
1812     donnees_techniques.doc_nb_log_aa,
1813     donnees_techniques.doc_nb_log_ptz,
1814     donnees_techniques.doc_nb_log_autre
1815     FROM ".DB_PREFIXE."dossier
1816     LEFT JOIN ".DB_PREFIXE."donnees_techniques
1817     ON dossier.dossier=donnees_techniques.dossier_instruction
1818     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
1819     ON dossier.dossier_instruction_type=dossier_instruction_type.dossier_instruction_type
1820     WHERE dossier.dossier_autorisation ='".$row['dossier_autorisation']."' AND
1821     dossier_instruction_type.code = 'DOC' and mouvement_sitadel='SUIVI'";
1822     $resDOC = $this->f->db -> query ($sqlDOC);
1823     $this->f->addToLog("dossier.class.php : db->query(\"".$sqlDOC."\")", VERBOSE_MODE);
1824     $this->f->isDatabaseError($resDOC);
1825     $rowDOC=& $resDOC->fetchRow(DB_FETCHMODE_ASSOC);
1826    
1827     if((isset($rowDOC['dossier']) &&
1828     $rowDOC['date_chantier']<$datedebut || $rowDOC['date_chantier']>$datefin) ||
1829     !isset($rowDOC['dossier'])) {
1830     //
1831 softime 4838 $suivi.=$export_sitadel->entete("SUIVI",$departement,$commune, $version);//8|
1832 mbroquet 3730 $suivi.=$export_sitadel->chantier($rowDOC);
1833     $suivi.=$export_sitadel->achevement($row);
1834 softime 7996 $suivi.="\n";
1835 mbroquet 3730 }
1836     }
1837 softime 7996 }
1838     // Ligne SITADEL généré
1839     $line_sitadel = $depot.$decision.$transfert.$modificatif.$suivi.$suppression;
1840     if ($line_sitadel !== '') {
1841     // Hash la ligne SITADEL
1842     $hash_sitadel = md5($line_sitadel);
1843     // Si le hash de la ligne générée est différent du hash
1844     // sauvegardé sur le dossier
1845     if ($row['hash_sitadel'] !== $hash_sitadel) {
1846     // Met la ligne dans l'export
1847     $export .= $line_sitadel;
1848     // Met à jour le hash SITADEL du dossier
1849     $inst_di = $this->get_inst_dossier($row['dossier']);
1850     $inst_di->update_hash_sitadel($hash_sitadel);
1851     } else {
1852     // Supprime les erreurs liées à la ligne qui ne sera
1853     // pas exportée
1854     $erreur = '';
1855     }
1856     }
1857 mbroquet 3730 } // fin while
1858    
1859     /**
1860     *
1861     */
1862     //
1863     if (DBCHARSET == 'UTF8') {
1864     $export = utf8_decode($export);
1865     }
1866    
1867     /**
1868     * En-tête de fichier.
1869     *
1870     * C'est la première ligne du fichier.
1871     */
1872     // on éclate la chaîne export par ligne pour calculer le nombre
1873     // d'enregistrements et la longueur maximale des enregistrements
1874     $export_by_line = explode("\n", $export);
1875     // longueur maximale des enregistrements
1876     // (Num)(6) longueur de l’enregistrement le plus long contenu dans le
1877     // fichier (sans compter la fin d’enregistrement ou la fin de fichier)
1878     $longueur_maximale_des_enregistrements = 0;
1879     foreach ($export_by_line as $export_line) {
1880     if ($longueur_maximale_des_enregistrements > strlen($export_line)) {
1881     continue;
1882     }
1883     $longueur_maximale_des_enregistrements = strlen($export_line);
1884     }
1885     // nombre d'enregistrements
1886     // (Num)(6) nombre d’enregistrements présents dans le fichier en
1887     // comptant l’en-tête du fichier
1888     // XXX Ne faut-il pas ajouter +1 pour la ligne d'en-tête ?
1889     $nombre_d_enregistrements = count($export_by_line);
1890     // code application
1891     // (Alphanum)(7) = SITADEL
1892     $code_application = "SITADEL";
1893     // code département
1894     // (Alphanum)(3) département dans lequel se trouve le service instructeur
1895     // nomenclature : 001 à 095, 02A, 02B, 971...974
1896     $code_departement = $this->f->getParameter("departement");
1897     // service expéditeur
1898     // (Alphanum)(3) DDE ou commune (la plus grosse en cas d'EPCI) ou DGI
1899     // nomenclature : 'ADS', ‘DGI ou code commune INSEE
1900     $service_expediteur = $this->f->getParameter("commune");
1901     // service destinataire
1902     // (Alphanum)(2) DRE
1903     // nomenclature : code région INSEE (exemple : Ile-de-France=11)
1904     $service_destinataire = $this->f->getParameter("region");
1905     // code du fichier transmis
1906     // (AlphaNum)(12) AAMMjjdddccc
1907     // ddd = département du service instructeur
1908     // ccc = code du service expéditeur
1909     // AAMMjj = date
1910     // par exemple : 090531093ADS dans le cas de la transmission mensuelle
1911     // des événements intervenus au mois de mai communiqués par la DDE de
1912     // Seine-Saint-Denis.
1913     // XXX La date du jour correspond bien à la date demandée ?
1914     $code_du_fichier_transmis = sprintf(
1915     "%s%s%s",
1916     date('ymd'),
1917     $code_departement,
1918     $service_expediteur
1919     );
1920     // numéro d'ordre
1921     // (AlphaNum)(1) numéro d’ordre du fichier en cas de rectificatif
1922     // XXX Le formulaire propose jusqu'à la valeur 10 alors que la taille
1923     // de la châine doit être (1) ?
1924     $numero_d_ordre = $this->f->get_submitted_post_value("numero");
1925     // date de création
1926     // (Alphanum)(6) AAMMjj date de création du fichier transmis
1927     $date_de_creation = date('ymd');
1928     // nom de l'applicatif expéditeur
1929     // (Alphanum)(20) Exemple : GESTIO
1930     $nom_de_l_applicatif_expediteur = "openADS";
1931     // version de l'applicatif expéditeur
1932     // (Alphanum)(8) Exemple : 2.05
1933 softime 7996 $version_de_l_applicatif_expediteur = substr($this->f->get_application_version(), 0, 8);
1934 mbroquet 3730 // Consititution de la ligne d'en-tête.
1935     $entete = sprintf(
1936     "%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n",
1937     $code_application,
1938     $code_departement,
1939     $service_expediteur,
1940     $service_destinataire,
1941     $code_du_fichier_transmis,
1942     $numero_d_ordre,
1943     $longueur_maximale_des_enregistrements,
1944     $date_de_creation,
1945     $nombre_d_enregistrements,
1946     $nom_de_l_applicatif_expediteur,
1947     $version_de_l_applicatif_expediteur
1948     );
1949    
1950     /**
1951     *
1952     */
1953     //
1954     $export = $entete.$export;
1955    
1956     /**
1957     * Écriture de l'export dans un fichier sur le disque et affichage du
1958     * lien de téléchargement.
1959     */
1960     // Composition du nom du fichier
1961     $nom_fichier = "SITADEL".substr($this->f->get_submitted_post_value("datedebut"),3,2)."".substr($this->f->get_submitted_post_value("datedebut"),8,4).".txt";
1962     // Composition des métadonnées du fichier
1963     $metadata_fichier = array(
1964     "filename" => $nom_fichier,
1965     "size" => strlen($export),
1966 softime 8989 "mimetype" => "text/csv",
1967 mbroquet 3730 );
1968     // Écriture du fichier
1969 softime 8989 $id_fichier = $this->f->store_file(
1970     $export,
1971     $metadata_fichier,
1972     "sitadel",
1973     json_encode(array(
1974     'date_debut' => $datedebut,
1975     'date_fin' => $datefin,
1976     ))
1977     );
1978     if ($id_fichier === false) {
1979     $msg_error = __("Erreur lors du stockage/enregistrement du fichier SITADEL.").' '.__("Veuillez contacter votre administrateur.");
1980     $this->f->displayMessage("error", $msg_error);
1981     $this->f->addToLog(__METHOD__."(): ".$msg_error, DEBUG_MODE);
1982     return;
1983     }
1984 mbroquet 3730 //
1985 softime 8989 $message_valid = sprintf(
1986     "%s<br/>%s",
1987     sprintf(__("Le fichier %s a été généré."), $nom_fichier),
1988     sprintf(
1989     '<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>',
1990     OM_ROUTE_FORM,
1991     $id_fichier,
1992     __("Télécharger le fichier SITADEL")
1993     )
1994     );
1995 mbroquet 3730
1996     /**
1997     * Écriture d'une éventuelle erreur durant l'export dans un fichier sur
1998     * le disque et affichage du lien de téléchargement.
1999     */
2000     //
2001     if ($erreur != "") {
2002     // Composition du nom du fichier
2003     $nom_fichier_erreur = "probleme_".$nom_fichier;
2004     // Composition des métadonnées du fichier
2005     $metadata_fichier_erreur = array(
2006     "filename" => $nom_fichier_erreur,
2007     "size" => strlen($erreur),
2008 softime 8989 "mimetype" => "application/octet-stream",
2009 mbroquet 3730 );
2010     // Écriture du fichier
2011 softime 8989 $id_fichier_erreur = $this->f->store_file(
2012     $erreur,
2013     $metadata_fichier_erreur,
2014     "sitadel",
2015     json_encode(array(
2016     'date_debut' => $datedebut,
2017     'date_fin' => $datefin,
2018     ))
2019     );
2020     if ($id_fichier_erreur === false) {
2021     $msg_error = __("Erreur lors du stockage/enregistrement du fichier des incohérences SITADEL.").' '.__("Veuillez contacter votre administrateur.");
2022     $this->f->displayMessage("error", $msg_error);
2023     $this->f->addToLog(__METHOD__."(): ".$msg_error, DEBUG_MODE);
2024     return;
2025     }
2026 mbroquet 3730 //
2027 softime 8989 $message_info .= sprintf(
2028     "%s<br/>%s",
2029     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),
2030     sprintf(
2031     '<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>',
2032     OM_ROUTE_FORM,
2033     $id_fichier_erreur,
2034     __("Télécharger le fichier d'incohérence SITADEL")
2035     )
2036     );
2037 mbroquet 3730 }
2038 softime 8989
2039     //
2040     $this->f->displayMessage("valid",
2041     sprintf(
2042     '%s%s%s',
2043     $message_valid,
2044     $message_info !== '' ? '<br/><br/>' : '',
2045     $message_info
2046     )
2047     );
2048    
2049     //
2050 mbroquet 3730 if (DEBUG > 0) {
2051     printf($export);
2052     }
2053    
2054     } else {// correct = false
2055 softime 8989 $this->f->displayMessage("error", __("Les champs dates sont obligatoires."));
2056 mbroquet 3730 }
2057     }
2058     }
2059    
2060    
2061 softime 8989 function affichageFormulaire() {
2062     printf("<form method=\"POST\" name=f1>");
2063     //
2064     printf(
2065     "<div id=\"sitadel-form-fonctionnement\" class=\"sitadel-form-bloc\"><h3>%s</h3><p>%s</p></div>",
2066     __("Fonctionnement"),
2067     __("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.")
2068     );
2069     //
2070     printf(
2071     "<div id=\"sitadel-form-export\" class=\"sitadel-form-bloc\"><h3>%s</h3>",
2072     __("Export")
2073     );
2074 mbroquet 3730 //Description de la page
2075 softime 8989 $description = __("Saisissez la période pour laquelle vous souhaitez exporter les mouvements des dossiers au format SITADEL.");
2076 mbroquet 3730 $this->f->displayDescription($description);
2077     //
2078 softime 8989 $input = "<input type=\"text\" name=\"%s\" id=\"%s\" value=\"%s\" size=\"15\" class=\"champFormulaire datepicker\" onchange=\"fdate(this)\" />";
2079 mbroquet 3730 // champ date debut
2080 softime 8989 printf(" "._("Date de début")." ");
2081     printf($input, "datedebut", "datedebut", '');
2082 mbroquet 3730 // champ date fin
2083 softime 8989 printf(" "._("Date de fin")." ");
2084     printf($input, "datefin", "datefin", '');
2085 mbroquet 3730 // numero d'ordre d'envoi
2086     printf(" "._("Numero d'ordre d'envoi")." : "."<select name=\"numero\">");
2087     for ($i = 1; $i < 11; $i++) {
2088     printf("<option value =\"%d\" ", $i);
2089     printf(">%d</option>", $i);
2090     }
2091     printf("</select>");
2092 softime 8989 printf(
2093     "<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\" />",
2094     __("Exporter le fichier SITADEL"),
2095     addslashes(sprintf(
2096     "<b>%s</b><br/><br/>%s",
2097     __("Important à lire avant de confirmer le message de validation."),
2098     __("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.")
2099     )),
2100     OM_ROUTE_FORM
2101     );
2102     printf("</div>");
2103    
2104     // Affiche le tableau des fichiers sitadel stocké
2105     $link_tab_storage = OM_ROUTE_SOUSTAB.'&obj=storage&idxformulaire=0&retour=tab&retourformulaire=sitadel';
2106     $tab_storage = sprintf(
2107     '<div id="sousform-storage-sitadel" class="sitadel-form-bloc-tab"></div>
2108     <script type="text/javascript" >
2109     ajaxIt(\'storage-sitadel\', \'%1$s\');
2110     </script>',
2111     $link_tab_storage
2112     );
2113     printf(
2114     "<div id=\"sitadel-form-histo\" class=\"sitadel-form-bloc-end\"><h3>%s</h3>%s</div>",
2115     __("Historique des exports"),
2116     $tab_storage
2117     );
2118    
2119 mbroquet 3730 printf("</form>");
2120     }
2121    
2122     /**
2123     * VIEW - view_document_numerise.
2124     *
2125     * Vue du tableau des pièces du dossier d'autorisation.
2126     *
2127     * Cette vue permet de gérer le contenu de l'onglet "Pièce(s)" sur un
2128     * dossier d'autorisation. Cette vue spécifique est nécessaire car
2129     * l'ergonomie standard du framework ne prend pas en charge ce cas.
2130     * C'est ici la vue spécifique des pièces liées au dossier qui est
2131     * affichée directement au clic de l'onglet au lieu du soustab.
2132     *
2133     * L'idée est donc de simuler l'ergonomie standard en créant un container
2134     * et d'appeler la méthode javascript 'ajaxit' pour charger le contenu
2135     * de la vue visualisation de l'objet lié.
2136     *
2137     * @return void
2138     */
2139     function view_document_numerise() {
2140     // Vérification de l'accessibilité sur l'élément
2141     $this->checkAccessibility();
2142     // Récupération des variables GET
2143     ($this->f->get_submitted_get_value('idxformulaire')!==null ? $idxformulaire =
2144     $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = "");
2145     ($this->f->get_submitted_get_value('retourformulaire')!==null ? $retourformulaire =
2146     $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = "");
2147     // Objet à charger
2148     $obj = "document_numerise";
2149 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
2150     if ($type_aff_form === 'CTX RE' OR $type_aff_form === 'CTX IN') {
2151     $obj = "document_numerise_contexte_ctx";
2152     }
2153 mbroquet 3730 // Construction de l'url de sousformulaire à appeler
2154 softime 7996 $url = OM_ROUTE_SOUSFORM."&obj=".$obj;
2155 mbroquet 3730 $url .= "&idx=".$idxformulaire;
2156     $url .= "&action=4";
2157     $url .= "&retourformulaire=".$retourformulaire;
2158     $url .= "&idxformulaire=".$idxformulaire;
2159     $url .= "&retour=form";
2160     // Affichage du container permettant le reffraichissement du contenu
2161     // dans le cas des action-direct.
2162     printf('
2163     <div id="sousform-href" data-href="%s">
2164     </div>',
2165     $url
2166     );
2167     // Affichage du container permettant de charger le retour de la requête
2168     // ajax récupérant le sous formulaire.
2169     printf('
2170     <div id="sousform-%s">
2171     </div>
2172     <script>
2173     ajaxIt(\'%s\', \'%s\');
2174     </script>',
2175     $obj,
2176     $obj,
2177     $url
2178     );
2179     }
2180    
2181 softime 12847
2182     /**
2183     * Traitement du numéro de version d'un dossier.
2184     * Renvoie le numéro de version.
2185     *
2186     * Récupère le numéro de version du dossier d'instruction (DI) à l'aide du
2187     * numéro de dossier d'autorisation (DA).
2188     * Si un numéro de version a été récupéré incremente également le numéro
2189     * de version du DA dans la base de données.
2190     *
2191     * @param array tableau contenant les valeurs du formulaire
2192     * @return integer|null numero de version du dossier si il a pu être récupéré
2193 mbroquet 3730 */
2194 softime 12847 protected function traitementNumeroVersion($val = array()) {
2195     // Récupération du numéro de version du dossier d'instruction
2196     $numeroVersion = $this->getNumeroVersion($val['dossier_autorisation']);
2197     // Mise à jour du numéro de version du DA
2198     // La numérotation du DI est unique et basée sur celle du DA qui débute à -1.
2199 nmeucci 4526 // Ainsi la version du DI initial est à 0.
2200     if (is_numeric($numeroVersion) or $numeroVersion == -1){
2201     $this->incrementNumeroVersion($val['dossier_autorisation'], ++$numeroVersion);
2202     }
2203 softime 12847 return $numeroVersion;
2204     }
2205 nmeucci 4526
2206 softime 12847 /**
2207     * Traitement de la numérotation du dossier lors de la saisie manuelle du
2208     * numéro de dossier.
2209     * Renvoie un tableau contenant les valeurs nécessaires à la numérotation du
2210     * dossier.
2211     *
2212     * Récupère le numéro de dossier issus du formulaire. Construis le libellé et
2213     * l'identifiant du dossier à partir du numéro saisie.
2214     *
2215     *
2216     * @param array tableau contenant les valeurs du formulaire.
2217     * @return array informations liées à la numérotation du dossier.
2218     */
2219     protected function traitementNumerotationDossierManuelle($val = array()) {
2220     // INitialisation des valeurs de la numérotation à partir des informations issues
2221     // du formulaire
2222     $num_doss_comp = $val['numero_dossier_complet'];
2223     $numerotation = array(
2224     $this->clePrimaire => $num_doss_comp,
2225     'dossier_libelle' => $num_doss_comp
2226     );
2227     // TODO : à commenter
2228     $num_urba = $this->f->numerotation_urbanisme($num_doss_comp);
2229     // TODO : à commenter
2230     if (empty($num_urba['di']) === false) {
2231     $dossier = sprintf("%s%s%s%s%s%s%s%s",
2232     $num_urba['di']['type'],
2233     $num_urba['di']['departement'],
2234     $num_urba['di']['commune'],
2235     $num_urba['di']['annee'],
2236     $num_urba['di']['division'],
2237     $num_urba['di']['numero'],
2238     isset($num_urba['di']['suffixe']) === true ? $num_urba['di']['suffixe'] : '',
2239     isset($num_urba['di']['num_suffixe']) === true ? str_pad($num_urba['di']['num_suffixe'], 2, '0', STR_PAD_LEFT) : ''
2240     );
2241     $dossierLibelle = sprintf("%s %s%s %s %s%s%s%s",
2242     $num_urba['di']['type'],
2243     $num_urba['di']['departement'],
2244     $num_urba['di']['commune'],
2245     $num_urba['di']['annee'],
2246     $num_urba['di']['division'],
2247     $num_urba['di']['numero'],
2248     isset($num_urba['di']['suffixe']) === true ? $num_urba['di']['suffixe'] : '',
2249     isset($num_urba['di']['num_suffixe']) === true ? str_pad($num_urba['di']['num_suffixe'], 2, '0', STR_PAD_LEFT) : ''
2250     );
2251     $numerotation = array(
2252     $this->clePrimaire => $dossier,
2253     'dossier_libelle' => $dossierLibelle,
2254     'numerotation_type' => $num_urba['di']['type'],
2255     'numerotation_dep' => $num_urba['di']['departement'],
2256     'numerotation_com' => $num_urba['di']['commune'],
2257     'numerotation_division' => $num_urba['di']['division'],
2258     'numerotation_num' => $num_urba['di']['numero'],
2259     'numerotation_suffixe' => isset($num_urba['di']['suffixe']) === true ? $num_urba['di']['suffixe'] : null,
2260     'numerotation_num_suffixe' => isset($num_urba['di']['num_suffixe']) === true ? $num_urba['di']['num_suffixe'] : null
2261     );
2262     }
2263     return $numerotation;
2264     }
2265 softime 10573
2266 softime 12847 /**
2267     * Traitement automatique de la numérotation du dossier.
2268     * Renvoie un tableau contenant les valeurs nécessaires à la numérotation du
2269     * dossier.
2270     *
2271     * @param array tableau contenant les valeurs du formulaire.
2272     * @return array informations liées à la numérotation du dossier.
2273     */
2274     protected function traitementNumerotationDossierAuto($val = array()) {
2275     // GESTION DU SUFFIXE :
2276     // La version du suffixe est celle du type de DI : à ne pas confondre avec celle du DI lui même.
2277     // Exemple chronologique :
2278     // DI n° PC0130551600004 -> version 0
2279     // DI n° PC0130551600004M01 -> version 1
2280     // DI n° PC0130551600004PRO01 -> version 2 !!
2281     $code = null;
2282     $numeroVersionDossierInstructionType = null;
2283     $suffixe = "";
2284     // Si l'option suffixe de ce type de DI est activée
2285     if ( $this->getSuffixe($this->getDossierInstructionType()) === 't' ){
2286     // Récupération de la lettre associée au type de dossier d'instruction
2287     $code = $this->getCode($this->getDossierInstructionType());
2288     // Récupération du numéro de version en fonction du type de dossier d'instruction
2289     $numeroVersion = $this->getNumeroVersion($val['dossier_autorisation']);
2290     $numeroVersionDossierInstructionType = $this->getNumeroVersionDossierInstructionType(
2291     $val['dossier_autorisation'],
2292     $val['dossier_instruction_type'],
2293     $val['demande_type'],
2294     $numeroVersion
2295     );
2296     // Suffixe
2297     $suffixe = $code.$numeroVersionDossierInstructionType;
2298 softime 10573 }
2299    
2300 softime 12847 // Récupération du DA pour aller chercher le type, le département, la commune, la division et le numéro
2301     // nécessaire à la numérotation du dossier.
2302     $da = $this->f->get_inst__om_dbform(array(
2303     "obj" => "dossier_autorisation",
2304     "idx" => $val['dossier_autorisation'],
2305     ));
2306 softime 10573
2307 softime 12847 return array(
2308     'dossier' => $val['dossier_autorisation'].$suffixe,
2309     'dossier_libelle' => $this->get_dossier_autorisation_libelle($val['dossier_autorisation']).$suffixe,
2310     'numerotation_type' => ! empty($da->getVal("numerotation_type")) ? $da->getVal("numerotation_type") : null,
2311     'numerotation_dep' => ! empty($da->getVal("numerotation_dep")) ? $da->getVal("numerotation_dep") : null,
2312     'numerotation_com' => ! empty($da->getVal("numerotation_com")) ? $da->getVal("numerotation_com") : null,
2313     'numerotation_division' => ! empty($da->getVal("numerotation_division")) ? $da->getVal("numerotation_division") : null,
2314     'numerotation_num' => ! empty($da->getVal("numerotation_num")) ? $da->getVal("numerotation_num") : null,
2315     'numerotation_suffixe' => $code,
2316     'numerotation_num_suffixe' => $numeroVersionDossierInstructionType
2317     );
2318     }
2319 softime 10573
2320 softime 12847 /**
2321     * Traitement spécifique pour la numérotation du dossier.
2322     * Renvoie un tableau contenant les valeurs à mettre à jour pour la numérotation.
2323     *
2324     * Le(s) traitement(s) effectué(s) dans cette méthode est(sont) :
2325     * - Si l'option om_collectivite_entite est active gère la numérotation de l'entité
2326     * du dossier.
2327     *
2328     * @param array tableau contenant les valeurs du formulaire.
2329     * @return array informations liées à la numérotation du dossier.
2330     */
2331     function traitementSpécifique($val = array()) {
2332     // TODO : commenter
2333     $numerotation = array();
2334     // Gestion du numéro entité du dossier (specifique au MC)
2335 softime 10573 $collectivite = $this->f->getCollectivite($val['om_collectivite']);
2336     if ($this->f->is_option_om_collectivite_entity_enabled($val['om_collectivite']) === true
2337     && $collectivite['code_entite'] !== null) {
2338 softime 12847 $numerotation_entite = $collectivite['code_entite'];
2339     $numerotation_num_entite = $this->increment_num_entite($val['dossier_autorisation']);
2340     $numerotation_num_entite = str_pad($numerotation_num_entite, 2, "0", STR_PAD_LEFT);
2341     $numerotation = array(
2342     $this->clePrimaire => $val[$this->clePrimaire].$numerotation_entite.$numerotation_num_entite,
2343     'dossier_libelle' => $val['dossier_libelle']." ".$numerotation_entite.$numerotation_num_entite,
2344     'numerotation_entite' => $numerotation_entite,
2345     'numerotation_num_entite' => $numerotation_num_entite
2346     );
2347 softime 10573 }
2348 softime 12847 return $numerotation;
2349     }
2350 softime 10573
2351 softime 12847 /**
2352     * Définition de la version et du suffixe du DI lors de sa création.
2353     *
2354     * @param array tableau contenant les valeurs du formulaire
2355     */
2356     function setValFAjout($val = array()) {
2357     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2358     // traitement lié à la récupération du numéro de version du dossier et stockage
2359     // de ce numéro de version
2360     $numeroVersion = $this->traitementNumeroVersion($val);
2361     $this->valF['version'] = $numeroVersion;
2362    
2363     // Il y a deux possibilité de numérotation :
2364     // - la numérotation manuelle : le numéro de dossier est complétement saisis par l'utilisateur
2365     // - la numérotation automatique : le numéro de dossier est construis à partir du paramétrage
2366     // Selon les cas on va donc gérer la numérotation différemment.
2367     // Dans tous les cas on va récupérer les valeurs lié à la numérotation sous le forme d'un tableau.
2368     $isSaisieManuelle = ! empty($val['numero_dossier_complet']);
2369     if ($isSaisieManuelle) {
2370     $valNumerotationDossier = $this->traitementNumerotationDossierManuelle($val);
2371     } else {
2372     $valNumerotationDossier = $this->traitementNumerotationDossierAuto($val);
2373     }
2374     // Traitements spécifiques nécessaires à la numérotation du dossier.
2375     // Pour pouvoir réaliser les traitements spécifique on a besoin des infos de
2376     // numérotation. On l'ajoute donc au tableau des valeur pour pouvoir y accéder.
2377     $val = array_merge($val, $valNumerotationDossier);
2378     $valNumerotationSpecifique = $this->traitementSpécifique($val);
2379    
2380    
2381    
2382     // Affectation automatique du dossier
2383     // Pour pouvoir réaliser l'affectation automatique on a besoin de la localisation.
2384     // On l'ajoute donc au tableau des valeur pour pouvoir y accéder
2385     // Récupération des références de localisation du dossier
2386     $valLocalisation = $this->localisation_dossier($val);
2387     $val = array_merge(
2388     $val,
2389     $valLocalisation
2390     );
2391     $valAffectation = $this->affectation_dossier($val);
2392    
2393     // Construis le tableau des valeurs mise à jour à partir des valeurs issues de
2394     // tous les traitements précédents
2395     $this->valF = array_merge(
2396     $this->valF,
2397     $valNumerotationDossier,
2398     $valNumerotationSpecifique,
2399     $valAffectation
2400     );
2401    
2402     $this->addToLog(__METHOD__."(): end", EXTRA_VERBOSE_MODE);
2403 softime 10573 }
2404    
2405 softime 12847 /**
2406     * Traitement permettant de récupérer la localisation du dossier à partir de
2407     * ses références cadastrales.
2408     *
2409     * Récupère un tableau contenant les informations suivantes :
2410     * array(
2411     * 'quartier' => quartier,
2412     * 'arrondissement' => arrondissement
2413     * 'section' => section
2414     * )
2415     *
2416     * @param array tableau des valeurs du dossier
2417     * @param array tableau contenant la localisation du dossier
2418     */
2419     protected function localisation_dossier($val) {
2420     $quartier = 0;
2421     $arrondissement = 0;
2422     $section = '';
2423    
2424     // Si la référence cadastrale n'est pas vide alors on récupère la
2425     // section, le quartier et l'arrondissement
2426     if ($val['terrain_references_cadastrales'] != '') {
2427    
2428 softime 13137 // Récupère toutes les parcelles du dossier et sélectionne la première
2429     $list_parcelles = $this->f->parseParcelles($this->valF['terrain_references_cadastrales'], $this->valF['om_collectivite']);
2430     $parcelle = $list_parcelles[0];
2431 softime 12847
2432 softime 13137 // Récupère l'identifiant du quartier et de l'arrondissement
2433     $quartier_arrondissement = $this->get_quartier_arrondissement_by_code_impot($parcelle['quartier']);
2434     if ($quartier_arrondissement !== null
2435     && is_array($quartier_arrondissement) === true
2436     && isset($quartier_arrondissement['quartier']) === true
2437     && isset($quartier_arrondissement['arrondissement']) === true) {
2438     //
2439     $quartier = $quartier_arrondissement['quartier'];
2440     $arrondissement = $quartier_arrondissement['arrondissement'];
2441 softime 12847 }
2442    
2443     // On récupère la section
2444 softime 13137 $section = $parcelle['section'];
2445 softime 12847 }
2446    
2447     return array(
2448 softime 13137 'quartier' => $quartier,
2449     'arrondissement' => $arrondissement,
2450 softime 12847 'section' => $section
2451     );
2452     }
2453    
2454 softime 10573 // Permet d'incrémenter le numéro de version de l'entité
2455     public function increment_num_entite($da) {
2456     if ($da === null || $da === '') {
2457     return false;
2458     }
2459     $last_entity_num = 0;
2460 nmeucci 4526 //
2461 softime 10573 $inst_da = $this->f->get_inst__om_dbform(array(
2462     "obj" => "dossier_autorisation",
2463     "idx" => $da,
2464     ));
2465     $list_di = $inst_da->get_list_dossier_instruction();
2466     foreach ($list_di as $di) {
2467     $inst_di = $this->f->get_inst__om_dbform(array(
2468     "obj" => "dossier",
2469     "idx" => $di['dossier'],
2470     ));
2471     if (intval($inst_di->getVal('numerotation_num_entite')) > $last_entity_num) {
2472     $last_entity_num = intval($inst_di->getVal('numerotation_num_entite'));
2473     }
2474 mbroquet 3730 }
2475 softime 10573 return ++$last_entity_num;
2476 mbroquet 3730 }
2477    
2478     /*Récupère la valeur du suffixe d'un dossier_instruction_type*/
2479     function getSuffixe($dossierInstructionType){
2480    
2481     $suffixe = "";
2482    
2483     $sql = "SELECT
2484     suffixe
2485     FROM
2486     ".DB_PREFIXE."dossier_instruction_type
2487     WHERE
2488     dossier_instruction_type = $dossierInstructionType";
2489 softime 8989 $res = $this->f->db->query($sql);
2490 softime 12847 $this->addToLog(
2491     __METHOD__."(): db->query(\"".$sql."\");",
2492     VERBOSE_MODE
2493     );
2494     $this->f->isDatabaseError($res);
2495 mbroquet 3730 if ( $res->numRows() > 0 ){
2496    
2497     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
2498     $suffixe = $row['suffixe'];
2499     }
2500    
2501     return $suffixe;
2502     }
2503    
2504     /*Récupère dans la table de paramètrage la lettre correspondant
2505     * au dossier_instruction_type
2506     */
2507     function getCode($dossierInstructionType){
2508    
2509     $code = "";
2510    
2511     $sql = "SELECT
2512     code
2513     FROM
2514     ".DB_PREFIXE."dossier_instruction_type
2515     WHERE
2516     dossier_instruction_type = $dossierInstructionType";
2517 softime 8989 $res = $this->f->db->query($sql);
2518 softime 12847 $this->addToLog(
2519     __METHOD__."(): db->query(\"".$sql."\");",
2520     VERBOSE_MODE
2521     );
2522     $this->f->isDatabaseError($res);
2523 mbroquet 3730 if ( $res->numRows() > 0 ){
2524    
2525     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
2526     $code = $row['code'];
2527     }
2528    
2529     return $code;
2530     }
2531    
2532 softime 12847 /**
2533     * Récupère le numéro de version d'un dossier_autorisation à l'aide d'une
2534     * requête sql.
2535     *
2536     * En cas d'erreur sur la requête arrête l'execution et affiche un message
2537     * d'erreur.
2538     *
2539     * @param string identifiant du dossier d'autorisation (DA)
2540     * @return integer numéro de version du DA
2541     */
2542 mbroquet 3730 function getNumeroVersion($dossierAutorisation){
2543    
2544     $numeroVersion = "";
2545    
2546     $sql = "SELECT
2547     numero_version
2548     FROM
2549     ".DB_PREFIXE."dossier_autorisation
2550     WHERE
2551     dossier_autorisation = '$dossierAutorisation'";
2552 softime 8989 $res = $this->f->db->query($sql);
2553 softime 12847 $this->addToLog(
2554     __METHOD__."(): db->query(\"".$sql."\");",
2555     VERBOSE_MODE
2556     );
2557     $this->f->isDatabaseError($res);
2558 mbroquet 3730 if ( $res->numRows() > 0 ){
2559    
2560     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
2561     $numeroVersion = $row['numero_version'];
2562     }
2563    
2564     return $numeroVersion;
2565     }
2566 fmichon 3892
2567     /**
2568     * Retourne le numéro d'un dossier d'instruction et ses six parties.
2569     *
2570     * @param string $dossier_instruction Identifiant du dossier d'instruction (avec ou sans espace)
2571     *
2572     * @return array
2573     */
2574     function get_dossier_instruction_numero($dossier_instruction = null) {
2575    
2576     // Si le DI n'a pas été fourni
2577     if ($dossier_instruction === null) {
2578     // On le récupère
2579     $dossier_instruction = $this->getVal($this->clePrimaire);
2580     }
2581    
2582     /*
2583     Analyse du numéro du DI et extraction de ses parties
2584    
2585 softime 11228 Retour : tableau associatif:
2586     - type : type du DA (2 ou 3 lettres)
2587     - depcom : code département + code communes(3 + 3 integer)
2588     - annee : année (2 integer)
2589     - division : division (une lettre ou un entier)
2590     - numero : numéro
2591     - mod : lettre(s) du type du dossier d'instruction (P, M, ANNUL, ...)
2592     - version : version du dossier d'instruction (1 ou 2 integer)
2593 fmichon 3892 */
2594 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) {
2595     $matches = array();
2596     if (! preg_match_all(
2597     '/^(?P<type>[A-Z]{2,3})'.'\s{0,1}'.
2598     '(?P<departement>(\d{3}|02[AB]))'.
2599     '(?P<commune>\d{3})'.'\s{0,1}'.
2600     '(?P<annee>\d{2})'.'\s{0,1}'.
2601     '(?P<division>[[:alnum:]])'.
2602     '(?P<numero>\d{4})'.
2603 softime 11418 '(?P<suffixe>[A-Z]{1,5})?'.
2604     '(?P<num_suffixe>\d{1,2})?'.'$/', $dossier_instruction, $matches)) {
2605 softime 11228 $this->f->addToLog(
2606     __METHOD__."()".sprintf(__("Échec du parsing du numéro de dossier %s."), $dossier_instruction),
2607     DEBUG_MODE);
2608 softime 10573 return false;
2609     }
2610 softime 11228 $res = array();
2611     foreach(array(
2612 softime 11418 'type', 'departement', 'commune', 'annee', 'division', 'numero', 'suffixe', 'num_suffixe')
2613 softime 11228 as $key) {
2614     if(isset($matches[$key][0])) {
2615     $res[$key] = $matches[$key][0];
2616     }
2617     }
2618     //$this->f->addToLog(__METHOD__."() res: ".var_export($res, true), DEBUG_MODE);
2619     return $res;
2620 fmichon 3892 }
2621    
2622     /**
2623 softime 8989 * Récupère les arguments nécessaires à la construction d'une séquence de
2624     * dossier.
2625 softime 8477 *
2626 softime 8989 * @return array
2627 softime 8477 */
2628 softime 8989 function get_sequence_args() {
2629 softime 8477 //
2630 softime 8989 $result = array();
2631 softime 10573
2632 softime 8477 $inst_datd = $this->get_inst_dossier_autorisation_type_detaille();
2633     $inst_dat = $this->get_inst_dossier_autorisation_type($inst_datd->getVal('dossier_autorisation_type'));
2634 softime 8989 $result['datc'] = $inst_dat->getVal('code');
2635     $result['annee'] = $this->getVal('annee');
2636 softime 10573
2637 softime 8477 $parse_id = $this->get_dossier_instruction_numero();
2638 softime 10573 if ($parse_id === false
2639     || (is_array($parse_id) && empty(array_filter($parse_id)) === true)) {
2640     // Message dans le log
2641     $this->f->addToLog(__METHOD__."(): ".__("Erreur lors de la récupération du numéro de version du dossier d'instruction."), DEBUG_MODE);
2642     return false;
2643     }
2644    
2645 softime 11228 $result['dep'] = $parse_id['departement'];
2646     $result['com'] = $parse_id['commune'];
2647     //$this->f->addToLog(__METHOD__."(): res: ".var_export($result, true), DEBUG_MODE);
2648 softime 8989 return $result;
2649     }
2650    
2651     /**
2652     * Retourne le nom de la sequence du dossier d'instruction courant.
2653     *
2654     * @return String
2655     */
2656     function get_sequence_name() {
2657     $sequence_args = $this->get_sequence_args();
2658 softime 10573 if (empty($sequence_args) === true) {
2659     // Message dans le log
2660     $this->f->addToLog(__METHOD__."(): ".__("Erreur lors de la récupération des arguments de la séquence."), DEBUG_MODE);
2661     return false;
2662     }
2663 softime 11228 return $this->compose_sequence_name(
2664     $sequence_args['datc'], $sequence_args['annee'],
2665     $sequence_args['dep'], $sequence_args['com']);
2666 softime 8477 }
2667    
2668     /**
2669 fmichon 3892 * Récupère le numéro de version du dossier d'instruction.
2670     *
2671     * @return string
2672     */
2673 softime 4838 function get_dossier_instruction_version($dossier_instruction = null) {
2674 fmichon 3892
2675     // Expression régulière qui découpe le numéro du dossier
2676 softime 4838 $return = $this->get_dossier_instruction_numero($dossier_instruction);
2677 fmichon 3892
2678     // Si l'expression régulière retourne une erreur
2679     if ($return == false) {
2680     // Message dans le log
2681 softime 10573 $this->f->addToLog(__METHOD__."(): ".__("Erreur lors de la récupération du numéro de version du dossier d'instruction"), DEBUG_MODE);
2682 fmichon 3892 //
2683     return false;
2684     }
2685    
2686 nmeucci 4526 // Retourne seulement la version du dossier d'instruction.
2687     // Elle vaut 0 si le numéro du DI n'a pas de suffixe.
2688 softime 11418 if (isset($return['num_suffixe'])) {
2689     return $return['num_suffixe'];
2690 nmeucci 4526 }
2691     return 0;
2692 fmichon 3892 }
2693 mbroquet 3730
2694     /*Incrémente le numéro de version du dossier*/
2695     function incrementNumeroVersion($dossierAutorisation, $nouveauNumeroVersion) {
2696    
2697     $valF = array (
2698     "numero_version" => $nouveauNumeroVersion
2699     );
2700    
2701 softime 12847 $res = $this->f->db->autoexecute(
2702     DB_PREFIXE."dossier_autorisation",
2703     $valF,
2704     DB_AUTOQUERY_UPDATE,
2705     "dossier_autorisation = '$dossierAutorisation'"
2706     );
2707     $this->addToLog(
2708     __METHOD__."(): db->autoexecute(\"".DB_PREFIXE."dossier_autorisation\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"dossier_autorisation = '".$dossierAutorisation."'\");",
2709     VERBOSE_MODE
2710     );
2711     $this->f->isDatabaseError($res);
2712 mbroquet 3730 }
2713    
2714     /**
2715     * Retourne un numéro de version en fonction du type de dossier d'instruction
2716     * @param string $dossier_autorisation
2717     * @param integer $dossier_instruction_type
2718     * @return int
2719     */
2720 softime 10573 public function getNumeroVersionDossierInstructionType($dossier_autorisation, $dossier_instruction_type, $demande_type, $numero_version, $increment = true){
2721    
2722 mbroquet 3730 $numeroVersionDossierInstructionType = $numero_version;
2723 softime 10573
2724     // Récupère la nature de la demande
2725     $inst_demande_type = $this->f->get_inst__om_dbform(array(
2726     "obj" => "demande_type",
2727     "idx" => $demande_type
2728     ));
2729     $inst_demande_nature = $this->f->get_inst__om_dbform(array(
2730     "obj" => "demande_nature",
2731     "idx" => $inst_demande_type->getVal('demande_nature')
2732     ));
2733    
2734     // Si c'est un dossier d'instruction de type "Initial"
2735     if (strtolower($inst_demande_nature->getVal('code')) === 'nouv') {
2736 mbroquet 3730 return 0;
2737     }
2738     //Si c'est un modificatif ou transfert on retourne un nombre correspondant au
2739     //nombre de dossier d'instruction de ce type, rattaché au dossier
2740     //d'autorisation complété par des 0 à gauche si besoin. Format du retour
2741     //attendu : 01 ou 02, etc.
2742     else {
2743    
2744     //On récupère le nombre de dossier d'instruction de ce type rattaché au
2745     //dossier d'autorisation
2746     $sql = "SELECT
2747     count(dossier)
2748     FROM
2749     ".DB_PREFIXE."dossier
2750     LEFT JOIN
2751     ".DB_PREFIXE."dossier_autorisation
2752     ON
2753     dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
2754     WHERE
2755     dossier_autorisation.dossier_autorisation = '".$dossier_autorisation."'
2756     AND
2757     dossier.dossier_instruction_type = ".$dossier_instruction_type;
2758 softime 12847 $numeroVersionDossierInstructionType = $this->f->db->getone($sql);
2759     $this->addToLog(
2760     __METHOD__."(): db->getone(\"".$sql."\")",
2761     VERBOSE_MODE
2762     );
2763     if ($this->f->isDatabaseError($numeroVersionDossierInstructionType)) { // PP
2764 mbroquet 3730 $this->f->addToError("", $numeroVersionDossierInstructionType, $numeroVersionDossierInstructionType);
2765     return false;
2766     }
2767    
2768     // Requête SQL
2769     $sql = "SELECT
2770     substring(dossier, '\d*$')::int as last_num_dossier
2771     FROM ".DB_PREFIXE."dossier
2772     WHERE dossier_instruction_type = ".$dossier_instruction_type."
2773     AND dossier_autorisation = '".$dossier_autorisation."'
2774     AND version = (
2775     SELECT max(version)
2776     FROM ".DB_PREFIXE."dossier
2777     WHERE dossier_instruction_type = ".$dossier_instruction_type."
2778     AND dossier_autorisation = '".$dossier_autorisation."'
2779     GROUP BY dossier_instruction_type, dossier_autorisation
2780     )";
2781 softime 8989 $res = $this->f->db->query($sql);
2782 mbroquet 3730 $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\")", VERBOSE_MODE);
2783     $this->f->isDatabaseError($res);
2784 softime 9282 $num_version_last_dossier = null;
2785     if ($res->numRows() > 0) {
2786     $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
2787     $num_version_last_dossier = $row['last_num_dossier'];
2788     }
2789 mbroquet 3730
2790     if (!empty($num_version_last_dossier)
2791     && $num_version_last_dossier >= $numeroVersionDossierInstructionType) {
2792     // Modifie le numéro suivant
2793     $numeroVersionDossierInstructionType = $num_version_last_dossier;
2794     }
2795     //
2796     if ($increment === true) {
2797     $numeroVersionDossierInstructionType = ++$numeroVersionDossierInstructionType;
2798     }
2799     //On compléte par des 0 à gauche
2800     $numeroVersionDossierInstructionType = str_pad($numeroVersionDossierInstructionType, 2, "0", STR_PAD_LEFT);
2801    
2802     return $numeroVersionDossierInstructionType;
2803     }
2804     }
2805     /**
2806     * Retourne le libellé du dossier d'autorisation
2807     * @param string $dossier_autorisation Identifiant du dossier d'autorisation
2808     * @return string Libellé dossier d'autorisation
2809     */
2810     function get_dossier_autorisation_libelle($dossier_autorisation) {
2811    
2812     $dossier_autorisation_libelle = "";
2813    
2814     // Requête SQL
2815     $sql = "SELECT
2816     dossier_autorisation_libelle
2817     FROM
2818     ".DB_PREFIXE."dossier_autorisation
2819     WHERE
2820     dossier_autorisation = '$dossier_autorisation'";
2821 softime 12847 $dossier_autorisation_libelle = $this->f->db->getone($sql);
2822     $this->addToLog(
2823     __METHOD__."(): db->getone(\"".$sql."\")",
2824     VERBOSE_MODE
2825     );
2826     $this->f->isDatabaseError($dossier_autorisation_libelle);
2827 mbroquet 3730
2828     // Retourne le résultat
2829     return $dossier_autorisation_libelle;
2830     }
2831 softime 10573
2832 softime 6929 function setvalF($val = array()){
2833 softime 10573
2834     if (! $this->f->is_option_dossier_commune_enabled()) {
2835     // ajoute une "fausse" clé 'commune' dans le tableau des données envoyées
2836     // car la fonction 'setValF()' dans 'gen/obj/demande.class.php'
2837     // déclenche une erreur 'Undefined index: commune' sinon
2838     $val['commune'] = null;
2839     // idem pour cette valeur qui est passée au dossier d'instruction
2840     $this->valF['commune'] = null;
2841     }
2842    
2843 mbroquet 3730 parent::setvalF($val);
2844    
2845     // Récupération des id demandeurs postés
2846     $this->getPostedValues();
2847    
2848     // enlever les valeurs a ne pas saisir -> recherche en trigger ajouter et modifier
2849     unset ($this->valF['geom']);
2850     unset ($this->valF['geom1']);
2851     // valeurs hiddenstatic (calcule)
2852     if($this->maj==1){
2853     // par defaut
2854     unset ($this->valF['etat']);
2855     unset ($this->valF['delai']);
2856     unset ($this->valF['accord_tacite']);
2857     }
2858     unset ($this->valF['avis_decision']); // avis + libelle avis
2859     unset ($this->valF['terrain_surface_calcul']);
2860     unset ($this->valF['shon_calcul']);
2861     unset ($this->valF['date_notification_delai']);
2862     unset ($this->valF['date_decision']);
2863     unset ($this->valF['date_limite']);
2864     unset ($this->valF['date_validite']);
2865     unset ($this->valF['date_chantier']);
2866     unset ($this->valF['date_achevement']);
2867     unset ($this->valF['date_conformite']);
2868 nmeucci 3887 // Ce champ est mis à jour uniquement par la gestion spécifique du log
2869     // et donc jamais par les actions ajouter/modifier
2870     unset ($this->valF['log_instructions']);
2871 softime 9245 // Ce champ n'est jamais mis à jour, seulement initialisé à la création
2872     // du dossier d'instruction
2873     unset($this->valF['initial_dt']);
2874 mbroquet 3730
2875 softime 10573 // Vérification de la saisie manuelle du numéro complet
2876     $force_param_duree_val = false;
2877     $num_doss_comp = isset($val['numero_dossier_complet']) === true ? $val['numero_dossier_complet'] : null;
2878     if ($num_doss_comp !== null) {
2879     $num_urba = $this->f->numerotation_urbanisme($num_doss_comp);
2880     if (empty($num_urba['di']) === false) {
2881     $force_param_duree_val = true;
2882     }
2883     }
2884 mbroquet 3730 // Durée de validité lors de la création du dossier d'instruction
2885 softime 10573 $this->valF['duree_validite'] = $this->get_duree_validite($this->valF['dossier_autorisation'], $force_param_duree_val);
2886 mbroquet 3730 }
2887    
2888 softime 6929
2889 softime 6565 /**
2890 softime 7067 * Retourne le type de formulaire : ADS, CTX RE, CTX IN ou DPC.
2891 softime 6565 *
2892     * @return mixed $type_aff_form Type de formulaire (string) ou false (bool) si erreur BDD.
2893     */
2894     function get_type_affichage_formulaire() {
2895     if (isset($this->type_aff_form) === true) {
2896     return $this->type_aff_form;
2897 mbroquet 3730 }
2898 softime 6565 //
2899 softime 7996 if($this->getParameter('maj') == '0' OR $this->get_action_crud() === 'create') {
2900 softime 6565 $id_dossier_instruction_type = $this->valF["dossier_instruction_type"];
2901     } else {
2902     $id_dossier_instruction_type = $this->getVal("dossier_instruction_type");
2903     }
2904     $sql = "SELECT dossier_autorisation_type.affichage_form
2905     FROM " . DB_PREFIXE . "dossier_instruction_type
2906     INNER JOIN " . DB_PREFIXE . "dossier_autorisation_type_detaille
2907     ON dossier_instruction_type.dossier_autorisation_type_detaille=dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2908     INNER JOIN " . DB_PREFIXE . "dossier_autorisation_type
2909     ON dossier_autorisation_type.dossier_autorisation_type=dossier_autorisation_type_detaille.dossier_autorisation_type
2910     WHERE dossier_instruction_type.dossier_instruction_type=" . intval($id_dossier_instruction_type);
2911 softime 8989 $type_aff_form = $this->f->db->getOne($sql);
2912 softime 6565 $this->f->addToLog(__METHOD__ . " : db->getOne(\"" . $sql . "\")", VERBOSE_MODE);
2913     if($this->f->isDatabaseError($type_aff_form, true) === true) {
2914     return false;
2915     }
2916     $this->type_aff_form = $type_aff_form;
2917     //
2918     return $this->type_aff_form;
2919     }
2920 mbroquet 3730
2921    
2922 softime 6565 /**
2923     * Retourne le code du groupe du dossier d'instruction.
2924     *
2925     * @return string
2926     */
2927     public function get_groupe() {
2928     //
2929     if (isset($this->groupe) === true && $this->groupe !== null) {
2930     return $this->groupe;
2931 mbroquet 3730 }
2932    
2933 softime 6565 // Récupère le code du groupe
2934     $inst_dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
2935     $inst_dossier_autorisation_type = $this->get_inst_dossier_autorisation_type($inst_dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
2936     $inst_groupe = $this->get_inst_groupe($inst_dossier_autorisation_type->getVal('groupe'));
2937     $groupe = $inst_groupe->getVal('code');
2938 mbroquet 3730
2939 softime 6565 //
2940     $this->groupe = $groupe;
2941     //
2942     return $this->groupe;
2943     }
2944 mbroquet 3730
2945 softime 6565 /**
2946 softime 8989 * @return void
2947 softime 6565 */
2948 softime 8989 function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
2949     parent::verifier($val);
2950 softime 7366 // La date de dépôt est obligatoire
2951 softime 11876 if (isset($val['date_depot']) && ($val['date_depot'] === '' || $val['date_depot'] === null)) {
2952 softime 7366 //
2953     $this->correct = false;
2954     $this->addToMessage( _('Le champ').' <span class="bold">'.$this->getLibFromField('date_depot').'</span> '._('est obligatoire'));
2955 softime 11876 } else {
2956     //
2957     $date_depot = $val["date_depot"];
2958     if (preg_match('/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/', $val["date_depot"], $d_match)) {
2959     $date_depot = $d_match[3].'-'.$d_match[2].'-'.$d_match[1];
2960     }
2961     // Il faut avoir une date de dépôt pour pouvoir vérifier si elle est supérieure à la date du jour
2962     $date_depot = DateTime::createFromFormat('Y-m-d', $date_depot);
2963     $aujourdhui = new DateTime();
2964     try {
2965     if (! $date_depot instanceof DateTime) {
2966     throw new RuntimeException("Not a DateTime");
2967     }
2968     // Si la date issus du formulaire n'a pas pu être converti, date_demande vaudra
2969     // false. Avant de comparer on vérifie donc que la date a bien été récupérée
2970     if($date_depot > $aujourdhui) {
2971     $this->correct = false;
2972     $this->addToMessage(_("La date de depot ne peut pas être superieure à la date du jour."));
2973     }
2974     } catch (RuntimeException $e) {
2975     $this->correct = false;
2976     $this->addToLog($e.' : '._("Le format de la date de depot n'est pas valide."));
2977     $this->addToMessage(_("Erreur : le format de la date de depot n'est pas correct. Contactez votre administrateur."));
2978     }
2979 softime 7366 }
2980    
2981 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
2982     if ($type_aff_form ===false) {
2983     $this->correct = false;
2984     $this->addToMessage(_("Une erreur s'est produite lors de l'ajout de ce dossier. Veuillez contacter votre administrateur."));
2985 mbroquet 3730 }
2986 softime 6565
2987     switch ($type_aff_form) {
2988     case 'ADS':
2989     case 'CTX RE':
2990 softime 10573 case 'CONSULTATION ENTRANTE':
2991 softime 6565 if (!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
2992     empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
2993     !is_null($this->form)) {
2994     $this->correct = false;
2995     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
2996 mbroquet 3730 }
2997 softime 6565 break;
2998     case 'CTX IN':
2999     if (!isset($this->postedIdDemandeur["contrevenant_principal"]) OR
3000     empty($this->postedIdDemandeur["contrevenant_principal"]) AND
3001     !is_null($this->form)) {
3002     $this->correct = false;
3003     $this->addToMessage(_("La saisie d'un contrevenant principal est obligatoire."));
3004     }
3005     break;
3006 softime 7067 case 'DPC':
3007     if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
3008     empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
3009     !is_null($this->form)) {
3010     $this->correct = false;
3011     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
3012     }
3013     if(!isset($this->postedIdDemandeur["bailleur_principal"]) OR
3014     empty($this->postedIdDemandeur["bailleur_principal"]) AND
3015     !is_null($this->form)) {
3016     $this->correct = false;
3017     $this->addToMessage(_("La saisie d'un bailleur principal est obligatoire."));
3018     }
3019     break;
3020 mbroquet 3730 }
3021 softime 7366
3022     // Récupération du crud par rapport au mode du formulaire
3023     $crud = $this->get_action_crud($this->getParameter("maj"));
3024    
3025     // L'année de la date de dépot ne peut pas être modifiée
3026     if ($crud === 'update' && array_key_exists("date_depot", $val) === true && ($val["date_depot"] !== "" && $val["date_depot"] !== null)) {
3027     //
3028     $new_date = DateTime::createFromFormat('d/m/Y', $val["date_depot"]);
3029     $old_date = DateTime::createFromFormat('Y-m-d', $this->getVal("date_depot"));
3030     if ($new_date->format("Y") != $old_date->format("Y")) {
3031     $this->addToMessage(_("L'année de la date de dépôt n'est pas modifiable."));
3032     $this->correct = false;
3033     }
3034     }
3035 softime 10573
3036     // L'année de la date de dépot en mairie ne peut pas être modifiée
3037 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)) {
3038 softime 10573 //
3039     $new_date = DateTime::createFromFormat('d/m/Y', $val["date_depot_mairie"]);
3040 softime 10869 // Dans le cas où une date de dépôt en mairie est saisie et que l'option pour afficher
3041     // ce champ est désactivée, le champ sera mis en hidden et donc le format de la date
3042     // dans la valeur ne sera plus "d/m/Y" mais "Y-m-d".
3043     $new_date = $new_date !== false ? $new_date : DateTime::createFromFormat('Y-m-d', $val["date_depot_mairie"]);
3044 softime 10573 $old_date = DateTime::createFromFormat('Y-m-d', $this->getVal("date_depot_mairie"));
3045 softime 10869 if ($old_date !== false && $new_date->format("Y") != $old_date->format("Y")) {
3046 softime 10573 $this->addToMessage(_("L'année de la date de dépôt en mairie n'est pas modifiable."));
3047     $this->correct = false;
3048     }
3049     }
3050    
3051     // option dossier_commune activée
3052     if ($this->f->is_option_dossier_commune_enabled()) {
3053    
3054     // La commune doit être définie
3055     if ($crud !== 'delete') {
3056     if (! array_key_exists("commune", $val) || empty($val["commune"])) {
3057     $this->addToMessage(__("La commune doit être définie."));
3058     $this->correct = false;
3059     }
3060     else {
3061     // récupération de la date de demande
3062     $date_demande = 'NOW';
3063     $d_match = array();
3064     if (isset($val["date_demande"])
3065     && preg_match('/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/',
3066     $val["date_demande"], $d_match)) {
3067     $date_demande = $d_match[3].'-'.$d_match[2].'-'.$d_match[1];
3068     }
3069     $date_demande = new DateTime($date_demande);
3070    
3071     // La commune doit exister
3072     $commune = $this->f->findObjectById("commune", $val["commune"]);
3073     if (empty($commune)) {
3074     $this->addToMessage(__("La commune doit exister."));
3075     $this->correct = false;
3076     }
3077     // La commune ne peut pas être modifiée
3078     elseif ($crud === 'update') {
3079     if ($val["commune"] != $this->getVal('commune')) {
3080     $this->addToMessage(__("La commune n'est pas modifiable."));
3081     $this->correct = false;
3082     }
3083     }
3084     // La commune doit être valide
3085     elseif (! $commune->valid($date_demande)) {
3086     $this->addToMessage(__(
3087     "La commune doit être valide ".
3088     "à la date du '".$date_demande->format('d/m/Y')."'."));
3089     $this->correct = false;
3090     }
3091     }
3092     }
3093     }
3094 softime 6565 }
3095 mbroquet 3730
3096    
3097 softime 10573 /**
3098     * Permet de vérifier si les champs requis Plat'AU ont été remplis
3099     *
3100     * @param $dossier l'identifiant du dossier
3101     *
3102     * @return array un tableau contenant une clé is_ok qui indique
3103     * si tous les champs sont saisis ou non et une clé
3104     * required_fields_empty qui contient les champs qui n'ont pas été saisis
3105     * | false si une erreur survient
3106     *
3107     */
3108     function check_platau_required_fields($dossier) {
3109    
3110     // On récupère les champs Plat'AU requis
3111     $fields_list = $this->list_platau_required_fields_dossier;
3112    
3113     // On fait un tableau qui contiendra les tables et un tableau
3114     // qui contient les champs au format 'table.champ'
3115     $tables = array();
3116     $champs = array();
3117    
3118     foreach ($fields_list as $value) {
3119     $expl_tab = explode('.', $value);
3120     if (! in_array($expl_tab[0], $tables)) {
3121     $tables[] = $expl_tab[0];
3122     }
3123     $champs[] = $value;
3124     }
3125    
3126     // Il y aura toujours la table dossier dans la requête
3127     if (in_array('dossier', $tables)) {
3128     $key = array_keys($tables, 'dossier');
3129     unset($tables[$key[0]]);
3130     }
3131    
3132     $from_tables = array();
3133     // On construit le 'FROM' de la requête sql avec les jointures
3134     foreach($tables as $table) {
3135     // Cas particulier pour la table demandeur et architecte
3136     if ($table == "demandeur") {
3137     $from_tables[] = sprintf(
3138     ' LEFT JOIN %1$slien_dossier_demandeur ON lien_dossier_demandeur.dossier = dossier.dossier LEFT JOIN %1$sdemandeur ON lien_dossier_demandeur.demandeur = demandeur.demandeur',
3139     DB_PREFIXE
3140     );
3141     } elseif ($table == "architecte") {
3142     $from_tables[] = sprintf(
3143     ' LEFT JOIN %sarchitecte ON architecte.architecte = donnees_techniques.architecte',
3144     DB_PREFIXE
3145     );
3146     } else {
3147     $from_tables[] = sprintf(" LEFT JOIN %s$table ON dossier.dossier = $table.%s ", DB_PREFIXE, $table == 'donnees_techniques' ? 'dossier_instruction' : 'dossier');
3148     }
3149     }
3150    
3151     // Construction de la requête sql
3152     $sql = sprintf(
3153     '
3154     SELECT
3155     %s,
3156     CASE WHEN demandeur.qualite=\'particulier\'
3157     THEN
3158     TRIM(CONCAT_WS(\' \', demandeur.particulier_nom, demandeur.particulier_prenom))
3159     ELSE
3160     CASE WHEN demandeur.personne_morale_nom IS NOT NULL OR demandeur.personne_morale_prenom IS NOT NULL
3161     THEN
3162     TRIM(CONCAT_WS(\' \', demandeur.personne_morale_raison_sociale, demandeur.personne_morale_denomination, \'%s\', demandeur.personne_morale_nom, demandeur.personne_morale_prenom))
3163     ELSE
3164     TRIM(CONCAT(demandeur.personne_morale_raison_sociale, \' \', demandeur.personne_morale_denomination))
3165     END
3166 softime 10713 END as petitionnaire,
3167     demandeur.demandeur
3168 softime 10573 FROM
3169     %sdossier
3170     %s
3171     WHERE dossier.dossier = \'%s\'
3172     ',
3173     implode(', ', $champs),
3174     __("représenté(e) par"),
3175     DB_PREFIXE,
3176     implode(' ', $from_tables),
3177     $dossier
3178     );
3179    
3180     // On récupère les champs
3181 softime 13137 $result_fields = $this->f->get_all_results_from_db_query(
3182     $sql,
3183     array(
3184     "origin" => __METHOD__,
3185     )
3186     );
3187 softime 10573
3188     // Si il y a une erreur
3189     if ($result_fields['code'] == 'KO'
3190     || $result_fields['result'] == ''
3191     || $result_fields['result'] == null) {
3192    
3193     $this->addToLog(__METHOD__."() query : ".var_export($sql, true)." error: ".var_export($result_fields['message'], true), DEBUG_MODE);
3194     return false;
3195     }
3196    
3197     // On récupère le résultat de la requête
3198     $required_fields = $result_fields['result'];
3199    
3200     $required_fields_with_tab = array();
3201    
3202     // Pour chaque champ on récupère la table
3203     $demandeur_num = 1;
3204     foreach ($required_fields as $required_field) {
3205     foreach ($champs as $champ) {
3206     if ($champ == "demandeur.localite") {
3207 softime 10713 $required_fields_with_tab[$champ.','.$required_field['petitionnaire'].' '.$required_field['demandeur']] = $required_field[explode('.', $champ)[1]];
3208 softime 10573 } else {
3209     $required_fields_with_tab[$champ] = $required_field[explode('.', $champ)[1]];
3210     }
3211     }
3212     }
3213    
3214     // On vérifie si un architecte est lié
3215 softime 13137 $qres = $this->f->get_one_result_from_db_query(
3216     sprintf(
3217     'SELECT
3218     architecte.*
3219     FROM
3220     %1$sdossier
3221     LEFT JOIN %1$sdonnees_techniques
3222     ON dossier.dossier = donnees_techniques.dossier_instruction
3223     LEFT JOIN %1$sarchitecte
3224     ON donnees_techniques.architecte = architecte.architecte
3225     WHERE
3226     dossier.dossier = \'%2$s\'',
3227     DB_PREFIXE,
3228     $this->f->db->escapeSimple($dossier)
3229     ),
3230     array(
3231     "origin" => __METHOD__,
3232     )
3233 softime 10573 );
3234    
3235 softime 13137 if ($qres["code"] !== "OK") {
3236     $this->addToLog(__METHOD__."() plop error: ".var_export($qres["message"], true), DEBUG_MODE);
3237 softime 10573 return false;
3238     }
3239    
3240     // Si il n'est pas lié on enlève le champs architecte
3241 softime 13137 if ($qres["result"] == '' || $qres["result"] == null) {
3242 softime 10573 unset($required_fields_with_tab['architecte.ville']);
3243     }
3244    
3245     $result_tab = array(
3246     'is_ok' => false,
3247     'required_fields_empty' => array()
3248     );
3249    
3250     // Construction du message avec les tables et les champs
3251     foreach ($required_fields_with_tab as $required_field => $value) {
3252     if ($value == null || $value == '') {
3253     $required_fields_splited = explode('.', $required_field);
3254     if (isset(explode(',', $required_fields_splited[1])[1])) {
3255     $required_fields_splited = explode('.', $required_field);
3256 softime 10713 // On enlève l'identifiant du demandeur dans le message
3257     $required_fields_splited[1] = preg_replace('/[0-9]*$/', '', $required_fields_splited[1]);
3258 softime 10573 $result_tab['required_fields_empty'][] = sprintf("%s %s <i>%s</i>",
3259     sprintf(__("Dans le formulaire %s"), "<i>".__($required_fields_splited[0])."</i>"),
3260     __(" le champ : "),
3261     __(explode(',', $required_fields_splited[1])[0]).' pour '.explode(',', $required_fields_splited[1])[1]
3262     );
3263     } else {
3264     $result_tab['required_fields_empty'][] = sprintf("%s %s <i>%s</i>",
3265     sprintf(__("Dans le formulaire %s"), "<i>".__($required_fields_splited[0])."</i>"),
3266     __(" le champ : "),
3267     __($required_fields_splited[1])
3268     );
3269     }
3270     }
3271     }
3272    
3273     if (empty($result_tab['required_fields_empty'])) {
3274     $result_tab['is_ok'] = true;
3275     }
3276    
3277     return $result_tab;
3278    
3279     }
3280    
3281    
3282     /**
3283     * Permet de mettre à jour le state d'une task selon certains paramètre
3284     * Si le paramètre $dossier_autorisation est spécifié cela signifie que
3285     * le dossier a été transmis et qu'on doit modifier les state seulement
3286     * des tache de modification du di et d da
3287     *
3288     * @param dossier l'identifiant du dossier
3289     * @param state_prev le state de la tâche
3290     * @param state_wanted le state que doit avoir la tâche
3291     * @param dossier_autorisation l'identifiant du dossier d'autorisation
3292     *
3293     * @return void
3294     *
3295     */
3296 softime 13528 function update_task_state($dossier, $state_prev, $state_wanted, $dossier_autorisation=null) {
3297 softime 10573
3298     $already_transmitted_updated = '';
3299     $type_task_to_update = '';
3300 softime 10808
3301     $already_transmitted_updated = sprintf('OR task.dossier=\'%s\'', $dossier_autorisation !== null ? $dossier_autorisation : $this->valF['dossier_autorisation']);
3302 softime 10573
3303     $sql = sprintf(
3304 softime 10808 'SELECT task FROM %stask WHERE task.state = \'%s\' AND (task.dossier=\'%s\' %s) %s %s',
3305 softime 10573 DB_PREFIXE,
3306     $state_prev,
3307     $dossier,
3308     $already_transmitted_updated,
3309 softime 10808 $type_task_to_update,
3310     " AND type NOT IN ('notification_recepisse', 'notification_instruction', 'notification_decision') "
3311 softime 10573 );
3312 softime 13137 $tasks_id = $this->f->get_all_results_from_db_query(
3313     $sql,
3314     array(
3315     "origin" => __METHOD__,
3316     )
3317     );
3318 softime 10573 $params = array('val' => array('state' => $state_wanted));
3319     foreach ($tasks_id['result'] as $task_id) {
3320     $inst_task = $this->f->get_inst__om_dbform(array(
3321     "obj" => "task",
3322     "idx" => intval($task_id['task'])
3323     ));
3324     $inst_task->update_task($params);
3325     }
3326     }
3327    
3328    
3329 softime 6565 function setType(&$form,$maj) {
3330     // Par défaut le type des champs est géré nativement par le framework
3331     parent::setType($form,$maj);
3332    
3333     // Récupération du contexte : groupe, CRUD et paramètres
3334     $groupe = $this->get_type_affichage_formulaire();
3335     $crud = $this->get_action_crud($maj);
3336     $parameters = $this->f->getCollectivite($this->getVal('om_collectivite'));
3337    
3338 mbroquet 3730 //
3339 softime 6565 // Gestion du groupe
3340 mbroquet 3730 //
3341    
3342 softime 10573 // CONSULTATION ENTRANTE
3343     $ce_fields = array(
3344     'autorisation_contestee' => 'hidden',
3345     'cle_acces_citoyen' => 'static',
3346     'contrevenants' => 'hidden',
3347     'date_ait' => 'hidden',
3348     'date_audience' => 'hidden',
3349     'date_affichage' => 'datestatic',
3350     'date_cloture_instruction' => 'hidden',
3351     'date_contradictoire' => 'hidden',
3352     'date_derniere_visite' => 'hidden',
3353     'date_premiere_visite' => 'hidden',
3354     'date_transmission_parquet' => 'hidden',
3355     'dossier_autorisation_type_detaille' => 'hidden',
3356     'dossier_instruction_type' => 'selecthiddenstatic',
3357     'dossier_petitionnaires' => 'hidden',
3358     'dt_ctx_infraction' => 'hidden',
3359     'dt_ctx_regularisable' => 'hidden',
3360     'dt_ctx_synthese_anr' => 'hidden',
3361     'dt_ctx_synthese_nti' => 'hidden',
3362     'ctx_reference_dsj' => 'hidden',
3363     'enjeu_ctx' => 'static',
3364 softime 13528 'instructeur_2' => 'selecthiddenstatic',
3365 softime 10573 'requerants' => 'hidden',
3366     'bailleur' => 'hidden',
3367     'ctx_reference_sagace' => 'hidden',
3368 softime 10808 'pec_metier' => 'selecthiddenstatic',
3369 softime 10573 "consultation_entrante" => 'hidden',
3370     "delai_reponse" => 'hidden',
3371     "type_delai" => 'hidden',
3372     "objet_consultation" => 'hidden',
3373     "date_production_notification" => 'hidden',
3374     "date_premiere_consultation" => 'hidden',
3375     "date_consultation" => 'hidden',
3376     "date_emission" => 'hidden',
3377     "service_consultant_id" => 'hidden',
3378     "service_consultant_libelle" => 'hidden',
3379     "service_consultant_insee" => 'hidden',
3380     "service_consultant_mail" => 'hidden',
3381     "service_consultant_type" => 'hidden',
3382     "service_consultant__siren" => 'hidden',
3383     "etat_consultation" => 'hidden',
3384     "type_consultation" => 'hidden',
3385     "texte_fondement_reglementaire" => 'hidden',
3386     "texte_objet_consultation" => 'hidden',
3387     "dossier_consultation" => 'hidden',
3388     );
3389 softime 6565 // INFRACTION
3390     $inf_fields = array(
3391     'a_qualifier' => 'hidden',
3392     'autorisation_contestee' => 'hidden',
3393     'autorite_competente' => 'hidden',
3394     'cle_acces_citoyen' => 'hidden',
3395     'contrevenants' => 'static',
3396     'date_ait' => 'hiddenstaticdate',
3397     'date_audience' => 'hiddenstaticdate',
3398     'date_cloture_instruction' => 'hidden',
3399     'date_complet' => 'hidden',
3400     'date_contradictoire' => 'hiddenstaticdate',
3401     'date_decision' => 'hiddenstaticdate',
3402     'date_depot' => 'hiddenstaticdate',
3403 softime 10573 'date_depot_mairie' => 'hiddenstaticdate',
3404 softime 6565 'date_dernier_depot' => 'hidden',
3405     'date_derniere_visite' => 'hiddenstaticdate',
3406     'date_limite' => 'hidden',
3407     'date_limite_incompletude' => 'hidden',
3408     'date_premiere_visite' => 'hiddenstaticdate',
3409     'date_transmission_parquet' => 'hiddenstaticdate',
3410     'date_validite' => 'hidden',
3411     'delai' => 'hidden',
3412     'description_projet' => 'hidden',
3413     'dossier_autorisation_type_detaille' => 'hidden',
3414     'dossier_instruction_type' => 'hidden',
3415     'dossier_petitionnaire' => 'hidden',
3416     'dossier_petitionnaires' => 'hidden',
3417     'dt_ctx_infraction' => 'checkboxhiddenstatic',
3418     'dt_ctx_regularisable' => 'checkboxhiddenstatic',
3419     'dt_ctx_synthese_anr' => 'static',
3420     'dt_ctx_synthese_nti' => 'static',
3421 softime 8477 'ctx_reference_dsj' => 'static',
3422 softime 6565 'enjeu_ctx' => 'hidden',
3423     'enjeu_erp' => 'hidden',
3424     'enjeu_urba' => 'hidden',
3425     'erp' => 'hidden',
3426     'evenement_suivant_tacite' => 'hidden',
3427     'evenement_suivant_tacite_incompletude' => 'hidden',
3428     'numero_versement_archive' => 'hidden',
3429     'requerants' => 'hidden',
3430     'tax_mtn_part_commu' => 'hidden',
3431     'tax_mtn_part_depart' => 'hidden',
3432     'tax_mtn_part_reg' => 'hidden',
3433     'tax_mtn_total' => 'hidden',
3434 softime 6929 'tax_mtn_rap' => 'hidden',
3435 softime 6565 'tax_secteur' => 'hidden',
3436 softime 6929 'tax_mtn_part_commu_sans_exo' => 'hidden',
3437     'tax_mtn_part_depart_sans_exo' => 'hidden',
3438     'tax_mtn_part_reg_sans_exo' => 'hidden',
3439     'tax_mtn_total_sans_exo' => 'hidden',
3440     'tax_mtn_rap_sans_exo' => 'hidden',
3441 softime 7067 'bailleur' => 'hidden',
3442 softime 8477 'ctx_reference_sagace' => 'static',
3443 softime 10573 'pec_metier' => 'hidden',
3444     "consultation_entrante" => 'hidden',
3445     "delai_reponse" => 'hidden',
3446     "type_delai" => 'hidden',
3447     "objet_consultation" => 'hidden',
3448     "date_production_notification" => 'hidden',
3449     "date_premiere_consultation" => 'hidden',
3450     "date_consultation" => 'hidden',
3451     "date_emission" => 'hidden',
3452     "service_consultant_id" => 'hidden',
3453     "service_consultant_libelle" => 'hidden',
3454     "service_consultant_insee" => 'hidden',
3455     "service_consultant_mail" => 'hidden',
3456     "service_consultant_type" => 'hidden',
3457     "service_consultant__siren" => 'hidden',
3458     "etat_consultation" => 'hidden',
3459     "type_consultation" => 'hidden',
3460     "texte_fondement_reglementaire" => 'hidden',
3461     "texte_objet_consultation" => 'hidden',
3462     "dossier_consultation" => 'hidden',
3463 softime 6565 );
3464     // RECOURS
3465     $re_fields = array(
3466     'a_qualifier' => 'hidden',
3467     'autorite_competente' => 'hidden',
3468     'cle_acces_citoyen' => 'hidden',
3469     'contrevenants' => 'hidden',
3470     'date_ait' => 'hidden',
3471     'date_audience' => 'hidden',
3472     'date_cloture_instruction' => 'hiddenstaticdate',
3473     'date_complet' => 'hidden',
3474     'date_contradictoire' => 'hidden',
3475     'date_decision' => 'hiddenstaticdate',
3476     'date_depot' => 'hiddenstaticdate',
3477 softime 10573 'date_depot_mairie' => 'hiddenstaticdate',
3478 softime 6565 'date_dernier_depot' => 'hidden',
3479     'date_derniere_visite' => 'hidden',
3480     'date_limite' => 'hiddenstaticdate',
3481     'date_limite_incompletude' => 'hidden',
3482     'date_premiere_visite' => 'hidden',
3483     'date_transmission_parquet' => 'hidden',
3484     'date_validite' => 'hidden',
3485     'delai' => 'hidden',
3486     'description_projet' => 'hidden',
3487     'dossier_autorisation_type_detaille' => 'static',
3488     'dossier_instruction_type' => 'hidden',
3489     'dossier_petitionnaire' => 'hidden',
3490     'dossier_petitionnaires' => 'static',
3491     'dt_ctx_infraction' => 'hidden',
3492     'dt_ctx_regularisable' => 'hidden',
3493     'dt_ctx_synthese_anr' => 'hidden',
3494     'dt_ctx_synthese_nti' => 'hidden',
3495     'enjeu_ctx' => 'hidden',
3496     'enjeu_erp' => 'hidden',
3497     'enjeu_urba' => 'hidden',
3498     'erp' => 'hidden',
3499     'evenement_suivant_tacite' =>'selecthiddenstatic',
3500     'evenement_suivant_tacite_incompletude' => 'hidden',
3501     'instructeur_2' => 'hidden',
3502     'numero_versement_archive' => 'hidden',
3503     'requerants' => 'static',
3504     'tax_mtn_part_commu' => 'hidden',
3505     'tax_mtn_part_depart' => 'hidden',
3506     'tax_mtn_part_reg' => 'hidden',
3507     'tax_mtn_total' => 'hidden',
3508 softime 6929 'tax_mtn_rap' => 'hidden',
3509 softime 6565 'tax_secteur' => 'hidden',
3510 softime 6929 'tax_mtn_part_commu_sans_exo' => 'hidden',
3511     'tax_mtn_part_depart_sans_exo' => 'hidden',
3512     'tax_mtn_part_reg_sans_exo' => 'hidden',
3513     'tax_mtn_total_sans_exo' => 'hidden',
3514     'tax_mtn_rap_sans_exo' => 'hidden',
3515 softime 7067 'bailleur' => 'hidden',
3516 softime 8477 'ctx_reference_dsj' => 'static',
3517     'ctx_reference_sagace' => 'static',
3518 softime 10573 'pec_metier' => 'hidden',
3519     "consultation_entrante" => 'hidden',
3520     "delai_reponse" => 'hidden',
3521     "type_delai" => 'hidden',
3522     "objet_consultation" => 'hidden',
3523     "date_production_notification" => 'hidden',
3524     "date_premiere_consultation" => 'hidden',
3525     "date_consultation" => 'hidden',
3526     "date_emission" => 'hidden',
3527     "service_consultant_id" => 'hidden',
3528     "service_consultant_libelle" => 'hidden',
3529     "service_consultant_insee" => 'hidden',
3530     "service_consultant_mail" => 'hidden',
3531     "service_consultant_type" => 'hidden',
3532     "service_consultant__siren" => 'hidden',
3533     "etat_consultation" => 'hidden',
3534     "type_consultation" => 'hidden',
3535     "texte_fondement_reglementaire" => 'hidden',
3536     "texte_objet_consultation" => 'hidden',
3537     "dossier_consultation" => 'hidden',
3538 softime 6565 );
3539     // ADS
3540     $ads_fields = array(
3541     'autorisation_contestee' => 'hidden',
3542     'cle_acces_citoyen' => 'static',
3543     'contrevenants' => 'hidden',
3544     'date_ait' => 'hidden',
3545     'date_audience' => 'hidden',
3546 softime 8989 'date_affichage' => 'datestatic',
3547 softime 6565 'date_cloture_instruction' => 'hidden',
3548     'date_contradictoire' => 'hidden',
3549     'date_derniere_visite' => 'hidden',
3550     'date_premiere_visite' => 'hidden',
3551     'date_transmission_parquet' => 'hidden',
3552     'dossier_autorisation_type_detaille' => 'hidden',
3553     'dossier_instruction_type' => 'selecthiddenstatic',
3554     'dossier_petitionnaires' => 'hidden',
3555     'dt_ctx_infraction' => 'hidden',
3556     'dt_ctx_regularisable' => 'hidden',
3557     'dt_ctx_synthese_anr' => 'hidden',
3558     'dt_ctx_synthese_nti' => 'hidden',
3559 softime 8477 'ctx_reference_dsj' => 'hidden',
3560 softime 6565 'enjeu_ctx' => 'static',
3561 softime 13137 'instructeur_2' => 'selecthiddenstatic',
3562 softime 6565 'requerants' => 'hidden',
3563 softime 7067 'bailleur' => 'hidden',
3564 softime 8477 'ctx_reference_sagace' => 'hidden',
3565 softime 10573 'pec_metier' => 'selectstatic',
3566     "consultation_entrante" => 'hidden',
3567     "delai_reponse" => 'hidden',
3568     "type_delai" => 'hidden',
3569     "objet_consultation" => 'hidden',
3570     "date_production_notification" => 'hidden',
3571     "date_premiere_consultation" => 'hidden',
3572     "date_consultation" => 'hidden',
3573     "date_emission" => 'hidden',
3574     "service_consultant_id" => 'hidden',
3575     "service_consultant_libelle" => 'hidden',
3576     "service_consultant_insee" => 'hidden',
3577     "service_consultant_mail" => 'hidden',
3578     "service_consultant_type" => 'hidden',
3579     "service_consultant__siren" => 'hidden',
3580     "etat_consultation" => 'hidden',
3581     "type_consultation" => 'hidden',
3582     "texte_fondement_reglementaire" => 'hidden',
3583     "texte_objet_consultation" => 'hidden',
3584     "dossier_consultation" => 'hidden',
3585 softime 6565 );
3586 softime 7067 // DPC
3587     $dpc_fields = array(
3588     'autorisation_contestee' => 'hidden',
3589     'cle_acces_citoyen' => 'static',
3590     'contrevenants' => 'hidden',
3591     'date_ait' => 'hidden',
3592     'date_audience' => 'hidden',
3593     'date_cloture_instruction' => 'hidden',
3594     'date_contradictoire' => 'hidden',
3595     'date_derniere_visite' => 'hidden',
3596     'date_premiere_visite' => 'hidden',
3597     'date_transmission_parquet' => 'hidden',
3598     'dossier_autorisation_type_detaille' => 'hidden',
3599     'dossier_instruction_type' => 'selecthiddenstatic',
3600     'dossier_petitionnaires' => 'hidden',
3601     'dt_ctx_infraction' => 'hidden',
3602     'dt_ctx_regularisable' => 'hidden',
3603     'dt_ctx_synthese_anr' => 'hidden',
3604     'dt_ctx_synthese_nti' => 'hidden',
3605 softime 8477 'ctx_reference_dsj' => 'hidden',
3606 softime 7067 'enjeu_ctx' => 'static',
3607 softime 13137 'instructeur_2' => 'selecthiddenstatic',
3608 softime 7067 'requerants' => 'hidden',
3609     'bailleur' => 'static',
3610 softime 8477 'ctx_reference_sagace' => 'hidden',
3611 softime 10573 'pec_metier' => 'hidden',
3612     "consultation_entrante" => 'hidden',
3613     "delai_reponse" => 'hidden',
3614     "type_delai" => 'hidden',
3615     "objet_consultation" => 'hidden',
3616     "date_production_notification" => 'hidden',
3617     "date_premiere_consultation" => 'hidden',
3618     "date_consultation" => 'hidden',
3619     "date_emission" => 'hidden',
3620     "service_consultant_id" => 'hidden',
3621     "service_consultant_libelle" => 'hidden',
3622     "service_consultant_insee" => 'hidden',
3623     "service_consultant_mail" => 'hidden',
3624     "service_consultant_type" => 'hidden',
3625     "service_consultant__siren" => 'hidden',
3626     "etat_consultation" => 'hidden',
3627     "type_consultation" => 'hidden',
3628     "texte_fondement_reglementaire" => 'hidden',
3629     "texte_objet_consultation" => 'hidden',
3630     "dossier_consultation" => 'hidden',
3631 softime 7067 );
3632 softime 6565 // COMMUN
3633     $all_fields = array(
3634     'accord_tacite' => 'hidden',
3635     'annee' => 'hidden',
3636     'autres_demandeurs' => 'hidden',
3637     'date_achevement' => 'hidden',
3638     'date_chantier' => 'hidden',
3639     'date_conformite' => 'hidden',
3640     'date_notification_delai' => 'hidden',
3641     'date_rejet' => 'hidden',
3642     'date_retour_contradictoire' => 'hidden',
3643     'delai_incompletude' => 'hidden',
3644     'description' => 'hidden',
3645     'dossier' => 'hidden',
3646     'dossier_arrondissement' => 'hidden',
3647     'dossier_autorisation' => 'hidden',
3648     'dossier_autorisation_libelle' => 'hidden',
3649     'duree_validite' => 'hidden',
3650     'etat_pendant_incompletude' => 'hidden',
3651     'geom' => 'hiddenstatic',
3652     'geom1' => 'hidden',
3653     'incomplet_notifie' => 'hidden',
3654     'incompletude' => 'hidden',
3655     'interface_referentiel_erp' => 'hidden',
3656     'log_instructions' => 'nodisplay',
3657     'om_collectivite' => 'hidden',
3658     'quartier' => 'hidden',
3659     'version' => 'hidden',
3660 softime 7996 'date_modification' => 'hidden',
3661     'hash_sitadel' => 'hidden',
3662 softime 8329 'depot_electronique' => 'hidden',
3663 softime 9245 'version_clos' => 'hidden',
3664     'initial_dt' => 'hidden',
3665 softime 10573 'adresse_normalisee' => 'hidden',
3666     'adresse_normalisee_json' => 'hidden',
3667     'streetview' => 'hidden',
3668     'numerotation_type' => 'hidden',
3669     'numerotation_dep' => 'hidden',
3670     'numerotation_com' => 'hidden',
3671     'numerotation_division' => 'hidden',
3672     'numerotation_suffixe' => 'hidden',
3673     'numerotation_entite' => 'hidden',
3674     'numerotation_num' => 'hidden',
3675     'numerotation_num_suffixe' => 'hidden',
3676     'numerotation_num_entite' => 'hidden',
3677 softime 11585 'lien_iiue' => 'hidden',
3678 softime 12847 'dossier_parent' => 'hidden'
3679 softime 6565 );
3680     if (isset($parameters['option_afficher_division'])
3681     && $parameters['option_afficher_division'] !== 'true') {
3682     $all_fields['division'] = 'hidden';
3683 mbroquet 3730 }
3684 softime 6565 if (isset($parameters['option_sig'])
3685     && $parameters['option_sig'] !== 'sig_interne'
3686     && $parameters['option_sig'] !== 'sig_externe'){
3687     $all_fields['geom'] = 'hidden';
3688 mbroquet 3730 }
3689    
3690 softime 10573 if ($this->f->is_option_date_depot_mairie_enabled() === true) {
3691 softime 10869 $all_fields['date_depot_mairie'] = 'hiddenstaticdate';
3692 softime 10573 } else {
3693     $all_fields['date_depot_mairie'] = 'hidden';
3694     }
3695    
3696 softime 11585 // Affichage des identifiants techniques Plat'AU
3697     if ($crud === 'read'
3698     && $this->f->is_type_dossier_platau($this->getVal('dossier_autorisation')) === true
3699     && $this->f->is_option_mode_service_consulte_enabled() !== true
3700     || ($this->f->is_option_mode_service_consulte_enabled() === true
3701 softime 13137 && ($this->get_source_depot_from_demande() === PLATAU
3702     || $this->get_source_depot_from_demande() === PORTAL))) {
3703 softime 11585 //
3704     $all_fields['lien_iiue'] = 'jsontotab';
3705     }
3706    
3707 softime 6565 //
3708     // Gestion du contexte
3709     //
3710 mbroquet 3730
3711 softime 6565 // AJOUTER, MODIFIER
3712     if ($crud === 'create' OR $crud === 'update') {
3713 mbroquet 3730
3714 softime 7366 $all_fields['avis_decision'] = 'selecthiddenstatic';
3715 softime 6565 $all_fields['etat'] = 'hiddenstatic';
3716     $all_fields['terrain'] = 'hiddenstatic';
3717     //
3718     $ads_fields['a_qualifier'] = 'checkbox';
3719     $ads_fields['accord_tacite'] = 'hiddenstatic';
3720     $ads_fields['autorite_competente'] = 'selecthiddenstatic';
3721     $ads_fields['date_achevement'] = 'hiddenstaticdate';
3722     $ads_fields['date_chantier'] = 'hiddenstaticdate';
3723     $ads_fields['date_conformite'] = 'hiddenstaticdate';
3724     $ads_fields['date_decision'] = 'hiddenstaticdate';
3725 softime 8989 $ads_fields['date_affichage'] = 'hiddenstaticdate';
3726 softime 6565 $ads_fields['date_depot'] = 'hiddenstaticdate';
3727 softime 10573 //
3728     $ce_fields['a_qualifier'] = 'checkbox';
3729     $ce_fields['accord_tacite'] = 'hiddenstatic';
3730     $ce_fields['autorite_competente'] = 'selecthiddenstatic';
3731     $ce_fields['date_achevement'] = 'hiddenstaticdate';
3732     $ce_fields['date_chantier'] = 'hiddenstaticdate';
3733     $ce_fields['date_conformite'] = 'hiddenstaticdate';
3734     $ce_fields['date_decision'] = 'hiddenstaticdate';
3735     $ce_fields['date_affichage'] = 'hiddenstaticdate';
3736     $ce_fields['date_depot'] = 'hiddenstaticdate';
3737     if ($this->f->is_option_date_depot_mairie_enabled() === true) {
3738     $ads_fields['date_depot_mairie'] = 'date';
3739     $ce_fields['date_depot_mairie'] = 'date';
3740     } else {
3741     $ads_fields['date_depot_mairie'] = 'hidden';
3742     $ce_fields['date_depot_mairie'] = 'hidden';
3743     }
3744 softime 6565 $ads_fields['date_dernier_depot'] = 'hiddenstaticdate';
3745     $ads_fields['date_notification_delai'] = 'hiddenstaticdate';
3746     $ads_fields['date_rejet'] = 'hiddenstaticdate';
3747     $ads_fields['date_validite'] = 'hiddenstaticdate';
3748     $ads_fields['delai'] = 'hiddenstatic';
3749     $ads_fields['description_projet'] = 'hiddenstatic';
3750 softime 7366 $ads_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
3751 softime 6565 $ads_fields['shon_calcul'] = 'hiddenstatic';
3752     $ads_fields['tax_mtn_part_commu'] = 'hidden';
3753     $ads_fields['tax_mtn_part_depart'] = 'hidden';
3754     $ads_fields['tax_mtn_part_reg'] = 'hidden';
3755     $ads_fields['tax_mtn_total'] = 'hidden';
3756 softime 6929 $ads_fields['tax_mtn_rap'] = 'hidden';
3757     $ads_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
3758     $ads_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
3759     $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3760     $ads_fields['tax_mtn_total_sans_exo'] = 'hidden';
3761     $ads_fields['tax_mtn_rap_sans_exo'] = 'hidden';
3762 softime 6565 $ads_fields['terrain_surface_calcul'] = 'hiddenstatic';
3763 softime 7067 //
3764 softime 10573 $ce_fields['date_dernier_depot'] = 'hiddenstaticdate';
3765     $ce_fields['date_notification_delai'] = 'hiddenstaticdate';
3766     $ce_fields['date_rejet'] = 'hiddenstaticdate';
3767     $ce_fields['date_validite'] = 'hiddenstaticdate';
3768     $ce_fields['delai'] = 'hiddenstatic';
3769     $ce_fields['description_projet'] = 'hiddenstatic';
3770     $ce_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
3771     $ce_fields['shon_calcul'] = 'hiddenstatic';
3772     $ce_fields['tax_mtn_part_commu'] = 'hidden';
3773     $ce_fields['tax_mtn_part_depart'] = 'hidden';
3774     $ce_fields['tax_mtn_part_reg'] = 'hidden';
3775     $ce_fields['tax_mtn_total'] = 'hidden';
3776     $ce_fields['tax_mtn_rap'] = 'hidden';
3777     $ce_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
3778     $ce_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
3779     $ce_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3780     $ce_fields['tax_mtn_total_sans_exo'] = 'hidden';
3781     $ce_fields['tax_mtn_rap_sans_exo'] = 'hidden';
3782     $ce_fields['terrain_surface_calcul'] = 'hiddenstatic';
3783     //
3784 softime 7067 $dpc_fields['a_qualifier'] = 'checkbox';
3785     $dpc_fields['accord_tacite'] = 'hiddenstatic';
3786     $dpc_fields['autorite_competente'] = 'selecthiddenstatic';
3787     $dpc_fields['date_achevement'] = 'hiddenstaticdate';
3788     $dpc_fields['date_chantier'] = 'hiddenstaticdate';
3789     $dpc_fields['date_conformite'] = 'hiddenstaticdate';
3790     $dpc_fields['date_decision'] = 'hiddenstaticdate';
3791     $dpc_fields['date_depot'] = 'hiddenstaticdate';
3792 softime 10573 $dpc_fields['date_depot_mairie'] = 'hiddenstaticdate';
3793 softime 7067 $dpc_fields['date_dernier_depot'] = 'hiddenstaticdate';
3794     $dpc_fields['date_notification_delai'] = 'hiddenstaticdate';
3795     $dpc_fields['date_rejet'] = 'hiddenstaticdate';
3796     $dpc_fields['date_validite'] = 'hiddenstaticdate';
3797     $dpc_fields['delai'] = 'hiddenstatic';
3798     $dpc_fields['description_projet'] = 'hiddenstatic';
3799 softime 7366 $dpc_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
3800 softime 7067 $dpc_fields['shon_calcul'] = 'hiddenstatic';
3801     $dpc_fields['tax_mtn_part_commu'] = 'hidden';
3802     $dpc_fields['tax_mtn_part_depart'] = 'hidden';
3803     $dpc_fields['tax_mtn_part_reg'] = 'hidden';
3804     $dpc_fields['tax_mtn_total'] = 'hidden';
3805     $dpc_fields['tax_mtn_rap'] = 'hidden';
3806     $dpc_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
3807     $dpc_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
3808     $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3809     $dpc_fields['tax_mtn_total_sans_exo'] = 'hidden';
3810     $dpc_fields['tax_mtn_rap_sans_exo'] = 'hidden';
3811     $dpc_fields['terrain_surface_calcul'] = 'hiddenstatic';
3812 softime 7366 //
3813     $re_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
3814 softime 10573 $re_fields['dossier_petitionnaires'] = 'static';
3815 softime 7366 $re_fields['requerants'] = 'hiddenstatic';
3816     $inf_fields['contrevenants'] = 'hiddenstatic';
3817     $inf_fields['dt_ctx_synthese_anr'] = 'hiddenstatic';
3818     $inf_fields['dt_ctx_synthese_nti'] = 'hiddenstatic';
3819 softime 10573 //
3820 softime 10808 // Vérifie que le dossier a été déposé depuis Plat'AU ou le portail citoyen
3821 softime 13137 if ($this->get_source_depot_from_demande() === PLATAU
3822     || $this->get_source_depot_from_demande() === PORTAL) {
3823 softime 10808 //
3824 softime 10573 $ce_fields["consultation_entrante"] = 'hidden';
3825     $ce_fields["delai_reponse"] = 'static';
3826     $ce_fields["type_delai"] = 'static';
3827     $ce_fields["objet_consultation"] = 'static';
3828     $ce_fields["date_production_notification"] = 'datestatic';
3829     $ce_fields["date_premiere_consultation"] = 'datestatic';
3830     $ce_fields["date_consultation"] = 'datestatic';
3831     $ce_fields["date_emission"] = 'datestatic';
3832     $ce_fields["service_consultant_id"] = 'static';
3833     $ce_fields["service_consultant_libelle"] = 'static';
3834     $ce_fields["service_consultant_insee"] = 'static';
3835     $ce_fields["service_consultant_mail"] = 'static';
3836     $ce_fields["service_consultant_type"] = 'static';
3837     $ce_fields["service_consultant__siren"] = 'static';
3838     $ce_fields["etat_consultation"] = 'static';
3839     $ce_fields["type_consultation"] = 'static';
3840     $ce_fields["texte_fondement_reglementaire"] = 'static';
3841     $ce_fields["texte_objet_consultation"] = 'static';
3842     $ce_fields["dossier_consultation"] = 'hidden';
3843     }
3844 softime 6565 // Si l'état du dossier est incomplet
3845     if ($this->is_incomplet_notifie()) {
3846     // On cache les dates de complétude et de limite d'instruction
3847     $ads_fields['date_complet'] = 'hidden';
3848     $ads_fields['date_limite'] = 'hidden';
3849     $ads_fields['evenement_suivant_tacite_incompletude'] ='selecthiddenstatic';
3850     $ads_fields['evenement_suivant_tacite'] ='hidden';
3851     $ads_fields['date_limite_incompletude'] = 'hiddenstaticdate';
3852 softime 7067 //
3853     $dpc_fields['date_complet'] = 'hidden';
3854     $dpc_fields['date_limite'] = 'hidden';
3855     $dpc_fields['evenement_suivant_tacite_incompletude'] ='selecthiddenstatic';
3856     $dpc_fields['evenement_suivant_tacite'] ='hidden';
3857     $dpc_fields['date_limite_incompletude'] = 'hiddenstaticdate';
3858 softime 10573 //
3859     $ce_fields['date_complet'] = 'hidden';
3860     $ce_fields['date_limite'] = 'hidden';
3861     $ce_fields['evenement_suivant_tacite_incompletude'] ='selecthiddenstatic';
3862     $ce_fields['evenement_suivant_tacite'] ='hidden';
3863     $ce_fields['date_limite_incompletude'] = 'hiddenstaticdate';
3864 softime 6565 } else {
3865     // Sinon on cache la date de limite d'incomplétude
3866     $ads_fields['date_limite_incompletude'] = 'hidden';
3867     $ads_fields['evenement_suivant_tacite_incompletude'] ='hidden';
3868     $ads_fields['evenement_suivant_tacite'] ='selecthiddenstatic';
3869     $ads_fields['date_complet'] = 'hiddenstaticdate';
3870     $ads_fields['date_limite'] = 'hiddenstaticdate';
3871 softime 7067 //
3872     $dpc_fields['date_limite_incompletude'] = 'hidden';
3873     $dpc_fields['evenement_suivant_tacite_incompletude'] ='hidden';
3874     $dpc_fields['evenement_suivant_tacite'] ='selecthiddenstatic';
3875     $dpc_fields['date_complet'] = 'hiddenstaticdate';
3876     $dpc_fields['date_limite'] = 'hiddenstaticdate';
3877 softime 10573 //
3878     $ce_fields['date_limite_incompletude'] = 'hidden';
3879     $ce_fields['evenement_suivant_tacite_incompletude'] ='hidden';
3880     $ce_fields['evenement_suivant_tacite'] ='selecthiddenstatic';
3881     $ce_fields['date_complet'] = 'hiddenstaticdate';
3882     $ce_fields['date_limite'] = 'hiddenstaticdate';
3883 softime 6565 }
3884    
3885     // MODIFIER
3886     if ($crud ==='update') {
3887     $all_fields['dossier_libelle'] = 'hiddenstatic';
3888 softime 10573 $ads_fields['dossier_petitionnaire'] = 'static';
3889     $dpc_fields['dossier_petitionnaire'] = 'static';
3890     $ce_fields['dossier_petitionnaire'] = 'static';
3891 softime 13528 $inf_fields['numero_versement_archive'] = 'text';
3892 softime 13137
3893 softime 6565 //
3894     if ($this->f->isAccredited("dossier_modifier_instructeur")) {
3895     $all_fields['instructeur'] = 'select';
3896     $inf_fields['instructeur_2'] = 'select';
3897 softime 13137 $ads_fields['instructeur_2'] = 'select';
3898     $dpc_fields['instructeur_2'] = 'select';
3899 softime 13528 $ce_fields['instructeur_2'] = 'select';
3900 softime 6565 } else {
3901     $all_fields['instructeur'] = 'selecthiddenstatic';
3902     $inf_fields['instructeur_2'] = 'selecthiddenstatic';
3903 softime 13137 $ads_fields['instructeur_2'] = 'selecthiddenstatic';
3904     $dpc_fields['instructeur_2'] = 'selecthiddenstatic';
3905 softime 13528 $ce_fields['instructeur_2'] = 'selecthiddenstatic';
3906 softime 6565 }
3907     //
3908     if (isset($parameters['option_afficher_division'])
3909     && $parameters['option_afficher_division'] === 'true') {
3910     $all_fields['division'] = 'selecthiddenstatic';
3911     if ($this->f->isAccredited("dossier_modifier_division")) {
3912     $all_fields['division'] = 'select';
3913     }
3914     }
3915     // Si l'utilisateur ne peut pas qualifier un DI (guichet unique & guichet et suivi)
3916     if (!$this->f->isAccredited(array("dossier_instruction","dossier_instruction_qualifier"), "OR")) {
3917     // Il ne peut pas modifier les champs suivants
3918     $ads_fields['numero_versement_archive'] = 'hiddenstatic';
3919     $ads_fields['enjeu_urba'] = 'checkboxhiddenstatic';
3920     $ads_fields['enjeu_erp'] = 'checkboxhiddenstatic';
3921     $ads_fields['erp'] = 'checkboxhiddenstatic';
3922     $ads_fields['a_qualifier'] = 'checkboxhiddenstatic';
3923 softime 7067 //
3924     $dpc_fields['numero_versement_archive'] = 'hiddenstatic';
3925     $dpc_fields['enjeu_urba'] = 'checkboxhiddenstatic';
3926     $dpc_fields['enjeu_erp'] = 'checkboxhiddenstatic';
3927     $dpc_fields['erp'] = 'checkboxhiddenstatic';
3928     $dpc_fields['a_qualifier'] = 'checkboxhiddenstatic';
3929 softime 10573 //
3930     $ce_fields['numero_versement_archive'] = 'hiddenstatic';
3931     $ce_fields['enjeu_urba'] = 'checkboxhiddenstatic';
3932     $ce_fields['enjeu_erp'] = 'checkboxhiddenstatic';
3933     $ce_fields['erp'] = 'checkboxhiddenstatic';
3934     $ce_fields['a_qualifier'] = 'checkboxhiddenstatic';
3935 softime 6565 }
3936     // Le profil Qualificateur peut modifier seulement les champs
3937     // autorite_competente, a_qualifier et erp
3938     if ($this->f->isUserQualificateur()) {
3939     $ads_fields['numero_versement_archive'] = 'static';
3940     $ads_fields['enjeu_urba'] = 'checkboxstatic';
3941     $ads_fields['enjeu_erp'] = 'checkboxstatic';
3942 softime 7067 //
3943     $dpc_fields['numero_versement_archive'] = 'static';
3944     $dpc_fields['enjeu_urba'] = 'checkboxstatic';
3945     $dpc_fields['enjeu_erp'] = 'checkboxstatic';
3946 softime 10573 //
3947     $ce_fields['numero_versement_archive'] = 'static';
3948     $ce_fields['enjeu_urba'] = 'checkboxstatic';
3949     $ce_fields['enjeu_erp'] = 'checkboxstatic';
3950 softime 6565 }
3951 softime 7366 // Le dossier ne doit pas être instruit
3952     if ($this->has_only_recepisse() === true
3953     && $this->getStatut() !== 'cloture') {
3954     //
3955     $all_fields['date_depot'] = 'date';
3956 softime 10573 if ($this->f->is_option_date_depot_mairie_enabled() === true) {
3957     $all_fields['date_depot_mairie'] = 'date';
3958     } else {
3959     $all_fields['date_depot_mairie'] = 'hidden';
3960     }
3961 softime 7366 }
3962 softime 8593 // Gestion de la case à cocher ERP en cas d'interfaçage avec le
3963     // référentiel ERP
3964     if ($this->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true) {
3965     // Par défaut la case à cocher ERP est non modifiable
3966     $all_fields['erp'] = 'checkboxhiddenstatic';
3967     // Si le type du dossier d'instruction en cours est présent
3968     // dans les paramètres autorisant l'interfaçage avec le référentiel ERP
3969     if (isset($parameters['erp__dossier__nature__at']) === true
3970     && $this->f->getDATCode($this->getVal($this->clePrimaire)) == $parameters['erp__dossier__nature__at']) {
3971     //
3972     $all_fields['erp'] = 'checkbox';
3973     }
3974     if (isset($parameters['erp__dossier__nature__pc']) === true
3975     && $this->f->getDATCode($this->getVal($this->clePrimaire)) == $parameters['erp__dossier__nature__pc']
3976     && isset($parameters['erp__dossier__type_di__pc']) === true) {
3977     //
3978     $erp_di_pc = explode(";", $parameters['erp__dossier__type_di__pc']);
3979     if (is_array($erp_di_pc) === true
3980     && in_array($this->getVal("dossier_instruction_type"), $erp_di_pc) === true) {
3981     //
3982     $all_fields['erp'] = 'checkbox';
3983     }
3984     }
3985     }
3986 softime 8989 // modification de la date d'affichage pour les ADS
3987     if ($this->f->isAccredited($this->get_absolute_class_name()."_modifier_date_affichage")) {
3988     $ads_fields['date_affichage'] = 'date';
3989 softime 10573 $ce_fields['date_affichage'] = 'date';
3990 softime 8989 }
3991 softime 10573
3992     // pas de modificiation de la commune associée au dossier (si l'option est activée)
3993     if ($this->f->is_option_dossier_commune_enabled($this->getVal('om_collectivite'))) {
3994     $ads_fields['commune'] = 'selecthiddenstatic';
3995     $ce_fields['commune'] = 'selecthiddenstatic';
3996     }
3997 softime 6565 }
3998     }
3999     // MODIFIER, SUPPRIMER, CONSULTER
4000     if ($crud !== 'create') {
4001     $re_fields['autorisation_contestee'] = 'selecthiddenstatic';
4002     $all_fields['date_demande'] = 'hidden';
4003     // La collectivité n'est jamais modifiable
4004     if ($_SESSION['niveau'] == 2) {
4005     $all_fields['om_collectivite'] = 'selecthiddenstatic';
4006     }
4007 softime 6929 // Instance du paramétrage des taxes
4008 mbroquet 3730 $inst_taxe_amenagement = $this->get_inst_taxe_amenagement();
4009     // Instance de cerfa
4010     $inst_cerfa = $this->get_inst_cerfa();
4011 softime 10573
4012     // Gestion du secteur pour la taxe d'aménagement
4013     // MODIFIER
4014     if ($crud === 'update') {
4015     //
4016     if ($this->is_in_context_of_foreign_key("tax_secteur", $this->getParameter("retourformulaire"))) {
4017     $ads_fields['tax_secteur'] = 'selecthiddenstatic';
4018     $dpc_fields['tax_secteur'] = 'selecthiddenstatic';
4019     $ce_fields['tax_secteur'] = 'selecthiddenstatic';
4020     } else {
4021     $ads_fields['tax_secteur'] = 'select';
4022     $dpc_fields['tax_secteur'] = 'select';
4023     $ce_fields['tax_secteur'] = 'select';
4024     }
4025     }
4026     // SUPPRIMER
4027     if ($crud === 'delete') {
4028     //
4029     $ads_fields['tax_secteur'] = 'selectstatic';
4030     $dpc_fields['tax_secteur'] = 'selectstatic';
4031     $ce_fields['tax_secteur'] = 'selectstatic';
4032     }
4033     // CONSULTER
4034     if ($crud === 'read') {
4035     //
4036     $ads_fields['tax_secteur'] = 'selectstatic';
4037     $dpc_fields['tax_secteur'] = 'selectstatic';
4038     $ce_fields['tax_secteur'] = 'selectstatic';
4039 softime 13528 $inf_fields['numero_versement_archive'] = 'hiddenstatic';
4040 softime 10573 }
4041    
4042 softime 6929 // Si l'option de simulation est activée pour la collectivité du
4043     // dossier, l'utilisateur connecté a la permissions de voir
4044     // la simulation des taxes, la collectivité à un paramétrage pour
4045     // les taxes et que le cerfa du dossier à les champs requis
4046     if ($this->f->is_option_simulation_taxes_enabled($this->getVal('om_collectivite')) === true
4047     && $this->f->isAccredited("dossier_instruction_simulation_taxes") === true
4048     && $inst_taxe_amenagement !== null
4049     && $inst_cerfa->can_simulate_taxe_amenagement() === true) {
4050 mbroquet 3730
4051 softime 6565 // Si ce n'est pas une commune d'Île-de-France
4052 mbroquet 3730 if ($inst_taxe_amenagement->getVal('en_ile_de_france') == 'f') {
4053     //
4054 softime 6565 $ads_fields['tax_mtn_part_reg'] = 'hidden';
4055 softime 6929 $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
4056 softime 7067 $dpc_fields['tax_mtn_part_reg'] = 'hidden';
4057     $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
4058 softime 10573 $ce_fields['tax_mtn_part_reg'] = 'hidden';
4059     $ce_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
4060 mbroquet 3730 }
4061     } else {
4062 softime 6565 // SUPPRIMER, CONSULTER
4063     if ($crud === 'delete' OR $crud ==='read') {
4064     $ads_fields['tax_mtn_part_commu'] = 'hidden';
4065     $ads_fields['tax_mtn_part_depart'] = 'hidden';
4066     $ads_fields['tax_mtn_part_reg'] = 'hidden';
4067     $ads_fields['tax_mtn_total'] = 'hidden';
4068 softime 6929 $ads_fields['tax_mtn_rap'] = 'hidden';
4069     $ads_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
4070     $ads_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
4071     $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
4072     $ads_fields['tax_mtn_total_sans_exo'] = 'hidden';
4073     $ads_fields['tax_mtn_rap_sans_exo'] = 'hidden';
4074 softime 7067 //
4075     $dpc_fields['tax_mtn_part_commu'] = 'hidden';
4076     $dpc_fields['tax_mtn_part_depart'] = 'hidden';
4077     $dpc_fields['tax_mtn_part_reg'] = 'hidden';
4078     $dpc_fields['tax_mtn_total'] = 'hidden';
4079     $dpc_fields['tax_mtn_rap'] = 'hidden';
4080     $dpc_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
4081     $dpc_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
4082     $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
4083     $dpc_fields['tax_mtn_total_sans_exo'] = 'hidden';
4084     $dpc_fields['tax_mtn_rap_sans_exo'] = 'hidden';
4085 softime 10573 //
4086     $ce_fields['tax_mtn_part_commu'] = 'hidden';
4087     $ce_fields['tax_mtn_part_depart'] = 'hidden';
4088     $ce_fields['tax_mtn_part_reg'] = 'hidden';
4089     $ce_fields['tax_mtn_total'] = 'hidden';
4090     $ce_fields['tax_mtn_rap'] = 'hidden';
4091     $ce_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
4092     $ce_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
4093     $ce_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
4094     $ce_fields['tax_mtn_total_sans_exo'] = 'hidden';
4095     $ce_fields['tax_mtn_rap_sans_exo'] = 'hidden';
4096 mbroquet 3730 }
4097     }
4098     }
4099 softime 8477 // CONSULTER
4100     if ($crud ==='read') {
4101 mbroquet 3730
4102 softime 6565 $ads_fields['geom'] = 'static';
4103     $ads_fields['a_qualifier'] = 'checkboxstatic';
4104     $ads_fields['terrain_references_cadastrales'] = 'referencescadastralesstatic';
4105 softime 7067 //
4106     $dpc_fields['geom'] = 'static';
4107     $dpc_fields['a_qualifier'] = 'checkboxstatic';
4108     $dpc_fields['terrain_references_cadastrales'] = 'referencescadastralesstatic';
4109 softime 10573 //
4110     $ce_fields['geom'] = 'static';
4111     $ce_fields['a_qualifier'] = 'checkboxstatic';
4112     $ce_fields['terrain_references_cadastrales'] = 'referencescadastralesstatic';
4113     // Affiche le champ streetview si l'option est active
4114     if ($this->f->is_option_streetview_enabled($this->getVal("om_collectivite")) === true) {
4115     $all_fields['streetview'] = 'static';
4116     }
4117    
4118 softime 6565 // Si l'état du dossier est incomplet
4119     if ($this->is_incomplet_notifie()) {
4120     // on cache les dates de complétude et de limite d'instruction
4121     $ads_fields['date_complet'] = 'hidden';
4122     $ads_fields['date_limite'] = 'hidden';
4123     $ads_fields['evenement_suivant_tacite_incompletude'] = 'selecthiddenstatic';
4124     $ads_fields['evenement_suivant_tacite'] = 'hidden';
4125 softime 7067 //
4126     $dpc_fields['date_complet'] = 'hidden';
4127     $dpc_fields['date_limite'] = 'hidden';
4128     $dpc_fields['evenement_suivant_tacite_incompletude'] = 'selecthiddenstatic';
4129     $dpc_fields['evenement_suivant_tacite'] = 'hidden';
4130 softime 10573 //
4131     $ce_fields['date_complet'] = 'hidden';
4132     $ce_fields['date_limite'] = 'hidden';
4133     $ce_fields['evenement_suivant_tacite_incompletude'] = 'selecthiddenstatic';
4134     $ce_fields['evenement_suivant_tacite'] = 'hidden';
4135 softime 6565 } else {
4136     // sinon on cache la date de limite d'incomplétude
4137     $ads_fields['date_limite_incompletude'] = 'hidden';
4138     $ads_fields['evenement_suivant_tacite_incompletude'] = 'hidden';
4139     $ads_fields['evenement_suivant_tacite'] = 'selecthiddenstatic';
4140 softime 7067 //
4141     $dpc_fields['date_limite_incompletude'] = 'hidden';
4142     $dpc_fields['evenement_suivant_tacite_incompletude'] = 'hidden';
4143     $dpc_fields['evenement_suivant_tacite'] = 'selecthiddenstatic';
4144 softime 10573 //
4145     $ce_fields['date_limite_incompletude'] = 'hidden';
4146     $ce_fields['evenement_suivant_tacite_incompletude'] = 'hidden';
4147     $ce_fields['evenement_suivant_tacite'] = 'selecthiddenstatic';
4148 softime 6565 }
4149     if (isset($parameters['option_arrondissement'])
4150     && $parameters['option_arrondissement'] === 'true') {
4151     $all_fields['dossier_arrondissement'] = 'static';
4152     }
4153 softime 10573 //
4154 softime 10808 // Vérifie que le dossier a été déposé depuis Plat'AU ou le portail citoyen
4155 softime 13137 if ($this->get_source_depot_from_demande() === PLATAU
4156     || $this->get_source_depot_from_demande() === PORTAL) {
4157 softime 10808 //
4158 softime 10573 $ce_fields["consultation_entrante"] = 'hidden';
4159     $ce_fields["delai_reponse"] = 'static';
4160     $ce_fields["type_delai"] = 'static';
4161     $ce_fields["objet_consultation"] = 'static';
4162     $ce_fields["date_production_notification"] = 'datestatic';
4163     $ce_fields["date_premiere_consultation"] = 'datestatic';
4164     $ce_fields["date_consultation"] = 'datestatic';
4165     $ce_fields["date_emission"] = 'datestatic';
4166     $ce_fields["service_consultant_id"] = 'static';
4167     $ce_fields["service_consultant_libelle"] = 'static';
4168     $ce_fields["service_consultant_insee"] = 'static';
4169     $ce_fields["service_consultant_mail"] = 'static';
4170     $ce_fields["service_consultant_type"] = 'static';
4171     $ce_fields["service_consultant__siren"] = 'static';
4172     $ce_fields["etat_consultation"] = 'static';
4173     $ce_fields["type_consultation"] = 'static';
4174     $ce_fields["texte_fondement_reglementaire"] = 'static';
4175     $ce_fields["texte_objet_consultation"] = 'static';
4176     $ce_fields["dossier_consultation"] = 'hidden';
4177     }
4178 softime 6565 }
4179 softime 8477 // SUPPRIMER
4180     if($crud === 'delete') {
4181     // Cache tous les champs execepté le libellé du dossier
4182     foreach ($this->champs as $champ) {
4183     $all_fields[$champ] = 'hidden';
4184     }
4185     $all_fields['dossier_libelle'] = 'hiddenstatic';
4186     }
4187 softime 6565
4188 softime 10573 $all_fields['etat_transmission_platau'] = 'hidden';
4189 softime 10968 if ($crud !== 'create') {
4190     //
4191     $inst_datd = $this->get_inst_dossier_autorisation_type_detaille();
4192     if ($inst_datd->getVal('dossier_platau') === 't') {
4193     //
4194     $all_fields['etat_transmission_platau'] = 'selecthiddenstatic';
4195     }
4196     }
4197    
4198    
4199 softime 10573 if ($crud == 'create' || $crud == 'update') {
4200     $required_fields_platau = $this->list_platau_required_fields_dossier;
4201     if ($this->f->is_option_mode_service_consulte_enabled() === false) {
4202 softime 10808 if ($this->f->is_type_dossier_platau($this->getVal('dossier_autorisation')) === true
4203     && $this->getVal('etat_transmission_platau') !== 'jamais_transmissible') {
4204     //
4205 softime 10573 foreach ($required_fields_platau as $required_field_platau) {
4206     $champ = explode('.', $required_field_platau)[1];
4207     if (in_array($champ, $this->champs)) {
4208     $form->setType($champ ,$form->type[$champ].'_demat_color');
4209     }
4210     }
4211     }
4212     }
4213     }
4214    
4215 softime 12847 // Dans tous les cas si le champ accord_tacite est à non on veut insérer
4216     // du texte dans le champ "au terme du délai" et donc ce n'est plus un
4217     // selecthiddenstatic
4218 softime 13528 if ($this->getVal('accord_tacite') === 'Non' || trim($this->getVal('accord_tacite')) === '') {
4219 softime 12847 if ($this->is_incomplet_notifie() === false) {
4220     $all_fields['evenement_suivant_tacite'] = 'hiddenstatic';
4221     $ads_fields['evenement_suivant_tacite'] = 'hiddenstatic';
4222     $ce_fields['evenement_suivant_tacite'] = 'hiddenstatic';
4223     $dpc_fields['evenement_suivant_tacite'] = 'hiddenstatic';
4224     } else {
4225     $all_fields['evenement_suivant_tacite_incompletude'] = 'hiddenstatic';
4226     $ads_fields['evenement_suivant_tacite_incompletude'] = 'hiddenstatic';
4227     $dpc_fields['evenement_suivant_tacite_incompletude'] = 'hiddenstatic';
4228     $ce_fields['evenement_suivant_tacite_incompletude'] = 'hiddenstatic';
4229     }
4230     }
4231    
4232     // Lorsque le statut de dossier est "cloture" on cache le champ "au terme du délai"
4233     if ($this->getStatut() === 'cloture') {
4234     $all_fields['evenement_suivant_tacite'] = 'hidden';
4235     $ads_fields['evenement_suivant_tacite'] = 'hidden';
4236     $dpc_fields['evenement_suivant_tacite'] = 'hidden';
4237     $ce_fields['evenement_suivant_tacite'] = 'hidden';
4238     }
4239    
4240 softime 6565 //
4241     // Typage
4242     //
4243    
4244     switch ($groupe) {
4245     case 'CTX IN':
4246     $this->manage_type($form, $inf_fields);
4247     break;
4248     case 'CTX RE':
4249     $this->manage_type($form, $re_fields);
4250     break;
4251     case 'ADS':
4252     $this->manage_type($form, $ads_fields);
4253     break;
4254 softime 7067 case 'DPC':
4255     $this->manage_type($form, $dpc_fields);
4256     break;
4257 softime 10573 case 'CONSULTATION ENTRANTE':
4258     $this->manage_type($form, $ce_fields);
4259     break;
4260 softime 6565 }
4261     $this->manage_type($form, $all_fields);
4262 mbroquet 3730 }
4263    
4264 softime 6929
4265 softime 6565 /**
4266     * Gestion du typage des champs
4267     *
4268     * @param object $form formulaire instancié
4269     * @param array $fields tableau associatif des champs avec leur widget de formulaire en valeur
4270     * @return void
4271     */
4272     protected function manage_type($form, $fields) {
4273     foreach ($this->champs as $key => $field) {
4274     if (array_key_exists($field, $fields) === true) {
4275     $form->setType($field, $fields[$field]);
4276     }
4277     }
4278     }
4279    
4280    
4281     /**
4282 softime 7067 * Retourne le nombre de parcelles qu'à en commun le dossier passé en
4283     * paramètre avec les dossiers contentieux en cours. Le nombre de parcelles
4284     * est groupé par type de dossier d'autorisation : RE ou IN.
4285 softime 6565 *
4286 softime 7067 * @param string $di identifiant du DI
4287 softime 6565 * @return array
4288     */
4289 softime 7067 function get_nb_parcelles_dossier_ciblees_par_contentieux($di) {
4290 softime 6565 $sql = "
4291     SELECT
4292     dossier_autorisation_type.code, COUNT(*) as nb
4293     FROM " . DB_PREFIXE . "dossier
4294     LEFT JOIN " . DB_PREFIXE . "dossier_parcelle
4295     ON dossier.dossier = dossier_parcelle.dossier
4296     LEFT JOIN " . DB_PREFIXE . "dossier_parcelle as parcelle_ctx
4297     ON dossier_parcelle.libelle = parcelle_ctx.libelle
4298     AND dossier_parcelle.dossier != parcelle_ctx.dossier
4299     LEFT JOIN " . DB_PREFIXE . "dossier as dossier_ctx
4300     ON dossier_ctx.dossier = parcelle_ctx.dossier
4301 softime 7067 INNER JOIN " . DB_PREFIXE . "etat
4302     ON dossier_ctx.etat = etat.etat AND etat.statut != 'cloture'
4303 softime 6565 LEFT JOIN " . DB_PREFIXE . "dossier_autorisation
4304     ON dossier_ctx.dossier_autorisation = dossier_autorisation.dossier_autorisation
4305     LEFT JOIN " . DB_PREFIXE . "dossier_autorisation_type_detaille
4306     ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
4307     = dossier_autorisation.dossier_autorisation_type_detaille
4308     LEFT JOIN " . DB_PREFIXE . "dossier_autorisation_type
4309     ON dossier_autorisation_type_detaille.dossier_autorisation_type
4310     = dossier_autorisation_type.dossier_autorisation_type
4311     WHERE
4312     dossier.dossier = '" . $di . "'
4313     AND (dossier_autorisation_type.code = 'RE'
4314     OR dossier_autorisation_type.code = 'IN')
4315     GROUP BY dossier_autorisation_type.code
4316     ";
4317 softime 7067 $this->addToLog("get_nb_parcelles_dossier_ciblees_par_contentieux : db->query(\"$sql\")", VERBOSE_MODE);
4318 softime 8989 $res = $this->f->db->query($sql);
4319 softime 7067 $this->f->isDatabaseError($res);
4320 softime 6565
4321     $nb_re_inf = array('re' => 0, 'inf' => 0);
4322    
4323     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
4324     if ($row["code"] == "RE"){
4325     $nb_re_inf['re'] += $row["nb"];
4326     }
4327     if ($row["code"] == "IN"){
4328     $nb_re_inf['inf'] += $row["nb"];
4329     }
4330     }
4331    
4332     return $nb_re_inf;
4333     }
4334    
4335 softime 8989 /**
4336     * SETTER_FORM - setVal (setVal).
4337     *
4338     * @return void
4339     */
4340     function setVal(&$form, $maj, $validation, &$dnu1 = null, $dnu2 = null) {
4341     // parent::setVal($form, $maj, $validation);
4342     //
4343 mbroquet 3730 $this->maj=$maj;
4344 softime 10573
4345     if ($this->f->is_option_sig_enabled($this->getVal("om_collectivite")) === true
4346 softime 8989 && $this->f->issetSIGParameter($this->getVal("dossier")) === true) {
4347 softime 10573
4348     // lien vers le SIG
4349     $geoLinksHtml = $this->getGeolocalisationLink();
4350     $form->setVal("geom", $geoLinksHtml);
4351 mbroquet 3730 }
4352 softime 10573 // si l'option 'streetview' est activée ajoute un lien vers Google Maps Street View
4353 softime 10713 if ($this->f->is_option_streetview_enabled($this->getVal("om_collectivite")) === true
4354 softime 10808 && $maj == 3) {
4355     //
4356 softime 10573 $gStreetViewLinkHtml = $this->getGoogleMapsStreetViewLink();
4357     $form->setVal("streetview", $gStreetViewLinkHtml);
4358     }
4359 softime 8989 //
4360 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
4361 softime 10573 if ($affichage_form === "ADS" || $affichage_form === "CONSULTATION ENTRANTE") {
4362 softime 8989 // Dans le cas d'un dépôt électronique un pictogramme apparait devant le demandeur
4363     if ($maj == 1 || $maj == 2 || $maj == 3) {
4364     if ($this->getVal("depot_electronique") === "t"
4365     || $this->getVal("depot_electronique") === true
4366     || $this->getVal("depot_electronique") === 1) {
4367 softime 8329 //
4368 softime 8989 $form->setVal(
4369     "dossier_petitionnaire",
4370     sprintf(
4371     '<span class="om-icon om-icon-16 om-icon-fix depot-electronique-16" title="%s"> </span>%s',
4372     "Dépôt électronique",
4373     $this->getVal("dossier_petitionnaire")
4374     )
4375     );
4376 softime 8329 }
4377     }
4378 softime 6565 if ($maj == 3) {
4379 softime 8989 $nb_re_inf = $this->get_nb_parcelles_dossier_ciblees_par_contentieux($this->getVal("dossier"));
4380 softime 6565 $message = "";
4381 softime 8989 if ($nb_re_inf["re"] > 0) {
4382 softime 6565 $message .= "<span class=\"label label-warning\" ";
4383 nmeucci 7085 $message .= "title=\""._("Au moins un dossier de recours contentieux ou gracieux en cours concerne les références cadastrales du dossier courant.")."\">";
4384 softime 6565 $message .= _("RE");
4385     $message .= "</span>";
4386 softime 8989 if ($nb_re_inf["inf"] > 0) {
4387 softime 6565 $message .= " ";
4388     }
4389     }
4390 softime 8989 if ($nb_re_inf["inf"] > 0) {
4391 softime 6565 $message .= "<span class=\"label label-important\" ";
4392 nmeucci 7085 $message .= "title=\""._("Au moins un dossier d'infraction en cours concerne les références cadastrales du dossier courant.")."\">";
4393 softime 6565 $message .= _("IN");
4394     $message .= "</span>";
4395     }
4396 softime 8989 $form->setVal("enjeu_ctx", $message);
4397 softime 6565 }
4398 softime 8989 } elseif ($affichage_form === "CTX RE") {
4399 softime 6565 // Récupération des demandeurs liés au dossier
4400 softime 8989 $this->listeDemandeur("dossier", $this->getVal("dossier"));
4401 softime 6565 //
4402 softime 8989 $requerants = "";
4403     if ($this->getVal("requerants") != "") {
4404     $requerants = $this->getVal("requerants");
4405     if (isset($this->valIdDemandeur["requerant"]) === true
4406     && count($this->valIdDemandeur["requerant"]) > 0) {
4407     //
4408     $requerants .= " "._("et autres");
4409 softime 6565 }
4410     }
4411 softime 8989 $form->setVal("requerants", $requerants);
4412 softime 6565 //
4413 softime 8989 $dossier_petitionnaires = "";
4414     if ($this->getVal("dossier_petitionnaire") != "") {
4415     $dossier_petitionnaires = $this->getVal("dossier_petitionnaire");
4416 softime 6565 }
4417 softime 8989 if (isset($this->valIdDemandeur["petitionnaire"]) === true
4418     && count($this->valIdDemandeur["petitionnaire"]) > 0) {
4419     //
4420     $dossier_petitionnaires .= " "._("et autres");
4421 softime 6565 }
4422 softime 8989 $form->setVal("dossier_petitionnaires", $dossier_petitionnaires);
4423     } elseif ($affichage_form === "CTX IN") {
4424 softime 6565 // Récupération des demandeurs liés au dossier
4425 softime 8989 $this->listeDemandeur("dossier", $this->getVal("dossier"));
4426 softime 6565 //
4427 softime 8989 $contrevenants = "";
4428     if ($this->getVal("contrevenants") != "") {
4429     $contrevenants = $this->getVal("contrevenants");
4430     if (isset($this->valIdDemandeur["contrevenant"]) === true
4431     && count($this->valIdDemandeur["contrevenant"]) > 0) {
4432     //
4433     $contrevenants .= " "._("et autres");
4434 softime 6565 }
4435     }
4436 softime 8989 $form->setVal("contrevenants", $contrevenants);
4437     } elseif ($affichage_form === "DPC") {
4438 softime 7067 // Récupération des demandeurs liés au dossier
4439 softime 8989 $this->listeDemandeur("dossier", $this->getVal("dossier"));
4440 softime 7067 //
4441 softime 8989 $bailleurs = "";
4442     if ($this->getVal("bailleurs") != "") {
4443     $bailleurs = $this->getVal("bailleurs");
4444     if (isset($this->valIdDemandeur["bailleur"]) === true
4445     && count($this->valIdDemandeur["bailleur"]) > 0) {
4446     //
4447     $bailleurs .= " "._("et autres");
4448 softime 7067 }
4449     }
4450 softime 8989 $form->setVal("bailleurs", $bailleurs);
4451 softime 7067 }
4452 softime 8989 //
4453 softime 6565 if ($validation == 0) {
4454 softime 8989 if ($maj == 0) {
4455     $form->setVal("annee", date("y"));
4456     $form->setVal("date_demande", date("Y-m-d"));
4457     $form->setVal("date_depot", date("Y-m-d"));
4458     $form->setVal("accord_tacite", "Non");
4459     $form->setVal("etat", "initialiser");
4460 mbroquet 3730 }
4461     }
4462 softime 11585 //
4463     if ($maj == 3) {
4464     $form->setVal("lien_iiue", $this->get_json_lien_iiue());
4465     }
4466 softime 12847
4467     // Dans tous les cas si le champ accord_tacite est à non on veut insérer du texte dans le champ "au terme du délai"
4468     if ($this->is_incomplet_notifie() === false) {
4469 softime 13528 if ($this->getVal('accord_tacite') === 'Non' || trim($this->getVal('accord_tacite')) === '') {
4470 softime 12847 $form->setVal('evenement_suivant_tacite', __('N/A'));
4471     }
4472     } else {
4473     // Si le champ accord_tacite est à false alors on met "N/A" dans le champ evenement_suivant_tacite_incompletude
4474 softime 13528 if ($this->getVal('accord_tacite') === 'Non' || trim($this->getVal('accord_tacite')) === '') {
4475 softime 12847 $form->setVal('evenement_suivant_tacite_incompletude', __('N/A'));
4476     }
4477     }
4478 mbroquet 3730 }
4479    
4480     /**
4481     * getGeolocalisationLink retourne le code HTML affichant l'icone du globe, ainsi que
4482     * les coordonnées du centroide du dossier, le tout étant un lien vers le SIG.
4483     *
4484     * @return string Lien vers le SIG
4485     */
4486     function getGeolocalisationLink() {
4487     //
4488     $link = "<a id='action-form-localiser'".
4489 softime 7996 " target='_SIG' href='".OM_ROUTE_FORM."&obj=dossier_instruction&action=140&idx=".$this->getVal("dossier")."'>".
4490 mbroquet 3730 "<span class='om-icon om-icon-16 om-icon-fix sig-16' title='Localiser'>Localiser</span> ".
4491     $this->getVal('geom').
4492     " </a>";
4493 softime 12654 $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></div>";
4494 softime 12433 return $this->getVal('geom') ? $link : $nogeoloc;
4495 mbroquet 3730 }
4496    
4497 softime 10573
4498 softime 8989 /**
4499 softime 10573 * converti un geom au format Lat,Lon
4500     *
4501     * @param string $geom Le Geom
4502     * @param string $fromRefId Le référentiel dans lequel le geom est défini
4503     * @param string $toLongLatId Le référentiel dans lequel le geom doit être converti
4504     *
4505     * @return array[2] Long,Lat ou bien false,"message" en cas d'erreur
4506     */
4507     protected function convertGeomToLongLat(string $geom, string $fromRefId = '2154',
4508     string $toLongLatId = '4326') {
4509     $sql = "
4510     SELECT
4511     ST_X(ST_Transform(ST_GeomFromText('$geom', $fromRefId), $toLongLatId)) AS longitude,
4512     ST_Y(ST_Transform(ST_GeomFromText('$geom', $fromRefId), $toLongLatId)) AS latitude
4513     ";
4514     $res = $this->f->db->query($sql);
4515 softime 12847 $this->addToLog(
4516     __METHOD__."(): db->query(\"".$sql."\");",
4517     VERBOSE_MODE
4518     );
4519     if ($this->f->isDatabaseError($res)) { // PP
4520 softime 10573 $this->addToLog(__METHOD__."() error: ".var_export($res->getMessage(), true), DEBUG_MODE);
4521     return array(false, $res->getMessage());
4522     }
4523     if ($res->numRows() != 1) {
4524     $this->addToLog(__METHOD__."() error: ".var_export($res->numRows(), true), DEBUG_MODE);
4525     return array(false, __("Erreur: Plus d'un enregistrement retourné").
4526     '('.$res->numRows().')');
4527     }
4528     $coord = $res->fetchRow(DB_FETCHMODE_ASSOC);
4529     $this->addToLog(__METHOD__."() coord: ".var_export($coord, true), EXTRA_VERBOSE_MODE);
4530     return array_values($coord);
4531     }
4532    
4533     /**
4534     * getGoogleMapsStreetViewLink retourne le code HTML affichant un lien vers une vue
4535     * Google Maps Street View à partir des coordonnées du geom.
4536     *
4537     * @return string Lien vers Google Maps Street View
4538     */
4539     protected function getGoogleMapsStreetViewLink() {
4540     // Récupération coordonnées du terrain
4541    
4542     // Passage du numéro de dossier comme id pour pouvoir le récupérer dans le
4543     // jscript lors du clic
4544     $html = sprintf(
4545     "<a id='action-form-gstreetview' class='simple-btn' title='%s' onclick='get_adresse_terrain(this.id, \"%s\")'>
4546     <span class='om-icon om-icon-16 om-icon-fix consult-16'></span>%s
4547     </a>",
4548     __("Ouvrir dans Google Maps Street View"),
4549     $this->getVal($this->clePrimaire),
4550     __("Street View")
4551     );
4552     return $html;
4553     }
4554    
4555     /**
4556 softime 8989 * SETTER_FORM - setSelect.
4557     *
4558     * @return void
4559     */
4560     function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
4561 softime 10573 $crud = $this->get_action_crud($this->getParameter("maj"));
4562    
4563 mbroquet 3730 // XXX Commenté pour patcher le problème de montée en charge de la base
4564     // de données en cas de reprise de données d'un gros volume de dossier
4565     // d'instruction
4566 softime 8989 // parent::setSelect($form, $maj);
4567 mbroquet 3730 // om_collectivite
4568 softime 8989 $this->init_select(
4569     $form,
4570     $this->f->db,
4571     $maj,
4572     null,
4573     "om_collectivite",
4574     $this->get_var_sql_forminc__sql("om_collectivite"),
4575     $this->get_var_sql_forminc__sql("om_collectivite_by_id"),
4576     false
4577     );
4578 mbroquet 3730
4579     /*
4580     * Pour chaque init_select d'un select non modifiable on teste
4581     * si l'on est en mode modifier : si c'est le cas alors on initialise le
4582     * select en mode consulter (qui n'affiche rien s'il n'y a aucune valeur).
4583     */
4584    
4585     $collectivite_idx = $this->getVal("om_collectivite");
4586 softime 6565 $affichage_form_dat = "";
4587 mbroquet 3730 // Si recherche avancée om_collectivite = collectivité utilisateur
4588 softime 8989 if ($maj == 999) {
4589 mbroquet 3730 $collectivite_idx = $this->f->getParameter("om_collectivite_idx");
4590 softime 6565 } else {
4591     $affichage_form_dat = $this->get_type_affichage_formulaire();
4592 mbroquet 3730 }
4593 softime 6565 // Définition de la qualité et de la traduction de l'instructeur
4594 softime 13137 $lib_instructeur = __("l'instructeur");
4595     $lib_instructeur_2 = __("l'instructeur secondaire");
4596     $affichage_instr_2 = 'instr';
4597     $affichage_instr = '';
4598 softime 6565 switch ($affichage_form_dat) {
4599 softime 7067 case 'DPC':
4600 softime 6565 case 'ADS':
4601 softime 10573 case 'CONSULTATION ENTRANTE':
4602 softime 6565 $affichage_instr = "AND instructeur_qualite.code = 'instr'";
4603     break;
4604     case 'CTX RE':
4605 softime 13137 $lib_instructeur_2 = __("le technicien");
4606     $affichage_instr_2 = 'tech';
4607     break;
4608 softime 6565 case 'CTX IN':
4609     $affichage_instr = "AND instructeur_qualite.code = 'juri'";
4610 softime 13137 $lib_instructeur = __('le juriste');
4611     $lib_instructeur_2 = __("le technicien");
4612     $affichage_instr_2 = 'tech';
4613 softime 6565 break;
4614     default:
4615     $affichage_instr = "";
4616     break;
4617     }
4618 mbroquet 3730
4619     // instructeur
4620     // on recupère les services des multicollectivités et de celle du DI
4621 softime 8989 if ($this->f->getParameter('option_afficher_division')==='true') {
4622 mbroquet 3730 // instructeur
4623 softime 8989 $sql_instructeur_div_by_di = str_replace(
4624     '<collectivite_di>',
4625     $collectivite_idx,
4626     $this->get_var_sql_forminc__sql("instructeur_div_by_di")
4627     );
4628     $sql_instructeur_div_by_di = str_replace(
4629     '<instructeur_qualite>',
4630     $affichage_instr,
4631     $sql_instructeur_div_by_di
4632     );
4633     $this->init_select(
4634     $form,
4635     $this->f->db,
4636     $maj,
4637     null,
4638     "instructeur",
4639     $sql_instructeur_div_by_di,
4640     $this->get_var_sql_forminc__sql("instructeur_div_by_id"),
4641     true,
4642     false,
4643     $lib_instructeur
4644     );
4645     // instructeur_2
4646     $sql_instructeur_2_div_by_di = str_replace(
4647     '<collectivite_di>',
4648     $collectivite_idx,
4649     $this->get_var_sql_forminc__sql("instructeur_2_div_by_di")
4650     );
4651 softime 13137 $sql_instructeur_2_div_by_di = str_replace(
4652     '<instructeur_qualite>',
4653     $affichage_instr_2,
4654     $sql_instructeur_2_div_by_di
4655     );
4656 softime 8989 $this->init_select(
4657     $form,
4658     $this->f->db,
4659     $maj,
4660     null,
4661     "instructeur_2",
4662     $sql_instructeur_2_div_by_di,
4663     $this->get_var_sql_forminc__sql("instructeur_2_div_by_id"),
4664     true,
4665     false,
4666 softime 13137 $lib_instructeur_2
4667 softime 8989 );
4668 mbroquet 3730 } else {
4669 softime 8989 $sql_instructeur_by_di = str_replace(
4670     '<collectivite_di>',
4671     $collectivite_idx,
4672     $this->get_var_sql_forminc__sql("instructeur_by_di")
4673     );
4674     $sql_instructeur_by_di = str_replace(
4675     '<instructeur_qualite>',
4676     $affichage_instr,
4677     $sql_instructeur_by_di
4678     );
4679     $this->init_select(
4680     $form,
4681     $this->f->db,
4682     $maj,
4683     null,
4684     "instructeur",
4685     $sql_instructeur_by_di,
4686     $this->get_var_sql_forminc__sql("instructeur_by_id"),
4687     true,
4688     false,
4689     $lib_instructeur
4690     );
4691     $sql_instructeur_2_by_di = str_replace(
4692     '<collectivite_di>',
4693     $collectivite_idx,
4694     $this->get_var_sql_forminc__sql("instructeur_2_by_di")
4695     );
4696 softime 13137 $sql_instructeur_2_by_di = str_replace(
4697     '<instructeur_qualite>',
4698     $affichage_instr_2,
4699     $sql_instructeur_2_by_di
4700     );
4701 softime 8989 $this->init_select(
4702     $form,
4703     $this->f->db,
4704     $maj,
4705     null,
4706     "instructeur_2",
4707     $sql_instructeur_2_by_di,
4708     $this->get_var_sql_forminc__sql("instructeur_2_by_id"),
4709     true,
4710     false,
4711 softime 13137 $lib_instructeur_2
4712 softime 8989 );
4713 mbroquet 3730 }
4714 softime 6565
4715 mbroquet 3730 // etat
4716     if ($maj == 1) {
4717 softime 8989 $this->init_select(
4718     $form,
4719     $this->f->db,
4720     3,
4721     null,
4722     "etat",
4723     $this->get_var_sql_forminc__sql("etat"),
4724     $this->get_var_sql_forminc__sql("etat_by_id"),
4725     false
4726     );
4727 mbroquet 3730 } else {
4728 softime 8989 $this->init_select(
4729     $form,
4730     $this->f->db,
4731     $maj,
4732     null,
4733     "etat",
4734     $this->get_var_sql_forminc__sql("etat"),
4735     $this->get_var_sql_forminc__sql("etat_by_id"),
4736     false
4737     );
4738 mbroquet 3730 }
4739    
4740     // dossier_instruction_type
4741 softime 8989 $this->init_select(
4742     $form,
4743     $this->f->db,
4744     $maj,
4745     null,
4746     "dossier_instruction_type",
4747     $this->get_var_sql_forminc__sql("dossier_instruction_type"),
4748     $this->get_var_sql_forminc__sql("dossier_instruction_type_by_id"),
4749     false
4750     );
4751 mbroquet 3730
4752     // division
4753 softime 8989 $sql_division_by_di = str_replace(
4754     '<collectivite_di>',
4755     $collectivite_idx,
4756     $this->get_var_sql_forminc__sql("division_by_di")
4757     );
4758     $this->init_select(
4759     $form,
4760     $this->f->db,
4761     $maj,
4762     null,
4763     "division",
4764     $sql_division_by_di,
4765     $this->get_var_sql_forminc__sql("division_by_id"),
4766     true
4767     );
4768 mbroquet 3730
4769     // autorite_competente
4770 softime 8989 $this->init_select(
4771     $form,
4772     $this->f->db,
4773     $maj,
4774     null,
4775     "autorite_competente",
4776     $this->get_var_sql_forminc__sql("autorite_competente"),
4777     $this->get_var_sql_forminc__sql("autorite_competente_by_id"),
4778     false
4779     );
4780 mbroquet 3730
4781     // avis_decision
4782     if ($maj == 1) {
4783 softime 8989 $this->init_select(
4784     $form,
4785     $this->f->db,
4786     3,
4787     null,
4788     "avis_decision",
4789     $this->get_var_sql_forminc__sql("avis_decision"),
4790     $this->get_var_sql_forminc__sql("avis_decision_by_id"),
4791     false
4792     );
4793 mbroquet 3730 } else {
4794 softime 8989 $this->init_select(
4795     $form,
4796     $this->f->db,
4797     $maj,
4798     null,
4799     "avis_decision",
4800     $this->get_var_sql_forminc__sql("avis_decision"),
4801     $this->get_var_sql_forminc__sql("avis_decision_by_id"),
4802     false
4803     );
4804 mbroquet 3730 }
4805 softime 7366
4806 softime 6565 // autorisation_contestee
4807 softime 7366 if ($affichage_form_dat === 'CTX RE'
4808     && ($maj == 1 || $maj == 3)) {
4809     // À exécuter seulement en mode modifier ou consulter des recours
4810     // pour éviter le ralentissement de l'affichage des listings des DI
4811 softime 8989 $this->init_select(
4812     $form,
4813     $this->f->db,
4814     $maj,
4815     null,
4816     "autorisation_contestee",
4817     $this->get_var_sql_forminc__sql("autorisation_contestee"),
4818     $this->get_var_sql_forminc__sql("autorisation_contestee_by_id"),
4819     false
4820     );
4821 softime 6565 }
4822 mbroquet 3730
4823 softime 12847 // Si l'accord tacite est activé, on récupère la liste des évènements
4824     if ($this->getVal('accord_tacite') === 'Oui') {
4825 mbroquet 3730
4826 softime 12847 // evenement_suivant_tacite
4827     $this->init_select(
4828     $form,
4829     $this->f->db,
4830     $maj,
4831     null,
4832     "evenement_suivant_tacite",
4833     $this->get_var_sql_forminc__sql("evenement_suivant_tacite"),
4834     $this->get_var_sql_forminc__sql("evenement_suivant_tacite_by_id"),
4835     false
4836     );
4837 mbroquet 3730
4838 softime 12847 // evenement_suivant_tacite_incompletude
4839     $this->init_select(
4840     $form,
4841     $this->f->db,
4842     $maj,
4843     null,
4844     "evenement_suivant_tacite_incompletude",
4845     $this->get_var_sql_forminc__sql("evenement_suivant_tacite_incompletude"),
4846     $this->get_var_sql_forminc__sql("evenement_suivant_tacite_incompletude_by_id"),
4847     false
4848     );
4849     }
4850    
4851 mbroquet 3730 // Ajout, modification et recherche avancée
4852 softime 8989 if ($maj == 0 || $maj == 1 || $maj == 999) {
4853 mbroquet 3730 // accord tacite
4854     $contenu=array();
4855     $contenu[0]=array('Non','Oui');
4856     $contenu[1]=array('Non','Oui');
4857 softime 8989 $form->setSelect("accord_tacite", $contenu);
4858 mbroquet 3730 // geom *** a voir
4859 softime 8989 if ($maj == 1) { //modification
4860 mbroquet 3730 $contenu=array();
4861 softime 8989 $contenu[0]=array("dossier", $this->getParameter("idx"));
4862     $form->setSelect('geom', $contenu);
4863 mbroquet 3730 }
4864 softime 6565 // arrondissement recherche avancée
4865 softime 8989 $this->init_select(
4866     $form,
4867     $this->f->db,
4868     $maj,
4869     null,
4870     "arrondissement",
4871     $this->get_var_sql_forminc__sql("arrondissement"),
4872     $this->get_var_sql_forminc__sql("arrondissement_by_id"),
4873     false
4874     );
4875 softime 6565 // dossier_autorisation_type_detaille recherche avancée
4876 softime 8989 $this->init_select(
4877     $form,
4878     $this->f->db,
4879     $maj,
4880     null,
4881     "dossier_autorisation_type_detaille",
4882     $this->get_var_sql_forminc__sql("dossier_autorisation_type_detaille"),
4883     $this->get_var_sql_forminc__sql("dossier_autorisation_type_detaille_by_id"),
4884     false
4885     );
4886 mbroquet 3730 }
4887    
4888     // Ce formulaire n'est pas accessible en ajout ni en recherche avancée
4889     // mais dans le cas où il le serait, rien ne doit être fait concernant
4890 softime 6929 // les taxes
4891 mbroquet 3730 if ($maj != 0 && $maj != 999) {
4892 softime 10573 // Choix du secteur pour part communale
4893     $contenu = array();
4894     $contenu[0][0] = "";
4895     $contenu[1][0] = __('choisir')."&nbsp;".__("le")."&nbsp;".__("tax_secteur");
4896     if ($crud === 'read') {
4897     $contenu[1][0] = "";
4898     }
4899 softime 6929 // Instance du parmétrage des taxes
4900 mbroquet 3730 $inst_taxe_amenagement = $this->get_inst_taxe_amenagement();
4901     // Si la colletivité à un paramétrage pour la taxe d'aménagement
4902 softime 6929 if ($inst_taxe_amenagement !== null) {
4903 mbroquet 3730 // Il y a 20 secteurs maximum dans une commune de France
4904     for ($i=1; $i < 21; $i++) {
4905     // Valeur du secteur
4906     $value = $inst_taxe_amenagement->getVal('tx_comm_secteur_'.$i);
4907     //
4908 softime 6929 if ($value !== null && $value !== '') {
4909 mbroquet 3730 //
4910     $contenu[0][$i] = $i;
4911 softime 10573 $contenu[1][$i] = sprintf(__('Secteur %s'), $i);
4912 mbroquet 3730 }
4913     }
4914     }
4915 softime 10573 //
4916     $form->setSelect("tax_secteur", $contenu);
4917 mbroquet 3730 }
4918 softime 10573 // commune
4919     $this->init_select(
4920     $form,
4921     $this->f->db,
4922     $maj,
4923     null,
4924     "commune",
4925     $this->get_var_sql_forminc__sql("commune"),
4926     $this->get_var_sql_forminc__sql("commune_by_id"),
4927     false
4928     );
4929     // pec_metier
4930     $this->init_select(
4931     $form,
4932     $this->f->db,
4933     $maj,
4934     null,
4935     "pec_metier",
4936     $this->get_var_sql_forminc__sql("pec_metier"),
4937     $this->get_var_sql_forminc__sql("pec_metier_by_id"),
4938     false
4939     );
4940 softime 10968 // etat_transmission_platau
4941     $contenu = array();
4942     $contenu[0] = array(
4943     'jamais_transmissible',
4944     'non_transmissible',
4945     'transmis_mais_non_transmissible',
4946     'transmissible',
4947     );
4948     $contenu[1] = array(
4949     __('Ne sera jamais transmis'),
4950     __('Non transmissible'),
4951     __('Déjà transmis mais non transmissible'),
4952     __('Transmissible'),
4953     );
4954     $form->setSelect("etat_transmission_platau", $contenu);
4955 mbroquet 3730 }
4956    
4957 softime 8989 /**
4958     * SETTER_FORM - setLib.
4959     *
4960     * @return void
4961     */
4962     function setLib(&$form, $maj) {
4963     parent::setLib($form, $maj);
4964 softime 13137 // Les libellés généraux sont mis avant la modification des libellés
4965     // selon le contexte pour permettre de ne surcharger que les libellés
4966     // voulu et d'avoir les mêmes dans tous les autres cas.
4967     $form->setLib('accord_tacite',_("decision tacite"));
4968     $form->setLib('autorite_competente',_('competence'));
4969     $form->setLib('cle_acces_citoyen', _("cle_acces_citoyen"));
4970     $form->setLib('date_ait', _("Date d'AIT"));
4971     $form->setLib('date_audience', _("Date d'audience"));
4972     $form->setLib('date_complet', _("completude"));
4973     $form->setLib('date_contradictoire', _("Date de contradictoire"));
4974     $form->setLib('date_dernier_depot', _("dernier depot"));
4975     $form->setLib('date_derniere_visite', _("Date de dernière visite"));
4976     $form->setLib('date_limite_incompletude', _("limite d'instruction"));
4977     $form->setLib('date_premiere_visite', _("Date de 1ère visite"));
4978     $form->setLib('date_transmission_parquet', _('Date de transmission au Parquet'));
4979     $form->setLib('date_validite', _("fin de validite le"));
4980     $form->setLib('delai', _("delai (mois)"));
4981     $form->setLib('delai',_("delai d'instruction"));
4982     $form->setLib('description_projet',_('description du projet'));
4983     $form->setLib('dossier_arrondissement', _("Arrondissement"));
4984     $form->setLib('dossier_autorisation_libelle',_('dossier_autorisation_libelle'));
4985     $form->setLib('dossier_autorisation_type_detaille', _("Type"));
4986     $form->setLib('contrevenants', _("Contrevenant(s)"));
4987     $form->setLib('dossier_instruction_type',_('type de dossier'));
4988     $form->setLib('dossier_petitionnaire',_('demandeur'));
4989     $form->setLib('dossier_petitionnaires', _("Pétitionnaire(s)"));
4990     $form->setLib('requerants', _("Requérant(s)"));
4991     $form->setLib('dt_ctx_infraction', _("Infraction"));
4992     $form->setLib('dt_ctx_regularisable', _("Régularisable"));
4993     $form->setLib('dt_ctx_synthese_anr', _("Synthèse des ANR"));
4994     $form->setLib('dt_ctx_synthese_nti', _("Synthèse des NTI"));
4995     $form->setLib('ctx_reference_dsj', _("ctx_reference_dsj"));
4996     $form->setLib('ctx_reference_sagace', _("ctx_reference_sagace"));
4997     $form->setLib('enjeu_ctx', _("contentieux"));
4998     $form->setLib('enjeu_erp', _("ERP"));
4999     $form->setLib('enjeu_urba', _("urbanisme"));
5000     $form->setLib('erp', _("ERP"));
5001     $form->setLib('geom',_('geolocalisaion'));
5002     $form->setLib('instructeur_2', _('Technicien'));
5003     $form->setLib('numero_versement_archive', _("numero"));
5004     $form->setLib('bailleur', _("Bailleur(s)"));
5005     $form->setLib('terrain', _("Localisation"));
5006     $form->setLib('etat_transmission_platau', __("Statut Plat'AU"));
5007     $form->setLib('lien_iiue', '');
5008 softime 13528 $form->setLib('terrain_superficie_calculee', __("Superficie calculée (m²)"));
5009 softime 13137
5010 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
5011     if ($affichage_form === 'ADS') {
5012     $form->setLib('date_decision', _("date de la decision"));
5013     $form->setLib('date_limite', _("limite d'instruction"));
5014 softime 13137 $form->setLib('instructeur_2', __("instructeur secondaire"));
5015 softime 6565 }
5016     if ($affichage_form === 'CTX IN') {
5017     $form->setLib('avis_decision', _("Décision"));
5018     $form->setLib('date_cloture_instruction', _("Date de clôture d'instruction"));
5019     $form->setLib('date_decision', _("Date de décision"));
5020     $form->setLib('date_depot', _("Date de réception"));
5021     $form->setLib('date_limite', _("Tacicité"));
5022     $form->setLib('instructeur',_('Juriste'));
5023     }
5024     if ($affichage_form === 'CTX RE') {
5025     $form->setLib('autorisation_contestee', _("Autorisation contestée"));
5026     $form->setLib('avis_decision', _("Décision"));
5027     $form->setLib('date_cloture_instruction', _("Date de clôture d'instruction"));
5028     $form->setLib('date_decision', _("Date de décision"));
5029     $form->setLib('date_depot', _("Date de recours"));
5030     $form->setLib('date_limite', _("Tacicité"));
5031     $form->setLib('instructeur',_('Juriste'));
5032     }
5033 softime 7067 if ($affichage_form === 'DPC') {
5034 softime 13137 $form->setLib('instructeur_2', __("instructeur secondaire"));
5035 softime 7067 }
5036 softime 10573 if ($affichage_form === 'CONSULTATION ENTRANTE') {
5037     $form->setLib('date_decision', _("date de la decision"));
5038     $form->setLib('date_limite', _("limite d'instruction"));
5039     //
5040     $form->setLib('delai_reponse', __('Délai de réponse'));
5041     $form->setLib('date_consultation', __('Date de la consultation'));
5042     $form->setLib('date_emission', __("Date d'émission"));
5043     $form->setLib('etat_consultation', __('État de la consultation'));
5044     $form->setLib('type_consultation', __('Type de la consultation'));
5045     $form->setLib('texte_fondement_reglementaire', __('Article(s) réglementaire sur le(s)quel(s) se fonde la consultation'));
5046     $form->setLib('texte_objet_consultation', __("Texte de l'objet de la consultation"));
5047     $form->setLib('service_consultant_id', __('Service consultant : identifiant'));
5048     $form->setLib('service_consultant_libelle', __('Service consultant : libellé'));
5049     $form->setLib('service_consultant_insee', __('Service consultant : INSEE'));
5050     $form->setLib('service_consultant_mail', __('Service consultant : mail'));
5051     $form->setLib('service_consultant_type', __('Service consultant : type'));
5052     $form->setLib('service_consultant__siren', __('Service consultant : SIREN'));
5053    
5054     $form->setLib('type_delai', __('Type de délai'));
5055     $form->setLib('objet_consultation', __('Objet de la consultation'));
5056     $form->setLib('date_production_notification', __('Date de production de la notification'));
5057     $form->setLib('date_premiere_consultation', __('Date de la première consultation'));
5058 softime 13528 $form->setLib('instructeur_2', __("instructeur secondaire"));
5059 softime 10573 }
5060 softime 6565 }
5061 mbroquet 3730
5062     function setOnchange(&$form,$maj){
5063     parent::setOnchange($form,$maj);
5064     // mise en majuscule
5065     $form->setOnchange("demandeur_nom","this.value=this.value.toUpperCase()");
5066     $form->setOnchange("demandeur_societe","this.value=this.value.toUpperCase()");
5067     $form->setOnchange("delegataire_nom","this.value=this.value.toUpperCase()");
5068     $form->setOnchange("delegataire_societe","this.value=this.value.toUpperCase()");
5069     $form->setOnchange("architecte_nom","this.value=this.value.toUpperCase()");
5070     $form->setOnchange("terrain_adresse","this.value=this.value.toUpperCase()");
5071     $form->setOnchange('terrain_surface','VerifNumdec(this)');
5072     $form->setOnchange('tax_mtn_part_commu', 'VerifFloat(this, 0)');
5073     $form->setOnchange('tax_mtn_part_depart', 'VerifFloat(this, 0)');
5074     $form->setOnchange('tax_mtn_part_reg', 'VerifFloat(this, 0)');
5075     $form->setOnchange('tax_mtn_total', 'VerifFloat(this, 0)');
5076 softime 6929 $form->setOnchange('tax_mtn_rap', 'VerifFloat(this, 0)');
5077     $form->setOnchange('tax_mtn_part_commu_sans_exo', 'VerifFloat(this, 0)');
5078     $form->setOnchange('tax_mtn_part_depart_sans_exo', 'VerifFloat(this, 0)');
5079     $form->setOnchange('tax_mtn_part_reg_sans_exo', 'VerifFloat(this, 0)');
5080     $form->setOnchange('tax_mtn_total_sans_exo', 'VerifFloat(this, 0)');
5081     $form->setOnchange('tax_mtn_rap_sans_exo', 'VerifFloat(this, 0)');
5082 mbroquet 3730 }
5083    
5084     function setLayout(&$form, $maj) {
5085    
5086 softime 8477 // Récupère le CRUD
5087     $crud = $this->get_action_crud($this->getParameter("maj"));
5088    
5089     // Il n'y a pas d'affichage spécifique dans le cas d'une suppression
5090     if ($crud === 'delete') {
5091     return;
5092     }
5093    
5094 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
5095 softime 10573 if ($affichage_form === 'ADS' || $affichage_form === 'DPC' || $affichage_form === 'CONSULTATION ENTRANTE') {
5096     // Le contrôle de données est seulement possible si on est pas en mode service consulté.
5097     // et si le champ dossier_platau du dossier d'autorisation type detaillé est à true
5098     if ($this->f->is_option_mode_service_consulte_enabled() === false
5099 softime 10808 && $this->f->is_type_dossier_platau($this->getVal('dossier_autorisation')) === true
5100     && $this->getVal('etat_transmission_platau') !== 'jamais_transmissible') {
5101     //
5102 softime 10573 $required_fields_platau = $this->check_platau_required_fields($this->getVal('dossier'));
5103    
5104     if (isset($required_fields_platau['is_ok']) && $required_fields_platau['is_ok'] === false) {
5105     $class = 'demat-color demat-color-text';
5106     $message = __("La transmission à Plat'AU n'est pas possible car certains champs requis ne sont pas saisis.");
5107     if ($this->getVal('etat_transmission_platau') == "transmis_mais_non_transmissible") {
5108     $message = __("La transmission des modifications à Plat'AU n'est pas possible car certains champs requis ne sont pas saisis.");
5109     }
5110     $this->f->display_panel_information($class, $message, $required_fields_platau['required_fields_empty'], __('Champs requis'), 'demat-color');
5111     }
5112     }
5113 softime 6565 // En-tête
5114     $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
5115 mbroquet 3730
5116 softime 6565 // Col1 : Fieldset "Dossier d'Instruction"
5117     $form->setBloc('om_collectivite', 'D', '', 'col_9');
5118 mbroquet 3730
5119 softime 6565 $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
5120 softime 10573 $form->setFieldset('tax_secteur', 'F');
5121 softime 6565
5122 mbroquet 3730
5123 softime 10573 $form->setBloc('tax_secteur', 'F');
5124 softime 6565
5125     // Col2 : 3 fieldsets
5126     $form->setBloc('enjeu_urba', 'D', '', 'col_3');
5127 mbroquet 3730
5128 softime 6565 // Fieldset "Enjeu"
5129     $form->setFieldset('enjeu_urba', 'D', _("Enjeu"));
5130     $form->setFieldset('enjeu_ctx', 'F');
5131     // Fieldset "Qualification"
5132     $form->setFieldset('erp', 'D', _("Qualification"));
5133 softime 10968 $form->setFieldset('etat_transmission_platau', 'F');
5134 softime 6565 // Fieldset "Archive"
5135     $form->setFieldset('numero_versement_archive', 'D', _("Archive"));
5136     $form->setFieldset('date_demande', 'F');
5137    
5138     $form->setBloc('date_demande', 'F');
5139 mbroquet 3730 $form->setBloc('date_demande', 'F');
5140    
5141 softime 6565 // Fieldset "Instruction"
5142     $form->setBloc('date_depot', 'D', '', 'col_12');
5143     $form->setFieldset('date_depot', 'D', _('Instruction'), 'col_12');
5144 mbroquet 3730
5145 softime 6565 // Fieldset "Suivi"
5146     $form->setBloc('date_depot', 'D', '', 'col_12');
5147    
5148     $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
5149     // Col 1
5150     $form->setBloc('date_depot', 'D', '', 'col_6');
5151     $form->setBloc('date_depot', 'D');
5152     $form->setBloc('date_dernier_depot', 'F');
5153     $form->setBloc('date_limite', 'D', '', 'interligne');
5154     $form->setBloc('date_limite_incompletude', 'F');
5155 mbroquet 3730 $form->setBloc('date_limite_incompletude', 'F');
5156 softime 6565 // Col 2
5157     $form->setBloc('etat', 'D', '', 'col_6');
5158     $form->setBloc('etat', 'D');
5159     $form->setBloc('etat', 'F');
5160     $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
5161     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
5162 mbroquet 3730 $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
5163 softime 6565 $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
5164    
5165     $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
5166 mbroquet 3730
5167 softime 6565 // Bloc 2 fieldsets
5168     $form->setBloc('date_decision', 'D', '', 'col_12');
5169 mbroquet 3730
5170 softime 6565 // Col 1 Fieldset "Décision"
5171     $form->setFieldset('date_decision', 'D', _('Decision'), 'col_6');
5172     $form->setFieldset('avis_decision','F','');
5173     // Col 2 Fieldset "Validité de l'autorisation"
5174     $form->setFieldset('date_validite', 'D', _("Validite de l'autorisation"), 'col_6');
5175     $form->setFieldset('date_validite','F','');
5176 mbroquet 3730
5177 softime 6565 $form->setBloc('date_validite', 'F'); // Fin bloc 2 fieldsets
5178 mbroquet 3730
5179 softime 6565 $form->setFieldset('date_conformite','F','');
5180     $form->setBloc('date_conformite', 'F'); // Fin Instruction
5181 mbroquet 3730
5182 softime 6929 // Fieldset "Simulation des taxes"
5183 softime 10573 $form->setBloc('tax_mtn_part_commu', 'D', '', 'col_12');
5184     $form->setFieldset('tax_mtn_part_commu', 'D', _("Simulation des taxes"), 'startClosed');
5185 softime 6929 //
5186 softime 10573 $form->setBloc('tax_mtn_part_commu', 'D', '', 'col_12');
5187     $form->setFieldset('tax_mtn_part_commu', 'D', _("Taxe d'aménagement"), 'collapsible');
5188 softime 6929 $form->setFieldset('tax_mtn_total_sans_exo', 'F', '');
5189     $form->setBloc('tax_mtn_total_sans_exo', 'F');
5190     //
5191     $form->setBloc('tax_mtn_rap', 'D', '', 'col_12');
5192     $form->setFieldset('tax_mtn_rap', 'D', _("Redevance d'archéologie préventive"), 'collapsible');
5193     $form->setFieldset('tax_mtn_rap_sans_exo', 'F', '');
5194     $form->setBloc('tax_mtn_rap_sans_exo', 'F');
5195     //
5196     $form->setFieldset('tax_mtn_rap_sans_exo', 'F', '');
5197     $form->setBloc('tax_mtn_rap_sans_exo', 'F');
5198 mbroquet 3730
5199 softime 7067 // Fieldset "Localisation"
5200 softime 6565 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
5201 mbroquet 3730
5202 softime 7067 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
5203 softime 6565 // Col 1
5204     $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
5205     $form->setBloc('terrain_references_cadastrales', 'F');
5206     // Col 2
5207     $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
5208 softime 13528 $form->setBloc('terrain_superficie_calculee', 'F');
5209 mbroquet 3730
5210 softime 13528 $form->setFieldset('terrain_superficie_calculee', 'F', '');
5211 mbroquet 3730
5212 softime 13528 $form->setBloc('terrain_superficie_calculee', 'F');
5213 softime 11585
5214     // Fieldset "Plat'AU : identifiants techniques"
5215     $form->setBloc('lien_iiue', 'D', '', 'col_12');
5216     $form->setFieldset('lien_iiue', 'D', __("Plat'AU - Identifiants techniques"), 'demat-color-fieldset startClosed');
5217     $form->setFieldset('lien_iiue', 'F', '');
5218     $form->setBloc('lien_iiue', 'F');
5219 softime 6565 }
5220 softime 10573 // CONSULTATION ENTRANTE
5221     // Vérifie que le dossier a été déposé électroniquement
5222 softime 10808 if ($affichage_form === 'CONSULTATION ENTRANTE'
5223 softime 13137 && ($this->get_source_depot_from_demande() === PLATAU
5224     || $this->get_source_depot_from_demande() === PORTAL)) {
5225 softime 10573 // Fieldset "Consultation"
5226     $form->setBloc('consultation_entrante', 'D', '', 'col_12');
5227     $form->setFieldset('consultation_entrante', 'D', __('Consultation'), '');
5228     $form->setBloc('consultation_entrante', 'D', "", "col_6");
5229     $form->setBloc('type_consultation', 'F');
5230     $form->setBloc('texte_fondement_reglementaire', 'D', "", "col_6");
5231     $form->setBloc('dossier_consultation', 'F');
5232     $form->setFieldset('dossier_consultation', 'F', '');
5233     $form->setBloc('dossier_consultation', 'F');
5234     }
5235 softime 6565 // RECOURS
5236     if ($affichage_form === 'CTX RE') {
5237     // Fieldset "Dossier d'Instruction"
5238     $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
5239     $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
5240     $form->setFieldset('date_demande', 'F');
5241     $form->setBloc('date_demande', 'F');
5242 mbroquet 3730
5243 softime 6565 // Fieldset "Instruction"
5244     $form->setBloc('date_depot', 'D', '', 'col_12');
5245     $form->setFieldset('date_depot', 'D', _('Instruction'), 'col_12');
5246 mbroquet 3730
5247 softime 6565 // Fieldset "Suivi"
5248     $form->setBloc('date_depot', 'D', '', 'col_12');
5249    
5250     $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
5251 mbroquet 3730 // Col 1
5252 softime 6565 $form->setBloc('date_depot', 'D', '', 'col_6');
5253     // $form->setBloc('date_depot', 'D');
5254     // $form->setBloc('date_dernier_depot', 'F');
5255     // $form->setBloc('date_limite', 'D', '');
5256     // $form->setBloc('date_limite_incompletude', 'F');
5257     $form->setBloc('date_cloture_instruction', 'F');
5258 mbroquet 3730 // Col 2
5259 softime 6565 $form->setBloc('etat', 'D', '', 'col_6');
5260     $form->setBloc('etat', 'D');
5261     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
5262     // $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
5263     // $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
5264     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
5265     $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
5266    
5267     $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
5268 mbroquet 3730
5269 softime 6565 // Bloc 2 fieldsets
5270     $form->setBloc('date_decision', 'D', '', 'col_12');
5271 mbroquet 3730
5272 softime 6565 // Col 1 Fieldset "Décision"
5273     $form->setFieldset('date_decision', 'D', _('Decision'), 'col_12');
5274     $form->setFieldset('avis_decision','F','');
5275     // Col 2 Fieldset "Validité de l'autorisation"
5276    
5277     $form->setBloc('date_validite', 'F'); // Fin bloc 2 fieldsets
5278    
5279     $form->setFieldset('date_conformite','F','');
5280     $form->setBloc('date_conformite', 'F'); // Fin Instruction
5281    
5282 softime 7067 // Fieldset "Localisation"
5283 softime 6565 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
5284    
5285 softime 7067 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
5286 softime 6565 // Col 1
5287     $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
5288     $form->setBloc('terrain_references_cadastrales', 'F');
5289     // Col 2
5290     $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
5291 softime 13528 $form->setBloc('terrain_superficie_calculee', 'F');
5292 softime 6565
5293 softime 13528 $form->setFieldset('terrain_superficie_calculee', 'F', '');
5294 softime 6565
5295 softime 13528 $form->setBloc('terrain_superficie_calculee', 'F');
5296 softime 6565 }
5297    
5298     // INFRACTION
5299     if ($affichage_form === 'CTX IN') {
5300    
5301     // Fieldset "Dossier d'Instruction"
5302     $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
5303     $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
5304 softime 13137 $form->setFieldset('etat_transmission_platau', 'F');
5305     $form->setBloc('etat_transmission_platau', 'F');
5306 softime 6565
5307 softime 13137 // Fieldset "Archive"
5308     $form->setBloc('numero_versement_archive', 'D', '', 'col_12');
5309     $form->setFieldset('numero_versement_archive', 'DF', __("Archive"));
5310     $form->setBloc('numero_versement_archive', 'F', '');
5311    
5312 softime 6565 // Fieldset "Instruction"
5313     $form->setBloc('date_depot', 'D', '', 'col_12');
5314 softime 13137 $form->setFieldset('date_depot', 'D', _('Instruction'));
5315 softime 6565 // Fieldset "Suivi"
5316 softime 13137 $form->setBloc('date_depot', 'D', '', '');
5317 softime 6565 $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
5318     // Col 1
5319     $form->setBloc('date_depot', 'D', '', 'col_6');
5320     $form->setBloc('date_depot', 'D');
5321     $form->setBloc('date_dernier_depot', 'F');
5322     $form->setBloc('date_limite', 'D', '', 'interligne');
5323     $form->setBloc('date_limite_incompletude', 'F');
5324     $form->setBloc('date_limite_incompletude', 'F');
5325     // Col 2
5326     $form->setBloc('etat', 'D', '', 'col_6');
5327     $form->setBloc('etat', 'D');
5328     $form->setBloc('etat', 'F');
5329     $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
5330     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
5331     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
5332     $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
5333     $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
5334     // Fieldset "Décision"
5335     $form->setFieldset('date_decision', 'D', _('Decision'), 'col_12');
5336     $form->setFieldset('date_conformite','F',''); // Fin Décision
5337     $form->setFieldset('date_conformite','F','');
5338     $form->setBloc('date_conformite', 'F'); // Fin Instruction
5339    
5340 softime 7067 // Fieldset "Localisation"
5341 softime 6565 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
5342 softime 7067 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
5343 softime 6565 // Col 1
5344     $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
5345     $form->setBloc('terrain_references_cadastrales', 'F');
5346     // Col 2
5347     $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
5348 softime 13528 $form->setBloc('terrain_superficie_calculee', 'F');
5349     $form->setFieldset('terrain_superficie_calculee', 'F', '');
5350     $form->setBloc('terrain_superficie_calculee', 'F');
5351 softime 6565
5352     // Fieldset "Demandeurs"
5353     // → cf. formSpecificContent()
5354     }
5355 mbroquet 3730 }
5356    
5357     /**
5358     * Permet de retourner si le dossier est incomplet notifié
5359     *
5360     * @return boolean true si incomplet notifié
5361     */
5362     function is_incomplet_notifie() {
5363     // Si le dossier est défini en tant qu'incomplet notifie
5364     if($this->getVal('incomplet_notifie') == 't' AND
5365     $this->getVal('incompletude') == 't') {
5366     return true;
5367     }
5368     return false;
5369     }
5370    
5371 softime 6929
5372 fmichon 4708 /**
5373 softime 7366 * Vérifie que le dossier d'instruction en cours ne soit pas instruit.
5374     * Ne sont pas compté comme instruit les dossiers n'ayant que des événements
5375     * d'instruction de type 'affichage'.
5376 softime 6929 *
5377     * @return boolean
5378     */
5379 softime 7366 function has_only_recepisse() {
5380 softime 6929
5381 softime 7366 // Récupère la liste des instructions du dossier
5382 softime 6929 $list_instructions = $this->get_list_instructions(true);
5383    
5384 softime 7366 // Si le dossier a pour seule instruction le récépissé de la demande
5385     if (count($list_instructions) === 1
5386     && $list_instructions[0] === $this->get_demande_instruction_recepisse()) {
5387 softime 6929 //
5388 softime 7366 return true;
5389 softime 6929 }
5390    
5391     //
5392 softime 7366 return false;
5393 softime 6929 }
5394    
5395    
5396     /**
5397 fmichon 4708 * TRIGGER - triggerajouterapres.
5398     *
5399     * - Interface avec le référentiel ERP [108]
5400     * - Gestion des données techniques liées
5401     * - Mise à jour du DA
5402     * - Gestion des références cadastrales / parcelles liées
5403     *
5404     * @return boolean
5405     */
5406 softime 8989 function triggerajouterapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
5407     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
5408 mbroquet 3730
5409 softime 13528 // si la version du DI n'est pas zéro
5410     $version = $this->valF['version'];
5411     if (intval($version) > 0) {
5412    
5413     // récupération du DI qui vient d'être créé
5414     $di = $this->valF['dossier'];
5415     if (empty($di_inst = $this->f->findObjectById('dossier', $di))) {
5416     $this->addToMessage(sprintf(
5417     __("Erreur lors de la récupération du DI %s (dossier non-trouvé)"),
5418     $di));
5419     $this->correct = false;
5420     return false;
5421     }
5422    
5423     $collectivite = $this->valF['om_collectivite'];
5424     $da = $this->valF['dossier_autorisation'];
5425     $commune = $this->f->get_submitted_post_value("commune");
5426    
5427     $ret = $di_inst->replicate_geolocalisation($di, $da, $collectivite, $commune);
5428     if (is_string($ret) || $ret === false) {
5429     if (is_string($ret)) {
5430     $this->addToMessage($ret);
5431     }
5432     $this->correct = false;
5433     return false;
5434     }
5435     }
5436    
5437 fmichon 4708 /**
5438     * Interface avec le référentiel ERP.
5439     *
5440     * (WS->ERP)[108] Dépôt de dossier DAT -> AT
5441     * Déclencheur :
5442     * - L'option ERP est activée
5443     * - Validation du formulaire d'ajout d'une demande de nouveau dossier
5444     * de type AT
5445     */
5446     //
5447 softime 8989 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
5448 fmichon 4708 && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__at')) {
5449     //
5450     $infos = array(
5451     "dossier_instruction" => $this->valF['dossier'],
5452     );
5453     //
5454     $ret = $this->f->send_message_to_referentiel_erp(108, $infos);
5455     if ($ret !== true) {
5456     $this->cleanMessage();
5457     $this->addToMessage(_("Une erreur s'est produite lors de la notification (108) du référentiel ERP. Contactez votre administrateur."));
5458     return false;
5459 mbroquet 3730 }
5460 fmichon 4708 $this->addToMessage(_("Notification (108) du référentiel ERP OK."));
5461     }
5462    
5463     /**
5464     * Gestion des données techniques liées.
5465     */
5466     // On ajoute les données techniques
5467 softime 8989 if ($this->ajoutDonneesTechniquesDI($id, $val) === false) {
5468 mbroquet 3730 //
5469 fmichon 4708 $this->addToMessage(_("Erreur lors de l'enregistrement du dossier.")." "._("Contactez votre administrateur."));
5470 mbroquet 3730 $this->correct = false;
5471     return false;
5472     }
5473    
5474 fmichon 4708 /**
5475     * Mise à jour des données du DA.
5476     */
5477     //
5478     $inst_da = $this->get_inst_dossier_autorisation($this->valF["dossier_autorisation"]);
5479     //
5480 softime 8640 $params = array(
5481     'di_id' => $this->valF[$this->clePrimaire],
5482     );
5483     if ($inst_da->majDossierAutorisation($params) === false) {
5484 fmichon 4708 //
5485     $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
5486     $this->correct = false;
5487     return false;
5488     }
5489    
5490     /**
5491     * Gestion des références cadastrales / parcelles liées.
5492     */
5493 mbroquet 3730 // Si le champ des références cadastrales n'est pas vide
5494     if ($this->valF['terrain_references_cadastrales'] != '') {
5495     // Ajout des parcelles dans la table dossier_parcelle
5496 softime 8989 $this->ajouter_dossier_parcelle(
5497     $this->valF['dossier'],
5498     $this->valF['terrain_references_cadastrales']
5499     );
5500 softime 6565 }
5501 mbroquet 3730
5502 softime 6565 /**
5503     * Notification de l'éventuelle autorisation contestée
5504     */
5505     if ($this->valF['autorisation_contestee'] !== null) {
5506     // Instancie la classe dossier_message
5507     $dossier_message = $this->get_inst_dossier_message(']');
5508     // Ajoute le message de notification
5509 softime 12124 $dossier_message_val = array(
5510     'dossier' => $this->valF['autorisation_contestee'],
5511     'type' => __('Autorisation contestée'),
5512     'emetteur' => $this->f->get_connected_user_login_name(),
5513     'login' => $_SESSION['login'],
5514     'date_emission' => date('Y-m-d H:i:s'),
5515     'contenu' => sprintf(
5516     __('Cette autorisation a été contestée par le recours %s.'),
5517     $this->valF['dossier']
5518     )
5519     );
5520 softime 6565 // Si une erreur se produit lors de l'ajout
5521 softime 12124 if ($dossier_message->add_notification_message($dossier_message_val, false, true) !== true) {
5522 softime 6565 // Message d'erreur affiché à l'utilisateur
5523     $this->addToMessage(_("L'autorisation contestée n'a pas pu être notifiée du recours."));
5524     $this->correct = false;
5525     return false;
5526     }
5527 mbroquet 3730 }
5528 softime 12433 // Gestion dossier operateur liées.
5529     //
5530     // En mode service consulté, on ajoute suite à la création du dossier un
5531     // élément dans la table dossier_operateur qui permettra par la suite d'effectuer
5532     // la désignation de l'opérateur
5533     if ($this->f->is_option_mode_service_consulte_enabled() === true) {
5534     // On ajoute le dossier opérateur
5535     if ($this->ajoutDossierOperateurDI($id, $val) === false) {
5536 mbroquet 3730
5537 softime 12433 $this->addToMessage(_("Erreur lors de l'enregistrement du dossier.")." "._("Contactez votre administrateur."));
5538     $this->correct = false;
5539     return false;
5540     }
5541     }
5542    
5543 softime 10573 /**
5544     * Gestion des tâches pour la dématérialisation
5545     */
5546 softime 6565 //
5547 softime 10808 if ($this->f->is_type_dossier_platau($this->valF['dossier_autorisation'])
5548     && $this->valF['etat_transmission_platau'] !== 'jamais_transmissible') {
5549 softime 13528 // Pour les dossiers d'instruction dont la source de dépôt est différent de PLAT'AU
5550     if (isset($val['source_depot']) === false || $val['source_depot'] !== PLATAU) {
5551     // Gérer l'ajout du DA si pas lié à un objet PLAT'AU
5552     // Nécessaire pour les dossiers d'instruction sur existant dont l'initial n'est pas
5553     // transmis à PLAT'AU
5554     $inst_lien = $this->f->get_inst__om_dbform(array(
5555     "obj" => "lien_id_interne_uid_externe",
5556     "idx" => ']',
5557 softime 13137 ));
5558 softime 13528 $is_exists = $inst_lien->is_exists('dossier_autorisation', $inst_da->getVal('dossier_autorisation'));
5559     if (! $is_exists) {
5560     $inst_task = $this->f->get_inst__om_dbform(array(
5561     "obj" => "task",
5562     "idx" => 0,
5563 softime 13137 ));
5564 softime 13528 $task_val = array(
5565     'type' => 'creation_DA',
5566     'object_id' => $inst_da->getVal('dossier_autorisation'),
5567     'dossier' => $inst_da->getVal('dossier_autorisation'),
5568     );
5569     // Si le mode service consulté n'est pas activé
5570     // et que le dossier est dans l'état 'non_transmissible'
5571     if ($this->f->is_option_mode_service_consulte_enabled() === false
5572     && $this->valF['etat_transmission_platau'] === 'non_transmissible') {
5573     // Passage du statut de la task en draft
5574     $task_val['state'] = $inst_task::STATUS_DRAFT;
5575     }
5576     $add_task = $inst_task->add_task(array('val' => $task_val));
5577     if ($add_task === false) {
5578     $this->addToMessage(sprintf('%s %s',
5579     __("Une erreur s'est produite lors de la création tâche."),
5580     __("Veuillez contacter votre administrateur.")
5581     ));
5582     $this->correct = false;
5583     return false;
5584     }
5585 softime 13137 }
5586 softime 13528
5587     // Ajout de la task creation_DI
5588 softime 10573 $inst_task = $this->f->get_inst__om_dbform(array(
5589     "obj" => "task",
5590     "idx" => 0,
5591     ));
5592     $task_val = array(
5593     'type' => 'creation_DI',
5594     'object_id' => $id,
5595     'dossier' => $id,
5596     );
5597 softime 13528 // Si le mode service consulté n'est pas activé
5598     // et que le dossier est dans l'état 'non_transmissible'
5599 softime 10573 if ($this->f->is_option_mode_service_consulte_enabled() === false
5600     && $this->valF['etat_transmission_platau'] === 'non_transmissible') {
5601 softime 13528 // Passage du statut de la task en draft
5602 softime 10573 $task_val['state'] = $inst_task::STATUS_DRAFT;
5603     }
5604     $add_task = $inst_task->add_task(array('val' => $task_val));
5605     if ($add_task === false) {
5606     $this->addToMessage(sprintf('%s %s',
5607     __("Une erreur s'est produite lors de la création tâche."),
5608     __("Veuillez contacter votre administrateur.")
5609     ));
5610     $this->correct = false;
5611     return false;
5612     }
5613     }
5614 softime 13528 // Pour les dossier d'instruction dont la source de dépôt est PLAT'AU
5615 softime 13137 if (isset($val['source_depot']) === true && $val['source_depot'] == PLATAU) {
5616 softime 10573 //
5617     $inst_task = $this->f->get_inst__om_dbform(array(
5618     "obj" => "task",
5619     "idx" => 0,
5620     ));
5621     $task_val = array(
5622     'type' => 'modification_DI',
5623     'object_id' => $id,
5624     'dossier' => $id,
5625     );
5626     $add_task = $inst_task->add_task(array('val' => $task_val));
5627     if ($add_task === false) {
5628     $this->addToMessage(sprintf('%s %s',
5629     __("Une erreur s'est produite lors de la création tâche."),
5630     __("Veuillez contacter votre administrateur.")
5631     ));
5632     $this->correct = false;
5633     return false;
5634 softime 10808 }
5635 softime 10573 }
5636 softime 13528 // Dans tous les cas
5637 softime 10573 $inst_task = $this->f->get_inst__om_dbform(array(
5638     "obj" => "task",
5639     "idx" => 0,
5640     ));
5641     $task_val = array(
5642     'type' => 'depot_DI',
5643     'object_id' => $id,
5644     'dossier' => $id,
5645     );
5646     // Change l'état de la tâche de notification en fonction de l'état de
5647     // transmission du dossier d'instruction
5648     if ($this->f->is_option_mode_service_consulte_enabled() === false
5649     && $this->valF['etat_transmission_platau'] === 'non_transmissible') {
5650     //
5651     $task_val['state'] = $inst_task::STATUS_DRAFT;
5652     }
5653     $add_task = $inst_task->add_task(array('val' => $task_val));
5654     if ($add_task === false) {
5655     $this->addToMessage(sprintf('%s %s',
5656     __("Une erreur s'est produite lors de la création tâche."),
5657     __("Veuillez contacter votre administrateur.")
5658     ));
5659     $this->correct = false;
5660     return false;
5661     }
5662     }
5663     //
5664 softime 6565 return true;
5665 mbroquet 3730 }
5666 softime 6565
5667 mbroquet 3730 /**
5668 softime 10573 * Permet de vérifier que les champs requis pour platau ont été saisis
5669     * et si oui mettre à jour le statut des taches à new
5670     *
5671     * @param string $dossier L'identifiant du dossier.
5672     * @param string $add_or_update Permet de déterminer si on est en ajout ou en modification
5673     *
5674     * @return bool true|false
5675     */
5676 softime 13137 function trigger_platau_required_fields($dossier) {
5677 softime 10573 // Vérification des champs Plat'AU requis pour transmission
5678     $is_required_fields_fulfilled = $this->check_platau_required_fields($dossier);
5679    
5680 softime 13137 // On récupère l'identifiant du dossier d'autorisation en fonction
5681     // de si on est en ajout ou en modification
5682     $dossier_autorisation = $this->getVal('dossier_autorisation') != "" ? $this->getVal('dossier_autorisation') : $this->valF['dossier_autorisation'];
5683    
5684     $inst_task = $this->f->get_inst__om_dbform(array(
5685     "obj" => "task",
5686     "idx" => 0,
5687 softime 10573 ));
5688 softime 10968
5689 softime 13137 // Si les champs requis sont saisis on met à jour le flag
5690     // etat_transmission_platau à transmissible pour indiquer
5691     // que le dossier peut être transmis à Plat'AU et on met
5692     // l'état des tâches draft en new
5693     if ($is_required_fields_fulfilled['is_ok']) {
5694     // Valeurs à mettre à jour
5695     $valF = array();
5696     $valF['etat_transmission_platau'] = 'transmissible';
5697 softime 10573
5698 softime 13137 // Met à jour le quartier du dossier
5699     $cle = " dossier='".$dossier."'";
5700     $res = $this->f->db->autoExecute(
5701     DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
5702     $this->addToLog(__METHOD__."(): db->autoexecute(\""
5703     .DB_PREFIXE."dossier\", ".print_r($valF, true)
5704     .", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
5705     if ($this->f->isDatabaseError($res, true)) {
5706     return false;
5707     }
5708 softime 13528 $this->update_task_state($dossier, 'draft', 'new', $dossier_autorisation);
5709 softime 13137 }
5710     // Si les champs requis ne sont pas saisis on marque
5711     // le dossier comme non transmissible ou transmis mais non transmissible
5712     // et on met l'état des tâches new en draft
5713     if (! $is_required_fields_fulfilled['is_ok']) {
5714     $valF = array();
5715     if ($inst_task->task_exists('creation_DI', $dossier)) {
5716     $valF['etat_transmission_platau'] = 'non_transmissible';
5717 softime 10573 } else {
5718 softime 13137 $valF['etat_transmission_platau'] = 'transmis_mais_non_transmissible';
5719     }
5720 softime 10808
5721 softime 13137 // Met à jour le quartier du dossier
5722     $cle = " dossier='".$dossier."'";
5723     $res = $this->f->db->autoExecute(
5724     DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
5725     $this->addToLog(__METHOD__."(): db->autoexecute(\""
5726     .DB_PREFIXE."dossier\", ".print_r($valF, true)
5727     .", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
5728     if ($this->f->isDatabaseError($res, true)) {
5729     return false;
5730 softime 10573 }
5731 softime 13528 $this->update_task_state($dossier, 'new', 'draft', $dossier_autorisation);
5732 softime 13137 }
5733 softime 10573
5734 softime 13137 return true;
5735 softime 10573 }
5736    
5737     /**
5738     * TODO: replace with '$this->f->findObjectById' ?
5739     *
5740 softime 6565 * Récupère l'instance de dossier message.
5741     *
5742     * @param string $dossier_message Identifiant du message.
5743     *
5744     * @return object
5745     */
5746     private function get_inst_dossier_message($dossier_message = null) {
5747     //
5748     return $this->get_inst_common("dossier_message", $dossier_message);
5749     }
5750    
5751     /**
5752 softime 13137 * Récupère l'identifiant du quartier et de l'arrondissement depuis le code
5753     * impôt.
5754     *
5755     * @param string $code_impots Code impôt du quartier
5756 mbroquet 3730 *
5757     * @return array
5758     */
5759 softime 13137 public function get_quartier_arrondissement_by_code_impot($code_impot) {
5760     if (empty($code_impot) === true) {
5761     return null;
5762 mbroquet 3730 }
5763 softime 13137 $query = sprintf('
5764     SELECT
5765     quartier,
5766     arrondissement
5767     FROM
5768     %1$squartier
5769     WHERE
5770     code_impots = \'%2$s\'',
5771     DB_PREFIXE,
5772     $code_impot
5773     );
5774     $res = $this->f->get_all_results_from_db_query(
5775     $query,
5776     array(
5777     "origin" => __METHOD__,
5778     "force_return" => true,
5779     )
5780     );
5781     if ($res['code'] !== 'KO' &&
5782     count($res['result']) > 0) {
5783     //
5784     return $res['result'][0];
5785 mbroquet 3730 }
5786 softime 13137 return null;
5787 mbroquet 3730 }
5788 softime 10573
5789 mbroquet 3730 /**
5790 softime 10573 * Retourne l'intructeur correspondant le mieux à la parcelle.
5791     *
5792     * @param int $quartier le numéro de quartier
5793     * @param int $arrondissement le numéro d'arrondissement
5794     * @param string $section la section
5795     * @param int $dadt le type détaillé de dossier d'autorisation
5796     * @param int $collectivite l'identifiant de la collectivité
5797     * @param int $commune_id l'identifiant de la commune (optionel)
5798 softime 13137 * @param int $demande_type l'identifiant du type de demande (optionel)
5799 softime 10573 *
5800     * @return array contenant l'instructeur, et éventuellement sa division
5801     */
5802     public function getInstructeurDivision (
5803 softime 11585 int $quartier, int $arrondissement, $section,
5804 softime 13528 int $dadt, int $collectivite, int $commune_id = 0, int $demande_type = 0) : array {
5805 mbroquet 3730
5806 softime 10573 // requête de récupération de l'instructeur à affecter
5807     // (exclu les affectations manuelles supposées avoir été utilisées avant)
5808 softime 13528 $sql = sprintf('
5809 softime 10573 SELECT
5810 softime 13528 instructeur, instructeur_2, section, quartier, arrondissement, dossier_autorisation_type_detaille, dossier_instruction_type
5811 softime 10573 FROM
5812 softime 13528 %1$saffectation_automatique AS AA
5813 softime 10573 WHERE
5814 softime 13528 (AA.affectation_manuelle IS NULL OR AA.affectation_manuelle = \'\')
5815     AND AA.instructeur IS NOT NULL
5816     ',
5817     DB_PREFIXE
5818 softime 10573 );
5819    
5820 softime 13528 // si l'identifiant de la demande_type est spécifié, récupère
5821     // le type de dossier d'instruction
5822 softime 13137 $dit = null;
5823     if (empty($demande_type) === false && $demande_type !== 0) {
5824     $demande_type_inst = $this->f->get_inst__om_dbform(array(
5825     "obj" => "demande_type",
5826     "idx" => $demande_type,
5827     ));
5828     $dit = $demande_type_inst->getVal('dossier_instruction_type');
5829     }
5830    
5831 softime 10573 // ajoute les conditions SQL correspondantes aux paramètres de filtrage
5832     foreach(array(
5833     'om_collectivite ' => $collectivite,
5834     'dossier_autorisation_type_detaille' => $dadt,
5835 softime 13137 'dossier_instruction_type' => $dit,
5836 softime 10573 'quartier' => $quartier,
5837     'arrondissement' => $arrondissement,
5838     'section' => $section
5839     ) as $column => $value) {
5840     if (empty($value) === false) {
5841     if ($column == 'section') {
5842     $valType = 's'; // string
5843     $value = $this->f->db->escapeSimple($value);
5844 softime 13528 } else {
5845     $valType = 'd'; // int
5846     $value = intval($value);
5847 mbroquet 3730 }
5848 softime 10573 $sql .= sprintf(" AND (AA.$column IS NULL OR AA.$column = '%$valType') ",
5849     $value);
5850 mbroquet 3730 }
5851 softime 13528 else {
5852     $sql .= " AND AA.$column IS NULL ";
5853     }
5854 mbroquet 3730 }
5855 softime 10573 if (!empty($commune_id) && $this->f->is_option_dossier_commune_enabled()) {
5856     $commune = $this->f->findObjectById('commune', $commune_id);
5857     if (!empty($commune)) {
5858     $code_departement = $commune->getVal('dep');
5859     $code_commune = preg_replace('/^'.$code_departement.'/', '', $commune->getVal('com'));
5860     $sql .= sprintf(
5861     " AND (AA.communes IS NULL OR AA.communes ~ '%s') ",
5862     "(^|,)$code_departement($code_commune)?(,|$)");
5863     }
5864     else {
5865     $this->addToLog(__METHOD__."(): commune '$commune_id' non trouvée", DEBUG_MODE);
5866     }
5867     }
5868 mbroquet 3730
5869 softime 10573 // ordonnancement et limite à un seul résultat
5870     $sql .= sprintf("
5871     ORDER BY
5872     communes %s,
5873 softime 13528 dossier_instruction_type %s,
5874     dossier_autorisation_type_detaille %s,
5875     quartier %s,
5876 softime 10573 section %s,
5877 softime 13528 arrondissement %s
5878 softime 10573 LIMIT 1
5879     ",
5880     // on positionne les valeurs NULL en premier si le filtre sur ce champ n'a pas été saisi
5881     $commune_id === 0 ? 'NULLS FIRST' : '',
5882 softime 13528 $dit === 0 ? 'NULLS FIRST' : '',
5883     $dadt === 0 ? 'NULLS FIRST' : '',
5884     $quartier === 0 ? 'NULLS FIRST' : '',
5885 softime 10573 empty($section) === true ? 'NULLS FIRST' : '',
5886 softime 13528 $arrondissement === 0 ? 'NULLS FIRST' : ''
5887 softime 10573 );
5888    
5889     // exécution de la requête
5890 softime 13528 $res = $this->f->get_all_results_from_db_query(
5891     $sql,
5892     array(
5893     "origin" => __METHOD__,
5894     )
5895     );
5896     $result = $res['result'];
5897 softime 10573
5898     // si on a récupéré un instructeur correspondant aux critères
5899 softime 13528 if (is_array($result) && count($result) > 0) {
5900 softime 10573
5901     // récupère sa division
5902 softime 13528 $qres = $this->f->get_one_result_from_db_query(
5903     sprintf(
5904     'SELECT
5905     division
5906     FROM
5907     %1$sinstructeur
5908     WHERE
5909     instructeur = %2$d',
5910     DB_PREFIXE,
5911     intval($result[0]['instructeur'])
5912     ),
5913     array(
5914     "origin" => __METHOD__,
5915     )
5916 softime 10573 );
5917 softime 13528 $divisionId = $qres['result'];
5918 softime 10573
5919     // s'il a une division, retourne l'instructeur et sa division
5920     if (empty($divisionId === false)) {
5921     return array(
5922 softime 13528 'instructeur' => $result[0]['instructeur'],
5923     'instructeur_2' => $result[0]['instructeur_2'],
5924 softime 10573 'division' => $divisionId,
5925     );
5926     }
5927    
5928     // aucune division trouvée, retour uniquement l'instructeur
5929 softime 13528 return array(
5930     'instructeur' => $result['instructeur'],
5931     'instructeur_2' => $result[0]['instructeur_2'],
5932     );
5933 softime 10573 }
5934    
5935 softime 13528 return array();
5936 mbroquet 3730 }
5937    
5938     /**
5939     * Récupère le type détaillé d'une dossier d'autorisation.
5940     *
5941     * @param integer $dossier_autorisation DA
5942     *
5943     * @return mixed
5944     */
5945     function get_dossier_autorisation_da_type_detaille($dossier_autorisation) {
5946    
5947     //
5948     $resDATD = "";
5949    
5950     //Récupération du dossier_autorisation_type_detaille concerné par le
5951     //$dossier_autorisation
5952     $sql = "
5953     SELECT
5954     dossier_autorisation_type_detaille
5955     FROM
5956     ".DB_PREFIXE."dossier_autorisation
5957     WHERE
5958     dossier_autorisation = '$dossier_autorisation'";
5959     $this->addToLog(__METHOD__." : db->query(\"$sql\")", VERBOSE_MODE);
5960 softime 8989 $resDATD = $this->f->db->getOne($sql);
5961 mbroquet 3730 $this->f->isDatabaseError($resDATD);
5962    
5963     //
5964     return $resDATD;
5965 softime 12847 }
5966 mbroquet 3730
5967 softime 8989 /**
5968 softime 12847 * Cette méthode permet de gérer l'affectation du dossier.
5969     * Deux cas sont gérées :
5970     * - l'affectation a été sélectionnée par l'utilisateur
5971     * - l'affectation est réalisé automatiquement
5972     *
5973     * Renvoie un tableau associatif contenant l'instructeur, la division et
5974     * l'instructeur secondaire du dossier.
5975     *
5976     * Ex : array(
5977     * 'instructeur' => id_instructeur,
5978     * 'instructeur_2' => id_instructeur_2,
5979     * 'division' => id_division
5980     * )
5981 softime 8989 *
5982 softime 12847 * @param array valeurs récupérées à l'ajout du dossier
5983     * @return array tableau contenant l'affectation du dossier
5984 softime 8989 */
5985 softime 12847 protected function affectation_dossier($val) {
5986     $affectation = array(
5987     'instructeur' => null,
5988     'instructeur_2' => null,
5989     'division' => null,
5990     );
5991     // Cas 1 : Vérifie si une valeur d'affectation automatique
5992     // existe. Si c'est le cas c'est que l'affectation a été choisie
5993     // par l'utilisateur.
5994 softime 13137 // Il s'agit donc d'une affectation manuelle
5995 softime 12847 if (empty($val['affectation_automatique']) === false) {
5996     // Récupération de l'affectation automatique correspondante
5997     $idAffectationAuto = intval($val['affectation_automatique']);
5998     // Préparation des logs
5999     $logMsg = __METHOD__."(): affectation automatique '$idAffectationAuto' ".
6000     "non trouvée";
6001 softime 10573 $logMsgMode = DEBUG_MODE;
6002    
6003 softime 12847 $affectationAuto = $this->f->get_inst__om_dbform(array(
6004 softime 10573 "obj" => "affectation_automatique",
6005 softime 12847 "idx" => $idAffectationAuto
6006 softime 10573 ));
6007 softime 12847 // Vérifie que l'affectation automatique a été correctement récupérée en regardant
6008     // si l'objet instancié a un identifiant non null
6009     if (empty($affectationAuto->getVal($affectationAuto->clePrimaire)) === false) {
6010 softime 10573 // log si l'instructeur n'est pas défini
6011 softime 12847 $logMsg = __METHOD__."(): affectation automatique '$idAffectationAuto' ".
6012 softime 10573 "pas d'instructeur défini";
6013 softime 12847 // On cherche maintenant à récupérer l'instructeur principal visé par cette affectation
6014     // et sa division
6015     $instructeurId = $affectationAuto->getVal('instructeur');
6016     if (! empty($instructeurId)) {
6017 softime 10573 // log si l'instructeur n'existe pas
6018 softime 12847 $logMsg = __METHOD__."(): affectation automatique '$idAffectationAuto' ".
6019     "instructeur '$instructeurId' non trouvé";
6020     // De la même manière que pour l'affectation automatique on instancie
6021     // l'instructeur avec l'identifiant issus de l'affectation et on vérifie
6022     // si l'instructeur a bien été récupéré.
6023 softime 10573 $instructeur = $this->f->get_inst__om_dbform(array(
6024     "obj" => "instructeur",
6025 softime 12847 "idx" => intval($instructeurId)
6026 softime 10573 ));
6027     if (empty($instructeur->getVal($instructeur->clePrimaire)) === false) {
6028 softime 12847 // Récupération de l'identifiant et de la division de l'instructeur principal
6029     $affectation['instructeur'] = $instructeurId;
6030     $affectation['division'] = $instructeur->getVal('division');
6031 softime 10573
6032     // log le succès
6033 softime 12847 $logMsg = __METHOD__."(): affectation automatique '$idAffectationAuto' ".
6034     "instructeur [".$affectation['instructeur']."] ".
6035 softime 10573 "'".$instructeur->getVal('nom')."' affecté, avec sa division ".
6036 softime 12847 "'".$affectation['division']."'";
6037 softime 10573 $logMsgMode = EXTRA_VERBOSE_MODE;
6038     }
6039 mbroquet 3730 }
6040 softime 12847 // Affichage des log de la récupération de l'instructeur principal et de sa division
6041 softime 10573 $this->addToLog($logMsg, $logMsgMode);
6042    
6043 softime 12847 // Si l'affectation donne aussi un instructeur secondaire on le récupère
6044     $instructeur2Id = $affectationAuto->getVal('instructeur_2');
6045 softime 10573 // log si aucun instructeur secondaire est défini
6046 softime 12847 $logMsg = __METHOD__."(): affectation automatique '$idAffectationAuto' ".
6047 softime 10573 "pas de second instructeur défini";
6048     $logMsgMode = EXTRA_VERBOSE_MODE;
6049 softime 12847 if (empty($instructeur2Id) === false) {
6050 softime 10573 // log si l'instructeur n'existe pas
6051 softime 12847 $logMsg = __METHOD__."(): affectation automatique '$idAffectationAuto' ".
6052     "second instructeur '$instructeur2Id' non trouvé";
6053 softime 10573 $logMsgMode = DEBUG_MODE;
6054 softime 12847 // Instancie l'instructeur secondaire et vérifie si il a bien été récupéré
6055 softime 10573 $instructeur2 = $this->f->get_inst__om_dbform(array(
6056     "obj" => "instructeur",
6057 softime 12847 "idx" => intval($instructeur2Id)
6058 softime 10573 ));
6059     if (empty($instructeur2) === false) {
6060 softime 12847 // Récupération de l'identifiant l'instructeur secondaire
6061     $affectation['instructeur_2'] = $instructeur2Id;
6062 softime 10573
6063     // log le succès
6064 softime 12847 $logMsg = __METHOD__."(): affectation automatique '$idAffectationAuto' ".
6065     "second instructeur [".$affectation['instructeur_2']."] ".
6066 softime 10573 "'".$instructeur2->getVal('nom')."' affecté";
6067     $logMsgMode = EXTRA_VERBOSE_MODE;
6068     }
6069     }
6070 softime 12847 // Affichage des log de la récupération de l'instructeur secondaire
6071 softime 10573 $this->addToLog($logMsg, $logMsgMode);
6072    
6073     // succès : plus rien à logger
6074     $logMsg = null;
6075     $logMsgMode = null;
6076 mbroquet 3730 }
6077 softime 10573
6078     // affectation automatique inexistante
6079     if (empty($logMsg) === false && empty($logMsgMode) === false) {
6080     $this->addToLog($logMsg, $logMsgMode);
6081 softime 6565 }
6082 mbroquet 3730 }
6083 softime 10573
6084    
6085 softime 12847 // Cas 2 : Si aucune affectation automatique n'a été choisi alors on cherche la plus adaptée
6086 softime 10573
6087 softime 12847 // si l'instructeur n'a pas déjà été récupéré et si on a pas de numéro de dossier d'autorisation
6088     // alors l'affectation ne pourra pas être effectué sur ce dossier
6089 softime 13137 if (empty($affectation['instructeur']) === true
6090     && empty($val['dossier_autorisation']) === false) {
6091 softime 10573
6092 softime 12847 // Sinon on récupère le type détaillé du DA
6093     $dadt = $this->get_dossier_autorisation_da_type_detaille($val['dossier_autorisation']);
6094    
6095 softime 10573 // si la commune est spécifiée
6096     $commune_id = 0;
6097 softime 12847 if (isset($val['commune']) && $this->f->is_option_dossier_commune_enabled()) {
6098     $commune_id = $val['commune'];
6099 softime 10573 }
6100    
6101     // récupération de l'instructeur ainsi que de sa division
6102     $instructeurDivision = $this->getInstructeurDivision(
6103 softime 12847 intval($val['quartier']),
6104     intval($val['arrondissement']),
6105     $val['section'],
6106     intval($dadt),
6107     intval($val['om_collectivite']),
6108 softime 13137 intval($commune_id),
6109     intval($val['demande_type'])
6110 softime 10573 );
6111    
6112 softime 12847 if (! empty($instructeurDivision['instructeur']) === true &&
6113     ! empty($instructeurDivision['division']) === true) {
6114     $affectation['instructeur'] = $instructeurDivision['instructeur'];
6115     $affectation['division'] = $instructeurDivision['division'];
6116 softime 10573 }
6117    
6118 softime 13528 if (isset($instructeurDivision['instructeur_2']) === true
6119     && empty($instructeurDivision['instructeur_2']) === false) {
6120     //
6121     $affectation['instructeur_2'] = $instructeurDivision['instructeur_2'];
6122 softime 10573 }
6123     }
6124 softime 12847
6125     // Préviens l'utilisateur si l'affectation du dossier n'a pas pu être réalisée.
6126     if (empty($affectation['instructeur']) === true) {
6127     $affMsg = "<br/> "._("Aucun instructeur compatible avec ce dossier trouve, ".
6128     "contactez votre administrateur afin d'en assigner un ".
6129     "a ce dossier.")." <br/>";
6130 softime 10573
6131 softime 12847 if ($this->f->isAccredited("dossier_modifier_instructeur") === true) {
6132     $affMsg = "<br/> "._("Pensez a assigner un instructeur a ce dossier.")." <br/>";
6133     }
6134 softime 10573 $this->addToMessage($affMsg);
6135     }
6136    
6137 softime 12847 return $affectation;
6138 mbroquet 3730 }
6139    
6140 fmichon 4708 /**
6141     * TRIGGER - triggermodifierapres.
6142     *
6143     * - Interface avec le référentiel ERP [101]
6144     * - Interface avec le référentiel ERP [102][103]
6145 softime 6272 * - Interface avec le référentiel ERP [114]
6146 fmichon 4708 * - Gestion des demandeurs liés
6147     * - Gestion des références cadastrales / parcelles liées
6148     * - Gestion des taxes
6149 softime 8989 *
6150 fmichon 4708 * @return boolean
6151     */
6152 softime 8989 function triggermodifierapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
6153     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
6154    
6155 softime 6565 // Mise à jour DA si miroir du DI
6156     $inst_da = $this->get_inst_dossier_autorisation($this->getVal('dossier_autorisation'));
6157     if ($inst_da->is_dossier_autorisation_visible() === false) {
6158 softime 8640 $params = array(
6159     'di_id' => $this->getVal($this->clePrimaire),
6160     );
6161     if ($inst_da->majDossierAutorisation($params) === false) {
6162 softime 6565 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
6163     return false;
6164     }
6165     }
6166 fmichon 4708
6167     /**
6168     * Interface avec le référentiel ERP.
6169     *
6170     * (WS->ERP)[101] ERP Qualifié -> AT
6171     * Déclencheur :
6172     * - L'option ERP est activée
6173     * - Le dossier est de type AT
6174     * - Le dossier est marqué comme "connecté au référentiel ERP"
6175     * - Le formulaire de modification du dossier est validé avec le
6176     * marqueur "à qualifier" à "NON" alors qu'il était précédemment à
6177     * "OUI"
6178     */
6179 softime 8989 //
6180 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
6181 fmichon 4708 && $this->is_connected_to_referentiel_erp() === true
6182     && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__at')
6183     && $this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false) {
6184 softime 4740 // Récupère la liste des contraintes
6185     $contraintes_plu_list = $this->getListContrainte($this->valF['dossier'], false);
6186     // Extrait les libellés de chaque contraintes
6187     $contraintes_plu = array();
6188     $contraintes_plu_string = "";
6189 softime 8989 while ($row =& $contraintes_plu_list->fetchRow(DB_FETCHMODE_ASSOC)) {
6190 softime 4740 //
6191     $contraintes_plu[] = $row['contrainte_libelle'];
6192     }
6193     // Chaîne de caractère listant toutes les contraintes du dossier
6194     $contraintes_plu_string = implode(' ; ', $contraintes_plu);
6195 nhaye 6052 $competence = "";
6196     if ($this->valF['autorite_competente'] !== null) {
6197     $inst_ac = $this->get_inst_autorite_competente($this->valF['autorite_competente']);
6198     $competence = $inst_ac->getVal("libelle");
6199     }
6200 fmichon 4708 //
6201     $infos = array(
6202     "dossier_instruction" => $this->valF['dossier'],
6203 nhaye 6052 "competence" => $competence,
6204 softime 4740 "contraintes_plu" => $contraintes_plu_string,
6205 fmichon 4708 "references_cadastrales" => $this->getReferenceCadastrale($this->valF['dossier']),
6206     );
6207     //
6208     $ret = $this->f->send_message_to_referentiel_erp(101, $infos);
6209     if ($ret !== true) {
6210     $this->cleanMessage();
6211     $this->addToMessage(_("Une erreur s'est produite lors de la notification (101) du référentiel ERP. Contactez votre administrateur."));
6212     return false;
6213 mbroquet 3730 }
6214 fmichon 4708 $this->addToMessage(_("Notification (101) du référentiel ERP OK."));
6215     }
6216 mbroquet 3730
6217 fmichon 4708 /**
6218     * Interface avec le référentiel ERP.
6219     *
6220     * (WS->ERP)[102] Demande de complétude de dossier PC pour un ERP -> PC qui concerne un ERP
6221     * (WS->ERP)[103] Demande de qualification de dossier PC pour un ERP -> PC qui concerne un ERP
6222     * Déclencheur :
6223     * - L'option ERP est activée
6224     * - Le dossier est de type PC
6225     * - Le formulaire de modification du dossier est validé avec le
6226     * marqueur "à qualifier" à "NON" alors qu'il était précédemment à
6227     * "OUI"
6228     * - Le formulaire de modification du dossier est validé avec le
6229     * marqueur "ERP" à "OUI"
6230     */
6231     //
6232 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
6233 fmichon 4708 && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
6234     && $this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false
6235     && $this->valF['erp'] == true) {
6236     //
6237     $infos = array(
6238     "dossier_instruction" => $this->valF['dossier'],
6239     );
6240     // [102] Demande de complétude de dossier PC pour un ERP
6241     $ret = $this->f->send_message_to_referentiel_erp(102, $infos);
6242     if ($ret !== true) {
6243     $this->cleanMessage();
6244     $this->addToMessage(_("Une erreur s'est produite lors de la notification (102) du référentiel ERP. Contactez votre administrateur."));
6245     return false;
6246     }
6247     $this->addToMessage(_("Notification (102) du référentiel ERP OK."));
6248     // [103] Demande de qualification de dossier PC pour un ERP
6249     $ret = $this->f->send_message_to_referentiel_erp(103, $infos);
6250     if ($ret !== true) {
6251     $this->cleanMessage();
6252     $this->addToMessage(_("Une erreur s'est produite lors de la notification (103) du référentiel ERP. Contactez votre administrateur."));
6253     return false;
6254     }
6255     $this->addToMessage(_("Notification (103) du référentiel ERP OK."));
6256     }
6257    
6258     /**
6259 softime 6272 * Interface avec le référentiel ERP.
6260     *
6261     * (WS->ERP)[114] ERP Qualifié -> PC
6262     * Déclencheur :
6263     * - l'option ERP est activée
6264     * - ET le dossier est marqué comme "connecté au référentiel ERP"
6265     * - ET le dossier est de type PC
6266     * - ET
6267     * - soit le formulaire de modification du dossier est validé avec le
6268     * marqueur "enjeu_urba" qui change de statut
6269     * - soit ce marqueur est vrai et le dossier passe à qualifié
6270     */
6271     // Étant donné que l'objet a été modifié en base après sa création,
6272     // il faut le ré-instancier pour récupérer ses informations.
6273 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
6274     "obj" => "dossier",
6275     "idx" => $this->valF['dossier'],
6276     ));
6277 softime 7366 if ($dossier->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
6278 softime 6272 && $dossier->is_connected_to_referentiel_erp() === true
6279     && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
6280     && (($this->getVal('enjeu_urba') == 't') != $this->valF['enjeu_urba']
6281     || ($this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false
6282     && $this->getVal('enjeu_urba') == 't'))) {
6283    
6284     $enjeu = "non";
6285     if ($this->valF['enjeu_urba']) {
6286     $enjeu = "oui";
6287     }
6288    
6289     $infos = array(
6290     "dossier_instruction" => $this->valF['dossier'],
6291     "Dossier à enjeu ADS" => $enjeu
6292     );
6293     //
6294     $ret = $this->f->send_message_to_referentiel_erp(114, $infos);
6295     if ($ret !== true) {
6296     $this->cleanMessage();
6297     $this->addToMessage(_("Une erreur s'est produite lors de la notification (114) du référentiel ERP. Contactez votre administrateur."));
6298     return false;
6299     }
6300     $this->addToMessage(_("Notification (114) du référentiel ERP OK."));
6301     }
6302    
6303     /**
6304 fmichon 4708 * Gestion des demandeurs liés.
6305     */
6306 mbroquet 3730 // Ajout ou modification des demandeurs
6307 softime 8989 $this->insertLinkDossierDemandeur();
6308 mbroquet 3730
6309 fmichon 4708 /**
6310     * Gestion des références cadastrales / parcelles liées.
6311     */
6312 mbroquet 3730 // Si le champ des références cadastrales n'est pas vide
6313     if ($this->getVal('terrain_references_cadastrales')
6314     != $this->valF['terrain_references_cadastrales']) {
6315    
6316     // On supprime toutes les lignes de la table dossier_parcelle qui
6317     // font référence le dossier en cours de modification
6318     $this->supprimer_dossier_parcelle($val['dossier']);
6319    
6320     // Ajout des parcelles dans la table dossier_parcelle
6321     $this->ajouter_dossier_parcelle($val['dossier'],
6322     $val['terrain_references_cadastrales']);
6323    
6324     }
6325    
6326 fmichon 4708 /**
6327     * Gestion des taxes.
6328     */
6329 softime 6929 // Si le champ tax_secteur est modifié et que l'option de simulation des
6330     // taxes est activée
6331     if ($this->getVal('tax_secteur') != $this->valF['tax_secteur']
6332     && $this->f->is_option_simulation_taxes_enabled($this->getVal('om_collectivite')) === true) {
6333 mbroquet 3730
6334     // Valeurs pour le calcul de la taxe d'aménagement
6335 softime 6929 $values = array();
6336     // Instance de la classe donnees_techniques
6337     $donnees_techniques = $this->get_inst_donnees_techniques();
6338     // Récupère les valeurs des données techniques
6339     $values = $donnees_techniques->get_form_val();
6340 mbroquet 3730
6341     // Met à jour les montants du dossier
6342 softime 6929 $update_dossier_tax_mtn = $this->update_dossier_tax_mtn($this->valF['tax_secteur'], $values);
6343     if ($update_dossier_tax_mtn === false) {
6344 mbroquet 3730 //
6345     $this->addToMessage(_("La mise a jour des montants de la simulation de la taxe d'amenagement a echouee."));
6346 softime 6929 //
6347 mbroquet 3730 return false;
6348     }
6349     }
6350    
6351 softime 6272 /**
6352     * Gestion des métadonées des pièces liés.
6353     * Vérifie les méthodes à exécuter configurées dans le connecteur du
6354     * filestorage.
6355     */
6356 mbroquet 3730 //
6357 softime 6272 $ret = $this->post_update_metadata($val);
6358     //
6359     if ($ret === false) {
6360     //
6361     $this->cleanMessage();
6362     $this->addToMessage(_("La mise à jour des métadonnées des pièces liées à ce dossier a échouée."));
6363     return false;
6364     }
6365    
6366 softime 7366 /**
6367     * Gestion des du changement de date de dépôt.
6368     * Vérification préalable de la présence de la date et de sa
6369     * modification.
6370     */
6371 softime 6272 //
6372 softime 7366 if (array_key_exists("date_depot", $val) === true) {
6373     //
6374 softime 7540 $inst_new_date = DateTime::createFromFormat('d/m/Y', $val["date_depot"]);
6375     $inst_old_date = DateTime::createFromFormat('Y-m-d', $this->getVal("date_depot"));
6376     $new_date = $inst_new_date->format('d/m/Y');
6377     $old_date = $inst_old_date->format('d/m/Y');
6378 softime 7366
6379     //
6380     if ($new_date !== $old_date) {
6381     //
6382     $status = $this->update_date_depot($val["date_depot"]);
6383     //
6384     if ($status === false) {
6385     //
6386     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
6387     return false;
6388     }
6389    
6390     }
6391     }
6392 softime 10573
6393     /**
6394     * Gestion de la normalisation de l'adresse.
6395     * En cas de modification de l'adresse du terrain, l'adresse normalisée
6396     * est supprimée.
6397     */
6398     $list_address_keys = array(
6399     'terrain_adresse_voie_numero',
6400     'terrain_adresse_voie',
6401     'terrain_adresse_lieu_dit',
6402     'terrain_adresse_localite',
6403     'terrain_adresse_code_postal',
6404     'terrain_adresse_bp',
6405     'terrain_adresse_cedex',
6406     );
6407     $change = false;
6408     foreach ($list_address_keys as $key) {
6409     if (array_key_exists($key, $val) === true
6410     && $val[$key] !== $this->getVal($key)) {
6411     //
6412     $change = true;
6413     break;
6414     }
6415     }
6416     if ($change === true) {
6417     $this->normalize_address();
6418     }
6419    
6420     if ($this->f->is_option_mode_service_consulte_enabled() === false
6421 softime 10808 && $this->f->is_type_dossier_platau($this->valF['dossier_autorisation']) === true
6422     && $this->getVal('etat_transmission_platau') !== 'jamais_transmissible') {
6423 softime 13137
6424     $trigger_platau_required_fields = $this->trigger_platau_required_fields($this->valF['dossier']);
6425     // Gestion de l'erreur
6426     if (! $trigger_platau_required_fields) {
6427     $this->addToMessage(sprintf('%s %s',
6428     __("Une erreur s'est produite lors de la mise à jour de l'état de transmission du dossier."),
6429     __("Veuillez contacter votre administrateur.")
6430     ));
6431     $this->correct = false;
6432     return false;
6433     }
6434 softime 10573 }
6435    
6436     /**
6437     * Gestion des tâches pour la dématérialisation
6438     */
6439     // Qualification du dossier d'instruction
6440     if ($this->getVal('instructeur') != $this->valF['instructeur']
6441     || $this->getVal('division') != $this->valF['division']) {
6442     //
6443 softime 10808 if ($this->f->is_type_dossier_platau($this->valF['dossier_autorisation'])
6444     && $this->valF['etat_transmission_platau'] !== 'jamais_transmissible'
6445     && ($this->f->is_option_mode_service_consulte_enabled() !== true
6446     || ($this->f->is_option_mode_service_consulte_enabled() === true
6447 softime 13137 && ($this->get_source_depot_from_demande() === PLATAU
6448     || $this->get_source_depot_from_demande() === PORTAL)))) {
6449 softime 10573 //
6450     $inst_task = $this->f->get_inst__om_dbform(array(
6451     "obj" => "task",
6452     "idx" => 0,
6453     ));
6454     $task_val = array(
6455     'type' => 'qualification_DI',
6456     'object_id' => $id,
6457     'dossier' => $id,
6458     );
6459     if ($this->f->is_option_mode_service_consulte_enabled() === false
6460     && $this->valF['etat_transmission_platau'] === 'non_transmissible'
6461     || $this->valF['etat_transmission_platau'] === 'transmis_mais_non_transmissible') {
6462     $task_val['state'] = $inst_task::STATUS_DRAFT;
6463     }
6464     $add_task = $inst_task->add_task(array('val' => $task_val));
6465     if ($add_task === false) {
6466     $this->addToMessage(sprintf('%s %s',
6467     __("Une erreur s'est produite lors de la création tâche."),
6468     __("Veuillez contacter votre administrateur.")
6469     ));
6470     $this->correct = false;
6471     return false;
6472     }
6473     }
6474     }
6475     // Modification du dossier d'instruction
6476     if ($this->f->is_type_dossier_platau($this->valF['dossier_autorisation'])
6477 softime 10808 && $this->valF['etat_transmission_platau'] !== 'jamais_transmissible'
6478 softime 10573 && ($this->f->is_option_mode_service_consulte_enabled() !== true
6479     || ($this->f->is_option_mode_service_consulte_enabled() === true
6480 softime 13137 && ($this->get_source_depot_from_demande() === PLATAU
6481     || $this->get_source_depot_from_demande() === PORTAL)))) {
6482 softime 10573 //
6483     $inst_task = $this->f->get_inst__om_dbform(array(
6484     "obj" => "task",
6485     "idx" => 0,
6486     ));
6487     $task_val = array(
6488     'type' => 'modification_DI',
6489     'object_id' => $id,
6490     'dossier' => $id,
6491     );
6492     // Change l'état de la tâche de notification en fonction de l'état de
6493     // transmission du dossier d'instruction
6494     if ($this->f->is_option_mode_service_consulte_enabled() === false
6495     && $this->valF['etat_transmission_platau'] === 'non_transmissible'
6496     || $this->valF['etat_transmission_platau'] === 'transmis_mais_non_transmissible') {
6497     //
6498     $task_val['state'] = $inst_task::STATUS_DRAFT;
6499     }
6500     $add_task = $inst_task->add_task(array('val' => $task_val));
6501     if ($add_task === false) {
6502     $this->addToMessage(sprintf('%s %s',
6503     __("Une erreur s'est produite lors de la création tâche."),
6504     __("Veuillez contacter votre administrateur.")
6505     ));
6506     $this->correct = false;
6507     return false;
6508     }
6509     // XXX Les données du DA sont mises à jour seulement lors de l'ajout ou modification
6510     // d'une instruction du DI initial et lors de la décision sur le DI non initial.
6511     // Sachant ce comportement, voir si cette tâche modification_DA est bien située.
6512 softime 10968 // $inst_task = $this->f->get_inst__om_dbform(array(
6513     // "obj" => "task",
6514     // "idx" => 0,
6515     // ));
6516     // $task_val = array(
6517     // 'type' => 'modification_DA',
6518     // 'object_id' => $this->getVal('dossier_autorisation'),
6519     // 'dossier' => $this->getVal('dossier_autorisation'),
6520     // );
6521     // // Change l'état de la tâche de notification en fonction de l'état de
6522     // // transmission du dossier d'instruction
6523     // if ($this->f->is_option_mode_service_consulte_enabled() === false
6524     // && $this->valF['etat_transmission_platau'] === 'non_transmissible'
6525     // || $this->valF['etat_transmission_platau'] === 'transmis_mais_non_transmissible') {
6526     // //
6527     // $task_val['state'] = $inst_task::STATUS_DRAFT;
6528     // }
6529     // $add_task = $inst_task->add_task(array('val' => $task_val));
6530     // if ($add_task === false) {
6531     // $this->addToMessage(sprintf('%s %s',
6532     // __("Une erreur s'est produite lors de la création tâche."),
6533     // __("Veuillez contacter votre administrateur.")
6534     // ));
6535     // $this->correct = false;
6536     // return false;
6537     // }
6538 softime 10573 }
6539    
6540 softime 7366 //
6541 mbroquet 3730 return true;
6542     }
6543    
6544 softime 7366 /**
6545 softime 8989 * TRIGGER - triggermodifier.
6546     *
6547     * @return boolean
6548 softime 7366 */
6549 softime 8989 function triggermodifier($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
6550     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
6551 softime 7366 // Si la date de dépôt a changé et si elle valait celle du dernier dépôt
6552     // alors cette dernière prend également sa valeur
6553     if ($this->f->formatDate($this->getVal('date_depot')) !== $val['date_depot']
6554     && $this->f->formatDate($this->getVal('date_depot')) === $this->f->formatDate($this->getVal('date_dernier_depot'))) {
6555     $this->valF['date_dernier_depot'] = $this->valF['date_depot'];
6556     }
6557     //
6558     return true;
6559     }
6560    
6561 mbroquet 3730 /**
6562 softime 7366 * Methode de traitement suite à la modification de la date de dépot.
6563     *
6564     * @param string $new_date_str Nouvelle date de dépot.
6565     *
6566     * @return boolean
6567     */
6568     function update_date_depot($new_date_str) {
6569     $demande = $this->get_inst_demande();
6570 softime 10573 // TODO: should return null instead of false
6571 softime 7366 if ($demande === false) {
6572     return false;
6573     }
6574    
6575     $retour = $this->majDateInstruction($demande->getVal("instruction_recepisse"), $new_date_str);
6576     if ($retour === false) {
6577     return false;
6578     }
6579 softime 11876
6580 softime 7366 $valF = array();
6581     foreach ($demande->champs as $id => $champ) {
6582     $valF[$champ] = $demande->val[$id];
6583     }
6584     $valF['date_demande'] = $new_date_str;
6585 softime 8989 $modification = $demande->modifier($valF);
6586 softime 7366 if ($modification === false) {
6587     return false;
6588     }
6589    
6590     $row_date = array("date_demande" => $new_date_str);
6591 softime 8989 $res = $this->f->db->autoExecute(
6592 softime 7366 DB_PREFIXE."dossier",
6593     $row_date,
6594     DB_AUTOQUERY_UPDATE,
6595     "dossier = '".$this->getVal("dossier")."'"
6596     );
6597     $this->f->addToLog(__METHOD__ . "() : db->autoExecute(" . $res . ")", VERBOSE_MODE);
6598     if ($this->f->isDatabaseError($res, true)) {
6599     return false;
6600     }
6601    
6602 softime 7541 // Si c'est un dossier d'instruction initial
6603     $di_version = $this->get_dossier_instruction_version();
6604     if ($di_version === 0 || $di_version === '0') {
6605     //
6606     $row_date = array("depot_initial" => $new_date_str);
6607 softime 8989 $res = $this->f->db->autoExecute(
6608 softime 7541 DB_PREFIXE."dossier_autorisation",
6609     $row_date,
6610     DB_AUTOQUERY_UPDATE,
6611     "dossier_autorisation = '" . $this->getVal("dossier_autorisation") . "'"
6612     );
6613     $this->f->addToLog(__METHOD__ . "() : db->autoExecute(" . $res . ")", VERBOSE_MODE);
6614     if ($this->f->isDatabaseError($res, true)) {
6615     return false;
6616     }
6617 softime 7366 }
6618     }
6619    
6620    
6621     /**
6622     * Met à jour l'instruction en fonction de la nouvelle date
6623     * ou retourne false si il ya une erreur.
6624     *
6625     * @param integer $instruction_id Identifiant de l'instruction.
6626     * @param string $date_depot Nouvelle date de dépôt.
6627     *
6628     * @return boolean
6629     */
6630     public function majDateInstruction($instruction_id, $date_depot) {
6631    
6632     // Definalise l'instruction de récépissé si nécessaire
6633 softime 7996 $instruction = $this->f->get_inst__om_dbform(array(
6634     "obj" => "instruction",
6635     "idx" => $instruction_id,
6636     ));
6637 softime 7366 $instruction->setParameter('maj', 110);
6638     //
6639     if ($instruction->is_unfinalizable_without_bypass() === true
6640     && $instruction->unfinalize($instruction->valF) === false) {
6641     return false;
6642     }
6643    
6644     // Modifie la date d'événement
6645     $instruction->setParameter('maj', 1);
6646     //
6647     $valF = array();
6648     foreach ($instruction->champs as $id => $champ) {
6649     $valF[$champ] = $instruction->getVal($champ);
6650     }
6651     //
6652     $valF['date_evenement'] = $date_depot;
6653     $valF['date_finalisation_courrier'] = null;
6654     //
6655 softime 8989 $modification = $instruction->modifier($valF);
6656 softime 7366 //
6657     if ($modification === false) {
6658     return false;
6659     }
6660    
6661     // Finalise l'instruction
6662     $instruction->setParameter('maj', 100);
6663     if ($instruction->finalize($instruction->valF) === false) {
6664     return false;
6665     }
6666    
6667     //
6668     return true;
6669     }
6670    
6671     /**
6672 softime 10573 * TODO: replace with '$this->f->findObjectById' ?
6673     *
6674 softime 6272 * Récupère l'instance de l'autorité compétente.
6675     *
6676     * @param string $autorite_competente Identifiant de l'autorité compétente.
6677     *
6678     * @return object
6679     */
6680     function get_inst_autorite_competente($autorite_competente = null) {
6681     //
6682     return $this->get_inst_common("autorite_competente", $autorite_competente);
6683     }
6684    
6685    
6686     /**
6687 softime 6929 * Met à jour les montants des taxes du dossier d'instruction.
6688 mbroquet 3730 *
6689 softime 6929 * @param integer $tax_secteur Secteur communal.
6690     * @param array $val Valeurs des données techniques.
6691 mbroquet 3730 *
6692     * @return boolean
6693     */
6694 softime 6929 public function update_dossier_tax_mtn($tax_secteur, $val = array()) {
6695 mbroquet 3730 // Instance du paramétrage de la taxe d'aménagement
6696     $taxe_amenagement = $this->get_inst_taxe_amenagement();
6697    
6698 softime 6929 // Liste des montants à mettre à jour
6699     $valF = array();
6700     $valF['tax_mtn_part_commu'] = null;
6701     $valF['tax_mtn_part_depart'] = null;
6702     $valF['tax_mtn_part_reg'] = null;
6703     $valF['tax_mtn_total'] = null;
6704     $valF['tax_mtn_rap'] = null;
6705     $valF['tax_mtn_part_commu_sans_exo'] = null;
6706     $valF['tax_mtn_part_depart_sans_exo'] = null;
6707     $valF['tax_mtn_part_reg_sans_exo'] = null;
6708     $valF['tax_mtn_total_sans_exo'] = null;
6709     $valF['tax_mtn_rap_sans_exo'] = null;
6710 mbroquet 3730
6711 softime 6929 // Si le tableau des valeurs n'est pas vide
6712     if ($val !== array()) {
6713 mbroquet 3730
6714 softime 6929 // Si le taux communal est renseigné
6715     if ($taxe_amenagement->getVal('tx_comm_secteur_'.$tax_secteur) !== null
6716     && $taxe_amenagement->getVal('tx_comm_secteur_'.$tax_secteur) !== '') {
6717 mbroquet 3730
6718 softime 6929 // Calcul de la TA
6719     $calcul_ta = $taxe_amenagement->compute_ta($tax_secteur, $val);
6720    
6721     // Si chaque résultat est calculable
6722     if ($calcul_ta !== null && is_array($calcul_ta) === true) {
6723    
6724     // Total des parts de la TA avec exonération
6725     $total_ta = $calcul_ta['commu'] + $calcul_ta['depart'] + $calcul_ta['reg'];
6726     $total_ta_ss_exo = $calcul_ta['commu_ss_exo'] + $calcul_ta['depart_ss_exo'] + $calcul_ta['reg_ss_exo'];
6727    
6728     // Valeurs à mettre à jour, les montants doivent être à l'entier
6729     // inférieur
6730 softime 13528 $valF['tax_mtn_part_commu'] = floor(floatval($calcul_ta['commu']));
6731     $valF['tax_mtn_part_depart'] = floor(floatval($calcul_ta['depart']));
6732     $valF['tax_mtn_part_reg'] = floor(floatval($calcul_ta['reg']));
6733     $valF['tax_mtn_total'] = floor(floatval($total_ta));
6734     $valF['tax_mtn_part_commu_sans_exo'] = floor(floatval($calcul_ta['commu_ss_exo']));
6735     $valF['tax_mtn_part_depart_sans_exo'] = floor(floatval($calcul_ta['depart_ss_exo']));
6736     $valF['tax_mtn_part_reg_sans_exo'] = floor(floatval($calcul_ta['reg_ss_exo']));
6737     $valF['tax_mtn_total_sans_exo'] = floor(floatval($total_ta_ss_exo));
6738 softime 6929 }
6739     }
6740    
6741     // Calcul de la RAP
6742     $calcul_rap = $taxe_amenagement->compute_rap($val);
6743    
6744     // Si chaque résultat est calculable
6745     if ($calcul_rap !== null && is_array($calcul_rap) === true) {
6746    
6747     // RAP avec exonération
6748     $mtn_rap = $calcul_rap['rap'];
6749     // RAP sans exonération
6750     $mtn_rap_ss_exo = $calcul_rap['rap_ss_exo'];
6751    
6752     // Valeurs à mettre à jour, les montants doivent être à l'entier
6753     // inférieur
6754 softime 13528 $valF['tax_mtn_rap'] = floor(floatval($mtn_rap));
6755     $valF['tax_mtn_rap_sans_exo'] = floor(floatval($mtn_rap_ss_exo));
6756 softime 6929 }
6757 mbroquet 3730 }
6758    
6759     // Met à jour l'enregistrement de dossier
6760 softime 8989 $res = $this->f->db->autoExecute(
6761 softime 6929 DB_PREFIXE.$this->table,
6762     $valF,
6763     DB_AUTOQUERY_UPDATE,
6764     $this->clePrimaire ."='".$this->getVal($this->clePrimaire)."'"
6765     );
6766 mbroquet 3730 // Log
6767     $this->f->addToLog(__METHOD__."() : db->autoExecute(".$res.")", VERBOSE_MODE);
6768     //
6769     if ($this->f->isDatabaseError($res, true)) {
6770     //
6771     $this->correct = false;
6772     return false;
6773     }
6774    
6775     //
6776     return true;
6777     }
6778    
6779 softime 8477 /**
6780 softime 8989 * TRIGGER - triggersupprimer.
6781 softime 8477 *
6782     * @return boolean
6783     */
6784 softime 8989 function triggersupprimer($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
6785     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
6786 softime 6929
6787 softime 12654 // Permet de récupérer la le type de demande pour la gestion du numéro de dossier.
6788     $inst_demande = $this->get_inst_demande();
6789     $this->val['demande_type'] = $inst_demande->getVal('demande_type');
6790    
6791 softime 8477 /**
6792     * Gestion de la suppression des tables liées au dossier d'instruction.
6793     * Les fichiers potentiellement liés aux tables ne sont pas supprimés.
6794     */
6795 softime 13528 if (! isset($this->related_tables)) {
6796     $this->set_related_tables();
6797     }
6798 softime 8477 // Supprime les enregistrements des tables
6799 softime 13528 $delete = $this->delete_related_tables($this->related_tables);
6800 softime 8477 if ($delete === false) {
6801     return false;
6802     }
6803    
6804     //
6805     return true;
6806     }
6807    
6808 mbroquet 3730 /**
6809 softime 8989 * TRIGGER - triggersupprimerapres.
6810 softime 8477 *
6811     * @return boolean
6812 mbroquet 3730 */
6813 softime 8989 function triggersupprimerapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
6814     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
6815 mbroquet 3730
6816 softime 8477 /**
6817     * Gestion de la suppression des tables liées au dossier d'instruction.
6818     * Dans le cas d'un dossier d'instruction initial le dossier
6819     * d'autorisation est également supprimé pour libérer la numéroration.
6820     * S'il s'agit d'un dossier d'instruction sur exsitant alors le dossier
6821     * d'autorisation est mise à jour.
6822     * Les fichiers potentiellement liés aux tables ne sont pas supprimés.
6823     */
6824     // S'il s'agit d'une suppression de dossier d'instruction sur existant
6825     if ($this->has_only_initial_di(true) === false) {
6826     // Mise à jour des données du dossier d'autorisation
6827     $da = $this->f->get_inst__om_dbform(array(
6828     "obj" => "dossier_autorisation",
6829     "idx" => $this->getVal("dossier_autorisation"),
6830     ));
6831     $da->majDossierAutorisation();
6832 mbroquet 3730
6833 softime 8477 } else {
6834     // S'il s'agit d'une suppression de dossier d'instruction initial
6835     // Tableau pour la conception des requêtes de suppression
6836     $related_tables = array(
6837     'lien_dossier_autorisation_demandeur' => array(
6838     'condition_field' => 'dossier_autorisation',
6839     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
6840     ),
6841     'dossier_autorisation_parcelle' => array(
6842     'condition_field' => 'dossier_autorisation',
6843     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
6844     ),
6845     'donnees_techniques' => array(
6846     'condition_field' => 'dossier_autorisation',
6847     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
6848     ),
6849     'dossier_autorisation' => array(
6850     'condition_field' => 'dossier_autorisation',
6851     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
6852     ),
6853     );
6854     // Supprime les tables
6855     $delete = $this->delete_related_tables($related_tables);
6856     if ($delete === false) {
6857     return false;
6858     }
6859    
6860 softime 13528 // Compose le nom de la séquence
6861     $datc = $this->getVal('numerotation_type');
6862     $annee = $this->getVal('annee');
6863     $dep = $this->getVal('numerotation_dep');
6864     $com = $this->getVal('numerotation_com');
6865     $seq_name = ! empty($datc) && ! empty($annee) && ! empty($dep) && ! empty($com) ?
6866     sprintf(
6867     '%sdossier_%s_%s_%s_%s_seq',
6868     DB_PREFIXE,
6869     $datc,
6870     $annee,
6871     $dep,
6872     $com
6873     ) :
6874     $this->get_sequence_name();
6875     // Instancie le dossier d'autorisation sans identifiant
6876     $da = $this->f->get_inst__om_dbform(array(
6877     "obj" => "dossier_autorisation",
6878     "idx" => 0,
6879     ));
6880 softime 10573
6881 softime 13528 // Si la séquence a pu être composée et que celle-ci existe
6882     if (! empty($seq_name ) && $da->doesNumeroDossierSequenceExists($seq_name) === true){
6883 softime 12654 /**
6884     * Mise à jour de la séquence.
6885     */
6886     $curr_da_num = $this->get_max_da_num();
6887     if (is_integer($curr_da_num) !== true) {
6888     $this->addToMessage(__('Erreur lors du calcul du numéro de dossier.'));
6889     return false;
6890     }
6891 softime 10573
6892 softime 12654 // Dans le cas de la suppression du dernier dossier d'instruction de
6893     // sa numérotation alors la séquence est supprimée
6894     if ($curr_da_num === 0) {
6895     $table_name = substr($seq_name, 0, -4);
6896     $res = $this->f->db->dropSequence($table_name);
6897 softime 13137 $this->f->addToLog(__METHOD__."(): db->dropSequence(\"".$table_name."\");", VERBOSE_MODE);
6898 softime 12654 $this->f->isDatabaseError($res);
6899     } else {
6900     // La méthode setval avec la valeur true en troisième argument
6901     // signifie que le prochain nextval avancera la séquence avant
6902     // de renvoyer une valeur.
6903     $sql = sprintf("
6904     SELECT setval('%s', %s, true)",
6905     $seq_name,
6906     $curr_da_num
6907     );
6908     $res = $this->f->db->query($sql);
6909     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
6910     $this->f->isDatabaseError($res);
6911     }
6912 softime 8477 }
6913 softime 13137 // Si le dossier n'est pas décomposable et donc que la séquence du dossier n'a pas
6914     // été mise à jour ajoute un message de log pour avoir un suivi
6915     else {
6916     $this->f->addToLog(
6917     sprintf(
6918     '%s() : %s %s : %s',
6919     __METHOD__,
6920 softime 13528 __('La sequence du dossier n\'a pas pu être recuperé.'),
6921 softime 13137 __('La séquence n\'a pas été mise à jour pour le dossier'),
6922     $this->getVal('dossier')
6923     ),
6924     VERBOSE_MODE
6925     );
6926     }
6927 softime 8477 }
6928    
6929     /**
6930     * Supprime le dossier d'instruction des derniers dossiers consultés,
6931     * sauvegardé en session
6932     */
6933     if (isset($_SESSION['dossiers_consulte']) !== false) {
6934     $id_di = $this->getVal($this->clePrimaire);
6935     if (in_array($id_di, $_SESSION['dossiers_consulte']) === true) {
6936     unset($_SESSION['dossiers_consulte'][$id_di]);
6937     }
6938     // Supprime le tableau s'il n'y a plus de dossier consulté
6939     if (count($_SESSION['dossiers_consulte']) === 0) {
6940     unset($_SESSION['dossiers_consulte']);
6941     }
6942     }
6943 softime 10573
6944     /**
6945     * Gestion des tâches pour la dématérialisation
6946     */
6947     $inst_task_empty = $this->f->get_inst__om_dbform(array(
6948     "obj" => "task",
6949     "idx" => 0,
6950     ));
6951     $task_types = array(
6952     "creation_DI",
6953     "depot_DI",
6954     );
6955     foreach ($task_types as $task_type) {
6956     $task_exists = $inst_task_empty->task_exists($task_type, $id);
6957     if ($task_exists !== false) {
6958     $inst_task = $this->f->get_inst__om_dbform(array(
6959     "obj" => "task",
6960     "idx" => $task_exists,
6961     ));
6962     if ($inst_task->getVal('state') === $inst_task::STATUS_NEW || $inst_task->getVal('state') === $inst_task::STATUS_DRAFT) {
6963     $task_val = array(
6964     'state' => $inst_task::STATUS_CANCELED,
6965     );
6966     $update_task = $inst_task->update_task(array('val' => $task_val));
6967     if ($update_task === false) {
6968     $this->addToMessage(sprintf('%s %s',
6969     sprintf(__("Une erreur s'est produite lors de la modification de la tâche %."), $inst_task->getVal($inst_task->clePrimaire)),
6970     __("Veuillez contacter votre administrateur.")
6971     ));
6972     $this->correct = false;
6973     return false;
6974     }
6975     }
6976     }
6977     }
6978    
6979     return true;
6980 mbroquet 3730 }
6981 softime 8477
6982 mbroquet 3730 /**
6983 softime 8477 * TREATMENT - delete_related_tables.
6984     *
6985     * Suppression par requête SQL les enregistrements des tables passées en
6986     * paramètre.
6987     *
6988     * @param array $related_tables Liste des enregistrements à supprimer
6989     *
6990     * @return boolean
6991     */
6992     function delete_related_tables(array $related_tables) {
6993     $this->begin_treatment(__METHOD__);
6994    
6995     // Supprime chaque enregistrement liés au dossier d'instruction
6996     $template_delete_sql = 'DELETE FROM %s%s WHERE %s IN (%s)';
6997     foreach ($related_tables as $table => $value) {
6998     if (isset($value['table']) === true) {
6999     $table = $value['table'];
7000     }
7001     if ($value['condition_value'] !== '' && $value['condition_value'] !== null) {
7002 softime 13528 $sql = sprintf(
7003     $template_delete_sql,
7004     DB_PREFIXE,
7005     $table,
7006     $value['condition_field'],
7007     $value['condition_value']
7008     );
7009 softime 8477 $res = $this->f->db->query($sql);
7010     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
7011     $this->f->isDatabaseError($res);
7012 softime 10573
7013     /**
7014     * Gestion des tâches pour la dématérialisation
7015     */
7016     // Annule toutes les tâches liées au dossier
7017     $inst_task_empty = $this->f->get_inst__om_dbform(array(
7018     "obj" => "task",
7019     "idx" => 0,
7020     ));
7021     $all_task_type = array_merge($inst_task_empty::TASK_TYPE_SI, $inst_task_empty::TASK_TYPE_SC);
7022     foreach ($all_task_type as $task_type) {
7023     $task_exists = $inst_task_empty->task_exists($task_type, $this->getVal($this->clePrimaire), $this->getVal($this->clePrimaire));
7024     if ($task_exists !== false) {
7025     $inst_task = $this->f->get_inst__om_dbform(array(
7026     "obj" => "task",
7027     "idx" => $task_exists,
7028     ));
7029     if ($inst_task->getVal('state') === $inst_task::STATUS_NEW || $inst_task->getVal('state') === $inst_task::STATUS_DRAFT) {
7030     $task_val = array(
7031     'state' => $inst_task::STATUS_CANCELED,
7032     );
7033     $update_task = $inst_task->update_task(array('val' => $task_val));
7034     if ($update_task === false) {
7035     $this->addToMessage(sprintf('%s %s',
7036     sprintf(__("Une erreur s'est produite lors de la modification de la tâche %."), $inst_task->getVal($inst_task->clePrimaire)),
7037     __("Veuillez contacter votre administrateur.")
7038     ));
7039     $this->correct = false;
7040     return false;
7041     }
7042     }
7043     }
7044     }
7045     // Spécifique au dossier d'autorisation
7046     if ($table === 'dossier_autorisation') {
7047     $task_exists = $inst_task_empty->task_exists('creation_DA', $this->getVal($table));
7048     if ($task_exists !== false) {
7049     $inst_task = $this->f->get_inst__om_dbform(array(
7050     "obj" => "task",
7051     "idx" => $task_exists,
7052     ));
7053     if ($inst_task->getVal('state') === $inst_task::STATUS_NEW || $inst_task->getVal('state') === $inst_task::STATUS_DRAFT) {
7054     $task_val = array(
7055     'state' => $inst_task::STATUS_CANCELED,
7056     );
7057     $update_task = $inst_task->update_task(array('val' => $task_val));
7058     if ($update_task === false) {
7059     $this->addToMessage(sprintf('%s %s',
7060     sprintf(__("Une erreur s'est produite lors de la modification de la tâche %."), $inst_task->getVal($inst_task->clePrimaire)),
7061     __("Veuillez contacter votre administrateur.")
7062     ));
7063     $this->correct = false;
7064     return false;
7065     }
7066     }
7067     }
7068     }
7069 softime 8477 }
7070     }
7071    
7072     return $this->end_treatment(__METHOD__, true);
7073     }
7074    
7075     /**
7076     * CONDITION - has_only_initial_di.
7077     *
7078     * Permet de vérifier qu'il s'agit du dossier d'instruction initial de
7079     * l'autorisation.
7080     *
7081     * @param boolean $after_delete À activer si la méthode est utilisée lors de
7082     * la suppression.
7083     *
7084     * @return boolean
7085     */
7086     function has_only_initial_di($after_delete=false) {
7087    
7088     // Compte le nombre de dossier lié au dossier d'autorisation
7089     $res = $this->get_idx_by_args('COUNT(dossier)', 'dossier', 'dossier_autorisation', $this->getVal('dossier_autorisation'));
7090    
7091     // Si la méthode est utilisé dans le triggersupprimerapres alors le
7092     // dossier d'instruction est déjà supprimé dans la base de données, le
7093     // retour doit donc être 0 pour prouver la suppression du DI initial
7094     if ($after_delete === true) {
7095     if ($res === '0') {
7096     return true;
7097     }
7098     //
7099     return false;
7100     }
7101    
7102     // S'il y a qu'un seul dossier d'instruction alors le DI courant est
7103     // forcément l'initial
7104     if ($res === '1') {
7105     return true;
7106     }
7107     //
7108     return false;
7109     }
7110    
7111     /**
7112     * Récupère la dernière valeur d'une séquence.
7113     *
7114     * @param string $sequence_name Nom de la séquence (optionnel)
7115     *
7116     * @return integer Dernière valeur de la séquence
7117     */
7118     function get_last_value_sequence($sequence_name=null) {
7119     // Récupère autoamtiquement le nom de la séquence du dossier
7120     // d'instruction courant
7121     if ($sequence_name === null) {
7122     $sequence_name = $this->get_sequence_name();
7123 softime 10573
7124     if (empty($sequence_name) === true) {
7125     $this->f->addToLog(sprintf('%s() : %s',
7126     __METHOD__,
7127     __("Échec de la récupération du nom de la séquence.")
7128     ), DEBUG_MODE);
7129     return false;
7130     }
7131 softime 8477 }
7132 softime 13137 $qres = $this->f->get_one_result_from_db_query(
7133     sprintf(
7134     'SELECT last_value FROM %s',
7135     $sequence_name
7136     ),
7137     array(
7138     "origin" => __METHOD__,
7139     "force_return" => true,
7140     )
7141 softime 8477 );
7142 softime 13137 if ($qres["code"] !== "OK") {
7143 softime 11057 return false;
7144     }
7145 softime 13137 return intval($qres["result"]);
7146 softime 8477 }
7147    
7148     /**
7149 softime 8989 * [get_max_da_num description]
7150     * @param [type] $sequence_name [description]
7151     * @return [type] [description]
7152     */
7153     function get_max_da_num($sequence_name = null) {
7154     if ($sequence_name === null) {
7155     $sequence_name = $this->get_sequence_name();
7156     }
7157     $da = $this->f->get_inst__om_dbform(array(
7158     "obj" => "dossier_autorisation",
7159     "idx" => $this->getVal('dossier_autorisation'),
7160     ));
7161     if ($da->doesNumeroDossierSequenceExists($sequence_name) !== true) {
7162     return false;
7163     }
7164     $sequence_args = $this->get_sequence_args();
7165     return $da->getMaxDANumeroDossier($sequence_args['datc'], $sequence_args['annee'], $sequence_args['dep'], $sequence_args['com']);
7166     }
7167    
7168     /**
7169 mbroquet 3730 * Retourne la reference cadastrale de la demande attache a un dossier ERP
7170     * specifique
7171     * @param string $dossier L'identifiant du dossier
7172     * @return string|null La reference cadastrale si elle est trouve,
7173     * sinon NULL. En cas d'erreur de la BD, l'execution s'arrete.
7174     */
7175     function getReferenceCadastrale($dossier) {
7176     $sql = "SELECT terrain_references_cadastrales FROM ".DB_PREFIXE."demande WHERE dossier_instruction = '" . $dossier . "'";
7177 softime 8989 $res = $this->f->db->limitquery($sql, 0, 1);
7178 softime 12847 $this->addToLog(
7179     __METHOD__."(): db->limitquery(\"".$sql."\", 0, 1);",
7180     VERBOSE_MODE
7181     );
7182     if ($this->f->isDatabaseError($res, true) !== false) {
7183 mbroquet 3730 // Appel de la methode de recuperation des erreurs
7184     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), 'demande');
7185     }
7186     // retourne la nature du dossier
7187     while ($row =& $res->fetchRow()) {
7188     return $row[0];
7189     }
7190     // la nature n'etait pas trouve, ce qui ne devrait pas se passer
7191     return NULL;
7192     }
7193    
7194     /**
7195 softime 6565 * Supprime puis recrée tous les liens entre dossier et demandeurs
7196 mbroquet 3730 **/
7197 softime 8989 function insertLinkDossierDemandeur() {
7198 softime 6565 // Suppression des anciens demandeurs
7199 softime 8989 $this->deleteLinkDossierDemandeur();
7200 softime 6565 $types_demandeur = array(
7201     "petitionnaire_principal",
7202     "delegataire",
7203     "petitionnaire",
7204     "plaignant_principal",
7205     "plaignant",
7206     "contrevenant_principal",
7207     "contrevenant",
7208     "requerant_principal",
7209     "requerant",
7210     "avocat_principal",
7211     "avocat",
7212 softime 7067 "bailleur_principal",
7213     "bailleur",
7214 softime 10573 "proprietaire",
7215     "architecte_lc",
7216     "paysagiste",
7217 softime 6565 );
7218     foreach ($types_demandeur as $type) {
7219     // Comparaison des autres demandeurs
7220     if(isset($this->postedIdDemandeur[$type]) === true) {
7221     // Ajout des nouveaux liens
7222     foreach ($this->postedIdDemandeur[$type] as $demandeur) {
7223     //
7224     $principal = false;
7225     if (strpos($type, '_principal') !== false) {
7226     $principal = true;
7227     }
7228 softime 8989 if ($this->addLinkDossierDemandeur($demandeur, $principal) === false) {
7229 softime 6565 //
7230     return false;
7231     }
7232     }
7233 mbroquet 3730 }
7234     }
7235     }
7236    
7237    
7238     /**
7239     * Fonction permettant d'ajouter un lien
7240 softime 6565 * entre la table dossier et demandeur
7241 mbroquet 3730 **/
7242 softime 8989 function addLinkDossierDemandeur($id, $principal) {
7243 softime 7996 $lienAjout = $this->f->get_inst__om_dbform(array(
7244     "obj" => "lien_dossier_demandeur",
7245     "idx" => "]",
7246     ));
7247 mbroquet 3730 $lien = array('lien_dossier_demandeur' => "",
7248     'petitionnaire_principal' => (($principal)?"t":"f"),
7249     'dossier' => $this->valF['dossier'],
7250     'demandeur' => $id);
7251 softime 8989 $lienAjout->ajouter($lien);
7252 mbroquet 3730 $lienAjout->__destruct();
7253     }
7254    
7255     /**
7256     * Fonction permettant de supprimer un lien
7257     * entre la table demande et demandeur
7258     **/
7259 softime 8989 function deleteLinkDossierDemandeur() {
7260 mbroquet 3730 // Suppression
7261     $sql = "DELETE FROM ".DB_PREFIXE."lien_dossier_demandeur ".
7262     "WHERE dossier='".$this->valF['dossier']."'";
7263 softime 8989 $res = $this->f->db->query($sql);
7264 softime 12847 $this->f->addToLog(
7265     __METHOD__."(): db->query(\"".$sql."\");",
7266     VERBOSE_MODE
7267     );
7268     $this->f->isDatabaseError($res);
7269 mbroquet 3730 }
7270    
7271     /**
7272     * Methode de recupération des valeurs postées
7273     **/
7274     function getPostedValues() {
7275     // Récupération des demandeurs dans POST
7276 softime 6565 $types_demandeur = array(
7277     "petitionnaire_principal",
7278     "delegataire",
7279     "petitionnaire",
7280     "plaignant_principal",
7281     "plaignant",
7282     "contrevenant_principal",
7283     "contrevenant",
7284     "requerant_principal",
7285     "requerant",
7286     "avocat_principal",
7287     "avocat",
7288 softime 7067 "bailleur_principal",
7289     "bailleur",
7290 softime 10573 "proprietaire",
7291     "architecte_lc",
7292     "paysagiste",
7293 softime 6565 );
7294     foreach ($types_demandeur as $type) {
7295     if($this->f->get_submitted_post_value($type) !== null AND
7296     $this->f->get_submitted_post_value($type) != '') {
7297     $this->postedIdDemandeur[$type] = $this->f->get_submitted_post_value($type);
7298 mbroquet 3730 }
7299     }
7300     }
7301    
7302     /**
7303     * Méthode permettant de récupérer les id des demandeurs liés à la table
7304     * liée passée en paramètre
7305     *
7306     * @param string $from Table liée : "demande", "dossier", dossier_autorisation"
7307     * @param string $id Identifiant (clé primaire de la table liée en question)
7308     */
7309     function listeDemandeur($from, $id) {
7310 softime 6565
7311     // Si la donnée membre a déjà été remplie par un précédent appel à cette méthode,
7312     // on sort.
7313     if ($this->valIdDemandeur["petitionnaire_principal"] !== array() or
7314     $this->valIdDemandeur["delegataire"] !== array() or
7315     $this->valIdDemandeur["petitionnaire"] !== array() or
7316     $this->valIdDemandeur["plaignant_principal"] !== array() or
7317     $this->valIdDemandeur["plaignant"] !== array() or
7318     $this->valIdDemandeur["contrevenant_principal"] !== array() or
7319     $this->valIdDemandeur["contrevenant"] !== array() or
7320     $this->valIdDemandeur["requerant_principal"] !== array() or
7321     $this->valIdDemandeur["requerant"] !== array() or
7322     $this->valIdDemandeur["avocat_principal"] !== array() or
7323 softime 7067 $this->valIdDemandeur["avocat"] !== array() or
7324     $this->valIdDemandeur["bailleur_principal"] !== array() or
7325 softime 10573 $this->valIdDemandeur["bailleur"] !== array() or
7326     $this->valIdDemandeur["proprietaire"] !== array() or
7327     $this->valIdDemandeur["architecte_lc"] !== array() or
7328     $this->valIdDemandeur["paysagiste"] !== array()) {
7329 softime 6565 return;
7330     }
7331    
7332 mbroquet 3730 // Récupération des demandeurs de la base
7333     $sql = "SELECT demandeur.demandeur,
7334     demandeur.type_demandeur,
7335     lien_".$from."_demandeur.petitionnaire_principal
7336     FROM ".DB_PREFIXE."lien_".$from."_demandeur
7337     INNER JOIN ".DB_PREFIXE."demandeur
7338     ON demandeur.demandeur=lien_".$from."_demandeur.demandeur
7339     WHERE ".$from." = '".$id."'";
7340     $res = $this->f->db->query($sql);
7341     $this->f->addToLog("listeDemandeur(): db->query(\"".$sql."\")", VERBOSE_MODE);
7342 softime 6565 $this->f->isDatabaseError($res);
7343    
7344 mbroquet 3730 // Stockage du résultat dans un tableau
7345     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
7346 softime 6565
7347     $demandeur_type = $row['type_demandeur'];
7348     if ($row['petitionnaire_principal'] == 't'){
7349     $demandeur_type .= "_principal";
7350 mbroquet 3730 }
7351 softime 6565 $this->valIdDemandeur[$demandeur_type][] = $row['demandeur'];
7352 mbroquet 3730 }
7353     }
7354    
7355     /**
7356     * Récupère la liste des contraintes d'un dossier.
7357     *
7358 softime 4740 * @param string $dossier Identifiant du dossier.
7359     * @param boolean $for_di_view Liste avec condition affichage DI.
7360     *
7361 mbroquet 3730 * @return object Résultat de la requête
7362     */
7363 softime 4740 function getListContrainte($dossier, $for_di_view = true) {
7364 mbroquet 3730
7365     // Select
7366     $select = "SELECT dossier_contrainte.dossier_contrainte as dossier_contrainte_id,
7367     dossier_contrainte.texte_complete as dossier_contrainte_texte,
7368     dossier_contrainte.reference as dossier_contrainte_reference,
7369     contrainte.libelle as contrainte_libelle,
7370     contrainte.nature as contrainte_nature,
7371     contrainte.texte as contrainte_texte,
7372     contrainte.reference as contrainte_reference,
7373     lower(contrainte.groupe) as contrainte_groupe,
7374     lower(contrainte.sousgroupe) as contrainte_sousgroupe ";
7375    
7376     // From
7377     $from = " FROM ".DB_PREFIXE."contrainte
7378     LEFT JOIN ".DB_PREFIXE."dossier_contrainte
7379     ON dossier_contrainte.contrainte = contrainte.contrainte ";
7380    
7381     // Where
7382     $where = " WHERE dossier_contrainte.dossier = '".$dossier."' ";
7383    
7384 softime 4740 // Si les contraintes sont listées pour être affichées dans le DI
7385     if ($for_di_view === true) {
7386     // Si le paramètre "option_contrainte_di" est défini
7387     if ($this->f->getParameter('option_contrainte_di') != 'aucun') {
7388     // Ajoute la condition
7389     $where .= $this->f->traitement_condition_contrainte(
7390     $this->f->getParameter('option_contrainte_di'));
7391     }
7392 mbroquet 3730 }
7393    
7394     // Tri
7395     $tri = " ORDER BY contrainte_groupe DESC, contrainte_sousgroupe,
7396     contrainte.no_ordre, contrainte.libelle ";
7397    
7398     // Requête SQL
7399     $sql = $select.$from.$where.$tri;
7400     $res = $this->f->db->query($sql);
7401     $this->f->addToLog("listContrainte(): db->query(\"".$sql."\");", VERBOSE_MODE);
7402     $this->f->isDatabaseError($res);
7403    
7404     // Retourne le résultat
7405     return $res;
7406     }
7407    
7408     /**
7409 softime 11585 * Récupère les informations à afficher dans le tableau des identifiants
7410     * tehniques Plat'AU. Stocke ces informations dans un tableau.
7411     * Converti le tableau au format json et renvoi le json obtenu
7412     *
7413     * @return json
7414     */
7415     protected function get_json_lien_iiue() {
7416     // Tableau de retour
7417     $val_suivi = array();
7418    
7419     // Liste des champs à afficher. Permet également la traduction des noms de colonnes.
7420     $liste_champs = array(
7421     'object' => __('type'),
7422     'object_id' => __('identifiant openADS'),
7423     'external_uid' => __("identifiant Plat'AU"),
7424     'state' => __('état du versement'),
7425     );
7426     // Mapping entre la valeur 'object' de la table de liaison des identifiants
7427     // et la valeur de 'object' dans la tables des tâches
7428     $mapping_one_to_one_object_liiue_task = array(
7429     'dossier_autorisation' => 'creation_DA',
7430     'dossier' => 'creation_DI',
7431     'piece' => 'ajout_piece',
7432     'consultation' => 'creation_consultation',
7433     'instruction_action_cl' => 'envoi_CL',
7434     );
7435     // Traduction des états de versement
7436     $trad_state = array(
7437     'done' => sprintf('%s %s', __('terminé'), '[V]'),
7438     'pending' => __('en cours'),
7439     'error' => __('en erreur'),
7440     'new' => __('à réaliser'),
7441     );
7442     // Traduction des objets
7443     $trad_object = array(
7444     'dossier_autorisation' => __('dossier_autorisation'),
7445     'dossier' => __('dossier'),
7446     'piece' => __('pièce'),
7447     'dossier_consultation' => __('consultation'),
7448     'pec_dossier_consultation' => __('prise en compte'),
7449     'avis_dossier_consultation' => __('avis'),
7450     'instruction_action_cl' => __('instruction transmise au CL'),
7451     );
7452     // Instance de la table de liaison des identifiants
7453     $inst_liiue = $this->f->get_inst__om_dbform(array(
7454     "obj" => "lien_id_interne_uid_externe",
7455     "idx" => 0,
7456     ));
7457     // Instance de la table des tâches
7458     $inst_task = $this->f->get_inst__om_dbform(array(
7459     "obj" => "task",
7460     "idx" => 0,
7461     ));
7462     // Récupération de toutes les occurences du dossier en cours dans la table des
7463     // liaisons des identifiants
7464 softime 13137 $external_uids = $inst_liiue->get_all_lien_id_interne_uid_externe_by_dossier($this->getVal('dossier'), PLATAU);
7465 softime 11585 if (is_array($external_uids) === true && count($external_uids) > 0) {
7466     //
7467     foreach ($external_uids as $external_uid) {
7468    
7469     /**
7470     * Gestion de l'état du versement dans Plat'AU
7471     */
7472     // État par défaut
7473 softime 12654 $external_uid['state'] = __('N/A');
7474 softime 11585 // Tente d'identifier le type, dans certains cas il n'est pas
7475     // possible de le définir avec certitude
7476     $type = isset($mapping_one_to_one_object_liiue_task[$external_uid['object']]) === true ? $mapping_one_to_one_object_liiue_task[$external_uid['object']] : null;
7477     $search_values = array(
7478     sprintf('type = \'%s\'', $type),
7479     sprintf('object_id = \'%s\'', $external_uid['object_id']),
7480     sprintf('state != \'%s\'', $inst_task::STATUS_CANCELED),
7481     );
7482     // Si le type ne peut pas être défini avec certitude, alors on ne
7483     // l'inclut pas dans la recherche de la tâche
7484     if ($type === null) {
7485     unset($search_values[0]);
7486     }
7487     $task_exists = $inst_task->task_exists_multi_search($search_values);
7488     // Pour récupérer un état, il ne faut qu'un résultat
7489     if ($task_exists !== false) {
7490     //
7491     foreach ($task_exists as $task_value) {
7492     $external_uid['state'] = $task_value['state'];
7493     if ($task_value['state'] === 'pending') {
7494     break;
7495     }
7496     }
7497     }
7498     // Remplace les valeurs des états de versement par les traductions
7499     foreach ($trad_state as $key => $value) {
7500     if ($external_uid['state'] === $key) {
7501     $external_uid['state'] = $value;
7502     }
7503     }
7504    
7505     // Remplace les valeurs des états de versement par les traductions
7506     foreach ($trad_object as $key => $value) {
7507     if ($external_uid['object'] === $key) {
7508     $external_uid['object'] = __($value);
7509     }
7510     }
7511    
7512     //
7513     $val_notif = array();
7514     foreach($liste_champs as $key => $champ) {
7515     $val_notif[$champ] = $external_uid[$key];
7516     }
7517     array_push($val_suivi, $val_notif);
7518     }
7519     }
7520    
7521     // Passage du tableau au format json
7522     return json_encode($val_suivi, JSON_HEX_APOS);
7523     }
7524    
7525     /**
7526 mbroquet 3730 * Ajout de la liste des contraintes et des demandeurs
7527     */
7528     function formSpecificContent($maj) {
7529    
7530 softime 8477 // Récupère le CRUD
7531     $crud = $this->get_action_crud($this->getParameter("maj"));
7532    
7533     // Les contenus spécifiques ne sont pas affichés en cas de suppression
7534     if ($crud === 'delete') {
7535     return;
7536     }
7537    
7538 mbroquet 3730 /**
7539     * Liste des contraintes
7540     */
7541     //
7542     $listContrainte = $this->getListContrainte($this->getVal('dossier'));
7543    
7544 softime 12654 // Si le dossier possède des contraintes et qu'on n'est pas dans la vue "Journal d'instruction"
7545     if ($listContrainte->numRows() != 0 && $maj !== "200") {
7546 mbroquet 3730
7547     // Affiche du fieldset
7548     printf("<div id=\"liste_contrainte\" class=\"demande_hidden_bloc\">");
7549     printf("<fieldset class=\"cadre ui-corner-all ui-widget-content col_12 startClosed\">");
7550     printf(" <legend class=\"ui-corner-all ui-widget-content ui-state-active\"
7551     id =\"fieldset_contraintes_liees\">"
7552     ._("dossier_contrainte")."</legend>");
7553     printf("<div class=\"fieldsetContent\" style=\"display: none;\">");
7554    
7555     // Entête pour le groupe
7556     $groupeHeader = "
7557     <div class='dossier_contrainte_groupe'>
7558     <div class='dossier_contrainte_groupe_header'>
7559     <span class='name'>
7560     %s
7561     </span>
7562     </div>
7563     ";
7564    
7565     // Entête pour le sous-groupe
7566     $sousgroupeHeader = "
7567     <div class='dossier_contrainte_sousgroupe'>
7568     <div class='dossier_contrainte_sousgroupe_header'>
7569     <span class='name'>
7570     %s
7571     </span>
7572     </div>
7573     ";
7574    
7575     // Titres des colonnes
7576     $tableHeader = "
7577     <thead>
7578     <tr class='ui-tabs-nav ui-accordion ui-state-default tab-title'>
7579     <th class='title col-0 firstcol contrainte_th_texte_complete'>
7580     <span class='name'>
7581     "._('texte_complete')."
7582     </span>
7583     </th>
7584     <th class='title col-1 contrainte_th_reference'>
7585     <span class='name'>
7586     "._('reference')."
7587     </span>
7588     </th>
7589     <th class='title col-2 contrainte_th_nature'>
7590     <span class='name'>
7591     "._('nature')."
7592     </span>
7593     </th>
7594     </tr>
7595     </thead>
7596     ";
7597    
7598     // Ligne de données
7599     $line = "
7600     <tr class='tab-data %s'>
7601     <td class='col-0 firstcol contrainte_th_texte_complete'>
7602     %s
7603     </td>
7604     <td class='col-1 contrainte_th_reference'>
7605     %s
7606     </td>
7607     <td class='col-2 contrainte_th_nature'>
7608     %s
7609     </td>
7610     ";
7611    
7612     // Sauvegarde des données pour les comparer
7613     $lastRow = array();
7614     $lastRow['contrainte_groupe'] = 'empty';
7615     $lastRow['contrainte_sousgroupe'] = 'empty';
7616    
7617     // Tant qu'il y a des résultats
7618     while($row = &$listContrainte->fetchRow(DB_FETCHMODE_ASSOC)) {
7619     // Si l'identifiant du groupe de la contrainte présente et
7620     // celle d'avant est différent
7621     if ($row['contrainte_groupe'] != $lastRow['contrainte_groupe']) {
7622    
7623     // Si l'identifiant du groupe d'avant est vide
7624     if ($lastRow['contrainte_groupe'] != 'empty') {
7625     // Ferme le tableau
7626     printf("</table>");
7627     // Ferme le div
7628     printf("</div>");
7629     // Ferme le div
7630     printf("</div>");
7631     }
7632    
7633     // Affiche le header du groupe
7634     printf($groupeHeader, $row['contrainte_groupe']);
7635     }
7636    
7637     // Si l'identifiant du sous-groupe de la contrainte présente et
7638     // celle d'avant est différent
7639     // Ou qu'ils soient identique mais n'appartiennent pas au même groupe
7640     if ($row['contrainte_sousgroupe'] != $lastRow['contrainte_sousgroupe']
7641     || ($row['contrainte_sousgroupe'] == $lastRow['contrainte_sousgroupe']
7642     && $row['contrainte_groupe'] != $lastRow['contrainte_groupe'])) {
7643    
7644     //
7645     if($row['contrainte_groupe'] == $lastRow['contrainte_groupe']) {
7646     // Si l'identifiant de la sous-groupe d'avant est vide
7647     if ($lastRow['contrainte_sousgroupe'] != 'empty') {
7648     // Ferme le tableau
7649     printf("</table>");
7650     // Ferme le div
7651     printf("</div>");
7652     }
7653     }
7654    
7655     // Affiche le header du sous-groupe
7656     printf($sousgroupeHeader, $row['contrainte_sousgroupe']);
7657    
7658     // Ouvre le tableau
7659     printf("<table id='sousgroupe_".$row['contrainte_sousgroupe']."' class='tab-tab dossier_contrainte_view'>");
7660    
7661     // Affiche le header des données
7662     printf($tableHeader);
7663    
7664     // Définis le style des lignes
7665     $style = 'odd';
7666     }
7667    
7668     // Si toujours dans la même groupe et même sous-groupe,
7669     // on change le style de la ligne
7670     if ($row['contrainte_groupe'] == $lastRow['contrainte_groupe']
7671     && $row['contrainte_sousgroupe'] == $lastRow['contrainte_sousgroupe']) {
7672     // Définis le style
7673     $style = ($style=='even')?'odd':'even';
7674     }
7675    
7676     // Affiche "Oui" ou "Non" pour le bouléen
7677     if ($row['dossier_contrainte_reference'] == 1
7678     || $row['dossier_contrainte_reference'] == "t"
7679     || $row['dossier_contrainte_reference'] == "Oui") {
7680     //
7681     $contrainte_reference = "Oui";
7682     } else {
7683     //
7684     $contrainte_reference = "Non";
7685     }
7686    
7687     // Affiche les données
7688     printf($line, $style,
7689     $row['dossier_contrainte_texte'],
7690     $contrainte_reference,
7691     $row['contrainte_nature']
7692     );
7693    
7694     // Sauvegarde les données
7695     $lastRow['contrainte_groupe'] = $row['contrainte_groupe'];
7696     $lastRow['contrainte_sousgroupe'] = $row['contrainte_sousgroupe'];
7697    
7698     }
7699     // Ferme le tableau
7700     printf("</table>");
7701     // Ferme le sous-groupe
7702     printf("</div>");
7703     // Ferme le groupe
7704     printf("</div>");
7705    
7706     printf("</div>");
7707    
7708     printf("<div class=\"visualClear\"></div>");
7709     // Ferme le fieldset content
7710     printf("</div>");
7711     printf("</fieldset>");
7712     }
7713     /**
7714     * Fin Liste des contraintes
7715     */
7716    
7717     /**
7718     * Liste des demandeurs
7719     */
7720 softime 6565 // Tableau des demandeurs selon le contexte
7721     $listeDemandeur = $this->valIdDemandeur;
7722     /**
7723     * Gestion du bloc des demandeurs
7724     */
7725     // Si le mode est (modification ou suppression ou consultation) ET que
7726     // le formulaire n'est pas correct (c'est-à-dire que le formulaire est
7727     // actif)
7728     if ($this->correct !== true AND
7729 softime 7996 $this->getParameter('validation') == 0 AND
7730     $this->getParameter("maj") != 0) {
7731 softime 6565 // Alors on récupère les demandeurs dans la table lien pour
7732     // affectation des résultats dans $this->valIdDemandeur
7733     $this->listeDemandeur("dossier", $this->getval($this->clePrimaire));
7734     $listeDemandeur = $this->valIdDemandeur;
7735     }
7736 mbroquet 3730
7737 softime 6565 // Récupération des valeurs postées
7738 softime 7996 if ($this->getParameter('validation') != 0) {
7739 softime 6565 $listeDemandeur = $this->postedIdDemandeur;
7740     }
7741    
7742 softime 12124 // Si le mode est (ajout ou modification)
7743     // ET que le mode n'est pas (journal d'instruction)
7744     // ET que le formulaire n'est pas correct
7745     // (c'est-à-dire que le formulaire est actif)
7746     if (($this->getParameter("maj") < 2 AND $this->correct !== true)) {
7747 softime 6565 // Alors on positionne le marqueur linkable a true qui permet
7748     // d'afficher ou non les actions de gestion des demandeurs
7749 mbroquet 3730 $linkable = true;
7750     } else {
7751 softime 6565 // Sinon on positionne le marqueur linkable a false qui permet
7752     // d'afficher ou non les actions de gestion des demandeurs
7753 mbroquet 3730 $linkable = false;
7754     }
7755 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
7756     // Pour les dossiers contentieux, il faut un droit spécifique pour visualiser le
7757     // fieldset "Demandeurs"
7758 softime 12124 if ($this->getParameter("maj") != 200 &&
7759     ($affichage_form === 'ADS' || $affichage_form === 'DPC' || $affichage_form === 'CONSULTATION ENTRANTE')
7760 softime 6565 OR ($affichage_form === 'CTX RE' AND $this->f->isAccredited('dossier_contentieux_recours_afficher_demandeurs') === true)
7761 softime 12124 OR ($affichage_form === 'CTX IN' AND $this->f->isAccredited('dossier_contentieux_infractions_afficher_demandeurs') === true)
7762     ) {
7763 mbroquet 3730
7764 softime 6565 // Conteneur de la listes des demandeurs
7765     echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">";
7766     echo "<fieldset id=\"fieldset-form-dossier_instruction-demandeur\" class=\"cadre ui-corner-all ui-widget-content startClosed\">";
7767     echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">"
7768     ._("Demandeurs")."</legend>";
7769     echo "<div class=\"fieldsetContent\" style=\"display: none;\">";
7770 mbroquet 3730
7771 softime 6565
7772     // Pour les DI avec DA visible, dans tous les modes excepté en ajout et si l'option d'accès au
7773     // portail citoyen est activée
7774 mbroquet 3730 $inst_da = $this->get_inst_dossier_autorisation();
7775 softime 6565 if ($this->getParameter("maj") != 0
7776     && $this->f->is_option_citizen_access_portal_enabled() === true
7777     && $inst_da->is_dossier_autorisation_visible() === true) {
7778     // Instance du dossier d'autorisation
7779     //
7780     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'));
7781     }
7782     // Sélection des demandeur à afficher en fonction du paramétrage du type
7783     // du dossier d'autorisation.
7784     switch ($affichage_form) {
7785     case 'ADS':
7786 softime 10573 case 'CONSULTATION ENTRANTE':
7787 softime 6565 $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
7788     break;
7789     case 'CTX RE':
7790     $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
7791     $this->display_demandeur_requerant_avocat($listeDemandeur);
7792     break;
7793     case 'CTX IN':
7794     $this->display_demandeur_plaignant_contrevenant($listeDemandeur);
7795     break;
7796 softime 7067 case 'DPC':
7797     $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
7798     $this->display_demandeur_petitionnaire_delegataire_bailleur($listeDemandeur);
7799     break;
7800 softime 6565 }
7801 mbroquet 3730
7802     }
7803    
7804     echo "</fieldset>";
7805     echo "</div>";
7806     /**
7807     * Fin liste des demandeurs
7808     */
7809 fmichon 4708
7810     /**
7811     * Interface avec le référentiel ERP.
7812     *
7813     * On affiche le message uniquement si le dossier est connecté.
7814     */
7815 softime 6565 if ($this->getParameter('maj') == 3 && $this->is_connected_to_referentiel_erp() === true) {
7816 fmichon 4708 //
7817     printf(
7818     '<div class="col_12">
7819     Ce dossier est connecté au référentiel ERP.
7820     </div>'
7821     );
7822     }
7823    
7824 mbroquet 3730 }
7825    
7826     /**
7827 softime 6565 * Affiche le bloc d'affichage des demandeurs pour dossiers ADS avec actions.
7828     *
7829     * @param array $listeDemandeur Liste des demandeurs.
7830     */
7831     function display_demandeur_petitionnaire_delegataire($listeDemandeur) {
7832    
7833     // Affichage du bloc pétitionnaire principal / délégataire
7834     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7835     echo "<div id=\"petitionnaire_principal_delegataire\">";
7836     // Affichage de la synthèse du pétitionnaire principal
7837     $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire_principal");
7838     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7839     echo "<div id=\"delegataire\">";
7840     // Affichage de la synthèse du délégataire
7841     $this->displaySyntheseDemandeur($listeDemandeur, "delegataire");
7842     echo "</div>";
7843 softime 10573 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7844     echo "<div id=\"proprietaire\">";
7845     // Affichage de la synthèse du délégataire
7846     $this->displaySyntheseDemandeur($listeDemandeur, "proprietaire");
7847     echo "</div>";
7848     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7849     echo "<div id=\"architecte_lc\">";
7850     // Affichage de la synthèse du délégataire
7851     $this->displaySyntheseDemandeur($listeDemandeur, "architecte_lc");
7852     echo "</div>";
7853     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7854     echo "<div id=\"paysagiste\">";
7855     // Affichage de la synthèse du délégataire
7856     $this->displaySyntheseDemandeur($listeDemandeur, "paysagiste");
7857     echo "</div>";
7858 softime 6565 echo "<div class=\"both\"></div>";
7859     echo "</div>";
7860     // Bloc des pétitionnaires secondaires
7861     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7862     echo "<div id=\"listePetitionnaires\">";
7863     $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire");
7864     echo "</div>";
7865     }
7866    
7867     /**
7868     * Affiche le bloc d'affichage des demandeurs pour dossiers CTX recours
7869     * avec actions.
7870     *
7871     * @param array $listeDemandeur Liste des demandeurs.
7872     */
7873     function display_demandeur_plaignant_contrevenant($listeDemandeur) {
7874    
7875     echo "<div id=\"plaignant_contrevenant\">";
7876     // Affichage du bloc contrevenant
7877     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7878     echo "<div id=\"listeContrevenants\" class=\"col_12\">";
7879     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7880     echo "<div id=\"contrevenant_principal\">";
7881     // Affichage de la synthèse
7882     $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant_principal");
7883     echo "</div>";
7884     echo "<div id=\"listeAutresContrevenants\">";
7885     // Affichage de la synthèse
7886     $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant");
7887     echo "</div>";
7888     echo "</div>";
7889     // Affichage du bloc plaignant
7890     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7891     echo "<div id=\"listePlaignants\" class=\"col_12\">";
7892     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7893     echo "<div id=\"plaignant_principal\">";
7894     // Affichage de la synthèse
7895     $this->displaySyntheseDemandeur($listeDemandeur, "plaignant_principal");
7896     echo "</div>";
7897     echo "<div id=\"listeAutresPlaignants\">";
7898     $this->displaySyntheseDemandeur($listeDemandeur, "plaignant");
7899     echo "</div>";
7900     echo "</div>";
7901     echo "</div>";
7902    
7903     }
7904    
7905     /**
7906     * Affiche le bloc d'affichage des demandeurs pour dossiers CTX infraction
7907     * avec actions.
7908     *
7909     * @param array $listeDemandeur Liste des demandeurs.
7910     */
7911     function display_demandeur_requerant_avocat($listeDemandeur) {
7912     echo "<div id=\"requerant_avocat\">";
7913     // Affichage du bloc requérant
7914     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7915     echo "<div id=\"listeRequerants\" class=\"col_12\">";
7916     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7917     echo "<div id=\"requerant_principal\">";
7918     // Affichage de la synthèse
7919     $this->displaySyntheseDemandeur($listeDemandeur, "requerant_principal");
7920     echo "</div>";
7921     echo "<div id=\"listeAutresRequerants\">";
7922     $this->displaySyntheseDemandeur($listeDemandeur, "requerant");
7923     echo "</div>";
7924     echo "</div>";
7925     // Affichage du bloc avocat
7926     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7927     echo "<div id=\"listeAvocat\" class=\"col_12\">";
7928     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7929     echo "<div id=\"avocat_principal\">";
7930     $this->displaySyntheseDemandeur($listeDemandeur, "avocat_principal");
7931     echo "</div>";
7932     echo "<div id=\"listeAutresAvocats\">";
7933     $this->displaySyntheseDemandeur($listeDemandeur, "avocat");
7934     echo "</div>";
7935     echo "</div>";
7936     echo "</div>";
7937     echo "</fieldset>";
7938     // Champ flag permettant de récupérer la valeur de l'option sig pour
7939     // l'utiliser en javascript, notamment lors du chargement de l'interface
7940     // pour les références cadastrales
7941     // XXX Si un widget pour les références cadastrales existait, il n'y
7942     // aurait pas besoin de faire cela
7943     echo "<input id='option_sig' type='hidden' value='".$this->f->getParameter("option_sig")."' name='option_sig'>";
7944     echo "</div>";
7945     }
7946    
7947    
7948 softime 7067 /**
7949     * Affiche le bloc d'affichage des demandeurs pour dossiers DPC avec actions.
7950     *
7951     * @param array $listeDemandeur Liste des demandeurs.
7952     */
7953     function display_demandeur_petitionnaire_delegataire_bailleur($listeDemandeur) {
7954    
7955     // Affichage du bloc pétitionnaire principal / délégataire / bailleur
7956     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7957     echo "<div id=\"petitionnaire_principal_delegataire_bailleur\">";
7958     // Doit être utilisé avec la div petitionnaire_principal_delegataire
7959     echo "<div id=\"listeBailleurs\" class=\"col_12\">";
7960     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7961     echo "<div id=\"bailleur_principal\">";
7962     // Affichage de la synthèse
7963     $this->displaySyntheseDemandeur($listeDemandeur, "bailleur_principal");
7964     echo "</div>";
7965     echo "<div id=\"listeAutresBailleurs\">";
7966     $this->displaySyntheseDemandeur($listeDemandeur, "bailleur");
7967     echo "</div>";
7968     echo "</div>";
7969     echo "</div>";
7970     }
7971    
7972    
7973 softime 6565 function displaySyntheseDemandeur($listeDemandeur, $type) {
7974     // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
7975     // correct (c'est-à-dire que le formulaire est actif)
7976     if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
7977     // Alors on positionne le marqueur linkable a true qui permet
7978     // d'afficher ou non les actions de gestion des demandeurs
7979     $linkable = true;
7980     } else {
7981     // Sinon on positionne le marqueur linkable a false qui permet
7982     // d'afficher ou non les actions de gestion des demandeurs
7983     $linkable = false;
7984     }
7985     // Récupération du type de demandeur pour l'affichage
7986     switch ($type) {
7987     case 'petitionnaire_principal':
7988     $legend = _("Petitionnaire principal");
7989     break;
7990    
7991     case 'delegataire':
7992     $legend = _("Autre correspondant");
7993     break;
7994    
7995     case 'petitionnaire':
7996     $legend = _("Petitionnaire");
7997     break;
7998    
7999     case 'contrevenant_principal':
8000     $legend = _("Contrevenant principal");
8001     break;
8002    
8003     case 'contrevenant':
8004     $legend = _("Autre contrevenant");
8005     break;
8006    
8007     case 'plaignant_principal':
8008     $legend = _("Plaignant principal");
8009     break;
8010    
8011     case 'plaignant':
8012     $legend = _("Autre plaignant");
8013     break;
8014    
8015     case 'requerant_principal':
8016     $legend = _("Requérant principal");
8017     break;
8018    
8019     case 'requerant':
8020     $legend = _("Autre requérant");
8021     break;
8022    
8023     case 'avocat_principal':
8024     $legend = _("Avocat principal");
8025     break;
8026    
8027     case 'avocat':
8028     $legend = _("Autre avocat");
8029     break;
8030 softime 7067
8031     case 'bailleur_principal':
8032     $legend = _("Bailleur principal");
8033     break;
8034    
8035     case 'bailleur':
8036     $legend = _("Bailleur");
8037     break;
8038 softime 10573
8039     case 'proprietaire':
8040     $legend = __("Propriétaire");
8041     break;
8042    
8043     case 'architecte_lc':
8044     $legend = __("Architecte législation connexe");
8045     break;
8046    
8047     case 'paysagiste':
8048     $legend = __("Concepteur-Paysagiste");
8049     break;
8050 softime 6565 }
8051     foreach ($listeDemandeur[$type] as $demandeur_id) {
8052     $obj = str_replace('_principal', '', $type);
8053 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
8054     "obj" => $obj,
8055     "idx" => $demandeur_id,
8056     ));
8057 softime 6565 $demandeur -> afficherSynthese($type, $linkable);
8058     $demandeur -> __destruct();
8059     }
8060     // Si en édition de formulaire
8061     if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
8062     // Bouton d'ajout du avocat
8063     // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
8064     echo "<a id=\"add_".$type."\"
8065     class=\"om-form-button add-16\">".
8066     $legend.
8067     "</a>";
8068     }
8069     }
8070     /**
8071 mbroquet 3730 * Retourne le statut du dossier
8072     * @return string Le statut du dossier d'instruction
8073     */
8074     function getStatut(){
8075    
8076     $statut = '';
8077    
8078     $etat = $this->getVal("etat");
8079     //Si l'état du dossier d'instruction n'est pas vide
8080     if ( $etat != '' ){
8081    
8082     $sql = "SELECT statut
8083     FROM ".DB_PREFIXE."etat
8084 softime 9282 WHERE etat ='".$etat."'";
8085 softime 12847 $statut = $this->f->db->getone($sql);
8086     $this->addToLog(
8087     __METHOD__."(): db->getone(\"".$sql."\");",
8088     VERBOSE_MODE
8089     );
8090     $this->f->isDatabaseError($statut);
8091 mbroquet 3730 }
8092     return $statut;
8093     }
8094 softime 5024
8095 mbroquet 3730 /**
8096 softime 5024 * Retourne le dernier événement lié au dossier instancié
8097     *
8098     * @return [string] ID du dernier événement
8099     */
8100     function get_dernier_evenement() {
8101     $sql = "SELECT max(instruction)
8102     FROM ".DB_PREFIXE."instruction
8103     WHERE dossier = '".$this->getVal($this->clePrimaire)."'";
8104 softime 12847 $id_dernier_evenement = $this->f->db->getone($sql);
8105     $this->addToLog(
8106     __METHOD__."(): db->getone(\"".$sql."\");",
8107     VERBOSE_MODE
8108     );
8109 softime 5024 $this->f->isDatabaseError($id_dernier_evenement);
8110     return $id_dernier_evenement;
8111     }
8112    
8113     /**
8114 mbroquet 3730 * Retourne l'identifiant du rapport d'instruction lié du dossier
8115     * @return string L'identifiant du rapport d'instruction lié du dossier
8116     */
8117 softime 6565 function getRapportInstruction() {
8118 mbroquet 3730
8119 softime 7366 $rapport_instruction = null;
8120 mbroquet 3730
8121     $sql = "SELECT rapport_instruction
8122     FROM ".DB_PREFIXE."rapport_instruction
8123     WHERE dossier_instruction ='".$this->getVal($this->clePrimaire)."'";
8124 softime 12847 $rapport_instruction = $this->f->db->getone($sql);
8125     $this->addToLog(
8126     __METHOD__."(): db->getone(\"".$sql."\");",
8127     VERBOSE_MODE
8128     );
8129 softime 7366 $this->f->isDatabaseError($rapport_instruction);
8130 mbroquet 3730
8131     return $rapport_instruction;
8132     }
8133    
8134     /**
8135     * Retourne l'identifiant des données techniques liées du dossier
8136     * @return string L'identifiant des données techniques liées du dossier
8137     */
8138 softime 6565 function getDonneesTechniques() {
8139 mbroquet 3730
8140     $donnees_techniques = '';
8141    
8142     $sql = "SELECT donnees_techniques
8143     FROM ".DB_PREFIXE."donnees_techniques
8144     WHERE dossier_instruction ='".$this->getVal($this->clePrimaire)."'";
8145 softime 12847 $donnees_techniques = $this->f->db->getone($sql);
8146     $this->addToLog(
8147     __METHOD__."(): db->getone(\"".$sql."\");",
8148     VERBOSE_MODE
8149     );
8150     $this->f->isDatabaseError($donnees_techniques);
8151 mbroquet 3730 return $donnees_techniques;
8152     }
8153    
8154     /**
8155 softime 12847 * Retourne le lien de retour (VIEW formulaire et VIEW sousformulaire).
8156     *
8157     * @param string $view Appel dans le contexte de la vue 'formulaire' ou de
8158     * la vue 'sousformulaire'.
8159     *
8160     * @return string
8161 mbroquet 3730 */
8162 softime 12847 function get_back_link($view = "formulaire") {
8163     $baseURL = OM_ROUTE_TAB;
8164     $paramsHref = array(
8165     'premier' => $this->getParameter("premier"),
8166     'tricol' => $this->getParameter("tricol"),
8167     'advs_id' => $this->getParameter("advs_id"),
8168     'valide' => $this->getParameter("valide")
8169     );
8170 mbroquet 3730
8171 softime 12847 // Si on vient d'un widget de recherche paramétrable avec un message d'aide paramétré
8172     if (empty($this->f->get_submitted_get_value("message_help")) === false) {
8173     // On ajoute le message d'aide dans l'url de retour
8174     $paramsHref['message_help'] = urlencode($this->f->get_submitted_get_value("message_help"));
8175     }
8176    
8177 mbroquet 3730 if($this->getParameter("idx_dossier") != "") {
8178 softime 12847 $paramsHref['obj'] = "recherche_dossier";
8179     } else {
8180     if($this->getParameter("retour") == "form") {
8181     $paramsHref['idx'] = $this->getParameter("idx");
8182     $paramsHref['action'] = '3';
8183     if (!($this->getParameter("validation") > 0 && $this->getParameter("maj") == 2 && $this->correct)) {
8184     $baseURL = OM_ROUTE_FORM;
8185 mbroquet 3730
8186 softime 12847 }
8187 mbroquet 3730 }
8188 softime 12847 $paramsHref['obj'] = $this->f->get_submitted_get_value('retour_widget') !== null ?
8189     $this->f->get_submitted_get_value('retour_widget') :
8190     $this->get_absolute_class_name();
8191    
8192 softime 11228 if ($this->f->get_submitted_get_value('widget_recherche_id') !== null) {
8193 softime 12847 $paramsHref['widget_recherche_id'] = $this->f->get_submitted_get_value('widget_recherche_id');
8194 softime 11228 }
8195 softime 12847 if (empty($this->f->get_submitted_get_value('retourformulaire2')) === false) {
8196     $paramsHref['retourformulaire'] = $this->f->get_submitted_get_value('retourformulaire2');
8197 mbroquet 3730 }
8198     }
8199    
8200 softime 12847 // Construction du lien à partir des valeurs stockées dans le tableau
8201     $href = array_map(function ($key, $value) {
8202     return '&'.$key.'='.$value;
8203     }, array_keys($paramsHref), $paramsHref);
8204     $href = $baseURL.implode('', $href);
8205    
8206     return $href;
8207 mbroquet 3730 }
8208    
8209     /**
8210 softime 12847 * Surcharge du bouton retour afin de retourner sur la recherche de dossiers
8211     * d'instruction existant.
8212     */
8213     function retour($premier = 0, $recherche = "", $tricol = "") {
8214     $css_class = "retour";
8215     // Récupération du lien de redirection
8216     $href = str_replace(
8217     "&",
8218     "&amp;",
8219     $this->get_back_link("formulaire")
8220     );
8221     // Affichage du bouton retour avec le lien et la classe voulues
8222     $this->f->layout->display_form_retour(array(
8223     "id" => "form-action-".$this->get_absolute_class_name()."-back-".uniqid(),
8224     "href" => $href,
8225     "class" => $css_class,
8226     ));
8227     }
8228    
8229     /**
8230 mbroquet 3730 * Permet de modifier le fil d'Ariane
8231     * @param string $ent Fil d'Ariane
8232     * @param array $val Valeurs de l'objet
8233     * @param intger $maj Mode du formulaire
8234     */
8235     function getFormTitle($ent) {
8236    
8237     // Fil d'Ariane
8238 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
8239     switch ($type_aff_form) {
8240 softime 7067 case 'DPC':
8241 softime 6565 case 'ADS':
8242     $ent = _("instruction")." -> "._("dossiers d'instruction");
8243     break;
8244     case 'CTX IN':
8245     $ent = _("contentieux")." -> "._("infraction");
8246     break;
8247     case 'CTX RE':
8248     $ent = _("contentieux")." -> "._("recours");
8249     break;
8250 softime 10573 case 'CONSULTATION ENTRANTE':
8251     $ent = __("instruction")." -> ".__("dossiers de consultation");
8252 softime 6565 }
8253 mbroquet 3730
8254     // Si différent de l'ajout
8255     if($this->getParameter("maj") != 0) {
8256     // Si le champ dossier_libelle existe
8257     if (trim($this->getVal("dossier_libelle")) != '') {
8258     $ent .= " -> ".strtoupper($this->getVal("dossier_libelle"));
8259     }
8260 softime 6565 // Si contexte ADS
8261     if ($type_aff_form ==='ADS'
8262     && trim($this->getVal("dossier")) != '') {
8263 mbroquet 3730 $demandeur = $this->get_demandeur($this->getVal("dossier"));
8264     // Si le demandeur existe
8265     if (isset($demandeur) && trim($demandeur) != '') {
8266     $ent .= " ".mb_strtoupper($demandeur, "UTF-8");
8267     }
8268     }
8269 softime 10968
8270     // Dans le cas d'un dossier d'instruction issu d'un dépôt électronique
8271     // applique un style spécifique sur le fil d'Arianne
8272     if ($this->getVal('depot_electronique') === 't') {
8273     $this->f->addStyleForTitle("demat-color-breadcrumb");
8274     }
8275 mbroquet 3730 }
8276    
8277 softime 7996 // Change le fil d'Ariane pour l'interface de géolocalisation automatique des DI
8278     if ($this->getParameter("maj") == 126) {
8279     $ent = _("administration")." -> "._("options avancées")." -> "._("Géolocalisation des dossiers");
8280     }
8281    
8282 mbroquet 3730 // Change le fil d'Ariane
8283     return $ent;
8284     }
8285    
8286     /**
8287     * Récupère le demandeur du dossier
8288     * @return string Identifiant du dossier
8289     */
8290     private function get_demandeur($dossier) {
8291    
8292     // init de la variable de retour
8293     $demandeur = '';
8294    
8295     // Requête SQL
8296     $sql = "SELECT
8297     CASE WHEN demandeur.qualite='particulier'
8298     THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
8299     ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
8300     END as demandeur
8301     FROM ".DB_PREFIXE."dossier
8302     LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur
8303     ON lien_dossier_demandeur.dossier=dossier.dossier
8304     AND lien_dossier_demandeur.petitionnaire_principal IS TRUE
8305     LEFT JOIN ".DB_PREFIXE."demandeur
8306     ON lien_dossier_demandeur.demandeur=demandeur.demandeur
8307     WHERE dossier.dossier ='".$dossier."'";
8308 softime 12847 $demandeur = $this->f->db->getone($sql);
8309     $this->addToLog(
8310     __METHOD__."(): db->getone(\"".$sql."\");",
8311     VERBOSE_MODE
8312     );
8313     $this->f->isDatabaseError($demandeur);
8314 mbroquet 3730 // Résultat retourné
8315     return $demandeur;
8316     }
8317    
8318     /**
8319     * Récupère la durée de validité
8320     * @param string $dossier_autorisation Identifiant dossier d'autorisation
8321     * @return intger Durée de validité
8322     */
8323 softime 10573 function get_duree_validite($dossier_autorisation, $force_param = false) {
8324 mbroquet 3730
8325     // Récupère le numéro de version
8326     $numeroVersion = $this->getNumeroVersion($dossier_autorisation);
8327    
8328     // Si c'est l'ajout du dossier initial
8329 softime 10573 if ($numeroVersion < 0 || $force_param === true) {
8330 mbroquet 3730
8331     // Récupération de la duree de validite depuis la table
8332     // "dossier_autorisation_type_detaille"
8333     $sql = "SELECT duree_validite_parametrage
8334     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
8335     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
8336     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
8337     WHERE dossier_autorisation.dossier_autorisation='".$dossier_autorisation."'";
8338 softime 12847 $duree_validite = $this->f->db->getone($sql);
8339     $this->addToLog(
8340     __METHOD__."(): db->getone(\"".$sql."\");",
8341     VERBOSE_MODE
8342     );
8343     $this->f->isDatabaseError($duree_validite);
8344 mbroquet 3730 } else {
8345    
8346     // Récupération de la duree de validite depuis le P0
8347     $sql = "SELECT duree_validite
8348     FROM ".DB_PREFIXE."dossier
8349     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
8350     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
8351     WHERE dossier_autorisation.dossier_autorisation='".$dossier_autorisation."'
8352     AND dossier.version = 0";
8353 softime 12847 $duree_validite = $this->f->db->getone($sql);
8354     $this->addToLog(
8355     __METHOD__."(): db->getone(\"".$sql."\");",
8356     VERBOSE_MODE
8357     );
8358     $this->f->isDatabaseError($duree_validite);
8359 mbroquet 3730 }
8360 softime 11876 // Vérifie si la duree de validité a bien été récupérée. Si ce n'est pas le cas
8361     // la duree de validite est mise à 0 par défaut pour ne pas bloquer le traitement
8362     // (notamment en modification du dossier) et on affiche le problème dans les logs.
8363     try {
8364     if (! isset($duree_validite) || $duree_validite == null || $duree_validite == '') {
8365     $duree_validite = '0';
8366     throw new UnexpectedValueException('Unexpected NULL value');
8367     }
8368     } catch (UnexpectedValueException $e) {
8369     $this->addToLog(
8370     $e.
8371     ' : '.
8372     _("Erreur : la récupération de la durée de validité à échouée pour le dossier : ").
8373     $dossier_autorisation
8374     );
8375     }
8376 mbroquet 3730
8377     // retourne le résultat
8378     return $duree_validite;
8379    
8380     }
8381    
8382     /**
8383     * Ajoute les parcelles du dossier passé en paramètre et met à jour le
8384     * quartier du dossier.
8385     * @param string $dossier Identifiant du dossier
8386     * @param string $terrain_references_cadastrales Références cadastrales du
8387     * dossier
8388     */
8389     function ajouter_dossier_parcelle($dossier, $terrain_references_cadastrales) {
8390    
8391     // Parse les parcelles
8392     $list_parcelles = $this->f->parseParcelles($terrain_references_cadastrales, $this->getVal('om_collectivite'));
8393    
8394     // A chaque parcelle une nouvelle ligne est créée dans la table
8395     // dossier_parcelle
8396     foreach ($list_parcelles as $parcelle) {
8397    
8398     // Instance de la classe dossier_parcelle
8399 softime 7996 $dossier_parcelle = $this->f->get_inst__om_dbform(array(
8400     "obj" => "dossier_parcelle",
8401     "idx" => "]",
8402     ));
8403 mbroquet 3730
8404     // Valeurs à sauvegarder
8405     $value = array(
8406     'dossier_parcelle' => '',
8407     'dossier' => $dossier,
8408     'parcelle' => '',
8409     'libelle' => $parcelle['quartier']
8410     .$parcelle['section']
8411     .$parcelle['parcelle']
8412     );
8413    
8414     // Ajout de la ligne
8415 softime 8989 $dossier_parcelle->ajouter($value);
8416 mbroquet 3730 }
8417    
8418     // Si la liste des parcelles n'est pas vide
8419     if (count($list_parcelles) > 0) {
8420    
8421     // Récupère le code impôt de la première référence cadastrale
8422     $quartier_code_impots = $list_parcelles[0]['quartier'];
8423     // Récupère l'identifiant du quartier
8424     $quartier = $this->get_quartier_by_code_impot($quartier_code_impots);
8425    
8426     // Ajoute le quartier au dossier
8427     $this->modifier_quartier_dossier($dossier, $quartier);
8428     }
8429     }
8430    
8431     /**
8432     * Supprime les parcelles du dossier passé en paramètre et met à jour le
8433     * quartier du dossier.
8434     * @param string $dossier Identifiant du dossier
8435     */
8436     function supprimer_dossier_parcelle($dossier) {
8437    
8438     // Suppression des parcelles du dossier
8439     $sql = "DELETE FROM ".DB_PREFIXE."dossier_parcelle
8440     WHERE dossier='".$dossier."'";
8441 softime 8989 $res = $this->f->db->query($sql);
8442 softime 12847 $this->addToLog(
8443     __METHOD__."(): db->query(\"".$sql."\");",
8444     VERBOSE_MODE
8445     );
8446     $this->f->isDatabaseError($res);
8447 mbroquet 3730
8448     // Supprime le quartier dans dossier
8449     $this->modifier_quartier_dossier($dossier);
8450     }
8451    
8452     /**
8453     * Modifie le quartier au dossier.
8454     * @param string $dossier Numéro du dossier
8455     * @param integer $quartier Identifiant du quartier
8456     */
8457     function modifier_quartier_dossier($dossier, $quartier = null) {
8458    
8459     // Valeurs à mettre à jour
8460     $valF = array();
8461     $valF['quartier'] = $quartier;
8462    
8463     // Met à jour le quartier du dossier
8464     $cle = " dossier='".$dossier."'";
8465 softime 8989 $res = $this->f->db->autoExecute(
8466 mbroquet 3730 DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
8467     $this->addToLog("ajouter_quartier_dossier(): db->autoexecute(\""
8468     .DB_PREFIXE."dossier\", ".print_r($valF, true)
8469     .", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
8470     $this->f->isDatabaseError($res);
8471     }
8472    
8473     /**
8474     * Récupère le quartier par rapport au code impôts.
8475     * @param string $code_impots Code impôts du quartier
8476     *
8477     * @return integer Identifiant du quartier
8478     */
8479     function get_quartier_by_code_impot($code_impots) {
8480    
8481     // Initialisation résultat
8482     $quartier = null;
8483    
8484     // Si la condition n'est pas vide
8485     if ($code_impots != ""
8486     && $code_impots != null) {
8487    
8488     // Requête SQL
8489     $sql = "SELECT quartier
8490     FROM ".DB_PREFIXE."quartier
8491     WHERE code_impots = '".$code_impots."'";
8492     $this->f->addToLog(
8493     "get_quartier_by_code_impots() : db->getOne(\"".$sql."\")",
8494     VERBOSE_MODE);
8495 softime 8989 $quartier = $this->f->db->getOne($sql);
8496 mbroquet 3730 $this->f->isDatabaseError($quartier);
8497     }
8498    
8499     // Retourne résultat
8500     return $quartier;
8501     }
8502 softime 9245
8503     /**
8504     * TREATMENT - update_initial_dt.
8505     *
8506     * Cette méthode ajoute les données techniques initiales d'un DI au format JSON.
8507     *
8508     * @return boolean
8509     */
8510     public function update_initial_dt($dt_json) {
8511     //
8512     $this->begin_treatment(__METHOD__);
8513     //
8514     if ($dt_json === null || $dt_json === '') {
8515     return $this->end_treatment(__METHOD__, false);
8516     }
8517     //
8518     $this->correct = true;
8519     $data = array();
8520     $data["initial_dt"] = $dt_json;
8521     //
8522     $res = $this->f->db->autoExecute(
8523     sprintf('%s%s', DB_PREFIXE, $this->table),
8524     $data,
8525     DB_AUTOQUERY_UPDATE,
8526     sprintf("%s = '%s'", $this->clePrimaire, $this->valF[$this->clePrimaire])
8527     );
8528     $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);
8529     if ($this->f->isDatabaseError($res, true) === true) {
8530     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
8531     $this->correct = false;
8532     return $this->end_treatment(__METHOD__, false);
8533     }
8534     return $this->end_treatment(__METHOD__, true);
8535     }
8536    
8537    
8538 mbroquet 3730
8539     /**
8540     * Méthode permettant d'ajouter les données techniques d'un DI.
8541     *
8542     * @param integer $id identifiant de la demande
8543     * @param array $val tableau de valeurs postées via le formulaire
8544     *
8545     * @return boolean false si erreur
8546     */
8547 softime 8989 function ajoutDonneesTechniquesDI($id, $val) {
8548 mbroquet 3730
8549     //On vérifie que le dossier d'autorisation a des données techniques
8550     $sql = "SELECT * "
8551     ."FROM ".DB_PREFIXE."donnees_techniques "
8552     ."WHERE dossier_autorisation = '".$this->valF["dossier_autorisation"]."'";
8553 softime 8989 $dtda = $this->f->db->query($sql);
8554 mbroquet 3730 $this->addToLog(__METHOD__."(): db->query(\"".$sql."\")", VERBOSE_MODE);
8555     if($this->f->isDatabaseError($dtda, true)){
8556     $this->f->addToLog(__METHOD__."() : ERROR - Erreur de base de données. Impossible d'ajouter les données techniques du dossier d'instruction.", DEBUG_MODE);
8557     return false;
8558     }
8559    
8560     //Si le dossier d'autorisation a des données techniques
8561     if ( $dtda->numrows() == 1 ){
8562     //
8563 softime 7996 $dtdi = $this->f->get_inst__om_dbform(array(
8564     "obj" => "donnees_techniques",
8565     "idx" => "]",
8566     ));
8567 mbroquet 3730 //Préparation des données
8568     $valF = $dtda->fetchRow(DB_FETCHMODE_ASSOC);
8569 softime 9245
8570     //Sauvegarde des données techniques initiales
8571     //Conversion en JSON
8572     $dt_json = json_encode($valF);
8573    
8574     //Enregistrement en BDD
8575     $sauvegarde_bdd = $this->update_initial_dt($dt_json);
8576    
8577     //Gestion des erreurs
8578     if ($sauvegarde_bdd === false){
8579     $msg_error = __("Erreur de base de données. Impossible de sauvegarder les données techniques du dossier d'instruction au format JSON.");
8580     $this->f->addToLog(sprintf(
8581     "%s() : ERREUR - %s",
8582     __METHOD__,
8583     $msg_error
8584     ));
8585     $this->addToMessage(sprintf(
8586     "%s %s",
8587     $msg_error,
8588     __("Veuillez contacter votre administrateur.")
8589     ));
8590    
8591     return false;
8592     }
8593    
8594 mbroquet 3730 //Suppression de l'identifiant
8595     $valF["donnees_techniques"] = null;
8596     // Ajout du numéro de dossier d'instruction
8597     $valF['dossier_instruction'] = $this->valF['dossier'];
8598     // Suppression du numéro de dossier d'autorisation
8599     $valF['dossier_autorisation'] = null;
8600     // Ajout des données techniques
8601 softime 8989 if($dtdi->ajouter($valF) === false) {
8602 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du dossier d'instruction.", DEBUG_MODE);
8603     return false;
8604     }
8605     }
8606     else {
8607     //Le dossier d'autorisation n'a pas de données techniques
8608     $this->f->addToLog(__METHOD__."() : ERROR - le DA n'a pas de données techniques.", DEBUG_MODE);
8609     return -1;
8610     }
8611    
8612     //
8613     return true;
8614     }
8615    
8616     /**
8617 softime 12433 * Méthode permettant d'ajouter le dossier operateur d'un DI.
8618     *
8619     * @param integer $id identifiant de la demande
8620     * @param array $val tableau de valeurs postées via le formulaire
8621     *
8622     * @return boolean false si erreur
8623     */
8624     function ajoutDossierOperateurDI($id, $val) {
8625     //
8626     $dodi = $this->f->get_inst__om_dbform(array(
8627     "obj" => "dossier_operateur",
8628     "idx" => "]",
8629     ));
8630    
8631     $valF = array();
8632     foreach ($dodi->champs as $champ) {
8633     $valF[$champ] = null;
8634     }
8635     // Ajout du numéro de dossier d'instruction
8636     $valF['dossier_instruction'] = $this->valF['dossier'];
8637     // Ajout du dossier operateur
8638     if($dodi->ajouter($valF) === false) {
8639     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les dossier opérateur du dossier d'instruction.", DEBUG_MODE);
8640     return false;
8641     }
8642    
8643     //
8644     return true;
8645     }
8646    
8647     /**
8648 mbroquet 3730 * VIEW - contrainte.
8649     *
8650     * Vue des contraintes du dossier
8651     *
8652     * Cette vue permet de gérer le contenu de l'onglet "Contrainte(s)" sur un
8653     * dossier. Cette vue spécifique est nécessaire car l'ergonomie standard du
8654     * framework ne prend pas en charge ce cas.
8655     * C'est ici la vue spécifique des contraintes liées au dossier qui est
8656     * affichée directement au clic de l'onglet au lieu du soustab.
8657     *
8658     * L'idée est donc de simuler l'ergonomie standard en créant un container
8659     * et d'appeler la méthode javascript 'ajaxit' pour charger le contenu
8660     * de la vue visualisation de l'objet lié.
8661     *
8662     * @return void
8663     */
8664     function view_contrainte() {
8665     // Vérification de l'accessibilité sur l'élément
8666     $this->checkAccessibility();
8667     // Récupération des variables GET
8668     ($this->f->get_submitted_get_value('idxformulaire')!==null ? $idxformulaire =
8669     $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = "");
8670     ($this->f->get_submitted_get_value('retourformulaire')!==null ? $retourformulaire =
8671     $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = "");
8672 softime 6565 $obj = "dossier_contrainte";
8673     $type_aff_form = $this->get_type_affichage_formulaire();
8674     if ($type_aff_form === 'CTX RE' OR $type_aff_form === 'CTX IN') {
8675     $obj = "dossier_contrainte_contexte_ctx";
8676     }
8677 mbroquet 3730 // Objet à charger
8678     // Construction de l'url de sousformulaire à appeler
8679 softime 7996 $url = OM_ROUTE_SOUSFORM."&obj=".$obj;
8680 mbroquet 3730 $url .= "&action=4";
8681 softime 6929 $url .= "&idx=".$idxformulaire;
8682 mbroquet 3730 $url .= "&retourformulaire=".$retourformulaire;
8683     $url .= "&idxformulaire=".$idxformulaire;
8684     $url .= "&retour=form";
8685     // Affichage du container permettant le reffraichissement du contenu
8686     // dans le cas des action-direct.
8687     printf('
8688     <div id="sousform-href" data-href="%s">
8689     </div>',
8690     $url
8691     );
8692     // Affichage du container permettant de charger le retour de la requête
8693     // ajax récupérant le sous formulaire.
8694     printf('
8695     <div id="sousform-%s">
8696     </div>
8697     <script>
8698     ajaxIt(\'%s\', \'%s\');
8699     </script>',
8700     $obj,
8701     $obj,
8702     $url
8703     );
8704     }
8705    
8706     /**
8707     * Cette methode permet d'afficher le bouton de validation du formulaire
8708     *
8709     * @param integer $maj Mode de mise a jour
8710     * @return void
8711     */
8712     function bouton($maj) {
8713    
8714     if (!$this->correct
8715     && $this->checkActionAvailability() == true) {
8716     //
8717     switch($maj) {
8718     case 0 :
8719     $bouton = _("Ajouter");
8720     break;
8721     case 1 :
8722     $bouton = _("Modifier");
8723     break;
8724     case 2 :
8725     $bouton = _("Supprimer");
8726     break;
8727 softime 12124 case 200 :
8728     return;
8729 mbroquet 3730 default :
8730     // Actions specifiques
8731     if ($this->get_action_param($maj, "button") != null) {
8732     //
8733     $bouton = $this->get_action_param($maj, "button");
8734     } else {
8735     //
8736     $bouton = _("Valider");
8737     }
8738     break;
8739     }
8740     //
8741     $params = array(
8742     "value" => $bouton,
8743     "name" => "submit",
8744     "onclick"=>"return getDataFieldReferenceCadastrale();",
8745     );
8746     //
8747     $this->f->layout->display_form_button($params);
8748     }
8749    
8750     }
8751    
8752     /**
8753 softime 6929 * Récupère l'instance de paramétrage des taxes.
8754 mbroquet 3730 *
8755     * @param integer $taxe_amenagement Identifiant
8756     *
8757     * @return object
8758     */
8759     function get_inst_taxe_amenagement($taxe_amenagement = null) {
8760     //
8761 softime 6929 if ($this->inst_taxe_amenagement === null) {
8762 mbroquet 3730 //
8763 softime 6929 if ($taxe_amenagement === null) {
8764     //
8765 mbroquet 3730 $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($this->getVal('om_collectivite'));
8766 softime 6929
8767     // Si aucun paramétrage de taxe trouvé et que la collectivité
8768     // est mono
8769     if ($taxe_amenagement === null
8770     && $this->f->isCollectiviteMono($this->getVal('om_collectivite')) === true) {
8771     // Récupère la collectivité multi
8772     $om_collectivite_multi = $this->f->get_idx_collectivite_multi();
8773     //
8774     $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite_multi);
8775     }
8776    
8777     //
8778     if ($taxe_amenagement === null) {
8779     //
8780     return null;
8781     }
8782 mbroquet 3730 }
8783     //
8784 softime 7996 $this->inst_taxe_amenagement = $this->f->get_inst__om_dbform(array(
8785     "obj" => "taxe_amenagement",
8786     "idx" => $taxe_amenagement,
8787     ));
8788 mbroquet 3730 }
8789     //
8790     return $this->inst_taxe_amenagement;
8791     }
8792    
8793     /**
8794     * Récupère l'identifiant de la taxe d'aménagement par rapport à la collectivité.
8795     *
8796     * @param integer $om_collectivite La collectivité
8797     *
8798     * @return integer
8799     */
8800     function get_taxe_amenagement_by_om_collectivite($om_collectivite) {
8801 softime 6929 //
8802     $taxe_amenagement = null;
8803    
8804 mbroquet 3730 // Si la collectivité n'est pas renseigné
8805 softime 6929 if ($om_collectivite !== '' && $om_collectivite !== null) {
8806    
8807     // SQL
8808     $sql = "SELECT taxe_amenagement
8809     FROM ".DB_PREFIXE."taxe_amenagement
8810     WHERE om_collectivite = ".intval($om_collectivite);
8811     $taxe_amenagement = $this->f->db->getOne($sql);
8812     $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
8813     $this->f->isDatabaseError($taxe_amenagement);
8814 mbroquet 3730 }
8815    
8816     //
8817 softime 6929 return $taxe_amenagement;
8818 mbroquet 3730 }
8819    
8820     /**
8821     * [get_inst_donnees_techniques description]
8822     *
8823     * @param [type] $donnees_techniques [description]
8824     *
8825     * @return [type] [description]
8826     */
8827     function get_inst_donnees_techniques($donnees_techniques = null) {
8828     //
8829     if (is_null($this->inst_donnees_techniques)) {
8830     //
8831     if (is_null($donnees_techniques)) {
8832     $donnees_techniques = $this->getDonneesTechniques();
8833     }
8834     //
8835 softime 7996 $this->inst_donnees_techniques = $this->f->get_inst__om_dbform(array(
8836     "obj" => "donnees_techniques",
8837     "idx" => $donnees_techniques,
8838     ));
8839 mbroquet 3730 }
8840     //
8841     return $this->inst_donnees_techniques;
8842     }
8843    
8844    
8845     /**
8846 softime 10573 * TODO: replace with '$this->f->findObjectById' ?
8847     *
8848 mbroquet 3730 * Récupère l'instance du dossier d'autorisation.
8849     *
8850     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
8851     *
8852     * @return object
8853     */
8854 fmichon 4708 function get_inst_dossier_autorisation($dossier_autorisation = null) {
8855 mbroquet 3730 //
8856     return $this->get_inst_common("dossier_autorisation", $dossier_autorisation);
8857     }
8858    
8859    
8860     /**
8861     * Récupère l'instance du dossier d'autorisation, puis la clé d'accès au portail
8862     * citoyen associée à ce DA.
8863     *
8864     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
8865     *
8866     * @return string $cle_acces_citoyen si la clé d'accès existe
8867     * boolean false si la clé n'existe pas
8868     */
8869     protected function get_citizen_access_key($dossier_autorisation = null) {
8870     //
8871     $inst_da = $this->get_inst_dossier_autorisation($dossier_autorisation);
8872     // Récupération de la valeur de la clé d'accès
8873     $cle_acces_citoyen = $inst_da->getVal('cle_acces_citoyen');
8874     if ($cle_acces_citoyen === '' OR $cle_acces_citoyen === null) {
8875     return false;
8876     }
8877     return $cle_acces_citoyen;
8878     }
8879    
8880    
8881     /**
8882     * Récupère l'instance du type détaillé du dossier d'autorisation.
8883     *
8884     * @param integer $dossier_autorisation_type_detaille Identifiant
8885     *
8886     * @return object
8887     */
8888     function get_inst_dossier_autorisation_type_detaille($dossier_autorisation_type_detaille = null) {
8889     //
8890     if (is_null($this->inst_dossier_autorisation_type_detaille)) {
8891     //
8892     if (is_null($dossier_autorisation_type_detaille)) {
8893     //
8894     $dossier_autorisation = $this->get_inst_dossier_autorisation();
8895     //
8896     $dossier_autorisation_type_detaille = $dossier_autorisation->getVal('dossier_autorisation_type_detaille');
8897     }
8898     //
8899 softime 7996 $this->inst_dossier_autorisation_type_detaille = $this->f->get_inst__om_dbform(array(
8900     "obj" => "dossier_autorisation_type_detaille",
8901     "idx" => $dossier_autorisation_type_detaille,
8902     ));
8903 mbroquet 3730 }
8904     //
8905     return $this->inst_dossier_autorisation_type_detaille;
8906     }
8907    
8908     /**
8909     * Récupère l'instance du cerfa
8910     *
8911     * @param integer $cerfa Identifiant du cerfa
8912     *
8913     * @return object
8914     */
8915     function get_inst_cerfa($cerfa = null) {
8916     //
8917     if (is_null($this->inst_cerfa)) {
8918     //
8919     if (is_null($cerfa)) {
8920     //
8921     $dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
8922     //
8923     $cerfa = $dossier_autorisation_type_detaille->getVal('cerfa');
8924     }
8925     //
8926 softime 7996 $this->inst_cerfa = $this->f->get_inst__om_dbform(array(
8927     "obj" => "cerfa",
8928     "idx" => $cerfa,
8929     ));
8930 mbroquet 3730 }
8931     //
8932     return $this->inst_cerfa;
8933     }
8934    
8935     /**
8936     * CONDITION - is_user_from_allowed_collectivite.
8937     *
8938     * Cette condition permet de vérifier si l'utilisateur connecté appartient
8939     * à une collectivité autorisée : c'est-à-dire de niveau 2 ou identique à
8940     * la collectivité de l'enregistrement sur lequel on se trouve.
8941     *
8942     * @return boolean
8943     */
8944     function is_user_from_allowed_collectivite() {
8945    
8946     // Si l'utilisateur est de niveau 2
8947     if ($_SESSION["niveau"] == "2") {
8948     // Alors l'utilisateur fait partie d'une collectivité autorisée
8949     return true;
8950     }
8951    
8952     // L'utilisateur est donc de niveau 1
8953     // On vérifie donc si la collectivité de l'utilisateur est la même
8954     // que la collectivité de l'élément sur lequel on se trouve
8955     if ($_SESSION["collectivite"] === $this->getVal("om_collectivite")) {
8956     // Alors l'utilisateur fait partie d'une collectivité autorisée
8957     return true;
8958     }
8959    
8960     // L'utilisateur ne fait pas partie d'une collectivité autorisée
8961     return false;
8962     }
8963    
8964     /**
8965     * Création ou mise à jour du répertoire de numérisation.
8966     *
8967     * L'objet de cette méthode est la création ou la mise à jour de la date de
8968     * modification du répertoire de numérisation destiné à recevoir les pièces
8969     * numérisées pour un import automatique.
8970     * À chaque saisie d'une nouvelle demande dans openADS, le répertoire est
8971     * soit créé soit mis à jour pour être disponible en dehors d'openADS
8972     * (point de montage sur le serveur) pour permettre de déposer les pièces
8973     * numérisées directement depuis le copieur. À intervalle régulier, un
8974     * service vérifie le contenu de ces répertoire pour importer
8975     * automatiquement ces fichiers dans l'onglet 'Pièce(s)' du dossier
8976     * concerné.
8977     * La mise à jour de la date de modification est importante pour réaliser
8978     * la purge des répertoires vides sur la base de la date de la dernière
8979     * demande qui concerne le dossier.
8980     *
8981     * @return boolean
8982     */
8983     function create_or_touch_digitalization_folder() {
8984    
8985     // Nom du répertoire
8986     // Le répertoire créé possède comme nom le libellé du dossier avec
8987     // le suffixe séparé par un '.'. Exemple : PC0130551601234.P0
8988 nmeucci 4526 $separateur = '';
8989     if ($this->getSuffixe($this->getVal('dossier_instruction_type')) === 't') {
8990     $separateur = '.';
8991     }
8992    
8993 mbroquet 3730 $digitalization_folder_name = str_replace(
8994     $this->getVal("dossier_autorisation"),
8995 nmeucci 4526 $this->getVal("dossier_autorisation").$separateur,
8996 mbroquet 3730 $this->getVal($this->clePrimaire)
8997     );
8998    
8999     // Vérifie que l'option de numérisation des dossiers est désactivée
9000     if ($this->f->is_option_digitalization_folder_enabled() !== true) {
9001     //
9002     $this->addToLog(
9003     _("L'option de numerisation des dossiers n'est pas activee").".",
9004     DEBUG_MODE
9005     );
9006     return false;
9007     }
9008    
9009     // Vérifie le paramétrage du répertoire de numérisation
9010     if ($this->f->getParameter("digitalization_folder_path") === null) {
9011     //
9012     $this->addToLog(
9013     "Configuration du répertoire de numérisation incorrecte.",
9014     DEBUG_MODE
9015     );
9016     return false;
9017     }
9018    
9019     // Répertoire cible
9020     $root_folder_path = $this->f->getParameter("digitalization_folder_path");
9021    
9022     // Vérifie que le répertoire existe
9023     if (is_dir($root_folder_path) !== true) {
9024     //
9025     $this->addToLog(
9026     sprintf(
9027     "Le répertoire '%s' n'existe pas.",
9028     $root_folder_path
9029     ),
9030     DEBUG_MODE
9031     );
9032     return false;
9033     }
9034    
9035     // Répertoire des "à traiter"
9036     $todo_folder_path = $root_folder_path."Todo/";
9037    
9038     // Vérifie que le répertoire existe
9039     if (is_dir($todo_folder_path) !== true) {
9040     //
9041     $this->addToLog(
9042     sprintf(
9043     "Le répertoire '%s' n'existe pas.",
9044     $todo_folder_path
9045     ),
9046     DEBUG_MODE
9047     );
9048     return false;
9049     }
9050    
9051     // Répertoire de numérisation.
9052     $digitalization_folder_path = $todo_folder_path.$digitalization_folder_name;
9053    
9054     // Si le répertore existe déjà le répertoire n'est pas créé
9055     if (file_exists($digitalization_folder_path) == true) {
9056     // Mise à jour du répertoire
9057     if (touch($digitalization_folder_path) !== true) {
9058     // Si une erreur survient
9059     $this->addToLog(
9060     sprintf(
9061     "Erreur lors de la mise à jour du répertoire '%s'.",
9062     $digitalization_folder_path
9063     ),
9064     DEBUG_MODE
9065     );
9066     return false;
9067     }
9068     //
9069     return true;
9070     } else {
9071     // Création du répertoire
9072     if (mkdir($digitalization_folder_path) !== true) {
9073     //
9074     $this->addToLog(
9075     sprintf(
9076     "Erreur lors de la création du répertoire '%s'.",
9077     $digitalization_folder_path
9078     ),
9079     DEBUG_MODE
9080     );
9081     return false;
9082     }
9083     //
9084     return true;
9085     }
9086     }
9087    
9088 nmeucci 3876 /**
9089     * Récupère, convertit et retourne les logs de toutes les instructions
9090     *
9091     * @return array tableau indexé de logs
9092     */
9093     public function get_log_instructions() {
9094     $log_instructions = $this->getVal('log_instructions');
9095     // Gestion du premier log
9096 nmeucci 3887 if ($log_instructions === '') {
9097 nmeucci 3876 $log_instructions = json_encode(array());
9098     }
9099 nmeucci 3887 // Gestion du log invalide
9100     if(!$this->isJson($log_instructions)) {
9101     return false;
9102     }
9103 nmeucci 3876 return json_decode($log_instructions, true);
9104     }
9105    
9106     /**
9107     * Ajoute un log d'instruction aux logs existants
9108     *
9109     * @param array $log valeurs de l'instruction
9110     * @return bool vrai si traitement effectué avec succès
9111     */
9112     public function add_log_instructions($log) {
9113     // Begin
9114     $this->begin_treatment(__METHOD__);
9115     // Ajout du log
9116     $log_instructions = $this->get_log_instructions();
9117 nmeucci 3887 if ($log_instructions === false) {
9118     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
9119     return $this->end_treatment(__METHOD__, false);
9120     }
9121 nmeucci 3876 array_push($log_instructions, $log);
9122 nmeucci 3907 $log_instructions = json_encode($log_instructions);
9123 nmeucci 3876 // Mise à jour du DI
9124     $val = array("log_instructions"=>$log_instructions);
9125 softime 12847 $ret = $this->f->db->autoexecute(
9126 nmeucci 3876 DB_PREFIXE."dossier",
9127     $val,
9128     DB_AUTOQUERY_UPDATE,
9129 softime 12847 "dossier = '".$this->getVal('dossier')."'"
9130     );
9131     $this->addToLog(
9132     __METHOD__."(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($val, true).", DB_AUTOQUERY_UPDATE, \"dossier = '".$this->getVal('dossier')."'\");",
9133     VERBOSE_MODE
9134     );
9135     if ($this->f->isDatabaseError($ret, true) !== false) {
9136 nmeucci 3876 $this->erreur_db($ret->getDebugInfo(), $ret->getMessage(), 'dossier');
9137     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
9138     return $this->end_treatment(__METHOD__, false);
9139     }
9140     return $this->end_treatment(__METHOD__, true);
9141     }
9142    
9143 nmeucci 3887 /**
9144 fmichon 4708 * TREATMENT - mark_as_connected_to_referentiel_erp.
9145     *
9146     * Cette méthode permet de positionner le marqueur
9147     * 'interface_referentiel_erp' à 'true'. Cela signifie que le dossier est
9148     * connecté au référentiel ERP.
9149     *
9150     * @return boolean
9151     */
9152     function mark_as_connected_to_referentiel_erp() {
9153     //
9154     $this->begin_treatment(__METHOD__);
9155     //
9156     $data = array("interface_referentiel_erp" => true, );
9157     // Exécution de la requête
9158     $res = $this->f->db->autoExecute(
9159     DB_PREFIXE.$this->table,
9160     $data,
9161     DB_AUTOQUERY_UPDATE,
9162     $this->getCle($this->getVal($this->clePrimaire))
9163     );
9164     // Logger
9165     $this->addToLog(
9166     __METHOD__."(): db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($data, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($this->getVal($this->clePrimaire))."\");",
9167     VERBOSE_MODE
9168     );
9169     //
9170     if ($this->f->isDatabaseError($res, true)) {
9171     // Appel de la methode de recuperation des erreurs
9172     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
9173     $this->correct = false;
9174     $this->addToLog(
9175     __METHOD__."(): Problème erreur lors de la mise à jour du dossier",
9176     DEBUG_MODE
9177     );
9178     // Termine le traitement
9179     return $this->end_treatment(__METHOD__, false);
9180     }
9181     //
9182     $this->addToMessage(_("Le dossier est désormais 'connecté avec le référentiel ERP'."));
9183     return $this->end_treatment(__METHOD__, true);
9184     }
9185 nmeucci 3887
9186 fmichon 4708 /**
9187     * CONDITION - is_connected_to_referentiel_erp.
9188     *
9189     * @return boolean
9190     */
9191     function is_connected_to_referentiel_erp() {
9192     //
9193     if ($this->getVal("interface_referentiel_erp") !== "t") {
9194     return false;
9195     }
9196     //
9197     return true;
9198     }
9199    
9200 nhaye 4777
9201 fmichon 4708 /**
9202 nhaye 4777 * Retourne les données techniques applicables au dossier courant, càd les données
9203     * techniques liées au dossier avec seulement les champs du CERFA associé au type de
9204     * dossier.
9205     *
9206     * @return array $donnees_techniques_applicables Tableau associatif contenant
9207     * seulement les données techniques
9208     * applicables au dossier.
9209     */
9210     public function get_donnees_techniques_applicables() {
9211    
9212     // Récupération de l'identifiant des données techniques liées au dossier
9213     $donnees_techniques = $this->getDonneesTechniques();
9214    
9215     $inst_donnees_techniques = $this->get_inst_common('donnees_techniques', $donnees_techniques);
9216     $donnees_techniques_applicables = $inst_donnees_techniques->get_donnees_techniques_applicables();
9217     //
9218     return $donnees_techniques_applicables;
9219    
9220     }
9221    
9222    
9223     /**
9224 fmichon 4708 * Retourne un tableau avec les données du dossier d'instruction.
9225     *
9226 jymadier 5275 * L'objectif est de mettre à disposition via un WS REST un ensemble
9227 fmichon 4708 * de données exploitable par une autre application.
9228     */
9229     function get_datas() {
9230    
9231     /**
9232     *
9233     */
9234 nhaye 4777
9235 softime 10573 // TODO: replace '$this->get_inst_common' with '$this->f->findObjectById' ?
9236 nhaye 4777 $om_collectivite = $this->get_inst_common('om_collectivite', $this->getVal('om_collectivite'));
9237     $instructeur = $this->get_inst_common('instructeur', $this->getVal('instructeur'));
9238     $division = $this->get_inst_common('division', $this->getVal('division'));
9239 softime 9282 $etat = $this->get_inst_common('etat', $this->getVal('etat'));
9240 nhaye 4777 $dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
9241     $dossier_autorisation_type = $this->get_inst_common('dossier_autorisation_type', $dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
9242     $donnees_techniques = $this->get_donnees_techniques_applicables();
9243    
9244 fmichon 4708 //
9245     $datas = array(
9246     //
9247     "dossier_instruction" => $this->getVal($this->clePrimaire),
9248     //
9249     "dossier_autorisation" => $this->getVal("dossier_autorisation"),
9250     //
9251     "terrain_adresse_voie_numero" => $this->getVal("terrain_adresse_voie_numero"),
9252     "terrain_adresse_lieu_dit" => $this->getVal("terrain_adresse_lieu_dit"),
9253     "terrain_adresse_code_postal" => $this->getVal("terrain_adresse_code_postal"),
9254     "terrain_adresse_cedex" => $this->getVal("terrain_adresse_cedex"),
9255     "terrain_adresse_voie" => $this->getVal("terrain_adresse_voie"),
9256     "terrain_adresse_bp" => $this->getVal("terrain_adresse_bp"),
9257     "terrain_adresse_localite" => $this->getVal("terrain_adresse_localite"),
9258     "terrain_superficie" => $this->getVal("terrain_superficie"),
9259 softime 13528 "terrain_superficie_calculee" => $this->getVal("terrain_superficie_calculee"),
9260 fmichon 4708 //
9261     "references_cadastrales" => $this->f->parseParcelles($this->getVal("terrain_references_cadastrales"), $this->getVal('om_collectivite')),
9262 nhaye 4777 "dossier_autorisation_type" => $dossier_autorisation_type->getVal("libelle"),
9263     "dossier_autorisation_type_detaille" => $dossier_autorisation_type_detaille->getVal("libelle"),
9264     "collectivite" => $om_collectivite->getVal("libelle"),
9265     "instructeur" => $instructeur->getVal("nom"),
9266     "division" => $division->getVal("libelle"),
9267 softime 9282 "etat_dossier" => $etat->getVal("libelle"),
9268 nhaye 4777 "statut_dossier" => $this->getStatut(),
9269     "date_depot_initial" => $this->getVal("date_depot"),
9270     "date_limite_instruction" => $this->getVal("date_limite"),
9271     "date_decision" => $this->getVal("date_decision"),
9272     "enjeu_urbanisme" => $this->getVal("enjeu_urba") == 't' ? 'true' : 'false',
9273     "enjeu_erp" => $this->getVal("enjeu_erp") == 't' ? 'true' : 'false',
9274 fmichon 4708 );
9275    
9276 softime 6565 // Gestion des demandeurs.
9277 fmichon 4708 $this->listeDemandeur('dossier', $this->getVal($this->clePrimaire));
9278     //
9279 softime 6565 if (isset($this->valIdDemandeur["petitionnaire_principal"]) AND !empty($this->valIdDemandeur["petitionnaire_principal"])) {
9280 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
9281     "obj" => "petitionnaire",
9282     "idx" => $this->valIdDemandeur["petitionnaire_principal"][0],
9283     ));
9284 softime 6565 $datas["petitionnaire_principal"] = $demandeur->get_datas();
9285     $demandeur->__destruct();
9286     }
9287 fmichon 4708 //
9288     if (isset($this->valIdDemandeur["delegataire"]) && !empty($this->valIdDemandeur["delegataire"])) {
9289 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
9290     "obj" => "delegataire",
9291     "idx" => $this->valIdDemandeur["delegataire"][0],
9292     ));
9293 fmichon 4708 $datas["delegataire"] = $demandeur->get_datas();
9294     $demandeur->__destruct();
9295     }
9296     //
9297     if (isset($this->valIdDemandeur["petitionnaire"]) AND !empty($this->valIdDemandeur["petitionnaire"])) {
9298     $datas["autres_petitionnaires"] = array();
9299     foreach ($this->valIdDemandeur["petitionnaire"] as $petitionnaire) {
9300 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
9301     "obj" => "petitionnaire",
9302     "idx" => $petitionnaire,
9303     ));
9304 fmichon 4708 $datas["autres_petitionnaires"][] = $demandeur->get_datas();
9305     $demandeur->__destruct();
9306     }
9307     }
9308    
9309 nhaye 4777 // Tableau contenant le nom de chaque champ de données techniques à retourner
9310     $dt_a_afficher = array(
9311     "co_tot_log_nb",
9312     "co_cstr_exist",
9313     "co_uti_pers",
9314     "co_uti_vente",
9315     "co_uti_loc",
9316     "su_tot_shon_tot",
9317     "su_avt_shon_tot",
9318     "am_lot_max_nb",
9319     "am_empl_nb",
9320     );
9321    
9322 jymadier 4785 // Tableau associatif contenant les données techniques voulues
9323     $tab_donnees_techniques = array();
9324 nhaye 4777 foreach ($dt_a_afficher as $key) {
9325     // On ajoute le champ de données techniques dans le retour seulement s'il
9326     // existe dans $donnees_techniques (s'il est applicable au dossier)
9327 jymadier 4785 if (array_key_exists($key, $donnees_techniques) === true) {
9328 nhaye 4777 if ($donnees_techniques[$key] === 't') {
9329     $donnees_techniques[$key] = 'true';
9330     };
9331     if ($donnees_techniques[$key] === 'f') {
9332     $donnees_techniques[$key] = 'false';
9333     };
9334 jymadier 4785 $tab_donnees_techniques[$key] = $donnees_techniques[$key];
9335 nhaye 4777 };
9336     };
9337    
9338 jymadier 4785 $datas['donnees_techniques'] = $tab_donnees_techniques;
9339 softime 10573
9340     // Affiche le code INSEE de la collectivité du dossier d'instruction
9341     /*$collectivite = $this->f->getCollectivite($this->getVal('om_collectivite'));
9342     $datas['collectivite_insee'] = $collectivite["insee"];*/
9343     $datas['collectivite_insee'] = $this->get_da_insee();
9344 fmichon 4708 //
9345     return $datas;
9346     }
9347    
9348 softime 6565 /**
9349 softime 10573 * Renvoi le code INSEE du DA associé
9350     */
9351     protected function get_da_insee() {
9352     $inst_da = $this->f->get_inst__om_dbform(array(
9353     "obj" => "dossier_autorisation",
9354     "idx" => $this->getVal('dossier_autorisation')
9355     ));
9356     return $inst_da->getVal('insee');
9357     }
9358    
9359     /**
9360 softime 6565 * CONDITION - is_class_dossier_corresponding_to_his_groupe
9361     *
9362     * Vérifie la correspondance groupe/classe du dossier instancié.
9363     *
9364     * @param string $classe
9365     * @return boolean
9366     */
9367     protected function is_class_dossier_corresponding_to_type_form($classe) {
9368     $type_form = $this->get_type_affichage_formulaire();
9369     switch ($type_form) {
9370 softime 7067 case 'DPC';
9371 softime 6565 case 'ADS':
9372 softime 10573 case 'CONSULTATION ENTRANTE':
9373 softime 6565 if ($this->f->starts_with($classe, 'dossier_instruction') === true) {
9374     return true;
9375     }
9376     return false;
9377     case 'CTX RE':
9378     if ($this->f->ends_with($classe, '_recours') === true) {
9379     return true;
9380     }
9381     return false;
9382     case 'CTX IN':
9383     if ($this->f->ends_with($classe, '_infractions') === true) {
9384     return true;
9385     }
9386     return false;
9387     default:
9388     return false;
9389     }
9390     }
9391 nhaye 4777
9392 softime 6565
9393 softime 6272 /**
9394 softime 6565 * CONDITION - check_context
9395     *
9396     * Vérifie la correspondance groupes dossier/utilisateur.
9397     * Vérifie l'accès aux dossiers confidentiels.
9398     * Vérifie la correspondance groupe/classe.
9399     *
9400     * @return boolean
9401     */
9402     public function check_context() {
9403     // Le dossier doit être un objet valide
9404     $id = $this->getVal($this->clePrimaire);
9405     if ($id === 0 OR $id === '0' OR $id === '' OR $id === ']') {
9406     return false;
9407     }
9408    
9409     // Vérification que l'utilisateur a accès au dossier
9410     if ($this->can_user_access_dossier() === false) {
9411     return false;
9412     }
9413     // Vérification que la classe métier instanciée est adéquate.
9414 softime 7996 return $this->is_class_dossier_corresponding_to_type_form($this->get_absolute_class_name());
9415 softime 6565 }
9416    
9417     /**
9418     * VIEW - redirect.
9419     *
9420     * Cette vue est appelée lorsque l'on souhaite consulter un dossier dont on ne connaît pas le groupe.
9421     * Ce fonctionnement est nécessaire car les classes métier filles de 'dossier' sont relatives à ce groupe.
9422     *
9423     * Par exemple, depuis l'onglet "Dossiers Liés" du DI, le listing ne permet pas d'instancier chaque résultat
9424     * et par conséquent on n'a pas accès au groupe du dossier. L'action tableau consulter y est surchargée afin
9425     * d'amener à cette vue qui se charge de faire la redirection adéquate.
9426     *
9427     * @return void
9428     */
9429     public function redirect() {
9430     // Redirection vers la classe métier adéquate
9431     $context = $this->get_type_affichage_formulaire();
9432     switch ($context) {
9433     case 'ADS':
9434 softime 10573 case 'CONSULTATION ENTRANTE':
9435 softime 6565 $obj = 'dossier_instruction';
9436     break;
9437     case 'CTX RE':
9438     $obj = 'dossier_contentieux_tous_recours';
9439     break;
9440     case 'CTX IN':
9441     $obj = 'dossier_contentieux_toutes_infractions';
9442     break;
9443     default:
9444     return;
9445     }
9446     $idx = $this->getVal($this->clePrimaire);
9447 softime 7996 $link = OM_ROUTE_FORM.'&obj='.$obj.'&action=3&idx='.$idx;
9448 softime 6565 if ($this->f->get_submitted_get_value('retourformulaire') !== null
9449     && $this->f->get_submitted_get_value('idxformulaire') !== null) {
9450 softime 7996 $link .= '&premier=0&tricol=&retourformulaire='.$this->f->get_submitted_get_value('retourformulaire');
9451 softime 6565 $link .= '&idxformulaire='.$this->f->get_submitted_get_value('idxformulaire');
9452     }
9453    
9454     header('Location: '.$link);
9455     exit();
9456     }
9457    
9458    
9459     /**
9460     * CONDITION - is_confidentiel
9461     *
9462     * Permet de savoir si le type de dossier d'autorisation du dossier courant est
9463     * confidentiel.
9464     *
9465     * @return boolean true si le dossier est confidentiel, sinon false.
9466     *
9467     */
9468     public function is_confidentiel() {
9469     //
9470     $inst_dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
9471     $inst_dossier_autorisation_type = $this->get_inst_dossier_autorisation_type($inst_dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
9472     $confidentiel = $inst_dossier_autorisation_type->getVal('confidentiel');
9473     //
9474     if ($confidentiel === 't') {
9475     return true;
9476     }
9477     return false;
9478     }
9479    
9480    
9481     /**
9482     * CONDITION - can_user_access_dossier
9483     *
9484     * Effectue les vérifications suivantes :
9485     * - L'utilisateur doit avoir accès au groupe du dossier
9486     * - Si le dossier est confidentiel, l'utilisateur doit avoir accès aux dossiers
9487     * confidentiels de ce groupe
9488     *
9489     * @return boolean true si les conditions ci-dessus sont réunies, sinon false
9490     *
9491     */
9492     public function can_user_access_dossier() {
9493     // Récupère le code du groupe
9494     $groupe_dossier = $this->get_groupe();
9495    
9496     // Le groupe doit être accessible par l'utilisateur ;
9497     if ($this->f->is_user_in_group($groupe_dossier) === false) {
9498     return false;
9499     }
9500     if ($this->is_confidentiel() === true) {
9501     //
9502     if ($this->f->can_user_access_dossiers_confidentiels_from_groupe($groupe_dossier) === false) {
9503     return false;
9504     }
9505     }
9506     return true;
9507     }
9508    
9509    
9510     /**
9511 softime 6272 * Met à jour une métadonnée sur tous les fichiers liés au dossier.
9512     *
9513     * @param string $metadata Nom de la métadonnée.
9514     * @param string $metadata_value Nouvelle valeur de la métadonnée.
9515     *
9516     * @return boolean
9517     */
9518     public function update_metadata_by_dossier($metadata, $metadata_value) {
9519     // Rècupère la liste des fichiers stockés liés au dossier
9520     $sql = sprintf('
9521     SELECT uid AS uid
9522     FROM %1$sdocument_numerise
9523     WHERE dossier = \'%2$s\'
9524     AND document_numerise IS NOT NULL
9525     UNION
9526     SELECT fichier AS uid
9527     FROM %1$sconsultation
9528     WHERE dossier = \'%2$s\'
9529     AND fichier IS NOT NULL
9530     UNION
9531     SELECT om_fichier_consultation AS uid
9532     FROM %1$sconsultation
9533     WHERE dossier = \'%2$s\'
9534     AND om_fichier_consultation IS NOT NULL
9535     UNION
9536     SELECT om_fichier_instruction AS uid
9537     FROM %1$sinstruction
9538     WHERE dossier = \'%2$s\'
9539     AND om_fichier_instruction IS NOT NULL
9540     UNION
9541     SELECT om_fichier_rapport_instruction AS uid
9542     FROM %1$srapport_instruction
9543     WHERE dossier_instruction = \'%2$s\'
9544     AND om_fichier_rapport_instruction IS NOT NULL;
9545     ',
9546     DB_PREFIXE,
9547     $this->getVal($this->clePrimaire)
9548     );
9549     $res = $this->f->db->query($sql);
9550     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
9551     $this->f->isDatabaseError($res);
9552    
9553     // Définit la métadonnée à mettre à jour
9554     $metadata_update = array();
9555     $metadata_update[$metadata] = $metadata_value;
9556    
9557     // Pour chaque résultat
9558     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
9559     // Met à jour les métadonnées du fichier
9560     $uid_update = $this->f->storage->storage->update_metadata($row['uid'], $metadata_update);
9561    
9562     // Si la méthode ne retourne pas l'uid du fichier alors la mise
9563     // à jour ne s'est pas réalisée
9564     if ($uid_update !== $row['uid']) {
9565     //
9566     return false;
9567     }
9568     }
9569     $res->free();
9570    
9571     //
9572     return true;
9573     }
9574    
9575    
9576     /**
9577     * Traitement pour les ERP.
9578     * Si la valeur du champ 'erp' a été modifié, modifie la valeur de la
9579     * métadonnée concernceERP sur tous les fichiers liés au dossier.
9580     *
9581     * @param array $values Liste des nouvelles valeurs.
9582     *
9583     * @return boolean
9584     */
9585     public function update_concerneERP(array $values) {
9586     // Définit le champ et la métadonnée
9587     $champ = 'erp';
9588     $metadata = 'concerneERP';
9589    
9590     // Définit les valeurs à comparer
9591     $value_after = $this->get_boolean_from_view_value($values[$champ]);
9592     $value_before = $this->get_boolean_from_pgsql_value($this->getVal($champ));
9593    
9594     // Vérifie si la valeur du champ a été modifié
9595     if ($value_after !== $value_before) {
9596     // Transforme la valeur booléenne en string
9597     $metadata_value = 'false';
9598     if ($value_after === true) {
9599     $metadata_value = 'true';
9600     }
9601    
9602     // Met à jour les métadonnées des fichiers liés au dossier
9603     $update = $this->update_metadata_by_dossier($metadata, $metadata_value);
9604     //
9605     if ($update !== true) {
9606     //
9607     return false;
9608     }
9609     }
9610    
9611     //
9612     return true;
9613     }
9614    
9615    
9616 softime 6565 /**
9617 softime 10573 * TODO: replace with '$this->f->findObjectById' ?
9618     *
9619 softime 6565 * Récupère l'instance du groupe.
9620     *
9621     * @param string $groupe Identifiant du groupe.
9622     *
9623     * @return object
9624     */
9625     private function get_inst_groupe($groupe) {
9626     //
9627     return $this->get_inst_common("groupe", $groupe);
9628     }
9629    
9630    
9631     /**
9632 softime 10573 * TODO: replace with '$this->f->findObjectById' ?
9633     *
9634 softime 6565 * Récupère l'instance du type de dossier d'autorisation.
9635     *
9636     * @param string $dossier_autorisation_type Identifiant du type de dossier
9637     * d'autorisation.
9638     *
9639     * @return object
9640     */
9641     private function get_inst_dossier_autorisation_type($dossier_autorisation_type) {
9642     //
9643     return $this->get_inst_common("dossier_autorisation_type", $dossier_autorisation_type);
9644     }
9645    
9646    
9647 softime 7366 /**
9648     * Récupère l'instance de la demande du dossier
9649     *
9650     * @param mixed Identifiant de la demande
9651     *
9652     * @return object
9653     */
9654     function get_inst_demande($demande = null) {
9655     //
9656     if (is_null($this->inst_demande)) {
9657     //
9658     if (is_null($demande)) {
9659     $demande = $this->get_demande_by_dossier_instruction();
9660     }
9661     //
9662     return $this->get_inst_common("demande", $demande);
9663     }
9664     //
9665     return $this->inst_demande;
9666     }
9667    
9668    
9669     /**
9670 softime 7541 * Récupère l'identifiant de la demande initiale par le dossier d'instruction.
9671 softime 7366 *
9672     * @return integer
9673     */
9674     function get_demande_by_dossier_instruction() {
9675     // Initialisation de la variable de retour
9676     $res = null;
9677    
9678     // SQL
9679     $sql = "SELECT demande
9680     FROM ".DB_PREFIXE."demande
9681 softime 7541 WHERE dossier_instruction = '".$this->getVal($this->clePrimaire)."'
9682     ORDER BY instruction_recepisse ASC
9683     LIMIT 1";
9684 softime 7366 $res = $this->f->db->getOne($sql);
9685     $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
9686     $this->f->isDatabaseError($res);
9687    
9688     //
9689     return $res;
9690     }
9691    
9692 softime 7996 /**
9693     * TREATMENT - update_last_modification_date.
9694     *
9695     * Cette methode met à jour la date de dernière modification du dossier.
9696     *
9697     * @return boolean
9698     */
9699     public function update_last_modification_date() {
9700     //
9701     $this->begin_treatment(__METHOD__);
9702     //
9703     $this->correct = true;
9704 softime 9245 $valF = array();
9705     $valF["date_modification"] = 'NOW';
9706 softime 7996 //
9707     $res = $this->f->db->autoExecute(
9708     DB_PREFIXE.$this->table,
9709 softime 9245 $valF,
9710 softime 7996 DB_AUTOQUERY_UPDATE,
9711     $this->clePrimaire." = '".$this->getVal($this->clePrimaire)."'"
9712     );
9713     if ($this->f->isDatabaseError($res, true)) {
9714     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
9715     $this->correct = false;
9716     return $this->end_treatment(__METHOD__, false);
9717     } else {
9718     return $this->end_treatment(__METHOD__, true);
9719     }
9720     //
9721     return $this->end_treatment(__METHOD__, false);
9722     }
9723 softime 7366
9724 softime 7996 /**
9725     * TREATMENT - update_hash_sitadel.
9726     *
9727     * Cette methode met à jour le hash SITADEL du dossier.
9728     *
9729     * @return boolean
9730     */
9731     public function update_hash_sitadel($hash_sitadel = null) {
9732     //
9733     $this->begin_treatment(__METHOD__);
9734     //
9735     if ($hash_sitadel !== null && $hash_sitadel !== '') {
9736     //
9737     $this->correct = true;
9738 softime 9245 $valF = array();
9739     $valF["hash_sitadel"] = $hash_sitadel;
9740 softime 7996 //
9741     $res = $this->f->db->autoExecute(
9742     DB_PREFIXE.$this->table,
9743 softime 9245 $valF,
9744 softime 7996 DB_AUTOQUERY_UPDATE,
9745     $this->clePrimaire." = '".$this->getVal($this->clePrimaire)."'"
9746     );
9747     if ($this->f->isDatabaseError($res, true)) {
9748     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
9749     $this->correct = false;
9750     return $this->end_treatment(__METHOD__, false);
9751     } else {
9752     return $this->end_treatment(__METHOD__, true);
9753     }
9754     }
9755     //
9756     return $this->end_treatment(__METHOD__, false);
9757     }
9758    
9759 softime 8477 /**
9760 softime 9245 * TREATMENT - update_version_clos
9761     *
9762     * @param string $mode Mode de mise à jour ("up" ou "down")
9763     *
9764     * @return boolean
9765     */
9766     public function update_version_clos($mode) {
9767     //
9768     $this->begin_treatment(__METHOD__);
9769     //
9770     if ($mode !== 'up' && $mode !== 'down') {
9771     return $this->end_treatment(__METHOD__, false);
9772     }
9773     //
9774     $inst_da = $this->get_inst_dossier_autorisation($this->getVal("dossier_autorisation"));
9775     $da_version_clos = $inst_da->getval('numero_version_clos');
9776     //
9777     $this->correct = true;
9778     $data = array();
9779     $data["version_clos"] = 0;
9780     if ($da_version_clos !== null
9781     && $da_version_clos !== '') {
9782     //
9783     if ($mode === 'up') {
9784     $data["version_clos"] = intval($da_version_clos)+1;
9785     $inst_da->update_numero_version_clos($data["version_clos"]);
9786     }
9787     if ($mode === 'down') {
9788     $data["version_clos"] = null;
9789     }
9790     } else {
9791     $inst_da->update_numero_version_clos($data["version_clos"]);
9792     }
9793     //
9794     $res = $this->f->db->autoExecute(
9795     sprintf('%s%s', DB_PREFIXE, $this->table),
9796     $data,
9797     DB_AUTOQUERY_UPDATE,
9798     sprintf("%s = '%s'", $this->clePrimaire, $this->getVal($this->clePrimaire))
9799     );
9800     $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);
9801     if ($this->f->isDatabaseError($res, true) === true) {
9802     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
9803     $this->correct = false;
9804     return $this->end_treatment(__METHOD__, false);
9805     }
9806     return $this->end_treatment(__METHOD__, true);
9807     }
9808    
9809     /**
9810     * Récupère l'identifiant de l'état car le getVal() récupère le libellé.
9811     *
9812     * @return mixed Soit un string, soit "false"
9813     */
9814     function get_id_etat() {
9815 softime 13137 $qres = $this->f->get_one_result_from_db_query(
9816     sprintf(
9817     'SELECT
9818     etat
9819     FROM
9820     %1$sdossier
9821     WHERE
9822     dossier = \'%2$s\'',
9823     DB_PREFIXE,
9824     $this->f->db->escapeSimple($this->getVal($this->clePrimaire))
9825     ),
9826     array(
9827     "origin" => __METHOD__,
9828     "force_return" => true,
9829     )
9830 softime 9245 );
9831 softime 13137 if ($qres["code"] !== "OK") {
9832 softime 9245 return false;
9833     }
9834 softime 13137 return $qres["result"];
9835 softime 9245 }
9836    
9837     /**
9838 softime 13528 * Methode clesecondaire
9839     *
9840     * Vérifications Effectuées :
9841     * - Vérifie si le dossier est lié à un contentieux. Si c'est le cas
9842     * affiche un message d'erreur personnalisé et ne lance pas la
9843     * la vérification des clé étrangère.
9844     */
9845     function cleSecondaire($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
9846     // Le dossier d'instruction n'est pas supprimé si celui-ci est lié à un contentieux
9847     $autorisation_contestee = $this->get_idx_by_args(
9848     'autorisation_contestee',
9849     'dossier',
9850     'autorisation_contestee',
9851     $this->getVal($this->clePrimaire)
9852     );
9853     if (! empty($autorisation_contestee)) {
9854     $this->addToMessage(__("Le dossier d'instruction ne peut pas être supprimé car celui-ci est lié à un contentieux."));
9855     $this->correct = false;
9856     return;
9857     }
9858     parent::cleSecondaire($id, $dnu1, $val, $dnu2);
9859     }
9860    
9861     /**
9862 softime 8477 * Surcharge de la méthode rechercheTable pour éviter de court-circuiter le
9863     * générateur en devant surcharger la méthode cleSecondaire afin de supprimer
9864     * les éléments liés dans les tables NaN.
9865     *
9866 softime 13528 * Vérifications Effectuées :
9867     * - Vérifie si la table à chercher fait partie des tables que l'on va
9868     * supprimer si c'est le cas la vérification de la présence d'élement
9869     * n'est pas faite
9870     *
9871 softime 8477 * @param mixed $dnu1 Instance BDD - À ne pas utiliser
9872     * @param string $table Table
9873     * @param string $field Champ
9874     * @param mixed $id Identifiant
9875     * @param mixed $dnu2 Marqueur de débogage - À ne pas utiliser
9876     * @param string $selection Condition de la requête
9877     *
9878     * @return void
9879     */
9880 softime 13528 function rechercheTable(&$dnu1 = null, $table = "", $field = "", $id = null, $dnu2 = null, $selection = "") {
9881 softime 8477 // Dans le cas d'une suppression du dossier d'instruction, les tables
9882     // liées ne sont pas vérifiées
9883 softime 13528 if (! isset($this->related_tables)) {
9884     $this->set_related_tables();
9885     }
9886     // Récupère le nom des tables de liaison à partir de la liste des tables liées.
9887     // Vérifie pour chaque élément du tableau des liaisons si il existe une clé "table".
9888     // Si c'est le cas on récupère le nom de la table dans cette entrée si ce n'est pas
9889     // le cas on récupère la clé de l'élement car il dois contenir le nom de la table.
9890     // Ensuite supprime les doublons et renvoie un tableau contenant le nom des tables
9891     // liées pour lesquels la suppression va être effectuée.
9892     $liaison_suppr = array_unique( // supprime les doublons
9893     array_map(function($value, $key) { // Récupère le nom des tables de liaison
9894     return ! empty($value['table']) ? $value['table'] : $key;
9895     },
9896     $this->related_tables,
9897     array_keys($this->related_tables)
9898     ),
9899     SORT_STRING
9900 softime 8477 );
9901 softime 13528
9902 softime 8477 if ($this->get_action_crud() === 'delete'
9903 softime 13528 && in_array($table, $liaison_suppr) === true) {
9904     // Annule la vérif
9905 softime 8477 $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);
9906     return;
9907     }
9908 softime 13528
9909 softime 8477 parent::rechercheTable($this->f->db, $table, $field, $id, null, $selection);
9910     }
9911    
9912 softime 12124 /**
9913     * Effectue une requête sql pour récupérer la liste des id des demandeurs
9914     * associé au dossier et l'indicateur permettant de savoir si c'est un
9915     * demandeur principal ou pas.
9916     * Renvoi les résultats sous la forme d'un tableau.
9917     *
9918     * @return array|boolean tableau contenant les infos des demandeurs et false
9919     * en cas d'erreur de base de données.
9920     */
9921 softime 10573 public function get_demandeurs() {
9922     $query = sprintf('
9923 softime 12847 SELECT
9924     demandeur.demandeur,
9925     lien_dossier_demandeur.petitionnaire_principal,
9926     demandeur.type_demandeur
9927     FROM
9928     %1$sdemandeur
9929     INNER JOIN %1$slien_dossier_demandeur
9930     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
9931     WHERE
9932     lien_dossier_demandeur.dossier = \'%2$s\'',
9933 softime 10573 DB_PREFIXE,
9934     $this->getVal($this->clePrimaire)
9935     );
9936 softime 13137 $res = $this->f->get_all_results_from_db_query(
9937     $query,
9938     array(
9939     "origin" => __METHOD__,
9940     "force_return" => true,
9941     )
9942     );
9943 softime 10573 if ($res['code'] === 'KO') {
9944     return false;
9945     }
9946     return $res['result'];
9947     }
9948 softime 8477
9949 softime 10573 /**
9950     * TREATMENT - normalize_address
9951     *
9952     * Enregistre en base de données les valeurs concernant l'adresse normalisée.
9953     *
9954     * @param string $address Valeur de l'adresse normalisée.
9955     * @param string $address_json JSON de toutes les données de l'adresse normalisée.
9956     * @return boolean
9957     */
9958     public function normalize_address(string $address = null, string $address_json = '{}') {
9959     //
9960     $this->begin_treatment(__METHOD__);
9961     // Valeurs par défaut si l'adresse normalisée est vide
9962     if ($address === '') {
9963     $address = null;
9964     $address_json = '{}';
9965     }
9966     // Valeur par défaut pour le JSON de l'adresse si l'adresse saisie ne
9967     // correspond au label du JSON, donc adresse non sélectionnée parmis les
9968     // résultats retourner par l'API adresse
9969     if ($address !== null) {
9970     $address_json_decode = json_decode($address_json, true);
9971     if (isset($address_json_decode['label']) === true
9972     && $address !== $address_json_decode['label']) {
9973     //
9974     $address_json = '{}';
9975     }
9976     }
9977     //
9978     $this->correct = true;
9979     $data = array();
9980     $data["adresse_normalisee"] = $address;
9981     $data["adresse_normalisee_json"] = $address_json;
9982     //
9983     $res = $this->f->db->autoExecute(
9984     sprintf('%s%s', DB_PREFIXE, $this->table),
9985     $data,
9986     DB_AUTOQUERY_UPDATE,
9987     sprintf("%s = '%s'", $this->clePrimaire, $this->getVal($this->clePrimaire))
9988     );
9989     $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);
9990     if ($this->f->isDatabaseError($res, true) === true) {
9991     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
9992     $this->correct = false;
9993     return $this->end_treatment(__METHOD__, false);
9994     }
9995     return $this->end_treatment(__METHOD__, true);
9996     }
9997 mbroquet 3730
9998 softime 10573 public function get_last_instruction_decision() {
9999 softime 13137 $qres = $this->f->get_one_result_from_db_query(
10000     sprintf(
10001     'SELECT
10002     instruction.instruction
10003     FROM
10004     %1$sinstruction
10005     INNER JOIN %1$sdossier
10006     ON dossier.dossier = instruction.dossier
10007     INNER JOIN %1$setat
10008     ON dossier.etat = etat.etat
10009     WHERE
10010     instruction.etat = dossier.etat
10011     AND instruction.dossier = \'%2$s\'
10012     AND etat.statut = \'cloture\'
10013     ORDER BY
10014     instruction.instruction DESC
10015     LIMIT 1',
10016     DB_PREFIXE,
10017     $this->f->db->escapeSimple($this->getVal('dossier'))
10018     ),
10019     array(
10020     "origin" => __METHOD__,
10021     "force_return" => true,
10022     )
10023 softime 10573 );
10024 softime 13137 if ($qres["code"] !== "OK") {
10025 softime 10573 return false;
10026     }
10027 softime 13137 return $qres["result"];
10028 softime 10573 }
10029 softime 7996
10030 softime 10573 /**
10031     * VIEW - view_normalize_address.
10032     *
10033     * Formulaire de recherche de l'adresse normalisée.
10034     *
10035     * @return void
10036     */
10037     public function view_normalize_address() {
10038     // Vérification de l'accessibilité sur l'élément
10039     $this->checkAccessibility();
10040    
10041     // Par défaut l'adresse saisie est celle renseignée sur le dossier
10042     $address_val = trim(preg_replace('/\s\s+/', ' ', sprintf('%s %s %s %s %s %s %s',
10043     $this->getVal('terrain_adresse_voie_numero'),
10044     $this->getVal('terrain_adresse_voie'),
10045     $this->getVal('terrain_adresse_lieu_dit'),
10046     $this->getVal('terrain_adresse_localite'),
10047     $this->getVal('terrain_adresse_code_postal'),
10048     $this->getVal('terrain_adresse_bp'),
10049     $this->getVal('terrain_adresse_cedex')
10050     )));
10051     $address_val_json = '{}';
10052     if ($this->getVal('adresse_normalisee') !== null
10053     && $this->getVal('adresse_normalisee') !== '') {
10054     //
10055     $address_val = $this->getVal('adresse_normalisee');
10056     $address_val_json = htmlentities($this->getVal('adresse_normalisee_json'));
10057     if ($this->f->get_submitted_post_value("submit-normalize") === null) {
10058     $this->f->displayMessage("error", __("L'adresse de ce terrain a déjà été normalisée."));
10059     }
10060     }
10061    
10062     /**
10063     * TREATMENT
10064     */
10065     // Traitement si validation du formulaire
10066     if ($this->f->get_submitted_post_value("submit-normalize") !== null) {
10067     //
10068     $this->normalize_address($_POST["address"], $_POST["address_json"]);
10069     return;
10070     }
10071    
10072     // Formulaire de validation
10073     $this->f->layout->display__form_container__begin(array(
10074     "action" => "",
10075     "name" => "f2_normalize_address",
10076     "onsubmit" => "normalize_address(this);return false;",
10077     ));
10078     //
10079     printf('
10080     <div id="sousform-href" data-href="%s"></div>',
10081     $this->compose_form_url("form", array(
10082     "validation" => null,
10083     "maj" => 160,
10084     "retour" => "form",
10085     ))
10086     );
10087     $champs = array('address', 'address_json', );
10088     // Instanciation de l'objet formulaire
10089     $this->form = $this->f->get_inst__om_formulaire(array(
10090     "validation" => 0,
10091     "maj" => $this->getParameter("maj"),
10092     "champs" => $champs,
10093     ));
10094     // Paramétrage des champs du formulaire
10095     // address
10096     $this->form->setLib("address", __("adresse à normaliser"));
10097     $this->form->setTaille("address", 60);
10098     $this->form->setMax("address", 255);
10099     $this->form->setType("address", "text");
10100     $this->form->setVal('address', $address_val);
10101     // address_json
10102     $this->form->setType("address_json", "hidden");
10103     $this->form->setVal('address_json', $address_val_json);
10104     $this->f->displayDescription(__("Veuillez sélectionner l'adresse normalisée qui se rapproche le plus de l'adresse du terrain."));
10105     // Ouverture du conteneur de formulaire
10106     $this->form->entete();
10107     $this->form->afficher($champs, 0, false, false);
10108     $this->form->enpied();
10109     $this->f->layout->display__form_controls_container__begin(array(
10110     "controls" => "bottom",
10111     ));
10112     $this->f->layout->display__form_input_submit(array(
10113     "name" => "submit-normalize",
10114     "value" => __("Normaliser l'adresse"),
10115     "class" => "boutonFormulaire",
10116     ));
10117     $this->f->layout->display__form_controls_container__end();
10118     //
10119     $this->f->layout->display__form_container__end();
10120     }
10121    
10122    
10123     public function get_last_instruction_incompletude() {
10124 softime 13137 $qres = $this->f->get_one_result_from_db_query(
10125     sprintf(
10126     'SELECT
10127     instruction.instruction
10128     FROM
10129     %1$sinstruction
10130     INNER JOIN %1$sevenement
10131     ON evenement.evenement = instruction.evenement
10132     WHERE
10133     instruction.dossier = \'%2$s\'
10134     AND evenement.type = \'incompletude\'
10135     ORDER BY
10136     instruction.instruction DESC
10137     LIMIT 1',
10138     DB_PREFIXE,
10139     $this->f->db->escapeSimple($this->getVal('dossier'))
10140     ),
10141     array(
10142     "origin" => __METHOD__,
10143     "force_return" => true,
10144     )
10145 softime 10573 );
10146 softime 13137 if ($qres["code"] !== "OK") {
10147 softime 10573 return false;
10148     }
10149 softime 13137 return $qres["result"];
10150 softime 10573 }
10151    
10152     function get_max_num_suffixe($dat_c, $annee, $dep_c, $com_c, $num) {
10153 softime 13137 $qres = $this->f->get_one_result_from_db_query(
10154     sprintf(
10155     'SELECT
10156     MAX(numerotation_num_suffixe) as max_num_suffixe
10157     FROM
10158     %1$sdossier
10159     WHERE
10160     numerotation_type = \'%2$s\'
10161     AND annee = \'%3$s\'
10162     AND numerotation_dep = \'%4$s\'
10163     AND numerotation_com = \'%5$s\'
10164     AND numerotation_num = \'%6$s\'',
10165     DB_PREFIXE,
10166     $this->f->db->escapeSimple($dat_c),
10167     $this->f->db->escapeSimple($annee),
10168     $this->f->db->escapeSimple($dep_c),
10169     $this->f->db->escapeSimple($com_c),
10170     $this->f->db->escapeSimple($num)
10171     ),
10172     array(
10173     "origin" => __METHOD__,
10174     "force_return" => true,
10175     )
10176 softime 10573 );
10177 softime 13137 if ($qres["code"] !== "OK") {
10178 softime 10573 return null;
10179     }
10180 softime 13137 return $qres["result"];
10181 softime 10573 }
10182    
10183     public function view_json_data() {
10184     $this->checkAccessibility();
10185     $this->f->disableLog();
10186     $view = $this->get_json_data();
10187     printf(json_encode($view));
10188     }
10189    
10190     public function get_json_data() {
10191     $val = array_combine($this->champs, $this->val);
10192     foreach ($val as $key => $value) {
10193     $val[$key] = strip_tags($value);
10194     }
10195     $inst_datd = $this->get_inst_dossier_autorisation_type_detaille();
10196     $inst_dat = $this->get_inst_dossier_autorisation_type($inst_datd->getVal('dossier_autorisation_type'));
10197     $val['dossier_autorisation_type_detaille_code'] = $inst_datd->getVal('code');
10198     $val['dossier_autorisation_type_code'] = $inst_dat->getVal('code');
10199     $val['dossier_instruction_type_code'] = $this->getCode($this->getVal('dossier_instruction_type'));
10200     $val['dossier_suffixe'] = '';
10201     if ($this->getSuffixe($this->getVal('dossier_instruction_type')) === 't') {
10202     $val['dossier_suffixe'] = sprintf('%s%s',
10203     $this->getCode($this->getVal('dossier_instruction_type')),
10204     $this->get_dossier_instruction_version()
10205     );
10206     }
10207     /*$parameters = $this->f->getCollectivite($this->getVal('om_collectivite'));
10208     $val['insee'] = $parameters['insee'];*/
10209     $val['insee'] = $this->get_da_insee();
10210     $inst_ac = $this->get_inst_autorite_competente($val['autorite_competente']);
10211     $val['autorite_competente_code'] = $inst_ac->getVal('code');
10212 softime 10808 $val['source_depot'] = $this->get_source_depot_from_demande();
10213 softime 10573 return $val;
10214     }
10215    
10216     public function update_by_instruction(array $val, array $extra_params = array()) {
10217     $this->begin_treatment(__METHOD__);
10218     // XXX Supprime les champs qui n'existent pas dans dossier
10219     $valF = $val;
10220     unset($valF['instruction']);
10221 softime 10968 unset($valF['crud']);
10222 softime 10573 if (empty($valF) === false) {
10223     $res = $this->f->db->autoExecute(
10224     sprintf('%s%s', DB_PREFIXE, $this->table),
10225     $valF,
10226     DB_AUTOQUERY_UPDATE,
10227     sprintf("%s = '%s'", $this->clePrimaire, $this->getVal($this->clePrimaire))
10228     );
10229     $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);
10230     if ($this->f->isDatabaseError($res, true) === true) {
10231     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
10232     $this->correct = false;
10233     return $this->end_treatment(__METHOD__, false);
10234     }
10235     }
10236     $trigger = $this->trigger_update_by_instruction($val);
10237     if ($trigger === false) {
10238 softime 10808 $this->addToLog(__METHOD__."(): ".__("Erreur lors de la mise à jour par instruction."), DEBUG_MODE);
10239 softime 10573 $this->correct = false;
10240     return $this->end_treatment(__METHOD__, false);
10241     }
10242     return $this->end_treatment(__METHOD__, true);
10243     }
10244    
10245     protected function trigger_update_by_instruction(array $val, array $extra_params = array()) {
10246     foreach ($this->task_types as $task_type) {
10247     $method = sprintf('add_task_%s', $task_type);
10248     if (method_exists($this, $method) === true) {
10249     //
10250     if ($this->f->is_type_dossier_platau($this->getVal('dossier_autorisation')) === true
10251 softime 10808 && $this->getVal('etat_transmission_platau') !== 'jamais_transmissible'
10252     && ($this->f->is_option_mode_service_consulte_enabled() !== true
10253     || ($this->f->is_option_mode_service_consulte_enabled() === true
10254 softime 13137 && ($this->get_source_depot_from_demande() === PLATAU
10255     || $this->get_source_depot_from_demande() === PORTAL)))) {
10256 softime 10573 //
10257     $res = $this->$method($val, $extra_params);
10258     if ($res !== true) {
10259     return $res;
10260     }
10261     }
10262     }
10263     }
10264     return true;
10265     }
10266    
10267     protected function add_task_pec_metier_consultation(array $val, array $extra_params = array()) {
10268     if (array_key_exists("pec_metier", $val) === true
10269 softime 11228 && $val['pec_metier'] !== null
10270     && $val['pec_metier'] !== '') {
10271 softime 10573 //
10272     $inst_task = $this->f->get_inst__om_dbform(array(
10273     "obj" => "task",
10274     "idx" => 0,
10275     ));
10276     $task_val = array(
10277     'type' => 'pec_metier_consultation',
10278     'object_id' => $val['instruction'],
10279     'dossier' => $this->getVal($this->clePrimaire),
10280     );
10281     if ($this->f->is_option_mode_service_consulte_enabled() === false
10282     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
10283     $task_val['state'] = $inst_task::STATUS_DRAFT;
10284     }
10285     $add_task = $inst_task->add_task(array('val' => $task_val));
10286     if ($add_task === false) {
10287     return false;
10288     }
10289     }
10290     return true;
10291     }
10292    
10293     protected function add_task_qualification_DI(array $val, array $extra_params = array()) {
10294     if (array_key_exists("autorite_competente", $val) === true
10295     && $val["autorite_competente"] !== $this->getVal('autorite_competente')) {
10296     //
10297     $inst_task = $this->f->get_inst__om_dbform(array(
10298     "obj" => "task",
10299     "idx" => 0,
10300     ));
10301     $task_val = array(
10302     'type' => 'qualification_DI',
10303     'object_id' => $val['instruction'],
10304     'dossier' => $this->getVal($this->clePrimaire),
10305     );
10306     if ($this->f->is_option_mode_service_consulte_enabled() === false
10307     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
10308     $task_val['state'] = $inst_task::STATUS_DRAFT;
10309     }
10310     $add_task = $inst_task->add_task(array('val' => $task_val));
10311     if ($add_task === false) {
10312     return false;
10313     }
10314     }
10315     return true;
10316     }
10317    
10318     protected function add_task_decision_DI(array $val, array $extra_params = array()) {
10319     if (array_key_exists("date_decision", $val) === true
10320     && array_key_exists("avis_decision", $val) === true
10321     && $val['date_decision'] !== null
10322     && $val['date_decision'] !== ''
10323     && $val['avis_decision'] !== null
10324 softime 11228 && $val['avis_decision'] !== '') {
10325 softime 10573 //
10326 softime 10869 $inst_ad = $this->f->get_inst__om_dbform(array(
10327     "obj" => "avis_decision",
10328     "idx" => $val['avis_decision'],
10329 softime 10573 ));
10330 softime 10869 if ($inst_ad->getVal('prescription') === 'f') {
10331     //
10332     $inst_task = $this->f->get_inst__om_dbform(array(
10333     "obj" => "task",
10334     "idx" => 0,
10335     ));
10336     $task_val = array(
10337     'type' => 'decision_DI',
10338     'object_id' => $val['instruction'],
10339     'dossier' => $this->getVal($this->clePrimaire),
10340     );
10341     if ($this->f->is_option_mode_service_consulte_enabled() === false
10342     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
10343     $task_val['state'] = $inst_task::STATUS_DRAFT;
10344     }
10345     $add_task = $inst_task->add_task(array('val' => $task_val));
10346     if ($add_task === false) {
10347     return false;
10348     }
10349 softime 10573 }
10350     }
10351     return true;
10352     }
10353    
10354     protected function add_task_avis_consultation(array $val, array $extra_params = array()) {
10355     if (array_key_exists("date_decision", $val) === true
10356     && array_key_exists("avis_decision", $val) === true
10357     && $val['date_decision'] !== null
10358     && $val['date_decision'] !== ''
10359     && $val['avis_decision'] !== null
10360 softime 11228 && $val['avis_decision'] !== '') {
10361 softime 10573 //
10362 softime 10869 $inst_ad = $this->f->get_inst__om_dbform(array(
10363     "obj" => "avis_decision",
10364     "idx" => $val['avis_decision'],
10365 softime 10573 ));
10366 softime 10869 if ($inst_ad->getVal('prescription') === 'f') {
10367     //
10368     $inst_task = $this->f->get_inst__om_dbform(array(
10369     "obj" => "task",
10370     "idx" => 0,
10371     ));
10372     $task_val = array(
10373     'type' => 'avis_consultation',
10374     'object_id' => $val['instruction'],
10375     'dossier' => $this->getVal($this->clePrimaire),
10376     );
10377     if ($this->f->is_option_mode_service_consulte_enabled() === false
10378     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
10379     $task_val['state'] = $inst_task::STATUS_DRAFT;
10380     }
10381     $add_task = $inst_task->add_task(array('val' => $task_val));
10382     if ($add_task === false) {
10383     return false;
10384     }
10385 softime 10573 }
10386 softime 10869 }
10387     return true;
10388     }
10389    
10390     protected function add_task_prescription(array $val, array $extra_params = array()) {
10391     if (array_key_exists("date_decision", $val) === true
10392     && array_key_exists("avis_decision", $val) === true
10393     && $val['date_decision'] !== null
10394     && $val['date_decision'] !== ''
10395     && $val['avis_decision'] !== null
10396 softime 11228 && $val['avis_decision'] !== '') {
10397 softime 10869 //
10398     $inst_ad = $this->f->get_inst__om_dbform(array(
10399     "obj" => "avis_decision",
10400     "idx" => $val['avis_decision'],
10401     ));
10402     if ($inst_ad->getVal('prescription') === 't') {
10403     //
10404     $inst_task = $this->f->get_inst__om_dbform(array(
10405     "obj" => "task",
10406     "idx" => 0,
10407     ));
10408     $task_val = array(
10409     'type' => 'prescription',
10410     'object_id' => $val['instruction'],
10411     'dossier' => $this->getVal($this->clePrimaire),
10412     );
10413     if ($this->f->is_option_mode_service_consulte_enabled() === false
10414     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
10415     $task_val['state'] = $inst_task::STATUS_DRAFT;
10416     }
10417     $add_task = $inst_task->add_task(array('val' => $task_val));
10418     if ($add_task === false) {
10419     return false;
10420     }
10421 softime 10573 }
10422     }
10423     return true;
10424     }
10425    
10426     protected function add_task_completude_DI(array $val, array $extra_params = array()) {
10427     if (array_key_exists("incomplet_notifie", $val) === true
10428 softime 10968 && $val['incomplet_notifie'] === 'f'
10429     && array_key_exists("crud", $val) === true
10430     && $val['crud'] !== 'delete') {
10431 softime 10573 //
10432     $inst_task = $this->f->get_inst__om_dbform(array(
10433     "obj" => "task",
10434     "idx" => 0,
10435     ));
10436     $task_val = array(
10437     'type' => 'completude_DI',
10438     'object_id' => $val['instruction'],
10439     'dossier' => $this->getVal($this->clePrimaire),
10440     );
10441     if ($this->f->is_option_mode_service_consulte_enabled() === false
10442     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
10443     $task_val['state'] = $inst_task::STATUS_DRAFT;
10444     }
10445     $add_task = $inst_task->add_task(array('val' => $task_val));
10446     if ($add_task === false) {
10447     return false;
10448     }
10449     }
10450     return true;
10451     }
10452    
10453     public function add_task_incompletude_DI(array $val, array $extra_params = array()) {
10454     if (array_key_exists("incomplet_notifie", $val) === true
10455 softime 10968 && $val['incomplet_notifie'] === 't'
10456     && array_key_exists("crud", $val) === true
10457     && $val['crud'] !== 'delete') {
10458 softime 10573 //
10459     $inst_task = $this->f->get_inst__om_dbform(array(
10460     "obj" => "task",
10461     "idx" => 0,
10462     ));
10463     $task_val = array(
10464     'type' => 'incompletude_DI',
10465     'object_id' => $val['instruction'],
10466     'dossier' => $this->getVal($this->clePrimaire),
10467     );
10468     if ($this->f->is_option_mode_service_consulte_enabled() === false
10469     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
10470     $task_val['state'] = $inst_task::STATUS_DRAFT;
10471     }
10472     $add_task = $inst_task->add_task(array('val' => $task_val));
10473     if ($add_task === false) {
10474     return false;
10475     }
10476     }
10477     return true;
10478     }
10479    
10480     public function get_parcelles($dossier = null) {
10481     if ($dossier === null) {
10482     $dossier = $this->getVal('dossier');
10483     }
10484     $query = sprintf('
10485     SELECT *
10486     FROM %1$sdossier_parcelle
10487     WHERE dossier = \'%2$s\'
10488     ORDER BY dossier_parcelle
10489     ',
10490     DB_PREFIXE,
10491     $dossier
10492     );
10493 softime 13137 $res = $this->f->get_all_results_from_db_query(
10494     $query,
10495     array(
10496     "origin" => __METHOD__,
10497     "force_return" => true,
10498     )
10499     );
10500 softime 10573 if ($res['code'] === 'KO') {
10501     return false;
10502     }
10503     return $res['result'];
10504     }
10505    
10506     protected function getDossier($champ = null) {
10507     return $this->getVal($this->clePrimaire);
10508     }
10509    
10510     protected function getDossierObject() {
10511     return $this;
10512     }
10513    
10514     /**
10515     * Recupère la source du dépôt
10516     *
10517     * @return string source du dépôt
10518     */
10519     public function get_source_depot_from_demande() {
10520     $demande = $this->get_inst_demande();
10521     return $demande->getVal('source_depot');
10522     }
10523    
10524 softime 13137 /**
10525     * Récupère l'instance de consultation entrante associé au dossier.
10526     *
10527     * @return consultation_entrante
10528     */
10529     public function get_inst_consultation_entrante() {
10530     $dossier = $this->getVal($this->clePrimaire);
10531     $qres = $this->f->get_one_result_from_db_query(
10532     sprintf(
10533     'SELECT
10534     consultation_entrante
10535     FROM
10536     %1$sconsultation_entrante
10537     WHERE
10538     dossier = \'%2$s\'',
10539     DB_PREFIXE,
10540     $this->f->db->escapeSimple($dossier)
10541     ),
10542     array(
10543     "origin" => __METHOD__
10544     )
10545     );
10546     $consultationEntrante = $this->f->get_inst__om_dbform(array(
10547     'obj' => 'consultation_entrante',
10548     'idx' => $qres['result']
10549     ));
10550     return $consultationEntrante;
10551     }
10552    
10553     /**
10554     * Récupère l'instance du département lié à la commune du dossier.
10555     *
10556     * @return departement
10557     */
10558     public function get_inst_departement_dossier() {
10559     // Si le dossier n'a pas de commune associé alors il n'est pas non
10560     // plus associé à un département. On renvoie donc null.
10561     if (empty($this->getVal('commune'))) {
10562     return null;
10563     }
10564     $qres = $this->f->get_one_result_from_db_query(
10565     sprintf(
10566     'SELECT
10567     departement
10568     FROM
10569     %1$scommune
10570     LEFT JOIN %1$sdepartement
10571     ON commune.dep = departement.dep
10572     WHERE
10573     commune = %2$s',
10574     DB_PREFIXE,
10575     $this->f->db->escapeSimple($this->getVal('commune'))
10576     ),
10577     array(
10578     "origin" => __METHOD__
10579     )
10580     );
10581     $departement = $this->f->get_inst__om_dbform(array(
10582     'obj' => 'departement',
10583     'idx' => $qres['result']
10584     ));
10585     return $departement;
10586     }
10587 softime 13528
10588    
10589     /**
10590     * Met à jour les informations (log) d'actions de localisation sur un dossier.
10591     *
10592     * @param string $action Nom de l'action.
10593     * @param string $date Date de l'action.
10594     * @param boolean $etat Etat de l'action.
10595     * @param string $message Message de retour de l'action.
10596     *
10597     * @return boolean false si erreur de traitement, true sinon.
10598     */
10599     public function update_dossier_geolocalisation($action, $date, $etat, $message, $dossier = null) {
10600     if ($dossier == null) {
10601     $dossier = $this->getVal('dossier');
10602     }
10603     require_once "../obj/dossier_geolocalisation.class.php";
10604     $dossier_geolocalisation = new dossier_geolocalisation(
10605     null,
10606     null,
10607     null,
10608     $dossier
10609     );
10610    
10611     return $dossier_geolocalisation->set_geolocalisation_state(
10612     $action,
10613     $date,
10614     $etat,
10615     $message
10616     );
10617     }
10618    
10619    
10620     /**
10621     * Retourne une instance du connecteur geoads, et la créer si elle n'existe pas.
10622     *
10623     * @param array $collectivite Informations de la collectivité.
10624     *
10625     * @return geoads Instance du connecteur.
10626     */
10627     protected function get_geoads_instance(array $collectivite, string $dossierIdx) {
10628     $extra_params = array(
10629     "inst_framework" => $this->f,
10630     "dossier_idx" => $dossierIdx,
10631     );
10632     // Instanciation de l'abstracteur geoads
10633     try {
10634     $this->geoads_instance = new geoads($collectivite, $extra_params);
10635     } catch (geoads_exception $e) {
10636     $this->handle_geoads_exception($e, $dossierIdx);
10637     return false;
10638     }
10639     return $this->geoads_instance;
10640     }
10641    
10642    
10643     /**
10644     * Traitement des erreurs retournées par l'abstracteur geoads.
10645     *
10646     * @param geoads_exception $exception Exception retournée par l'abstracteur.
10647     *
10648     * @return void
10649     */
10650     protected function handle_geoads_exception(geoads_exception $exception, $dossierId = null) {
10651     if ($dossierId == null) {
10652     $dossierId = $this->getVal("dossier");
10653     }
10654     // log le message d'erreur retourné par le webservice
10655     $this->f->addToLog(
10656     "geolocalisation : Traitement webservice SIG: id dossier = ".
10657     $dossierId." : ".$exception->getMessage(), DEBUG_MODE
10658     );
10659     $return['log'] = array(
10660     "date" => date('d/m/Y H:i:s'),
10661     "etat" => false,
10662     "message" => $exception->getMessage(),
10663     );
10664     if ($this->f->isAjaxRequest()) {
10665     echo json_encode($return);
10666     die(); // TODO traiter correctement les erreurs !
10667     } else {
10668     $this->f->displayMessage('error', $return["log"]["message"]);
10669     }
10670     }
10671    
10672    
10673     /**
10674     * Réplication de la géolocalisation d'un dossier sur un autre.
10675     *
10676     * @param string $di Identifiant du DI qui va être mis à jour
10677     * @param string $da Identifiant du DA associé au DI
10678     * @param string $collectivite Identifiant de la collectivité associée au DI
10679     * @param string $commune (Optionel) Identifiant de la commune associée au DI
10680     * @param string $ref (Optionel) Identifiant de DI contenant la géolocalisation à répliquer
10681     *
10682     * @return bool|string 'true' si tout s'est bien passé, sinon un message d'erreur
10683     */
10684     public function replicate_geolocalisation(string $di, string $da, string $collectivite,
10685     string $commune = null, string $ref = null) {
10686     $this->addToLog(__METHOD__."() BEGIN", EXTRA_VERBOSE_MODE);
10687    
10688     if (empty($di)) {
10689     $di = $this->getVal('dossier');
10690     }
10691    
10692     // si le sig est activé/configuré
10693     if ($this->f->is_option_sig_enabled($collectivite)) {
10694    
10695     // récupération du DI qui vient d'être créé
10696     if (empty($di_inst = $this->f->findObjectById('dossier', $di))) {
10697     return sprintf(
10698     __("Erreur lors de la récupération du DI %s (dossier non-trouvé)"),
10699     $di);
10700     }
10701    
10702     // si un dossier référence est spécifié
10703     if (! empty($ref)) {
10704     $prev_di_idx = $ref;
10705     $err_msg = sprintf(__("Erreur lors de la récupération du DI référence %s"), $ref);
10706     }
10707    
10708     // aucun dossier référence spécifié
10709     else {
10710    
10711     // si on est en mode service consulté, cela concerne des consultations
10712     // et il faut également rechercher un dossier de même type DI
10713     $sameTypeWhereCond = '';
10714     if ($this->f->is_option_mode_service_consulte_enabled($collectivite)) {
10715     $sameTypeWhereCond = 'AND dossier_instruction_type = '.
10716     intval($di_inst->getVal('dossier_instruction_type'));
10717     }
10718    
10719     // récupération du DI le plus récent sur le DA
10720     $qres = $this->f->get_one_result_from_db_query(
10721     sprintf("
10722     SELECT
10723     dossier
10724     FROM
10725     ".DB_PREFIXE."dossier
10726     WHERE
10727     om_collectivite = '%s'
10728     AND dossier_autorisation = '%s'
10729     AND version < %d
10730     AND dossier != '%s'
10731     $sameTypeWhereCond
10732     ORDER BY
10733     version DESC
10734     LIMIT 1
10735     ",
10736     $this->f->db->escapeSimple($collectivite),
10737     $this->f->db->escapeSimple($da),
10738     intval($di_inst->getVal('version')),
10739     $this->f->db->escapeSimple($di)),
10740     array(
10741     "origin" => __METHOD__,
10742     "force_return" => true,
10743     )
10744     );
10745     $err_msg = sprintf(
10746     __("Erreur lors de la récupération du DI le plus récent pour le DA %s"),
10747     $da);
10748     if ($qres["code"] !== "OK") {
10749     $this->addToLog(__METHOD__.'() '.$err_msg);
10750     return $err_msg;
10751     }
10752     if (empty($prev_di_idx = $qres["result"])) {
10753     $this->addToLog(__METHOD__.'() '.$err_msg." (pas de DI trouvé)");
10754     return $err_msg;
10755     }
10756     }
10757    
10758     $prev_di_inst = $this->f->findObjectById('dossier', $prev_di_idx);
10759     if (empty($prev_di_inst)) {
10760     $this->addToLog(__METHOD__.'() '.$err_msg);
10761     return $err_msg;
10762     }
10763    
10764     // si le DI le plus récent est géolocalisé
10765     if (! empty($prev_di_inst->getVal('geom'))) {
10766    
10767     // récupère une instance du connecteur SIG
10768     $collectivite_param = $this->f->getCollectivite($collectivite);
10769     $extra_params = array(
10770     "inst_framework" => $this->f,
10771     );
10772     if ($this->f->is_option_dossier_commune_enabled() === true
10773     && !empty($commune)) {
10774     $extra_params['commune_idx'] = $commune;
10775     }
10776     try {
10777     $geoads = new geoads($collectivite_param, $extra_params);
10778     } catch (geoads_exception $e) {
10779     return __("Erreur lors de l'instanciation du connecteur sig").
10780     ' '.__("Détail: ").json_encode($e->getMessage());
10781     }
10782    
10783     // si le SIG implémente la fonctionnalité de réplication de la
10784     // géolocalisation d'un dossier à partir d'un autre
10785     if (method_exists($geoads, 'methodIsImplemented')
10786     && $geoads->methodIsImplemented('replicate_geolocalisation')) {
10787     try {
10788    
10789     // réplication de sa géolocalisation sur le DI courant
10790     if (! $geoads->replicate_geolocalisation($prev_di_idx, $di)) {
10791     $err_msg = sprintf(
10792     __("Erreur lors de la réplication de la géolocalisation du DI %s sur le DI %"),
10793     $prev_di_idx,
10794     $di);
10795     $this->addToLog(__METHOD__.'() '.$err_msg);
10796     return $err_msg;
10797     }
10798    
10799     // enregistrement du succès de la création du dossier/emprise
10800     $msg = sprintf(
10801     __("Emprise/dossier créé à partir du dossier %s"),
10802     $prev_di_idx);
10803     $this->addToLog(__METHOD__."() msg: $msg");
10804     $now_dt_text = (new Datetime())->format('Y-m-d H:i:s');
10805     if (! $di_inst->update_dossier_geolocalisation('calcul_emprise', $now_dt_text, true, $msg)) {
10806     $err_msg = sprintf(
10807     __("Erreur lors de la réplication de la géolocalisation du DI %s à partir du %s (le dossier a bien été créé/géolocalisé dans le SIG mais le message d'information n'a pas pu être enregistré)"),
10808     $di, $prev_di_idx);
10809     $this->addToLog(__METHOD__.'() '.$err_msg);
10810     }
10811    
10812     // enregistrement du geom (centroide)
10813     $sql = sprintf("
10814     UPDATE
10815     ".DB_PREFIXE."dossier
10816     SET
10817     geom = public.ST_GeomFromText('%s', %s)
10818     WHERE
10819     dossier = '%s'",
10820     $prev_di_inst->getVal('geom'),
10821     $collectivite_param['sig']['sig_referentiel'],
10822     $this->f->db->escapeSimple($di)
10823     );
10824     $qres = $this->f->db->query($sql);
10825     if ($this->f->isDatabaseError($qres, true)) {
10826     $err_msg = sprintf(
10827     __("Erreur lors de l'enregistrement du centroide dans le dossier %s (le dossier a bien été créé/géolocalisé dans le SIG)"),
10828     $di);
10829     $this->addToLog(__METHOD__.'() '.$err_msg);
10830     }
10831     else {
10832    
10833     // enregistrement du message pour le centroide
10834     $msg = sprintf(
10835     __("Centroide récupéré à partir du dossier %s"),
10836     $prev_di_idx);
10837     $this->addToLog(__METHOD__."() msg: $msg");
10838     $now_dt_text = (new Datetime())->format('Y-m-d H:i:s');
10839     if (! $di_inst->update_dossier_geolocalisation('calcul_centroide', $now_dt_text, true, $msg)) {
10840     $err_msg = sprintf(
10841     __("Erreur lors de la réplication de la géolocalisation du DI %s à partir du %s (le dossier a bien été créé/géolocalisé dans le SIG mais le message d'information sur le centroide n'a pas pu être enregistré)"),
10842     $di, $prev_di_idx);
10843     $this->addToLog(__METHOD__.'() '.$err_msg);
10844     }
10845    
10846     // réplication des contraintes
10847     $sql = sprintf("
10848     INSERT INTO
10849     ".DB_PREFIXE."dossier_contrainte
10850     (dossier_contrainte, dossier, contrainte, texte_complete, reference)
10851     SELECT
10852     nextval('".DB_PREFIXE."dossier_contrainte_seq'),
10853     '%s',
10854     contrainte,
10855     texte_complete,
10856     reference
10857     FROM
10858     ".DB_PREFIXE."dossier_contrainte
10859     WHERE
10860     dossier = '%s'",
10861     $this->f->db->escapeSimple($di),
10862     $this->f->db->escapeSimple($prev_di_idx));
10863     $qres = $this->f->db->query($sql);
10864     if ($this->f->isDatabaseError($qres, true)) {
10865     $err_msg = sprintf(
10866     __("Erreur lors de la réplication des contraintes sig du dossier %s à partir du dossier %s (le dossier a bien été créé/géolocalisé dans le SIG)"),
10867     $di, $prev_di_idx);
10868     $this->addToLog(__METHOD__.'() '.$err_msg);
10869     }
10870     else {
10871    
10872     // enregistrement du message pour les contraintes
10873     $msg = sprintf(
10874     __("Contraintes récupérées à partir du dossier %s"),
10875     $prev_di_idx);
10876     $this->addToLog(__METHOD__."() msg: $msg");
10877     $now_dt_text = (new Datetime())->format('Y-m-d H:i:s');
10878     if (! $di_inst->update_dossier_geolocalisation('recup_contrainte', $now_dt_text, true, $msg)) {
10879     $err_msg = sprintf(
10880     __("Erreur lors de la réplication de la géolocalisation du DI %s à partir du %s (le dossier a bien été créé/géolocalisé dans le SIG mais le message d'information sur les contraintes n'a pas pu être enregistré)"),
10881     $di, $prev_di_idx);
10882     $this->addToLog(__METHOD__.'() '.$err_msg);
10883     }
10884     }
10885     }
10886     }
10887     catch(geoads_connector_method_not_implemented_exception $e) {
10888     $this->addToLog(__METHOD__."() Method not impletemented 'replicate_geolocalisation'");
10889     }
10890     }
10891     }
10892     }
10893    
10894     return true;
10895     }
10896 softime 10573 }

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26