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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 14542 - (hide annotations)
Thu Apr 20 13:21:47 2023 UTC (21 months, 2 weeks ago) by softime
File size: 514366 byte(s)
chore(branch): fusion de la branche d'intégration 5.17.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 softime 14542 require_once "../obj/task.class.php";
13 softime 13528
14 mbroquet 3730 class dossier extends dossier_gen {
15    
16 softime 14064 const LAT_LON_REGEX = "/^(?P<deg>\d+)(°|d) *(?P<min>\d+)[.,](?P<dec>\d+)('|`|′)? *(?P<dir>[NSEOW])\$/";
17    
18 mbroquet 3730 var $maj;
19     var $dossier_instruction_type;
20     var $is_incomplet_notifie = null;
21 softime 6565 var $valIdDemandeur = array("petitionnaire_principal" => array(),
22     "delegataire" => array(),
23     "petitionnaire" => array(),
24     "plaignant_principal" => array(),
25     "plaignant" => array(),
26     "contrevenant_principal" => array(),
27     "contrevenant" => array(),
28     "requerant_principal" => array(),
29     "requerant" => array(),
30     "avocat_principal" => array(),
31     "avocat" => array(),
32 softime 7067 "bailleur_principal" => array(),
33     "bailleur" => array(),
34 softime 10573 "proprietaire" => array(),
35     "architecte_lc" => array(),
36     "paysagiste" => array(),
37 softime 6565 );
38     var $postedIdDemandeur = array("petitionnaire_principal" => array(),
39     "delegataire" => array(),
40     "petitionnaire" => array(),
41     "plaignant_principal" => array(),
42     "plaignant" => array(),
43     "contrevenant_principal" => array(),
44     "contrevenant" => array(),
45     "requerant_principal" => array(),
46     "requerant" => array(),
47     "avocat_principal" => array(),
48     "avocat" => array(),
49 softime 7067 "bailleur_principal" => array(),
50     "bailleur" => array(),
51 softime 10573 "proprietaire" => array(),
52     "architecte_lc" => array(),
53     "paysagiste" => array(),
54 softime 6565 );
55 mbroquet 3730 /**
56     * Instance de la classe taxe_amenagement.
57     *
58     * @var null
59     */
60     var $inst_taxe_amenagement = null;
61    
62     /**
63     * Instance de la classe donnees_techniques.
64     *
65     * @var null
66     */
67     var $inst_donnees_techniques = null;
68    
69     /**
70     * Instance de la classe dossier_autorisation.
71     *
72     * @var mixed (resource | null)
73     */
74     var $inst_dossier_autorisation = null;
75    
76     /**
77     * Instance de la classe dossier_autorisation_type_detaille.
78     *
79     * @var null
80     */
81     var $inst_dossier_autorisation_type_detaille = null;
82    
83     /**
84     * Instance de la classe cerfa.
85     *
86     * @var null
87     */
88     var $inst_cerfa = null;
89    
90 softime 6565 /**
91     * Groupe du dossier d'instruction.
92     *
93     * @var null
94     */
95     var $groupe = null;
96 mbroquet 3730
97 softime 6565 /**
98     * Instance de la classe groupe.
99     */
100     var $inst_groupe = null;
101    
102     /**
103     * Instance de la classe dossier_autorisation_type.
104     *
105     * @var null
106     */
107     var $inst_dossier_autorisation_type = null;
108    
109 softime 7366 /**
110     * Instance de la classe demande.
111     *
112     * @var mixed (resource | null)
113     */
114     var $inst_demande = null;
115 softime 10573
116     /**
117     * Liste des types de tâches.
118     *
119     * @var array
120     */
121     var $task_types = array(
122     'incompletude_DI',
123     'qualification_DI',
124     'decision_DI',
125     'completude_DI',
126     'pec_metier_consultation',
127     'avis_consultation',
128     'modification_DI',
129 softime 10869 'prescription',
130 softime 14064 'lettre_incompletude',
131     'lettre_majoration'
132 softime 10573 );
133    
134     /**
135     * Liste des champs requis dans Plat'AU.
136     *
137     * @var array
138     */
139     var $list_platau_required_fields_dossier = array(
140     'donnees_techniques.enga_decla_date',
141     'donnees_techniques.enga_decla_lieu',
142     'dossier.terrain_adresse_localite',
143     'demandeur.localite',
144     'architecte.ville'
145     );
146    
147 softime 14542
148 softime 13528 /**
149 softime 14542 * Liaison NaN
150     *
151     * Tableau contenant les objets qui représente les liaisons.
152     */
153     var $liaisons_nan = array(
154     "lien_dossier_nature_travaux" => array(
155     "table_l" => "lien_dossier_nature_travaux",
156     "table_f" => "nature_travaux",
157     "field" => "nature_travaux",
158     )
159     );
160    
161     /**
162 softime 13528 * Set un tableau pour la conception des requêtes de suppression des éléments
163     * dans les tables de liaisons.
164     * Le tableau est constitué de la manière suivante :
165     * 'nom_de_la_table' => array(
166     * 'table' => "nom de la table à supprimer si il
167     * n'a pas pu être renseigné comme clé du tableau",
168     * 'condition_field' => 'nom du champs utilisée pour identifier
169     * les éléments liés',
170     * 'condition_value' => 'valeur utilisée pour identifier les
171     * éléments liés'
172     * ),
173     *
174     * @var array
175     */
176     public function set_related_tables() {
177     $this->related_tables = array(
178     'lien_demande_demandeur' => array(
179     'condition_field' => 'demande',
180     'condition_value' => $this->get_idx_by_args(
181     'demande',
182     'demande',
183     'dossier_instruction',
184     $this->getVal($this->clePrimaire)),
185     ),
186     'demande' => array(
187     'condition_field' => 'dossier_instruction',
188     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
189     ),
190     'lien_dossier_demandeur' => array(
191     'condition_field' => 'dossier',
192     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
193     ),
194     'instruction_notification_document' => array(
195     'condition_field' => 'instruction_notification',
196     'condition_value' => sprintf(
197     'SELECT
198     %2$s
199     FROM
200     %1$s%2$s
201     WHERE
202     %3$s IN (%4$s)',
203     DB_PREFIXE,
204     'instruction_notification',
205     'instruction',
206     sprintf(
207     'SELECT
208     %2$s
209     FROM
210     %1$s%2$s
211     WHERE
212     %3$s = \'%4$s\'',
213     DB_PREFIXE,
214     'instruction',
215     'dossier',
216     $this->getVal($this->clePrimaire)
217     )
218     ),
219     ),
220     'instruction_notification' => array(
221     'condition_field' => 'instruction',
222     'condition_value' => sprintf(
223     'SELECT
224     %2$s
225     FROM
226     %1$s%2$s
227     WHERE
228     %3$s = \'%4$s\'',
229     DB_PREFIXE,
230     'instruction',
231     'dossier',
232     $this->getVal($this->clePrimaire)
233     ),
234     ),
235     'instruction' => array(
236     'condition_field' => 'dossier',
237     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
238     ),
239     'dossier_parcelle' => array(
240     'condition_field' => 'dossier',
241     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
242     ),
243     'dossier_contrainte' => array(
244     'condition_field' => 'dossier',
245     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
246     ),
247     'lien_donnees_techniques_moyen_retenu_juge' => array(
248     'condition_field' => 'donnees_techniques',
249     'condition_value' => $this->get_idx_by_args(
250     'donnees_techniques',
251     'donnees_techniques',
252     'dossier_instruction',
253     $this->getVal($this->clePrimaire)),
254     ),
255     'lien_donnees_techniques_moyen_souleve' => array(
256     'condition_field' => 'donnees_techniques',
257     'condition_value' => $this->get_idx_by_args(
258     'donnees_techniques',
259     'donnees_techniques',
260     'dossier_instruction',
261     $this->getVal($this->clePrimaire)),
262     ),
263     'donnees_techniques_di' => array(
264     'table' => 'donnees_techniques',
265     'condition_field' => 'dossier_instruction',
266     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
267     ),
268     'blocnote' => array(
269     'condition_field' => 'dossier',
270     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
271     ),
272     'consultation_entrante' => array(
273     'condition_field' => 'dossier',
274     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
275     ),
276     'consultation' => array(
277     'condition_field' => 'dossier',
278     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
279     ),
280     'document_numerise' => array(
281     'condition_field' => 'dossier',
282     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
283     ),
284     'rapport_instruction' => array(
285     'condition_field' => 'dossier_instruction',
286     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
287     ),
288     'dossier_commission' => array(
289     'condition_field' => 'dossier',
290     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
291     ),
292     'dossier_message' => array(
293     'condition_field' => 'dossier',
294     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
295     ),
296     'lien_dossier_dossier_1' => array(
297     'table' => 'lien_dossier_dossier',
298     'condition_field' => 'dossier_src',
299     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
300     ),
301     'lien_dossier_dossier_2' => array(
302     'table' => 'lien_dossier_dossier',
303     'condition_field' => 'dossier_cible',
304     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
305     ),
306     'dossier_geolocalisation' => array(
307     'condition_field' => 'dossier',
308     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
309     ),
310     'donnees_techniques_lot' => array(
311     'table' => 'donnees_techniques',
312     'condition_field' => 'lot',
313     'condition_value' => $this->get_idx_by_args(
314     "string_agg(lot::text, ', ')",
315     'lot',
316     'dossier',
317     $this->getVal($this->clePrimaire)),
318     ),
319     'lien_lot_demandeur' => array(
320     'condition_field' => 'lot',
321     'condition_value' => $this->get_idx_by_args(
322     "string_agg(lot::text, ', ')",
323     'lot',
324     'dossier',
325     $this->getVal($this->clePrimaire)),
326     ),
327     'lot' => array(
328     'condition_field' => 'dossier',
329     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
330     ),
331     'dossier_operateur' => array(
332     'condition_field' => 'dossier_instruction',
333     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
334 softime 14542 ),
335     'lien_dossier_nature_travaux' => array(
336     'condition_field' => 'dossier',
337     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
338 softime 13528 )
339     );
340     }
341 softime 10573
342 softime 13528
343 mbroquet 3730 /*Mutateur pour ma variable dossier_instruction_type*/
344     public function getDossierInstructionType(){
345     return $this->dossier_instruction_type;
346     }
347     public function setDossierInstructionType($dossier_instruction_type){
348     $this->dossier_instruction_type = $dossier_instruction_type;
349     }
350    
351     /**
352     * Définition des actions disponibles sur la classe.
353     *
354     * @return void
355     */
356     function init_class_actions() {
357    
358     parent::init_class_actions();
359    
360     // ACTION - 003 - consulter
361     //
362 softime 6565 $this->class_actions[3]["condition"] = array(
363     "is_user_from_allowed_collectivite",
364     "check_context",
365     );
366 mbroquet 3730
367     // ACTION - 004 - contrainte
368     //
369     $this->class_actions[4] = array(
370     "identifier" => "contrainte",
371     "view" => "view_contrainte",
372     "permission_suffix" => "contrainte_tab",
373     "condition" => array(
374     "is_user_from_allowed_collectivite",
375     ),
376     );
377    
378     // ACTION - 005 - view_document_numerise
379     // Interface spécifique du tableau des pièces
380     $this->class_actions[5] = array(
381     "identifier" => "view_document_numerise",
382     "view" => "view_document_numerise",
383     "permission_suffix" => "document_numerise",
384     "condition" => array(
385     "is_user_from_allowed_collectivite",
386     ),
387     );
388    
389     // ACTION - 006 - view_sitadel
390     //
391     $this->class_actions[6] = array(
392     "identifier" => "sitadel",
393     "view" => "view_sitadel",
394     "permission_suffix" => "export_sitadel",
395     );
396 softime 6565
397     // ACTION - 777 - Redirection vers la classe fille adéquate
398     //
399     $this->class_actions[777] = array(
400     "identifier" => "redirect",
401     "view" => "redirect",
402     "permission_suffix" => "consulter",
403     );
404 softime 10573
405     //
406     //
407     $this->class_actions[998] = array(
408     "identifier" => "json_data",
409     "view" => "view_json_data",
410     "permission_suffix" => "consulter",
411     );
412 mbroquet 3730 }
413    
414     /**
415 softime 8989 * Clause select pour la requête de sélection des données de l'enregistrement.
416     *
417     * @return array
418     */
419     function get_var_sql_forminc__champs() {
420 softime 10573 $champs = array(
421 softime 8989 "dossier.dossier",
422 softime 10573 "dossier.om_collectivite AS om_collectivite"
423     );
424     if ($this->f->is_option_dossier_commune_enabled()) {
425     $champs[] = "dossier.commune AS commune";
426     }
427     array_push($champs,
428 softime 8989 "dossier.dossier_libelle",
429     "dossier.dossier_instruction_type",
430     "dossier_autorisation_type_detaille.libelle as dossier_autorisation_type_detaille",
431     "autorisation_contestee",
432     "donnees_techniques.ctx_reference_dsj as ctx_reference_dsj",
433     "donnees_techniques.ctx_reference_sagace as ctx_reference_sagace",
434     "dossier.depot_electronique",
435     "CASE WHEN requerant_principal.qualite='particulier' THEN
436     TRIM(CONCAT(requerant_principal.particulier_nom, ' ', requerant_principal.particulier_prenom))
437     ELSE
438     TRIM(CONCAT(requerant_principal.personne_morale_raison_sociale, ' ', requerant_principal.personne_morale_denomination))
439     END as requerants",
440     "CASE WHEN petitionnaire_principal.qualite='particulier' THEN
441     TRIM(CONCAT(petitionnaire_principal.particulier_nom, ' ', petitionnaire_principal.particulier_prenom))
442     ELSE
443     TRIM(CONCAT(petitionnaire_principal.personne_morale_raison_sociale, ' ', petitionnaire_principal.personne_morale_denomination))
444     END as dossier_petitionnaire",
445     "'' as dossier_petitionnaires",
446     "CASE WHEN contrevenant_principal.qualite='particulier' THEN
447     TRIM(CONCAT(contrevenant_principal.particulier_nom, ' ', contrevenant_principal.particulier_prenom))
448     ELSE
449     TRIM(CONCAT(contrevenant_principal.personne_morale_raison_sociale, ' ', contrevenant_principal.personne_morale_denomination))
450     END as contrevenants",
451 softime 10573 "TRIM(
452     CONCAT_WS(
453     ' ',
454     replace(dossier.terrain_references_cadastrales,';',' '),
455     '<br/>',
456 softime 11057 CASE
457     WHEN dossier.adresse_normalisee IS NULL
458     OR TRIM(dossier.adresse_normalisee) = ''
459     THEN
460 softime 14542 ".DB_PREFIXE."adresse(
461     dossier.terrain_adresse_voie_numero::text,
462     dossier.terrain_adresse_voie::text,
463     ''::text,
464     dossier.terrain_adresse_lieu_dit::text,
465     dossier.terrain_adresse_bp::text,
466     dossier.terrain_adresse_code_postal::text,
467     dossier.terrain_adresse_localite::text,
468     dossier.terrain_adresse_cedex::text,
469     ''::text,
470     ', '::text
471     )
472 softime 11057 ELSE
473     dossier.adresse_normalisee
474     END
475 softime 10573 )
476     ) as terrain",
477 softime 8989 "arrondissement.libelle as dossier_arrondissement",
478 softime 10573 'dossier.adresse_normalisee',
479     'dossier.adresse_normalisee_json',
480 softime 12847 'dossier.dossier_parent',
481 softime 14542 sprintf("(SELECT string_agg(nature_travaux::text, ';') FROM %slien_dossier_nature_travaux WHERE dossier = dossier.dossier) as nature_travaux",
482     DB_PREFIXE),
483 softime 8989 // description/nature des travaux. En cas de modif, bloc de code aussi
484     // présent dans 'dossier_instruction.inc.php','om_requete'
485     // et 'stats à la demande'.
486     "CONCAT_WS(
487     '<br/>',
488     CASE WHEN co_projet_desc = '' THEN
489     NULL
490     ELSE
491     TRIM(co_projet_desc)
492     END,
493     CASE WHEN ope_proj_desc = '' THEN
494     NULL
495     ELSE
496     TRIM(ope_proj_desc)
497     END,
498     CASE WHEN am_projet_desc = '' THEN
499     NULL
500     ELSE
501     TRIM(am_projet_desc)
502     END,
503     CASE WHEN dm_projet_desc = '' THEN
504     NULL
505     ELSE
506     TRIM(dm_projet_desc)
507     END,
508     CASE WHEN donnees_techniques.erp_cstr_neuve IS TRUE
509     THEN '".str_replace("'", "''", _('erp_cstr_neuve'))."' END,
510     CASE WHEN donnees_techniques.erp_trvx_acc IS TRUE
511     THEN '".str_replace("'", "''", _('erp_trvx_acc'))."' END,
512     CASE WHEN donnees_techniques.erp_extension IS TRUE
513     THEN '".str_replace("'", "''", _('erp_extension'))."' END,
514     CASE WHEN donnees_techniques.erp_rehab IS TRUE
515     THEN '".str_replace("'", "''", _('erp_rehab'))."' END,
516     CASE WHEN donnees_techniques.erp_trvx_am IS TRUE
517     THEN '".str_replace("'", "''", _('erp_trvx_am'))."' END,
518     CASE WHEN donnees_techniques.erp_vol_nouv_exist IS TRUE
519     THEN '".str_replace("'", "''", _('erp_vol_nouv_exist'))."' END
520     ) as \"description_projet\"",
521     //
522     "donnees_techniques.ctx_synthese_nti as dt_ctx_synthese_nti",
523     "donnees_techniques.ctx_synthese_anr as dt_ctx_synthese_anr ",
524     "donnees_techniques.ctx_infraction as dt_ctx_infraction ",
525     "donnees_techniques.ctx_regularisable as dt_ctx_regularisable ",
526     "dossier_autorisation.dossier_autorisation",
527     "dossier_autorisation.dossier_autorisation_libelle",
528     "annee",
529     "autorite_competente",
530     "dossier.instructeur",
531     "instructeur_2",
532     "dossier.division",
533     "public.ST_AsText(dossier.geom::geometry) as geom",
534 softime 10573 "'' as streetview",
535     "tax_secteur",
536 softime 8989 // Enjeu
537     "enjeu_urba",
538     "enjeu_erp",
539     "'' as enjeu_ctx",
540     // Qualification
541     "erp",
542     "a_qualifier",
543 softime 10573 "pec_metier",
544 softime 10968 "etat_transmission_platau",
545 softime 8989 // Archive
546     "numero_versement_archive",
547     "date_demande",
548     // Fieldset instruction
549     // Suivi
550     // Col 1
551     "dossier.date_depot",
552 softime 10573 "dossier.date_depot_mairie",
553 softime 8989 "dossier.date_affichage",
554     "date_premiere_visite",
555     "date_derniere_visite",
556     "date_contradictoire",
557     "date_retour_contradictoire",
558     "date_ait",
559     "date_transmission_parquet",
560     "donnees_techniques.ctx_date_audience as date_audience",
561     "delai",
562     "delai_incompletude",
563     "date_dernier_depot",
564     "date_limite",
565     "date_complet",
566     "date_limite_incompletude",
567     "date_cloture_instruction",
568     // Col 2
569 softime 9282 "dossier.etat",
570 softime 8989 "evenement_suivant_tacite",
571     "evenement_suivant_tacite_incompletude",
572     // Bloc 2 fieldsets
573     // Col 1 : Fieldset "Décision"
574     "dossier.date_decision",
575     "dossier.avis_decision",
576     // Col 2 : Fieldset "Validité de l'autorisation"
577     "dossier.date_validite",
578     // Autre
579     // Col 1
580     "accord_tacite",
581     // Col 2
582     "date_rejet",
583     "date_notification_delai",
584     "dossier.date_chantier",
585     "dossier.date_achevement",
586     // Col 3
587     "date_conformite",
588     // Fieldset "Simulation des taxes"
589     "tax_mtn_part_commu",
590     "tax_mtn_part_commu_sans_exo",
591     "tax_mtn_part_depart",
592     "tax_mtn_part_depart_sans_exo",
593     "tax_mtn_part_reg",
594     "tax_mtn_part_reg_sans_exo",
595     "tax_mtn_total",
596     "tax_mtn_total_sans_exo",
597     "tax_mtn_rap",
598     "tax_mtn_rap_sans_exo",
599     // Fieldset "Localisation du terrain"
600     // Col 1
601     "dossier.terrain_adresse_voie_numero",
602     "dossier.terrain_adresse_lieu_dit",
603     "dossier.terrain_adresse_code_postal",
604     "dossier.terrain_adresse_cedex",
605     "dossier.parcelle_temporaire",
606     "dossier.terrain_references_cadastrales",
607 softime 14064 "dossier.geoloc_latitude",
608     "dossier.geoloc_longitude",
609     "dossier.geoloc_rayon",
610 softime 8989 // Col 2
611     "dossier.terrain_adresse_voie",
612     "dossier.terrain_adresse_bp",
613     "dossier.terrain_adresse_localite",
614     "dossier.terrain_superficie",
615 softime 13528 "dossier.terrain_superficie_calculee",
616 softime 8989 //
617     "geom1",
618     "dossier.description",
619     "version",
620     "incompletude",
621     "incomplet_notifie",
622     "etat_pendant_incompletude",
623     "dossier.duree_validite",
624     "quartier",
625     "dossier.log_instructions",
626     "interface_referentiel_erp",
627     "date_modification",
628     "hash_sitadel",
629 softime 9245 "version_clos",
630     "initial_dt",
631 softime 10573 // POC
632     "dossier.numerotation_type",
633     "dossier.numerotation_dep",
634     "dossier.numerotation_com",
635     "dossier.numerotation_division",
636     "dossier.numerotation_suffixe",
637     "dossier.numerotation_entite",
638     "dossier.numerotation_num",
639     "dossier.numerotation_num_suffixe",
640     "dossier.numerotation_num_entite",
641     // CONSULTATION ENTRANTE
642     "consultation_entrante.consultation_entrante",
643     "consultation_entrante.delai_reponse",
644     "consultation_entrante.type_delai",
645     "consultation_entrante.date_consultation",
646     "consultation_entrante.date_emission",
647     "consultation_entrante.date_production_notification",
648     "consultation_entrante.date_premiere_consultation",
649     "consultation_entrante.objet_consultation",
650     "consultation_entrante.etat_consultation",
651     "consultation_entrante.type_consultation",
652     "consultation_entrante.texte_fondement_reglementaire",
653     "consultation_entrante.texte_objet_consultation",
654     "consultation_entrante.service_consultant_id",
655     "consultation_entrante.service_consultant_libelle",
656     "consultation_entrante.service_consultant_insee",
657     "consultation_entrante.service_consultant_mail",
658     "consultation_entrante.service_consultant_type",
659     "consultation_entrante.service_consultant__siren",
660 softime 11585 "consultation_entrante.dossier as dossier_consultation",
661     //
662     "'' as lien_iiue"
663 softime 8989 );
664 softime 10573 return $champs;
665 softime 8989 }
666    
667     /**
668     * Clause from pour la requête de sélection des données de l'enregistrement.
669     *
670     * @return string
671     */
672     function get_var_sql_forminc__tableSelect() {
673     return sprintf(
674     '%1$s%2$s
675     LEFT JOIN %1$savis_decision
676     ON avis_decision.avis_decision=dossier.avis_decision
677     LEFT JOIN %1$sdossier_autorisation
678     ON dossier.dossier_autorisation=dossier_autorisation.dossier_autorisation
679     LEFT JOIN %1$sdossier_autorisation_type_detaille
680     ON dossier_autorisation.dossier_autorisation_type_detaille=dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
681     LEFT JOIN (
682     SELECT *
683     FROM %1$slien_dossier_demandeur
684     INNER JOIN %1$sdemandeur
685     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
686     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
687     AND LOWER(demandeur.type_demandeur) = LOWER(\'petitionnaire\')
688     ) as petitionnaire_principal
689     ON petitionnaire_principal.dossier = dossier.dossier
690     LEFT JOIN (
691     SELECT *
692     FROM %1$slien_dossier_demandeur
693     INNER JOIN %1$sdemandeur
694     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
695     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
696     AND LOWER(demandeur.type_demandeur) = LOWER(\'requerant\')
697     ) as requerant_principal
698     ON requerant_principal.dossier = dossier.dossier
699     LEFT JOIN (
700     SELECT *
701     FROM %1$slien_dossier_demandeur
702     INNER JOIN %1$sdemandeur
703     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
704     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
705     AND LOWER(demandeur.type_demandeur) = LOWER(\'contrevenant\')
706     ) as contrevenant_principal
707     ON contrevenant_principal.dossier = dossier.dossier
708     LEFT JOIN %1$sdonnees_techniques
709     ON donnees_techniques.dossier_instruction = dossier.dossier
710     LEFT JOIN %1$setat
711     ON dossier.etat = etat.etat
712     LEFT JOIN %1$sarrondissement
713 softime 10573 ON dossier.terrain_adresse_code_postal = arrondissement.code_postal
714     LEFT JOIN %1$sconsultation_entrante
715     ON dossier.dossier = consultation_entrante.dossier',
716 softime 8989 DB_PREFIXE,
717     $this->table
718     );
719     }
720    
721     /**
722     *
723     * @return string
724     */
725     function get_var_sql_forminc__sql_avis_decision() {
726     return "SELECT avis_decision,libelle from ".DB_PREFIXE."avis_decision order by libelle";
727     }
728    
729     /**
730     *
731     * @return string
732     */
733     function get_var_sql_forminc__sql_avis_decision_by_id() {
734     return "SELECT avis_decision.avis_decision, libelle FROM ".DB_PREFIXE."avis_decision WHERE avis_decision = '<idx>'";
735     }
736    
737     /**
738     *
739     * @return string
740     */
741     function get_var_sql_forminc__sql_dossier_autorisation() {
742     return "SELECT dossier_autorisation.dossier_autorisation, dossier_autorisation.dossier_autorisation FROM ".DB_PREFIXE."dossier_autorisation ORDER BY dossier_autorisation.dossier_autorisation ASC";
743     }
744    
745     /**
746     *
747     * @return string
748     */
749     function get_var_sql_forminc__sql_dossier_autorisation_by_id() {
750     return "SELECT dossier_autorisation.dossier_autorisation, dossier_autorisation.dossier_autorisation FROM ".DB_PREFIXE."dossier_autorisation WHERE dossier_autorisation = '<idx>'";
751     }
752    
753     /**
754     *
755     * @return string
756     */
757     function get_var_sql_forminc__sql_arrondissement() {
758     return "SELECT arrondissement.arrondissement, arrondissement.libelle FROM ".DB_PREFIXE."arrondissement ORDER BY arrondissement.libelle ASC";
759     }
760    
761     /**
762     *
763     * @return string
764     */
765     function get_var_sql_forminc__sql_arrondissement_by_id() {
766     return "SELECT arrondissement.arrondissement, arrondissement.libelle FROM ".DB_PREFIXE."arrondissement WHERE arrondissement = <idx>";
767     }
768    
769     /**
770     *
771     * @return string
772     */
773     function get_var_sql_forminc__sql_autorisation_contestee() {
774     return "SELECT dossier.dossier, dossier.dossier_libelle FROM ".DB_PREFIXE."dossier ORDER BY dossier.annee ASC";
775     }
776    
777     /**
778     *
779     * @return string
780     */
781     function get_var_sql_forminc__sql_autorisation_contestee_by_id() {
782     return "SELECT dossier.dossier, dossier.dossier_libelle FROM ".DB_PREFIXE."dossier WHERE dossier = '<idx>'";
783     }
784    
785     /**
786     *
787     * @return string
788     */
789     function get_var_sql_forminc__sql_dossier_autorisation_type_detaille() {
790     return "SELECT dossier_autorisation_type_detaille.dossier_autorisation_type_detaille, dossier_autorisation_type_detaille.code
791     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
792     ORDER BY dossier_autorisation_type_detaille.libelle";
793     }
794    
795     /**
796     *
797     * @return string
798     */
799     function get_var_sql_forminc__sql_dossier_autorisation_type_detaille_by_id() {
800     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>";
801     }
802    
803     /**
804     *
805     * @return string
806     */
807     function get_var_sql_forminc__sql_demandeur() {
808     return "SELECT dossier_autorisation_type_detaille.dossier_autorisation_type_detaille, dossier_autorisation_type_detaille.libelle
809     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
810     ORDER BY dossier_autorisation_type_detaille.libelle";
811     }
812    
813     /**
814     *
815     * @return string
816     */
817     function get_var_sql_forminc__sql_demandeur_by_id() {
818     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>";
819     }
820    
821     /**
822     *
823     * @return string
824     */
825     function get_var_sql_forminc__sql_instructeur_div() {
826     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
827     FROM ".DB_PREFIXE."instructeur
828     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
829     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
830     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)))
831     <instructeur_qualite>
832     ORDER BY nom";
833     }
834    
835     /**
836     *
837     * @return string
838     */
839 softime 14542 function get_var_sql_forminc__sql_nature_travaux_by_dit() {
840     return sprintf('SELECT
841     nature_travaux.nature_travaux,
842     CONCAT_WS(\' / \', famille_travaux.libelle, nature_travaux.libelle) as lib
843     FROM %1$snature_travaux LEFT JOIN %1$sfamille_travaux ON nature_travaux.famille_travaux = famille_travaux.famille_travaux
844     LEFT JOIN %1$slien_dit_nature_travaux ON lien_dit_nature_travaux.nature_travaux = nature_travaux.nature_travaux
845     WHERE
846     lien_dit_nature_travaux.dossier_instruction_type = <dossier_instruction_type>
847     AND
848     (
849     nature_travaux.om_validite_debut IS NULL
850     OR nature_travaux.om_validite_debut <= CURRENT_DATE
851     )
852     AND (
853     nature_travaux.om_validite_fin IS NULL
854     OR nature_travaux.om_validite_fin > CURRENT_DATE
855     )
856     AND
857     (
858     famille_travaux.om_validite_debut IS NULL
859     OR famille_travaux.om_validite_debut <= CURRENT_DATE
860     )
861     AND (
862     famille_travaux.om_validite_fin IS NULL
863     OR famille_travaux.om_validite_fin > CURRENT_DATE
864     )
865     ORDER BY famille_travaux.libelle, nature_travaux.libelle',
866     DB_PREFIXE);
867     }
868    
869     /**
870     *
871     * @return string
872     */
873     function get_var_sql_forminc__sql_nature_travaux_by_id() {
874     return sprintf('SELECT
875     nature_travaux.nature_travaux,
876     CONCAT_WS(\' / \', famille_travaux.libelle, nature_travaux.libelle) as lib
877     FROM
878     %1$snature_travaux
879     INNER JOIN
880     %1$sfamille_travaux ON nature_travaux.famille_travaux = famille_travaux.famille_travaux
881     WHERE
882     nature_travaux.nature_travaux IN (<idx>)
883     ORDER BY
884     nature_travaux.libelle',
885     DB_PREFIXE);
886     }
887    
888     /**
889     *
890     * @return string
891     */
892 softime 8989 function get_var_sql_forminc__sql_instructeur_div_by_id() {
893     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
894     FROM ".DB_PREFIXE."instructeur
895     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
896     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
897     WHERE instructeur = <idx>";
898     }
899    
900     /**
901     *
902     * @return string
903     */
904     function get_var_sql_forminc__sql_instructeur_div_by_di() {
905     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
906     FROM ".DB_PREFIXE."instructeur
907     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
908     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
909     LEFT JOIN ".DB_PREFIXE."direction
910     ON division.direction = direction.direction
911     LEFT JOIN ".DB_PREFIXE."om_collectivite
912     ON direction.om_collectivite = om_collectivite.om_collectivite
913     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)))
914     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
915     <instructeur_qualite>
916     ORDER BY nom";
917     }
918    
919     /**
920     *
921     * @return string
922     */
923     function get_var_sql_forminc__sql_instructeur_by_di() {
924     return "SELECT instructeur.instructeur, instructeur.nom
925     FROM ".DB_PREFIXE."instructeur
926     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
927     LEFT JOIN ".DB_PREFIXE."division
928     ON instructeur.division = division.division
929     LEFT JOIN ".DB_PREFIXE."direction
930     ON division.direction = direction.direction
931     LEFT JOIN ".DB_PREFIXE."om_collectivite
932     ON direction.om_collectivite = om_collectivite.om_collectivite
933     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)))
934     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
935     <instructeur_qualite>
936     ORDER BY instructeur.nom ASC";
937     }
938    
939     /**
940     *
941     * @return string
942     */
943     function get_var_sql_forminc__sql_instructeur_2_div() {
944     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
945     FROM ".DB_PREFIXE."instructeur
946     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
947     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
948     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)))
949 softime 13137 AND instructeur_qualite.code = <instructeur_qualite>
950 softime 8989 ORDER BY nom";
951     }
952    
953     /**
954     *
955     * @return string
956     */
957     function get_var_sql_forminc__sql_instructeur_2_div_by_id() {
958     return $this->get_var_sql_forminc__sql("instructeur_div_by_id");
959     }
960    
961     /**
962     *
963     * @return string
964     */
965     function get_var_sql_forminc__sql_instructeur_2_div_by_di() {
966     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
967     FROM ".DB_PREFIXE."instructeur
968     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
969     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
970     LEFT JOIN ".DB_PREFIXE."direction
971     ON division.direction = direction.direction
972     LEFT JOIN ".DB_PREFIXE."om_collectivite
973     ON direction.om_collectivite = om_collectivite.om_collectivite
974     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)))
975     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
976 softime 13137 AND instructeur_qualite.code = '<instructeur_qualite>'
977 softime 8989 ORDER BY nom";
978     }
979    
980     /**
981     *
982     * @return string
983     */
984     function get_var_sql_forminc__sql_instructeur_2_by_di() {
985     return "SELECT instructeur.instructeur, instructeur.nom
986     FROM ".DB_PREFIXE."instructeur
987     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
988     LEFT JOIN ".DB_PREFIXE."division
989     ON instructeur.division = division.division
990     LEFT JOIN ".DB_PREFIXE."direction
991     ON division.direction = direction.direction
992     LEFT JOIN ".DB_PREFIXE."om_collectivite
993     ON direction.om_collectivite = om_collectivite.om_collectivite
994     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)))
995     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
996 softime 13137 AND instructeur_qualite.code = '<instructeur_qualite>'
997 softime 8989 ORDER BY instructeur.nom ASC";
998     }
999    
1000     /**
1001     *
1002     * @return string
1003     */
1004     function get_var_sql_forminc__sql_division_by_di() {
1005     return "SELECT division.division, division.libelle
1006     FROM ".DB_PREFIXE."division
1007     LEFT JOIN ".DB_PREFIXE."direction
1008     ON division.direction = direction.direction
1009     LEFT JOIN ".DB_PREFIXE."om_collectivite
1010     ON direction.om_collectivite = om_collectivite.om_collectivite
1011     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)))
1012     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
1013     ORDER BY division.libelle ASC";
1014     }
1015    
1016     /**
1017 softime 10573 *
1018     * @return string
1019     */
1020     function get_var_sql_forminc__sql_commune() {
1021     return "
1022     SELECT
1023 softime 11228 commune.commune, commune.libelle AS libelle
1024 softime 10573 FROM
1025     ".DB_PREFIXE."commune
1026 softime 11228 WHERE (commune.om_validite_debut IS NULL OR commune.om_validite_debut <= CURRENT_DATE)
1027     AND (commune.om_validite_fin IS NULL OR commune.om_validite_fin > CURRENT_DATE)
1028     ORDER BY commune.libelle ASC
1029 softime 10573 ";
1030     }
1031    
1032     /**
1033 softime 11585 *
1034     * @return string
1035     */
1036     function get_var_sql_forminc__sql_dossier_instruction_type_by_id() {
1037     return sprintf('
1038     SELECT dossier_instruction_type.dossier_instruction_type,
1039     CONCAT_WS(\' - \', dossier_autorisation_type_detaille.libelle, dossier_instruction_type.libelle)
1040     FROM %1$sdossier_instruction_type
1041     LEFT JOIN %1$sdossier_autorisation_type_detaille ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1042     WHERE dossier_instruction_type = <idx>
1043     ',
1044     DB_PREFIXE
1045     );
1046     }
1047    
1048     /**
1049 mbroquet 3730 * VIEW - view_sitadel.
1050     *
1051     * @return void
1052     */
1053     function view_sitadel() {
1054 softime 8989 // Affichage du formulaire permettant le choix d'un interval de date
1055 mbroquet 3730 // ainsi que le numéro de d'ordre qui est le numéro de la version de
1056     // l'export
1057 softime 8989 if (empty($this->f->get_submitted_post_value())) {
1058 mbroquet 3730 // Affichage du formulaire
1059 softime 8989 $this->affichageFormulaire();
1060 mbroquet 3730 }
1061     else {
1062     // Initialisation des variables pour les messages de fin de traitement
1063     $correct=true;
1064     // Initialisation de la chaîne contenant le message d'erreur
1065     $erreur = "";
1066 softime 8989 //
1067     $message_valid = '';
1068     $message_info = '';
1069 mbroquet 3730
1070     // Initialisation des dates de début et de fin
1071     $datedebut ='';
1072     $datefin='';
1073    
1074     // Traitement des erreurs
1075     if ($this->f->get_submitted_post_value("datedebut") == "") {
1076     $correct=false;
1077     } else {
1078     $datedebut = substr($this->f->get_submitted_post_value("datedebut"),6,4).
1079     "-".substr($this->f->get_submitted_post_value("datedebut"),3,2)."-".
1080     substr($this->f->get_submitted_post_value("datedebut"),0,2);
1081     }
1082     if ($this->f->get_submitted_post_value("datefin") == "") {
1083     $correct=false;
1084     } else {
1085     $datefin = substr($this->f->get_submitted_post_value("datefin"),6,4).
1086     "-".substr($this->f->get_submitted_post_value("datefin"),3,2)."-".
1087     substr($this->f->get_submitted_post_value("datefin"),0,2);
1088     }
1089     $numero = $this->f->get_submitted_post_value("numero");
1090 softime 13528
1091     if ($correct === true){
1092     // Vérifie la collectivité de l'utilisateur et si c'est un utilisateur
1093     // mono les résultats de l'exports concerneront uniquement sa collectivité
1094     $filtreCollectivite = '';
1095     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
1096     $filtreCollectivite = sprintf(
1097     'AND dossier_autorisation.om_collectivite = %d',
1098     intval($_SESSION['collectivite'])
1099     );
1100     }
1101 mbroquet 3730 // Requête permettant de lister tous les dossiers de l'export
1102 softime 13528 $sql = sprintf(
1103     "SELECT
1104     dossier.dossier,
1105     dossier.om_collectivite as collectivite,
1106     dossier.dossier_autorisation,
1107     dossier_instruction_type.mouvement_sitadel,
1108     dossier_instruction_type.code as dossier_instruction_type_code,
1109     dossier.date_depot,
1110     dossier.date_decision,
1111     dossier.date_chantier,
1112     dossier.date_achevement,
1113     dossier.terrain_references_cadastrales as dossier_terrain_references_cadastrales,
1114 softime 14064 dossier.geoloc_latitude as dossier_geoloc_latitude,
1115     dossier.geoloc_longitude as dossier_geoloc_longitude,
1116     dossier.geoloc_rayon as dossier_geoloc_rayon,
1117 softime 13528 dossier.terrain_adresse_voie_numero as dossier_terrain_adresse_voie_numero,
1118     dossier.terrain_adresse_voie as dossier_terrain_adresse_voie,
1119     dossier.terrain_adresse_lieu_dit as dossier_terrain_adresse_lieu_dit,
1120     dossier.terrain_adresse_localite as dossier_terrain_adresse_localite,
1121     dossier.terrain_adresse_code_postal as dossier_terrain_adresse_code_postal,
1122     dossier.terrain_adresse_bp as dossier_terrain_adresse_bp,
1123     dossier.terrain_adresse_cedex as dossier_terrain_adresse_cedex,
1124     dossier_autorisation_type.code,
1125     dossier.date_limite,
1126     dossier.date_limite_incompletude,
1127     dossier.date_notification_delai,
1128     dossier.terrain_superficie as dossier_terrain_superficie,
1129     dossier.terrain_superficie_calculee as dossier_terrain_superficie_calculee,
1130     dossier.date_modification,
1131     dossier.hash_sitadel,
1132 mbroquet 3730
1133 softime 13528 arrondissement.code_impots as code_impots,
1134 mbroquet 3730
1135 softime 13528 autorite_competente.autorite_competente_sitadel,
1136     pp.type_demandeur,
1137     pp.qualite,
1138     civilite_pp.libelle as civilite_pp,
1139     pp.particulier_nom as pp_particulier_nom,
1140     pp.particulier_prenom as pp_particulier_prenom,
1141     pp.personne_morale_denomination as pp_personne_morale_denomination,
1142     pp.personne_morale_raison_sociale as pp_personne_morale_raison_sociale,
1143     pp.personne_morale_siret as pp_personne_morale_siret,
1144     pp.personne_morale_categorie_juridique as pp_personne_morale_categorie_juridique,
1145     civilite_pm.libelle as civilite_pm_libelle,
1146     pp.personne_morale_nom as pp_personne_morale_nom,
1147     pp.personne_morale_prenom as pp_personne_morale_prenom,
1148 mbroquet 3730
1149 softime 13528 pp.numero as pp_numero,
1150     pp.voie as pp_voie,
1151     pp.complement as pp_complement,
1152     pp.lieu_dit as pp_lieu_dit,
1153     pp.localite as pp_localite,
1154     pp.code_postal as pp_code_postal,
1155     pp.bp as pp_bp,
1156     pp.cedex as pp_cedex,
1157     pp.pays as pp_pays,
1158     pp.division_territoriale as pp_division_territoriale,
1159 mbroquet 3730
1160 softime 13528 pp.telephone_fixe as pp_telephone_fixe,
1161     pp.courriel as pp_courriel,
1162 mbroquet 3730
1163 softime 13528 donnees_techniques.co_archi_recours,
1164     donnees_techniques.am_terr_surf,
1165     donnees_techniques.am_lotiss,
1166     donnees_techniques.terr_juri_zac,
1167     donnees_techniques.terr_juri_afu,
1168     donnees_techniques.co_projet_desc,
1169     donnees_techniques.am_projet_desc,
1170     donnees_techniques.dm_projet_desc,
1171     donnees_techniques.co_cstr_nouv,
1172     donnees_techniques.co_cstr_exist,
1173     donnees_techniques.co_modif_aspect,
1174     donnees_techniques.co_modif_struct,
1175     donnees_techniques.co_cloture,
1176     donnees_techniques.co_trx_exten,
1177     donnees_techniques.co_trx_surelev,
1178     donnees_techniques.co_trx_nivsup,
1179     donnees_techniques.co_trx_amgt,
1180     donnees_techniques.co_anx_pisc,
1181     donnees_techniques.co_anx_gara,
1182     donnees_techniques.co_anx_veran,
1183     donnees_techniques.co_anx_abri,
1184     donnees_techniques.co_anx_autr,
1185     donnees_techniques.co_bat_niv_nb,
1186 softime 4636
1187 softime 13528 -- Tableau des destinations
1188     donnees_techniques.su_avt_shon1,
1189     donnees_techniques.su_avt_shon2,
1190     donnees_techniques.su_avt_shon3,
1191     donnees_techniques.su_avt_shon4,
1192     donnees_techniques.su_avt_shon5,
1193     donnees_techniques.su_avt_shon6,
1194     donnees_techniques.su_avt_shon7,
1195     donnees_techniques.su_avt_shon8,
1196     donnees_techniques.su_avt_shon9,
1197     donnees_techniques.su_demo_shon1,
1198     donnees_techniques.su_demo_shon2,
1199     donnees_techniques.su_demo_shon3,
1200     donnees_techniques.su_demo_shon4,
1201     donnees_techniques.su_demo_shon5,
1202     donnees_techniques.su_demo_shon6,
1203     donnees_techniques.su_demo_shon7,
1204     donnees_techniques.su_demo_shon8,
1205     donnees_techniques.su_demo_shon9,
1206     donnees_techniques.su_chge_shon1,
1207     donnees_techniques.su_chge_shon2,
1208     donnees_techniques.su_chge_shon3,
1209     donnees_techniques.su_chge_shon4,
1210     donnees_techniques.su_chge_shon5,
1211     donnees_techniques.su_chge_shon6,
1212     donnees_techniques.su_chge_shon7,
1213     donnees_techniques.su_chge_shon8,
1214     donnees_techniques.su_chge_shon9,
1215     donnees_techniques.su_sup_shon1,
1216     donnees_techniques.su_sup_shon2,
1217     donnees_techniques.su_sup_shon3,
1218     donnees_techniques.su_sup_shon4,
1219     donnees_techniques.su_sup_shon5,
1220     donnees_techniques.su_sup_shon6,
1221     donnees_techniques.su_sup_shon7,
1222     donnees_techniques.su_sup_shon8,
1223     donnees_techniques.su_sup_shon9,
1224     donnees_techniques.su_cstr_shon1,
1225     donnees_techniques.su_cstr_shon2,
1226     donnees_techniques.su_cstr_shon3,
1227     donnees_techniques.su_cstr_shon4,
1228     donnees_techniques.su_cstr_shon5,
1229     donnees_techniques.su_cstr_shon6,
1230     donnees_techniques.su_cstr_shon7,
1231     donnees_techniques.su_cstr_shon8,
1232     donnees_techniques.su_cstr_shon9,
1233     donnees_techniques.su_tot_shon1,
1234     donnees_techniques.su_tot_shon2,
1235     donnees_techniques.su_tot_shon3,
1236     donnees_techniques.su_tot_shon4,
1237     donnees_techniques.su_tot_shon5,
1238     donnees_techniques.su_tot_shon6,
1239     donnees_techniques.su_tot_shon7,
1240     donnees_techniques.su_tot_shon8,
1241     donnees_techniques.su_tot_shon9,
1242     -- XXX valeurs obsolètes mais utilisées dans les conditions
1243     -- pour afficher les messages d'incohérence
1244     donnees_techniques.su_trsf_shon1,
1245     donnees_techniques.su_trsf_shon2,
1246     donnees_techniques.su_trsf_shon3,
1247     donnees_techniques.su_trsf_shon4,
1248     donnees_techniques.su_trsf_shon5,
1249     donnees_techniques.su_trsf_shon6,
1250     donnees_techniques.su_trsf_shon7,
1251     donnees_techniques.su_trsf_shon8,
1252     donnees_techniques.su_trsf_shon9,
1253 softime 4636
1254 softime 13528 -- Tableau des sous-destinations
1255     donnees_techniques.su2_avt_shon1,
1256     donnees_techniques.su2_avt_shon2,
1257     donnees_techniques.su2_avt_shon3,
1258     donnees_techniques.su2_avt_shon4,
1259     donnees_techniques.su2_avt_shon5,
1260     donnees_techniques.su2_avt_shon6,
1261     donnees_techniques.su2_avt_shon7,
1262     donnees_techniques.su2_avt_shon8,
1263     donnees_techniques.su2_avt_shon9,
1264     donnees_techniques.su2_avt_shon10,
1265     donnees_techniques.su2_avt_shon11,
1266     donnees_techniques.su2_avt_shon12,
1267     donnees_techniques.su2_avt_shon13,
1268     donnees_techniques.su2_avt_shon14,
1269     donnees_techniques.su2_avt_shon15,
1270     donnees_techniques.su2_avt_shon16,
1271     donnees_techniques.su2_avt_shon17,
1272     donnees_techniques.su2_avt_shon18,
1273     donnees_techniques.su2_avt_shon19,
1274     donnees_techniques.su2_avt_shon20,
1275     donnees_techniques.su2_avt_shon21,
1276     donnees_techniques.su2_avt_shon22,
1277     donnees_techniques.su2_demo_shon1,
1278     donnees_techniques.su2_demo_shon2,
1279     donnees_techniques.su2_demo_shon3,
1280     donnees_techniques.su2_demo_shon4,
1281     donnees_techniques.su2_demo_shon5,
1282     donnees_techniques.su2_demo_shon6,
1283     donnees_techniques.su2_demo_shon7,
1284     donnees_techniques.su2_demo_shon8,
1285     donnees_techniques.su2_demo_shon9,
1286     donnees_techniques.su2_demo_shon10,
1287     donnees_techniques.su2_demo_shon11,
1288     donnees_techniques.su2_demo_shon12,
1289     donnees_techniques.su2_demo_shon13,
1290     donnees_techniques.su2_demo_shon14,
1291     donnees_techniques.su2_demo_shon15,
1292     donnees_techniques.su2_demo_shon16,
1293     donnees_techniques.su2_demo_shon17,
1294     donnees_techniques.su2_demo_shon18,
1295     donnees_techniques.su2_demo_shon19,
1296     donnees_techniques.su2_demo_shon20,
1297     donnees_techniques.su2_demo_shon21,
1298     donnees_techniques.su2_demo_shon22,
1299     donnees_techniques.su2_chge_shon1,
1300     donnees_techniques.su2_chge_shon2,
1301     donnees_techniques.su2_chge_shon3,
1302     donnees_techniques.su2_chge_shon4,
1303     donnees_techniques.su2_chge_shon5,
1304     donnees_techniques.su2_chge_shon6,
1305     donnees_techniques.su2_chge_shon7,
1306     donnees_techniques.su2_chge_shon8,
1307     donnees_techniques.su2_chge_shon9,
1308     donnees_techniques.su2_chge_shon10,
1309     donnees_techniques.su2_chge_shon11,
1310     donnees_techniques.su2_chge_shon12,
1311     donnees_techniques.su2_chge_shon13,
1312     donnees_techniques.su2_chge_shon14,
1313     donnees_techniques.su2_chge_shon15,
1314     donnees_techniques.su2_chge_shon16,
1315     donnees_techniques.su2_chge_shon17,
1316     donnees_techniques.su2_chge_shon18,
1317     donnees_techniques.su2_chge_shon19,
1318     donnees_techniques.su2_chge_shon20,
1319     donnees_techniques.su2_chge_shon21,
1320     donnees_techniques.su2_chge_shon22,
1321     donnees_techniques.su2_sup_shon1,
1322     donnees_techniques.su2_sup_shon2,
1323     donnees_techniques.su2_sup_shon3,
1324     donnees_techniques.su2_sup_shon4,
1325     donnees_techniques.su2_sup_shon5,
1326     donnees_techniques.su2_sup_shon6,
1327     donnees_techniques.su2_sup_shon7,
1328     donnees_techniques.su2_sup_shon8,
1329     donnees_techniques.su2_sup_shon9,
1330     donnees_techniques.su2_sup_shon10,
1331     donnees_techniques.su2_sup_shon11,
1332     donnees_techniques.su2_sup_shon12,
1333     donnees_techniques.su2_sup_shon13,
1334     donnees_techniques.su2_sup_shon14,
1335     donnees_techniques.su2_sup_shon15,
1336     donnees_techniques.su2_sup_shon16,
1337     donnees_techniques.su2_sup_shon17,
1338     donnees_techniques.su2_sup_shon18,
1339     donnees_techniques.su2_sup_shon19,
1340     donnees_techniques.su2_sup_shon20,
1341     donnees_techniques.su2_sup_shon21,
1342     donnees_techniques.su2_sup_shon22,
1343     donnees_techniques.su2_cstr_shon1,
1344     donnees_techniques.su2_cstr_shon2,
1345     donnees_techniques.su2_cstr_shon3,
1346     donnees_techniques.su2_cstr_shon4,
1347     donnees_techniques.su2_cstr_shon5,
1348     donnees_techniques.su2_cstr_shon6,
1349     donnees_techniques.su2_cstr_shon7,
1350     donnees_techniques.su2_cstr_shon8,
1351     donnees_techniques.su2_cstr_shon9,
1352     donnees_techniques.su2_cstr_shon10,
1353     donnees_techniques.su2_cstr_shon11,
1354     donnees_techniques.su2_cstr_shon12,
1355     donnees_techniques.su2_cstr_shon13,
1356     donnees_techniques.su2_cstr_shon14,
1357     donnees_techniques.su2_cstr_shon15,
1358     donnees_techniques.su2_cstr_shon16,
1359     donnees_techniques.su2_cstr_shon17,
1360     donnees_techniques.su2_cstr_shon18,
1361     donnees_techniques.su2_cstr_shon19,
1362     donnees_techniques.su2_cstr_shon20,
1363     donnees_techniques.su2_cstr_shon21,
1364     donnees_techniques.su2_cstr_shon22,
1365     donnees_techniques.su2_tot_shon1,
1366     donnees_techniques.su2_tot_shon2,
1367     donnees_techniques.su2_tot_shon3,
1368     donnees_techniques.su2_tot_shon4,
1369     donnees_techniques.su2_tot_shon5,
1370     donnees_techniques.su2_tot_shon6,
1371     donnees_techniques.su2_tot_shon7,
1372     donnees_techniques.su2_tot_shon8,
1373     donnees_techniques.su2_tot_shon9,
1374     donnees_techniques.su2_tot_shon10,
1375     donnees_techniques.su2_tot_shon11,
1376     donnees_techniques.su2_tot_shon12,
1377     donnees_techniques.su2_tot_shon13,
1378     donnees_techniques.su2_tot_shon14,
1379     donnees_techniques.su2_tot_shon15,
1380     donnees_techniques.su2_tot_shon16,
1381     donnees_techniques.su2_tot_shon17,
1382     donnees_techniques.su2_tot_shon18,
1383     donnees_techniques.su2_tot_shon19,
1384     donnees_techniques.su2_tot_shon20,
1385     donnees_techniques.su2_tot_shon21,
1386     donnees_techniques.su2_tot_shon22,
1387 softime 4636
1388 softime 13528 donnees_techniques.co_sp_transport,
1389     donnees_techniques.co_sp_enseign,
1390     donnees_techniques.co_sp_sante,
1391     donnees_techniques.co_sp_act_soc,
1392     donnees_techniques.co_sp_ouvr_spe,
1393     donnees_techniques.co_sp_culture,
1394     donnees_techniques.dm_tot_log_nb,
1395     donnees_techniques.co_tot_ind_nb,
1396     donnees_techniques.co_tot_coll_nb,
1397     donnees_techniques.co_tot_log_nb,
1398     donnees_techniques.co_resid_agees,
1399     donnees_techniques.co_resid_etud,
1400     donnees_techniques.co_resid_tourism,
1401     donnees_techniques.co_resid_hot_soc,
1402     donnees_techniques.co_resid_hand,
1403     donnees_techniques.co_resid_autr,
1404     donnees_techniques.co_resid_autr_desc,
1405     donnees_techniques.co_uti_pers,
1406     donnees_techniques.co_uti_princ,
1407     donnees_techniques.co_uti_secon,
1408     donnees_techniques.co_uti_vente,
1409     donnees_techniques.co_uti_loc,
1410     donnees_techniques.co_foyer_chamb_nb,
1411     donnees_techniques.co_fin_lls_nb,
1412     donnees_techniques.co_fin_aa_nb,
1413     donnees_techniques.co_fin_ptz_nb,
1414     donnees_techniques.co_fin_autr_nb,
1415     donnees_techniques.co_mais_piece_nb,
1416     donnees_techniques.co_log_1p_nb,
1417     donnees_techniques.co_log_2p_nb,
1418     donnees_techniques.co_log_3p_nb,
1419     donnees_techniques.co_log_4p_nb,
1420     donnees_techniques.co_log_5p_nb,
1421     donnees_techniques.co_log_6p_nb,
1422     donnees_techniques.mod_desc,
1423 mbroquet 3730
1424 softime 13528 donnees_techniques.doc_date,
1425     donnees_techniques.terr_div_surf_av_div,
1426     donnees_techniques.doc_tot_trav,
1427     donnees_techniques.doc_tranche_trav,
1428     donnees_techniques.doc_tranche_trav_desc,
1429     donnees_techniques.doc_surf,
1430     donnees_techniques.doc_nb_log,
1431     donnees_techniques.doc_nb_log_indiv,
1432     donnees_techniques.doc_nb_log_coll,
1433     donnees_techniques.doc_nb_log_lls,
1434     donnees_techniques.doc_nb_log_aa,
1435     donnees_techniques.doc_nb_log_ptz,
1436     donnees_techniques.doc_nb_log_autre,
1437     donnees_techniques.daact_date,
1438     donnees_techniques.daact_date_chgmt_dest,
1439     donnees_techniques.daact_tot_trav,
1440     donnees_techniques.daact_tranche_trav,
1441     donnees_techniques.daact_tranche_trav_desc,
1442     donnees_techniques.daact_surf,
1443     donnees_techniques.daact_nb_log,
1444     donnees_techniques.daact_nb_log_indiv,
1445     donnees_techniques.daact_nb_log_coll,
1446     donnees_techniques.daact_nb_log_lls,
1447     donnees_techniques.daact_nb_log_aa,
1448     donnees_techniques.daact_nb_log_ptz,
1449     donnees_techniques.daact_nb_log_autre,
1450 mbroquet 3730
1451 softime 13528 dossier_autorisation.date_depot as date_depot_da,
1452     dossier_autorisation.date_decision as date_decision_da,
1453     dossier_autorisation.date_validite as date_validite_da,
1454     dossier_autorisation.date_chantier as date_chantier_da,
1455     dossier_autorisation.date_achevement as date_achevement_da,
1456     avis_decision.typeavis as typeavis_da,
1457     avis_decision.sitadel,
1458     avis_decision.sitadel_motif,
1459     avis_decision.typeavis,
1460     etat.statut as statut_di
1461 mbroquet 3730
1462 softime 13528 FROM
1463     %1\$sdossier
1464     INNER JOIN %1\$sdossier_instruction_type
1465     ON dossier.dossier_instruction_type =
1466     dossier_instruction_type.dossier_instruction_type
1467     INNER JOIN %1\$sdossier_autorisation_type_detaille
1468     ON dossier_instruction_type.dossier_autorisation_type_detaille
1469     =dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1470     INNER JOIN %1\$sdossier_autorisation_type
1471     ON dossier_autorisation_type.dossier_autorisation_type
1472     =dossier_autorisation_type_detaille.dossier_autorisation_type
1473     INNER JOIN %1\$sgroupe
1474     ON dossier_autorisation_type.groupe = groupe.groupe
1475     AND groupe.code != 'CTX'
1476     INNER JOIN %1\$sdossier_autorisation
1477     ON dossier_autorisation.dossier_autorisation
1478     =dossier.dossier_autorisation
1479     INNER JOIN %1\$sautorite_competente
1480     ON autorite_competente.autorite_competente
1481     =dossier.autorite_competente
1482 mbroquet 3730
1483 softime 13528 LEFT JOIN %1\$sdonnees_techniques
1484     ON donnees_techniques.dossier_instruction = dossier.dossier
1485     LEFT JOIN %1\$savis_decision
1486     ON avis_decision.avis_decision = dossier.avis_decision
1487     LEFT JOIN %1\$slien_dossier_demandeur as ldd_pp
1488     ON ldd_pp.dossier = dossier.dossier
1489     LEFT JOIN %1\$sdemandeur as pp
1490     ON ldd_pp.demandeur = pp.demandeur
1491     LEFT JOIN %1\$scivilite as civilite_pp
1492     ON civilite_pp.civilite = pp.particulier_civilite
1493     LEFT JOIN %1\$scivilite as civilite_pm
1494     ON civilite_pm.civilite = pp.personne_morale_civilite
1495     LEFT JOIN %1\$setat
1496     ON etat.etat = dossier.etat
1497     LEFT JOIN %1\$sarrondissement
1498     ON dossier_autorisation.arrondissement=arrondissement.arrondissement
1499    
1500     WHERE
1501     dossier_instruction_type.mouvement_sitadel IS NOT NULL
1502     AND ldd_pp.petitionnaire_principal is TRUE
1503     AND (dossier.date_modification >= '%2\$s'
1504     AND dossier.date_modification <= '%3\$s')
1505     %4\$s
1506     ORDER
1507     by dossier_instruction_type.mouvement_sitadel,
1508     dossier.dossier",
1509     DB_PREFIXE,
1510     $this->f->db->escapeSimple($datedebut),
1511     $this->f->db->escapeSimple($datefin),
1512     $filtreCollectivite
1513     );
1514 mbroquet 3730 //Exécution de la requête
1515 softime 13528 $query = $this->f->get_all_results_from_db_query(
1516     $sql,
1517     array(
1518     'origin' => __METHOD__
1519     ));
1520 mbroquet 3730 $export="";
1521 softime 13528 foreach ($query['result'] as $row) {
1522 mbroquet 3730 // initialisation de la classe permettant la mise en forme de chaque ligne de l'export
1523     require_once "../obj/export_sitadel.class.php";
1524     $export_sitadel = new export_sitadel($row['dossier'], $this->f);
1525     $export_sitadel->setRow($row);
1526     //Ajout du fichier de variable
1527     if(file_exists ("../sql/".OM_DB_PHPTYPE."/export_sitadel.inc.php")) {
1528     include ("../sql/".OM_DB_PHPTYPE."/export_sitadel.inc.php");
1529     }
1530     //
1531 softime 13528 $export_sitadel->setVal($val);
1532 mbroquet 3730 $departement = $export_sitadel->getDepartement($row["collectivite"]);
1533     $commune = $export_sitadel->getCommune($row["collectivite"]);
1534     $region = $this->f->getParameter("region");
1535 softime 4636
1536     // Initialisation des variables pour le tableau des
1537     // surfaces en version 1
1538     $prefix_su = 'su';
1539     $count_su = 9;
1540     // S'il faut utiliser le tableau des surfaces en
1541     // version 2
1542     if ($export_sitadel->get_tab_su_version() === 2) {
1543     //
1544     $prefix_su = 'su2';
1545     $count_su = 20;
1546     }
1547    
1548 softime 4838 // Récupère la version du dossier d'instruction depuis son
1549     // numéro
1550     $version = 0;
1551 softime 14064 $version = intval($this->get_di_numero_suffixe($row['dossier']));
1552 softime 4838
1553 mbroquet 3730 // Mouvement de dépôt
1554     $depot="";
1555    
1556     // Tous les mouvements autres que transfert ont comme mouvement le code DEPOT
1557     // les décisions devant êtres précédées par le dépôt correspondant,
1558     // les dossiers avec date de décision comprise dans l'interval fourni sont
1559     // réaffichés en tant que dépôts (mouvement DEPOT)
1560     if (($row['mouvement_sitadel'] == 'DEPOT'||($row['mouvement_sitadel'] == 'MODIFICATIF'
1561 softime 7996 AND $row['statut_di']=='cloture' AND $row['typeavis']=='F'))) {
1562 softime 4838 $depot.=$export_sitadel->entete("DEPOT",$departement,$commune, $version);
1563 mbroquet 3730 $depot.=$export_sitadel->etatcivil();
1564     $depot.=$export_sitadel->adresse();
1565     $depot.=$export_sitadel->delegataire();
1566     $depot.=$export_sitadel->meltel($row['mouvement_sitadel']);
1567 softime 13528 $depot.=$export_sitadel->adresse_terrain();
1568 mbroquet 3730 $depot.=$export_sitadel->parcelle();
1569     // ===========================
1570     // contrat maison individuelle
1571     // ===========================
1572     // sitadel : contrat|
1573     // openads : non renseigne
1574     $depot.= $export_sitadel->defaultValue('contrat')."|";
1575     // ==========
1576     // architecte
1577     // ==========
1578     // sitadel : architecte|
1579     // openads : données techniques.co_archi_recours
1580     $depot.= ($row['co_archi_recours'] == "t")?"1|":"0|";
1581     // =====================
1582     // utilisation data cnil
1583     // ======================
1584     // sitadel : cnil
1585     // openads : non renseigne
1586     $depot.= $export_sitadel->defaultValue('cnil');
1587 softime 13528 // fin d enregistrement depot
1588 mbroquet 3730 $depot.="\n";
1589     }
1590    
1591     // Seuls les dossier de type transfert ont comme mouvement le code TRANSFERT
1592     $transfert ="";
1593 softime 7996 if ($row['mouvement_sitadel']=='TRANSFERT') {
1594 softime 4838 $transfert.=$export_sitadel->entete("TRANSFERT",$departement,$commune, $version);
1595 mbroquet 3730 $transfert.=$export_sitadel->etatcivil();
1596 softime 13528 $transfert.=$export_sitadel->adresse();
1597 mbroquet 3730 $transfert.=$export_sitadel->meltel($row['mouvement_sitadel']);
1598     $transfert.="\n";
1599     }
1600    
1601    
1602     // Une ligne de mouvement DECISION est insérée après chaque ligne
1603     // de mouvement DEPOT
1604     $decision="";
1605     if ($row['mouvement_sitadel'] != 'TRANSFERT'
1606     and $row['mouvement_sitadel'] != 'SUPPRESSION'
1607 softime 7996 and $row['mouvement_sitadel'] == 'DEPOT') {
1608 mbroquet 3730
1609     //Ajout de l'entête
1610 softime 4838 $decision.=$export_sitadel->entete("DECISION",$departement,$commune, $version);
1611 mbroquet 3730
1612     //Ajout du groupe 1
1613     $decision.= $export_sitadel->decision_groupe1();
1614     // Si la décision est favorable, on remplit le groupe 2
1615     if ( $row['sitadel'] == 2 || $row['sitadel'] == 4 || $row['sitadel'] == 5
1616 softime 13528 || $row['sitadel'] === '' || $row['sitadel'] === 0){
1617 mbroquet 3730 //
1618     $decision.= $export_sitadel->amenagement_terrain();
1619     //Nature du projet
1620     $natproj = 2;
1621     $natprojlib= array(
1622     1=>_("Nouvelle construction"),
1623     2=>_("Travaux sur construction existante"),
1624     3=>_("Nouvelle construction et travaux sur construction"),
1625     );
1626     if ( isset($row['co_cstr_nouv']) && isset($row['co_cstr_exist']) &&
1627     $row['co_cstr_nouv'] == 't' &&
1628     $row['co_cstr_exist'] == 't' ){
1629     $natproj = 3;
1630     }
1631     //Nouvelle construction
1632     elseif ( isset($row['co_cstr_nouv']) && $row['co_cstr_nouv'] == 't' ) {
1633     $natproj = 1;
1634     }
1635     //
1636 softime 4636 $su_avt_shon = $export_sitadel->shon("avt");
1637 mbroquet 3730 //Si la SHON existante avant travaux est supérieur à la SHON
1638     //démolie alors la variable natproj est égale à 2
1639     $shonExistante = 0;
1640     $shonDemolie = 0;
1641 softime 4636 // Pour chaque ligne du tableau
1642     for ($i = 1; $i <= $count_su; $i++) {
1643     //
1644 softime 13528 $shonExistante += floor(floatval($row[$prefix_su.'_avt_shon'.$i]));
1645     $shonDemolie += floor(floatval($row[$prefix_su.'_demo_shon'.$i]));
1646 mbroquet 3730 }
1647     //Si la SHON existante avant travaux et la SHON démolie sont
1648     //égales alors la variable natproj est égale à 1
1649     if ( $shonExistante == 0 && $shonDemolie == 0 && $natproj != 1 &&
1650     $row['code'] != 'DP' && $row['code'] != 'PA') {
1651     $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";
1652     } elseif ( $shonExistante > $shonDemolie && $natproj != 2 ){
1653 softime 4640 $erreur .= _("Dossier ").$row['dossier']." \"".$natprojlib[$natproj]."\" "._("La SHON existante avant travaux ne doit pas être supérieure à la SHON démolie.")."\n";
1654 mbroquet 3730 }
1655     $decision .= $su_avt_shon;
1656    
1657 softime 4636 $su_demo_shon = $export_sitadel->shon("demo");
1658 mbroquet 3730 //La SHON démolie s'accompagne obligatoirement de la shon
1659     //existante avant travaux
1660     if ( $shonDemolie != 0 && $shonExistante == 0 ){
1661     $erreur .= _("Dossier ").$row['dossier']." "._("La SHON demolie s'accompagne obligatoirement de la SHON existante avant travaux.")."\n";
1662     }
1663     $decision .= $su_demo_shon;
1664     //
1665 softime 4636 $su_sup_shon = $export_sitadel->shon("sup");
1666     $su_chge_shon = $export_sitadel->shon("chge");
1667 mbroquet 3730 if ( strcasecmp($su_sup_shon, $su_chge_shon) != 0){
1668     //
1669 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";
1670 mbroquet 3730 }
1671     $decision .= $su_sup_shon;
1672     $decision .= $su_chge_shon;
1673 softime 4636 $decision .= $export_sitadel->shon("cstr");
1674 mbroquet 3730 $decision .= "0|0|0|0|0|0|0|0|0|";
1675 softime 4640 // Les SHON créées par changement de destination ou
1676     // de sous-destination s'accompagnent obligatoirement
1677     // de SHON existante avant travaux non nulle
1678 mbroquet 3730 if (preg_match("/[0|]{7}/", $su_chge_shon) &&
1679     preg_match("/[0|]{7}/", $su_avt_shon)){
1680    
1681 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";
1682 mbroquet 3730 }
1683     // Un nombre de logements démolis strictement positif doit
1684     // s'accompagner obligatoirement de SHON démolie.
1685     if($row['dm_tot_log_nb'] > 0) {
1686 softime 4636 if($export_sitadel->get_shon_val('demo', 1) <= 0) {
1687 mbroquet 3730 //
1688     $erreur .= _("Dossier ").$row['dossier']." "._("Un nombre de logements demolis strictement positif doit s'accompagner obligatoirement de SHON demolie.")."\n";
1689     }
1690     }
1691     // Un nombre de logements créés strictement positif doit
1692     // s'accompagner obligatoirement de SHON créée ou de SHON
1693 softime 4640 // créée par changement de destination ou de sous-destination
1694     // ayant pour destination l'habitation.
1695     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)) {
1696 mbroquet 3730 //
1697 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";
1698 mbroquet 3730 }
1699    
1700     // La SHON créée ou issue de la transformation
1701     // suffixée par 9 (intérêt collectif ou service public) doit
1702     // obligatoirement s'accompagner de la décomposition
1703     // en sous modalité renseignée par la variable cpublic et réciproquement.
1704    
1705     // Test si une valeur est true
1706     $cpublic = FALSE;
1707     if (isset($row['co_sp_transport']) && $row['co_sp_transport'] == 't') {
1708     $cpublic = TRUE;
1709     }
1710     if (isset($row['co_sp_enseign']) && $row['co_sp_enseign'] == 't') {
1711     $cpublic = TRUE;
1712     }
1713     if (isset($row['co_sp_sante']) && $row['co_sp_sante'] == 't') {
1714     $cpublic = TRUE;
1715     }
1716     if (isset($row['co_sp_act_soc']) && $row['co_sp_act_soc'] == 't') {
1717     $cpublic = TRUE;
1718     }
1719     if (isset($row['co_sp_ouvr_spe']) && $row['co_sp_ouvr_spe'] == 't') {
1720     $cpublic = TRUE;
1721     }
1722     if (isset($row['co_sp_culture']) && $row['co_sp_culture'] == 't') {
1723     $cpublic = TRUE;
1724     }
1725     //
1726 softime 4640 if($cpublic !== TRUE AND ($export_sitadel->get_shon_val('cstr', 9) > 0 OR $export_sitadel->get_shon_val('chge', 9) > 0)) {
1727     $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";
1728 mbroquet 3730 }
1729    
1730     // La destination principale du logement mise à résidence
1731     // principale ou résidence secondaire doit obligatoirement
1732     // s'accompagner d'un mode d'utilisation à occupation personnelle
1733     if($row['co_uti_princ'] == 't' OR $row['co_uti_secon'] == 't') {
1734     if($row['co_uti_pers'] != 't') {
1735    
1736     $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";
1737     }
1738     }
1739    
1740     $decision.= $export_sitadel->destination($row['mouvement_sitadel']);
1741    
1742     // Le nombre total de logements créés (variable nbtotlog)
1743     // doit être égal à la somme des nombres de logements créés
1744     // ventilés par type de financement
1745 softime 9245 if(intval($row['co_tot_log_nb']) != (intval($row['co_fin_lls_nb']) + intval($row['co_fin_aa_nb']) +
1746     intval($row['co_fin_ptz_nb']) + intval($row['co_fin_autr_nb']))) {
1747 mbroquet 3730
1748     $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";
1749     }
1750    
1751     $decision.= $export_sitadel->repartitionFinan();
1752    
1753     // Le nombre total de logements créés (variable nbtotlog)
1754     // doit être égal à la totalisation de la répartition des
1755     // logements par nombre de pièces
1756 softime 9245 if(intval($row['co_tot_log_nb']) != (intval($row['co_log_1p_nb']) + intval($row['co_log_2p_nb']) +
1757     intval($row['co_log_3p_nb']) + intval($row['co_log_4p_nb']) + intval($row['co_log_5p_nb']) +
1758     intval($row['co_log_6p_nb']))) {
1759 mbroquet 3730
1760     $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";
1761     }
1762    
1763     $decision.= $export_sitadel->repartitionNbPiece($row['mouvement_sitadel']);
1764     }
1765     else {
1766     //
1767     $decision.= str_repeat("|", 6);
1768     if($row['code']=='DP'){
1769     $decision .= "00000|";
1770     }else{
1771     $decision .= "|";
1772     }
1773     $decision .= "0000|00000|";
1774     $decision.= str_repeat("|", 74);
1775     }
1776     $decision.="\n";
1777     }
1778    
1779     // modificatif
1780     $modificatif='';
1781     if($row['mouvement_sitadel'] == 'MODIFICATIF' AND $row['statut_di']=='cloture' AND
1782 softime 7996 $row['typeavis']=='F') {
1783 softime 4838 $modificatif.=$export_sitadel->entete("MODIFICATIF",$departement,$commune, $version);
1784 mbroquet 3730
1785     $modificatif.= $export_sitadel->decision_groupe1();
1786    
1787     if(isset($row['date_decision']) or $row['date_decision']==""){
1788     // avis_sitadel et avis_sitadel_motif
1789     // si la decision est favorable, envoi des informations statistiques
1790     if($row["sitadel"] == 2 or $row["sitadel"] == 4
1791     or $row["sitadel"] == 5){
1792     // si accordé : ajout du 2nd groupe d'informations
1793     $modificatif .= $export_sitadel->adresse_terrain(); // adresse du terrain
1794     $modificatif .= $export_sitadel->parcelle(); // 3 premières parcelles
1795     $modificatif .= $export_sitadel->modificatif_terrain(); // Informations complémentaires
1796    
1797 softime 4636 $modificatif.= $export_sitadel->shon("avt");
1798     $modificatif.= $export_sitadel->shon("demo");
1799     $modificatif.= $export_sitadel->shon("chge");
1800     $modificatif.= $export_sitadel->shon("trsf");
1801     $modificatif.= $export_sitadel->shon("cstr");
1802 mbroquet 3730
1803     $modificatif.= "|||||||||";
1804     $modificatif.= $export_sitadel->destination($row['mouvement_sitadel']);
1805     $modificatif.= $export_sitadel->repartitionFinan();
1806     $modificatif.= $export_sitadel->repartitionNbPiece($row['mouvement_sitadel']);
1807     }
1808     else {
1809     $modificatif .= str_repeat("|", 90);
1810     }
1811     }
1812     else {
1813     $modificatif .= str_repeat("|", 90);
1814     }
1815    
1816     $modificatif.="\n";
1817     }
1818    
1819     // Mouvement suppression
1820     $suppression = '';
1821     if($row['mouvement_sitadel'] == 'SUPPRESSION') {
1822 softime 4838 $suppression .= $export_sitadel->entete("SUPPRESSION",$departement,$commune, $version);
1823 mbroquet 3730 $suppression .= "\n";
1824     }
1825    
1826     // Règles sur le mouvement suivi
1827     $suivi="";
1828     if($row['mouvement_sitadel'] == 'SUIVI' and
1829     ($row['date_chantier'] >= $datedebut and $row['date_chantier']<=$datefin) ||
1830     ($row['date_achevement'] >= $datedebut and $row['date_achevement']<=$datefin)){
1831     // Si le dossier est une DOC
1832     if($row['dossier_instruction_type_code']=='DOC'){
1833     // Une ouverture de chantier ne peut concerner qu'un permis autorisé
1834     if($row['typeavis_da'] != 'F'&&$row['typeavis_da'] != '') {
1835     $erreur .= _("Dossier ").$row['dossier']." "._("Une ouverture de chantier ne peut concerner qu'un permis autorise.")."\n";
1836     }
1837     // La date d'ouverture de chantier doit être supérieur à la date d'autorisation
1838     if($row['doc_date'] > $row['date_decision_da']) {
1839     $erreur .= _("Dossier ").$row['dossier']." "._("La date d'ouverture de chantier doit être superieur a la date d'autorisation.")."\n";
1840     }
1841     // Un achèvement de chantier ne peut concerner qu'un permis autorisé
1842     if($row['typeavis_da'] != 'F'&&$row['typeavis_da'] != '') {
1843     $erreur .= _("Dossier ").$row['dossier']." "._("Un achevement de chantier ne peut concerner qu'un permis autorise.")."\n";
1844     }
1845     if( $row['date_chantier_da'] == "" && $row['date_achevement']!="") {
1846     $erreur .= _("Dossier ").$row['dossier']." "._("Un achevement de chantier ne peut concerner qu'un permis sur lequel un chantier a ete ouvert.")."\n";
1847     }
1848     // La date d'achevement de travaux doit être supérieur à la date d'ouverture des travaux
1849     if($row['daact_date'] > $row['date_chantier_da']) {
1850     $erreur .= _("Dossier ").$row['dossier']." "._("La date d'achevement de travaux doit etre superieur a la date d'ouverture des travaux.")."\n";
1851     }
1852 softime 4838 $suivi.=$export_sitadel->entete("SUIVI",$departement,$commune, $version);//8|
1853 mbroquet 3730 $suivi.=$export_sitadel->chantier($row);
1854     //On récupère la DAACT si elle existe
1855     $sqlDAACT = "SELECT
1856     donnees_techniques.daact_date,
1857     donnees_techniques.daact_date_chgmt_dest,
1858     donnees_techniques.daact_tot_trav,
1859     donnees_techniques.daact_tranche_trav,
1860     donnees_techniques.daact_tranche_trav_desc,
1861     donnees_techniques.daact_surf,
1862     donnees_techniques.daact_nb_log,
1863     donnees_techniques.daact_nb_log_indiv,
1864     donnees_techniques.daact_nb_log_coll,
1865     donnees_techniques.daact_nb_log_lls,
1866     donnees_techniques.daact_nb_log_aa,
1867     donnees_techniques.daact_nb_log_ptz,
1868     donnees_techniques.daact_nb_log_autre,
1869     etat.statut as statut_di
1870    
1871     FROM ".DB_PREFIXE."dossier
1872     LEFT JOIN ".DB_PREFIXE."donnees_techniques
1873     ON dossier.dossier=donnees_techniques.dossier_instruction
1874     LEFT JOIN ".DB_PREFIXE."etat
1875     ON dossier.etat = etat.etat
1876     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
1877     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1878     WHERE dossier.dossier_autorisation ='".$row['dossier_autorisation']."' AND
1879     dossier_instruction_type.code = 'DAACT' and mouvement_sitadel='SUIVI'";
1880     $resDAACT = $this->f->db -> query ($sqlDAACT);
1881     $this->f->addToLog("dossier.class.php : db->query(\"".$sqlDAACT."\")", VERBOSE_MODE);
1882     $this->f->isDatabaseError($resDAACT);
1883     $rowDAACT=& $resDAACT->fetchRow(DB_FETCHMODE_ASSOC);
1884     $suivi.=$export_sitadel->achevement($rowDAACT);
1885     $suivi.="\n";
1886     }
1887     elseif($row['dossier_instruction_type_code']=='DAACT'){
1888    
1889     //On vérifie qu'une DOC existe
1890     $sqlDOC = "SELECT dossier.dossier,
1891     dossier.date_chantier,
1892     donnees_techniques.doc_date,
1893     donnees_techniques.terr_div_surf_av_div,
1894     donnees_techniques.doc_tot_trav,
1895     donnees_techniques.doc_tranche_trav,
1896     donnees_techniques.doc_tranche_trav_desc,
1897     donnees_techniques.doc_surf,
1898     donnees_techniques.doc_nb_log,
1899     donnees_techniques.doc_nb_log_indiv,
1900     donnees_techniques.doc_nb_log_coll,
1901     donnees_techniques.doc_nb_log_lls,
1902     donnees_techniques.doc_nb_log_aa,
1903     donnees_techniques.doc_nb_log_ptz,
1904     donnees_techniques.doc_nb_log_autre
1905     FROM ".DB_PREFIXE."dossier
1906     LEFT JOIN ".DB_PREFIXE."donnees_techniques
1907     ON dossier.dossier=donnees_techniques.dossier_instruction
1908     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
1909     ON dossier.dossier_instruction_type=dossier_instruction_type.dossier_instruction_type
1910     WHERE dossier.dossier_autorisation ='".$row['dossier_autorisation']."' AND
1911     dossier_instruction_type.code = 'DOC' and mouvement_sitadel='SUIVI'";
1912     $resDOC = $this->f->db -> query ($sqlDOC);
1913     $this->f->addToLog("dossier.class.php : db->query(\"".$sqlDOC."\")", VERBOSE_MODE);
1914     $this->f->isDatabaseError($resDOC);
1915     $rowDOC=& $resDOC->fetchRow(DB_FETCHMODE_ASSOC);
1916    
1917     if((isset($rowDOC['dossier']) &&
1918     $rowDOC['date_chantier']<$datedebut || $rowDOC['date_chantier']>$datefin) ||
1919     !isset($rowDOC['dossier'])) {
1920     //
1921 softime 4838 $suivi.=$export_sitadel->entete("SUIVI",$departement,$commune, $version);//8|
1922 mbroquet 3730 $suivi.=$export_sitadel->chantier($rowDOC);
1923     $suivi.=$export_sitadel->achevement($row);
1924 softime 7996 $suivi.="\n";
1925 mbroquet 3730 }
1926     }
1927 softime 7996 }
1928     // Ligne SITADEL généré
1929     $line_sitadel = $depot.$decision.$transfert.$modificatif.$suivi.$suppression;
1930     if ($line_sitadel !== '') {
1931     // Hash la ligne SITADEL
1932     $hash_sitadel = md5($line_sitadel);
1933     // Si le hash de la ligne générée est différent du hash
1934     // sauvegardé sur le dossier
1935     if ($row['hash_sitadel'] !== $hash_sitadel) {
1936     // Met la ligne dans l'export
1937     $export .= $line_sitadel;
1938     // Met à jour le hash SITADEL du dossier
1939     $inst_di = $this->get_inst_dossier($row['dossier']);
1940     $inst_di->update_hash_sitadel($hash_sitadel);
1941     } else {
1942     // Supprime les erreurs liées à la ligne qui ne sera
1943     // pas exportée
1944     $erreur = '';
1945     }
1946     }
1947 mbroquet 3730 } // fin while
1948    
1949     /**
1950     *
1951     */
1952     //
1953     if (DBCHARSET == 'UTF8') {
1954     $export = utf8_decode($export);
1955     }
1956    
1957     /**
1958     * En-tête de fichier.
1959     *
1960     * C'est la première ligne du fichier.
1961     */
1962     // on éclate la chaîne export par ligne pour calculer le nombre
1963     // d'enregistrements et la longueur maximale des enregistrements
1964     $export_by_line = explode("\n", $export);
1965     // longueur maximale des enregistrements
1966     // (Num)(6) longueur de l’enregistrement le plus long contenu dans le
1967     // fichier (sans compter la fin d’enregistrement ou la fin de fichier)
1968     $longueur_maximale_des_enregistrements = 0;
1969     foreach ($export_by_line as $export_line) {
1970     if ($longueur_maximale_des_enregistrements > strlen($export_line)) {
1971     continue;
1972     }
1973     $longueur_maximale_des_enregistrements = strlen($export_line);
1974     }
1975     // nombre d'enregistrements
1976     // (Num)(6) nombre d’enregistrements présents dans le fichier en
1977     // comptant l’en-tête du fichier
1978     // XXX Ne faut-il pas ajouter +1 pour la ligne d'en-tête ?
1979     $nombre_d_enregistrements = count($export_by_line);
1980     // code application
1981     // (Alphanum)(7) = SITADEL
1982     $code_application = "SITADEL";
1983     // code département
1984     // (Alphanum)(3) département dans lequel se trouve le service instructeur
1985     // nomenclature : 001 à 095, 02A, 02B, 971...974
1986     $code_departement = $this->f->getParameter("departement");
1987     // service expéditeur
1988     // (Alphanum)(3) DDE ou commune (la plus grosse en cas d'EPCI) ou DGI
1989     // nomenclature : 'ADS', ‘DGI ou code commune INSEE
1990     $service_expediteur = $this->f->getParameter("commune");
1991     // service destinataire
1992     // (Alphanum)(2) DRE
1993     // nomenclature : code région INSEE (exemple : Ile-de-France=11)
1994     $service_destinataire = $this->f->getParameter("region");
1995     // code du fichier transmis
1996     // (AlphaNum)(12) AAMMjjdddccc
1997     // ddd = département du service instructeur
1998     // ccc = code du service expéditeur
1999     // AAMMjj = date
2000     // par exemple : 090531093ADS dans le cas de la transmission mensuelle
2001     // des événements intervenus au mois de mai communiqués par la DDE de
2002     // Seine-Saint-Denis.
2003     // XXX La date du jour correspond bien à la date demandée ?
2004     $code_du_fichier_transmis = sprintf(
2005     "%s%s%s",
2006     date('ymd'),
2007     $code_departement,
2008     $service_expediteur
2009     );
2010     // numéro d'ordre
2011     // (AlphaNum)(1) numéro d’ordre du fichier en cas de rectificatif
2012     // XXX Le formulaire propose jusqu'à la valeur 10 alors que la taille
2013     // de la châine doit être (1) ?
2014     $numero_d_ordre = $this->f->get_submitted_post_value("numero");
2015     // date de création
2016     // (Alphanum)(6) AAMMjj date de création du fichier transmis
2017     $date_de_creation = date('ymd');
2018     // nom de l'applicatif expéditeur
2019     // (Alphanum)(20) Exemple : GESTIO
2020     $nom_de_l_applicatif_expediteur = "openADS";
2021     // version de l'applicatif expéditeur
2022     // (Alphanum)(8) Exemple : 2.05
2023 softime 7996 $version_de_l_applicatif_expediteur = substr($this->f->get_application_version(), 0, 8);
2024 mbroquet 3730 // Consititution de la ligne d'en-tête.
2025     $entete = sprintf(
2026     "%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n",
2027     $code_application,
2028     $code_departement,
2029     $service_expediteur,
2030     $service_destinataire,
2031     $code_du_fichier_transmis,
2032     $numero_d_ordre,
2033     $longueur_maximale_des_enregistrements,
2034     $date_de_creation,
2035     $nombre_d_enregistrements,
2036     $nom_de_l_applicatif_expediteur,
2037     $version_de_l_applicatif_expediteur
2038     );
2039    
2040     /**
2041     *
2042     */
2043     //
2044     $export = $entete.$export;
2045    
2046     /**
2047     * Écriture de l'export dans un fichier sur le disque et affichage du
2048     * lien de téléchargement.
2049     */
2050     // Composition du nom du fichier
2051     $nom_fichier = "SITADEL".substr($this->f->get_submitted_post_value("datedebut"),3,2)."".substr($this->f->get_submitted_post_value("datedebut"),8,4).".txt";
2052     // Composition des métadonnées du fichier
2053     $metadata_fichier = array(
2054     "filename" => $nom_fichier,
2055     "size" => strlen($export),
2056 softime 8989 "mimetype" => "text/csv",
2057 mbroquet 3730 );
2058     // Écriture du fichier
2059 softime 8989 $id_fichier = $this->f->store_file(
2060     $export,
2061     $metadata_fichier,
2062     "sitadel",
2063     json_encode(array(
2064     'date_debut' => $datedebut,
2065     'date_fin' => $datefin,
2066     ))
2067     );
2068     if ($id_fichier === false) {
2069     $msg_error = __("Erreur lors du stockage/enregistrement du fichier SITADEL.").' '.__("Veuillez contacter votre administrateur.");
2070     $this->f->displayMessage("error", $msg_error);
2071     $this->f->addToLog(__METHOD__."(): ".$msg_error, DEBUG_MODE);
2072     return;
2073     }
2074 mbroquet 3730 //
2075 softime 8989 $message_valid = sprintf(
2076     "%s<br/>%s",
2077     sprintf(__("Le fichier %s a été généré."), $nom_fichier),
2078     sprintf(
2079     '<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>',
2080     OM_ROUTE_FORM,
2081     $id_fichier,
2082     __("Télécharger le fichier SITADEL")
2083     )
2084     );
2085 mbroquet 3730
2086     /**
2087     * Écriture d'une éventuelle erreur durant l'export dans un fichier sur
2088     * le disque et affichage du lien de téléchargement.
2089     */
2090     //
2091     if ($erreur != "") {
2092     // Composition du nom du fichier
2093     $nom_fichier_erreur = "probleme_".$nom_fichier;
2094     // Composition des métadonnées du fichier
2095     $metadata_fichier_erreur = array(
2096     "filename" => $nom_fichier_erreur,
2097     "size" => strlen($erreur),
2098 softime 8989 "mimetype" => "application/octet-stream",
2099 mbroquet 3730 );
2100     // Écriture du fichier
2101 softime 8989 $id_fichier_erreur = $this->f->store_file(
2102     $erreur,
2103     $metadata_fichier_erreur,
2104     "sitadel",
2105     json_encode(array(
2106     'date_debut' => $datedebut,
2107     'date_fin' => $datefin,
2108     ))
2109     );
2110     if ($id_fichier_erreur === false) {
2111     $msg_error = __("Erreur lors du stockage/enregistrement du fichier des incohérences SITADEL.").' '.__("Veuillez contacter votre administrateur.");
2112     $this->f->displayMessage("error", $msg_error);
2113     $this->f->addToLog(__METHOD__."(): ".$msg_error, DEBUG_MODE);
2114     return;
2115     }
2116 mbroquet 3730 //
2117 softime 8989 $message_info .= sprintf(
2118     "%s<br/>%s",
2119     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),
2120     sprintf(
2121     '<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>',
2122     OM_ROUTE_FORM,
2123     $id_fichier_erreur,
2124     __("Télécharger le fichier d'incohérence SITADEL")
2125     )
2126     );
2127 mbroquet 3730 }
2128 softime 8989
2129     //
2130     $this->f->displayMessage("valid",
2131     sprintf(
2132     '%s%s%s',
2133     $message_valid,
2134     $message_info !== '' ? '<br/><br/>' : '',
2135     $message_info
2136     )
2137     );
2138    
2139     //
2140 mbroquet 3730 if (DEBUG > 0) {
2141     printf($export);
2142     }
2143    
2144     } else {// correct = false
2145 softime 8989 $this->f->displayMessage("error", __("Les champs dates sont obligatoires."));
2146 mbroquet 3730 }
2147     }
2148     }
2149    
2150    
2151 softime 8989 function affichageFormulaire() {
2152     printf("<form method=\"POST\" name=f1>");
2153     //
2154     printf(
2155     "<div id=\"sitadel-form-fonctionnement\" class=\"sitadel-form-bloc\"><h3>%s</h3><p>%s</p></div>",
2156     __("Fonctionnement"),
2157     __("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.")
2158     );
2159     //
2160     printf(
2161     "<div id=\"sitadel-form-export\" class=\"sitadel-form-bloc\"><h3>%s</h3>",
2162     __("Export")
2163     );
2164 mbroquet 3730 //Description de la page
2165 softime 8989 $description = __("Saisissez la période pour laquelle vous souhaitez exporter les mouvements des dossiers au format SITADEL.");
2166 mbroquet 3730 $this->f->displayDescription($description);
2167     //
2168 softime 8989 $input = "<input type=\"text\" name=\"%s\" id=\"%s\" value=\"%s\" size=\"15\" class=\"champFormulaire datepicker\" onchange=\"fdate(this)\" />";
2169 mbroquet 3730 // champ date debut
2170 softime 8989 printf(" "._("Date de début")." ");
2171     printf($input, "datedebut", "datedebut", '');
2172 mbroquet 3730 // champ date fin
2173 softime 8989 printf(" "._("Date de fin")." ");
2174     printf($input, "datefin", "datefin", '');
2175 mbroquet 3730 // numero d'ordre d'envoi
2176     printf(" "._("Numero d'ordre d'envoi")." : "."<select name=\"numero\">");
2177     for ($i = 1; $i < 11; $i++) {
2178     printf("<option value =\"%d\" ", $i);
2179     printf(">%d</option>", $i);
2180     }
2181     printf("</select>");
2182 softime 8989 printf(
2183     "<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\" />",
2184     __("Exporter le fichier SITADEL"),
2185     addslashes(sprintf(
2186     "<b>%s</b><br/><br/>%s",
2187     __("Important à lire avant de confirmer le message de validation."),
2188     __("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.")
2189     )),
2190     OM_ROUTE_FORM
2191     );
2192     printf("</div>");
2193    
2194     // Affiche le tableau des fichiers sitadel stocké
2195     $link_tab_storage = OM_ROUTE_SOUSTAB.'&obj=storage&idxformulaire=0&retour=tab&retourformulaire=sitadel';
2196     $tab_storage = sprintf(
2197     '<div id="sousform-storage-sitadel" class="sitadel-form-bloc-tab"></div>
2198     <script type="text/javascript" >
2199     ajaxIt(\'storage-sitadel\', \'%1$s\');
2200     </script>',
2201     $link_tab_storage
2202     );
2203     printf(
2204     "<div id=\"sitadel-form-histo\" class=\"sitadel-form-bloc-end\"><h3>%s</h3>%s</div>",
2205     __("Historique des exports"),
2206     $tab_storage
2207     );
2208    
2209 mbroquet 3730 printf("</form>");
2210     }
2211    
2212     /**
2213     * VIEW - view_document_numerise.
2214     *
2215     * Vue du tableau des pièces du dossier d'autorisation.
2216     *
2217     * Cette vue permet de gérer le contenu de l'onglet "Pièce(s)" sur un
2218     * dossier d'autorisation. Cette vue spécifique est nécessaire car
2219     * l'ergonomie standard du framework ne prend pas en charge ce cas.
2220     * C'est ici la vue spécifique des pièces liées au dossier qui est
2221     * affichée directement au clic de l'onglet au lieu du soustab.
2222     *
2223     * L'idée est donc de simuler l'ergonomie standard en créant un container
2224     * et d'appeler la méthode javascript 'ajaxit' pour charger le contenu
2225     * de la vue visualisation de l'objet lié.
2226     *
2227     * @return void
2228     */
2229     function view_document_numerise() {
2230     // Vérification de l'accessibilité sur l'élément
2231     $this->checkAccessibility();
2232     // Récupération des variables GET
2233     ($this->f->get_submitted_get_value('idxformulaire')!==null ? $idxformulaire =
2234     $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = "");
2235     ($this->f->get_submitted_get_value('retourformulaire')!==null ? $retourformulaire =
2236     $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = "");
2237     // Objet à charger
2238     $obj = "document_numerise";
2239 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
2240     if ($type_aff_form === 'CTX RE' OR $type_aff_form === 'CTX IN') {
2241     $obj = "document_numerise_contexte_ctx";
2242     }
2243 mbroquet 3730 // Construction de l'url de sousformulaire à appeler
2244 softime 7996 $url = OM_ROUTE_SOUSFORM."&obj=".$obj;
2245 mbroquet 3730 $url .= "&idx=".$idxformulaire;
2246     $url .= "&action=4";
2247     $url .= "&retourformulaire=".$retourformulaire;
2248     $url .= "&idxformulaire=".$idxformulaire;
2249     $url .= "&retour=form";
2250     // Affichage du container permettant le reffraichissement du contenu
2251     // dans le cas des action-direct.
2252     printf('
2253     <div id="sousform-href" data-href="%s">
2254     </div>',
2255     $url
2256     );
2257     // Affichage du container permettant de charger le retour de la requête
2258     // ajax récupérant le sous formulaire.
2259     printf('
2260     <div id="sousform-%s">
2261     </div>
2262     <script>
2263     ajaxIt(\'%s\', \'%s\');
2264     </script>',
2265     $obj,
2266     $obj,
2267     $url
2268     );
2269     }
2270    
2271 softime 12847
2272     /**
2273     * Traitement du numéro de version d'un dossier.
2274     * Renvoie le numéro de version.
2275     *
2276     * Récupère le numéro de version du dossier d'instruction (DI) à l'aide du
2277     * numéro de dossier d'autorisation (DA).
2278     * Si un numéro de version a été récupéré incremente également le numéro
2279     * de version du DA dans la base de données.
2280     *
2281     * @param array tableau contenant les valeurs du formulaire
2282     * @return integer|null numero de version du dossier si il a pu être récupéré
2283 mbroquet 3730 */
2284 softime 12847 protected function traitementNumeroVersion($val = array()) {
2285     // Récupération du numéro de version du dossier d'instruction
2286     $numeroVersion = $this->getNumeroVersion($val['dossier_autorisation']);
2287     // Mise à jour du numéro de version du DA
2288     // La numérotation du DI est unique et basée sur celle du DA qui débute à -1.
2289 nmeucci 4526 // Ainsi la version du DI initial est à 0.
2290     if (is_numeric($numeroVersion) or $numeroVersion == -1){
2291     $this->incrementNumeroVersion($val['dossier_autorisation'], ++$numeroVersion);
2292     }
2293 softime 12847 return $numeroVersion;
2294     }
2295 nmeucci 4526
2296 softime 12847 /**
2297     * Traitement de la numérotation du dossier lors de la saisie manuelle du
2298     * numéro de dossier.
2299     * Renvoie un tableau contenant les valeurs nécessaires à la numérotation du
2300     * dossier.
2301     *
2302     * Récupère le numéro de dossier issus du formulaire. Construis le libellé et
2303     * l'identifiant du dossier à partir du numéro saisie.
2304     *
2305     *
2306     * @param array tableau contenant les valeurs du formulaire.
2307     * @return array informations liées à la numérotation du dossier.
2308     */
2309     protected function traitementNumerotationDossierManuelle($val = array()) {
2310     // INitialisation des valeurs de la numérotation à partir des informations issues
2311     // du formulaire
2312     $num_doss_comp = $val['numero_dossier_complet'];
2313     $numerotation = array(
2314     $this->clePrimaire => $num_doss_comp,
2315     'dossier_libelle' => $num_doss_comp
2316     );
2317     // TODO : à commenter
2318     $num_urba = $this->f->numerotation_urbanisme($num_doss_comp);
2319     // TODO : à commenter
2320     if (empty($num_urba['di']) === false) {
2321     $dossier = sprintf("%s%s%s%s%s%s%s%s",
2322     $num_urba['di']['type'],
2323     $num_urba['di']['departement'],
2324     $num_urba['di']['commune'],
2325     $num_urba['di']['annee'],
2326     $num_urba['di']['division'],
2327     $num_urba['di']['numero'],
2328     isset($num_urba['di']['suffixe']) === true ? $num_urba['di']['suffixe'] : '',
2329     isset($num_urba['di']['num_suffixe']) === true ? str_pad($num_urba['di']['num_suffixe'], 2, '0', STR_PAD_LEFT) : ''
2330     );
2331     $dossierLibelle = sprintf("%s %s%s %s %s%s%s%s",
2332     $num_urba['di']['type'],
2333     $num_urba['di']['departement'],
2334     $num_urba['di']['commune'],
2335     $num_urba['di']['annee'],
2336     $num_urba['di']['division'],
2337     $num_urba['di']['numero'],
2338     isset($num_urba['di']['suffixe']) === true ? $num_urba['di']['suffixe'] : '',
2339     isset($num_urba['di']['num_suffixe']) === true ? str_pad($num_urba['di']['num_suffixe'], 2, '0', STR_PAD_LEFT) : ''
2340     );
2341     $numerotation = array(
2342     $this->clePrimaire => $dossier,
2343     'dossier_libelle' => $dossierLibelle,
2344     'numerotation_type' => $num_urba['di']['type'],
2345     'numerotation_dep' => $num_urba['di']['departement'],
2346     'numerotation_com' => $num_urba['di']['commune'],
2347     'numerotation_division' => $num_urba['di']['division'],
2348     'numerotation_num' => $num_urba['di']['numero'],
2349     'numerotation_suffixe' => isset($num_urba['di']['suffixe']) === true ? $num_urba['di']['suffixe'] : null,
2350     'numerotation_num_suffixe' => isset($num_urba['di']['num_suffixe']) === true ? $num_urba['di']['num_suffixe'] : null
2351     );
2352     }
2353     return $numerotation;
2354     }
2355 softime 10573
2356 softime 12847 /**
2357     * Traitement automatique de la numérotation du dossier.
2358     * Renvoie un tableau contenant les valeurs nécessaires à la numérotation du
2359     * dossier.
2360     *
2361     * @param array tableau contenant les valeurs du formulaire.
2362     * @return array informations liées à la numérotation du dossier.
2363     */
2364     protected function traitementNumerotationDossierAuto($val = array()) {
2365     // GESTION DU SUFFIXE :
2366     // La version du suffixe est celle du type de DI : à ne pas confondre avec celle du DI lui même.
2367     // Exemple chronologique :
2368     // DI n° PC0130551600004 -> version 0
2369     // DI n° PC0130551600004M01 -> version 1
2370     // DI n° PC0130551600004PRO01 -> version 2 !!
2371     $code = null;
2372     $numeroVersionDossierInstructionType = null;
2373     $suffixe = "";
2374     // Si l'option suffixe de ce type de DI est activée
2375     if ( $this->getSuffixe($this->getDossierInstructionType()) === 't' ){
2376     // Récupération de la lettre associée au type de dossier d'instruction
2377     $code = $this->getCode($this->getDossierInstructionType());
2378     // Récupération du numéro de version en fonction du type de dossier d'instruction
2379     $numeroVersion = $this->getNumeroVersion($val['dossier_autorisation']);
2380     $numeroVersionDossierInstructionType = $this->getNumeroVersionDossierInstructionType(
2381     $val['dossier_autorisation'],
2382     $val['dossier_instruction_type'],
2383     $val['demande_type'],
2384     $numeroVersion
2385     );
2386     // Suffixe
2387     $suffixe = $code.$numeroVersionDossierInstructionType;
2388 softime 10573 }
2389    
2390 softime 12847 // Récupération du DA pour aller chercher le type, le département, la commune, la division et le numéro
2391     // nécessaire à la numérotation du dossier.
2392     $da = $this->f->get_inst__om_dbform(array(
2393     "obj" => "dossier_autorisation",
2394     "idx" => $val['dossier_autorisation'],
2395     ));
2396 softime 10573
2397 softime 12847 return array(
2398     'dossier' => $val['dossier_autorisation'].$suffixe,
2399 softime 14064 'dossier_libelle' => $da->getVal('dossier_autorisation_libelle').$suffixe,
2400 softime 12847 'numerotation_type' => ! empty($da->getVal("numerotation_type")) ? $da->getVal("numerotation_type") : null,
2401     'numerotation_dep' => ! empty($da->getVal("numerotation_dep")) ? $da->getVal("numerotation_dep") : null,
2402     'numerotation_com' => ! empty($da->getVal("numerotation_com")) ? $da->getVal("numerotation_com") : null,
2403     'numerotation_division' => ! empty($da->getVal("numerotation_division")) ? $da->getVal("numerotation_division") : null,
2404     'numerotation_num' => ! empty($da->getVal("numerotation_num")) ? $da->getVal("numerotation_num") : null,
2405     'numerotation_suffixe' => $code,
2406     'numerotation_num_suffixe' => $numeroVersionDossierInstructionType
2407     );
2408     }
2409 softime 10573
2410 softime 12847 /**
2411     * Traitement spécifique pour la numérotation du dossier.
2412     * Renvoie un tableau contenant les valeurs à mettre à jour pour la numérotation.
2413     *
2414     * Le(s) traitement(s) effectué(s) dans cette méthode est(sont) :
2415     * - Si l'option om_collectivite_entite est active gère la numérotation de l'entité
2416     * du dossier.
2417     *
2418     * @param array tableau contenant les valeurs du formulaire.
2419     * @return array informations liées à la numérotation du dossier.
2420     */
2421     function traitementSpécifique($val = array()) {
2422     // TODO : commenter
2423     $numerotation = array();
2424     // Gestion du numéro entité du dossier (specifique au MC)
2425 softime 14542 $numerotation_entite = $this->f->get_collectivite_code_entite($val['om_collectivite']);
2426 softime 10573 if ($this->f->is_option_om_collectivite_entity_enabled($val['om_collectivite']) === true
2427 softime 14542 && $numerotation_entite !== null) {
2428 softime 12847 $numerotation_num_entite = $this->increment_num_entite($val['dossier_autorisation']);
2429     $numerotation_num_entite = str_pad($numerotation_num_entite, 2, "0", STR_PAD_LEFT);
2430     $numerotation = array(
2431     $this->clePrimaire => $val[$this->clePrimaire].$numerotation_entite.$numerotation_num_entite,
2432     'dossier_libelle' => $val['dossier_libelle']." ".$numerotation_entite.$numerotation_num_entite,
2433     'numerotation_entite' => $numerotation_entite,
2434     'numerotation_num_entite' => $numerotation_num_entite
2435     );
2436 softime 10573 }
2437 softime 12847 return $numerotation;
2438     }
2439 softime 10573
2440 softime 12847 /**
2441     * Définition de la version et du suffixe du DI lors de sa création.
2442     *
2443     * @param array tableau contenant les valeurs du formulaire
2444     */
2445     function setValFAjout($val = array()) {
2446     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2447     // traitement lié à la récupération du numéro de version du dossier et stockage
2448     // de ce numéro de version
2449     $numeroVersion = $this->traitementNumeroVersion($val);
2450     $this->valF['version'] = $numeroVersion;
2451    
2452     // Il y a deux possibilité de numérotation :
2453     // - la numérotation manuelle : le numéro de dossier est complétement saisis par l'utilisateur
2454     // - la numérotation automatique : le numéro de dossier est construis à partir du paramétrage
2455     // Selon les cas on va donc gérer la numérotation différemment.
2456     // Dans tous les cas on va récupérer les valeurs lié à la numérotation sous le forme d'un tableau.
2457     $isSaisieManuelle = ! empty($val['numero_dossier_complet']);
2458     if ($isSaisieManuelle) {
2459     $valNumerotationDossier = $this->traitementNumerotationDossierManuelle($val);
2460     } else {
2461     $valNumerotationDossier = $this->traitementNumerotationDossierAuto($val);
2462     }
2463     // Traitements spécifiques nécessaires à la numérotation du dossier.
2464     // Pour pouvoir réaliser les traitements spécifique on a besoin des infos de
2465     // numérotation. On l'ajoute donc au tableau des valeur pour pouvoir y accéder.
2466     $val = array_merge($val, $valNumerotationDossier);
2467     $valNumerotationSpecifique = $this->traitementSpécifique($val);
2468    
2469    
2470    
2471     // Affectation automatique du dossier
2472     // Pour pouvoir réaliser l'affectation automatique on a besoin de la localisation.
2473     // On l'ajoute donc au tableau des valeur pour pouvoir y accéder
2474     // Récupération des références de localisation du dossier
2475     $valLocalisation = $this->localisation_dossier($val);
2476     $val = array_merge(
2477     $val,
2478     $valLocalisation
2479     );
2480     $valAffectation = $this->affectation_dossier($val);
2481    
2482     // Construis le tableau des valeurs mise à jour à partir des valeurs issues de
2483     // tous les traitements précédents
2484     $this->valF = array_merge(
2485     $this->valF,
2486     $valNumerotationDossier,
2487     $valNumerotationSpecifique,
2488     $valAffectation
2489     );
2490    
2491     $this->addToLog(__METHOD__."(): end", EXTRA_VERBOSE_MODE);
2492 softime 10573 }
2493    
2494 softime 12847 /**
2495     * Traitement permettant de récupérer la localisation du dossier à partir de
2496     * ses références cadastrales.
2497     *
2498     * Récupère un tableau contenant les informations suivantes :
2499     * array(
2500     * 'quartier' => quartier,
2501     * 'arrondissement' => arrondissement
2502     * 'section' => section
2503     * )
2504     *
2505     * @param array tableau des valeurs du dossier
2506     * @param array tableau contenant la localisation du dossier
2507     */
2508     protected function localisation_dossier($val) {
2509     $quartier = 0;
2510     $arrondissement = 0;
2511     $section = '';
2512    
2513     // Si la référence cadastrale n'est pas vide alors on récupère la
2514     // section, le quartier et l'arrondissement
2515     if ($val['terrain_references_cadastrales'] != '') {
2516    
2517 softime 13137 // Récupère toutes les parcelles du dossier et sélectionne la première
2518     $list_parcelles = $this->f->parseParcelles($this->valF['terrain_references_cadastrales'], $this->valF['om_collectivite']);
2519 softime 14542 if (count($list_parcelles) > 0) {
2520     $parcelle = $list_parcelles[0];
2521 softime 12847
2522 softime 14542 // Récupère l'identifiant du quartier et de l'arrondissement
2523     $quartier_arrondissement = $this->get_quartier_arrondissement_by_code_impot($parcelle['quartier']);
2524     if ($quartier_arrondissement !== null
2525     && is_array($quartier_arrondissement) === true
2526     && isset($quartier_arrondissement['quartier']) === true
2527     && isset($quartier_arrondissement['arrondissement']) === true) {
2528     //
2529     $quartier = $quartier_arrondissement['quartier'];
2530     $arrondissement = $quartier_arrondissement['arrondissement'];
2531     }
2532    
2533     // On récupère la section
2534     $section = $parcelle['section'];
2535 softime 12847 }
2536     }
2537    
2538     return array(
2539 softime 13137 'quartier' => $quartier,
2540     'arrondissement' => $arrondissement,
2541 softime 12847 'section' => $section
2542     );
2543     }
2544    
2545 softime 10573 // Permet d'incrémenter le numéro de version de l'entité
2546     public function increment_num_entite($da) {
2547     if ($da === null || $da === '') {
2548     return false;
2549     }
2550     $last_entity_num = 0;
2551 nmeucci 4526 //
2552 softime 10573 $inst_da = $this->f->get_inst__om_dbform(array(
2553     "obj" => "dossier_autorisation",
2554     "idx" => $da,
2555     ));
2556     $list_di = $inst_da->get_list_dossier_instruction();
2557     foreach ($list_di as $di) {
2558     $inst_di = $this->f->get_inst__om_dbform(array(
2559     "obj" => "dossier",
2560     "idx" => $di['dossier'],
2561     ));
2562     if (intval($inst_di->getVal('numerotation_num_entite')) > $last_entity_num) {
2563     $last_entity_num = intval($inst_di->getVal('numerotation_num_entite'));
2564     }
2565 mbroquet 3730 }
2566 softime 10573 return ++$last_entity_num;
2567 mbroquet 3730 }
2568    
2569     /*Récupère la valeur du suffixe d'un dossier_instruction_type*/
2570 softime 14542 function getSuffixe($idDIType){
2571     $dossierInstructionType = $this->f->get_inst__om_dbform(array(
2572     'obj' => 'dossier_instruction_type',
2573     'idx' => $idDIType
2574     ));
2575     return $dossierInstructionType->getVal('suffixe');
2576 mbroquet 3730 }
2577    
2578     /*Récupère dans la table de paramètrage la lettre correspondant
2579     * au dossier_instruction_type
2580     */
2581 softime 14542 function getCode($idDIType){
2582     $dossierInstructionType = $this->f->get_inst__om_dbform(array(
2583     'obj' => 'dossier_instruction_type',
2584     'idx' => $idDIType
2585     ));
2586     return $dossierInstructionType->getVal('code');
2587 mbroquet 3730 }
2588    
2589 softime 12847 /**
2590     * Récupère le numéro de version d'un dossier_autorisation à l'aide d'une
2591     * requête sql.
2592     *
2593     * En cas d'erreur sur la requête arrête l'execution et affiche un message
2594     * d'erreur.
2595     *
2596     * @param string identifiant du dossier d'autorisation (DA)
2597     * @return integer numéro de version du DA
2598     */
2599 softime 14542 function getNumeroVersion($idDA){
2600     $dossierAutorisation = $this->f->get_inst__om_dbform(array(
2601     'obj' => 'dossier_autorisation',
2602     'idx' => $idDA
2603     ));
2604     return $dossierAutorisation->getVal('numero_version');
2605 mbroquet 3730 }
2606 fmichon 3892
2607 softime 14064
2608 fmichon 3892 /**
2609 softime 14064 * Récupère le numéro de suffixe du dossier d'instruction.
2610 fmichon 3892 *
2611 softime 14064 * @return string
2612 fmichon 3892 */
2613 softime 14064 function get_di_numero_suffixe($dossier_instruction = null) {
2614 fmichon 3892
2615 softime 14064 $ref_dossier = $this;
2616     if (! empty($dossier_instruction)) {
2617     if(empty($ref_dossier = $this->f->findObjectById('dossier', $dossier_instruction))) {
2618     $this->f->addToLog(__METHOD__."(): Dossier '$dossier_instruction' non trouvé", DEBUG_MODE);
2619     return false;
2620     }
2621 fmichon 3892 }
2622 softime 14064 else {
2623     $dossier_instruction = $ref_dossier->getVal($this->clePrimaire);
2624     }
2625 fmichon 3892
2626 softime 14064 $dossier_suffixe = intval($ref_dossier->getVal('numerotation_num_suffixe'));
2627 fmichon 3892
2628 softime 14064 // TODO si les tests se déroulent bien:
2629     // - supprimer le code ci-dessous et la fonction 'numerotation_urbanisme'
2630     // - retourner le résultat de la ligne ci-dessus en tant que valeur de retour de la fonction
2631 fmichon 3892
2632 softime 14064 $dossier_ref_id = $dossier_instruction;
2633     $collectivite_id = $ref_dossier->getVal('om_collectivite');
2634 softime 10573
2635 softime 14064 // si l'option 'code_entité' est activée pour la collectivité
2636     if ($this->f->is_option_om_collectivite_entity_enabled($collectivite_id)) {
2637 softime 10573
2638 softime 14064 // si le code entité n'est pas défini ou vide
2639 softime 14542 if ($this->f->get_collectivite_code_entite($collectivite_id) === null) {
2640 softime 10573
2641 softime 14064 // affiche un message d'alerte
2642     $err_msg = sprintf(__("Paramètre '%s' manquant ou vide pour la collectivité '%s'"),
2643     'code_entite',
2644     $collectivite_id);
2645     $this->f->addToLog(__METHOD__."() : $err_msg", DEBUG_MODE);
2646     }
2647     // si le code entité est défini et non-vide
2648     else {
2649 softime 8989
2650 softime 14064 // supprime le code entité du numéro de dossier
2651 softime 14542 $code_entite = $this->f->get_collectivite_code_entite($collectivite_id);
2652 softime 14064 $dossier_ref_id = preg_replace('/'.$code_entite.'[0-9]+$/', '', $dossier_ref_id);
2653     $this->f->addToLog(__METHOD__."(): suppression (temporaire) du code entité '$code_entite' du dossier $dossier_ref_id (complet: $dossier_instruction)", DEBUG_MODE);
2654     }
2655 softime 10573 }
2656 softime 8477
2657 softime 14064 $num_urba = $this->f->numerotation_urbanisme($dossier_ref_id);
2658 fmichon 3892
2659     // Si l'expression régulière retourne une erreur
2660 softime 14064 if ($num_urba == false) {
2661 fmichon 3892 // Message dans le log
2662 softime 14064 $this->f->addToLog(__METHOD__."(): ".__("Erreur lors de la récupération du numéro de suffixe du dossier d'instruction"), DEBUG_MODE);
2663 fmichon 3892 return false;
2664     }
2665    
2666 softime 14064 $suffixe = 0;
2667    
2668     // Retourne seulement la suffixe du dossier d'instruction.
2669 nmeucci 4526 // Elle vaut 0 si le numéro du DI n'a pas de suffixe.
2670 softime 14064 if (isset($num_urba['di']['num_suffixe'])) {
2671     $suffixe = $num_urba['di']['num_suffixe'];
2672 nmeucci 4526 }
2673 softime 14064
2674     if ($dossier_suffixe != intval($suffixe)) {
2675     //throw new RuntimeException("Dossier '".$ref_dossier->getVal('dossier')."' suffixes differs ($dossier_suffixe != $suffixe)");
2676     $this->f->addToLog(__METHOD__."(): Dossier '".$ref_dossier->getVal('dossier')."' suffixes differs (new:$dossier_suffixe != old:$suffixe)", DEBUG_MODE);
2677     }
2678    
2679     return $suffixe;
2680 fmichon 3892 }
2681 mbroquet 3730
2682     /*Incrémente le numéro de version du dossier*/
2683     function incrementNumeroVersion($dossierAutorisation, $nouveauNumeroVersion) {
2684    
2685     $valF = array (
2686     "numero_version" => $nouveauNumeroVersion
2687     );
2688    
2689 softime 12847 $res = $this->f->db->autoexecute(
2690     DB_PREFIXE."dossier_autorisation",
2691     $valF,
2692     DB_AUTOQUERY_UPDATE,
2693     "dossier_autorisation = '$dossierAutorisation'"
2694     );
2695     $this->addToLog(
2696     __METHOD__."(): db->autoexecute(\"".DB_PREFIXE."dossier_autorisation\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"dossier_autorisation = '".$dossierAutorisation."'\");",
2697     VERBOSE_MODE
2698     );
2699     $this->f->isDatabaseError($res);
2700 mbroquet 3730 }
2701    
2702     /**
2703     * Retourne un numéro de version en fonction du type de dossier d'instruction
2704     * @param string $dossier_autorisation
2705     * @param integer $dossier_instruction_type
2706     * @return int
2707     */
2708 softime 10573 public function getNumeroVersionDossierInstructionType($dossier_autorisation, $dossier_instruction_type, $demande_type, $numero_version, $increment = true){
2709    
2710 mbroquet 3730 $numeroVersionDossierInstructionType = $numero_version;
2711 softime 10573
2712     // Récupère la nature de la demande
2713     $inst_demande_type = $this->f->get_inst__om_dbform(array(
2714     "obj" => "demande_type",
2715     "idx" => $demande_type
2716     ));
2717     $inst_demande_nature = $this->f->get_inst__om_dbform(array(
2718     "obj" => "demande_nature",
2719     "idx" => $inst_demande_type->getVal('demande_nature')
2720     ));
2721    
2722     // Si c'est un dossier d'instruction de type "Initial"
2723     if (strtolower($inst_demande_nature->getVal('code')) === 'nouv') {
2724 mbroquet 3730 return 0;
2725     }
2726     //Si c'est un modificatif ou transfert on retourne un nombre correspondant au
2727     //nombre de dossier d'instruction de ce type, rattaché au dossier
2728     //d'autorisation complété par des 0 à gauche si besoin. Format du retour
2729     //attendu : 01 ou 02, etc.
2730     else {
2731     //On récupère le nombre de dossier d'instruction de ce type rattaché au
2732     //dossier d'autorisation
2733 softime 14064 $qres = $this->f->get_one_result_from_db_query(
2734     sprintf(
2735     'SELECT
2736     count(dossier)
2737     FROM
2738     %1$sdossier
2739     LEFT JOIN %1$sdossier_autorisation
2740     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
2741     WHERE
2742     dossier_autorisation.dossier_autorisation = \'%2$s\'
2743     AND dossier.dossier_instruction_type = \'%3$d\'',
2744     DB_PREFIXE,
2745     $this->f->db->escapeSimple($dossier_autorisation),
2746     intval($dossier_instruction_type)
2747     ),
2748     array(
2749     "origin" => __METHOD__,
2750     "force_return" => true
2751     )
2752 softime 12847 );
2753 softime 14064 $numeroVersionDossierInstructionType = $qres['result'];
2754    
2755     if ($qres["code"] !== "OK") { // PP
2756 mbroquet 3730 $this->f->addToError("", $numeroVersionDossierInstructionType, $numeroVersionDossierInstructionType);
2757     return false;
2758     }
2759    
2760     // Requête SQL
2761 softime 14542 $qres = $this->f->get_all_results_from_db_query(
2762     sprintf(
2763     'SELECT
2764     substring(dossier, \'\d*$\')::int as last_num_dossier
2765     FROM
2766     %1$sdossier
2767     WHERE
2768     dossier_instruction_type = %2$s
2769     AND dossier_autorisation = \'%3$s\'
2770     AND version = (
2771     SELECT
2772     max(version)
2773     FROM
2774     %1$sdossier
2775     WHERE
2776     dossier_instruction_type = %2$s
2777     AND dossier_autorisation = \'%3$s\'
2778     GROUP BY
2779     dossier_instruction_type,
2780     dossier_autorisation
2781     )',
2782     DB_PREFIXE,
2783     intval($dossier_instruction_type),
2784     $this->f->db->escapeSimple($dossier_autorisation)
2785     ),
2786     array(
2787     'origin' => __METHOD__
2788     )
2789     );
2790 softime 9282 $num_version_last_dossier = null;
2791 softime 14542 if (count($qres['result']) > 0) {
2792     $row = array_shift($qres['result']);
2793 softime 9282 $num_version_last_dossier = $row['last_num_dossier'];
2794     }
2795 mbroquet 3730
2796     if (!empty($num_version_last_dossier)
2797     && $num_version_last_dossier >= $numeroVersionDossierInstructionType) {
2798     // Modifie le numéro suivant
2799     $numeroVersionDossierInstructionType = $num_version_last_dossier;
2800     }
2801     //
2802     if ($increment === true) {
2803     $numeroVersionDossierInstructionType = ++$numeroVersionDossierInstructionType;
2804     }
2805     //On compléte par des 0 à gauche
2806     $numeroVersionDossierInstructionType = str_pad($numeroVersionDossierInstructionType, 2, "0", STR_PAD_LEFT);
2807    
2808     return $numeroVersionDossierInstructionType;
2809     }
2810     }
2811    
2812 softime 6929 function setvalF($val = array()){
2813 softime 10573
2814     if (! $this->f->is_option_dossier_commune_enabled()) {
2815     // ajoute une "fausse" clé 'commune' dans le tableau des données envoyées
2816     // car la fonction 'setValF()' dans 'gen/obj/demande.class.php'
2817     // déclenche une erreur 'Undefined index: commune' sinon
2818     $val['commune'] = null;
2819     // idem pour cette valeur qui est passée au dossier d'instruction
2820     $this->valF['commune'] = null;
2821     }
2822    
2823 softime 14064 // normalise les coordonnées géographiques
2824     foreach(array('latitude', 'longitude') as $key) {
2825     if (isset($val["geoloc_$key"]) && ! empty($val["geoloc_$key"])) {
2826     $m = array();
2827     if (preg_match(self::LAT_LON_REGEX, $val["geoloc_$key"], $m)) {
2828     $val["geoloc_$key"] = sprintf('%d° %d.%d %1s', $m['deg'], $m['min'], $m['dec'], $m['dir']);
2829     }
2830     }
2831     }
2832    
2833 mbroquet 3730 parent::setvalF($val);
2834    
2835     // Récupération des id demandeurs postés
2836     $this->getPostedValues();
2837    
2838     // enlever les valeurs a ne pas saisir -> recherche en trigger ajouter et modifier
2839     unset ($this->valF['geom']);
2840     unset ($this->valF['geom1']);
2841     // valeurs hiddenstatic (calcule)
2842     if($this->maj==1){
2843     // par defaut
2844     unset ($this->valF['etat']);
2845     unset ($this->valF['delai']);
2846     unset ($this->valF['accord_tacite']);
2847     }
2848     unset ($this->valF['avis_decision']); // avis + libelle avis
2849     unset ($this->valF['terrain_surface_calcul']);
2850     unset ($this->valF['shon_calcul']);
2851     unset ($this->valF['date_notification_delai']);
2852     unset ($this->valF['date_decision']);
2853     unset ($this->valF['date_limite']);
2854     unset ($this->valF['date_validite']);
2855     unset ($this->valF['date_chantier']);
2856     unset ($this->valF['date_achevement']);
2857     unset ($this->valF['date_conformite']);
2858 nmeucci 3887 // Ce champ est mis à jour uniquement par la gestion spécifique du log
2859     // et donc jamais par les actions ajouter/modifier
2860     unset ($this->valF['log_instructions']);
2861 softime 9245 // Ce champ n'est jamais mis à jour, seulement initialisé à la création
2862     // du dossier d'instruction
2863     unset($this->valF['initial_dt']);
2864 mbroquet 3730
2865 softime 10573 // Vérification de la saisie manuelle du numéro complet
2866     $force_param_duree_val = false;
2867     $num_doss_comp = isset($val['numero_dossier_complet']) === true ? $val['numero_dossier_complet'] : null;
2868     if ($num_doss_comp !== null) {
2869 softime 14064
2870     // si l'option 'code_entité' est activée pour la collectivité
2871     if ($this->f->is_option_om_collectivite_entity_enabled($this->valF['om_collectivite'])) {
2872    
2873     // si le code entité n'est pas défini ou vide
2874 softime 14542 if ($this->f->get_collectivite_code_entite($this->valF['om_collectivite']) === null) {
2875 softime 14064
2876     // affiche un message d'alerte
2877     $err_msg = sprintf(__("Paramètre '%s' manquant ou vide pour la collectivité '%s'"),
2878     'code_entite',
2879     $this->valF['om_collectivite']);
2880     $this->f->addToLog(__METHOD__."() : $err_msg", DEBUG_MODE);
2881     }
2882     // si le code entité est défini et non-vide
2883     else {
2884    
2885     // supprime le code entité du numéro de dossier
2886 softime 14542 $code_entite = $this->f->get_collectivite_code_entite($this->valF['om_collectivite']);
2887 softime 14064 $num_doss_comp = preg_replace('/'.$code_entite.'[0-9]+$/', '', $num_doss_comp);
2888     $this->f->addToLog(
2889     __METHOD__."(): suppression (temporaire) du code entité '$code_entite' ".
2890     "du dossier $num_doss_comp (complet: ".$val['numero_dossier_complet'].")", DEBUG_MODE);
2891     }
2892     }
2893    
2894 softime 10573 $num_urba = $this->f->numerotation_urbanisme($num_doss_comp);
2895     if (empty($num_urba['di']) === false) {
2896     $force_param_duree_val = true;
2897     }
2898     }
2899 mbroquet 3730 // Durée de validité lors de la création du dossier d'instruction
2900 softime 10573 $this->valF['duree_validite'] = $this->get_duree_validite($this->valF['dossier_autorisation'], $force_param_duree_val);
2901 mbroquet 3730 }
2902    
2903 softime 6929
2904 softime 6565 /**
2905 softime 7067 * Retourne le type de formulaire : ADS, CTX RE, CTX IN ou DPC.
2906 softime 6565 *
2907     * @return mixed $type_aff_form Type de formulaire (string) ou false (bool) si erreur BDD.
2908     */
2909     function get_type_affichage_formulaire() {
2910     if (isset($this->type_aff_form) === true) {
2911     return $this->type_aff_form;
2912 mbroquet 3730 }
2913 softime 14064
2914     $id_dossier_instruction_type = $this->getVal("dossier_instruction_type");
2915 softime 7996 if($this->getParameter('maj') == '0' OR $this->get_action_crud() === 'create') {
2916 softime 6565 $id_dossier_instruction_type = $this->valF["dossier_instruction_type"];
2917 softime 14064 }
2918    
2919     $qres = $this->f->get_one_result_from_db_query(
2920     sprintf(
2921     'SELECT
2922     dossier_autorisation_type.affichage_form
2923     FROM
2924     %1$sdossier_instruction_type
2925     INNER JOIN %1$sdossier_autorisation_type_detaille
2926     ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2927     INNER JOIN %1$sdossier_autorisation_type
2928     ON dossier_autorisation_type.dossier_autorisation_type = dossier_autorisation_type_detaille.dossier_autorisation_type
2929     WHERE
2930     dossier_instruction_type.dossier_instruction_type = \'%2$d\'',
2931     DB_PREFIXE,
2932     intval($id_dossier_instruction_type)
2933     ),
2934     array(
2935     "origin" => __METHOD__,
2936     "force_return" => true
2937     )
2938     );
2939    
2940     if ($qres["code"] !== "OK") {
2941 softime 6565 return false;
2942     }
2943 softime 14064
2944     $this->type_aff_form = $qres["result"];
2945    
2946 softime 6565 return $this->type_aff_form;
2947     }
2948 mbroquet 3730
2949    
2950 softime 6565 /**
2951     * Retourne le code du groupe du dossier d'instruction.
2952     *
2953     * @return string
2954     */
2955     public function get_groupe() {
2956     //
2957     if (isset($this->groupe) === true && $this->groupe !== null) {
2958     return $this->groupe;
2959 mbroquet 3730 }
2960    
2961 softime 6565 // Récupère le code du groupe
2962     $inst_dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
2963     $inst_dossier_autorisation_type = $this->get_inst_dossier_autorisation_type($inst_dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
2964     $inst_groupe = $this->get_inst_groupe($inst_dossier_autorisation_type->getVal('groupe'));
2965     $groupe = $inst_groupe->getVal('code');
2966 mbroquet 3730
2967 softime 6565 //
2968     $this->groupe = $groupe;
2969     //
2970     return $this->groupe;
2971     }
2972 mbroquet 3730
2973 softime 6565 /**
2974 softime 8989 * @return void
2975 softime 6565 */
2976 softime 8989 function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
2977     parent::verifier($val);
2978 softime 7366 // La date de dépôt est obligatoire
2979 softime 11876 if (isset($val['date_depot']) && ($val['date_depot'] === '' || $val['date_depot'] === null)) {
2980 softime 7366 //
2981     $this->correct = false;
2982     $this->addToMessage( _('Le champ').' <span class="bold">'.$this->getLibFromField('date_depot').'</span> '._('est obligatoire'));
2983 softime 11876 } else {
2984     //
2985     $date_depot = $val["date_depot"];
2986     if (preg_match('/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/', $val["date_depot"], $d_match)) {
2987     $date_depot = $d_match[3].'-'.$d_match[2].'-'.$d_match[1];
2988     }
2989     // Il faut avoir une date de dépôt pour pouvoir vérifier si elle est supérieure à la date du jour
2990     $date_depot = DateTime::createFromFormat('Y-m-d', $date_depot);
2991     $aujourdhui = new DateTime();
2992     try {
2993     if (! $date_depot instanceof DateTime) {
2994     throw new RuntimeException("Not a DateTime");
2995     }
2996     // Si la date issus du formulaire n'a pas pu être converti, date_demande vaudra
2997     // false. Avant de comparer on vérifie donc que la date a bien été récupérée
2998     if($date_depot > $aujourdhui) {
2999     $this->correct = false;
3000     $this->addToMessage(_("La date de depot ne peut pas être superieure à la date du jour."));
3001     }
3002     } catch (RuntimeException $e) {
3003     $this->correct = false;
3004     $this->addToLog($e.' : '._("Le format de la date de depot n'est pas valide."));
3005     $this->addToMessage(_("Erreur : le format de la date de depot n'est pas correct. Contactez votre administrateur."));
3006     }
3007 softime 7366 }
3008    
3009 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
3010     if ($type_aff_form ===false) {
3011     $this->correct = false;
3012     $this->addToMessage(_("Une erreur s'est produite lors de l'ajout de ce dossier. Veuillez contacter votre administrateur."));
3013 mbroquet 3730 }
3014 softime 6565
3015     switch ($type_aff_form) {
3016     case 'ADS':
3017     case 'CTX RE':
3018 softime 10573 case 'CONSULTATION ENTRANTE':
3019 softime 6565 if (!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
3020     empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
3021     !is_null($this->form)) {
3022     $this->correct = false;
3023     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
3024 mbroquet 3730 }
3025 softime 6565 break;
3026     case 'CTX IN':
3027     if (!isset($this->postedIdDemandeur["contrevenant_principal"]) OR
3028     empty($this->postedIdDemandeur["contrevenant_principal"]) AND
3029     !is_null($this->form)) {
3030     $this->correct = false;
3031     $this->addToMessage(_("La saisie d'un contrevenant principal est obligatoire."));
3032     }
3033     break;
3034 softime 7067 case 'DPC':
3035     if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
3036     empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
3037     !is_null($this->form)) {
3038     $this->correct = false;
3039     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
3040     }
3041     if(!isset($this->postedIdDemandeur["bailleur_principal"]) OR
3042     empty($this->postedIdDemandeur["bailleur_principal"]) AND
3043     !is_null($this->form)) {
3044     $this->correct = false;
3045     $this->addToMessage(_("La saisie d'un bailleur principal est obligatoire."));
3046     }
3047     break;
3048 mbroquet 3730 }
3049 softime 7366
3050     // Récupération du crud par rapport au mode du formulaire
3051     $crud = $this->get_action_crud($this->getParameter("maj"));
3052    
3053     // L'année de la date de dépot ne peut pas être modifiée
3054     if ($crud === 'update' && array_key_exists("date_depot", $val) === true && ($val["date_depot"] !== "" && $val["date_depot"] !== null)) {
3055     //
3056     $new_date = DateTime::createFromFormat('d/m/Y', $val["date_depot"]);
3057     $old_date = DateTime::createFromFormat('Y-m-d', $this->getVal("date_depot"));
3058     if ($new_date->format("Y") != $old_date->format("Y")) {
3059     $this->addToMessage(_("L'année de la date de dépôt n'est pas modifiable."));
3060     $this->correct = false;
3061     }
3062     }
3063 softime 10573
3064     // L'année de la date de dépot en mairie ne peut pas être modifiée
3065 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)) {
3066 softime 10573 //
3067     $new_date = DateTime::createFromFormat('d/m/Y', $val["date_depot_mairie"]);
3068 softime 10869 // Dans le cas où une date de dépôt en mairie est saisie et que l'option pour afficher
3069     // ce champ est désactivée, le champ sera mis en hidden et donc le format de la date
3070     // dans la valeur ne sera plus "d/m/Y" mais "Y-m-d".
3071     $new_date = $new_date !== false ? $new_date : DateTime::createFromFormat('Y-m-d', $val["date_depot_mairie"]);
3072 softime 10573 $old_date = DateTime::createFromFormat('Y-m-d', $this->getVal("date_depot_mairie"));
3073 softime 10869 if ($old_date !== false && $new_date->format("Y") != $old_date->format("Y")) {
3074 softime 10573 $this->addToMessage(_("L'année de la date de dépôt en mairie n'est pas modifiable."));
3075     $this->correct = false;
3076     }
3077     }
3078    
3079     // option dossier_commune activée
3080     if ($this->f->is_option_dossier_commune_enabled()) {
3081    
3082     // La commune doit être définie
3083     if ($crud !== 'delete') {
3084     if (! array_key_exists("commune", $val) || empty($val["commune"])) {
3085     $this->addToMessage(__("La commune doit être définie."));
3086     $this->correct = false;
3087     }
3088     else {
3089     // récupération de la date de demande
3090     $date_demande = 'NOW';
3091     $d_match = array();
3092     if (isset($val["date_demande"])
3093     && preg_match('/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/',
3094     $val["date_demande"], $d_match)) {
3095     $date_demande = $d_match[3].'-'.$d_match[2].'-'.$d_match[1];
3096     }
3097     $date_demande = new DateTime($date_demande);
3098    
3099     // La commune doit exister
3100     $commune = $this->f->findObjectById("commune", $val["commune"]);
3101     if (empty($commune)) {
3102     $this->addToMessage(__("La commune doit exister."));
3103     $this->correct = false;
3104     }
3105     // La commune ne peut pas être modifiée
3106     elseif ($crud === 'update') {
3107     if ($val["commune"] != $this->getVal('commune')) {
3108     $this->addToMessage(__("La commune n'est pas modifiable."));
3109     $this->correct = false;
3110     }
3111     }
3112     // La commune doit être valide
3113     elseif (! $commune->valid($date_demande)) {
3114     $this->addToMessage(__(
3115     "La commune doit être valide ".
3116     "à la date du '".$date_demande->format('d/m/Y')."'."));
3117     $this->correct = false;
3118     }
3119     }
3120     }
3121     }
3122 softime 14064
3123     // coordonnées géographiques
3124     if (isset($val['geoloc_rayon']) && ! empty($val['geoloc_rayon'])) {
3125     if (! ctype_digit(strval($val['geoloc_rayon']))) {
3126     $this->addToMessage(__("Le rayon (coordonnées géographiques) est invalide: doit être un nombre"));
3127     $this->correct = false;
3128     }
3129     }
3130     foreach(array('latitude', 'longitude') as $key) {
3131     if (isset($val["geoloc_$key"]) && ! empty($val["geoloc_$key"])) {
3132     $coord = $val["geoloc_$key"];
3133     if (! preg_match(self::LAT_LON_REGEX, $coord)) {
3134     $this->addToMessage(sprintf(
3135     __("%s '%s' invalide: le format à respecter est 'd° min.dec N/S/E/O'"), ucfirst($key), $coord));
3136     $this->correct = false;
3137     }
3138     }
3139     }
3140 softime 6565 }
3141 mbroquet 3730
3142    
3143 softime 10573 /**
3144     * Permet de vérifier si les champs requis Plat'AU ont été remplis
3145     *
3146     * @param $dossier l'identifiant du dossier
3147     *
3148     * @return array un tableau contenant une clé is_ok qui indique
3149     * si tous les champs sont saisis ou non et une clé
3150     * required_fields_empty qui contient les champs qui n'ont pas été saisis
3151     * | false si une erreur survient
3152     *
3153     */
3154     function check_platau_required_fields($dossier) {
3155    
3156     // On récupère les champs Plat'AU requis
3157     $fields_list = $this->list_platau_required_fields_dossier;
3158    
3159     // On fait un tableau qui contiendra les tables et un tableau
3160     // qui contient les champs au format 'table.champ'
3161     $tables = array();
3162     $champs = array();
3163    
3164     foreach ($fields_list as $value) {
3165     $expl_tab = explode('.', $value);
3166     if (! in_array($expl_tab[0], $tables)) {
3167     $tables[] = $expl_tab[0];
3168     }
3169     $champs[] = $value;
3170     }
3171    
3172     // Il y aura toujours la table dossier dans la requête
3173     if (in_array('dossier', $tables)) {
3174     $key = array_keys($tables, 'dossier');
3175     unset($tables[$key[0]]);
3176     }
3177    
3178     $from_tables = array();
3179     // On construit le 'FROM' de la requête sql avec les jointures
3180     foreach($tables as $table) {
3181     // Cas particulier pour la table demandeur et architecte
3182     if ($table == "demandeur") {
3183     $from_tables[] = sprintf(
3184     ' LEFT JOIN %1$slien_dossier_demandeur ON lien_dossier_demandeur.dossier = dossier.dossier LEFT JOIN %1$sdemandeur ON lien_dossier_demandeur.demandeur = demandeur.demandeur',
3185     DB_PREFIXE
3186     );
3187     } elseif ($table == "architecte") {
3188     $from_tables[] = sprintf(
3189     ' LEFT JOIN %sarchitecte ON architecte.architecte = donnees_techniques.architecte',
3190     DB_PREFIXE
3191     );
3192     } else {
3193     $from_tables[] = sprintf(" LEFT JOIN %s$table ON dossier.dossier = $table.%s ", DB_PREFIXE, $table == 'donnees_techniques' ? 'dossier_instruction' : 'dossier');
3194     }
3195     }
3196    
3197     // Construction de la requête sql
3198     $sql = sprintf(
3199     '
3200     SELECT
3201     %s,
3202     CASE WHEN demandeur.qualite=\'particulier\'
3203     THEN
3204     TRIM(CONCAT_WS(\' \', demandeur.particulier_nom, demandeur.particulier_prenom))
3205     ELSE
3206     CASE WHEN demandeur.personne_morale_nom IS NOT NULL OR demandeur.personne_morale_prenom IS NOT NULL
3207     THEN
3208     TRIM(CONCAT_WS(\' \', demandeur.personne_morale_raison_sociale, demandeur.personne_morale_denomination, \'%s\', demandeur.personne_morale_nom, demandeur.personne_morale_prenom))
3209     ELSE
3210     TRIM(CONCAT(demandeur.personne_morale_raison_sociale, \' \', demandeur.personne_morale_denomination))
3211     END
3212 softime 10713 END as petitionnaire,
3213     demandeur.demandeur
3214 softime 10573 FROM
3215     %sdossier
3216     %s
3217     WHERE dossier.dossier = \'%s\'
3218     ',
3219     implode(', ', $champs),
3220     __("représenté(e) par"),
3221     DB_PREFIXE,
3222     implode(' ', $from_tables),
3223     $dossier
3224     );
3225    
3226     // On récupère les champs
3227 softime 13137 $result_fields = $this->f->get_all_results_from_db_query(
3228     $sql,
3229     array(
3230     "origin" => __METHOD__,
3231     )
3232     );
3233 softime 10573
3234     // Si il y a une erreur
3235     if ($result_fields['code'] == 'KO'
3236     || $result_fields['result'] == ''
3237     || $result_fields['result'] == null) {
3238    
3239     $this->addToLog(__METHOD__."() query : ".var_export($sql, true)." error: ".var_export($result_fields['message'], true), DEBUG_MODE);
3240     return false;
3241     }
3242    
3243     // On récupère le résultat de la requête
3244     $required_fields = $result_fields['result'];
3245    
3246     $required_fields_with_tab = array();
3247    
3248     // Pour chaque champ on récupère la table
3249     $demandeur_num = 1;
3250     foreach ($required_fields as $required_field) {
3251     foreach ($champs as $champ) {
3252     if ($champ == "demandeur.localite") {
3253 softime 10713 $required_fields_with_tab[$champ.','.$required_field['petitionnaire'].' '.$required_field['demandeur']] = $required_field[explode('.', $champ)[1]];
3254 softime 10573 } else {
3255     $required_fields_with_tab[$champ] = $required_field[explode('.', $champ)[1]];
3256     }
3257     }
3258     }
3259    
3260     // On vérifie si un architecte est lié
3261 softime 13137 $qres = $this->f->get_one_result_from_db_query(
3262     sprintf(
3263     'SELECT
3264     architecte.*
3265     FROM
3266     %1$sdossier
3267 softime 14064 LEFT JOIN %1$sdonnees_techniques
3268     ON dossier.dossier = donnees_techniques.dossier_instruction
3269     LEFT JOIN %1$sarchitecte
3270     ON donnees_techniques.architecte = architecte.architecte
3271 softime 13137 WHERE
3272     dossier.dossier = \'%2$s\'',
3273     DB_PREFIXE,
3274     $this->f->db->escapeSimple($dossier)
3275     ),
3276     array(
3277     "origin" => __METHOD__,
3278 softime 14064 "force_return" => true
3279 softime 13137 )
3280 softime 10573 );
3281    
3282 softime 13137 if ($qres["code"] !== "OK") {
3283     $this->addToLog(__METHOD__."() plop error: ".var_export($qres["message"], true), DEBUG_MODE);
3284 softime 10573 return false;
3285     }
3286    
3287     // Si il n'est pas lié on enlève le champs architecte
3288 softime 13137 if ($qres["result"] == '' || $qres["result"] == null) {
3289 softime 10573 unset($required_fields_with_tab['architecte.ville']);
3290     }
3291    
3292     $result_tab = array(
3293     'is_ok' => false,
3294     'required_fields_empty' => array()
3295     );
3296    
3297     // Construction du message avec les tables et les champs
3298     foreach ($required_fields_with_tab as $required_field => $value) {
3299     if ($value == null || $value == '') {
3300     $required_fields_splited = explode('.', $required_field);
3301     if (isset(explode(',', $required_fields_splited[1])[1])) {
3302     $required_fields_splited = explode('.', $required_field);
3303 softime 10713 // On enlève l'identifiant du demandeur dans le message
3304     $required_fields_splited[1] = preg_replace('/[0-9]*$/', '', $required_fields_splited[1]);
3305 softime 10573 $result_tab['required_fields_empty'][] = sprintf("%s %s <i>%s</i>",
3306     sprintf(__("Dans le formulaire %s"), "<i>".__($required_fields_splited[0])."</i>"),
3307     __(" le champ : "),
3308     __(explode(',', $required_fields_splited[1])[0]).' pour '.explode(',', $required_fields_splited[1])[1]
3309     );
3310     } else {
3311     $result_tab['required_fields_empty'][] = sprintf("%s %s <i>%s</i>",
3312     sprintf(__("Dans le formulaire %s"), "<i>".__($required_fields_splited[0])."</i>"),
3313     __(" le champ : "),
3314     __($required_fields_splited[1])
3315     );
3316     }
3317     }
3318     }
3319    
3320     if (empty($result_tab['required_fields_empty'])) {
3321     $result_tab['is_ok'] = true;
3322     }
3323    
3324     return $result_tab;
3325    
3326     }
3327    
3328    
3329     /**
3330     * Permet de mettre à jour le state d'une task selon certains paramètre
3331     * Si le paramètre $dossier_autorisation est spécifié cela signifie que
3332     * le dossier a été transmis et qu'on doit modifier les state seulement
3333     * des tache de modification du di et d da
3334     *
3335     * @param dossier l'identifiant du dossier
3336     * @param state_prev le state de la tâche
3337     * @param state_wanted le state que doit avoir la tâche
3338     * @param dossier_autorisation l'identifiant du dossier d'autorisation
3339     *
3340     * @return void
3341     *
3342     */
3343 softime 13528 function update_task_state($dossier, $state_prev, $state_wanted, $dossier_autorisation=null) {
3344 softime 10573
3345     $already_transmitted_updated = '';
3346     $type_task_to_update = '';
3347 softime 10808
3348     $already_transmitted_updated = sprintf('OR task.dossier=\'%s\'', $dossier_autorisation !== null ? $dossier_autorisation : $this->valF['dossier_autorisation']);
3349 softime 10573
3350     $sql = sprintf(
3351 softime 10808 'SELECT task FROM %stask WHERE task.state = \'%s\' AND (task.dossier=\'%s\' %s) %s %s',
3352 softime 10573 DB_PREFIXE,
3353     $state_prev,
3354     $dossier,
3355     $already_transmitted_updated,
3356 softime 10808 $type_task_to_update,
3357     " AND type NOT IN ('notification_recepisse', 'notification_instruction', 'notification_decision') "
3358 softime 10573 );
3359 softime 13137 $tasks_id = $this->f->get_all_results_from_db_query(
3360     $sql,
3361     array(
3362     "origin" => __METHOD__,
3363     )
3364     );
3365 softime 10573 $params = array('val' => array('state' => $state_wanted));
3366     foreach ($tasks_id['result'] as $task_id) {
3367     $inst_task = $this->f->get_inst__om_dbform(array(
3368     "obj" => "task",
3369     "idx" => intval($task_id['task'])
3370     ));
3371     $inst_task->update_task($params);
3372     }
3373     }
3374    
3375    
3376 softime 6565 function setType(&$form,$maj) {
3377     // Par défaut le type des champs est géré nativement par le framework
3378     parent::setType($form,$maj);
3379    
3380     // Récupération du contexte : groupe, CRUD et paramètres
3381     $groupe = $this->get_type_affichage_formulaire();
3382     $crud = $this->get_action_crud($maj);
3383     $parameters = $this->f->getCollectivite($this->getVal('om_collectivite'));
3384    
3385 mbroquet 3730 //
3386 softime 6565 // Gestion du groupe
3387 mbroquet 3730 //
3388    
3389 softime 10573 // CONSULTATION ENTRANTE
3390     $ce_fields = array(
3391     'autorisation_contestee' => 'hidden',
3392     'cle_acces_citoyen' => 'static',
3393     'contrevenants' => 'hidden',
3394     'date_ait' => 'hidden',
3395     'date_audience' => 'hidden',
3396     'date_affichage' => 'datestatic',
3397     'date_cloture_instruction' => 'hidden',
3398     'date_contradictoire' => 'hidden',
3399     'date_derniere_visite' => 'hidden',
3400     'date_premiere_visite' => 'hidden',
3401     'date_transmission_parquet' => 'hidden',
3402     'dossier_autorisation_type_detaille' => 'hidden',
3403     'dossier_instruction_type' => 'selecthiddenstatic',
3404     'dossier_petitionnaires' => 'hidden',
3405     'dt_ctx_infraction' => 'hidden',
3406     'dt_ctx_regularisable' => 'hidden',
3407     'dt_ctx_synthese_anr' => 'hidden',
3408     'dt_ctx_synthese_nti' => 'hidden',
3409     'ctx_reference_dsj' => 'hidden',
3410     'enjeu_ctx' => 'static',
3411 softime 13528 'instructeur_2' => 'selecthiddenstatic',
3412 softime 10573 'requerants' => 'hidden',
3413     'bailleur' => 'hidden',
3414     'ctx_reference_sagace' => 'hidden',
3415 softime 10808 'pec_metier' => 'selecthiddenstatic',
3416 softime 10573 "consultation_entrante" => 'hidden',
3417     "delai_reponse" => 'hidden',
3418     "type_delai" => 'hidden',
3419     "objet_consultation" => 'hidden',
3420     "date_production_notification" => 'hidden',
3421     "date_premiere_consultation" => 'hidden',
3422     "date_consultation" => 'hidden',
3423     "date_emission" => 'hidden',
3424     "service_consultant_id" => 'hidden',
3425     "service_consultant_libelle" => 'hidden',
3426     "service_consultant_insee" => 'hidden',
3427     "service_consultant_mail" => 'hidden',
3428     "service_consultant_type" => 'hidden',
3429     "service_consultant__siren" => 'hidden',
3430     "etat_consultation" => 'hidden',
3431     "type_consultation" => 'hidden',
3432     "texte_fondement_reglementaire" => 'hidden',
3433     "texte_objet_consultation" => 'hidden',
3434     "dossier_consultation" => 'hidden',
3435     );
3436 softime 6565 // INFRACTION
3437     $inf_fields = array(
3438     'a_qualifier' => 'hidden',
3439     'autorisation_contestee' => 'hidden',
3440     'autorite_competente' => 'hidden',
3441     'cle_acces_citoyen' => 'hidden',
3442     'contrevenants' => 'static',
3443     'date_ait' => 'hiddenstaticdate',
3444     'date_audience' => 'hiddenstaticdate',
3445     'date_cloture_instruction' => 'hidden',
3446     'date_complet' => 'hidden',
3447     'date_contradictoire' => 'hiddenstaticdate',
3448     'date_decision' => 'hiddenstaticdate',
3449     'date_depot' => 'hiddenstaticdate',
3450 softime 10573 'date_depot_mairie' => 'hiddenstaticdate',
3451 softime 6565 'date_dernier_depot' => 'hidden',
3452     'date_derniere_visite' => 'hiddenstaticdate',
3453     'date_limite' => 'hidden',
3454     'date_limite_incompletude' => 'hidden',
3455     'date_premiere_visite' => 'hiddenstaticdate',
3456     'date_transmission_parquet' => 'hiddenstaticdate',
3457     'date_validite' => 'hidden',
3458     'delai' => 'hidden',
3459     'description_projet' => 'hidden',
3460     'dossier_autorisation_type_detaille' => 'hidden',
3461     'dossier_instruction_type' => 'hidden',
3462     'dossier_petitionnaire' => 'hidden',
3463     'dossier_petitionnaires' => 'hidden',
3464     'dt_ctx_infraction' => 'checkboxhiddenstatic',
3465     'dt_ctx_regularisable' => 'checkboxhiddenstatic',
3466     'dt_ctx_synthese_anr' => 'static',
3467     'dt_ctx_synthese_nti' => 'static',
3468 softime 8477 'ctx_reference_dsj' => 'static',
3469 softime 6565 'enjeu_ctx' => 'hidden',
3470     'enjeu_erp' => 'hidden',
3471     'enjeu_urba' => 'hidden',
3472     'erp' => 'hidden',
3473     'evenement_suivant_tacite' => 'hidden',
3474     'evenement_suivant_tacite_incompletude' => 'hidden',
3475     'numero_versement_archive' => 'hidden',
3476     'requerants' => 'hidden',
3477     'tax_mtn_part_commu' => 'hidden',
3478     'tax_mtn_part_depart' => 'hidden',
3479     'tax_mtn_part_reg' => 'hidden',
3480     'tax_mtn_total' => 'hidden',
3481 softime 6929 'tax_mtn_rap' => 'hidden',
3482 softime 6565 'tax_secteur' => 'hidden',
3483 softime 6929 'tax_mtn_part_commu_sans_exo' => 'hidden',
3484     'tax_mtn_part_depart_sans_exo' => 'hidden',
3485     'tax_mtn_part_reg_sans_exo' => 'hidden',
3486     'tax_mtn_total_sans_exo' => 'hidden',
3487     'tax_mtn_rap_sans_exo' => 'hidden',
3488 softime 7067 'bailleur' => 'hidden',
3489 softime 8477 'ctx_reference_sagace' => 'static',
3490 softime 10573 'pec_metier' => 'hidden',
3491     "consultation_entrante" => 'hidden',
3492     "delai_reponse" => 'hidden',
3493     "type_delai" => 'hidden',
3494     "objet_consultation" => 'hidden',
3495     "date_production_notification" => 'hidden',
3496     "date_premiere_consultation" => 'hidden',
3497     "date_consultation" => 'hidden',
3498     "date_emission" => 'hidden',
3499     "service_consultant_id" => 'hidden',
3500     "service_consultant_libelle" => 'hidden',
3501     "service_consultant_insee" => 'hidden',
3502     "service_consultant_mail" => 'hidden',
3503     "service_consultant_type" => 'hidden',
3504     "service_consultant__siren" => 'hidden',
3505     "etat_consultation" => 'hidden',
3506     "type_consultation" => 'hidden',
3507     "texte_fondement_reglementaire" => 'hidden',
3508     "texte_objet_consultation" => 'hidden',
3509     "dossier_consultation" => 'hidden',
3510 softime 6565 );
3511     // RECOURS
3512     $re_fields = array(
3513     'a_qualifier' => 'hidden',
3514     'autorite_competente' => 'hidden',
3515     'cle_acces_citoyen' => 'hidden',
3516     'contrevenants' => 'hidden',
3517     'date_ait' => 'hidden',
3518     'date_audience' => 'hidden',
3519     'date_cloture_instruction' => 'hiddenstaticdate',
3520     'date_complet' => 'hidden',
3521     'date_contradictoire' => 'hidden',
3522     'date_decision' => 'hiddenstaticdate',
3523     'date_depot' => 'hiddenstaticdate',
3524 softime 10573 'date_depot_mairie' => 'hiddenstaticdate',
3525 softime 6565 'date_dernier_depot' => 'hidden',
3526     'date_derniere_visite' => 'hidden',
3527     'date_limite' => 'hiddenstaticdate',
3528     'date_limite_incompletude' => 'hidden',
3529     'date_premiere_visite' => 'hidden',
3530     'date_transmission_parquet' => 'hidden',
3531     'date_validite' => 'hidden',
3532     'delai' => 'hidden',
3533     'description_projet' => 'hidden',
3534     'dossier_autorisation_type_detaille' => 'static',
3535     'dossier_instruction_type' => 'hidden',
3536     'dossier_petitionnaire' => 'hidden',
3537     'dossier_petitionnaires' => 'static',
3538     'dt_ctx_infraction' => 'hidden',
3539     'dt_ctx_regularisable' => 'hidden',
3540     'dt_ctx_synthese_anr' => 'hidden',
3541     'dt_ctx_synthese_nti' => 'hidden',
3542     'enjeu_ctx' => 'hidden',
3543     'enjeu_erp' => 'hidden',
3544     'enjeu_urba' => 'hidden',
3545     'erp' => 'hidden',
3546     'evenement_suivant_tacite' =>'selecthiddenstatic',
3547     'evenement_suivant_tacite_incompletude' => 'hidden',
3548     'instructeur_2' => 'hidden',
3549     'numero_versement_archive' => 'hidden',
3550     'requerants' => 'static',
3551     'tax_mtn_part_commu' => 'hidden',
3552     'tax_mtn_part_depart' => 'hidden',
3553     'tax_mtn_part_reg' => 'hidden',
3554     'tax_mtn_total' => 'hidden',
3555 softime 6929 'tax_mtn_rap' => 'hidden',
3556 softime 6565 'tax_secteur' => 'hidden',
3557 softime 6929 'tax_mtn_part_commu_sans_exo' => 'hidden',
3558     'tax_mtn_part_depart_sans_exo' => 'hidden',
3559     'tax_mtn_part_reg_sans_exo' => 'hidden',
3560     'tax_mtn_total_sans_exo' => 'hidden',
3561     'tax_mtn_rap_sans_exo' => 'hidden',
3562 softime 7067 'bailleur' => 'hidden',
3563 softime 8477 'ctx_reference_dsj' => 'static',
3564     'ctx_reference_sagace' => 'static',
3565 softime 10573 'pec_metier' => 'hidden',
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     // ADS
3587     $ads_fields = array(
3588     'autorisation_contestee' => 'hidden',
3589     'cle_acces_citoyen' => 'static',
3590     'contrevenants' => 'hidden',
3591     'date_ait' => 'hidden',
3592     'date_audience' => 'hidden',
3593 softime 8989 'date_affichage' => 'datestatic',
3594 softime 6565 'date_cloture_instruction' => 'hidden',
3595     'date_contradictoire' => 'hidden',
3596     'date_derniere_visite' => 'hidden',
3597     'date_premiere_visite' => 'hidden',
3598     'date_transmission_parquet' => 'hidden',
3599     'dossier_autorisation_type_detaille' => 'hidden',
3600     'dossier_instruction_type' => 'selecthiddenstatic',
3601     'dossier_petitionnaires' => 'hidden',
3602     'dt_ctx_infraction' => 'hidden',
3603     'dt_ctx_regularisable' => 'hidden',
3604     'dt_ctx_synthese_anr' => 'hidden',
3605     'dt_ctx_synthese_nti' => 'hidden',
3606 softime 8477 'ctx_reference_dsj' => 'hidden',
3607 softime 6565 'enjeu_ctx' => 'static',
3608 softime 13137 'instructeur_2' => 'selecthiddenstatic',
3609 softime 6565 'requerants' => 'hidden',
3610 softime 7067 'bailleur' => 'hidden',
3611 softime 8477 'ctx_reference_sagace' => 'hidden',
3612 softime 14064 'pec_metier' => 'selecthiddenstatic',
3613 softime 10573 "consultation_entrante" => 'hidden',
3614     "delai_reponse" => 'hidden',
3615     "type_delai" => 'hidden',
3616     "objet_consultation" => 'hidden',
3617     "date_production_notification" => 'hidden',
3618     "date_premiere_consultation" => 'hidden',
3619     "date_consultation" => 'hidden',
3620     "date_emission" => 'hidden',
3621     "service_consultant_id" => 'hidden',
3622     "service_consultant_libelle" => 'hidden',
3623     "service_consultant_insee" => 'hidden',
3624     "service_consultant_mail" => 'hidden',
3625     "service_consultant_type" => 'hidden',
3626     "service_consultant__siren" => 'hidden',
3627     "etat_consultation" => 'hidden',
3628     "type_consultation" => 'hidden',
3629     "texte_fondement_reglementaire" => 'hidden',
3630     "texte_objet_consultation" => 'hidden',
3631     "dossier_consultation" => 'hidden',
3632 softime 6565 );
3633 softime 7067 // DPC
3634     $dpc_fields = array(
3635     'autorisation_contestee' => 'hidden',
3636     'cle_acces_citoyen' => 'static',
3637     'contrevenants' => 'hidden',
3638     'date_ait' => 'hidden',
3639     'date_audience' => 'hidden',
3640     'date_cloture_instruction' => 'hidden',
3641     'date_contradictoire' => 'hidden',
3642     'date_derniere_visite' => 'hidden',
3643     'date_premiere_visite' => 'hidden',
3644     'date_transmission_parquet' => 'hidden',
3645     'dossier_autorisation_type_detaille' => 'hidden',
3646     'dossier_instruction_type' => 'selecthiddenstatic',
3647     'dossier_petitionnaires' => 'hidden',
3648     'dt_ctx_infraction' => 'hidden',
3649     'dt_ctx_regularisable' => 'hidden',
3650     'dt_ctx_synthese_anr' => 'hidden',
3651     'dt_ctx_synthese_nti' => 'hidden',
3652 softime 8477 'ctx_reference_dsj' => 'hidden',
3653 softime 7067 'enjeu_ctx' => 'static',
3654 softime 13137 'instructeur_2' => 'selecthiddenstatic',
3655 softime 7067 'requerants' => 'hidden',
3656     'bailleur' => 'static',
3657 softime 8477 'ctx_reference_sagace' => 'hidden',
3658 softime 10573 'pec_metier' => 'hidden',
3659     "consultation_entrante" => 'hidden',
3660     "delai_reponse" => 'hidden',
3661     "type_delai" => 'hidden',
3662     "objet_consultation" => 'hidden',
3663     "date_production_notification" => 'hidden',
3664     "date_premiere_consultation" => 'hidden',
3665     "date_consultation" => 'hidden',
3666     "date_emission" => 'hidden',
3667     "service_consultant_id" => 'hidden',
3668     "service_consultant_libelle" => 'hidden',
3669     "service_consultant_insee" => 'hidden',
3670     "service_consultant_mail" => 'hidden',
3671     "service_consultant_type" => 'hidden',
3672     "service_consultant__siren" => 'hidden',
3673     "etat_consultation" => 'hidden',
3674     "type_consultation" => 'hidden',
3675     "texte_fondement_reglementaire" => 'hidden',
3676     "texte_objet_consultation" => 'hidden',
3677     "dossier_consultation" => 'hidden',
3678 softime 7067 );
3679 softime 6565 // COMMUN
3680     $all_fields = array(
3681     'accord_tacite' => 'hidden',
3682     'annee' => 'hidden',
3683     'autres_demandeurs' => 'hidden',
3684     'date_achevement' => 'hidden',
3685     'date_chantier' => 'hidden',
3686     'date_conformite' => 'hidden',
3687     'date_notification_delai' => 'hidden',
3688     'date_rejet' => 'hidden',
3689     'date_retour_contradictoire' => 'hidden',
3690     'delai_incompletude' => 'hidden',
3691     'description' => 'hidden',
3692     'dossier' => 'hidden',
3693     'dossier_arrondissement' => 'hidden',
3694     'dossier_autorisation' => 'hidden',
3695     'dossier_autorisation_libelle' => 'hidden',
3696     'duree_validite' => 'hidden',
3697     'etat_pendant_incompletude' => 'hidden',
3698     'geom' => 'hiddenstatic',
3699     'geom1' => 'hidden',
3700     'incomplet_notifie' => 'hidden',
3701     'incompletude' => 'hidden',
3702     'interface_referentiel_erp' => 'hidden',
3703     'log_instructions' => 'nodisplay',
3704     'om_collectivite' => 'hidden',
3705     'quartier' => 'hidden',
3706     'version' => 'hidden',
3707 softime 7996 'date_modification' => 'hidden',
3708     'hash_sitadel' => 'hidden',
3709 softime 8329 'depot_electronique' => 'hidden',
3710 softime 9245 'version_clos' => 'hidden',
3711     'initial_dt' => 'hidden',
3712 softime 10573 'adresse_normalisee' => 'hidden',
3713     'adresse_normalisee_json' => 'hidden',
3714     'streetview' => 'hidden',
3715     'numerotation_type' => 'hidden',
3716     'numerotation_dep' => 'hidden',
3717     'numerotation_com' => 'hidden',
3718     'numerotation_division' => 'hidden',
3719     'numerotation_suffixe' => 'hidden',
3720     'numerotation_entite' => 'hidden',
3721     'numerotation_num' => 'hidden',
3722     'numerotation_num_suffixe' => 'hidden',
3723     'numerotation_num_entite' => 'hidden',
3724 softime 11585 'lien_iiue' => 'hidden',
3725 softime 14064 'dossier_parent' => 'hidden',
3726     'terrain_superficie_calculee' => 'static',
3727 softime 14542 'nature_travaux' => 'static',
3728 softime 6565 );
3729     if (isset($parameters['option_afficher_division'])
3730     && $parameters['option_afficher_division'] !== 'true') {
3731     $all_fields['division'] = 'hidden';
3732 mbroquet 3730 }
3733 softime 6565 if (isset($parameters['option_sig'])
3734     && $parameters['option_sig'] !== 'sig_interne'
3735     && $parameters['option_sig'] !== 'sig_externe'){
3736     $all_fields['geom'] = 'hidden';
3737 mbroquet 3730 }
3738    
3739 softime 10573 if ($this->f->is_option_date_depot_mairie_enabled() === true) {
3740 softime 10869 $all_fields['date_depot_mairie'] = 'hiddenstaticdate';
3741 softime 10573 } else {
3742     $all_fields['date_depot_mairie'] = 'hidden';
3743     }
3744    
3745 softime 11585 // Affichage des identifiants techniques Plat'AU
3746     if ($crud === 'read'
3747     && $this->f->is_type_dossier_platau($this->getVal('dossier_autorisation')) === true
3748 softime 14542 && ($this->f->is_option_mode_service_consulte_enabled() !== true
3749     || ($this->f->is_option_mode_service_consulte_enabled() === true
3750     && ($this->get_source_depot_from_demande() === PLATAU
3751     || $this->get_source_depot_from_demande() === PORTAL)))) {
3752 softime 11585 //
3753     $all_fields['lien_iiue'] = 'jsontotab';
3754     }
3755    
3756 softime 6565 //
3757     // Gestion du contexte
3758     //
3759 mbroquet 3730
3760 softime 6565 // AJOUTER, MODIFIER
3761     if ($crud === 'create' OR $crud === 'update') {
3762 mbroquet 3730
3763 softime 7366 $all_fields['avis_decision'] = 'selecthiddenstatic';
3764 softime 6565 $all_fields['etat'] = 'hiddenstatic';
3765     $all_fields['terrain'] = 'hiddenstatic';
3766 softime 14064 $all_fields['terrain_superficie_calculee'] = 'hiddenstatic';
3767 softime 6565 //
3768     $ads_fields['a_qualifier'] = 'checkbox';
3769     $ads_fields['accord_tacite'] = 'hiddenstatic';
3770     $ads_fields['autorite_competente'] = 'selecthiddenstatic';
3771     $ads_fields['date_achevement'] = 'hiddenstaticdate';
3772     $ads_fields['date_chantier'] = 'hiddenstaticdate';
3773     $ads_fields['date_conformite'] = 'hiddenstaticdate';
3774     $ads_fields['date_decision'] = 'hiddenstaticdate';
3775 softime 8989 $ads_fields['date_affichage'] = 'hiddenstaticdate';
3776 softime 6565 $ads_fields['date_depot'] = 'hiddenstaticdate';
3777 softime 10573 //
3778     $ce_fields['a_qualifier'] = 'checkbox';
3779     $ce_fields['accord_tacite'] = 'hiddenstatic';
3780     $ce_fields['autorite_competente'] = 'selecthiddenstatic';
3781     $ce_fields['date_achevement'] = 'hiddenstaticdate';
3782     $ce_fields['date_chantier'] = 'hiddenstaticdate';
3783     $ce_fields['date_conformite'] = 'hiddenstaticdate';
3784     $ce_fields['date_decision'] = 'hiddenstaticdate';
3785     $ce_fields['date_affichage'] = 'hiddenstaticdate';
3786     $ce_fields['date_depot'] = 'hiddenstaticdate';
3787     if ($this->f->is_option_date_depot_mairie_enabled() === true) {
3788     $ads_fields['date_depot_mairie'] = 'date';
3789     $ce_fields['date_depot_mairie'] = 'date';
3790     } else {
3791     $ads_fields['date_depot_mairie'] = 'hidden';
3792     $ce_fields['date_depot_mairie'] = 'hidden';
3793     }
3794 softime 6565 $ads_fields['date_dernier_depot'] = 'hiddenstaticdate';
3795     $ads_fields['date_notification_delai'] = 'hiddenstaticdate';
3796     $ads_fields['date_rejet'] = 'hiddenstaticdate';
3797     $ads_fields['date_validite'] = 'hiddenstaticdate';
3798     $ads_fields['delai'] = 'hiddenstatic';
3799     $ads_fields['description_projet'] = 'hiddenstatic';
3800 softime 7366 $ads_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
3801 softime 6565 $ads_fields['shon_calcul'] = 'hiddenstatic';
3802     $ads_fields['tax_mtn_part_commu'] = 'hidden';
3803     $ads_fields['tax_mtn_part_depart'] = 'hidden';
3804     $ads_fields['tax_mtn_part_reg'] = 'hidden';
3805     $ads_fields['tax_mtn_total'] = 'hidden';
3806 softime 6929 $ads_fields['tax_mtn_rap'] = 'hidden';
3807     $ads_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
3808     $ads_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
3809     $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3810     $ads_fields['tax_mtn_total_sans_exo'] = 'hidden';
3811     $ads_fields['tax_mtn_rap_sans_exo'] = 'hidden';
3812 softime 6565 $ads_fields['terrain_surface_calcul'] = 'hiddenstatic';
3813 softime 7067 //
3814 softime 10573 $ce_fields['date_dernier_depot'] = 'hiddenstaticdate';
3815     $ce_fields['date_notification_delai'] = 'hiddenstaticdate';
3816     $ce_fields['date_rejet'] = 'hiddenstaticdate';
3817     $ce_fields['date_validite'] = 'hiddenstaticdate';
3818     $ce_fields['delai'] = 'hiddenstatic';
3819     $ce_fields['description_projet'] = 'hiddenstatic';
3820     $ce_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
3821     $ce_fields['shon_calcul'] = 'hiddenstatic';
3822     $ce_fields['tax_mtn_part_commu'] = 'hidden';
3823     $ce_fields['tax_mtn_part_depart'] = 'hidden';
3824     $ce_fields['tax_mtn_part_reg'] = 'hidden';
3825     $ce_fields['tax_mtn_total'] = 'hidden';
3826     $ce_fields['tax_mtn_rap'] = 'hidden';
3827     $ce_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
3828     $ce_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
3829     $ce_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3830     $ce_fields['tax_mtn_total_sans_exo'] = 'hidden';
3831     $ce_fields['tax_mtn_rap_sans_exo'] = 'hidden';
3832     $ce_fields['terrain_surface_calcul'] = 'hiddenstatic';
3833     //
3834 softime 7067 $dpc_fields['a_qualifier'] = 'checkbox';
3835     $dpc_fields['accord_tacite'] = 'hiddenstatic';
3836     $dpc_fields['autorite_competente'] = 'selecthiddenstatic';
3837     $dpc_fields['date_achevement'] = 'hiddenstaticdate';
3838     $dpc_fields['date_chantier'] = 'hiddenstaticdate';
3839     $dpc_fields['date_conformite'] = 'hiddenstaticdate';
3840     $dpc_fields['date_decision'] = 'hiddenstaticdate';
3841     $dpc_fields['date_depot'] = 'hiddenstaticdate';
3842 softime 10573 $dpc_fields['date_depot_mairie'] = 'hiddenstaticdate';
3843 softime 7067 $dpc_fields['date_dernier_depot'] = 'hiddenstaticdate';
3844     $dpc_fields['date_notification_delai'] = 'hiddenstaticdate';
3845     $dpc_fields['date_rejet'] = 'hiddenstaticdate';
3846     $dpc_fields['date_validite'] = 'hiddenstaticdate';
3847     $dpc_fields['delai'] = 'hiddenstatic';
3848     $dpc_fields['description_projet'] = 'hiddenstatic';
3849 softime 7366 $dpc_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
3850 softime 7067 $dpc_fields['shon_calcul'] = 'hiddenstatic';
3851     $dpc_fields['tax_mtn_part_commu'] = 'hidden';
3852     $dpc_fields['tax_mtn_part_depart'] = 'hidden';
3853     $dpc_fields['tax_mtn_part_reg'] = 'hidden';
3854     $dpc_fields['tax_mtn_total'] = 'hidden';
3855     $dpc_fields['tax_mtn_rap'] = 'hidden';
3856     $dpc_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
3857     $dpc_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
3858     $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3859     $dpc_fields['tax_mtn_total_sans_exo'] = 'hidden';
3860     $dpc_fields['tax_mtn_rap_sans_exo'] = 'hidden';
3861     $dpc_fields['terrain_surface_calcul'] = 'hiddenstatic';
3862 softime 7366 //
3863     $re_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
3864 softime 10573 $re_fields['dossier_petitionnaires'] = 'static';
3865 softime 7366 $re_fields['requerants'] = 'hiddenstatic';
3866     $inf_fields['contrevenants'] = 'hiddenstatic';
3867     $inf_fields['dt_ctx_synthese_anr'] = 'hiddenstatic';
3868     $inf_fields['dt_ctx_synthese_nti'] = 'hiddenstatic';
3869 softime 10573 //
3870 softime 10808 // Vérifie que le dossier a été déposé depuis Plat'AU ou le portail citoyen
3871 softime 13137 if ($this->get_source_depot_from_demande() === PLATAU
3872     || $this->get_source_depot_from_demande() === PORTAL) {
3873 softime 10808 //
3874 softime 10573 $ce_fields["consultation_entrante"] = 'hidden';
3875     $ce_fields["delai_reponse"] = 'static';
3876     $ce_fields["type_delai"] = 'static';
3877     $ce_fields["objet_consultation"] = 'static';
3878     $ce_fields["date_production_notification"] = 'datestatic';
3879     $ce_fields["date_premiere_consultation"] = 'datestatic';
3880     $ce_fields["date_consultation"] = 'datestatic';
3881     $ce_fields["date_emission"] = 'datestatic';
3882     $ce_fields["service_consultant_id"] = 'static';
3883     $ce_fields["service_consultant_libelle"] = 'static';
3884     $ce_fields["service_consultant_insee"] = 'static';
3885     $ce_fields["service_consultant_mail"] = 'static';
3886     $ce_fields["service_consultant_type"] = 'static';
3887     $ce_fields["service_consultant__siren"] = 'static';
3888     $ce_fields["etat_consultation"] = 'static';
3889     $ce_fields["type_consultation"] = 'static';
3890     $ce_fields["texte_fondement_reglementaire"] = 'static';
3891     $ce_fields["texte_objet_consultation"] = 'static';
3892     $ce_fields["dossier_consultation"] = 'hidden';
3893     }
3894 softime 6565 // Si l'état du dossier est incomplet
3895     if ($this->is_incomplet_notifie()) {
3896     // On cache les dates de complétude et de limite d'instruction
3897     $ads_fields['date_complet'] = 'hidden';
3898     $ads_fields['date_limite'] = 'hidden';
3899     $ads_fields['evenement_suivant_tacite_incompletude'] ='selecthiddenstatic';
3900     $ads_fields['evenement_suivant_tacite'] ='hidden';
3901     $ads_fields['date_limite_incompletude'] = 'hiddenstaticdate';
3902 softime 7067 //
3903     $dpc_fields['date_complet'] = 'hidden';
3904     $dpc_fields['date_limite'] = 'hidden';
3905     $dpc_fields['evenement_suivant_tacite_incompletude'] ='selecthiddenstatic';
3906     $dpc_fields['evenement_suivant_tacite'] ='hidden';
3907     $dpc_fields['date_limite_incompletude'] = 'hiddenstaticdate';
3908 softime 10573 //
3909     $ce_fields['date_complet'] = 'hidden';
3910     $ce_fields['date_limite'] = 'hidden';
3911     $ce_fields['evenement_suivant_tacite_incompletude'] ='selecthiddenstatic';
3912     $ce_fields['evenement_suivant_tacite'] ='hidden';
3913     $ce_fields['date_limite_incompletude'] = 'hiddenstaticdate';
3914 softime 6565 } else {
3915     // Sinon on cache la date de limite d'incomplétude
3916     $ads_fields['date_limite_incompletude'] = 'hidden';
3917     $ads_fields['evenement_suivant_tacite_incompletude'] ='hidden';
3918     $ads_fields['evenement_suivant_tacite'] ='selecthiddenstatic';
3919     $ads_fields['date_complet'] = 'hiddenstaticdate';
3920     $ads_fields['date_limite'] = 'hiddenstaticdate';
3921 softime 7067 //
3922     $dpc_fields['date_limite_incompletude'] = 'hidden';
3923     $dpc_fields['evenement_suivant_tacite_incompletude'] ='hidden';
3924     $dpc_fields['evenement_suivant_tacite'] ='selecthiddenstatic';
3925     $dpc_fields['date_complet'] = 'hiddenstaticdate';
3926     $dpc_fields['date_limite'] = 'hiddenstaticdate';
3927 softime 10573 //
3928     $ce_fields['date_limite_incompletude'] = 'hidden';
3929     $ce_fields['evenement_suivant_tacite_incompletude'] ='hidden';
3930     $ce_fields['evenement_suivant_tacite'] ='selecthiddenstatic';
3931     $ce_fields['date_complet'] = 'hiddenstaticdate';
3932     $ce_fields['date_limite'] = 'hiddenstaticdate';
3933 softime 6565 }
3934    
3935     // MODIFIER
3936     if ($crud ==='update') {
3937     $all_fields['dossier_libelle'] = 'hiddenstatic';
3938 softime 10573 $ads_fields['dossier_petitionnaire'] = 'static';
3939     $dpc_fields['dossier_petitionnaire'] = 'static';
3940     $ce_fields['dossier_petitionnaire'] = 'static';
3941 softime 13528 $inf_fields['numero_versement_archive'] = 'text';
3942 softime 14542 $all_fields['nature_travaux'] = 'select_multiple';
3943 softime 6565 //
3944     if ($this->f->isAccredited("dossier_modifier_instructeur")) {
3945     $all_fields['instructeur'] = 'select';
3946     $inf_fields['instructeur_2'] = 'select';
3947 softime 13137 $ads_fields['instructeur_2'] = 'select';
3948     $dpc_fields['instructeur_2'] = 'select';
3949 softime 13528 $ce_fields['instructeur_2'] = 'select';
3950 softime 6565 } else {
3951     $all_fields['instructeur'] = 'selecthiddenstatic';
3952     $inf_fields['instructeur_2'] = 'selecthiddenstatic';
3953 softime 13137 $ads_fields['instructeur_2'] = 'selecthiddenstatic';
3954     $dpc_fields['instructeur_2'] = 'selecthiddenstatic';
3955 softime 13528 $ce_fields['instructeur_2'] = 'selecthiddenstatic';
3956 softime 6565 }
3957     //
3958     if (isset($parameters['option_afficher_division'])
3959     && $parameters['option_afficher_division'] === 'true') {
3960     $all_fields['division'] = 'selecthiddenstatic';
3961     if ($this->f->isAccredited("dossier_modifier_division")) {
3962     $all_fields['division'] = 'select';
3963     }
3964     }
3965     // Si l'utilisateur ne peut pas qualifier un DI (guichet unique & guichet et suivi)
3966     if (!$this->f->isAccredited(array("dossier_instruction","dossier_instruction_qualifier"), "OR")) {
3967     // Il ne peut pas modifier les champs suivants
3968     $ads_fields['numero_versement_archive'] = 'hiddenstatic';
3969     $ads_fields['enjeu_urba'] = 'checkboxhiddenstatic';
3970     $ads_fields['enjeu_erp'] = 'checkboxhiddenstatic';
3971     $ads_fields['erp'] = 'checkboxhiddenstatic';
3972     $ads_fields['a_qualifier'] = 'checkboxhiddenstatic';
3973 softime 7067 //
3974     $dpc_fields['numero_versement_archive'] = 'hiddenstatic';
3975     $dpc_fields['enjeu_urba'] = 'checkboxhiddenstatic';
3976     $dpc_fields['enjeu_erp'] = 'checkboxhiddenstatic';
3977     $dpc_fields['erp'] = 'checkboxhiddenstatic';
3978     $dpc_fields['a_qualifier'] = 'checkboxhiddenstatic';
3979 softime 10573 //
3980     $ce_fields['numero_versement_archive'] = 'hiddenstatic';
3981     $ce_fields['enjeu_urba'] = 'checkboxhiddenstatic';
3982     $ce_fields['enjeu_erp'] = 'checkboxhiddenstatic';
3983     $ce_fields['erp'] = 'checkboxhiddenstatic';
3984     $ce_fields['a_qualifier'] = 'checkboxhiddenstatic';
3985 softime 6565 }
3986     // Le profil Qualificateur peut modifier seulement les champs
3987     // autorite_competente, a_qualifier et erp
3988     if ($this->f->isUserQualificateur()) {
3989     $ads_fields['numero_versement_archive'] = 'static';
3990     $ads_fields['enjeu_urba'] = 'checkboxstatic';
3991     $ads_fields['enjeu_erp'] = 'checkboxstatic';
3992 softime 7067 //
3993     $dpc_fields['numero_versement_archive'] = 'static';
3994     $dpc_fields['enjeu_urba'] = 'checkboxstatic';
3995     $dpc_fields['enjeu_erp'] = 'checkboxstatic';
3996 softime 10573 //
3997     $ce_fields['numero_versement_archive'] = 'static';
3998     $ce_fields['enjeu_urba'] = 'checkboxstatic';
3999     $ce_fields['enjeu_erp'] = 'checkboxstatic';
4000 softime 6565 }
4001 softime 7366 // Le dossier ne doit pas être instruit
4002     if ($this->has_only_recepisse() === true
4003     && $this->getStatut() !== 'cloture') {
4004     //
4005     $all_fields['date_depot'] = 'date';
4006 softime 10573 if ($this->f->is_option_date_depot_mairie_enabled() === true) {
4007     $all_fields['date_depot_mairie'] = 'date';
4008     } else {
4009     $all_fields['date_depot_mairie'] = 'hidden';
4010     }
4011 softime 7366 }
4012 softime 8593 // Gestion de la case à cocher ERP en cas d'interfaçage avec le
4013     // référentiel ERP
4014     if ($this->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true) {
4015     // Par défaut la case à cocher ERP est non modifiable
4016     $all_fields['erp'] = 'checkboxhiddenstatic';
4017     // Si le type du dossier d'instruction en cours est présent
4018     // dans les paramètres autorisant l'interfaçage avec le référentiel ERP
4019     if (isset($parameters['erp__dossier__nature__at']) === true
4020     && $this->f->getDATCode($this->getVal($this->clePrimaire)) == $parameters['erp__dossier__nature__at']) {
4021     //
4022     $all_fields['erp'] = 'checkbox';
4023     }
4024     if (isset($parameters['erp__dossier__nature__pc']) === true
4025     && $this->f->getDATCode($this->getVal($this->clePrimaire)) == $parameters['erp__dossier__nature__pc']
4026     && isset($parameters['erp__dossier__type_di__pc']) === true) {
4027     //
4028     $erp_di_pc = explode(";", $parameters['erp__dossier__type_di__pc']);
4029     if (is_array($erp_di_pc) === true
4030     && in_array($this->getVal("dossier_instruction_type"), $erp_di_pc) === true) {
4031     //
4032     $all_fields['erp'] = 'checkbox';
4033     }
4034     }
4035     }
4036 softime 8989 // modification de la date d'affichage pour les ADS
4037     if ($this->f->isAccredited($this->get_absolute_class_name()."_modifier_date_affichage")) {
4038     $ads_fields['date_affichage'] = 'date';
4039 softime 10573 $ce_fields['date_affichage'] = 'date';
4040 softime 8989 }
4041 softime 10573
4042     // pas de modificiation de la commune associée au dossier (si l'option est activée)
4043     if ($this->f->is_option_dossier_commune_enabled($this->getVal('om_collectivite'))) {
4044     $ads_fields['commune'] = 'selecthiddenstatic';
4045     $ce_fields['commune'] = 'selecthiddenstatic';
4046     }
4047 softime 6565 }
4048     }
4049     // MODIFIER, SUPPRIMER, CONSULTER
4050     if ($crud !== 'create') {
4051     $re_fields['autorisation_contestee'] = 'selecthiddenstatic';
4052     $all_fields['date_demande'] = 'hidden';
4053     // La collectivité n'est jamais modifiable
4054     if ($_SESSION['niveau'] == 2) {
4055     $all_fields['om_collectivite'] = 'selecthiddenstatic';
4056     }
4057 softime 6929 // Instance du paramétrage des taxes
4058 mbroquet 3730 $inst_taxe_amenagement = $this->get_inst_taxe_amenagement();
4059     // Instance de cerfa
4060     $inst_cerfa = $this->get_inst_cerfa();
4061 softime 10573
4062     // Gestion du secteur pour la taxe d'aménagement
4063     // MODIFIER
4064     if ($crud === 'update') {
4065     //
4066     if ($this->is_in_context_of_foreign_key("tax_secteur", $this->getParameter("retourformulaire"))) {
4067     $ads_fields['tax_secteur'] = 'selecthiddenstatic';
4068     $dpc_fields['tax_secteur'] = 'selecthiddenstatic';
4069     $ce_fields['tax_secteur'] = 'selecthiddenstatic';
4070     } else {
4071     $ads_fields['tax_secteur'] = 'select';
4072     $dpc_fields['tax_secteur'] = 'select';
4073     $ce_fields['tax_secteur'] = 'select';
4074     }
4075     }
4076     // SUPPRIMER
4077     if ($crud === 'delete') {
4078     //
4079     $ads_fields['tax_secteur'] = 'selectstatic';
4080     $dpc_fields['tax_secteur'] = 'selectstatic';
4081     $ce_fields['tax_secteur'] = 'selectstatic';
4082     }
4083     // CONSULTER
4084     if ($crud === 'read') {
4085     //
4086     $ads_fields['tax_secteur'] = 'selectstatic';
4087     $dpc_fields['tax_secteur'] = 'selectstatic';
4088     $ce_fields['tax_secteur'] = 'selectstatic';
4089 softime 13528 $inf_fields['numero_versement_archive'] = 'hiddenstatic';
4090 softime 10573 }
4091    
4092 softime 6929 // Si l'option de simulation est activée pour la collectivité du
4093     // dossier, l'utilisateur connecté a la permissions de voir
4094     // la simulation des taxes, la collectivité à un paramétrage pour
4095     // les taxes et que le cerfa du dossier à les champs requis
4096     if ($this->f->is_option_simulation_taxes_enabled($this->getVal('om_collectivite')) === true
4097     && $this->f->isAccredited("dossier_instruction_simulation_taxes") === true
4098     && $inst_taxe_amenagement !== null
4099     && $inst_cerfa->can_simulate_taxe_amenagement() === true) {
4100 mbroquet 3730
4101 softime 6565 // Si ce n'est pas une commune d'Île-de-France
4102 mbroquet 3730 if ($inst_taxe_amenagement->getVal('en_ile_de_france') == 'f') {
4103     //
4104 softime 6565 $ads_fields['tax_mtn_part_reg'] = 'hidden';
4105 softime 6929 $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
4106 softime 7067 $dpc_fields['tax_mtn_part_reg'] = 'hidden';
4107     $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
4108 softime 10573 $ce_fields['tax_mtn_part_reg'] = 'hidden';
4109     $ce_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
4110 mbroquet 3730 }
4111     } else {
4112 softime 6565 // SUPPRIMER, CONSULTER
4113     if ($crud === 'delete' OR $crud ==='read') {
4114     $ads_fields['tax_mtn_part_commu'] = 'hidden';
4115     $ads_fields['tax_mtn_part_depart'] = 'hidden';
4116     $ads_fields['tax_mtn_part_reg'] = 'hidden';
4117     $ads_fields['tax_mtn_total'] = 'hidden';
4118 softime 6929 $ads_fields['tax_mtn_rap'] = 'hidden';
4119     $ads_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
4120     $ads_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
4121     $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
4122     $ads_fields['tax_mtn_total_sans_exo'] = 'hidden';
4123     $ads_fields['tax_mtn_rap_sans_exo'] = 'hidden';
4124 softime 7067 //
4125     $dpc_fields['tax_mtn_part_commu'] = 'hidden';
4126     $dpc_fields['tax_mtn_part_depart'] = 'hidden';
4127     $dpc_fields['tax_mtn_part_reg'] = 'hidden';
4128     $dpc_fields['tax_mtn_total'] = 'hidden';
4129     $dpc_fields['tax_mtn_rap'] = 'hidden';
4130     $dpc_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
4131     $dpc_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
4132     $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
4133     $dpc_fields['tax_mtn_total_sans_exo'] = 'hidden';
4134     $dpc_fields['tax_mtn_rap_sans_exo'] = 'hidden';
4135 softime 10573 //
4136     $ce_fields['tax_mtn_part_commu'] = 'hidden';
4137     $ce_fields['tax_mtn_part_depart'] = 'hidden';
4138     $ce_fields['tax_mtn_part_reg'] = 'hidden';
4139     $ce_fields['tax_mtn_total'] = 'hidden';
4140     $ce_fields['tax_mtn_rap'] = 'hidden';
4141     $ce_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
4142     $ce_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
4143     $ce_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
4144     $ce_fields['tax_mtn_total_sans_exo'] = 'hidden';
4145     $ce_fields['tax_mtn_rap_sans_exo'] = 'hidden';
4146 mbroquet 3730 }
4147     }
4148     }
4149 softime 8477 // CONSULTER
4150     if ($crud ==='read') {
4151 mbroquet 3730
4152 softime 6565 $ads_fields['geom'] = 'static';
4153     $ads_fields['a_qualifier'] = 'checkboxstatic';
4154     $ads_fields['terrain_references_cadastrales'] = 'referencescadastralesstatic';
4155 softime 7067 //
4156     $dpc_fields['geom'] = 'static';
4157     $dpc_fields['a_qualifier'] = 'checkboxstatic';
4158     $dpc_fields['terrain_references_cadastrales'] = 'referencescadastralesstatic';
4159 softime 10573 //
4160     $ce_fields['geom'] = 'static';
4161     $ce_fields['a_qualifier'] = 'checkboxstatic';
4162     $ce_fields['terrain_references_cadastrales'] = 'referencescadastralesstatic';
4163 softime 14542
4164     $all_fields['nature_travaux'] = 'select_multiple_static';
4165    
4166 softime 10573 // Affiche le champ streetview si l'option est active
4167     if ($this->f->is_option_streetview_enabled($this->getVal("om_collectivite")) === true) {
4168     $all_fields['streetview'] = 'static';
4169     }
4170    
4171 softime 6565 // Si l'état du dossier est incomplet
4172     if ($this->is_incomplet_notifie()) {
4173     // on cache les dates de complétude et de limite d'instruction
4174     $ads_fields['date_complet'] = 'hidden';
4175     $ads_fields['date_limite'] = 'hidden';
4176     $ads_fields['evenement_suivant_tacite_incompletude'] = 'selecthiddenstatic';
4177     $ads_fields['evenement_suivant_tacite'] = 'hidden';
4178 softime 7067 //
4179     $dpc_fields['date_complet'] = 'hidden';
4180     $dpc_fields['date_limite'] = 'hidden';
4181     $dpc_fields['evenement_suivant_tacite_incompletude'] = 'selecthiddenstatic';
4182     $dpc_fields['evenement_suivant_tacite'] = 'hidden';
4183 softime 10573 //
4184     $ce_fields['date_complet'] = 'hidden';
4185     $ce_fields['date_limite'] = 'hidden';
4186     $ce_fields['evenement_suivant_tacite_incompletude'] = 'selecthiddenstatic';
4187     $ce_fields['evenement_suivant_tacite'] = 'hidden';
4188 softime 6565 } else {
4189     // sinon on cache la date de limite d'incomplétude
4190     $ads_fields['date_limite_incompletude'] = 'hidden';
4191     $ads_fields['evenement_suivant_tacite_incompletude'] = 'hidden';
4192     $ads_fields['evenement_suivant_tacite'] = 'selecthiddenstatic';
4193 softime 7067 //
4194     $dpc_fields['date_limite_incompletude'] = 'hidden';
4195     $dpc_fields['evenement_suivant_tacite_incompletude'] = 'hidden';
4196     $dpc_fields['evenement_suivant_tacite'] = 'selecthiddenstatic';
4197 softime 10573 //
4198     $ce_fields['date_limite_incompletude'] = 'hidden';
4199     $ce_fields['evenement_suivant_tacite_incompletude'] = 'hidden';
4200     $ce_fields['evenement_suivant_tacite'] = 'selecthiddenstatic';
4201 softime 6565 }
4202     if (isset($parameters['option_arrondissement'])
4203     && $parameters['option_arrondissement'] === 'true') {
4204     $all_fields['dossier_arrondissement'] = 'static';
4205     }
4206 softime 10573 //
4207 softime 10808 // Vérifie que le dossier a été déposé depuis Plat'AU ou le portail citoyen
4208 softime 13137 if ($this->get_source_depot_from_demande() === PLATAU
4209     || $this->get_source_depot_from_demande() === PORTAL) {
4210 softime 10808 //
4211 softime 10573 $ce_fields["consultation_entrante"] = 'hidden';
4212     $ce_fields["delai_reponse"] = 'static';
4213     $ce_fields["type_delai"] = 'static';
4214     $ce_fields["objet_consultation"] = 'static';
4215     $ce_fields["date_production_notification"] = 'datestatic';
4216     $ce_fields["date_premiere_consultation"] = 'datestatic';
4217     $ce_fields["date_consultation"] = 'datestatic';
4218     $ce_fields["date_emission"] = 'datestatic';
4219     $ce_fields["service_consultant_id"] = 'static';
4220     $ce_fields["service_consultant_libelle"] = 'static';
4221     $ce_fields["service_consultant_insee"] = 'static';
4222     $ce_fields["service_consultant_mail"] = 'static';
4223     $ce_fields["service_consultant_type"] = 'static';
4224     $ce_fields["service_consultant__siren"] = 'static';
4225     $ce_fields["etat_consultation"] = 'static';
4226     $ce_fields["type_consultation"] = 'static';
4227     $ce_fields["texte_fondement_reglementaire"] = 'static';
4228     $ce_fields["texte_objet_consultation"] = 'static';
4229     $ce_fields["dossier_consultation"] = 'hidden';
4230     }
4231 softime 6565 }
4232 softime 8477 // SUPPRIMER
4233     if($crud === 'delete') {
4234     // Cache tous les champs execepté le libellé du dossier
4235     foreach ($this->champs as $champ) {
4236     $all_fields[$champ] = 'hidden';
4237     }
4238     $all_fields['dossier_libelle'] = 'hiddenstatic';
4239     }
4240 softime 6565
4241 softime 10573 $all_fields['etat_transmission_platau'] = 'hidden';
4242 softime 10968 if ($crud !== 'create') {
4243     //
4244     $inst_datd = $this->get_inst_dossier_autorisation_type_detaille();
4245     if ($inst_datd->getVal('dossier_platau') === 't') {
4246     //
4247     $all_fields['etat_transmission_platau'] = 'selecthiddenstatic';
4248     }
4249     }
4250    
4251    
4252 softime 10573 if ($crud == 'create' || $crud == 'update') {
4253     $required_fields_platau = $this->list_platau_required_fields_dossier;
4254     if ($this->f->is_option_mode_service_consulte_enabled() === false) {
4255 softime 10808 if ($this->f->is_type_dossier_platau($this->getVal('dossier_autorisation')) === true
4256     && $this->getVal('etat_transmission_platau') !== 'jamais_transmissible') {
4257     //
4258 softime 10573 foreach ($required_fields_platau as $required_field_platau) {
4259     $champ = explode('.', $required_field_platau)[1];
4260     if (in_array($champ, $this->champs)) {
4261     $form->setType($champ ,$form->type[$champ].'_demat_color');
4262     }
4263     }
4264     }
4265     }
4266     }
4267    
4268 softime 12847 // Dans tous les cas si le champ accord_tacite est à non on veut insérer
4269     // du texte dans le champ "au terme du délai" et donc ce n'est plus un
4270     // selecthiddenstatic
4271 softime 13528 if ($this->getVal('accord_tacite') === 'Non' || trim($this->getVal('accord_tacite')) === '') {
4272 softime 12847 if ($this->is_incomplet_notifie() === false) {
4273     $all_fields['evenement_suivant_tacite'] = 'hiddenstatic';
4274     $ads_fields['evenement_suivant_tacite'] = 'hiddenstatic';
4275     $ce_fields['evenement_suivant_tacite'] = 'hiddenstatic';
4276     $dpc_fields['evenement_suivant_tacite'] = 'hiddenstatic';
4277     } else {
4278     $all_fields['evenement_suivant_tacite_incompletude'] = 'hiddenstatic';
4279     $ads_fields['evenement_suivant_tacite_incompletude'] = 'hiddenstatic';
4280     $dpc_fields['evenement_suivant_tacite_incompletude'] = 'hiddenstatic';
4281     $ce_fields['evenement_suivant_tacite_incompletude'] = 'hiddenstatic';
4282     }
4283     }
4284    
4285     // Lorsque le statut de dossier est "cloture" on cache le champ "au terme du délai"
4286     if ($this->getStatut() === 'cloture') {
4287     $all_fields['evenement_suivant_tacite'] = 'hidden';
4288     $ads_fields['evenement_suivant_tacite'] = 'hidden';
4289     $dpc_fields['evenement_suivant_tacite'] = 'hidden';
4290     $ce_fields['evenement_suivant_tacite'] = 'hidden';
4291     }
4292    
4293 softime 6565 //
4294     // Typage
4295     //
4296    
4297     switch ($groupe) {
4298     case 'CTX IN':
4299     $this->manage_type($form, $inf_fields);
4300     break;
4301     case 'CTX RE':
4302     $this->manage_type($form, $re_fields);
4303     break;
4304     case 'ADS':
4305     $this->manage_type($form, $ads_fields);
4306     break;
4307 softime 7067 case 'DPC':
4308     $this->manage_type($form, $dpc_fields);
4309     break;
4310 softime 10573 case 'CONSULTATION ENTRANTE':
4311     $this->manage_type($form, $ce_fields);
4312     break;
4313 softime 6565 }
4314     $this->manage_type($form, $all_fields);
4315 mbroquet 3730 }
4316    
4317 softime 6929
4318 softime 6565 /**
4319     * Gestion du typage des champs
4320     *
4321     * @param object $form formulaire instancié
4322     * @param array $fields tableau associatif des champs avec leur widget de formulaire en valeur
4323     * @return void
4324     */
4325     protected function manage_type($form, $fields) {
4326     foreach ($this->champs as $key => $field) {
4327     if (array_key_exists($field, $fields) === true) {
4328     $form->setType($field, $fields[$field]);
4329     }
4330     }
4331     }
4332    
4333    
4334     /**
4335 softime 7067 * Retourne le nombre de parcelles qu'à en commun le dossier passé en
4336     * paramètre avec les dossiers contentieux en cours. Le nombre de parcelles
4337     * est groupé par type de dossier d'autorisation : RE ou IN.
4338 softime 6565 *
4339 softime 7067 * @param string $di identifiant du DI
4340 softime 6565 * @return array
4341     */
4342 softime 7067 function get_nb_parcelles_dossier_ciblees_par_contentieux($di) {
4343 softime 14542 $qres = $this->f->get_all_results_from_db_query(
4344     sprintf(
4345     'SELECT
4346     dossier_autorisation_type.code,
4347     COUNT(*) as nb
4348     FROM %1$sdossier
4349     LEFT JOIN %1$sdossier_parcelle
4350     ON dossier.dossier = dossier_parcelle.dossier
4351     LEFT JOIN %1$sdossier_parcelle as parcelle_ctx
4352     ON dossier_parcelle.libelle = parcelle_ctx.libelle
4353     AND dossier_parcelle.dossier != parcelle_ctx.dossier
4354     LEFT JOIN %1$sdossier as dossier_ctx
4355     ON dossier_ctx.dossier = parcelle_ctx.dossier
4356     INNER JOIN %1$setat
4357     ON dossier_ctx.etat = etat.etat
4358     AND etat.statut != \'cloture\'
4359     LEFT JOIN %1$sdossier_autorisation
4360     ON dossier_ctx.dossier_autorisation = dossier_autorisation.dossier_autorisation
4361     LEFT JOIN %1$sdossier_autorisation_type_detaille
4362     ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
4363     = dossier_autorisation.dossier_autorisation_type_detaille
4364     LEFT JOIN %1$sdossier_autorisation_type
4365     ON dossier_autorisation_type_detaille.dossier_autorisation_type
4366     = dossier_autorisation_type.dossier_autorisation_type
4367     WHERE
4368     dossier.dossier = \'%2$s\'
4369     AND (dossier_autorisation_type.code = \'RE\'
4370     OR dossier_autorisation_type.code = \'IN\')
4371     GROUP BY
4372     dossier_autorisation_type.code',
4373     DB_PREFIXE,
4374     $this->f->db->escapeSimple($di)
4375     ),
4376     array(
4377     'origin' => __METHOD__
4378     )
4379     );
4380 softime 6565
4381     $nb_re_inf = array('re' => 0, 'inf' => 0);
4382    
4383 softime 14542 foreach ($qres['result'] as $row) {
4384 softime 6565 if ($row["code"] == "RE"){
4385     $nb_re_inf['re'] += $row["nb"];
4386     }
4387     if ($row["code"] == "IN"){
4388     $nb_re_inf['inf'] += $row["nb"];
4389     }
4390     }
4391    
4392     return $nb_re_inf;
4393     }
4394    
4395 softime 8989 /**
4396     * SETTER_FORM - setVal (setVal).
4397     *
4398     * @return void
4399     */
4400     function setVal(&$form, $maj, $validation, &$dnu1 = null, $dnu2 = null) {
4401     // parent::setVal($form, $maj, $validation);
4402     //
4403 mbroquet 3730 $this->maj=$maj;
4404 softime 10573
4405     if ($this->f->is_option_sig_enabled($this->getVal("om_collectivite")) === true
4406 softime 8989 && $this->f->issetSIGParameter($this->getVal("dossier")) === true) {
4407 softime 10573
4408     // lien vers le SIG
4409     $geoLinksHtml = $this->getGeolocalisationLink();
4410     $form->setVal("geom", $geoLinksHtml);
4411 mbroquet 3730 }
4412 softime 10573 // si l'option 'streetview' est activée ajoute un lien vers Google Maps Street View
4413 softime 10713 if ($this->f->is_option_streetview_enabled($this->getVal("om_collectivite")) === true
4414 softime 10808 && $maj == 3) {
4415     //
4416 softime 10573 $gStreetViewLinkHtml = $this->getGoogleMapsStreetViewLink();
4417     $form->setVal("streetview", $gStreetViewLinkHtml);
4418     }
4419 softime 8989 //
4420 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
4421 softime 10573 if ($affichage_form === "ADS" || $affichage_form === "CONSULTATION ENTRANTE") {
4422 softime 8989 // Dans le cas d'un dépôt électronique un pictogramme apparait devant le demandeur
4423     if ($maj == 1 || $maj == 2 || $maj == 3) {
4424     if ($this->getVal("depot_electronique") === "t"
4425     || $this->getVal("depot_electronique") === true
4426     || $this->getVal("depot_electronique") === 1) {
4427 softime 8329 //
4428 softime 8989 $form->setVal(
4429     "dossier_petitionnaire",
4430     sprintf(
4431     '<span class="om-icon om-icon-16 om-icon-fix depot-electronique-16" title="%s"> </span>%s',
4432     "Dépôt électronique",
4433     $this->getVal("dossier_petitionnaire")
4434     )
4435     );
4436 softime 8329 }
4437     }
4438 softime 6565 if ($maj == 3) {
4439 softime 8989 $nb_re_inf = $this->get_nb_parcelles_dossier_ciblees_par_contentieux($this->getVal("dossier"));
4440 softime 6565 $message = "";
4441 softime 8989 if ($nb_re_inf["re"] > 0) {
4442 softime 6565 $message .= "<span class=\"label label-warning\" ";
4443 nmeucci 7085 $message .= "title=\""._("Au moins un dossier de recours contentieux ou gracieux en cours concerne les références cadastrales du dossier courant.")."\">";
4444 softime 6565 $message .= _("RE");
4445     $message .= "</span>";
4446 softime 8989 if ($nb_re_inf["inf"] > 0) {
4447 softime 6565 $message .= " ";
4448     }
4449     }
4450 softime 8989 if ($nb_re_inf["inf"] > 0) {
4451 softime 6565 $message .= "<span class=\"label label-important\" ";
4452 nmeucci 7085 $message .= "title=\""._("Au moins un dossier d'infraction en cours concerne les références cadastrales du dossier courant.")."\">";
4453 softime 6565 $message .= _("IN");
4454     $message .= "</span>";
4455     }
4456 softime 8989 $form->setVal("enjeu_ctx", $message);
4457 softime 6565 }
4458 softime 8989 } elseif ($affichage_form === "CTX RE") {
4459 softime 6565 // Récupération des demandeurs liés au dossier
4460 softime 8989 $this->listeDemandeur("dossier", $this->getVal("dossier"));
4461 softime 6565 //
4462 softime 8989 $requerants = "";
4463     if ($this->getVal("requerants") != "") {
4464     $requerants = $this->getVal("requerants");
4465     if (isset($this->valIdDemandeur["requerant"]) === true
4466     && count($this->valIdDemandeur["requerant"]) > 0) {
4467     //
4468     $requerants .= " "._("et autres");
4469 softime 6565 }
4470     }
4471 softime 8989 $form->setVal("requerants", $requerants);
4472 softime 6565 //
4473 softime 8989 $dossier_petitionnaires = "";
4474     if ($this->getVal("dossier_petitionnaire") != "") {
4475     $dossier_petitionnaires = $this->getVal("dossier_petitionnaire");
4476 softime 6565 }
4477 softime 8989 if (isset($this->valIdDemandeur["petitionnaire"]) === true
4478     && count($this->valIdDemandeur["petitionnaire"]) > 0) {
4479     //
4480     $dossier_petitionnaires .= " "._("et autres");
4481 softime 6565 }
4482 softime 8989 $form->setVal("dossier_petitionnaires", $dossier_petitionnaires);
4483     } elseif ($affichage_form === "CTX IN") {
4484 softime 6565 // Récupération des demandeurs liés au dossier
4485 softime 8989 $this->listeDemandeur("dossier", $this->getVal("dossier"));
4486 softime 6565 //
4487 softime 8989 $contrevenants = "";
4488     if ($this->getVal("contrevenants") != "") {
4489     $contrevenants = $this->getVal("contrevenants");
4490     if (isset($this->valIdDemandeur["contrevenant"]) === true
4491     && count($this->valIdDemandeur["contrevenant"]) > 0) {
4492     //
4493     $contrevenants .= " "._("et autres");
4494 softime 6565 }
4495     }
4496 softime 8989 $form->setVal("contrevenants", $contrevenants);
4497     } elseif ($affichage_form === "DPC") {
4498 softime 7067 // Récupération des demandeurs liés au dossier
4499 softime 8989 $this->listeDemandeur("dossier", $this->getVal("dossier"));
4500 softime 7067 //
4501 softime 8989 $bailleurs = "";
4502     if ($this->getVal("bailleurs") != "") {
4503     $bailleurs = $this->getVal("bailleurs");
4504     if (isset($this->valIdDemandeur["bailleur"]) === true
4505     && count($this->valIdDemandeur["bailleur"]) > 0) {
4506     //
4507     $bailleurs .= " "._("et autres");
4508 softime 7067 }
4509     }
4510 softime 8989 $form->setVal("bailleurs", $bailleurs);
4511 softime 7067 }
4512 softime 8989 //
4513 softime 6565 if ($validation == 0) {
4514 softime 8989 if ($maj == 0) {
4515     $form->setVal("annee", date("y"));
4516     $form->setVal("date_demande", date("Y-m-d"));
4517     $form->setVal("date_depot", date("Y-m-d"));
4518     $form->setVal("accord_tacite", "Non");
4519     $form->setVal("etat", "initialiser");
4520 mbroquet 3730 }
4521     }
4522 softime 11585 //
4523     if ($maj == 3) {
4524     $form->setVal("lien_iiue", $this->get_json_lien_iiue());
4525     }
4526 softime 12847
4527     // 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"
4528     if ($this->is_incomplet_notifie() === false) {
4529 softime 13528 if ($this->getVal('accord_tacite') === 'Non' || trim($this->getVal('accord_tacite')) === '') {
4530 softime 12847 $form->setVal('evenement_suivant_tacite', __('N/A'));
4531     }
4532     } else {
4533     // Si le champ accord_tacite est à false alors on met "N/A" dans le champ evenement_suivant_tacite_incompletude
4534 softime 13528 if ($this->getVal('accord_tacite') === 'Non' || trim($this->getVal('accord_tacite')) === '') {
4535 softime 12847 $form->setVal('evenement_suivant_tacite_incompletude', __('N/A'));
4536     }
4537     }
4538 mbroquet 3730 }
4539    
4540     /**
4541     * getGeolocalisationLink retourne le code HTML affichant l'icone du globe, ainsi que
4542     * les coordonnées du centroide du dossier, le tout étant un lien vers le SIG.
4543     *
4544     * @return string Lien vers le SIG
4545     */
4546     function getGeolocalisationLink() {
4547     //
4548     $link = "<a id='action-form-localiser'".
4549 softime 7996 " target='_SIG' href='".OM_ROUTE_FORM."&obj=dossier_instruction&action=140&idx=".$this->getVal("dossier")."'>".
4550 mbroquet 3730 "<span class='om-icon om-icon-16 om-icon-fix sig-16' title='Localiser'>Localiser</span> ".
4551     $this->getVal('geom').
4552     " </a>";
4553 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>";
4554 softime 12433 return $this->getVal('geom') ? $link : $nogeoloc;
4555 mbroquet 3730 }
4556    
4557 softime 10573
4558 softime 8989 /**
4559 softime 10573 * converti un geom au format Lat,Lon
4560     *
4561     * @param string $geom Le Geom
4562     * @param string $fromRefId Le référentiel dans lequel le geom est défini
4563     * @param string $toLongLatId Le référentiel dans lequel le geom doit être converti
4564     *
4565     * @return array[2] Long,Lat ou bien false,"message" en cas d'erreur
4566     */
4567     protected function convertGeomToLongLat(string $geom, string $fromRefId = '2154',
4568     string $toLongLatId = '4326') {
4569 softime 14542
4570     $qres = $this->f->get_all_results_from_db_query(
4571     sprintf(
4572     'SELECT
4573     ST_X(ST_Transform(ST_GeomFromText(\'%1$s\', %2$s), %3$s)) AS longitude,
4574     ST_Y(ST_Transform(ST_GeomFromText(\'%1$s\', %2$s), %3$s)) AS latitude',
4575     $this->f->db->escapeSimple($geom),
4576     $this->f->db->escapeSimple($fromRefId),
4577     $this->f->db->escapeSimple($toLongLatId)
4578     ),
4579     array(
4580     'origin' => __METHOD__
4581     )
4582 softime 12847 );
4583 softime 14542
4584     if ($qres['code'] !== 'OK') { // PP
4585     $this->addToLog(__METHOD__."() error: ".var_export($qres['message'], true), DEBUG_MODE);
4586     return array(false, $qres['message'],);
4587 softime 10573 }
4588 softime 14542 if (count($qres['result']) != 1) {
4589     $this->addToLog(__METHOD__."() error: ".var_export(count($qres['result']), true), DEBUG_MODE);
4590 softime 10573 return array(false, __("Erreur: Plus d'un enregistrement retourné").
4591 softime 14542 '('.count($qres['result']).')');
4592 softime 10573 }
4593 softime 14542 $coord = array_shift($qres['result']);
4594 softime 10573 $this->addToLog(__METHOD__."() coord: ".var_export($coord, true), EXTRA_VERBOSE_MODE);
4595     return array_values($coord);
4596     }
4597    
4598     /**
4599     * getGoogleMapsStreetViewLink retourne le code HTML affichant un lien vers une vue
4600     * Google Maps Street View à partir des coordonnées du geom.
4601     *
4602     * @return string Lien vers Google Maps Street View
4603     */
4604     protected function getGoogleMapsStreetViewLink() {
4605     // Récupération coordonnées du terrain
4606    
4607     // Passage du numéro de dossier comme id pour pouvoir le récupérer dans le
4608     // jscript lors du clic
4609     $html = sprintf(
4610     "<a id='action-form-gstreetview' class='simple-btn' title='%s' onclick='get_adresse_terrain(this.id, \"%s\")'>
4611     <span class='om-icon om-icon-16 om-icon-fix consult-16'></span>%s
4612     </a>",
4613     __("Ouvrir dans Google Maps Street View"),
4614     $this->getVal($this->clePrimaire),
4615     __("Street View")
4616     );
4617     return $html;
4618     }
4619    
4620     /**
4621 softime 8989 * SETTER_FORM - setSelect.
4622     *
4623     * @return void
4624     */
4625     function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
4626 softime 10573 $crud = $this->get_action_crud($this->getParameter("maj"));
4627    
4628 mbroquet 3730 // XXX Commenté pour patcher le problème de montée en charge de la base
4629     // de données en cas de reprise de données d'un gros volume de dossier
4630     // d'instruction
4631 softime 8989 // parent::setSelect($form, $maj);
4632 mbroquet 3730 // om_collectivite
4633 softime 8989 $this->init_select(
4634     $form,
4635     $this->f->db,
4636     $maj,
4637     null,
4638     "om_collectivite",
4639     $this->get_var_sql_forminc__sql("om_collectivite"),
4640     $this->get_var_sql_forminc__sql("om_collectivite_by_id"),
4641     false
4642     );
4643 mbroquet 3730
4644 softime 14542 if ($maj == 1 || $maj == 3) {
4645     $sql_nature_travaux_by_dit = str_replace(
4646     '<dossier_instruction_type>',
4647     $this->getVal('dossier_instruction_type'),
4648     $this->get_var_sql_forminc__sql("nature_travaux_by_dit")
4649     );
4650     // Initialisation du selecteur multiple nature_travaux
4651     $this->init_select(
4652     $form,
4653     $this->f->db,
4654     $maj,
4655     null,
4656     "nature_travaux",
4657     $sql_nature_travaux_by_dit,
4658     $this->get_var_sql_forminc__sql("nature_travaux_by_id"),
4659     false,
4660     true
4661     );
4662     }
4663    
4664 mbroquet 3730 /*
4665     * Pour chaque init_select d'un select non modifiable on teste
4666     * si l'on est en mode modifier : si c'est le cas alors on initialise le
4667     * select en mode consulter (qui n'affiche rien s'il n'y a aucune valeur).
4668     */
4669    
4670     $collectivite_idx = $this->getVal("om_collectivite");
4671 softime 6565 $affichage_form_dat = "";
4672 mbroquet 3730 // Si recherche avancée om_collectivite = collectivité utilisateur
4673 softime 8989 if ($maj == 999) {
4674 mbroquet 3730 $collectivite_idx = $this->f->getParameter("om_collectivite_idx");
4675 softime 6565 } else {
4676     $affichage_form_dat = $this->get_type_affichage_formulaire();
4677 mbroquet 3730 }
4678 softime 6565 // Définition de la qualité et de la traduction de l'instructeur
4679 softime 13137 $lib_instructeur = __("l'instructeur");
4680     $lib_instructeur_2 = __("l'instructeur secondaire");
4681     $affichage_instr_2 = 'instr';
4682     $affichage_instr = '';
4683 softime 6565 switch ($affichage_form_dat) {
4684 softime 7067 case 'DPC':
4685 softime 6565 case 'ADS':
4686 softime 10573 case 'CONSULTATION ENTRANTE':
4687 softime 6565 $affichage_instr = "AND instructeur_qualite.code = 'instr'";
4688     break;
4689     case 'CTX RE':
4690 softime 13137 $lib_instructeur_2 = __("le technicien");
4691     $affichage_instr_2 = 'tech';
4692     break;
4693 softime 6565 case 'CTX IN':
4694     $affichage_instr = "AND instructeur_qualite.code = 'juri'";
4695 softime 13137 $lib_instructeur = __('le juriste');
4696     $lib_instructeur_2 = __("le technicien");
4697     $affichage_instr_2 = 'tech';
4698 softime 6565 break;
4699     default:
4700     $affichage_instr = "";
4701     break;
4702     }
4703 mbroquet 3730
4704     // instructeur
4705     // on recupère les services des multicollectivités et de celle du DI
4706 softime 8989 if ($this->f->getParameter('option_afficher_division')==='true') {
4707 mbroquet 3730 // instructeur
4708 softime 8989 $sql_instructeur_div_by_di = str_replace(
4709     '<collectivite_di>',
4710     $collectivite_idx,
4711     $this->get_var_sql_forminc__sql("instructeur_div_by_di")
4712     );
4713     $sql_instructeur_div_by_di = str_replace(
4714     '<instructeur_qualite>',
4715     $affichage_instr,
4716     $sql_instructeur_div_by_di
4717     );
4718     $this->init_select(
4719     $form,
4720     $this->f->db,
4721     $maj,
4722     null,
4723     "instructeur",
4724     $sql_instructeur_div_by_di,
4725     $this->get_var_sql_forminc__sql("instructeur_div_by_id"),
4726     true,
4727     false,
4728     $lib_instructeur
4729     );
4730     // instructeur_2
4731     $sql_instructeur_2_div_by_di = str_replace(
4732     '<collectivite_di>',
4733     $collectivite_idx,
4734     $this->get_var_sql_forminc__sql("instructeur_2_div_by_di")
4735     );
4736 softime 13137 $sql_instructeur_2_div_by_di = str_replace(
4737     '<instructeur_qualite>',
4738     $affichage_instr_2,
4739     $sql_instructeur_2_div_by_di
4740     );
4741 softime 8989 $this->init_select(
4742     $form,
4743     $this->f->db,
4744     $maj,
4745     null,
4746     "instructeur_2",
4747     $sql_instructeur_2_div_by_di,
4748     $this->get_var_sql_forminc__sql("instructeur_2_div_by_id"),
4749     true,
4750     false,
4751 softime 13137 $lib_instructeur_2
4752 softime 8989 );
4753 mbroquet 3730 } else {
4754 softime 8989 $sql_instructeur_by_di = str_replace(
4755     '<collectivite_di>',
4756     $collectivite_idx,
4757     $this->get_var_sql_forminc__sql("instructeur_by_di")
4758     );
4759     $sql_instructeur_by_di = str_replace(
4760     '<instructeur_qualite>',
4761     $affichage_instr,
4762     $sql_instructeur_by_di
4763     );
4764     $this->init_select(
4765     $form,
4766     $this->f->db,
4767     $maj,
4768     null,
4769     "instructeur",
4770     $sql_instructeur_by_di,
4771     $this->get_var_sql_forminc__sql("instructeur_by_id"),
4772     true,
4773     false,
4774     $lib_instructeur
4775     );
4776     $sql_instructeur_2_by_di = str_replace(
4777     '<collectivite_di>',
4778     $collectivite_idx,
4779     $this->get_var_sql_forminc__sql("instructeur_2_by_di")
4780     );
4781 softime 13137 $sql_instructeur_2_by_di = str_replace(
4782     '<instructeur_qualite>',
4783     $affichage_instr_2,
4784     $sql_instructeur_2_by_di
4785     );
4786 softime 8989 $this->init_select(
4787     $form,
4788     $this->f->db,
4789     $maj,
4790     null,
4791     "instructeur_2",
4792     $sql_instructeur_2_by_di,
4793     $this->get_var_sql_forminc__sql("instructeur_2_by_id"),
4794     true,
4795     false,
4796 softime 13137 $lib_instructeur_2
4797 softime 8989 );
4798 mbroquet 3730 }
4799 softime 6565
4800 mbroquet 3730 // etat
4801     if ($maj == 1) {
4802 softime 8989 $this->init_select(
4803     $form,
4804     $this->f->db,
4805     3,
4806     null,
4807     "etat",
4808     $this->get_var_sql_forminc__sql("etat"),
4809     $this->get_var_sql_forminc__sql("etat_by_id"),
4810     false
4811     );
4812 mbroquet 3730 } else {
4813 softime 8989 $this->init_select(
4814     $form,
4815     $this->f->db,
4816     $maj,
4817     null,
4818     "etat",
4819     $this->get_var_sql_forminc__sql("etat"),
4820     $this->get_var_sql_forminc__sql("etat_by_id"),
4821     false
4822     );
4823 mbroquet 3730 }
4824    
4825     // dossier_instruction_type
4826 softime 8989 $this->init_select(
4827     $form,
4828     $this->f->db,
4829     $maj,
4830     null,
4831     "dossier_instruction_type",
4832     $this->get_var_sql_forminc__sql("dossier_instruction_type"),
4833     $this->get_var_sql_forminc__sql("dossier_instruction_type_by_id"),
4834     false
4835     );
4836 mbroquet 3730
4837     // division
4838 softime 8989 $sql_division_by_di = str_replace(
4839     '<collectivite_di>',
4840     $collectivite_idx,
4841     $this->get_var_sql_forminc__sql("division_by_di")
4842     );
4843     $this->init_select(
4844     $form,
4845     $this->f->db,
4846     $maj,
4847     null,
4848     "division",
4849     $sql_division_by_di,
4850     $this->get_var_sql_forminc__sql("division_by_id"),
4851     true
4852     );
4853 mbroquet 3730
4854     // autorite_competente
4855 softime 8989 $this->init_select(
4856     $form,
4857     $this->f->db,
4858     $maj,
4859     null,
4860     "autorite_competente",
4861     $this->get_var_sql_forminc__sql("autorite_competente"),
4862     $this->get_var_sql_forminc__sql("autorite_competente_by_id"),
4863     false
4864     );
4865 mbroquet 3730
4866     // avis_decision
4867     if ($maj == 1) {
4868 softime 8989 $this->init_select(
4869     $form,
4870     $this->f->db,
4871     3,
4872     null,
4873     "avis_decision",
4874     $this->get_var_sql_forminc__sql("avis_decision"),
4875     $this->get_var_sql_forminc__sql("avis_decision_by_id"),
4876     false
4877     );
4878 mbroquet 3730 } else {
4879 softime 8989 $this->init_select(
4880     $form,
4881     $this->f->db,
4882     $maj,
4883     null,
4884     "avis_decision",
4885     $this->get_var_sql_forminc__sql("avis_decision"),
4886     $this->get_var_sql_forminc__sql("avis_decision_by_id"),
4887     false
4888     );
4889 mbroquet 3730 }
4890 softime 7366
4891 softime 6565 // autorisation_contestee
4892 softime 7366 if ($affichage_form_dat === 'CTX RE'
4893     && ($maj == 1 || $maj == 3)) {
4894     // À exécuter seulement en mode modifier ou consulter des recours
4895     // pour éviter le ralentissement de l'affichage des listings des DI
4896 softime 8989 $this->init_select(
4897     $form,
4898     $this->f->db,
4899     $maj,
4900     null,
4901     "autorisation_contestee",
4902     $this->get_var_sql_forminc__sql("autorisation_contestee"),
4903     $this->get_var_sql_forminc__sql("autorisation_contestee_by_id"),
4904     false
4905     );
4906 softime 6565 }
4907 mbroquet 3730
4908 softime 12847 // Si l'accord tacite est activé, on récupère la liste des évènements
4909     if ($this->getVal('accord_tacite') === 'Oui') {
4910 mbroquet 3730
4911 softime 12847 // evenement_suivant_tacite
4912     $this->init_select(
4913     $form,
4914     $this->f->db,
4915     $maj,
4916     null,
4917     "evenement_suivant_tacite",
4918     $this->get_var_sql_forminc__sql("evenement_suivant_tacite"),
4919     $this->get_var_sql_forminc__sql("evenement_suivant_tacite_by_id"),
4920     false
4921     );
4922 mbroquet 3730
4923 softime 12847 // evenement_suivant_tacite_incompletude
4924     $this->init_select(
4925     $form,
4926     $this->f->db,
4927     $maj,
4928     null,
4929     "evenement_suivant_tacite_incompletude",
4930     $this->get_var_sql_forminc__sql("evenement_suivant_tacite_incompletude"),
4931     $this->get_var_sql_forminc__sql("evenement_suivant_tacite_incompletude_by_id"),
4932     false
4933     );
4934     }
4935    
4936 mbroquet 3730 // Ajout, modification et recherche avancée
4937 softime 8989 if ($maj == 0 || $maj == 1 || $maj == 999) {
4938 mbroquet 3730 // accord tacite
4939     $contenu=array();
4940     $contenu[0]=array('Non','Oui');
4941     $contenu[1]=array('Non','Oui');
4942 softime 8989 $form->setSelect("accord_tacite", $contenu);
4943 mbroquet 3730 // geom *** a voir
4944 softime 8989 if ($maj == 1) { //modification
4945 mbroquet 3730 $contenu=array();
4946 softime 8989 $contenu[0]=array("dossier", $this->getParameter("idx"));
4947     $form->setSelect('geom', $contenu);
4948 mbroquet 3730 }
4949 softime 6565 // arrondissement recherche avancée
4950 softime 8989 $this->init_select(
4951     $form,
4952     $this->f->db,
4953     $maj,
4954     null,
4955     "arrondissement",
4956     $this->get_var_sql_forminc__sql("arrondissement"),
4957     $this->get_var_sql_forminc__sql("arrondissement_by_id"),
4958     false
4959     );
4960 softime 6565 // dossier_autorisation_type_detaille recherche avancée
4961 softime 8989 $this->init_select(
4962     $form,
4963     $this->f->db,
4964     $maj,
4965     null,
4966     "dossier_autorisation_type_detaille",
4967     $this->get_var_sql_forminc__sql("dossier_autorisation_type_detaille"),
4968     $this->get_var_sql_forminc__sql("dossier_autorisation_type_detaille_by_id"),
4969     false
4970     );
4971 mbroquet 3730 }
4972    
4973     // Ce formulaire n'est pas accessible en ajout ni en recherche avancée
4974     // mais dans le cas où il le serait, rien ne doit être fait concernant
4975 softime 6929 // les taxes
4976 mbroquet 3730 if ($maj != 0 && $maj != 999) {
4977 softime 10573 // Choix du secteur pour part communale
4978     $contenu = array();
4979     $contenu[0][0] = "";
4980     $contenu[1][0] = __('choisir')."&nbsp;".__("le")."&nbsp;".__("tax_secteur");
4981     if ($crud === 'read') {
4982     $contenu[1][0] = "";
4983     }
4984 softime 6929 // Instance du parmétrage des taxes
4985 mbroquet 3730 $inst_taxe_amenagement = $this->get_inst_taxe_amenagement();
4986     // Si la colletivité à un paramétrage pour la taxe d'aménagement
4987 softime 6929 if ($inst_taxe_amenagement !== null) {
4988 mbroquet 3730 // Il y a 20 secteurs maximum dans une commune de France
4989     for ($i=1; $i < 21; $i++) {
4990     // Valeur du secteur
4991     $value = $inst_taxe_amenagement->getVal('tx_comm_secteur_'.$i);
4992     //
4993 softime 6929 if ($value !== null && $value !== '') {
4994 mbroquet 3730 //
4995     $contenu[0][$i] = $i;
4996 softime 10573 $contenu[1][$i] = sprintf(__('Secteur %s'), $i);
4997 mbroquet 3730 }
4998     }
4999     }
5000 softime 10573 //
5001     $form->setSelect("tax_secteur", $contenu);
5002 mbroquet 3730 }
5003 softime 10573 // commune
5004     $this->init_select(
5005     $form,
5006     $this->f->db,
5007     $maj,
5008     null,
5009     "commune",
5010     $this->get_var_sql_forminc__sql("commune"),
5011     $this->get_var_sql_forminc__sql("commune_by_id"),
5012     false
5013     );
5014     // pec_metier
5015     $this->init_select(
5016     $form,
5017     $this->f->db,
5018     $maj,
5019     null,
5020     "pec_metier",
5021     $this->get_var_sql_forminc__sql("pec_metier"),
5022     $this->get_var_sql_forminc__sql("pec_metier_by_id"),
5023     false
5024     );
5025 softime 10968 // etat_transmission_platau
5026     $contenu = array();
5027     $contenu[0] = array(
5028     'jamais_transmissible',
5029     'non_transmissible',
5030     'transmis_mais_non_transmissible',
5031     'transmissible',
5032     );
5033     $contenu[1] = array(
5034     __('Ne sera jamais transmis'),
5035     __('Non transmissible'),
5036     __('Déjà transmis mais non transmissible'),
5037     __('Transmissible'),
5038     );
5039     $form->setSelect("etat_transmission_platau", $contenu);
5040 mbroquet 3730 }
5041    
5042 softime 8989 /**
5043     * SETTER_FORM - setLib.
5044     *
5045     * @return void
5046     */
5047     function setLib(&$form, $maj) {
5048     parent::setLib($form, $maj);
5049 softime 13137 // Les libellés généraux sont mis avant la modification des libellés
5050     // selon le contexte pour permettre de ne surcharger que les libellés
5051     // voulu et d'avoir les mêmes dans tous les autres cas.
5052     $form->setLib('accord_tacite',_("decision tacite"));
5053     $form->setLib('autorite_competente',_('competence'));
5054     $form->setLib('cle_acces_citoyen', _("cle_acces_citoyen"));
5055     $form->setLib('date_ait', _("Date d'AIT"));
5056     $form->setLib('date_audience', _("Date d'audience"));
5057     $form->setLib('date_complet', _("completude"));
5058     $form->setLib('date_contradictoire', _("Date de contradictoire"));
5059     $form->setLib('date_dernier_depot', _("dernier depot"));
5060     $form->setLib('date_derniere_visite', _("Date de dernière visite"));
5061     $form->setLib('date_limite_incompletude', _("limite d'instruction"));
5062     $form->setLib('date_premiere_visite', _("Date de 1ère visite"));
5063     $form->setLib('date_transmission_parquet', _('Date de transmission au Parquet'));
5064     $form->setLib('date_validite', _("fin de validite le"));
5065     $form->setLib('delai', _("delai (mois)"));
5066     $form->setLib('delai',_("delai d'instruction"));
5067 softime 14542 $form->setLib('nature_travaux',__('Nature des travaux'));
5068 softime 13137 $form->setLib('description_projet',_('description du projet'));
5069     $form->setLib('dossier_arrondissement', _("Arrondissement"));
5070     $form->setLib('dossier_autorisation_libelle',_('dossier_autorisation_libelle'));
5071     $form->setLib('dossier_autorisation_type_detaille', _("Type"));
5072     $form->setLib('contrevenants', _("Contrevenant(s)"));
5073     $form->setLib('dossier_instruction_type',_('type de dossier'));
5074     $form->setLib('dossier_petitionnaire',_('demandeur'));
5075     $form->setLib('dossier_petitionnaires', _("Pétitionnaire(s)"));
5076     $form->setLib('requerants', _("Requérant(s)"));
5077     $form->setLib('dt_ctx_infraction', _("Infraction"));
5078     $form->setLib('dt_ctx_regularisable', _("Régularisable"));
5079     $form->setLib('dt_ctx_synthese_anr', _("Synthèse des ANR"));
5080     $form->setLib('dt_ctx_synthese_nti', _("Synthèse des NTI"));
5081     $form->setLib('ctx_reference_dsj', _("ctx_reference_dsj"));
5082     $form->setLib('ctx_reference_sagace', _("ctx_reference_sagace"));
5083     $form->setLib('enjeu_ctx', _("contentieux"));
5084     $form->setLib('enjeu_erp', _("ERP"));
5085     $form->setLib('enjeu_urba', _("urbanisme"));
5086     $form->setLib('erp', _("ERP"));
5087     $form->setLib('geom',_('geolocalisaion'));
5088     $form->setLib('instructeur_2', _('Technicien'));
5089     $form->setLib('numero_versement_archive', _("numero"));
5090     $form->setLib('bailleur', _("Bailleur(s)"));
5091     $form->setLib('terrain', _("Localisation"));
5092     $form->setLib('etat_transmission_platau', __("Statut Plat'AU"));
5093     $form->setLib('lien_iiue', '');
5094 softime 14064 $form->setLib('geoloc_latitude', __('Latitude (d° min.dec N/S)'));
5095     $form->setLib('geoloc_longitude', __('Longitude (d° min.dec E/O)'));
5096     $form->setLib('geoloc_rayon', __("Rayon d'emprise (m)"));
5097 softime 13528 $form->setLib('terrain_superficie_calculee', __("Superficie calculée (m²)"));
5098 softime 13137
5099 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
5100     if ($affichage_form === 'ADS') {
5101     $form->setLib('date_decision', _("date de la decision"));
5102     $form->setLib('date_limite', _("limite d'instruction"));
5103 softime 13137 $form->setLib('instructeur_2', __("instructeur secondaire"));
5104 softime 6565 }
5105     if ($affichage_form === 'CTX IN') {
5106     $form->setLib('avis_decision', _("Décision"));
5107     $form->setLib('date_cloture_instruction', _("Date de clôture d'instruction"));
5108     $form->setLib('date_decision', _("Date de décision"));
5109     $form->setLib('date_depot', _("Date de réception"));
5110     $form->setLib('date_limite', _("Tacicité"));
5111     $form->setLib('instructeur',_('Juriste'));
5112     }
5113     if ($affichage_form === 'CTX RE') {
5114     $form->setLib('autorisation_contestee', _("Autorisation contestée"));
5115     $form->setLib('avis_decision', _("Décision"));
5116     $form->setLib('date_cloture_instruction', _("Date de clôture d'instruction"));
5117     $form->setLib('date_decision', _("Date de décision"));
5118     $form->setLib('date_depot', _("Date de recours"));
5119     $form->setLib('date_limite', _("Tacicité"));
5120     $form->setLib('instructeur',_('Juriste'));
5121     }
5122 softime 7067 if ($affichage_form === 'DPC') {
5123 softime 13137 $form->setLib('instructeur_2', __("instructeur secondaire"));
5124 softime 7067 }
5125 softime 10573 if ($affichage_form === 'CONSULTATION ENTRANTE') {
5126     $form->setLib('date_decision', _("date de la decision"));
5127     $form->setLib('date_limite', _("limite d'instruction"));
5128     //
5129     $form->setLib('delai_reponse', __('Délai de réponse'));
5130     $form->setLib('date_consultation', __('Date de la consultation'));
5131     $form->setLib('date_emission', __("Date d'émission"));
5132     $form->setLib('etat_consultation', __('État de la consultation'));
5133     $form->setLib('type_consultation', __('Type de la consultation'));
5134     $form->setLib('texte_fondement_reglementaire', __('Article(s) réglementaire sur le(s)quel(s) se fonde la consultation'));
5135     $form->setLib('texte_objet_consultation', __("Texte de l'objet de la consultation"));
5136     $form->setLib('service_consultant_id', __('Service consultant : identifiant'));
5137     $form->setLib('service_consultant_libelle', __('Service consultant : libellé'));
5138     $form->setLib('service_consultant_insee', __('Service consultant : INSEE'));
5139     $form->setLib('service_consultant_mail', __('Service consultant : mail'));
5140     $form->setLib('service_consultant_type', __('Service consultant : type'));
5141     $form->setLib('service_consultant__siren', __('Service consultant : SIREN'));
5142    
5143     $form->setLib('type_delai', __('Type de délai'));
5144     $form->setLib('objet_consultation', __('Objet de la consultation'));
5145     $form->setLib('date_production_notification', __('Date de production de la notification'));
5146     $form->setLib('date_premiere_consultation', __('Date de la première consultation'));
5147 softime 13528 $form->setLib('instructeur_2', __("instructeur secondaire"));
5148 softime 10573 }
5149 softime 6565 }
5150 mbroquet 3730
5151     function setOnchange(&$form,$maj){
5152     parent::setOnchange($form,$maj);
5153     // mise en majuscule
5154     $form->setOnchange("demandeur_nom","this.value=this.value.toUpperCase()");
5155     $form->setOnchange("demandeur_societe","this.value=this.value.toUpperCase()");
5156     $form->setOnchange("delegataire_nom","this.value=this.value.toUpperCase()");
5157     $form->setOnchange("delegataire_societe","this.value=this.value.toUpperCase()");
5158     $form->setOnchange("architecte_nom","this.value=this.value.toUpperCase()");
5159     $form->setOnchange("terrain_adresse","this.value=this.value.toUpperCase()");
5160     $form->setOnchange('terrain_surface','VerifNumdec(this)');
5161     $form->setOnchange('tax_mtn_part_commu', 'VerifFloat(this, 0)');
5162     $form->setOnchange('tax_mtn_part_depart', 'VerifFloat(this, 0)');
5163     $form->setOnchange('tax_mtn_part_reg', 'VerifFloat(this, 0)');
5164     $form->setOnchange('tax_mtn_total', 'VerifFloat(this, 0)');
5165 softime 6929 $form->setOnchange('tax_mtn_rap', 'VerifFloat(this, 0)');
5166     $form->setOnchange('tax_mtn_part_commu_sans_exo', 'VerifFloat(this, 0)');
5167     $form->setOnchange('tax_mtn_part_depart_sans_exo', 'VerifFloat(this, 0)');
5168     $form->setOnchange('tax_mtn_part_reg_sans_exo', 'VerifFloat(this, 0)');
5169     $form->setOnchange('tax_mtn_total_sans_exo', 'VerifFloat(this, 0)');
5170     $form->setOnchange('tax_mtn_rap_sans_exo', 'VerifFloat(this, 0)');
5171 mbroquet 3730 }
5172    
5173     function setLayout(&$form, $maj) {
5174    
5175 softime 8477 // Récupère le CRUD
5176     $crud = $this->get_action_crud($this->getParameter("maj"));
5177    
5178     // Il n'y a pas d'affichage spécifique dans le cas d'une suppression
5179     if ($crud === 'delete') {
5180     return;
5181     }
5182    
5183 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
5184 softime 10573 if ($affichage_form === 'ADS' || $affichage_form === 'DPC' || $affichage_form === 'CONSULTATION ENTRANTE') {
5185     // Le contrôle de données est seulement possible si on est pas en mode service consulté.
5186     // et si le champ dossier_platau du dossier d'autorisation type detaillé est à true
5187     if ($this->f->is_option_mode_service_consulte_enabled() === false
5188 softime 10808 && $this->f->is_type_dossier_platau($this->getVal('dossier_autorisation')) === true
5189     && $this->getVal('etat_transmission_platau') !== 'jamais_transmissible') {
5190     //
5191 softime 10573 $required_fields_platau = $this->check_platau_required_fields($this->getVal('dossier'));
5192    
5193     if (isset($required_fields_platau['is_ok']) && $required_fields_platau['is_ok'] === false) {
5194     $class = 'demat-color demat-color-text';
5195     $message = __("La transmission à Plat'AU n'est pas possible car certains champs requis ne sont pas saisis.");
5196     if ($this->getVal('etat_transmission_platau') == "transmis_mais_non_transmissible") {
5197     $message = __("La transmission des modifications à Plat'AU n'est pas possible car certains champs requis ne sont pas saisis.");
5198     }
5199     $this->f->display_panel_information($class, $message, $required_fields_platau['required_fields_empty'], __('Champs requis'), 'demat-color');
5200     }
5201     }
5202 softime 6565 // En-tête
5203     $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
5204 mbroquet 3730
5205 softime 6565 // Col1 : Fieldset "Dossier d'Instruction"
5206     $form->setBloc('om_collectivite', 'D', '', 'col_9');
5207 mbroquet 3730
5208 softime 6565 $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
5209 softime 10573 $form->setFieldset('tax_secteur', 'F');
5210 softime 6565
5211 mbroquet 3730
5212 softime 10573 $form->setBloc('tax_secteur', 'F');
5213 softime 6565
5214     // Col2 : 3 fieldsets
5215     $form->setBloc('enjeu_urba', 'D', '', 'col_3');
5216 mbroquet 3730
5217 softime 6565 // Fieldset "Enjeu"
5218     $form->setFieldset('enjeu_urba', 'D', _("Enjeu"));
5219     $form->setFieldset('enjeu_ctx', 'F');
5220     // Fieldset "Qualification"
5221     $form->setFieldset('erp', 'D', _("Qualification"));
5222 softime 10968 $form->setFieldset('etat_transmission_platau', 'F');
5223 softime 6565 // Fieldset "Archive"
5224     $form->setFieldset('numero_versement_archive', 'D', _("Archive"));
5225     $form->setFieldset('date_demande', 'F');
5226    
5227     $form->setBloc('date_demande', 'F');
5228 mbroquet 3730 $form->setBloc('date_demande', 'F');
5229    
5230 softime 6565 // Fieldset "Instruction"
5231     $form->setBloc('date_depot', 'D', '', 'col_12');
5232     $form->setFieldset('date_depot', 'D', _('Instruction'), 'col_12');
5233 mbroquet 3730
5234 softime 6565 // Fieldset "Suivi"
5235     $form->setBloc('date_depot', 'D', '', 'col_12');
5236    
5237     $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
5238     // Col 1
5239     $form->setBloc('date_depot', 'D', '', 'col_6');
5240     $form->setBloc('date_depot', 'D');
5241     $form->setBloc('date_dernier_depot', 'F');
5242     $form->setBloc('date_limite', 'D', '', 'interligne');
5243     $form->setBloc('date_limite_incompletude', 'F');
5244 mbroquet 3730 $form->setBloc('date_limite_incompletude', 'F');
5245 softime 6565 // Col 2
5246     $form->setBloc('etat', 'D', '', 'col_6');
5247     $form->setBloc('etat', 'D');
5248     $form->setBloc('etat', 'F');
5249     $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
5250     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
5251 mbroquet 3730 $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
5252 softime 6565 $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
5253    
5254     $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
5255 mbroquet 3730
5256 softime 6565 // Bloc 2 fieldsets
5257     $form->setBloc('date_decision', 'D', '', 'col_12');
5258 mbroquet 3730
5259 softime 6565 // Col 1 Fieldset "Décision"
5260     $form->setFieldset('date_decision', 'D', _('Decision'), 'col_6');
5261     $form->setFieldset('avis_decision','F','');
5262     // Col 2 Fieldset "Validité de l'autorisation"
5263     $form->setFieldset('date_validite', 'D', _("Validite de l'autorisation"), 'col_6');
5264     $form->setFieldset('date_validite','F','');
5265 mbroquet 3730
5266 softime 6565 $form->setBloc('date_validite', 'F'); // Fin bloc 2 fieldsets
5267 mbroquet 3730
5268 softime 6565 $form->setFieldset('date_conformite','F','');
5269     $form->setBloc('date_conformite', 'F'); // Fin Instruction
5270 mbroquet 3730
5271 softime 6929 // Fieldset "Simulation des taxes"
5272 softime 10573 $form->setBloc('tax_mtn_part_commu', 'D', '', 'col_12');
5273     $form->setFieldset('tax_mtn_part_commu', 'D', _("Simulation des taxes"), 'startClosed');
5274 softime 6929 //
5275 softime 10573 $form->setBloc('tax_mtn_part_commu', 'D', '', 'col_12');
5276     $form->setFieldset('tax_mtn_part_commu', 'D', _("Taxe d'aménagement"), 'collapsible');
5277 softime 6929 $form->setFieldset('tax_mtn_total_sans_exo', 'F', '');
5278     $form->setBloc('tax_mtn_total_sans_exo', 'F');
5279     //
5280     $form->setBloc('tax_mtn_rap', 'D', '', 'col_12');
5281     $form->setFieldset('tax_mtn_rap', 'D', _("Redevance d'archéologie préventive"), 'collapsible');
5282     $form->setFieldset('tax_mtn_rap_sans_exo', 'F', '');
5283     $form->setBloc('tax_mtn_rap_sans_exo', 'F');
5284     //
5285     $form->setFieldset('tax_mtn_rap_sans_exo', 'F', '');
5286     $form->setBloc('tax_mtn_rap_sans_exo', 'F');
5287 mbroquet 3730
5288 softime 7067 // Fieldset "Localisation"
5289 softime 6565 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
5290 mbroquet 3730
5291 softime 7067 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
5292 softime 6565 // Col 1
5293     $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
5294 softime 14064 $form->setBloc('geoloc_rayon', 'F');
5295 softime 6565 // Col 2
5296     $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
5297 softime 13528 $form->setBloc('terrain_superficie_calculee', 'F');
5298 mbroquet 3730
5299 softime 13528 $form->setFieldset('terrain_superficie_calculee', 'F', '');
5300 mbroquet 3730
5301 softime 13528 $form->setBloc('terrain_superficie_calculee', 'F');
5302 softime 11585
5303     // Fieldset "Plat'AU : identifiants techniques"
5304     $form->setBloc('lien_iiue', 'D', '', 'col_12');
5305     $form->setFieldset('lien_iiue', 'D', __("Plat'AU - Identifiants techniques"), 'demat-color-fieldset startClosed');
5306     $form->setFieldset('lien_iiue', 'F', '');
5307     $form->setBloc('lien_iiue', 'F');
5308 softime 6565 }
5309 softime 10573 // CONSULTATION ENTRANTE
5310     // Vérifie que le dossier a été déposé électroniquement
5311 softime 10808 if ($affichage_form === 'CONSULTATION ENTRANTE'
5312 softime 13137 && ($this->get_source_depot_from_demande() === PLATAU
5313     || $this->get_source_depot_from_demande() === PORTAL)) {
5314 softime 10573 // Fieldset "Consultation"
5315     $form->setBloc('consultation_entrante', 'D', '', 'col_12');
5316     $form->setFieldset('consultation_entrante', 'D', __('Consultation'), '');
5317     $form->setBloc('consultation_entrante', 'D', "", "col_6");
5318     $form->setBloc('type_consultation', 'F');
5319     $form->setBloc('texte_fondement_reglementaire', 'D', "", "col_6");
5320     $form->setBloc('dossier_consultation', 'F');
5321     $form->setFieldset('dossier_consultation', 'F', '');
5322     $form->setBloc('dossier_consultation', 'F');
5323     }
5324 softime 6565 // RECOURS
5325     if ($affichage_form === 'CTX RE') {
5326     // Fieldset "Dossier d'Instruction"
5327     $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
5328     $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
5329     $form->setFieldset('date_demande', 'F');
5330     $form->setBloc('date_demande', 'F');
5331 mbroquet 3730
5332 softime 6565 // Fieldset "Instruction"
5333     $form->setBloc('date_depot', 'D', '', 'col_12');
5334     $form->setFieldset('date_depot', 'D', _('Instruction'), 'col_12');
5335 mbroquet 3730
5336 softime 6565 // Fieldset "Suivi"
5337     $form->setBloc('date_depot', 'D', '', 'col_12');
5338    
5339     $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
5340 mbroquet 3730 // Col 1
5341 softime 6565 $form->setBloc('date_depot', 'D', '', 'col_6');
5342     // $form->setBloc('date_depot', 'D');
5343     // $form->setBloc('date_dernier_depot', 'F');
5344     // $form->setBloc('date_limite', 'D', '');
5345     // $form->setBloc('date_limite_incompletude', 'F');
5346     $form->setBloc('date_cloture_instruction', 'F');
5347 mbroquet 3730 // Col 2
5348 softime 6565 $form->setBloc('etat', 'D', '', 'col_6');
5349     $form->setBloc('etat', 'D');
5350     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
5351     // $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
5352     // $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
5353     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
5354     $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
5355    
5356     $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
5357 mbroquet 3730
5358 softime 6565 // Bloc 2 fieldsets
5359     $form->setBloc('date_decision', 'D', '', 'col_12');
5360 mbroquet 3730
5361 softime 6565 // Col 1 Fieldset "Décision"
5362     $form->setFieldset('date_decision', 'D', _('Decision'), 'col_12');
5363     $form->setFieldset('avis_decision','F','');
5364     // Col 2 Fieldset "Validité de l'autorisation"
5365    
5366     $form->setBloc('date_validite', 'F'); // Fin bloc 2 fieldsets
5367    
5368     $form->setFieldset('date_conformite','F','');
5369     $form->setBloc('date_conformite', 'F'); // Fin Instruction
5370    
5371 softime 7067 // Fieldset "Localisation"
5372 softime 6565 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
5373    
5374 softime 7067 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
5375 softime 6565 // Col 1
5376     $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
5377 softime 14064 $form->setBloc('geoloc_rayon', 'F');
5378 softime 6565 // Col 2
5379     $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
5380 softime 13528 $form->setBloc('terrain_superficie_calculee', 'F');
5381 softime 6565
5382 softime 13528 $form->setFieldset('terrain_superficie_calculee', 'F', '');
5383 softime 6565
5384 softime 13528 $form->setBloc('terrain_superficie_calculee', 'F');
5385 softime 6565 }
5386    
5387     // INFRACTION
5388     if ($affichage_form === 'CTX IN') {
5389    
5390     // Fieldset "Dossier d'Instruction"
5391     $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
5392     $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
5393 softime 13137 $form->setFieldset('etat_transmission_platau', 'F');
5394     $form->setBloc('etat_transmission_platau', 'F');
5395 softime 6565
5396 softime 13137 // Fieldset "Archive"
5397     $form->setBloc('numero_versement_archive', 'D', '', 'col_12');
5398     $form->setFieldset('numero_versement_archive', 'DF', __("Archive"));
5399     $form->setBloc('numero_versement_archive', 'F', '');
5400    
5401 softime 6565 // Fieldset "Instruction"
5402     $form->setBloc('date_depot', 'D', '', 'col_12');
5403 softime 13137 $form->setFieldset('date_depot', 'D', _('Instruction'));
5404 softime 6565 // Fieldset "Suivi"
5405 softime 13137 $form->setBloc('date_depot', 'D', '', '');
5406 softime 6565 $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
5407     // Col 1
5408     $form->setBloc('date_depot', 'D', '', 'col_6');
5409     $form->setBloc('date_depot', 'D');
5410     $form->setBloc('date_dernier_depot', 'F');
5411     $form->setBloc('date_limite', 'D', '', 'interligne');
5412     $form->setBloc('date_limite_incompletude', 'F');
5413     $form->setBloc('date_limite_incompletude', 'F');
5414     // Col 2
5415     $form->setBloc('etat', 'D', '', 'col_6');
5416     $form->setBloc('etat', 'D');
5417     $form->setBloc('etat', 'F');
5418     $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
5419     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
5420     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
5421     $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
5422     $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
5423     // Fieldset "Décision"
5424     $form->setFieldset('date_decision', 'D', _('Decision'), 'col_12');
5425     $form->setFieldset('date_conformite','F',''); // Fin Décision
5426     $form->setFieldset('date_conformite','F','');
5427     $form->setBloc('date_conformite', 'F'); // Fin Instruction
5428    
5429 softime 7067 // Fieldset "Localisation"
5430 softime 6565 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
5431 softime 7067 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
5432 softime 6565 // Col 1
5433     $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
5434 softime 14064 $form->setBloc('geoloc_rayon', 'F');
5435 softime 6565 // Col 2
5436     $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
5437 softime 13528 $form->setBloc('terrain_superficie_calculee', 'F');
5438     $form->setFieldset('terrain_superficie_calculee', 'F', '');
5439     $form->setBloc('terrain_superficie_calculee', 'F');
5440 softime 6565
5441     // Fieldset "Demandeurs"
5442     // → cf. formSpecificContent()
5443     }
5444 mbroquet 3730 }
5445    
5446     /**
5447     * Permet de retourner si le dossier est incomplet notifié
5448     *
5449     * @return boolean true si incomplet notifié
5450     */
5451     function is_incomplet_notifie() {
5452     // Si le dossier est défini en tant qu'incomplet notifie
5453     if($this->getVal('incomplet_notifie') == 't' AND
5454     $this->getVal('incompletude') == 't') {
5455     return true;
5456     }
5457     return false;
5458     }
5459    
5460 softime 6929
5461 fmichon 4708 /**
5462 softime 7366 * Vérifie que le dossier d'instruction en cours ne soit pas instruit.
5463     * Ne sont pas compté comme instruit les dossiers n'ayant que des événements
5464     * d'instruction de type 'affichage'.
5465 softime 6929 *
5466     * @return boolean
5467     */
5468 softime 7366 function has_only_recepisse() {
5469 softime 6929
5470 softime 7366 // Récupère la liste des instructions du dossier
5471 softime 6929 $list_instructions = $this->get_list_instructions(true);
5472    
5473 softime 7366 // Si le dossier a pour seule instruction le récépissé de la demande
5474     if (count($list_instructions) === 1
5475     && $list_instructions[0] === $this->get_demande_instruction_recepisse()) {
5476 softime 6929 //
5477 softime 7366 return true;
5478 softime 6929 }
5479    
5480     //
5481 softime 7366 return false;
5482 softime 6929 }
5483    
5484    
5485     /**
5486 fmichon 4708 * TRIGGER - triggerajouterapres.
5487     *
5488     * - Interface avec le référentiel ERP [108]
5489     * - Gestion des données techniques liées
5490     * - Mise à jour du DA
5491     * - Gestion des références cadastrales / parcelles liées
5492     *
5493     * @return boolean
5494     */
5495 softime 8989 function triggerajouterapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
5496     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
5497 mbroquet 3730
5498 softime 13528 // si la version du DI n'est pas zéro
5499     $version = $this->valF['version'];
5500     if (intval($version) > 0) {
5501    
5502     // récupération du DI qui vient d'être créé
5503     $di = $this->valF['dossier'];
5504     if (empty($di_inst = $this->f->findObjectById('dossier', $di))) {
5505     $this->addToMessage(sprintf(
5506     __("Erreur lors de la récupération du DI %s (dossier non-trouvé)"),
5507     $di));
5508     $this->correct = false;
5509     return false;
5510     }
5511    
5512     $collectivite = $this->valF['om_collectivite'];
5513     $da = $this->valF['dossier_autorisation'];
5514     $commune = $this->f->get_submitted_post_value("commune");
5515    
5516     $ret = $di_inst->replicate_geolocalisation($di, $da, $collectivite, $commune);
5517     if (is_string($ret) || $ret === false) {
5518     if (is_string($ret)) {
5519     $this->addToMessage($ret);
5520     }
5521     $this->correct = false;
5522     return false;
5523     }
5524     }
5525    
5526 fmichon 4708 /**
5527     * Interface avec le référentiel ERP.
5528     *
5529 softime 14542 * (WS->ERP)[108] Dépôt de dossier DAT -> AT
5530 fmichon 4708 * Déclencheur :
5531     * - L'option ERP est activée
5532     * - Validation du formulaire d'ajout d'une demande de nouveau dossier
5533     * de type AT
5534     */
5535     //
5536 softime 8989 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
5537 fmichon 4708 && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__at')) {
5538     //
5539     $infos = array(
5540     "dossier_instruction" => $this->valF['dossier'],
5541     );
5542     //
5543     $ret = $this->f->send_message_to_referentiel_erp(108, $infos);
5544     if ($ret !== true) {
5545     $this->cleanMessage();
5546     $this->addToMessage(_("Une erreur s'est produite lors de la notification (108) du référentiel ERP. Contactez votre administrateur."));
5547     return false;
5548 mbroquet 3730 }
5549 fmichon 4708 $this->addToMessage(_("Notification (108) du référentiel ERP OK."));
5550     }
5551    
5552     /**
5553     * Gestion des données techniques liées.
5554     */
5555     // On ajoute les données techniques
5556 softime 8989 if ($this->ajoutDonneesTechniquesDI($id, $val) === false) {
5557 mbroquet 3730 //
5558 fmichon 4708 $this->addToMessage(_("Erreur lors de l'enregistrement du dossier.")." "._("Contactez votre administrateur."));
5559 mbroquet 3730 $this->correct = false;
5560     return false;
5561     }
5562    
5563 fmichon 4708 /**
5564     * Mise à jour des données du DA.
5565     */
5566     //
5567     $inst_da = $this->get_inst_dossier_autorisation($this->valF["dossier_autorisation"]);
5568     //
5569 softime 8640 $params = array(
5570     'di_id' => $this->valF[$this->clePrimaire],
5571     );
5572     if ($inst_da->majDossierAutorisation($params) === false) {
5573 fmichon 4708 //
5574     $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
5575     $this->correct = false;
5576     return false;
5577     }
5578    
5579     /**
5580     * Gestion des références cadastrales / parcelles liées.
5581     */
5582 mbroquet 3730 // Si le champ des références cadastrales n'est pas vide
5583     if ($this->valF['terrain_references_cadastrales'] != '') {
5584     // Ajout des parcelles dans la table dossier_parcelle
5585 softime 8989 $this->ajouter_dossier_parcelle(
5586     $this->valF['dossier'],
5587     $this->valF['terrain_references_cadastrales']
5588     );
5589 softime 6565 }
5590 mbroquet 3730
5591 softime 6565 /**
5592     * Notification de l'éventuelle autorisation contestée
5593     */
5594     if ($this->valF['autorisation_contestee'] !== null) {
5595     // Instancie la classe dossier_message
5596     $dossier_message = $this->get_inst_dossier_message(']');
5597     // Ajoute le message de notification
5598 softime 12124 $dossier_message_val = array(
5599     'dossier' => $this->valF['autorisation_contestee'],
5600     'type' => __('Autorisation contestée'),
5601     'emetteur' => $this->f->get_connected_user_login_name(),
5602     'login' => $_SESSION['login'],
5603     'date_emission' => date('Y-m-d H:i:s'),
5604     'contenu' => sprintf(
5605     __('Cette autorisation a été contestée par le recours %s.'),
5606     $this->valF['dossier']
5607     )
5608     );
5609 softime 6565 // Si une erreur se produit lors de l'ajout
5610 softime 12124 if ($dossier_message->add_notification_message($dossier_message_val, false, true) !== true) {
5611 softime 6565 // Message d'erreur affiché à l'utilisateur
5612     $this->addToMessage(_("L'autorisation contestée n'a pas pu être notifiée du recours."));
5613     $this->correct = false;
5614     return false;
5615     }
5616 mbroquet 3730 }
5617 softime 12433 // Gestion dossier operateur liées.
5618     //
5619     // En mode service consulté, on ajoute suite à la création du dossier un
5620     // élément dans la table dossier_operateur qui permettra par la suite d'effectuer
5621     // la désignation de l'opérateur
5622     if ($this->f->is_option_mode_service_consulte_enabled() === true) {
5623     // On ajoute le dossier opérateur
5624     if ($this->ajoutDossierOperateurDI($id, $val) === false) {
5625 mbroquet 3730
5626 softime 12433 $this->addToMessage(_("Erreur lors de l'enregistrement du dossier.")." "._("Contactez votre administrateur."));
5627     $this->correct = false;
5628     return false;
5629     }
5630     }
5631    
5632 softime 10573 /**
5633     * Gestion des tâches pour la dématérialisation
5634     */
5635 softime 6565 //
5636 softime 10808 if ($this->f->is_type_dossier_platau($this->valF['dossier_autorisation'])
5637     && $this->valF['etat_transmission_platau'] !== 'jamais_transmissible') {
5638 softime 13528 // Pour les dossiers d'instruction dont la source de dépôt est différent de PLAT'AU
5639     if (isset($val['source_depot']) === false || $val['source_depot'] !== PLATAU) {
5640     // Gérer l'ajout du DA si pas lié à un objet PLAT'AU
5641     // Nécessaire pour les dossiers d'instruction sur existant dont l'initial n'est pas
5642     // transmis à PLAT'AU
5643     $inst_lien = $this->f->get_inst__om_dbform(array(
5644     "obj" => "lien_id_interne_uid_externe",
5645     "idx" => ']',
5646 softime 13137 ));
5647 softime 13528 $is_exists = $inst_lien->is_exists('dossier_autorisation', $inst_da->getVal('dossier_autorisation'));
5648     if (! $is_exists) {
5649     $inst_task = $this->f->get_inst__om_dbform(array(
5650     "obj" => "task",
5651     "idx" => 0,
5652 softime 13137 ));
5653 softime 13528 $task_val = array(
5654     'type' => 'creation_DA',
5655     'object_id' => $inst_da->getVal('dossier_autorisation'),
5656     'dossier' => $inst_da->getVal('dossier_autorisation'),
5657     );
5658     // Si le mode service consulté n'est pas activé
5659     // et que le dossier est dans l'état 'non_transmissible'
5660     if ($this->f->is_option_mode_service_consulte_enabled() === false
5661     && $this->valF['etat_transmission_platau'] === 'non_transmissible') {
5662     // Passage du statut de la task en draft
5663     $task_val['state'] = $inst_task::STATUS_DRAFT;
5664     }
5665     $add_task = $inst_task->add_task(array('val' => $task_val));
5666     if ($add_task === false) {
5667     $this->addToMessage(sprintf('%s %s',
5668     __("Une erreur s'est produite lors de la création tâche."),
5669     __("Veuillez contacter votre administrateur.")
5670     ));
5671     $this->correct = false;
5672     return false;
5673     }
5674 softime 13137 }
5675 softime 13528
5676     // Ajout de la task creation_DI
5677 softime 10573 $inst_task = $this->f->get_inst__om_dbform(array(
5678     "obj" => "task",
5679     "idx" => 0,
5680     ));
5681     $task_val = array(
5682     'type' => 'creation_DI',
5683     'object_id' => $id,
5684     'dossier' => $id,
5685     );
5686 softime 13528 // Si le mode service consulté n'est pas activé
5687     // et que le dossier est dans l'état 'non_transmissible'
5688 softime 10573 if ($this->f->is_option_mode_service_consulte_enabled() === false
5689     && $this->valF['etat_transmission_platau'] === 'non_transmissible') {
5690 softime 13528 // Passage du statut de la task en draft
5691 softime 10573 $task_val['state'] = $inst_task::STATUS_DRAFT;
5692     }
5693     $add_task = $inst_task->add_task(array('val' => $task_val));
5694     if ($add_task === false) {
5695     $this->addToMessage(sprintf('%s %s',
5696     __("Une erreur s'est produite lors de la création tâche."),
5697     __("Veuillez contacter votre administrateur.")
5698     ));
5699     $this->correct = false;
5700     return false;
5701     }
5702     }
5703 softime 13528 // Pour les dossier d'instruction dont la source de dépôt est PLAT'AU
5704 softime 13137 if (isset($val['source_depot']) === true && $val['source_depot'] == PLATAU) {
5705 softime 10573 //
5706     $inst_task = $this->f->get_inst__om_dbform(array(
5707     "obj" => "task",
5708     "idx" => 0,
5709     ));
5710     $task_val = array(
5711     'type' => 'modification_DI',
5712     'object_id' => $id,
5713     'dossier' => $id,
5714     );
5715     $add_task = $inst_task->add_task(array('val' => $task_val));
5716     if ($add_task === false) {
5717     $this->addToMessage(sprintf('%s %s',
5718     __("Une erreur s'est produite lors de la création tâche."),
5719     __("Veuillez contacter votre administrateur.")
5720     ));
5721     $this->correct = false;
5722     return false;
5723 softime 10808 }
5724 softime 10573 }
5725 softime 13528 // Dans tous les cas
5726 softime 10573 $inst_task = $this->f->get_inst__om_dbform(array(
5727     "obj" => "task",
5728     "idx" => 0,
5729     ));
5730     $task_val = array(
5731     'type' => 'depot_DI',
5732     'object_id' => $id,
5733     'dossier' => $id,
5734     );
5735     // Change l'état de la tâche de notification en fonction de l'état de
5736     // transmission du dossier d'instruction
5737     if ($this->f->is_option_mode_service_consulte_enabled() === false
5738     && $this->valF['etat_transmission_platau'] === 'non_transmissible') {
5739     //
5740     $task_val['state'] = $inst_task::STATUS_DRAFT;
5741     }
5742     $add_task = $inst_task->add_task(array('val' => $task_val));
5743     if ($add_task === false) {
5744     $this->addToMessage(sprintf('%s %s',
5745     __("Une erreur s'est produite lors de la création tâche."),
5746     __("Veuillez contacter votre administrateur.")
5747     ));
5748     $this->correct = false;
5749     return false;
5750     }
5751     }
5752 softime 14542 // Ajout automatique des acteurs au dossier si l'option est activée
5753     if ($this->f->is_option_enabled('option_module_acteur') === true) {
5754     if ($this->add_dossier_actors($id) === false) {
5755     $this->addToMessage(__('ATTENTION : Les acteurs n\'ont pas été rattachés au dossier.'));
5756     }
5757     }
5758    
5759     // On duplique les nature du travaux du dossier initial ou du dernier dossier clôturé
5760    
5761     // Récupération du numéro de dossier initial ou dernier dossier clôturé
5762     $qres = $this->f->get_one_result_from_db_query(
5763     sprintf(
5764     'SELECT
5765     dossier.dossier
5766     FROM
5767     %1$sdossier
5768     WHERE
5769     dossier.dossier_autorisation = \'%2$s\'
5770     AND dossier.dossier != \'%3$s\'
5771     ORDER BY
5772     dossier.version DESC,
5773     dossier.date_depot DESC
5774     LIMIT 1',
5775     DB_PREFIXE,
5776     $this->f->db->escapeSimple($this->valF['dossier_autorisation']),
5777     $id
5778     ),
5779     array(
5780     'origin' => __METHOD__,
5781     'force_return' => true
5782     )
5783     );
5784     if ($qres['code'] !== 'OK') {
5785     return false;
5786     }
5787     $di_id = $qres['result'];
5788     // Duplication des lien de nature de travaux pour le nouveau dossier
5789     if ($this->lienNatureTravauxDossierInstruction($di_id, $id) === false) {
5790     $this->addToMessage(sprintf('%s %s',
5791     __("Une erreur s'est produite lors de l'ajout des nature de travaux sur le nouveau dossier."),
5792     __("Veuillez contacter votre administrateur.")
5793     ));
5794     $this->correct = false;
5795     return false;
5796     }
5797 softime 6565 return true;
5798 mbroquet 3730 }
5799 softime 6565
5800 mbroquet 3730 /**
5801 softime 14542 * Gestion des liens entre les natures de travaux et le nouveau dossier
5802     **/
5803     function lienNatureTravauxDossierInstruction($di_orig, $di_id) {
5804     $inst_ldnt = $this->f->get_inst__om_dbform(array(
5805     "obj" => "lien_dossier_nature_travaux",
5806     "idx" => "]",
5807     ));
5808    
5809     $qres = $this->f->get_all_results_from_db_query(
5810     sprintf(
5811     'SELECT
5812     *
5813     FROM
5814     %1$slien_dossier_nature_travaux INNER JOIN %1$snature_travaux ON nature_travaux.nature_travaux = lien_dossier_nature_travaux.nature_travaux INNER JOIN %1$slien_dit_nature_travaux ON lien_dossier_nature_travaux.nature_travaux = lien_dit_nature_travaux.nature_travaux
5815     WHERE
5816     dossier = \'%2$s\' AND lien_dit_nature_travaux.dossier_instruction_type = %3$d',
5817     DB_PREFIXE,
5818     $di_orig,
5819     $this->valF['dossier_instruction_type']
5820     ),
5821     array(
5822     "origin" => __METHOD__,
5823     "force_return" => true,
5824     )
5825     );
5826     if ($qres["code"] !== "OK") {
5827     return false;
5828     }
5829     $liens_dossier_nature_travaux = $qres["result"];
5830     $valnaturetravaux = array();
5831    
5832     foreach ($liens_dossier_nature_travaux as $lien) {
5833     $valnaturetravaux['lien_dossier_nature_travaux'] = '';
5834     $valnaturetravaux['dossier'] = $di_id;
5835     $valnaturetravaux['nature_travaux'] = $lien['nature_travaux'];
5836    
5837     if ($inst_ldnt->ajouter($valnaturetravaux) === false) {
5838     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre la nature de travaux et le dossier d'instruction.", DEBUG_MODE);
5839     return false;
5840     }
5841     }
5842    
5843     return true;
5844     }
5845    
5846    
5847     /**
5848     * Ajoute à l'aide d'une requête sql tous les acteurs (lien dossier - tiers) paramétrés pour
5849     * être ajoutés automatiquement.
5850     *
5851     * Pour être ajoutés automatiquement un acteur doit :
5852     * - avoir une catégorie paramétré en tant qu'ajout automatique pour le type de DI du dossier
5853     * - avoir une catégorie liée à la même collectivité que celle du dossier
5854     * - accepter les notifications par mail
5855     * - ne pas avoir d'uid platau ou sa liste d'uid ne doit pas contenir celui de la consultation
5856     * entrante (acteur != du service en charge du dossier)
5857     * - ne pas avoir d'habilitation en cours de validité
5858     * OU avoir une (ou +) habilitation sans division territoriale (commune ou département)
5859     * OU avoir une (ou +) habilitation avec division territoriale commune lié à la commune du dossier
5860     * OU avoir une (ou +) habilitation avec division territoriale département lié au département du dossier
5861     *
5862     * @param string $idDossier : identifiant du dossier
5863     * @return boolean résultat de l'ajout. true : ok, false : l'ajout a échoué
5864     */
5865     protected function add_dossier_actors($idDossier) {
5866     // Sql de récupération de tous les acteurs qui doivent automatiquement être associé au dossier.
5867     $actor_auto_dossier_sql = sprintf(
5868     'SELECT DISTINCT
5869     nextval(\'%1$slien_dossier_tiers_seq\') AS lien_dossier_tiers_seq,
5870     dossier.dossier,
5871     tiers_consulte.tiers_consulte
5872     FROM
5873     %1$stiers_consulte
5874     JOIN %1$scategorie_tiers_consulte
5875     ON tiers_consulte.categorie_tiers_consulte = categorie_tiers_consulte.categorie_tiers_consulte
5876     -- Filtre les tiers a ajouter automatiquement au dossier
5877     JOIN %1$slien_dossier_instruction_type_categorie_tiers
5878     ON lien_dossier_instruction_type_categorie_tiers.ajout_automatique IS TRUE
5879     AND categorie_tiers_consulte.categorie_tiers_consulte = lien_dossier_instruction_type_categorie_tiers.categorie_tiers
5880     JOIN %1$slien_categorie_tiers_consulte_om_collectivite
5881     ON categorie_tiers_consulte.categorie_tiers_consulte = lien_categorie_tiers_consulte_om_collectivite.categorie_tiers_consulte
5882     -- Filtre les tiers dont la collectivité et le type correspondent à celle du dossier
5883     JOIN %1$sdossier
5884     ON lien_dossier_instruction_type_categorie_tiers.dossier_instruction_type = dossier.dossier_instruction_type
5885     AND lien_categorie_tiers_consulte_om_collectivite.om_collectivite = dossier.om_collectivite
5886     AND dossier.dossier = \'%2$s\'
5887     WHERE
5888     -- Garde les tiers notifiable ayant un id platau différent de celui du service consultant du dossier
5889     tiers_consulte.accepte_notification_email IS TRUE
5890     AND tiers_consulte.liste_diffusion IS NOT NULL
5891     AND TRIM(tiers_consulte.liste_diffusion) != \'\'
5892     -- Garde les tiers n ayant pas d habilitation en cours de validite
5893     -- OU ayant une habilitation liée à la commune du dossier
5894     -- OU ayant une habilitation liée au département d appartenance de la commune du dossier
5895     -- OU n étant lié à aucune commune ou département
5896     AND tiers_consulte.tiers_consulte IN (
5897     SELECT
5898     tiers_consulte.tiers_consulte
5899     FROM
5900     %1$stiers_consulte
5901     -- Filtre pour garder uniquement les habilitations en cours de validité
5902     LEFT JOIN %1$shabilitation_tiers_consulte
5903     ON tiers_consulte.tiers_consulte = habilitation_tiers_consulte.tiers_consulte
5904     AND (habilitation_tiers_consulte.om_validite_debut IS NULL
5905     OR habilitation_tiers_consulte.om_validite_debut <= CURRENT_DATE)
5906     AND (habilitation_tiers_consulte.om_validite_fin IS NULL
5907     OR habilitation_tiers_consulte.om_validite_fin > CURRENT_DATE)
5908     -- Récupère uniquement les habilitations liées à la commune du dossier
5909     LEFT JOIN %1$slien_habilitation_tiers_consulte_commune
5910     ON dossier.commune = lien_habilitation_tiers_consulte_commune.commune
5911     AND habilitation_tiers_consulte.habilitation_tiers_consulte = lien_habilitation_tiers_consulte_commune.habilitation_tiers_consulte
5912     -- Récupère uniquement les habilitations liées au département du dossier
5913     LEFT JOIN %1$scommune
5914     ON dossier.commune = commune.commune
5915     LEFT JOIN %1$sdepartement
5916     ON commune.dep = departement.dep
5917     LEFT JOIN %1$slien_habilitation_tiers_consulte_departement
5918     ON departement.departement = lien_habilitation_tiers_consulte_departement.departement
5919     AND habilitation_tiers_consulte.habilitation_tiers_consulte = lien_habilitation_tiers_consulte_departement.habilitation_tiers_consulte
5920     WHERE
5921     -- Pas d habilitation en cours de validité
5922     habilitation_tiers_consulte.habilitation_tiers_consulte IS NULL
5923     OR (-- Habilitation associée à la commune du dossier
5924     lien_habilitation_tiers_consulte_commune.lien_habilitation_tiers_consulte_commune IS NOT NULL
5925     -- Habilitation associée au département du dossier
5926     OR lien_habilitation_tiers_consulte_departement.lien_habilitation_tiers_consulte_departement IS NOT NULL
5927     -- Habilitation non liée à une commune ou à un département
5928     OR (NOT EXISTS(
5929     SELECT lien_habilitation_tiers_consulte_departement
5930     FROM %1$slien_habilitation_tiers_consulte_departement AS lhtcd
5931     WHERE lhtcd.habilitation_tiers_consulte = habilitation_tiers_consulte.habilitation_tiers_consulte)
5932     AND NOT EXISTS(
5933     SELECT lien_habilitation_tiers_consulte_commune
5934     FROM %1$slien_habilitation_tiers_consulte_commune AS lhtcc
5935     WHERE lhtcc.habilitation_tiers_consulte = habilitation_tiers_consulte.habilitation_tiers_consulte))))',
5936     DB_PREFIXE,
5937     $this->f->db->escapeSimple($idDossier)
5938     );
5939     // Création d'un lien entre le dossier et les tiers pour chaque tiers en ajout auto
5940     $qres = $this->f->execute_db_query(
5941     sprintf(
5942     'INSERT INTO %1$slien_dossier_tiers (lien_dossier_tiers, dossier, tiers)
5943     (%2$s)',
5944     DB_PREFIXE,
5945     $actor_auto_dossier_sql
5946     ),
5947     array(
5948     'origin' => __METHOD__,
5949     'force_return' => true
5950     )
5951     );
5952     return $qres['code'] === 'OK';
5953     }
5954    
5955     /**
5956 softime 10573 * Permet de vérifier que les champs requis pour platau ont été saisis
5957     * et si oui mettre à jour le statut des taches à new
5958     *
5959     * @param string $dossier L'identifiant du dossier.
5960     * @param string $add_or_update Permet de déterminer si on est en ajout ou en modification
5961     *
5962     * @return bool true|false
5963     */
5964 softime 13137 function trigger_platau_required_fields($dossier) {
5965 softime 10573 // Vérification des champs Plat'AU requis pour transmission
5966     $is_required_fields_fulfilled = $this->check_platau_required_fields($dossier);
5967    
5968 softime 13137 // On récupère l'identifiant du dossier d'autorisation en fonction
5969     // de si on est en ajout ou en modification
5970     $dossier_autorisation = $this->getVal('dossier_autorisation') != "" ? $this->getVal('dossier_autorisation') : $this->valF['dossier_autorisation'];
5971    
5972     $inst_task = $this->f->get_inst__om_dbform(array(
5973     "obj" => "task",
5974     "idx" => 0,
5975 softime 10573 ));
5976 softime 10968
5977 softime 13137 // Si les champs requis sont saisis on met à jour le flag
5978     // etat_transmission_platau à transmissible pour indiquer
5979     // que le dossier peut être transmis à Plat'AU et on met
5980     // l'état des tâches draft en new
5981     if ($is_required_fields_fulfilled['is_ok']) {
5982     // Valeurs à mettre à jour
5983     $valF = array();
5984     $valF['etat_transmission_platau'] = 'transmissible';
5985 softime 10573
5986 softime 13137 // Met à jour le quartier du dossier
5987     $cle = " dossier='".$dossier."'";
5988     $res = $this->f->db->autoExecute(
5989     DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
5990     $this->addToLog(__METHOD__."(): db->autoexecute(\""
5991     .DB_PREFIXE."dossier\", ".print_r($valF, true)
5992     .", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
5993     if ($this->f->isDatabaseError($res, true)) {
5994     return false;
5995     }
5996 softime 13528 $this->update_task_state($dossier, 'draft', 'new', $dossier_autorisation);
5997 softime 13137 }
5998     // Si les champs requis ne sont pas saisis on marque
5999     // le dossier comme non transmissible ou transmis mais non transmissible
6000     // et on met l'état des tâches new en draft
6001     if (! $is_required_fields_fulfilled['is_ok']) {
6002     $valF = array();
6003     if ($inst_task->task_exists('creation_DI', $dossier)) {
6004     $valF['etat_transmission_platau'] = 'non_transmissible';
6005 softime 10573 } else {
6006 softime 13137 $valF['etat_transmission_platau'] = 'transmis_mais_non_transmissible';
6007     }
6008 softime 10808
6009 softime 13137 // Met à jour le quartier du dossier
6010     $cle = " dossier='".$dossier."'";
6011     $res = $this->f->db->autoExecute(
6012     DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
6013     $this->addToLog(__METHOD__."(): db->autoexecute(\""
6014     .DB_PREFIXE."dossier\", ".print_r($valF, true)
6015     .", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
6016     if ($this->f->isDatabaseError($res, true)) {
6017     return false;
6018 softime 10573 }
6019 softime 13528 $this->update_task_state($dossier, 'new', 'draft', $dossier_autorisation);
6020 softime 13137 }
6021 softime 10573
6022 softime 13137 return true;
6023 softime 10573 }
6024    
6025     /**
6026     * TODO: replace with '$this->f->findObjectById' ?
6027     *
6028 softime 6565 * Récupère l'instance de dossier message.
6029     *
6030     * @param string $dossier_message Identifiant du message.
6031     *
6032     * @return object
6033     */
6034     private function get_inst_dossier_message($dossier_message = null) {
6035     //
6036     return $this->get_inst_common("dossier_message", $dossier_message);
6037     }
6038    
6039     /**
6040 softime 13137 * Récupère l'identifiant du quartier et de l'arrondissement depuis le code
6041     * impôt.
6042     *
6043     * @param string $code_impots Code impôt du quartier
6044 mbroquet 3730 *
6045     * @return array
6046     */
6047 softime 13137 public function get_quartier_arrondissement_by_code_impot($code_impot) {
6048     if (empty($code_impot) === true) {
6049     return null;
6050 mbroquet 3730 }
6051 softime 13137 $query = sprintf('
6052     SELECT
6053     quartier,
6054     arrondissement
6055     FROM
6056     %1$squartier
6057     WHERE
6058     code_impots = \'%2$s\'',
6059     DB_PREFIXE,
6060     $code_impot
6061     );
6062     $res = $this->f->get_all_results_from_db_query(
6063     $query,
6064     array(
6065     "origin" => __METHOD__,
6066     "force_return" => true,
6067     )
6068     );
6069     if ($res['code'] !== 'KO' &&
6070     count($res['result']) > 0) {
6071     //
6072     return $res['result'][0];
6073 mbroquet 3730 }
6074 softime 13137 return null;
6075 mbroquet 3730 }
6076 softime 10573
6077 mbroquet 3730 /**
6078 softime 10573 * Retourne l'intructeur correspondant le mieux à la parcelle.
6079     *
6080     * @param int $quartier le numéro de quartier
6081     * @param int $arrondissement le numéro d'arrondissement
6082     * @param string $section la section
6083     * @param int $dadt le type détaillé de dossier d'autorisation
6084     * @param int $collectivite l'identifiant de la collectivité
6085     * @param int $commune_id l'identifiant de la commune (optionel)
6086 softime 13137 * @param int $demande_type l'identifiant du type de demande (optionel)
6087 softime 10573 *
6088     * @return array contenant l'instructeur, et éventuellement sa division
6089     */
6090     public function getInstructeurDivision (
6091 softime 11585 int $quartier, int $arrondissement, $section,
6092 softime 13528 int $dadt, int $collectivite, int $commune_id = 0, int $demande_type = 0) : array {
6093 mbroquet 3730
6094 softime 10573 // requête de récupération de l'instructeur à affecter
6095     // (exclu les affectations manuelles supposées avoir été utilisées avant)
6096 softime 13528 $sql = sprintf('
6097 softime 10573 SELECT
6098 softime 13528 instructeur, instructeur_2, section, quartier, arrondissement, dossier_autorisation_type_detaille, dossier_instruction_type
6099 softime 10573 FROM
6100 softime 13528 %1$saffectation_automatique AS AA
6101 softime 10573 WHERE
6102 softime 13528 (AA.affectation_manuelle IS NULL OR AA.affectation_manuelle = \'\')
6103     AND AA.instructeur IS NOT NULL
6104     ',
6105     DB_PREFIXE
6106 softime 10573 );
6107    
6108 softime 13528 // si l'identifiant de la demande_type est spécifié, récupère
6109     // le type de dossier d'instruction
6110 softime 13137 $dit = null;
6111     if (empty($demande_type) === false && $demande_type !== 0) {
6112     $demande_type_inst = $this->f->get_inst__om_dbform(array(
6113     "obj" => "demande_type",
6114     "idx" => $demande_type,
6115     ));
6116     $dit = $demande_type_inst->getVal('dossier_instruction_type');
6117     }
6118    
6119 softime 10573 // ajoute les conditions SQL correspondantes aux paramètres de filtrage
6120     foreach(array(
6121     'om_collectivite ' => $collectivite,
6122     'dossier_autorisation_type_detaille' => $dadt,
6123 softime 13137 'dossier_instruction_type' => $dit,
6124 softime 10573 'quartier' => $quartier,
6125     'arrondissement' => $arrondissement,
6126     'section' => $section
6127     ) as $column => $value) {
6128     if (empty($value) === false) {
6129     if ($column == 'section') {
6130     $valType = 's'; // string
6131     $value = $this->f->db->escapeSimple($value);
6132 softime 13528 } else {
6133     $valType = 'd'; // int
6134     $value = intval($value);
6135 mbroquet 3730 }
6136 softime 10573 $sql .= sprintf(" AND (AA.$column IS NULL OR AA.$column = '%$valType') ",
6137     $value);
6138 mbroquet 3730 }
6139 softime 13528 else {
6140     $sql .= " AND AA.$column IS NULL ";
6141     }
6142 mbroquet 3730 }
6143 softime 10573 if (!empty($commune_id) && $this->f->is_option_dossier_commune_enabled()) {
6144     $commune = $this->f->findObjectById('commune', $commune_id);
6145     if (!empty($commune)) {
6146     $code_departement = $commune->getVal('dep');
6147     $code_commune = preg_replace('/^'.$code_departement.'/', '', $commune->getVal('com'));
6148     $sql .= sprintf(
6149     " AND (AA.communes IS NULL OR AA.communes ~ '%s') ",
6150     "(^|,)$code_departement($code_commune)?(,|$)");
6151     }
6152     else {
6153     $this->addToLog(__METHOD__."(): commune '$commune_id' non trouvée", DEBUG_MODE);
6154     }
6155     }
6156 mbroquet 3730
6157 softime 10573 // ordonnancement et limite à un seul résultat
6158     $sql .= sprintf("
6159     ORDER BY
6160     communes %s,
6161 softime 13528 dossier_instruction_type %s,
6162     dossier_autorisation_type_detaille %s,
6163     quartier %s,
6164 softime 10573 section %s,
6165 softime 13528 arrondissement %s
6166 softime 10573 LIMIT 1
6167     ",
6168     // on positionne les valeurs NULL en premier si le filtre sur ce champ n'a pas été saisi
6169     $commune_id === 0 ? 'NULLS FIRST' : '',
6170 softime 13528 $dit === 0 ? 'NULLS FIRST' : '',
6171     $dadt === 0 ? 'NULLS FIRST' : '',
6172     $quartier === 0 ? 'NULLS FIRST' : '',
6173 softime 10573 empty($section) === true ? 'NULLS FIRST' : '',
6174 softime 13528 $arrondissement === 0 ? 'NULLS FIRST' : ''
6175 softime 10573 );
6176    
6177     // exécution de la requête
6178 softime 13528 $res = $this->f->get_all_results_from_db_query(
6179     $sql,
6180     array(
6181     "origin" => __METHOD__,
6182     )
6183     );
6184     $result = $res['result'];
6185 softime 10573
6186     // si on a récupéré un instructeur correspondant aux critères
6187 softime 13528 if (is_array($result) && count($result) > 0) {
6188 softime 10573
6189 softime 14064 $instructeur = $this->f->get_inst__om_dbform(array(
6190     'obj' => 'instructeur',
6191     'idx' => $result[0]['instructeur'],
6192     ));
6193     $divisionId = $instructeur->getVal('division');
6194 softime 10573
6195     // s'il a une division, retourne l'instructeur et sa division
6196 softime 14064 if (empty($divisionId) === false) {
6197 softime 10573 return array(
6198 softime 13528 'instructeur' => $result[0]['instructeur'],
6199     'instructeur_2' => $result[0]['instructeur_2'],
6200 softime 10573 'division' => $divisionId,
6201     );
6202     }
6203    
6204     // aucune division trouvée, retour uniquement l'instructeur
6205 softime 13528 return array(
6206 softime 14064 'instructeur' => $result[0]['instructeur'],
6207 softime 13528 'instructeur_2' => $result[0]['instructeur_2'],
6208     );
6209 softime 10573 }
6210    
6211 softime 13528 return array();
6212 mbroquet 3730 }
6213    
6214     /**
6215     * Récupère le type détaillé d'une dossier d'autorisation.
6216     *
6217 softime 14064 * @param string $dossier_autorisation DA
6218 mbroquet 3730 *
6219 softime 14064 * @return string identifiant du type détaillé de dossier d'autorisation
6220 mbroquet 3730 */
6221     function get_dossier_autorisation_da_type_detaille($dossier_autorisation) {
6222     //Récupération du dossier_autorisation_type_detaille concerné par le
6223     //$dossier_autorisation
6224 softime 14064 $dossierAutorisation = $this->f->get_inst__om_dbform(array(
6225     "obj" => "dossier_autorisation",
6226     "idx" => $dossier_autorisation
6227     ));
6228     return $dossierAutorisation->getVal('dossier_autorisation_type_detaille');
6229 softime 12847 }
6230 mbroquet 3730
6231 softime 8989 /**
6232 softime 12847 * Cette méthode permet de gérer l'affectation du dossier.
6233     * Deux cas sont gérées :
6234     * - l'affectation a été sélectionnée par l'utilisateur
6235     * - l'affectation est réalisé automatiquement
6236     *
6237     * Renvoie un tableau associatif contenant l'instructeur, la division et
6238     * l'instructeur secondaire du dossier.
6239     *
6240     * Ex : array(
6241     * 'instructeur' => id_instructeur,
6242     * 'instructeur_2' => id_instructeur_2,
6243     * 'division' => id_division
6244     * )
6245 softime 8989 *
6246 softime 12847 * @param array valeurs récupérées à l'ajout du dossier
6247     * @return array tableau contenant l'affectation du dossier
6248 softime 8989 */
6249 softime 12847 protected function affectation_dossier($val) {
6250     $affectation = array(
6251     'instructeur' => null,
6252     'instructeur_2' => null,
6253     'division' => null,
6254     );
6255     // Cas 1 : Vérifie si une valeur d'affectation automatique
6256     // existe. Si c'est le cas c'est que l'affectation a été choisie
6257     // par l'utilisateur.
6258 softime 13137 // Il s'agit donc d'une affectation manuelle
6259 softime 12847 if (empty($val['affectation_automatique']) === false) {
6260     // Récupération de l'affectation automatique correspondante
6261     $idAffectationAuto = intval($val['affectation_automatique']);
6262     // Préparation des logs
6263     $logMsg = __METHOD__."(): affectation automatique '$idAffectationAuto' ".
6264     "non trouvée";
6265 softime 10573 $logMsgMode = DEBUG_MODE;
6266    
6267 softime 12847 $affectationAuto = $this->f->get_inst__om_dbform(array(
6268 softime 10573 "obj" => "affectation_automatique",
6269 softime 12847 "idx" => $idAffectationAuto
6270 softime 10573 ));
6271 softime 12847 // Vérifie que l'affectation automatique a été correctement récupérée en regardant
6272     // si l'objet instancié a un identifiant non null
6273     if (empty($affectationAuto->getVal($affectationAuto->clePrimaire)) === false) {
6274 softime 10573 // log si l'instructeur n'est pas défini
6275 softime 12847 $logMsg = __METHOD__."(): affectation automatique '$idAffectationAuto' ".
6276 softime 10573 "pas d'instructeur défini";
6277 softime 12847 // On cherche maintenant à récupérer l'instructeur principal visé par cette affectation
6278     // et sa division
6279     $instructeurId = $affectationAuto->getVal('instructeur');
6280     if (! empty($instructeurId)) {
6281 softime 10573 // log si l'instructeur n'existe pas
6282 softime 12847 $logMsg = __METHOD__."(): affectation automatique '$idAffectationAuto' ".
6283     "instructeur '$instructeurId' non trouvé";
6284     // De la même manière que pour l'affectation automatique on instancie
6285     // l'instructeur avec l'identifiant issus de l'affectation et on vérifie
6286     // si l'instructeur a bien été récupéré.
6287 softime 10573 $instructeur = $this->f->get_inst__om_dbform(array(
6288     "obj" => "instructeur",
6289 softime 12847 "idx" => intval($instructeurId)
6290 softime 10573 ));
6291     if (empty($instructeur->getVal($instructeur->clePrimaire)) === false) {
6292 softime 12847 // Récupération de l'identifiant et de la division de l'instructeur principal
6293     $affectation['instructeur'] = $instructeurId;
6294     $affectation['division'] = $instructeur->getVal('division');
6295 softime 10573
6296     // log le succès
6297 softime 12847 $logMsg = __METHOD__."(): affectation automatique '$idAffectationAuto' ".
6298     "instructeur [".$affectation['instructeur']."] ".
6299 softime 10573 "'".$instructeur->getVal('nom')."' affecté, avec sa division ".
6300 softime 12847 "'".$affectation['division']."'";
6301 softime 10573 $logMsgMode = EXTRA_VERBOSE_MODE;
6302     }
6303 mbroquet 3730 }
6304 softime 12847 // Affichage des log de la récupération de l'instructeur principal et de sa division
6305 softime 10573 $this->addToLog($logMsg, $logMsgMode);
6306    
6307 softime 12847 // Si l'affectation donne aussi un instructeur secondaire on le récupère
6308     $instructeur2Id = $affectationAuto->getVal('instructeur_2');
6309 softime 10573 // log si aucun instructeur secondaire est défini
6310 softime 12847 $logMsg = __METHOD__."(): affectation automatique '$idAffectationAuto' ".
6311 softime 10573 "pas de second instructeur défini";
6312     $logMsgMode = EXTRA_VERBOSE_MODE;
6313 softime 12847 if (empty($instructeur2Id) === false) {
6314 softime 10573 // log si l'instructeur n'existe pas
6315 softime 12847 $logMsg = __METHOD__."(): affectation automatique '$idAffectationAuto' ".
6316     "second instructeur '$instructeur2Id' non trouvé";
6317 softime 10573 $logMsgMode = DEBUG_MODE;
6318 softime 12847 // Instancie l'instructeur secondaire et vérifie si il a bien été récupéré
6319 softime 10573 $instructeur2 = $this->f->get_inst__om_dbform(array(
6320     "obj" => "instructeur",
6321 softime 12847 "idx" => intval($instructeur2Id)
6322 softime 10573 ));
6323     if (empty($instructeur2) === false) {
6324 softime 12847 // Récupération de l'identifiant l'instructeur secondaire
6325     $affectation['instructeur_2'] = $instructeur2Id;
6326 softime 10573
6327     // log le succès
6328 softime 12847 $logMsg = __METHOD__."(): affectation automatique '$idAffectationAuto' ".
6329     "second instructeur [".$affectation['instructeur_2']."] ".
6330 softime 10573 "'".$instructeur2->getVal('nom')."' affecté";
6331     $logMsgMode = EXTRA_VERBOSE_MODE;
6332     }
6333     }
6334 softime 12847 // Affichage des log de la récupération de l'instructeur secondaire
6335 softime 10573 $this->addToLog($logMsg, $logMsgMode);
6336    
6337     // succès : plus rien à logger
6338     $logMsg = null;
6339     $logMsgMode = null;
6340 mbroquet 3730 }
6341 softime 10573
6342     // affectation automatique inexistante
6343     if (empty($logMsg) === false && empty($logMsgMode) === false) {
6344     $this->addToLog($logMsg, $logMsgMode);
6345 softime 6565 }
6346 mbroquet 3730 }
6347 softime 10573
6348    
6349 softime 12847 // Cas 2 : Si aucune affectation automatique n'a été choisi alors on cherche la plus adaptée
6350 softime 10573
6351 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
6352     // alors l'affectation ne pourra pas être effectué sur ce dossier
6353 softime 13137 if (empty($affectation['instructeur']) === true
6354     && empty($val['dossier_autorisation']) === false) {
6355 softime 10573
6356 softime 12847 // Sinon on récupère le type détaillé du DA
6357     $dadt = $this->get_dossier_autorisation_da_type_detaille($val['dossier_autorisation']);
6358    
6359 softime 10573 // si la commune est spécifiée
6360     $commune_id = 0;
6361 softime 12847 if (isset($val['commune']) && $this->f->is_option_dossier_commune_enabled()) {
6362     $commune_id = $val['commune'];
6363 softime 10573 }
6364    
6365     // récupération de l'instructeur ainsi que de sa division
6366     $instructeurDivision = $this->getInstructeurDivision(
6367 softime 12847 intval($val['quartier']),
6368     intval($val['arrondissement']),
6369     $val['section'],
6370     intval($dadt),
6371     intval($val['om_collectivite']),
6372 softime 13137 intval($commune_id),
6373     intval($val['demande_type'])
6374 softime 10573 );
6375    
6376 softime 12847 if (! empty($instructeurDivision['instructeur']) === true &&
6377     ! empty($instructeurDivision['division']) === true) {
6378     $affectation['instructeur'] = $instructeurDivision['instructeur'];
6379     $affectation['division'] = $instructeurDivision['division'];
6380 softime 10573 }
6381    
6382 softime 13528 if (isset($instructeurDivision['instructeur_2']) === true
6383     && empty($instructeurDivision['instructeur_2']) === false) {
6384     //
6385     $affectation['instructeur_2'] = $instructeurDivision['instructeur_2'];
6386 softime 10573 }
6387     }
6388 softime 12847
6389     // Préviens l'utilisateur si l'affectation du dossier n'a pas pu être réalisée.
6390     if (empty($affectation['instructeur']) === true) {
6391     $affMsg = "<br/> "._("Aucun instructeur compatible avec ce dossier trouve, ".
6392     "contactez votre administrateur afin d'en assigner un ".
6393     "a ce dossier.")." <br/>";
6394 softime 10573
6395 softime 12847 if ($this->f->isAccredited("dossier_modifier_instructeur") === true) {
6396     $affMsg = "<br/> "._("Pensez a assigner un instructeur a ce dossier.")." <br/>";
6397     }
6398 softime 10573 $this->addToMessage($affMsg);
6399     }
6400    
6401 softime 12847 return $affectation;
6402 mbroquet 3730 }
6403    
6404 fmichon 4708 /**
6405     * TRIGGER - triggermodifierapres.
6406     *
6407     * - Interface avec le référentiel ERP [101]
6408     * - Interface avec le référentiel ERP [102][103]
6409 softime 6272 * - Interface avec le référentiel ERP [114]
6410 fmichon 4708 * - Gestion des demandeurs liés
6411     * - Gestion des références cadastrales / parcelles liées
6412     * - Gestion des taxes
6413 softime 8989 *
6414 fmichon 4708 * @return boolean
6415     */
6416 softime 8989 function triggermodifierapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
6417     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
6418    
6419 softime 14542 // Liaisons NaN
6420     foreach ($this->liaisons_nan as $liaison_nan) {
6421     // Suppression des liaisons table NaN
6422     $this->supprimer_liaisons_table_nan($liaison_nan["table_l"]);
6423     // Ajout des liaisons table Nan
6424     $nb_liens = $this->ajouter_liaisons_table_nan(
6425     $liaison_nan["table_l"],
6426     $liaison_nan["table_f"],
6427     $liaison_nan["field"],
6428     $val[$liaison_nan["field"]]
6429     );
6430     // Message de confirmation
6431     if ($nb_liens > 0) {
6432     $this->addToMessage(__("Mise à jour des liaisons realisée avec succès."));
6433     }
6434     }
6435    
6436 softime 6565 // Mise à jour DA si miroir du DI
6437     $inst_da = $this->get_inst_dossier_autorisation($this->getVal('dossier_autorisation'));
6438     if ($inst_da->is_dossier_autorisation_visible() === false) {
6439 softime 8640 $params = array(
6440     'di_id' => $this->getVal($this->clePrimaire),
6441     );
6442     if ($inst_da->majDossierAutorisation($params) === false) {
6443 softime 6565 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
6444     return false;
6445     }
6446     }
6447 fmichon 4708
6448     /**
6449     * Interface avec le référentiel ERP.
6450     *
6451     * (WS->ERP)[101] ERP Qualifié -> AT
6452     * Déclencheur :
6453     * - L'option ERP est activée
6454     * - Le dossier est de type AT
6455     * - Le dossier est marqué comme "connecté au référentiel ERP"
6456     * - Le formulaire de modification du dossier est validé avec le
6457     * marqueur "à qualifier" à "NON" alors qu'il était précédemment à
6458     * "OUI"
6459     */
6460 softime 8989 //
6461 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
6462 fmichon 4708 && $this->is_connected_to_referentiel_erp() === true
6463     && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__at')
6464     && $this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false) {
6465 softime 4740 // Récupère la liste des contraintes
6466     $contraintes_plu_list = $this->getListContrainte($this->valF['dossier'], false);
6467     // Extrait les libellés de chaque contraintes
6468     $contraintes_plu = array();
6469     $contraintes_plu_string = "";
6470 softime 14542 foreach ($contraintes_plu_list as $row) {
6471 softime 4740 //
6472     $contraintes_plu[] = $row['contrainte_libelle'];
6473     }
6474     // Chaîne de caractère listant toutes les contraintes du dossier
6475     $contraintes_plu_string = implode(' ; ', $contraintes_plu);
6476 nhaye 6052 $competence = "";
6477     if ($this->valF['autorite_competente'] !== null) {
6478     $inst_ac = $this->get_inst_autorite_competente($this->valF['autorite_competente']);
6479     $competence = $inst_ac->getVal("libelle");
6480     }
6481 fmichon 4708 //
6482     $infos = array(
6483     "dossier_instruction" => $this->valF['dossier'],
6484 nhaye 6052 "competence" => $competence,
6485 softime 4740 "contraintes_plu" => $contraintes_plu_string,
6486 fmichon 4708 "references_cadastrales" => $this->getReferenceCadastrale($this->valF['dossier']),
6487     );
6488     //
6489     $ret = $this->f->send_message_to_referentiel_erp(101, $infos);
6490     if ($ret !== true) {
6491     $this->cleanMessage();
6492     $this->addToMessage(_("Une erreur s'est produite lors de la notification (101) du référentiel ERP. Contactez votre administrateur."));
6493     return false;
6494 mbroquet 3730 }
6495 fmichon 4708 $this->addToMessage(_("Notification (101) du référentiel ERP OK."));
6496     }
6497 mbroquet 3730
6498 fmichon 4708 /**
6499     * Interface avec le référentiel ERP.
6500     *
6501     * (WS->ERP)[102] Demande de complétude de dossier PC pour un ERP -> PC qui concerne un ERP
6502     * (WS->ERP)[103] Demande de qualification de dossier PC pour un ERP -> PC qui concerne un ERP
6503     * Déclencheur :
6504     * - L'option ERP est activée
6505     * - Le dossier est de type PC
6506     * - Le formulaire de modification du dossier est validé avec le
6507     * marqueur "à qualifier" à "NON" alors qu'il était précédemment à
6508     * "OUI"
6509     * - Le formulaire de modification du dossier est validé avec le
6510     * marqueur "ERP" à "OUI"
6511     */
6512     //
6513 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
6514 fmichon 4708 && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
6515     && $this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false
6516     && $this->valF['erp'] == true) {
6517     //
6518     $infos = array(
6519     "dossier_instruction" => $this->valF['dossier'],
6520     );
6521     // [102] Demande de complétude de dossier PC pour un ERP
6522     $ret = $this->f->send_message_to_referentiel_erp(102, $infos);
6523     if ($ret !== true) {
6524     $this->cleanMessage();
6525     $this->addToMessage(_("Une erreur s'est produite lors de la notification (102) du référentiel ERP. Contactez votre administrateur."));
6526     return false;
6527     }
6528     $this->addToMessage(_("Notification (102) du référentiel ERP OK."));
6529     // [103] Demande de qualification de dossier PC pour un ERP
6530     $ret = $this->f->send_message_to_referentiel_erp(103, $infos);
6531     if ($ret !== true) {
6532     $this->cleanMessage();
6533     $this->addToMessage(_("Une erreur s'est produite lors de la notification (103) du référentiel ERP. Contactez votre administrateur."));
6534     return false;
6535     }
6536     $this->addToMessage(_("Notification (103) du référentiel ERP OK."));
6537     }
6538    
6539     /**
6540 softime 6272 * Interface avec le référentiel ERP.
6541     *
6542     * (WS->ERP)[114] ERP Qualifié -> PC
6543     * Déclencheur :
6544     * - l'option ERP est activée
6545     * - ET le dossier est marqué comme "connecté au référentiel ERP"
6546     * - ET le dossier est de type PC
6547     * - ET
6548     * - soit le formulaire de modification du dossier est validé avec le
6549     * marqueur "enjeu_urba" qui change de statut
6550     * - soit ce marqueur est vrai et le dossier passe à qualifié
6551     */
6552     // Étant donné que l'objet a été modifié en base après sa création,
6553     // il faut le ré-instancier pour récupérer ses informations.
6554 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
6555     "obj" => "dossier",
6556     "idx" => $this->valF['dossier'],
6557     ));
6558 softime 7366 if ($dossier->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
6559 softime 6272 && $dossier->is_connected_to_referentiel_erp() === true
6560     && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
6561     && (($this->getVal('enjeu_urba') == 't') != $this->valF['enjeu_urba']
6562     || ($this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false
6563     && $this->getVal('enjeu_urba') == 't'))) {
6564    
6565     $enjeu = "non";
6566     if ($this->valF['enjeu_urba']) {
6567     $enjeu = "oui";
6568     }
6569    
6570     $infos = array(
6571     "dossier_instruction" => $this->valF['dossier'],
6572     "Dossier à enjeu ADS" => $enjeu
6573     );
6574     //
6575     $ret = $this->f->send_message_to_referentiel_erp(114, $infos);
6576     if ($ret !== true) {
6577     $this->cleanMessage();
6578     $this->addToMessage(_("Une erreur s'est produite lors de la notification (114) du référentiel ERP. Contactez votre administrateur."));
6579     return false;
6580     }
6581     $this->addToMessage(_("Notification (114) du référentiel ERP OK."));
6582     }
6583    
6584     /**
6585 fmichon 4708 * Gestion des demandeurs liés.
6586     */
6587 mbroquet 3730 // Ajout ou modification des demandeurs
6588 softime 8989 $this->insertLinkDossierDemandeur();
6589 mbroquet 3730
6590 fmichon 4708 /**
6591     * Gestion des références cadastrales / parcelles liées.
6592     */
6593 mbroquet 3730 // Si le champ des références cadastrales n'est pas vide
6594     if ($this->getVal('terrain_references_cadastrales')
6595     != $this->valF['terrain_references_cadastrales']) {
6596    
6597     // On supprime toutes les lignes de la table dossier_parcelle qui
6598     // font référence le dossier en cours de modification
6599     $this->supprimer_dossier_parcelle($val['dossier']);
6600    
6601     // Ajout des parcelles dans la table dossier_parcelle
6602     $this->ajouter_dossier_parcelle($val['dossier'],
6603     $val['terrain_references_cadastrales']);
6604    
6605     }
6606    
6607 fmichon 4708 /**
6608     * Gestion des taxes.
6609     */
6610 softime 6929 // Si le champ tax_secteur est modifié et que l'option de simulation des
6611     // taxes est activée
6612     if ($this->getVal('tax_secteur') != $this->valF['tax_secteur']
6613     && $this->f->is_option_simulation_taxes_enabled($this->getVal('om_collectivite')) === true) {
6614 mbroquet 3730
6615     // Valeurs pour le calcul de la taxe d'aménagement
6616 softime 6929 $values = array();
6617     // Instance de la classe donnees_techniques
6618     $donnees_techniques = $this->get_inst_donnees_techniques();
6619     // Récupère les valeurs des données techniques
6620     $values = $donnees_techniques->get_form_val();
6621 mbroquet 3730
6622     // Met à jour les montants du dossier
6623 softime 6929 $update_dossier_tax_mtn = $this->update_dossier_tax_mtn($this->valF['tax_secteur'], $values);
6624     if ($update_dossier_tax_mtn === false) {
6625 mbroquet 3730 //
6626     $this->addToMessage(_("La mise a jour des montants de la simulation de la taxe d'amenagement a echouee."));
6627 softime 6929 //
6628 mbroquet 3730 return false;
6629     }
6630     }
6631    
6632 softime 6272 /**
6633     * Gestion des métadonées des pièces liés.
6634     * Vérifie les méthodes à exécuter configurées dans le connecteur du
6635     * filestorage.
6636     */
6637 mbroquet 3730 //
6638 softime 6272 $ret = $this->post_update_metadata($val);
6639     //
6640     if ($ret === false) {
6641     //
6642     $this->cleanMessage();
6643     $this->addToMessage(_("La mise à jour des métadonnées des pièces liées à ce dossier a échouée."));
6644     return false;
6645     }
6646    
6647 softime 7366 /**
6648     * Gestion des du changement de date de dépôt.
6649     * Vérification préalable de la présence de la date et de sa
6650     * modification.
6651     */
6652 softime 6272 //
6653 softime 7366 if (array_key_exists("date_depot", $val) === true) {
6654     //
6655 softime 7540 $inst_new_date = DateTime::createFromFormat('d/m/Y', $val["date_depot"]);
6656     $inst_old_date = DateTime::createFromFormat('Y-m-d', $this->getVal("date_depot"));
6657     $new_date = $inst_new_date->format('d/m/Y');
6658     $old_date = $inst_old_date->format('d/m/Y');
6659 softime 7366
6660     //
6661     if ($new_date !== $old_date) {
6662     //
6663     $status = $this->update_date_depot($val["date_depot"]);
6664     //
6665     if ($status === false) {
6666     //
6667     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
6668     return false;
6669     }
6670    
6671     }
6672     }
6673 softime 10573
6674     /**
6675     * Gestion de la normalisation de l'adresse.
6676     * En cas de modification de l'adresse du terrain, l'adresse normalisée
6677     * est supprimée.
6678     */
6679     $list_address_keys = array(
6680     'terrain_adresse_voie_numero',
6681     'terrain_adresse_voie',
6682     'terrain_adresse_lieu_dit',
6683     'terrain_adresse_localite',
6684     'terrain_adresse_code_postal',
6685     'terrain_adresse_bp',
6686     'terrain_adresse_cedex',
6687     );
6688     $change = false;
6689     foreach ($list_address_keys as $key) {
6690     if (array_key_exists($key, $val) === true
6691     && $val[$key] !== $this->getVal($key)) {
6692     //
6693     $change = true;
6694     break;
6695     }
6696     }
6697     if ($change === true) {
6698     $this->normalize_address();
6699     }
6700    
6701     if ($this->f->is_option_mode_service_consulte_enabled() === false
6702 softime 10808 && $this->f->is_type_dossier_platau($this->valF['dossier_autorisation']) === true
6703     && $this->getVal('etat_transmission_platau') !== 'jamais_transmissible') {
6704 softime 13137
6705     $trigger_platau_required_fields = $this->trigger_platau_required_fields($this->valF['dossier']);
6706     // Gestion de l'erreur
6707     if (! $trigger_platau_required_fields) {
6708     $this->addToMessage(sprintf('%s %s',
6709     __("Une erreur s'est produite lors de la mise à jour de l'état de transmission du dossier."),
6710     __("Veuillez contacter votre administrateur.")
6711     ));
6712     $this->correct = false;
6713     return false;
6714     }
6715 softime 10573 }
6716    
6717     /**
6718     * Gestion des tâches pour la dématérialisation
6719     */
6720     // Qualification du dossier d'instruction
6721     if ($this->getVal('instructeur') != $this->valF['instructeur']
6722     || $this->getVal('division') != $this->valF['division']) {
6723     //
6724 softime 10808 if ($this->f->is_type_dossier_platau($this->valF['dossier_autorisation'])
6725     && $this->valF['etat_transmission_platau'] !== 'jamais_transmissible'
6726     && ($this->f->is_option_mode_service_consulte_enabled() !== true
6727     || ($this->f->is_option_mode_service_consulte_enabled() === true
6728 softime 13137 && ($this->get_source_depot_from_demande() === PLATAU
6729     || $this->get_source_depot_from_demande() === PORTAL)))) {
6730 softime 10573 //
6731     $inst_task = $this->f->get_inst__om_dbform(array(
6732     "obj" => "task",
6733     "idx" => 0,
6734     ));
6735     $task_val = array(
6736     'type' => 'qualification_DI',
6737     'object_id' => $id,
6738     'dossier' => $id,
6739     );
6740     if ($this->f->is_option_mode_service_consulte_enabled() === false
6741     && $this->valF['etat_transmission_platau'] === 'non_transmissible'
6742     || $this->valF['etat_transmission_platau'] === 'transmis_mais_non_transmissible') {
6743     $task_val['state'] = $inst_task::STATUS_DRAFT;
6744     }
6745     $add_task = $inst_task->add_task(array('val' => $task_val));
6746     if ($add_task === false) {
6747     $this->addToMessage(sprintf('%s %s',
6748     __("Une erreur s'est produite lors de la création tâche."),
6749     __("Veuillez contacter votre administrateur.")
6750     ));
6751     $this->correct = false;
6752     return false;
6753     }
6754     }
6755     }
6756     // Modification du dossier d'instruction
6757     if ($this->f->is_type_dossier_platau($this->valF['dossier_autorisation'])
6758 softime 10808 && $this->valF['etat_transmission_platau'] !== 'jamais_transmissible'
6759 softime 10573 && ($this->f->is_option_mode_service_consulte_enabled() !== true
6760     || ($this->f->is_option_mode_service_consulte_enabled() === true
6761 softime 13137 && ($this->get_source_depot_from_demande() === PLATAU
6762     || $this->get_source_depot_from_demande() === PORTAL)))) {
6763 softime 10573 //
6764     $inst_task = $this->f->get_inst__om_dbform(array(
6765     "obj" => "task",
6766     "idx" => 0,
6767     ));
6768     $task_val = array(
6769     'type' => 'modification_DI',
6770     'object_id' => $id,
6771     'dossier' => $id,
6772     );
6773     // Change l'état de la tâche de notification en fonction de l'état de
6774     // transmission du dossier d'instruction
6775     if ($this->f->is_option_mode_service_consulte_enabled() === false
6776     && $this->valF['etat_transmission_platau'] === 'non_transmissible'
6777     || $this->valF['etat_transmission_platau'] === 'transmis_mais_non_transmissible') {
6778     //
6779     $task_val['state'] = $inst_task::STATUS_DRAFT;
6780     }
6781     $add_task = $inst_task->add_task(array('val' => $task_val));
6782     if ($add_task === false) {
6783     $this->addToMessage(sprintf('%s %s',
6784     __("Une erreur s'est produite lors de la création tâche."),
6785     __("Veuillez contacter votre administrateur.")
6786     ));
6787     $this->correct = false;
6788     return false;
6789     }
6790     // XXX Les données du DA sont mises à jour seulement lors de l'ajout ou modification
6791     // d'une instruction du DI initial et lors de la décision sur le DI non initial.
6792     // Sachant ce comportement, voir si cette tâche modification_DA est bien située.
6793 softime 10968 // $inst_task = $this->f->get_inst__om_dbform(array(
6794     // "obj" => "task",
6795     // "idx" => 0,
6796     // ));
6797     // $task_val = array(
6798     // 'type' => 'modification_DA',
6799     // 'object_id' => $this->getVal('dossier_autorisation'),
6800     // 'dossier' => $this->getVal('dossier_autorisation'),
6801     // );
6802     // // Change l'état de la tâche de notification en fonction de l'état de
6803     // // transmission du dossier d'instruction
6804     // if ($this->f->is_option_mode_service_consulte_enabled() === false
6805     // && $this->valF['etat_transmission_platau'] === 'non_transmissible'
6806     // || $this->valF['etat_transmission_platau'] === 'transmis_mais_non_transmissible') {
6807     // //
6808     // $task_val['state'] = $inst_task::STATUS_DRAFT;
6809     // }
6810     // $add_task = $inst_task->add_task(array('val' => $task_val));
6811     // if ($add_task === false) {
6812     // $this->addToMessage(sprintf('%s %s',
6813     // __("Une erreur s'est produite lors de la création tâche."),
6814     // __("Veuillez contacter votre administrateur.")
6815     // ));
6816     // $this->correct = false;
6817     // return false;
6818     // }
6819 softime 10573 }
6820    
6821 softime 7366 //
6822 mbroquet 3730 return true;
6823     }
6824    
6825 softime 7366 /**
6826 softime 8989 * TRIGGER - triggermodifier.
6827     *
6828     * @return boolean
6829 softime 7366 */
6830 softime 8989 function triggermodifier($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
6831     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
6832 softime 7366 // Si la date de dépôt a changé et si elle valait celle du dernier dépôt
6833     // alors cette dernière prend également sa valeur
6834     if ($this->f->formatDate($this->getVal('date_depot')) !== $val['date_depot']
6835     && $this->f->formatDate($this->getVal('date_depot')) === $this->f->formatDate($this->getVal('date_dernier_depot'))) {
6836     $this->valF['date_dernier_depot'] = $this->valF['date_depot'];
6837     }
6838     //
6839     return true;
6840     }
6841    
6842 mbroquet 3730 /**
6843 softime 7366 * Methode de traitement suite à la modification de la date de dépot.
6844     *
6845     * @param string $new_date_str Nouvelle date de dépot.
6846     *
6847     * @return boolean
6848     */
6849     function update_date_depot($new_date_str) {
6850     $demande = $this->get_inst_demande();
6851 softime 10573 // TODO: should return null instead of false
6852 softime 7366 if ($demande === false) {
6853     return false;
6854     }
6855    
6856     $retour = $this->majDateInstruction($demande->getVal("instruction_recepisse"), $new_date_str);
6857     if ($retour === false) {
6858     return false;
6859     }
6860 softime 11876
6861 softime 7366 $valF = array();
6862     foreach ($demande->champs as $id => $champ) {
6863     $valF[$champ] = $demande->val[$id];
6864     }
6865     $valF['date_demande'] = $new_date_str;
6866 softime 8989 $modification = $demande->modifier($valF);
6867 softime 7366 if ($modification === false) {
6868     return false;
6869     }
6870    
6871     $row_date = array("date_demande" => $new_date_str);
6872 softime 8989 $res = $this->f->db->autoExecute(
6873 softime 7366 DB_PREFIXE."dossier",
6874     $row_date,
6875     DB_AUTOQUERY_UPDATE,
6876     "dossier = '".$this->getVal("dossier")."'"
6877     );
6878     $this->f->addToLog(__METHOD__ . "() : db->autoExecute(" . $res . ")", VERBOSE_MODE);
6879     if ($this->f->isDatabaseError($res, true)) {
6880     return false;
6881     }
6882    
6883 softime 7541 // Si c'est un dossier d'instruction initial
6884 softime 14064 $di_version = $this->get_di_numero_suffixe();
6885 softime 7541 if ($di_version === 0 || $di_version === '0') {
6886     //
6887     $row_date = array("depot_initial" => $new_date_str);
6888 softime 8989 $res = $this->f->db->autoExecute(
6889 softime 7541 DB_PREFIXE."dossier_autorisation",
6890     $row_date,
6891     DB_AUTOQUERY_UPDATE,
6892     "dossier_autorisation = '" . $this->getVal("dossier_autorisation") . "'"
6893     );
6894     $this->f->addToLog(__METHOD__ . "() : db->autoExecute(" . $res . ")", VERBOSE_MODE);
6895     if ($this->f->isDatabaseError($res, true)) {
6896     return false;
6897     }
6898 softime 7366 }
6899     }
6900    
6901    
6902     /**
6903     * Met à jour l'instruction en fonction de la nouvelle date
6904     * ou retourne false si il ya une erreur.
6905     *
6906     * @param integer $instruction_id Identifiant de l'instruction.
6907     * @param string $date_depot Nouvelle date de dépôt.
6908     *
6909     * @return boolean
6910     */
6911     public function majDateInstruction($instruction_id, $date_depot) {
6912    
6913     // Definalise l'instruction de récépissé si nécessaire
6914 softime 7996 $instruction = $this->f->get_inst__om_dbform(array(
6915     "obj" => "instruction",
6916     "idx" => $instruction_id,
6917     ));
6918 softime 7366 $instruction->setParameter('maj', 110);
6919     //
6920     if ($instruction->is_unfinalizable_without_bypass() === true
6921     && $instruction->unfinalize($instruction->valF) === false) {
6922     return false;
6923     }
6924    
6925     // Modifie la date d'événement
6926     $instruction->setParameter('maj', 1);
6927     //
6928     $valF = array();
6929     foreach ($instruction->champs as $id => $champ) {
6930     $valF[$champ] = $instruction->getVal($champ);
6931     }
6932     //
6933     $valF['date_evenement'] = $date_depot;
6934     $valF['date_finalisation_courrier'] = null;
6935     //
6936 softime 8989 $modification = $instruction->modifier($valF);
6937 softime 7366 //
6938     if ($modification === false) {
6939     return false;
6940     }
6941    
6942     // Finalise l'instruction
6943     $instruction->setParameter('maj', 100);
6944     if ($instruction->finalize($instruction->valF) === false) {
6945     return false;
6946     }
6947    
6948     //
6949     return true;
6950     }
6951    
6952     /**
6953 softime 10573 * TODO: replace with '$this->f->findObjectById' ?
6954     *
6955 softime 6272 * Récupère l'instance de l'autorité compétente.
6956     *
6957     * @param string $autorite_competente Identifiant de l'autorité compétente.
6958     *
6959     * @return object
6960     */
6961     function get_inst_autorite_competente($autorite_competente = null) {
6962     //
6963     return $this->get_inst_common("autorite_competente", $autorite_competente);
6964     }
6965    
6966    
6967     /**
6968 softime 6929 * Met à jour les montants des taxes du dossier d'instruction.
6969 mbroquet 3730 *
6970 softime 6929 * @param integer $tax_secteur Secteur communal.
6971     * @param array $val Valeurs des données techniques.
6972 mbroquet 3730 *
6973     * @return boolean
6974     */
6975 softime 6929 public function update_dossier_tax_mtn($tax_secteur, $val = array()) {
6976 mbroquet 3730 // Instance du paramétrage de la taxe d'aménagement
6977     $taxe_amenagement = $this->get_inst_taxe_amenagement();
6978    
6979 softime 6929 // Liste des montants à mettre à jour
6980     $valF = array();
6981     $valF['tax_mtn_part_commu'] = null;
6982     $valF['tax_mtn_part_depart'] = null;
6983     $valF['tax_mtn_part_reg'] = null;
6984     $valF['tax_mtn_total'] = null;
6985     $valF['tax_mtn_rap'] = null;
6986     $valF['tax_mtn_part_commu_sans_exo'] = null;
6987     $valF['tax_mtn_part_depart_sans_exo'] = null;
6988     $valF['tax_mtn_part_reg_sans_exo'] = null;
6989     $valF['tax_mtn_total_sans_exo'] = null;
6990     $valF['tax_mtn_rap_sans_exo'] = null;
6991 mbroquet 3730
6992 softime 6929 // Si le tableau des valeurs n'est pas vide
6993     if ($val !== array()) {
6994 mbroquet 3730
6995 softime 6929 // Si le taux communal est renseigné
6996     if ($taxe_amenagement->getVal('tx_comm_secteur_'.$tax_secteur) !== null
6997     && $taxe_amenagement->getVal('tx_comm_secteur_'.$tax_secteur) !== '') {
6998 mbroquet 3730
6999 softime 6929 // Calcul de la TA
7000     $calcul_ta = $taxe_amenagement->compute_ta($tax_secteur, $val);
7001    
7002     // Si chaque résultat est calculable
7003     if ($calcul_ta !== null && is_array($calcul_ta) === true) {
7004    
7005     // Total des parts de la TA avec exonération
7006     $total_ta = $calcul_ta['commu'] + $calcul_ta['depart'] + $calcul_ta['reg'];
7007     $total_ta_ss_exo = $calcul_ta['commu_ss_exo'] + $calcul_ta['depart_ss_exo'] + $calcul_ta['reg_ss_exo'];
7008    
7009     // Valeurs à mettre à jour, les montants doivent être à l'entier
7010     // inférieur
7011 softime 13528 $valF['tax_mtn_part_commu'] = floor(floatval($calcul_ta['commu']));
7012     $valF['tax_mtn_part_depart'] = floor(floatval($calcul_ta['depart']));
7013     $valF['tax_mtn_part_reg'] = floor(floatval($calcul_ta['reg']));
7014     $valF['tax_mtn_total'] = floor(floatval($total_ta));
7015     $valF['tax_mtn_part_commu_sans_exo'] = floor(floatval($calcul_ta['commu_ss_exo']));
7016     $valF['tax_mtn_part_depart_sans_exo'] = floor(floatval($calcul_ta['depart_ss_exo']));
7017     $valF['tax_mtn_part_reg_sans_exo'] = floor(floatval($calcul_ta['reg_ss_exo']));
7018     $valF['tax_mtn_total_sans_exo'] = floor(floatval($total_ta_ss_exo));
7019 softime 6929 }
7020     }
7021    
7022     // Calcul de la RAP
7023     $calcul_rap = $taxe_amenagement->compute_rap($val);
7024    
7025     // Si chaque résultat est calculable
7026     if ($calcul_rap !== null && is_array($calcul_rap) === true) {
7027    
7028     // RAP avec exonération
7029     $mtn_rap = $calcul_rap['rap'];
7030     // RAP sans exonération
7031     $mtn_rap_ss_exo = $calcul_rap['rap_ss_exo'];
7032    
7033     // Valeurs à mettre à jour, les montants doivent être à l'entier
7034     // inférieur
7035 softime 13528 $valF['tax_mtn_rap'] = floor(floatval($mtn_rap));
7036     $valF['tax_mtn_rap_sans_exo'] = floor(floatval($mtn_rap_ss_exo));
7037 softime 6929 }
7038 mbroquet 3730 }
7039    
7040     // Met à jour l'enregistrement de dossier
7041 softime 8989 $res = $this->f->db->autoExecute(
7042 softime 6929 DB_PREFIXE.$this->table,
7043     $valF,
7044     DB_AUTOQUERY_UPDATE,
7045     $this->clePrimaire ."='".$this->getVal($this->clePrimaire)."'"
7046     );
7047 mbroquet 3730 // Log
7048     $this->f->addToLog(__METHOD__."() : db->autoExecute(".$res.")", VERBOSE_MODE);
7049     //
7050     if ($this->f->isDatabaseError($res, true)) {
7051     //
7052     $this->correct = false;
7053     return false;
7054     }
7055    
7056     //
7057     return true;
7058     }
7059    
7060 softime 8477 /**
7061 softime 8989 * TRIGGER - triggersupprimer.
7062 softime 8477 *
7063     * @return boolean
7064     */
7065 softime 8989 function triggersupprimer($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
7066     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
7067 softime 6929
7068 softime 12654 // Permet de récupérer la le type de demande pour la gestion du numéro de dossier.
7069     $inst_demande = $this->get_inst_demande();
7070     $this->val['demande_type'] = $inst_demande->getVal('demande_type');
7071    
7072 softime 8477 /**
7073     * Gestion de la suppression des tables liées au dossier d'instruction.
7074     * Les fichiers potentiellement liés aux tables ne sont pas supprimés.
7075     */
7076 softime 13528 if (! isset($this->related_tables)) {
7077     $this->set_related_tables();
7078     }
7079 softime 8477 // Supprime les enregistrements des tables
7080 softime 13528 $delete = $this->delete_related_tables($this->related_tables);
7081 softime 8477 if ($delete === false) {
7082     return false;
7083     }
7084    
7085     //
7086     return true;
7087     }
7088    
7089 mbroquet 3730 /**
7090 softime 8989 * TRIGGER - triggersupprimerapres.
7091 softime 8477 *
7092     * @return boolean
7093 mbroquet 3730 */
7094 softime 8989 function triggersupprimerapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
7095     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
7096 mbroquet 3730
7097 softime 8477 /**
7098     * Gestion de la suppression des tables liées au dossier d'instruction.
7099     * Dans le cas d'un dossier d'instruction initial le dossier
7100     * d'autorisation est également supprimé pour libérer la numéroration.
7101     * S'il s'agit d'un dossier d'instruction sur exsitant alors le dossier
7102     * d'autorisation est mise à jour.
7103     * Les fichiers potentiellement liés aux tables ne sont pas supprimés.
7104     */
7105     // S'il s'agit d'une suppression de dossier d'instruction sur existant
7106     if ($this->has_only_initial_di(true) === false) {
7107     // Mise à jour des données du dossier d'autorisation
7108     $da = $this->f->get_inst__om_dbform(array(
7109     "obj" => "dossier_autorisation",
7110     "idx" => $this->getVal("dossier_autorisation"),
7111     ));
7112     $da->majDossierAutorisation();
7113 mbroquet 3730
7114 softime 8477 } else {
7115     // S'il s'agit d'une suppression de dossier d'instruction initial
7116     // Tableau pour la conception des requêtes de suppression
7117     $related_tables = array(
7118     'lien_dossier_autorisation_demandeur' => array(
7119     'condition_field' => 'dossier_autorisation',
7120     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
7121     ),
7122     'dossier_autorisation_parcelle' => array(
7123     'condition_field' => 'dossier_autorisation',
7124     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
7125     ),
7126     'donnees_techniques' => array(
7127     'condition_field' => 'dossier_autorisation',
7128     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
7129     ),
7130     'dossier_autorisation' => array(
7131     'condition_field' => 'dossier_autorisation',
7132     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
7133     ),
7134     );
7135     // Supprime les tables
7136     $delete = $this->delete_related_tables($related_tables);
7137     if ($delete === false) {
7138     return false;
7139     }
7140    
7141 softime 13528 // Compose le nom de la séquence
7142 softime 14064 $seq_name = null;
7143 softime 13528 $datc = $this->getVal('numerotation_type');
7144     $annee = $this->getVal('annee');
7145     $dep = $this->getVal('numerotation_dep');
7146     $com = $this->getVal('numerotation_com');
7147 softime 14064 // TODO si les tests se déroulent bien;
7148     // - supprimer la création manuelle de la séquence avec 'sprintf(...)'
7149     // - conserver uniquement l'usage de 'compose_sequence_name(...)'
7150     if (! empty($datc) && ! empty($annee) && ! empty($dep) && ! empty($com)) {
7151     $seq_name = strtolower(sprintf(
7152 softime 13528 '%sdossier_%s_%s_%s_%s_seq',
7153     DB_PREFIXE,
7154     $datc,
7155     $annee,
7156     $dep,
7157     $com
7158 softime 14064 ));
7159     $alt_seq_name = $this->compose_sequence_name($datc, $annee, $dep, $com);
7160     if ($seq_name != $alt_seq_name) {
7161     throw new RuntimeException("Sequence names differs ($seq_name != $alt_seq_name) for $id");
7162     }
7163     }
7164    
7165     // si il manque l'une des données, c'est que le dossier a un numéro qui ne respecte pas
7166     // la norme urbanisme et donc on a pas su le décomposer lors de la création du dossier
7167     // (moment où ces données sont renseignées) et la séquence (qui utilise ces données) n'a
7168     // pas pu être constituée et donc pas incrémentée lors de la création du dossier.
7169     // C'est pourquoi il ne faut pas modifier la séquence non-plus lors de la suppression.
7170     else {
7171     foreach(array('numerotation_type', 'annee', 'numerotation_dep', 'numerotation_com') as $key) {
7172     if (empty($this->getVal($key) )) {
7173     $this->f->addToLog("Valeur vide pour le champ '$key' du dossier $id", VERBOSE_MODE);
7174     }
7175     }
7176     }
7177 softime 13528 // Instancie le dossier d'autorisation sans identifiant
7178     $da = $this->f->get_inst__om_dbform(array(
7179     "obj" => "dossier_autorisation",
7180     "idx" => 0,
7181     ));
7182 softime 10573
7183 softime 13528 // Si la séquence a pu être composée et que celle-ci existe
7184     if (! empty($seq_name ) && $da->doesNumeroDossierSequenceExists($seq_name) === true){
7185 softime 12654 /**
7186     * Mise à jour de la séquence.
7187     */
7188 softime 14064 $curr_da_num = $da->getMaxDANumeroDossier($datc, $annee, $dep, $com);
7189 softime 12654 if (is_integer($curr_da_num) !== true) {
7190     $this->addToMessage(__('Erreur lors du calcul du numéro de dossier.'));
7191     return false;
7192     }
7193 softime 10573
7194 softime 12654 // Dans le cas de la suppression du dernier dossier d'instruction de
7195     // sa numérotation alors la séquence est supprimée
7196     if ($curr_da_num === 0) {
7197     $table_name = substr($seq_name, 0, -4);
7198     $res = $this->f->db->dropSequence($table_name);
7199 softime 13137 $this->f->addToLog(__METHOD__."(): db->dropSequence(\"".$table_name."\");", VERBOSE_MODE);
7200 softime 12654 $this->f->isDatabaseError($res);
7201     } else {
7202     // La méthode setval avec la valeur true en troisième argument
7203     // signifie que le prochain nextval avancera la séquence avant
7204     // de renvoyer une valeur.
7205 softime 14542 // TODO : cette requête ne sert pas à récupérer des résultats mais
7206     // juste à mettre à un numéro de séquence. Voir si il n'est pas judicieux
7207     // d'avoir une autre méthode plutôt qu'un get_result pour ce genre de cas
7208     $this->f->get_all_results_from_db_query(
7209     sprintf(
7210     'SELECT
7211     setval(\'%s\', %s, true)',
7212     $this->f->db->escapeSimple($seq_name),
7213     $this->f->db->escapeSimple($curr_da_num)
7214     ),
7215     array(
7216     'origin' => __METHOD__
7217     )
7218 softime 12654 );
7219     }
7220 softime 8477 }
7221 softime 13137 // Si le dossier n'est pas décomposable et donc que la séquence du dossier n'a pas
7222 softime 14064 // été mise à jour
7223 softime 13137 else {
7224 softime 14064 $id_di = $this->getVal($this->clePrimaire);
7225    
7226     // si l'option de saisie complète du numéro de dossier n'est pas activée, c'est un
7227     // bug (ou défaut de paramétrage)
7228     if (! $this->f->is_option_dossier_saisie_numero_complet_enabled($this->getVal('om_collectivite'))) {
7229     throw new RuntimeException(
7230     "Le dossier supprimé '$id_di' n'a pas de séquence correspondante, ".
7231     "alors que l'option 'dossier_saisie_numero_complet' n'est pas activée: BUG ?!");
7232     }
7233    
7234     // ajoute un message de log pour avoir un suivi
7235 softime 13137 $this->f->addToLog(
7236 softime 14064 __METHOD__."(): INFO: le dossier '$id_di' n'étant pas à la norme urba, ".
7237     "la séquence correspondante n'a pas besoin d'être mise à jour.",
7238     DEBUG_MODE
7239 softime 13137 );
7240     }
7241 softime 8477 }
7242    
7243     /**
7244     * Supprime le dossier d'instruction des derniers dossiers consultés,
7245     * sauvegardé en session
7246     */
7247     if (isset($_SESSION['dossiers_consulte']) !== false) {
7248     $id_di = $this->getVal($this->clePrimaire);
7249     if (in_array($id_di, $_SESSION['dossiers_consulte']) === true) {
7250     unset($_SESSION['dossiers_consulte'][$id_di]);
7251     }
7252     // Supprime le tableau s'il n'y a plus de dossier consulté
7253     if (count($_SESSION['dossiers_consulte']) === 0) {
7254     unset($_SESSION['dossiers_consulte']);
7255     }
7256     }
7257 softime 10573
7258     /**
7259     * Gestion des tâches pour la dématérialisation
7260     */
7261     $inst_task_empty = $this->f->get_inst__om_dbform(array(
7262     "obj" => "task",
7263     "idx" => 0,
7264     ));
7265     $task_types = array(
7266     "creation_DI",
7267     "depot_DI",
7268     );
7269     foreach ($task_types as $task_type) {
7270     $task_exists = $inst_task_empty->task_exists($task_type, $id);
7271     if ($task_exists !== false) {
7272     $inst_task = $this->f->get_inst__om_dbform(array(
7273     "obj" => "task",
7274     "idx" => $task_exists,
7275     ));
7276     if ($inst_task->getVal('state') === $inst_task::STATUS_NEW || $inst_task->getVal('state') === $inst_task::STATUS_DRAFT) {
7277     $task_val = array(
7278     'state' => $inst_task::STATUS_CANCELED,
7279     );
7280     $update_task = $inst_task->update_task(array('val' => $task_val));
7281     if ($update_task === false) {
7282     $this->addToMessage(sprintf('%s %s',
7283     sprintf(__("Une erreur s'est produite lors de la modification de la tâche %."), $inst_task->getVal($inst_task->clePrimaire)),
7284     __("Veuillez contacter votre administrateur.")
7285     ));
7286     $this->correct = false;
7287     return false;
7288     }
7289     }
7290     }
7291     }
7292    
7293     return true;
7294 mbroquet 3730 }
7295 softime 8477
7296 mbroquet 3730 /**
7297 softime 8477 * TREATMENT - delete_related_tables.
7298     *
7299     * Suppression par requête SQL les enregistrements des tables passées en
7300     * paramètre.
7301     *
7302     * @param array $related_tables Liste des enregistrements à supprimer
7303     *
7304     * @return boolean
7305     */
7306     function delete_related_tables(array $related_tables) {
7307     $this->begin_treatment(__METHOD__);
7308    
7309     // Supprime chaque enregistrement liés au dossier d'instruction
7310     $template_delete_sql = 'DELETE FROM %s%s WHERE %s IN (%s)';
7311     foreach ($related_tables as $table => $value) {
7312     if (isset($value['table']) === true) {
7313     $table = $value['table'];
7314     }
7315     if ($value['condition_value'] !== '' && $value['condition_value'] !== null) {
7316 softime 13528 $sql = sprintf(
7317     $template_delete_sql,
7318     DB_PREFIXE,
7319     $table,
7320     $value['condition_field'],
7321     $value['condition_value']
7322     );
7323 softime 8477 $res = $this->f->db->query($sql);
7324     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
7325     $this->f->isDatabaseError($res);
7326 softime 14542 }
7327     }
7328 softime 10573
7329 softime 14542 /**
7330     * Gestion des tâches pour la dématérialisation
7331     */
7332    
7333     // Annule toutes les tâches liées au dossier
7334     $inst_task_empty = $this->f->get_inst__om_dbform(array(
7335     "obj" => "task",
7336     "idx" => 0,
7337     ));
7338     $all_task_type = array_merge(task::TASK_TYPE_SI, task::TASK_TYPE_SC);
7339     $search_values = array(
7340     sprintf('(state = \'%s\' OR state = \'%s\')', task::STATUS_NEW, task::STATUS_DRAFT),
7341     isset($related_tables['dossier_autorisation']) === false
7342     ? sprintf(
7343     'type IN (%s) AND (object_id = \'%s\' OR dossier = \'%s\')',
7344     implode( // liste (string) des type de tâches concernés
7345     ',',
7346     array_map(
7347     function ($t) { return "'$t'"; },
7348     array_merge(
7349     task::TASK_TYPE_SI,
7350     task::TASK_TYPE_SC)
7351     )
7352     ),
7353     $this->getVal($this->clePrimaire),
7354     $this->getVal($this->clePrimaire)
7355     )
7356     : sprintf(
7357     '((type IN (%s) AND (object_id = \'%s\' OR dossier = \'%s\'))
7358     OR (type IN (%s) AND object_id = \'%s\'))',
7359     implode( // liste (string) des type de tâches concernés
7360     ',',
7361     array_map(
7362     function ($t) { return "'$t'"; },
7363     array_merge(
7364     task::TASK_TYPE_SI,
7365     task::TASK_TYPE_SC)
7366     )
7367     ),
7368     $this->getVal($this->clePrimaire),
7369     $this->getVal($this->clePrimaire),
7370     "'creation_DA', 'modification_DA'",
7371     $this->getVal('dossier_autorisation')
7372     ),
7373     );
7374     $task_exists = $inst_task_empty->task_exists_multi_search($search_values);
7375     if ($task_exists !== false) {
7376     foreach ($task_exists as $task) {
7377     $inst_task = $this->f->get_inst__om_dbform(array(
7378 softime 10573 "obj" => "task",
7379 softime 14542 "idx" => $task['task'],
7380 softime 10573 ));
7381 softime 14542 $task_val = array(
7382     'state' => task::STATUS_CANCELED,
7383     );
7384     $update_task = $inst_task->update_task(array('val' => $task_val));
7385     if ($update_task === false) {
7386     $this->addToMessage(sprintf('%s %s',
7387     sprintf(__("Une erreur s'est produite lors de la modification de la tâche %."), $inst_task->getVal($inst_task->clePrimaire)),
7388     __("Veuillez contacter votre administrateur.")
7389     ));
7390     $this->correct = false;
7391     return $this->end_treatment(__METHOD__, false);
7392 softime 10573 }
7393 softime 8477 }
7394     }
7395    
7396     return $this->end_treatment(__METHOD__, true);
7397     }
7398    
7399     /**
7400     * CONDITION - has_only_initial_di.
7401     *
7402     * Permet de vérifier qu'il s'agit du dossier d'instruction initial de
7403     * l'autorisation.
7404     *
7405     * @param boolean $after_delete À activer si la méthode est utilisée lors de
7406     * la suppression.
7407     *
7408     * @return boolean
7409     */
7410     function has_only_initial_di($after_delete=false) {
7411    
7412     // Compte le nombre de dossier lié au dossier d'autorisation
7413     $res = $this->get_idx_by_args('COUNT(dossier)', 'dossier', 'dossier_autorisation', $this->getVal('dossier_autorisation'));
7414    
7415     // Si la méthode est utilisé dans le triggersupprimerapres alors le
7416     // dossier d'instruction est déjà supprimé dans la base de données, le
7417     // retour doit donc être 0 pour prouver la suppression du DI initial
7418     if ($after_delete === true) {
7419     if ($res === '0') {
7420     return true;
7421     }
7422     //
7423     return false;
7424     }
7425    
7426     // S'il y a qu'un seul dossier d'instruction alors le DI courant est
7427     // forcément l'initial
7428     if ($res === '1') {
7429     return true;
7430     }
7431     //
7432     return false;
7433     }
7434    
7435     /**
7436 mbroquet 3730 * Retourne la reference cadastrale de la demande attache a un dossier ERP
7437     * specifique
7438     * @param string $dossier L'identifiant du dossier
7439     * @return string|null La reference cadastrale si elle est trouve,
7440     * sinon NULL. En cas d'erreur de la BD, l'execution s'arrete.
7441     */
7442     function getReferenceCadastrale($dossier) {
7443 softime 14542 $qres = $this->f->get_all_results_from_db_query(
7444     sprintf(
7445     'SELECT
7446     terrain_references_cadastrales
7447     FROM
7448     %1$sdemande
7449     WHERE
7450     dossier_instruction = \'%2$s\'
7451     LIMIT 1',
7452     DB_PREFIXE,
7453     $this->f->db->escapeSimple($dossier)
7454     ),
7455     array(
7456     'origin' => __METHOD__,
7457     'force_return' => true
7458     )
7459 softime 12847 );
7460 softime 14542 if ($qres['code'] !== 'OK') {
7461 mbroquet 3730 // Appel de la methode de recuperation des erreurs
7462 softime 14542 // TODO : pas de correspondance pour la méthode getDebugInfo() voir si
7463     // il faut faire évoluer ce code ou si la modif est ok
7464     // Ancien code : $this->erreur_db($res->getDebugInfo(), $res->getMessage(), 'demande');
7465     $this->erreur_db($qres['message'], $qres['message'], 'demande');
7466 mbroquet 3730 }
7467     // retourne la nature du dossier
7468 softime 14542 foreach ($qres['result'] as $row) {
7469     return $row['terrain_references_cadastrales'];
7470 mbroquet 3730 }
7471     // la nature n'etait pas trouve, ce qui ne devrait pas se passer
7472     return NULL;
7473     }
7474    
7475     /**
7476 softime 6565 * Supprime puis recrée tous les liens entre dossier et demandeurs
7477 mbroquet 3730 **/
7478 softime 8989 function insertLinkDossierDemandeur() {
7479 softime 6565 // Suppression des anciens demandeurs
7480 softime 8989 $this->deleteLinkDossierDemandeur();
7481 softime 6565 $types_demandeur = array(
7482     "petitionnaire_principal",
7483     "delegataire",
7484     "petitionnaire",
7485     "plaignant_principal",
7486     "plaignant",
7487     "contrevenant_principal",
7488     "contrevenant",
7489     "requerant_principal",
7490     "requerant",
7491     "avocat_principal",
7492     "avocat",
7493 softime 7067 "bailleur_principal",
7494     "bailleur",
7495 softime 10573 "proprietaire",
7496     "architecte_lc",
7497     "paysagiste",
7498 softime 6565 );
7499     foreach ($types_demandeur as $type) {
7500     // Comparaison des autres demandeurs
7501     if(isset($this->postedIdDemandeur[$type]) === true) {
7502     // Ajout des nouveaux liens
7503     foreach ($this->postedIdDemandeur[$type] as $demandeur) {
7504     //
7505     $principal = false;
7506     if (strpos($type, '_principal') !== false) {
7507     $principal = true;
7508     }
7509 softime 8989 if ($this->addLinkDossierDemandeur($demandeur, $principal) === false) {
7510 softime 6565 //
7511     return false;
7512     }
7513     }
7514 mbroquet 3730 }
7515     }
7516     }
7517    
7518    
7519     /**
7520     * Fonction permettant d'ajouter un lien
7521 softime 6565 * entre la table dossier et demandeur
7522 mbroquet 3730 **/
7523 softime 8989 function addLinkDossierDemandeur($id, $principal) {
7524 softime 7996 $lienAjout = $this->f->get_inst__om_dbform(array(
7525     "obj" => "lien_dossier_demandeur",
7526     "idx" => "]",
7527     ));
7528 mbroquet 3730 $lien = array('lien_dossier_demandeur' => "",
7529     'petitionnaire_principal' => (($principal)?"t":"f"),
7530     'dossier' => $this->valF['dossier'],
7531     'demandeur' => $id);
7532 softime 8989 $lienAjout->ajouter($lien);
7533 mbroquet 3730 $lienAjout->__destruct();
7534     }
7535    
7536     /**
7537     * Fonction permettant de supprimer un lien
7538     * entre la table demande et demandeur
7539     **/
7540 softime 8989 function deleteLinkDossierDemandeur() {
7541 mbroquet 3730 // Suppression
7542     $sql = "DELETE FROM ".DB_PREFIXE."lien_dossier_demandeur ".
7543     "WHERE dossier='".$this->valF['dossier']."'";
7544 softime 8989 $res = $this->f->db->query($sql);
7545 softime 12847 $this->f->addToLog(
7546     __METHOD__."(): db->query(\"".$sql."\");",
7547     VERBOSE_MODE
7548     );
7549     $this->f->isDatabaseError($res);
7550 mbroquet 3730 }
7551    
7552     /**
7553     * Methode de recupération des valeurs postées
7554     **/
7555     function getPostedValues() {
7556     // Récupération des demandeurs dans POST
7557 softime 6565 $types_demandeur = array(
7558     "petitionnaire_principal",
7559     "delegataire",
7560     "petitionnaire",
7561     "plaignant_principal",
7562     "plaignant",
7563     "contrevenant_principal",
7564     "contrevenant",
7565     "requerant_principal",
7566     "requerant",
7567     "avocat_principal",
7568     "avocat",
7569 softime 7067 "bailleur_principal",
7570     "bailleur",
7571 softime 10573 "proprietaire",
7572     "architecte_lc",
7573     "paysagiste",
7574 softime 6565 );
7575     foreach ($types_demandeur as $type) {
7576     if($this->f->get_submitted_post_value($type) !== null AND
7577     $this->f->get_submitted_post_value($type) != '') {
7578     $this->postedIdDemandeur[$type] = $this->f->get_submitted_post_value($type);
7579 mbroquet 3730 }
7580     }
7581     }
7582    
7583     /**
7584     * Méthode permettant de récupérer les id des demandeurs liés à la table
7585     * liée passée en paramètre
7586     *
7587     * @param string $from Table liée : "demande", "dossier", dossier_autorisation"
7588     * @param string $id Identifiant (clé primaire de la table liée en question)
7589     */
7590     function listeDemandeur($from, $id) {
7591 softime 6565
7592     // Si la donnée membre a déjà été remplie par un précédent appel à cette méthode,
7593     // on sort.
7594     if ($this->valIdDemandeur["petitionnaire_principal"] !== array() or
7595     $this->valIdDemandeur["delegataire"] !== array() or
7596     $this->valIdDemandeur["petitionnaire"] !== array() or
7597     $this->valIdDemandeur["plaignant_principal"] !== array() or
7598     $this->valIdDemandeur["plaignant"] !== array() or
7599     $this->valIdDemandeur["contrevenant_principal"] !== array() or
7600     $this->valIdDemandeur["contrevenant"] !== array() or
7601     $this->valIdDemandeur["requerant_principal"] !== array() or
7602     $this->valIdDemandeur["requerant"] !== array() or
7603     $this->valIdDemandeur["avocat_principal"] !== array() or
7604 softime 7067 $this->valIdDemandeur["avocat"] !== array() or
7605     $this->valIdDemandeur["bailleur_principal"] !== array() or
7606 softime 10573 $this->valIdDemandeur["bailleur"] !== array() or
7607     $this->valIdDemandeur["proprietaire"] !== array() or
7608     $this->valIdDemandeur["architecte_lc"] !== array() or
7609     $this->valIdDemandeur["paysagiste"] !== array()) {
7610 softime 6565 return;
7611     }
7612    
7613 mbroquet 3730 // Récupération des demandeurs de la base
7614 softime 14542 $qres = $this->f->get_all_results_from_db_query(
7615     sprintf(
7616     'SELECT
7617     demandeur.demandeur,
7618     demandeur.type_demandeur,
7619     lien_%2$s_demandeur.petitionnaire_principal
7620     FROM
7621     %1$slien_%2$s_demandeur
7622     INNER JOIN %1$sdemandeur
7623     ON demandeur.demandeur=lien_%2$s_demandeur.demandeur
7624     WHERE
7625     %2$s = \'%3$s\'',
7626     DB_PREFIXE,
7627     $from,
7628     $this->f->db->escapeSimple($id)
7629     ),
7630     array(
7631     'origin' => __METHOD__
7632     )
7633     );
7634 softime 6565
7635 mbroquet 3730 // Stockage du résultat dans un tableau
7636 softime 14542 foreach ($qres['result'] as $row) {
7637 softime 6565
7638     $demandeur_type = $row['type_demandeur'];
7639     if ($row['petitionnaire_principal'] == 't'){
7640     $demandeur_type .= "_principal";
7641 mbroquet 3730 }
7642 softime 6565 $this->valIdDemandeur[$demandeur_type][] = $row['demandeur'];
7643 mbroquet 3730 }
7644     }
7645    
7646     /**
7647     * Récupère la liste des contraintes d'un dossier.
7648     *
7649 softime 4740 * @param string $dossier Identifiant du dossier.
7650     * @param boolean $for_di_view Liste avec condition affichage DI.
7651     *
7652 mbroquet 3730 * @return object Résultat de la requête
7653     */
7654 softime 4740 function getListContrainte($dossier, $for_di_view = true) {
7655 mbroquet 3730
7656     // Select
7657     $select = "SELECT dossier_contrainte.dossier_contrainte as dossier_contrainte_id,
7658     dossier_contrainte.texte_complete as dossier_contrainte_texte,
7659     dossier_contrainte.reference as dossier_contrainte_reference,
7660     contrainte.libelle as contrainte_libelle,
7661     contrainte.nature as contrainte_nature,
7662     contrainte.texte as contrainte_texte,
7663     contrainte.reference as contrainte_reference,
7664     lower(contrainte.groupe) as contrainte_groupe,
7665     lower(contrainte.sousgroupe) as contrainte_sousgroupe ";
7666    
7667     // From
7668     $from = " FROM ".DB_PREFIXE."contrainte
7669     LEFT JOIN ".DB_PREFIXE."dossier_contrainte
7670     ON dossier_contrainte.contrainte = contrainte.contrainte ";
7671    
7672     // Where
7673     $where = " WHERE dossier_contrainte.dossier = '".$dossier."' ";
7674    
7675 softime 4740 // Si les contraintes sont listées pour être affichées dans le DI
7676     if ($for_di_view === true) {
7677     // Si le paramètre "option_contrainte_di" est défini
7678     if ($this->f->getParameter('option_contrainte_di') != 'aucun') {
7679     // Ajoute la condition
7680     $where .= $this->f->traitement_condition_contrainte(
7681     $this->f->getParameter('option_contrainte_di'));
7682     }
7683 mbroquet 3730 }
7684    
7685     // Tri
7686     $tri = " ORDER BY contrainte_groupe DESC, contrainte_sousgroupe,
7687     contrainte.no_ordre, contrainte.libelle ";
7688    
7689     // Requête SQL
7690 softime 14542 $qres = $this->f->get_all_results_from_db_query($select.$from.$where.$tri, array(
7691     'origin' => __METHOD__
7692     )
7693     );
7694 mbroquet 3730
7695     // Retourne le résultat
7696 softime 14542 return $qres['result'];
7697 mbroquet 3730 }
7698    
7699     /**
7700 softime 11585 * Récupère les informations à afficher dans le tableau des identifiants
7701     * tehniques Plat'AU. Stocke ces informations dans un tableau.
7702     * Converti le tableau au format json et renvoi le json obtenu
7703     *
7704     * @return json
7705     */
7706     protected function get_json_lien_iiue() {
7707     // Tableau de retour
7708     $val_suivi = array();
7709    
7710     // Liste des champs à afficher. Permet également la traduction des noms de colonnes.
7711     $liste_champs = array(
7712     'object' => __('type'),
7713     'object_id' => __('identifiant openADS'),
7714     'external_uid' => __("identifiant Plat'AU"),
7715     'state' => __('état du versement'),
7716     );
7717     // Mapping entre la valeur 'object' de la table de liaison des identifiants
7718     // et la valeur de 'object' dans la tables des tâches
7719     $mapping_one_to_one_object_liiue_task = array(
7720     'dossier_autorisation' => 'creation_DA',
7721     'dossier' => 'creation_DI',
7722     'piece' => 'ajout_piece',
7723     'consultation' => 'creation_consultation',
7724     'instruction_action_cl' => 'envoi_CL',
7725     );
7726     // Traduction des états de versement
7727     $trad_state = array(
7728     'done' => sprintf('%s %s', __('terminé'), '[V]'),
7729     'pending' => __('en cours'),
7730     'error' => __('en erreur'),
7731     'new' => __('à réaliser'),
7732     );
7733     // Traduction des objets
7734     $trad_object = array(
7735     'dossier_autorisation' => __('dossier_autorisation'),
7736     'dossier' => __('dossier'),
7737     'piece' => __('pièce'),
7738     'dossier_consultation' => __('consultation'),
7739     'pec_dossier_consultation' => __('prise en compte'),
7740     'avis_dossier_consultation' => __('avis'),
7741     'instruction_action_cl' => __('instruction transmise au CL'),
7742     );
7743     // Instance de la table de liaison des identifiants
7744     $inst_liiue = $this->f->get_inst__om_dbform(array(
7745     "obj" => "lien_id_interne_uid_externe",
7746     "idx" => 0,
7747     ));
7748     // Instance de la table des tâches
7749     $inst_task = $this->f->get_inst__om_dbform(array(
7750     "obj" => "task",
7751     "idx" => 0,
7752     ));
7753     // Récupération de toutes les occurences du dossier en cours dans la table des
7754     // liaisons des identifiants
7755 softime 13137 $external_uids = $inst_liiue->get_all_lien_id_interne_uid_externe_by_dossier($this->getVal('dossier'), PLATAU);
7756 softime 11585 if (is_array($external_uids) === true && count($external_uids) > 0) {
7757     //
7758     foreach ($external_uids as $external_uid) {
7759    
7760     /**
7761     * Gestion de l'état du versement dans Plat'AU
7762     */
7763     // État par défaut
7764 softime 12654 $external_uid['state'] = __('N/A');
7765 softime 11585 // Tente d'identifier le type, dans certains cas il n'est pas
7766     // possible de le définir avec certitude
7767     $type = isset($mapping_one_to_one_object_liiue_task[$external_uid['object']]) === true ? $mapping_one_to_one_object_liiue_task[$external_uid['object']] : null;
7768     $search_values = array(
7769     sprintf('type = \'%s\'', $type),
7770     sprintf('object_id = \'%s\'', $external_uid['object_id']),
7771     sprintf('state != \'%s\'', $inst_task::STATUS_CANCELED),
7772     );
7773     // Si le type ne peut pas être défini avec certitude, alors on ne
7774     // l'inclut pas dans la recherche de la tâche
7775     if ($type === null) {
7776     unset($search_values[0]);
7777     }
7778     $task_exists = $inst_task->task_exists_multi_search($search_values);
7779     // Pour récupérer un état, il ne faut qu'un résultat
7780     if ($task_exists !== false) {
7781     //
7782     foreach ($task_exists as $task_value) {
7783     $external_uid['state'] = $task_value['state'];
7784     if ($task_value['state'] === 'pending') {
7785     break;
7786     }
7787     }
7788     }
7789     // Remplace les valeurs des états de versement par les traductions
7790     foreach ($trad_state as $key => $value) {
7791     if ($external_uid['state'] === $key) {
7792     $external_uid['state'] = $value;
7793     }
7794     }
7795    
7796     // Remplace les valeurs des états de versement par les traductions
7797     foreach ($trad_object as $key => $value) {
7798     if ($external_uid['object'] === $key) {
7799     $external_uid['object'] = __($value);
7800     }
7801     }
7802    
7803     //
7804     $val_notif = array();
7805     foreach($liste_champs as $key => $champ) {
7806     $val_notif[$champ] = $external_uid[$key];
7807     }
7808     array_push($val_suivi, $val_notif);
7809     }
7810     }
7811    
7812     // Passage du tableau au format json
7813     return json_encode($val_suivi, JSON_HEX_APOS);
7814     }
7815    
7816     /**
7817 mbroquet 3730 * Ajout de la liste des contraintes et des demandeurs
7818     */
7819     function formSpecificContent($maj) {
7820    
7821 softime 8477 // Récupère le CRUD
7822     $crud = $this->get_action_crud($this->getParameter("maj"));
7823    
7824     // Les contenus spécifiques ne sont pas affichés en cas de suppression
7825     if ($crud === 'delete') {
7826     return;
7827     }
7828    
7829 mbroquet 3730 /**
7830     * Liste des contraintes
7831     */
7832     //
7833     $listContrainte = $this->getListContrainte($this->getVal('dossier'));
7834    
7835 softime 12654 // Si le dossier possède des contraintes et qu'on n'est pas dans la vue "Journal d'instruction"
7836 softime 14542 if (count($listContrainte) != 0 && $maj !== "200") {
7837 mbroquet 3730
7838     // Affiche du fieldset
7839     printf("<div id=\"liste_contrainte\" class=\"demande_hidden_bloc\">");
7840     printf("<fieldset class=\"cadre ui-corner-all ui-widget-content col_12 startClosed\">");
7841     printf(" <legend class=\"ui-corner-all ui-widget-content ui-state-active\"
7842     id =\"fieldset_contraintes_liees\">"
7843     ._("dossier_contrainte")."</legend>");
7844     printf("<div class=\"fieldsetContent\" style=\"display: none;\">");
7845    
7846     // Entête pour le groupe
7847     $groupeHeader = "
7848     <div class='dossier_contrainte_groupe'>
7849     <div class='dossier_contrainte_groupe_header'>
7850     <span class='name'>
7851     %s
7852     </span>
7853     </div>
7854     ";
7855    
7856     // Entête pour le sous-groupe
7857     $sousgroupeHeader = "
7858     <div class='dossier_contrainte_sousgroupe'>
7859     <div class='dossier_contrainte_sousgroupe_header'>
7860     <span class='name'>
7861     %s
7862     </span>
7863     </div>
7864     ";
7865    
7866     // Titres des colonnes
7867     $tableHeader = "
7868     <thead>
7869     <tr class='ui-tabs-nav ui-accordion ui-state-default tab-title'>
7870     <th class='title col-0 firstcol contrainte_th_texte_complete'>
7871     <span class='name'>
7872     "._('texte_complete')."
7873     </span>
7874     </th>
7875     <th class='title col-1 contrainte_th_reference'>
7876     <span class='name'>
7877     "._('reference')."
7878     </span>
7879     </th>
7880     <th class='title col-2 contrainte_th_nature'>
7881     <span class='name'>
7882     "._('nature')."
7883     </span>
7884     </th>
7885     </tr>
7886     </thead>
7887     ";
7888    
7889     // Ligne de données
7890     $line = "
7891     <tr class='tab-data %s'>
7892     <td class='col-0 firstcol contrainte_th_texte_complete'>
7893     %s
7894     </td>
7895     <td class='col-1 contrainte_th_reference'>
7896     %s
7897     </td>
7898     <td class='col-2 contrainte_th_nature'>
7899     %s
7900     </td>
7901     ";
7902    
7903     // Sauvegarde des données pour les comparer
7904     $lastRow = array();
7905     $lastRow['contrainte_groupe'] = 'empty';
7906     $lastRow['contrainte_sousgroupe'] = 'empty';
7907    
7908     // Tant qu'il y a des résultats
7909 softime 14542 foreach ($listContrainte as $row) {
7910 mbroquet 3730 // Si l'identifiant du groupe de la contrainte présente et
7911     // celle d'avant est différent
7912     if ($row['contrainte_groupe'] != $lastRow['contrainte_groupe']) {
7913    
7914     // Si l'identifiant du groupe d'avant est vide
7915     if ($lastRow['contrainte_groupe'] != 'empty') {
7916     // Ferme le tableau
7917     printf("</table>");
7918     // Ferme le div
7919     printf("</div>");
7920     // Ferme le div
7921     printf("</div>");
7922     }
7923    
7924     // Affiche le header du groupe
7925     printf($groupeHeader, $row['contrainte_groupe']);
7926     }
7927    
7928     // Si l'identifiant du sous-groupe de la contrainte présente et
7929     // celle d'avant est différent
7930     // Ou qu'ils soient identique mais n'appartiennent pas au même groupe
7931     if ($row['contrainte_sousgroupe'] != $lastRow['contrainte_sousgroupe']
7932     || ($row['contrainte_sousgroupe'] == $lastRow['contrainte_sousgroupe']
7933     && $row['contrainte_groupe'] != $lastRow['contrainte_groupe'])) {
7934    
7935     //
7936     if($row['contrainte_groupe'] == $lastRow['contrainte_groupe']) {
7937     // Si l'identifiant de la sous-groupe d'avant est vide
7938     if ($lastRow['contrainte_sousgroupe'] != 'empty') {
7939     // Ferme le tableau
7940     printf("</table>");
7941     // Ferme le div
7942     printf("</div>");
7943     }
7944     }
7945    
7946     // Affiche le header du sous-groupe
7947     printf($sousgroupeHeader, $row['contrainte_sousgroupe']);
7948    
7949     // Ouvre le tableau
7950     printf("<table id='sousgroupe_".$row['contrainte_sousgroupe']."' class='tab-tab dossier_contrainte_view'>");
7951    
7952     // Affiche le header des données
7953     printf($tableHeader);
7954    
7955     // Définis le style des lignes
7956     $style = 'odd';
7957     }
7958    
7959     // Si toujours dans la même groupe et même sous-groupe,
7960     // on change le style de la ligne
7961     if ($row['contrainte_groupe'] == $lastRow['contrainte_groupe']
7962     && $row['contrainte_sousgroupe'] == $lastRow['contrainte_sousgroupe']) {
7963     // Définis le style
7964     $style = ($style=='even')?'odd':'even';
7965     }
7966    
7967     // Affiche "Oui" ou "Non" pour le bouléen
7968     if ($row['dossier_contrainte_reference'] == 1
7969     || $row['dossier_contrainte_reference'] == "t"
7970     || $row['dossier_contrainte_reference'] == "Oui") {
7971     //
7972     $contrainte_reference = "Oui";
7973     } else {
7974     //
7975     $contrainte_reference = "Non";
7976     }
7977    
7978     // Affiche les données
7979     printf($line, $style,
7980     $row['dossier_contrainte_texte'],
7981     $contrainte_reference,
7982     $row['contrainte_nature']
7983     );
7984    
7985     // Sauvegarde les données
7986     $lastRow['contrainte_groupe'] = $row['contrainte_groupe'];
7987     $lastRow['contrainte_sousgroupe'] = $row['contrainte_sousgroupe'];
7988    
7989     }
7990     // Ferme le tableau
7991     printf("</table>");
7992     // Ferme le sous-groupe
7993     printf("</div>");
7994     // Ferme le groupe
7995     printf("</div>");
7996    
7997     printf("</div>");
7998    
7999     printf("<div class=\"visualClear\"></div>");
8000     // Ferme le fieldset content
8001     printf("</div>");
8002     printf("</fieldset>");
8003     }
8004     /**
8005     * Fin Liste des contraintes
8006     */
8007    
8008     /**
8009     * Liste des demandeurs
8010     */
8011 softime 6565 // Tableau des demandeurs selon le contexte
8012     $listeDemandeur = $this->valIdDemandeur;
8013     /**
8014     * Gestion du bloc des demandeurs
8015     */
8016     // Si le mode est (modification ou suppression ou consultation) ET que
8017     // le formulaire n'est pas correct (c'est-à-dire que le formulaire est
8018     // actif)
8019     if ($this->correct !== true AND
8020 softime 7996 $this->getParameter('validation') == 0 AND
8021     $this->getParameter("maj") != 0) {
8022 softime 6565 // Alors on récupère les demandeurs dans la table lien pour
8023     // affectation des résultats dans $this->valIdDemandeur
8024     $this->listeDemandeur("dossier", $this->getval($this->clePrimaire));
8025     $listeDemandeur = $this->valIdDemandeur;
8026     }
8027 mbroquet 3730
8028 softime 6565 // Récupération des valeurs postées
8029 softime 7996 if ($this->getParameter('validation') != 0) {
8030 softime 6565 $listeDemandeur = $this->postedIdDemandeur;
8031     }
8032    
8033 softime 12124 // Si le mode est (ajout ou modification)
8034     // ET que le mode n'est pas (journal d'instruction)
8035     // ET que le formulaire n'est pas correct
8036     // (c'est-à-dire que le formulaire est actif)
8037     if (($this->getParameter("maj") < 2 AND $this->correct !== true)) {
8038 softime 6565 // Alors on positionne le marqueur linkable a true qui permet
8039     // d'afficher ou non les actions de gestion des demandeurs
8040 mbroquet 3730 $linkable = true;
8041     } else {
8042 softime 6565 // Sinon on positionne le marqueur linkable a false qui permet
8043     // d'afficher ou non les actions de gestion des demandeurs
8044 mbroquet 3730 $linkable = false;
8045     }
8046 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
8047     // Pour les dossiers contentieux, il faut un droit spécifique pour visualiser le
8048     // fieldset "Demandeurs"
8049 softime 12124 if ($this->getParameter("maj") != 200 &&
8050     ($affichage_form === 'ADS' || $affichage_form === 'DPC' || $affichage_form === 'CONSULTATION ENTRANTE')
8051 softime 6565 OR ($affichage_form === 'CTX RE' AND $this->f->isAccredited('dossier_contentieux_recours_afficher_demandeurs') === true)
8052 softime 12124 OR ($affichage_form === 'CTX IN' AND $this->f->isAccredited('dossier_contentieux_infractions_afficher_demandeurs') === true)
8053     ) {
8054 mbroquet 3730
8055 softime 6565 // Conteneur de la listes des demandeurs
8056     echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">";
8057     echo "<fieldset id=\"fieldset-form-dossier_instruction-demandeur\" class=\"cadre ui-corner-all ui-widget-content startClosed\">";
8058     echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">"
8059     ._("Demandeurs")."</legend>";
8060     echo "<div class=\"fieldsetContent\" style=\"display: none;\">";
8061 mbroquet 3730
8062 softime 6565
8063     // Pour les DI avec DA visible, dans tous les modes excepté en ajout et si l'option d'accès au
8064     // portail citoyen est activée
8065 mbroquet 3730 $inst_da = $this->get_inst_dossier_autorisation();
8066 softime 6565 if ($this->getParameter("maj") != 0
8067     && $this->f->is_option_citizen_access_portal_enabled() === true
8068     && $inst_da->is_dossier_autorisation_visible() === true) {
8069     // Instance du dossier d'autorisation
8070     //
8071     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'));
8072     }
8073     // Sélection des demandeur à afficher en fonction du paramétrage du type
8074     // du dossier d'autorisation.
8075     switch ($affichage_form) {
8076     case 'ADS':
8077 softime 10573 case 'CONSULTATION ENTRANTE':
8078 softime 6565 $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
8079     break;
8080     case 'CTX RE':
8081     $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
8082     $this->display_demandeur_requerant_avocat($listeDemandeur);
8083     break;
8084     case 'CTX IN':
8085     $this->display_demandeur_plaignant_contrevenant($listeDemandeur);
8086     break;
8087 softime 7067 case 'DPC':
8088     $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
8089     $this->display_demandeur_petitionnaire_delegataire_bailleur($listeDemandeur);
8090     break;
8091 softime 6565 }
8092 mbroquet 3730
8093     }
8094    
8095     echo "</fieldset>";
8096     echo "</div>";
8097     /**
8098     * Fin liste des demandeurs
8099     */
8100 fmichon 4708
8101     /**
8102     * Interface avec le référentiel ERP.
8103     *
8104     * On affiche le message uniquement si le dossier est connecté.
8105     */
8106 softime 6565 if ($this->getParameter('maj') == 3 && $this->is_connected_to_referentiel_erp() === true) {
8107 fmichon 4708 //
8108     printf(
8109     '<div class="col_12">
8110     Ce dossier est connecté au référentiel ERP.
8111     </div>'
8112     );
8113     }
8114    
8115 mbroquet 3730 }
8116    
8117     /**
8118 softime 6565 * Affiche le bloc d'affichage des demandeurs pour dossiers ADS avec actions.
8119     *
8120     * @param array $listeDemandeur Liste des demandeurs.
8121     */
8122     function display_demandeur_petitionnaire_delegataire($listeDemandeur) {
8123    
8124     // Affichage du bloc pétitionnaire principal / délégataire
8125     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
8126     echo "<div id=\"petitionnaire_principal_delegataire\">";
8127     // Affichage de la synthèse du pétitionnaire principal
8128     $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire_principal");
8129     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
8130     echo "<div id=\"delegataire\">";
8131     // Affichage de la synthèse du délégataire
8132     $this->displaySyntheseDemandeur($listeDemandeur, "delegataire");
8133     echo "</div>";
8134 softime 10573 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
8135     echo "<div id=\"proprietaire\">";
8136     // Affichage de la synthèse du délégataire
8137     $this->displaySyntheseDemandeur($listeDemandeur, "proprietaire");
8138     echo "</div>";
8139     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
8140     echo "<div id=\"architecte_lc\">";
8141     // Affichage de la synthèse du délégataire
8142     $this->displaySyntheseDemandeur($listeDemandeur, "architecte_lc");
8143     echo "</div>";
8144     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
8145     echo "<div id=\"paysagiste\">";
8146     // Affichage de la synthèse du délégataire
8147     $this->displaySyntheseDemandeur($listeDemandeur, "paysagiste");
8148     echo "</div>";
8149 softime 6565 echo "<div class=\"both\"></div>";
8150     echo "</div>";
8151     // Bloc des pétitionnaires secondaires
8152     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
8153     echo "<div id=\"listePetitionnaires\">";
8154     $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire");
8155     echo "</div>";
8156     }
8157    
8158     /**
8159     * Affiche le bloc d'affichage des demandeurs pour dossiers CTX recours
8160     * avec actions.
8161     *
8162     * @param array $listeDemandeur Liste des demandeurs.
8163     */
8164     function display_demandeur_plaignant_contrevenant($listeDemandeur) {
8165    
8166     echo "<div id=\"plaignant_contrevenant\">";
8167     // Affichage du bloc contrevenant
8168     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
8169     echo "<div id=\"listeContrevenants\" class=\"col_12\">";
8170     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
8171     echo "<div id=\"contrevenant_principal\">";
8172     // Affichage de la synthèse
8173     $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant_principal");
8174     echo "</div>";
8175     echo "<div id=\"listeAutresContrevenants\">";
8176     // Affichage de la synthèse
8177     $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant");
8178     echo "</div>";
8179     echo "</div>";
8180     // Affichage du bloc plaignant
8181     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
8182     echo "<div id=\"listePlaignants\" class=\"col_12\">";
8183     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
8184     echo "<div id=\"plaignant_principal\">";
8185     // Affichage de la synthèse
8186     $this->displaySyntheseDemandeur($listeDemandeur, "plaignant_principal");
8187     echo "</div>";
8188     echo "<div id=\"listeAutresPlaignants\">";
8189     $this->displaySyntheseDemandeur($listeDemandeur, "plaignant");
8190     echo "</div>";
8191     echo "</div>";
8192     echo "</div>";
8193    
8194     }
8195    
8196     /**
8197     * Affiche le bloc d'affichage des demandeurs pour dossiers CTX infraction
8198     * avec actions.
8199     *
8200     * @param array $listeDemandeur Liste des demandeurs.
8201     */
8202     function display_demandeur_requerant_avocat($listeDemandeur) {
8203     echo "<div id=\"requerant_avocat\">";
8204     // Affichage du bloc requérant
8205     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
8206     echo "<div id=\"listeRequerants\" class=\"col_12\">";
8207     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
8208     echo "<div id=\"requerant_principal\">";
8209     // Affichage de la synthèse
8210     $this->displaySyntheseDemandeur($listeDemandeur, "requerant_principal");
8211     echo "</div>";
8212     echo "<div id=\"listeAutresRequerants\">";
8213     $this->displaySyntheseDemandeur($listeDemandeur, "requerant");
8214     echo "</div>";
8215     echo "</div>";
8216     // Affichage du bloc avocat
8217     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
8218     echo "<div id=\"listeAvocat\" class=\"col_12\">";
8219     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
8220     echo "<div id=\"avocat_principal\">";
8221     $this->displaySyntheseDemandeur($listeDemandeur, "avocat_principal");
8222     echo "</div>";
8223     echo "<div id=\"listeAutresAvocats\">";
8224     $this->displaySyntheseDemandeur($listeDemandeur, "avocat");
8225     echo "</div>";
8226     echo "</div>";
8227     echo "</div>";
8228     echo "</fieldset>";
8229     // Champ flag permettant de récupérer la valeur de l'option sig pour
8230     // l'utiliser en javascript, notamment lors du chargement de l'interface
8231     // pour les références cadastrales
8232     // XXX Si un widget pour les références cadastrales existait, il n'y
8233     // aurait pas besoin de faire cela
8234     echo "<input id='option_sig' type='hidden' value='".$this->f->getParameter("option_sig")."' name='option_sig'>";
8235     echo "</div>";
8236     }
8237    
8238    
8239 softime 7067 /**
8240     * Affiche le bloc d'affichage des demandeurs pour dossiers DPC avec actions.
8241     *
8242     * @param array $listeDemandeur Liste des demandeurs.
8243     */
8244     function display_demandeur_petitionnaire_delegataire_bailleur($listeDemandeur) {
8245    
8246     // Affichage du bloc pétitionnaire principal / délégataire / bailleur
8247     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
8248     echo "<div id=\"petitionnaire_principal_delegataire_bailleur\">";
8249     // Doit être utilisé avec la div petitionnaire_principal_delegataire
8250     echo "<div id=\"listeBailleurs\" class=\"col_12\">";
8251     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
8252     echo "<div id=\"bailleur_principal\">";
8253     // Affichage de la synthèse
8254     $this->displaySyntheseDemandeur($listeDemandeur, "bailleur_principal");
8255     echo "</div>";
8256     echo "<div id=\"listeAutresBailleurs\">";
8257     $this->displaySyntheseDemandeur($listeDemandeur, "bailleur");
8258     echo "</div>";
8259     echo "</div>";
8260     echo "</div>";
8261     }
8262    
8263    
8264 softime 6565 function displaySyntheseDemandeur($listeDemandeur, $type) {
8265     // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
8266     // correct (c'est-à-dire que le formulaire est actif)
8267     if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
8268     // Alors on positionne le marqueur linkable a true qui permet
8269     // d'afficher ou non les actions de gestion des demandeurs
8270     $linkable = true;
8271     } else {
8272     // Sinon on positionne le marqueur linkable a false qui permet
8273     // d'afficher ou non les actions de gestion des demandeurs
8274     $linkable = false;
8275     }
8276     // Récupération du type de demandeur pour l'affichage
8277     switch ($type) {
8278     case 'petitionnaire_principal':
8279     $legend = _("Petitionnaire principal");
8280     break;
8281    
8282     case 'delegataire':
8283     $legend = _("Autre correspondant");
8284     break;
8285    
8286     case 'petitionnaire':
8287     $legend = _("Petitionnaire");
8288     break;
8289    
8290     case 'contrevenant_principal':
8291     $legend = _("Contrevenant principal");
8292     break;
8293    
8294     case 'contrevenant':
8295     $legend = _("Autre contrevenant");
8296     break;
8297    
8298     case 'plaignant_principal':
8299     $legend = _("Plaignant principal");
8300     break;
8301    
8302     case 'plaignant':
8303     $legend = _("Autre plaignant");
8304     break;
8305    
8306     case 'requerant_principal':
8307     $legend = _("Requérant principal");
8308     break;
8309    
8310     case 'requerant':
8311     $legend = _("Autre requérant");
8312     break;
8313    
8314     case 'avocat_principal':
8315     $legend = _("Avocat principal");
8316     break;
8317    
8318     case 'avocat':
8319     $legend = _("Autre avocat");
8320     break;
8321 softime 7067
8322     case 'bailleur_principal':
8323     $legend = _("Bailleur principal");
8324     break;
8325    
8326     case 'bailleur':
8327     $legend = _("Bailleur");
8328     break;
8329 softime 10573
8330     case 'proprietaire':
8331     $legend = __("Propriétaire");
8332     break;
8333    
8334     case 'architecte_lc':
8335     $legend = __("Architecte législation connexe");
8336     break;
8337    
8338     case 'paysagiste':
8339     $legend = __("Concepteur-Paysagiste");
8340     break;
8341 softime 6565 }
8342     foreach ($listeDemandeur[$type] as $demandeur_id) {
8343     $obj = str_replace('_principal', '', $type);
8344 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
8345     "obj" => $obj,
8346     "idx" => $demandeur_id,
8347     ));
8348 softime 6565 $demandeur -> afficherSynthese($type, $linkable);
8349     $demandeur -> __destruct();
8350     }
8351     // Si en édition de formulaire
8352     if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
8353     // Bouton d'ajout du avocat
8354     // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
8355     echo "<a id=\"add_".$type."\"
8356     class=\"om-form-button add-16\">".
8357     $legend.
8358     "</a>";
8359     }
8360     }
8361 softime 14064
8362 softime 6565 /**
8363 mbroquet 3730 * Retourne le statut du dossier
8364     * @return string Le statut du dossier d'instruction
8365     */
8366     function getStatut(){
8367 softime 14064 $etat = $this->f->get_inst__om_dbform(array(
8368     "obj" => 'etat',
8369     "idx" => $this->getVal("etat"),
8370     ));
8371     return $etat->getVal('statut');
8372 mbroquet 3730 }
8373 softime 5024
8374 mbroquet 3730 /**
8375 softime 5024 * Retourne le dernier événement lié au dossier instancié
8376     *
8377     * @return [string] ID du dernier événement
8378     */
8379     function get_dernier_evenement() {
8380 softime 14064 $qres = $this->f->get_one_result_from_db_query(
8381     sprintf(
8382     'SELECT
8383     MAX(instruction)
8384     FROM
8385     %1$sinstruction
8386     WHERE
8387     dossier = \'%2$s\'',
8388     DB_PREFIXE,
8389     $this->f->db->escapeSimple($this->getVal($this->clePrimaire))
8390     ),
8391     array(
8392     "origin" => __METHOD__,
8393     )
8394 softime 12847 );
8395 softime 14064
8396     return $qres["result"];
8397 softime 5024 }
8398    
8399     /**
8400 mbroquet 3730 * Retourne l'identifiant du rapport d'instruction lié du dossier
8401     * @return string L'identifiant du rapport d'instruction lié du dossier
8402     */
8403 softime 6565 function getRapportInstruction() {
8404 softime 14064 $qres = $this->f->get_one_result_from_db_query(
8405     sprintf(
8406     'SELECT
8407     rapport_instruction
8408     FROM
8409     %1$srapport_instruction
8410     WHERE
8411     dossier_instruction = \'%2$s\'',
8412     DB_PREFIXE,
8413     $this->f->db->escapeSimple($this->getVal($this->clePrimaire))
8414     ),
8415     array(
8416     "origin" => __METHOD__
8417     )
8418 softime 12847 );
8419 mbroquet 3730
8420 softime 14064 return $qres["result"];
8421 mbroquet 3730 }
8422    
8423     /**
8424     * Retourne l'identifiant des données techniques liées du dossier
8425     * @return string L'identifiant des données techniques liées du dossier
8426     */
8427 softime 6565 function getDonneesTechniques() {
8428 softime 14064 $qres = $this->f->get_one_result_from_db_query(
8429     sprintf(
8430     'SELECT
8431     donnees_techniques
8432     FROM
8433     %1$sdonnees_techniques
8434     WHERE
8435     dossier_instruction = \'%2$s\'',
8436     DB_PREFIXE,
8437     $this->f->db->escapeSimple($this->getVal($this->clePrimaire))
8438     ),
8439     array(
8440     "origin" => __METHOD__,
8441     )
8442     );
8443 mbroquet 3730
8444 softime 14064 return $qres["result"];
8445 mbroquet 3730 }
8446    
8447     /**
8448 softime 12847 * Retourne le lien de retour (VIEW formulaire et VIEW sousformulaire).
8449     *
8450     * @param string $view Appel dans le contexte de la vue 'formulaire' ou de
8451     * la vue 'sousformulaire'.
8452     *
8453     * @return string
8454 mbroquet 3730 */
8455 softime 12847 function get_back_link($view = "formulaire") {
8456     $baseURL = OM_ROUTE_TAB;
8457     $paramsHref = array(
8458     'premier' => $this->getParameter("premier"),
8459     'tricol' => $this->getParameter("tricol"),
8460     'advs_id' => $this->getParameter("advs_id"),
8461     'valide' => $this->getParameter("valide")
8462     );
8463 mbroquet 3730
8464 softime 12847 // Si on vient d'un widget de recherche paramétrable avec un message d'aide paramétré
8465     if (empty($this->f->get_submitted_get_value("message_help")) === false) {
8466     // On ajoute le message d'aide dans l'url de retour
8467     $paramsHref['message_help'] = urlencode($this->f->get_submitted_get_value("message_help"));
8468     }
8469    
8470 mbroquet 3730 if($this->getParameter("idx_dossier") != "") {
8471 softime 12847 $paramsHref['obj'] = "recherche_dossier";
8472     } else {
8473     if($this->getParameter("retour") == "form") {
8474     $paramsHref['idx'] = $this->getParameter("idx");
8475     $paramsHref['action'] = '3';
8476     if (!($this->getParameter("validation") > 0 && $this->getParameter("maj") == 2 && $this->correct)) {
8477     $baseURL = OM_ROUTE_FORM;
8478 mbroquet 3730
8479 softime 12847 }
8480 mbroquet 3730 }
8481 softime 12847 $paramsHref['obj'] = $this->f->get_submitted_get_value('retour_widget') !== null ?
8482     $this->f->get_submitted_get_value('retour_widget') :
8483     $this->get_absolute_class_name();
8484    
8485 softime 11228 if ($this->f->get_submitted_get_value('widget_recherche_id') !== null) {
8486 softime 12847 $paramsHref['widget_recherche_id'] = $this->f->get_submitted_get_value('widget_recherche_id');
8487 softime 11228 }
8488 softime 12847 if (empty($this->f->get_submitted_get_value('retourformulaire2')) === false) {
8489     $paramsHref['retourformulaire'] = $this->f->get_submitted_get_value('retourformulaire2');
8490 mbroquet 3730 }
8491     }
8492    
8493 softime 12847 // Construction du lien à partir des valeurs stockées dans le tableau
8494     $href = array_map(function ($key, $value) {
8495     return '&'.$key.'='.$value;
8496     }, array_keys($paramsHref), $paramsHref);
8497     $href = $baseURL.implode('', $href);
8498    
8499     return $href;
8500 mbroquet 3730 }
8501    
8502     /**
8503 softime 12847 * Surcharge du bouton retour afin de retourner sur la recherche de dossiers
8504     * d'instruction existant.
8505     */
8506     function retour($premier = 0, $recherche = "", $tricol = "") {
8507     $css_class = "retour";
8508     // Récupération du lien de redirection
8509     $href = str_replace(
8510     "&",
8511     "&amp;",
8512     $this->get_back_link("formulaire")
8513     );
8514     // Affichage du bouton retour avec le lien et la classe voulues
8515     $this->f->layout->display_form_retour(array(
8516     "id" => "form-action-".$this->get_absolute_class_name()."-back-".uniqid(),
8517     "href" => $href,
8518     "class" => $css_class,
8519     ));
8520     }
8521    
8522     /**
8523 mbroquet 3730 * Permet de modifier le fil d'Ariane
8524     * @param string $ent Fil d'Ariane
8525     * @param array $val Valeurs de l'objet
8526     * @param intger $maj Mode du formulaire
8527     */
8528     function getFormTitle($ent) {
8529    
8530     // Fil d'Ariane
8531 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
8532     switch ($type_aff_form) {
8533 softime 7067 case 'DPC':
8534 softime 6565 case 'ADS':
8535     $ent = _("instruction")." -> "._("dossiers d'instruction");
8536     break;
8537     case 'CTX IN':
8538     $ent = _("contentieux")." -> "._("infraction");
8539     break;
8540     case 'CTX RE':
8541     $ent = _("contentieux")." -> "._("recours");
8542     break;
8543 softime 10573 case 'CONSULTATION ENTRANTE':
8544     $ent = __("instruction")." -> ".__("dossiers de consultation");
8545 softime 6565 }
8546 mbroquet 3730
8547     // Si différent de l'ajout
8548     if($this->getParameter("maj") != 0) {
8549     // Si le champ dossier_libelle existe
8550     if (trim($this->getVal("dossier_libelle")) != '') {
8551     $ent .= " -> ".strtoupper($this->getVal("dossier_libelle"));
8552     }
8553 softime 6565 // Si contexte ADS
8554     if ($type_aff_form ==='ADS'
8555     && trim($this->getVal("dossier")) != '') {
8556 mbroquet 3730 $demandeur = $this->get_demandeur($this->getVal("dossier"));
8557     // Si le demandeur existe
8558     if (isset($demandeur) && trim($demandeur) != '') {
8559     $ent .= " ".mb_strtoupper($demandeur, "UTF-8");
8560     }
8561     }
8562 softime 10968
8563     // Dans le cas d'un dossier d'instruction issu d'un dépôt électronique
8564     // applique un style spécifique sur le fil d'Arianne
8565     if ($this->getVal('depot_electronique') === 't') {
8566     $this->f->addStyleForTitle("demat-color-breadcrumb");
8567     }
8568 mbroquet 3730 }
8569    
8570 softime 7996 // Change le fil d'Ariane pour l'interface de géolocalisation automatique des DI
8571     if ($this->getParameter("maj") == 126) {
8572     $ent = _("administration")." -> "._("options avancées")." -> "._("Géolocalisation des dossiers");
8573     }
8574    
8575 mbroquet 3730 // Change le fil d'Ariane
8576     return $ent;
8577     }
8578    
8579     /**
8580     * Récupère le demandeur du dossier
8581     * @return string Identifiant du dossier
8582     */
8583     private function get_demandeur($dossier) {
8584 softime 14064 // Requête SQL
8585     $qres = $this->f->get_one_result_from_db_query(
8586     sprintf(
8587     'SELECT
8588     CASE
8589     WHEN demandeur.qualite = \'particulier\' THEN TRIM(
8590     CONCAT(
8591     demandeur.particulier_nom,
8592     \' \',
8593     demandeur.particulier_prenom
8594     )
8595     )
8596     ELSE TRIM(
8597     CONCAT(
8598     demandeur.personne_morale_raison_sociale,
8599     \' \',
8600     demandeur.personne_morale_denomination
8601     )
8602     )
8603 mbroquet 3730 END as demandeur
8604 softime 14064 FROM
8605     %1$sdossier
8606     LEFT JOIN %1$slien_dossier_demandeur
8607     ON lien_dossier_demandeur.dossier=dossier.dossier
8608     AND lien_dossier_demandeur.petitionnaire_principal IS TRUE
8609     LEFT JOIN %1$sdemandeur
8610 mbroquet 3730 ON lien_dossier_demandeur.demandeur=demandeur.demandeur
8611 softime 14064 WHERE
8612     dossier.dossier = \'%2$s\'',
8613     DB_PREFIXE,
8614     $this->f->db->escapeSimple($dossier)
8615     ),
8616     array(
8617     "origin" => __METHOD__,
8618     )
8619 softime 12847 );
8620 softime 14064
8621     return $qres["result"];
8622 mbroquet 3730 }
8623    
8624     /**
8625     * Récupère la durée de validité
8626     * @param string $dossier_autorisation Identifiant dossier d'autorisation
8627     * @return intger Durée de validité
8628     */
8629 softime 10573 function get_duree_validite($dossier_autorisation, $force_param = false) {
8630 mbroquet 3730
8631     // Récupère le numéro de version
8632     $numeroVersion = $this->getNumeroVersion($dossier_autorisation);
8633    
8634     // Si c'est l'ajout du dossier initial
8635 softime 10573 if ($numeroVersion < 0 || $force_param === true) {
8636 mbroquet 3730
8637     // Récupération de la duree de validite depuis la table
8638     // "dossier_autorisation_type_detaille"
8639 softime 14064 $qres = $this->f->get_one_result_from_db_query(
8640     sprintf(
8641     'SELECT
8642     duree_validite_parametrage
8643     FROM
8644     %1$sdossier_autorisation_type_detaille
8645     LEFT JOIN %1$sdossier_autorisation
8646     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
8647     WHERE
8648     dossier_autorisation.dossier_autorisation = \'%2$s\'',
8649     DB_PREFIXE,
8650     $this->f->db->escapeSimple($dossier_autorisation)
8651     ),
8652     array(
8653     "origin" => __METHOD__,
8654     )
8655 softime 12847 );
8656 softime 14064 $duree_validite = $qres["result"];
8657    
8658 mbroquet 3730 } else {
8659    
8660     // Récupération de la duree de validite depuis le P0
8661 softime 14064 $qres = $this->f->get_one_result_from_db_query(
8662     sprintf(
8663     'SELECT
8664     duree_validite
8665     FROM
8666     %1$sdossier
8667     LEFT JOIN %1$sdossier_autorisation
8668     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
8669     WHERE
8670     dossier_autorisation.dossier_autorisation = \'%2$s\'
8671     AND dossier.version = 0',
8672     DB_PREFIXE,
8673     $this->f->db->escapeSimple($dossier_autorisation)
8674     ),
8675     array(
8676     "origin" => __METHOD__,
8677     )
8678 softime 12847 );
8679 softime 14064 $duree_validite = $qres["result"];
8680 mbroquet 3730 }
8681 softime 11876 // Vérifie si la duree de validité a bien été récupérée. Si ce n'est pas le cas
8682     // la duree de validite est mise à 0 par défaut pour ne pas bloquer le traitement
8683     // (notamment en modification du dossier) et on affiche le problème dans les logs.
8684     try {
8685     if (! isset($duree_validite) || $duree_validite == null || $duree_validite == '') {
8686     $duree_validite = '0';
8687     throw new UnexpectedValueException('Unexpected NULL value');
8688     }
8689     } catch (UnexpectedValueException $e) {
8690     $this->addToLog(
8691     $e.
8692     ' : '.
8693     _("Erreur : la récupération de la durée de validité à échouée pour le dossier : ").
8694     $dossier_autorisation
8695     );
8696     }
8697 mbroquet 3730
8698     // retourne le résultat
8699     return $duree_validite;
8700    
8701     }
8702    
8703     /**
8704     * Ajoute les parcelles du dossier passé en paramètre et met à jour le
8705     * quartier du dossier.
8706     * @param string $dossier Identifiant du dossier
8707     * @param string $terrain_references_cadastrales Références cadastrales du
8708     * dossier
8709     */
8710     function ajouter_dossier_parcelle($dossier, $terrain_references_cadastrales) {
8711    
8712     // Parse les parcelles
8713     $list_parcelles = $this->f->parseParcelles($terrain_references_cadastrales, $this->getVal('om_collectivite'));
8714    
8715     // A chaque parcelle une nouvelle ligne est créée dans la table
8716     // dossier_parcelle
8717     foreach ($list_parcelles as $parcelle) {
8718    
8719     // Instance de la classe dossier_parcelle
8720 softime 7996 $dossier_parcelle = $this->f->get_inst__om_dbform(array(
8721     "obj" => "dossier_parcelle",
8722     "idx" => "]",
8723     ));
8724 mbroquet 3730
8725     // Valeurs à sauvegarder
8726     $value = array(
8727     'dossier_parcelle' => '',
8728     'dossier' => $dossier,
8729     'parcelle' => '',
8730     'libelle' => $parcelle['quartier']
8731     .$parcelle['section']
8732     .$parcelle['parcelle']
8733     );
8734    
8735     // Ajout de la ligne
8736 softime 8989 $dossier_parcelle->ajouter($value);
8737 mbroquet 3730 }
8738    
8739     // Si la liste des parcelles n'est pas vide
8740     if (count($list_parcelles) > 0) {
8741    
8742     // Récupère le code impôt de la première référence cadastrale
8743     $quartier_code_impots = $list_parcelles[0]['quartier'];
8744     // Récupère l'identifiant du quartier
8745     $quartier = $this->get_quartier_by_code_impot($quartier_code_impots);
8746    
8747     // Ajoute le quartier au dossier
8748     $this->modifier_quartier_dossier($dossier, $quartier);
8749     }
8750     }
8751    
8752     /**
8753     * Supprime les parcelles du dossier passé en paramètre et met à jour le
8754     * quartier du dossier.
8755     * @param string $dossier Identifiant du dossier
8756     */
8757     function supprimer_dossier_parcelle($dossier) {
8758    
8759     // Suppression des parcelles du dossier
8760     $sql = "DELETE FROM ".DB_PREFIXE."dossier_parcelle
8761     WHERE dossier='".$dossier."'";
8762 softime 8989 $res = $this->f->db->query($sql);
8763 softime 12847 $this->addToLog(
8764     __METHOD__."(): db->query(\"".$sql."\");",
8765     VERBOSE_MODE
8766     );
8767     $this->f->isDatabaseError($res);
8768 mbroquet 3730
8769     // Supprime le quartier dans dossier
8770     $this->modifier_quartier_dossier($dossier);
8771     }
8772    
8773     /**
8774     * Modifie le quartier au dossier.
8775     * @param string $dossier Numéro du dossier
8776     * @param integer $quartier Identifiant du quartier
8777     */
8778     function modifier_quartier_dossier($dossier, $quartier = null) {
8779    
8780     // Valeurs à mettre à jour
8781     $valF = array();
8782     $valF['quartier'] = $quartier;
8783    
8784     // Met à jour le quartier du dossier
8785     $cle = " dossier='".$dossier."'";
8786 softime 8989 $res = $this->f->db->autoExecute(
8787 mbroquet 3730 DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
8788     $this->addToLog("ajouter_quartier_dossier(): db->autoexecute(\""
8789     .DB_PREFIXE."dossier\", ".print_r($valF, true)
8790     .", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
8791     $this->f->isDatabaseError($res);
8792     }
8793    
8794     /**
8795     * Récupère le quartier par rapport au code impôts.
8796     * @param string $code_impots Code impôts du quartier
8797     *
8798     * @return integer Identifiant du quartier
8799     */
8800     function get_quartier_by_code_impot($code_impots) {
8801    
8802     // Initialisation résultat
8803     $quartier = null;
8804    
8805     // Si la condition n'est pas vide
8806     if ($code_impots != ""
8807     && $code_impots != null) {
8808    
8809     // Requête SQL
8810 softime 14064 $qres = $this->f->get_one_result_from_db_query(
8811     sprintf(
8812     'SELECT
8813     quartier
8814     FROM
8815     %1$squartier
8816     WHERE
8817     code_impots = \'%2$s\'',
8818     DB_PREFIXE,
8819     $this->f->db->escapeSimple($code_impots)
8820     ),
8821     array(
8822     "origin" => __METHOD__,
8823     )
8824     );
8825     $quartier = $qres["result"];
8826 mbroquet 3730 }
8827    
8828     // Retourne résultat
8829     return $quartier;
8830     }
8831 softime 9245
8832     /**
8833     * TREATMENT - update_initial_dt.
8834     *
8835     * Cette méthode ajoute les données techniques initiales d'un DI au format JSON.
8836     *
8837     * @return boolean
8838     */
8839     public function update_initial_dt($dt_json) {
8840     //
8841     $this->begin_treatment(__METHOD__);
8842     //
8843     if ($dt_json === null || $dt_json === '') {
8844     return $this->end_treatment(__METHOD__, false);
8845     }
8846     //
8847     $this->correct = true;
8848     $data = array();
8849     $data["initial_dt"] = $dt_json;
8850     //
8851     $res = $this->f->db->autoExecute(
8852     sprintf('%s%s', DB_PREFIXE, $this->table),
8853     $data,
8854     DB_AUTOQUERY_UPDATE,
8855     sprintf("%s = '%s'", $this->clePrimaire, $this->valF[$this->clePrimaire])
8856     );
8857     $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);
8858     if ($this->f->isDatabaseError($res, true) === true) {
8859     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
8860     $this->correct = false;
8861     return $this->end_treatment(__METHOD__, false);
8862     }
8863     return $this->end_treatment(__METHOD__, true);
8864     }
8865    
8866    
8867 mbroquet 3730
8868     /**
8869     * Méthode permettant d'ajouter les données techniques d'un DI.
8870     *
8871 softime 14064 * @param integer $id identifiant du dossier d'instruction
8872 mbroquet 3730 * @param array $val tableau de valeurs postées via le formulaire
8873     *
8874     * @return boolean false si erreur
8875     */
8876 softime 8989 function ajoutDonneesTechniquesDI($id, $val) {
8877 mbroquet 3730
8878     //On vérifie que le dossier d'autorisation a des données techniques
8879 softime 14064 $qres = $this->f->get_all_results_from_db_query(
8880     sprintf(
8881     'SELECT
8882     *
8883     FROM
8884     %1$sdonnees_techniques
8885     WHERE
8886     dossier_autorisation = \'%2$s\'',
8887     DB_PREFIXE,
8888     $this->f->db->escapeSimple($this->valF["dossier_autorisation"])
8889     ),
8890     array(
8891     "origin" => __METHOD__,
8892     "force_return" => true,
8893     )
8894     );
8895     if ($qres['code'] === 'KO') {
8896 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Erreur de base de données. Impossible d'ajouter les données techniques du dossier d'instruction.", DEBUG_MODE);
8897     return false;
8898     }
8899 softime 14064 $valF = $qres['result'][0];
8900    
8901 mbroquet 3730 //Si le dossier d'autorisation a des données techniques
8902 softime 14064 if (count($valF) > 0) {
8903 mbroquet 3730 //
8904 softime 7996 $dtdi = $this->f->get_inst__om_dbform(array(
8905     "obj" => "donnees_techniques",
8906     "idx" => "]",
8907     ));
8908 softime 14064 // Récupération de la dernière version du CERFA
8909     $inst_da = $this->get_inst_dossier_autorisation($valF['dossier_autorisation']);
8910     $inst_datd = $this->get_inst_dossier_autorisation_type_detaille($inst_da->getVal('dossier_autorisation_type_detaille'));
8911     $inst_cerfa = $this->get_inst_cerfa($inst_datd->getVal('cerfa'));
8912     // Conserve seulement les données affichées par la nouvelle version du CERFA
8913     foreach ($valF as $champ => $value) {
8914     if (array_search($champ, $inst_cerfa->champs) !== false) {
8915     if ($inst_cerfa->getVal($champ) == 'f') {
8916     $valF[$champ] = null;
8917     }
8918     }
8919     }
8920 softime 9245
8921     //Sauvegarde des données techniques initiales
8922     //Conversion en JSON
8923     $dt_json = json_encode($valF);
8924    
8925     //Enregistrement en BDD
8926     $sauvegarde_bdd = $this->update_initial_dt($dt_json);
8927    
8928     //Gestion des erreurs
8929     if ($sauvegarde_bdd === false){
8930     $msg_error = __("Erreur de base de données. Impossible de sauvegarder les données techniques du dossier d'instruction au format JSON.");
8931     $this->f->addToLog(sprintf(
8932     "%s() : ERREUR - %s",
8933     __METHOD__,
8934     $msg_error
8935     ));
8936     $this->addToMessage(sprintf(
8937     "%s %s",
8938     $msg_error,
8939     __("Veuillez contacter votre administrateur.")
8940     ));
8941    
8942     return false;
8943     }
8944    
8945 softime 14064 // Modification pour avoir la dernière version du CERFA
8946     $valF["cerfa"] = $inst_cerfa->getVal($inst_cerfa->clePrimaire);
8947 mbroquet 3730 //Suppression de l'identifiant
8948     $valF["donnees_techniques"] = null;
8949     // Ajout du numéro de dossier d'instruction
8950     $valF['dossier_instruction'] = $this->valF['dossier'];
8951     // Suppression du numéro de dossier d'autorisation
8952     $valF['dossier_autorisation'] = null;
8953     // Ajout des données techniques
8954 softime 8989 if($dtdi->ajouter($valF) === false) {
8955 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du dossier d'instruction.", DEBUG_MODE);
8956 softime 14064 $this->f->addToLog(__METHOD__."() : ".$dtdi->msg, DEBUG_MODE);
8957 mbroquet 3730 return false;
8958     }
8959     }
8960     else {
8961     //Le dossier d'autorisation n'a pas de données techniques
8962     $this->f->addToLog(__METHOD__."() : ERROR - le DA n'a pas de données techniques.", DEBUG_MODE);
8963     return -1;
8964     }
8965    
8966     //
8967     return true;
8968     }
8969    
8970     /**
8971 softime 12433 * Méthode permettant d'ajouter le dossier operateur d'un DI.
8972     *
8973     * @param integer $id identifiant de la demande
8974     * @param array $val tableau de valeurs postées via le formulaire
8975     *
8976     * @return boolean false si erreur
8977     */
8978     function ajoutDossierOperateurDI($id, $val) {
8979     //
8980     $dodi = $this->f->get_inst__om_dbform(array(
8981     "obj" => "dossier_operateur",
8982     "idx" => "]",
8983     ));
8984    
8985     $valF = array();
8986     foreach ($dodi->champs as $champ) {
8987     $valF[$champ] = null;
8988     }
8989     // Ajout du numéro de dossier d'instruction
8990     $valF['dossier_instruction'] = $this->valF['dossier'];
8991     // Ajout du dossier operateur
8992     if($dodi->ajouter($valF) === false) {
8993     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les dossier opérateur du dossier d'instruction.", DEBUG_MODE);
8994     return false;
8995     }
8996    
8997     //
8998     return true;
8999     }
9000    
9001     /**
9002 mbroquet 3730 * VIEW - contrainte.
9003     *
9004     * Vue des contraintes du dossier
9005     *
9006     * Cette vue permet de gérer le contenu de l'onglet "Contrainte(s)" sur un
9007     * dossier. Cette vue spécifique est nécessaire car l'ergonomie standard du
9008     * framework ne prend pas en charge ce cas.
9009     * C'est ici la vue spécifique des contraintes liées au dossier qui est
9010     * affichée directement au clic de l'onglet au lieu du soustab.
9011     *
9012     * L'idée est donc de simuler l'ergonomie standard en créant un container
9013     * et d'appeler la méthode javascript 'ajaxit' pour charger le contenu
9014     * de la vue visualisation de l'objet lié.
9015     *
9016     * @return void
9017     */
9018     function view_contrainte() {
9019     // Vérification de l'accessibilité sur l'élément
9020     $this->checkAccessibility();
9021     // Récupération des variables GET
9022     ($this->f->get_submitted_get_value('idxformulaire')!==null ? $idxformulaire =
9023     $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = "");
9024     ($this->f->get_submitted_get_value('retourformulaire')!==null ? $retourformulaire =
9025     $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = "");
9026 softime 6565 $obj = "dossier_contrainte";
9027     $type_aff_form = $this->get_type_affichage_formulaire();
9028     if ($type_aff_form === 'CTX RE' OR $type_aff_form === 'CTX IN') {
9029     $obj = "dossier_contrainte_contexte_ctx";
9030     }
9031 mbroquet 3730 // Objet à charger
9032     // Construction de l'url de sousformulaire à appeler
9033 softime 7996 $url = OM_ROUTE_SOUSFORM."&obj=".$obj;
9034 mbroquet 3730 $url .= "&action=4";
9035 softime 6929 $url .= "&idx=".$idxformulaire;
9036 mbroquet 3730 $url .= "&retourformulaire=".$retourformulaire;
9037     $url .= "&idxformulaire=".$idxformulaire;
9038     $url .= "&retour=form";
9039     // Affichage du container permettant le reffraichissement du contenu
9040     // dans le cas des action-direct.
9041     printf('
9042     <div id="sousform-href" data-href="%s">
9043     </div>',
9044     $url
9045     );
9046     // Affichage du container permettant de charger le retour de la requête
9047     // ajax récupérant le sous formulaire.
9048     printf('
9049     <div id="sousform-%s">
9050     </div>
9051     <script>
9052     ajaxIt(\'%s\', \'%s\');
9053     </script>',
9054     $obj,
9055     $obj,
9056     $url
9057     );
9058     }
9059    
9060     /**
9061     * Cette methode permet d'afficher le bouton de validation du formulaire
9062     *
9063     * @param integer $maj Mode de mise a jour
9064     * @return void
9065     */
9066     function bouton($maj) {
9067    
9068     if (!$this->correct
9069     && $this->checkActionAvailability() == true) {
9070     //
9071     switch($maj) {
9072     case 0 :
9073     $bouton = _("Ajouter");
9074     break;
9075     case 1 :
9076     $bouton = _("Modifier");
9077     break;
9078     case 2 :
9079     $bouton = _("Supprimer");
9080     break;
9081 softime 12124 case 200 :
9082     return;
9083 mbroquet 3730 default :
9084     // Actions specifiques
9085     if ($this->get_action_param($maj, "button") != null) {
9086     //
9087     $bouton = $this->get_action_param($maj, "button");
9088     } else {
9089     //
9090     $bouton = _("Valider");
9091     }
9092     break;
9093     }
9094     //
9095     $params = array(
9096     "value" => $bouton,
9097     "name" => "submit",
9098     "onclick"=>"return getDataFieldReferenceCadastrale();",
9099     );
9100     //
9101     $this->f->layout->display_form_button($params);
9102     }
9103    
9104     }
9105    
9106     /**
9107 softime 6929 * Récupère l'instance de paramétrage des taxes.
9108 mbroquet 3730 *
9109     * @param integer $taxe_amenagement Identifiant
9110     *
9111     * @return object
9112     */
9113     function get_inst_taxe_amenagement($taxe_amenagement = null) {
9114     //
9115 softime 6929 if ($this->inst_taxe_amenagement === null) {
9116 mbroquet 3730 //
9117 softime 6929 if ($taxe_amenagement === null) {
9118     //
9119 mbroquet 3730 $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($this->getVal('om_collectivite'));
9120 softime 6929
9121     // Si aucun paramétrage de taxe trouvé et que la collectivité
9122     // est mono
9123     if ($taxe_amenagement === null
9124     && $this->f->isCollectiviteMono($this->getVal('om_collectivite')) === true) {
9125     // Récupère la collectivité multi
9126     $om_collectivite_multi = $this->f->get_idx_collectivite_multi();
9127     //
9128     $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite_multi);
9129     }
9130    
9131     //
9132     if ($taxe_amenagement === null) {
9133     //
9134     return null;
9135     }
9136 mbroquet 3730 }
9137     //
9138 softime 7996 $this->inst_taxe_amenagement = $this->f->get_inst__om_dbform(array(
9139     "obj" => "taxe_amenagement",
9140     "idx" => $taxe_amenagement,
9141     ));
9142 mbroquet 3730 }
9143     //
9144     return $this->inst_taxe_amenagement;
9145     }
9146    
9147     /**
9148     * Récupère l'identifiant de la taxe d'aménagement par rapport à la collectivité.
9149     *
9150     * @param integer $om_collectivite La collectivité
9151     *
9152     * @return integer
9153     */
9154     function get_taxe_amenagement_by_om_collectivite($om_collectivite) {
9155 softime 6929 //
9156     $taxe_amenagement = null;
9157    
9158 mbroquet 3730 // Si la collectivité n'est pas renseigné
9159 softime 6929 if ($om_collectivite !== '' && $om_collectivite !== null) {
9160    
9161     // SQL
9162 softime 14064 $qres = $this->f->get_one_result_from_db_query(
9163     sprintf(
9164     'SELECT
9165     taxe_amenagement
9166     FROM
9167     %1$staxe_amenagement
9168     WHERE
9169     om_collectivite = %2$d',
9170     DB_PREFIXE,
9171     intval($om_collectivite)
9172     ),
9173     array(
9174     "origin" => __METHOD__,
9175     )
9176     );
9177     $taxe_amenagement = $qres["result"];
9178 mbroquet 3730 }
9179    
9180     //
9181 softime 6929 return $taxe_amenagement;
9182 mbroquet 3730 }
9183    
9184     /**
9185     * [get_inst_donnees_techniques description]
9186     *
9187     * @param [type] $donnees_techniques [description]
9188     *
9189     * @return [type] [description]
9190     */
9191     function get_inst_donnees_techniques($donnees_techniques = null) {
9192     //
9193     if (is_null($this->inst_donnees_techniques)) {
9194     //
9195     if (is_null($donnees_techniques)) {
9196     $donnees_techniques = $this->getDonneesTechniques();
9197     }
9198     //
9199 softime 7996 $this->inst_donnees_techniques = $this->f->get_inst__om_dbform(array(
9200     "obj" => "donnees_techniques",
9201     "idx" => $donnees_techniques,
9202     ));
9203 mbroquet 3730 }
9204     //
9205     return $this->inst_donnees_techniques;
9206     }
9207    
9208    
9209     /**
9210 softime 10573 * TODO: replace with '$this->f->findObjectById' ?
9211     *
9212 mbroquet 3730 * Récupère l'instance du dossier d'autorisation.
9213     *
9214     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
9215     *
9216     * @return object
9217     */
9218 fmichon 4708 function get_inst_dossier_autorisation($dossier_autorisation = null) {
9219 mbroquet 3730 //
9220     return $this->get_inst_common("dossier_autorisation", $dossier_autorisation);
9221     }
9222    
9223    
9224     /**
9225     * Récupère l'instance du dossier d'autorisation, puis la clé d'accès au portail
9226     * citoyen associée à ce DA.
9227     *
9228     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
9229     *
9230     * @return string $cle_acces_citoyen si la clé d'accès existe
9231     * boolean false si la clé n'existe pas
9232     */
9233     protected function get_citizen_access_key($dossier_autorisation = null) {
9234     //
9235     $inst_da = $this->get_inst_dossier_autorisation($dossier_autorisation);
9236     // Récupération de la valeur de la clé d'accès
9237     $cle_acces_citoyen = $inst_da->getVal('cle_acces_citoyen');
9238     if ($cle_acces_citoyen === '' OR $cle_acces_citoyen === null) {
9239     return false;
9240     }
9241     return $cle_acces_citoyen;
9242     }
9243    
9244    
9245     /**
9246     * Récupère l'instance du type détaillé du dossier d'autorisation.
9247     *
9248     * @param integer $dossier_autorisation_type_detaille Identifiant
9249     *
9250     * @return object
9251     */
9252     function get_inst_dossier_autorisation_type_detaille($dossier_autorisation_type_detaille = null) {
9253     //
9254     if (is_null($this->inst_dossier_autorisation_type_detaille)) {
9255     //
9256     if (is_null($dossier_autorisation_type_detaille)) {
9257     //
9258     $dossier_autorisation = $this->get_inst_dossier_autorisation();
9259     //
9260     $dossier_autorisation_type_detaille = $dossier_autorisation->getVal('dossier_autorisation_type_detaille');
9261     }
9262     //
9263 softime 7996 $this->inst_dossier_autorisation_type_detaille = $this->f->get_inst__om_dbform(array(
9264     "obj" => "dossier_autorisation_type_detaille",
9265     "idx" => $dossier_autorisation_type_detaille,
9266     ));
9267 mbroquet 3730 }
9268     //
9269     return $this->inst_dossier_autorisation_type_detaille;
9270     }
9271    
9272     /**
9273     * Récupère l'instance du cerfa
9274     *
9275     * @param integer $cerfa Identifiant du cerfa
9276     *
9277     * @return object
9278     */
9279     function get_inst_cerfa($cerfa = null) {
9280     //
9281     if (is_null($this->inst_cerfa)) {
9282     //
9283     if (is_null($cerfa)) {
9284     //
9285     $dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
9286     //
9287     $cerfa = $dossier_autorisation_type_detaille->getVal('cerfa');
9288     }
9289     //
9290 softime 7996 $this->inst_cerfa = $this->f->get_inst__om_dbform(array(
9291     "obj" => "cerfa",
9292     "idx" => $cerfa,
9293     ));
9294 mbroquet 3730 }
9295     //
9296     return $this->inst_cerfa;
9297     }
9298    
9299     /**
9300     * CONDITION - is_user_from_allowed_collectivite.
9301     *
9302     * Cette condition permet de vérifier si l'utilisateur connecté appartient
9303     * à une collectivité autorisée : c'est-à-dire de niveau 2 ou identique à
9304     * la collectivité de l'enregistrement sur lequel on se trouve.
9305     *
9306     * @return boolean
9307     */
9308     function is_user_from_allowed_collectivite() {
9309    
9310     // Si l'utilisateur est de niveau 2
9311     if ($_SESSION["niveau"] == "2") {
9312     // Alors l'utilisateur fait partie d'une collectivité autorisée
9313     return true;
9314     }
9315    
9316     // L'utilisateur est donc de niveau 1
9317     // On vérifie donc si la collectivité de l'utilisateur est la même
9318     // que la collectivité de l'élément sur lequel on se trouve
9319     if ($_SESSION["collectivite"] === $this->getVal("om_collectivite")) {
9320     // Alors l'utilisateur fait partie d'une collectivité autorisée
9321     return true;
9322     }
9323    
9324     // L'utilisateur ne fait pas partie d'une collectivité autorisée
9325     return false;
9326     }
9327    
9328     /**
9329     * Création ou mise à jour du répertoire de numérisation.
9330     *
9331     * L'objet de cette méthode est la création ou la mise à jour de la date de
9332     * modification du répertoire de numérisation destiné à recevoir les pièces
9333     * numérisées pour un import automatique.
9334     * À chaque saisie d'une nouvelle demande dans openADS, le répertoire est
9335     * soit créé soit mis à jour pour être disponible en dehors d'openADS
9336     * (point de montage sur le serveur) pour permettre de déposer les pièces
9337     * numérisées directement depuis le copieur. À intervalle régulier, un
9338     * service vérifie le contenu de ces répertoire pour importer
9339     * automatiquement ces fichiers dans l'onglet 'Pièce(s)' du dossier
9340     * concerné.
9341     * La mise à jour de la date de modification est importante pour réaliser
9342     * la purge des répertoires vides sur la base de la date de la dernière
9343     * demande qui concerne le dossier.
9344     *
9345     * @return boolean
9346     */
9347     function create_or_touch_digitalization_folder() {
9348    
9349     // Nom du répertoire
9350     // Le répertoire créé possède comme nom le libellé du dossier avec
9351     // le suffixe séparé par un '.'. Exemple : PC0130551601234.P0
9352 nmeucci 4526 $separateur = '';
9353     if ($this->getSuffixe($this->getVal('dossier_instruction_type')) === 't') {
9354     $separateur = '.';
9355     }
9356    
9357 mbroquet 3730 $digitalization_folder_name = str_replace(
9358     $this->getVal("dossier_autorisation"),
9359 nmeucci 4526 $this->getVal("dossier_autorisation").$separateur,
9360 mbroquet 3730 $this->getVal($this->clePrimaire)
9361     );
9362    
9363     // Vérifie que l'option de numérisation des dossiers est désactivée
9364     if ($this->f->is_option_digitalization_folder_enabled() !== true) {
9365     //
9366     $this->addToLog(
9367     _("L'option de numerisation des dossiers n'est pas activee").".",
9368     DEBUG_MODE
9369     );
9370     return false;
9371     }
9372    
9373     // Vérifie le paramétrage du répertoire de numérisation
9374     if ($this->f->getParameter("digitalization_folder_path") === null) {
9375     //
9376     $this->addToLog(
9377     "Configuration du répertoire de numérisation incorrecte.",
9378     DEBUG_MODE
9379     );
9380     return false;
9381     }
9382    
9383     // Répertoire cible
9384     $root_folder_path = $this->f->getParameter("digitalization_folder_path");
9385    
9386     // Vérifie que le répertoire existe
9387     if (is_dir($root_folder_path) !== true) {
9388     //
9389     $this->addToLog(
9390     sprintf(
9391     "Le répertoire '%s' n'existe pas.",
9392     $root_folder_path
9393     ),
9394     DEBUG_MODE
9395     );
9396     return false;
9397     }
9398    
9399     // Répertoire des "à traiter"
9400     $todo_folder_path = $root_folder_path."Todo/";
9401    
9402     // Vérifie que le répertoire existe
9403     if (is_dir($todo_folder_path) !== true) {
9404     //
9405     $this->addToLog(
9406     sprintf(
9407     "Le répertoire '%s' n'existe pas.",
9408     $todo_folder_path
9409     ),
9410     DEBUG_MODE
9411     );
9412     return false;
9413     }
9414    
9415     // Répertoire de numérisation.
9416     $digitalization_folder_path = $todo_folder_path.$digitalization_folder_name;
9417    
9418     // Si le répertore existe déjà le répertoire n'est pas créé
9419     if (file_exists($digitalization_folder_path) == true) {
9420     // Mise à jour du répertoire
9421     if (touch($digitalization_folder_path) !== true) {
9422     // Si une erreur survient
9423     $this->addToLog(
9424     sprintf(
9425     "Erreur lors de la mise à jour du répertoire '%s'.",
9426     $digitalization_folder_path
9427     ),
9428     DEBUG_MODE
9429     );
9430     return false;
9431     }
9432     //
9433     return true;
9434     } else {
9435     // Création du répertoire
9436     if (mkdir($digitalization_folder_path) !== true) {
9437     //
9438     $this->addToLog(
9439     sprintf(
9440     "Erreur lors de la création du répertoire '%s'.",
9441     $digitalization_folder_path
9442     ),
9443     DEBUG_MODE
9444     );
9445     return false;
9446     }
9447     //
9448     return true;
9449     }
9450     }
9451    
9452 nmeucci 3876 /**
9453     * Récupère, convertit et retourne les logs de toutes les instructions
9454     *
9455     * @return array tableau indexé de logs
9456     */
9457     public function get_log_instructions() {
9458     $log_instructions = $this->getVal('log_instructions');
9459     // Gestion du premier log
9460 nmeucci 3887 if ($log_instructions === '') {
9461 nmeucci 3876 $log_instructions = json_encode(array());
9462     }
9463 nmeucci 3887 // Gestion du log invalide
9464     if(!$this->isJson($log_instructions)) {
9465     return false;
9466     }
9467 nmeucci 3876 return json_decode($log_instructions, true);
9468     }
9469    
9470     /**
9471     * Ajoute un log d'instruction aux logs existants
9472     *
9473     * @param array $log valeurs de l'instruction
9474     * @return bool vrai si traitement effectué avec succès
9475     */
9476     public function add_log_instructions($log) {
9477     // Begin
9478     $this->begin_treatment(__METHOD__);
9479     // Ajout du log
9480     $log_instructions = $this->get_log_instructions();
9481 nmeucci 3887 if ($log_instructions === false) {
9482     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
9483     return $this->end_treatment(__METHOD__, false);
9484     }
9485 nmeucci 3876 array_push($log_instructions, $log);
9486 nmeucci 3907 $log_instructions = json_encode($log_instructions);
9487 nmeucci 3876 // Mise à jour du DI
9488     $val = array("log_instructions"=>$log_instructions);
9489 softime 12847 $ret = $this->f->db->autoexecute(
9490 nmeucci 3876 DB_PREFIXE."dossier",
9491     $val,
9492     DB_AUTOQUERY_UPDATE,
9493 softime 12847 "dossier = '".$this->getVal('dossier')."'"
9494     );
9495     $this->addToLog(
9496     __METHOD__."(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($val, true).", DB_AUTOQUERY_UPDATE, \"dossier = '".$this->getVal('dossier')."'\");",
9497     VERBOSE_MODE
9498     );
9499     if ($this->f->isDatabaseError($ret, true) !== false) {
9500 nmeucci 3876 $this->erreur_db($ret->getDebugInfo(), $ret->getMessage(), 'dossier');
9501     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
9502     return $this->end_treatment(__METHOD__, false);
9503     }
9504     return $this->end_treatment(__METHOD__, true);
9505     }
9506    
9507 nmeucci 3887 /**
9508 fmichon 4708 * TREATMENT - mark_as_connected_to_referentiel_erp.
9509     *
9510     * Cette méthode permet de positionner le marqueur
9511     * 'interface_referentiel_erp' à 'true'. Cela signifie que le dossier est
9512     * connecté au référentiel ERP.
9513     *
9514     * @return boolean
9515     */
9516     function mark_as_connected_to_referentiel_erp() {
9517     //
9518     $this->begin_treatment(__METHOD__);
9519     //
9520     $data = array("interface_referentiel_erp" => true, );
9521     // Exécution de la requête
9522     $res = $this->f->db->autoExecute(
9523     DB_PREFIXE.$this->table,
9524     $data,
9525     DB_AUTOQUERY_UPDATE,
9526     $this->getCle($this->getVal($this->clePrimaire))
9527     );
9528     // Logger
9529     $this->addToLog(
9530     __METHOD__."(): db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($data, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($this->getVal($this->clePrimaire))."\");",
9531     VERBOSE_MODE
9532     );
9533     //
9534     if ($this->f->isDatabaseError($res, true)) {
9535     // Appel de la methode de recuperation des erreurs
9536     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
9537     $this->correct = false;
9538     $this->addToLog(
9539     __METHOD__."(): Problème erreur lors de la mise à jour du dossier",
9540     DEBUG_MODE
9541     );
9542     // Termine le traitement
9543     return $this->end_treatment(__METHOD__, false);
9544     }
9545     //
9546     $this->addToMessage(_("Le dossier est désormais 'connecté avec le référentiel ERP'."));
9547     return $this->end_treatment(__METHOD__, true);
9548     }
9549 nmeucci 3887
9550 fmichon 4708 /**
9551     * CONDITION - is_connected_to_referentiel_erp.
9552     *
9553     * @return boolean
9554     */
9555     function is_connected_to_referentiel_erp() {
9556     //
9557     if ($this->getVal("interface_referentiel_erp") !== "t") {
9558     return false;
9559     }
9560     //
9561     return true;
9562     }
9563    
9564 nhaye 4777
9565 fmichon 4708 /**
9566 nhaye 4777 * Retourne les données techniques applicables au dossier courant, càd les données
9567     * techniques liées au dossier avec seulement les champs du CERFA associé au type de
9568     * dossier.
9569     *
9570     * @return array $donnees_techniques_applicables Tableau associatif contenant
9571     * seulement les données techniques
9572     * applicables au dossier.
9573     */
9574     public function get_donnees_techniques_applicables() {
9575    
9576     // Récupération de l'identifiant des données techniques liées au dossier
9577     $donnees_techniques = $this->getDonneesTechniques();
9578    
9579     $inst_donnees_techniques = $this->get_inst_common('donnees_techniques', $donnees_techniques);
9580     $donnees_techniques_applicables = $inst_donnees_techniques->get_donnees_techniques_applicables();
9581     //
9582     return $donnees_techniques_applicables;
9583    
9584     }
9585    
9586    
9587     /**
9588 fmichon 4708 * Retourne un tableau avec les données du dossier d'instruction.
9589     *
9590 jymadier 5275 * L'objectif est de mettre à disposition via un WS REST un ensemble
9591 fmichon 4708 * de données exploitable par une autre application.
9592     */
9593     function get_datas() {
9594    
9595     /**
9596     *
9597     */
9598 nhaye 4777
9599 softime 10573 // TODO: replace '$this->get_inst_common' with '$this->f->findObjectById' ?
9600 nhaye 4777 $om_collectivite = $this->get_inst_common('om_collectivite', $this->getVal('om_collectivite'));
9601     $instructeur = $this->get_inst_common('instructeur', $this->getVal('instructeur'));
9602     $division = $this->get_inst_common('division', $this->getVal('division'));
9603 softime 9282 $etat = $this->get_inst_common('etat', $this->getVal('etat'));
9604 nhaye 4777 $dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
9605     $dossier_autorisation_type = $this->get_inst_common('dossier_autorisation_type', $dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
9606     $donnees_techniques = $this->get_donnees_techniques_applicables();
9607    
9608 fmichon 4708 //
9609     $datas = array(
9610     //
9611     "dossier_instruction" => $this->getVal($this->clePrimaire),
9612     //
9613     "dossier_autorisation" => $this->getVal("dossier_autorisation"),
9614     //
9615     "terrain_adresse_voie_numero" => $this->getVal("terrain_adresse_voie_numero"),
9616     "terrain_adresse_lieu_dit" => $this->getVal("terrain_adresse_lieu_dit"),
9617     "terrain_adresse_code_postal" => $this->getVal("terrain_adresse_code_postal"),
9618     "terrain_adresse_cedex" => $this->getVal("terrain_adresse_cedex"),
9619     "terrain_adresse_voie" => $this->getVal("terrain_adresse_voie"),
9620     "terrain_adresse_bp" => $this->getVal("terrain_adresse_bp"),
9621     "terrain_adresse_localite" => $this->getVal("terrain_adresse_localite"),
9622     "terrain_superficie" => $this->getVal("terrain_superficie"),
9623 softime 13528 "terrain_superficie_calculee" => $this->getVal("terrain_superficie_calculee"),
9624 fmichon 4708 //
9625     "references_cadastrales" => $this->f->parseParcelles($this->getVal("terrain_references_cadastrales"), $this->getVal('om_collectivite')),
9626 softime 14064 "geoloc_latitude" => $this->getVal("geoloc_latitude"),
9627     "geoloc_longitude" => $this->getVal("geoloc_longitude"),
9628     "geoloc_rayon" => $this->getVal("geoloc_rayon"),
9629 nhaye 4777 "dossier_autorisation_type" => $dossier_autorisation_type->getVal("libelle"),
9630     "dossier_autorisation_type_detaille" => $dossier_autorisation_type_detaille->getVal("libelle"),
9631     "collectivite" => $om_collectivite->getVal("libelle"),
9632     "instructeur" => $instructeur->getVal("nom"),
9633     "division" => $division->getVal("libelle"),
9634 softime 9282 "etat_dossier" => $etat->getVal("libelle"),
9635 nhaye 4777 "statut_dossier" => $this->getStatut(),
9636     "date_depot_initial" => $this->getVal("date_depot"),
9637     "date_limite_instruction" => $this->getVal("date_limite"),
9638     "date_decision" => $this->getVal("date_decision"),
9639     "enjeu_urbanisme" => $this->getVal("enjeu_urba") == 't' ? 'true' : 'false',
9640     "enjeu_erp" => $this->getVal("enjeu_erp") == 't' ? 'true' : 'false',
9641 fmichon 4708 );
9642    
9643 softime 6565 // Gestion des demandeurs.
9644 fmichon 4708 $this->listeDemandeur('dossier', $this->getVal($this->clePrimaire));
9645     //
9646 softime 6565 if (isset($this->valIdDemandeur["petitionnaire_principal"]) AND !empty($this->valIdDemandeur["petitionnaire_principal"])) {
9647 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
9648     "obj" => "petitionnaire",
9649     "idx" => $this->valIdDemandeur["petitionnaire_principal"][0],
9650     ));
9651 softime 6565 $datas["petitionnaire_principal"] = $demandeur->get_datas();
9652     $demandeur->__destruct();
9653     }
9654 fmichon 4708 //
9655     if (isset($this->valIdDemandeur["delegataire"]) && !empty($this->valIdDemandeur["delegataire"])) {
9656 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
9657     "obj" => "delegataire",
9658     "idx" => $this->valIdDemandeur["delegataire"][0],
9659     ));
9660 fmichon 4708 $datas["delegataire"] = $demandeur->get_datas();
9661     $demandeur->__destruct();
9662     }
9663     //
9664     if (isset($this->valIdDemandeur["petitionnaire"]) AND !empty($this->valIdDemandeur["petitionnaire"])) {
9665     $datas["autres_petitionnaires"] = array();
9666     foreach ($this->valIdDemandeur["petitionnaire"] as $petitionnaire) {
9667 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
9668     "obj" => "petitionnaire",
9669     "idx" => $petitionnaire,
9670     ));
9671 fmichon 4708 $datas["autres_petitionnaires"][] = $demandeur->get_datas();
9672     $demandeur->__destruct();
9673     }
9674     }
9675    
9676 nhaye 4777 // Tableau contenant le nom de chaque champ de données techniques à retourner
9677     $dt_a_afficher = array(
9678     "co_tot_log_nb",
9679     "co_cstr_exist",
9680     "co_uti_pers",
9681     "co_uti_vente",
9682     "co_uti_loc",
9683     "su_tot_shon_tot",
9684     "su_avt_shon_tot",
9685     "am_lot_max_nb",
9686     "am_empl_nb",
9687     );
9688    
9689 jymadier 4785 // Tableau associatif contenant les données techniques voulues
9690     $tab_donnees_techniques = array();
9691 nhaye 4777 foreach ($dt_a_afficher as $key) {
9692     // On ajoute le champ de données techniques dans le retour seulement s'il
9693     // existe dans $donnees_techniques (s'il est applicable au dossier)
9694 jymadier 4785 if (array_key_exists($key, $donnees_techniques) === true) {
9695 nhaye 4777 if ($donnees_techniques[$key] === 't') {
9696     $donnees_techniques[$key] = 'true';
9697     };
9698     if ($donnees_techniques[$key] === 'f') {
9699     $donnees_techniques[$key] = 'false';
9700     };
9701 jymadier 4785 $tab_donnees_techniques[$key] = $donnees_techniques[$key];
9702 nhaye 4777 };
9703     };
9704    
9705 jymadier 4785 $datas['donnees_techniques'] = $tab_donnees_techniques;
9706 softime 10573
9707     // Affiche le code INSEE de la collectivité du dossier d'instruction
9708     /*$collectivite = $this->f->getCollectivite($this->getVal('om_collectivite'));
9709     $datas['collectivite_insee'] = $collectivite["insee"];*/
9710     $datas['collectivite_insee'] = $this->get_da_insee();
9711 fmichon 4708 //
9712     return $datas;
9713     }
9714    
9715 softime 6565 /**
9716 softime 10573 * Renvoi le code INSEE du DA associé
9717     */
9718     protected function get_da_insee() {
9719     $inst_da = $this->f->get_inst__om_dbform(array(
9720     "obj" => "dossier_autorisation",
9721     "idx" => $this->getVal('dossier_autorisation')
9722     ));
9723     return $inst_da->getVal('insee');
9724     }
9725    
9726     /**
9727 softime 6565 * CONDITION - is_class_dossier_corresponding_to_his_groupe
9728     *
9729     * Vérifie la correspondance groupe/classe du dossier instancié.
9730     *
9731     * @param string $classe
9732     * @return boolean
9733     */
9734     protected function is_class_dossier_corresponding_to_type_form($classe) {
9735     $type_form = $this->get_type_affichage_formulaire();
9736     switch ($type_form) {
9737 softime 7067 case 'DPC';
9738 softime 6565 case 'ADS':
9739 softime 10573 case 'CONSULTATION ENTRANTE':
9740 softime 6565 if ($this->f->starts_with($classe, 'dossier_instruction') === true) {
9741     return true;
9742     }
9743     return false;
9744     case 'CTX RE':
9745     if ($this->f->ends_with($classe, '_recours') === true) {
9746     return true;
9747     }
9748     return false;
9749     case 'CTX IN':
9750     if ($this->f->ends_with($classe, '_infractions') === true) {
9751     return true;
9752     }
9753     return false;
9754     default:
9755     return false;
9756     }
9757     }
9758 nhaye 4777
9759 softime 6565
9760 softime 6272 /**
9761 softime 6565 * CONDITION - check_context
9762     *
9763     * Vérifie la correspondance groupes dossier/utilisateur.
9764     * Vérifie l'accès aux dossiers confidentiels.
9765     * Vérifie la correspondance groupe/classe.
9766     *
9767     * @return boolean
9768     */
9769     public function check_context() {
9770     // Le dossier doit être un objet valide
9771     $id = $this->getVal($this->clePrimaire);
9772     if ($id === 0 OR $id === '0' OR $id === '' OR $id === ']') {
9773     return false;
9774     }
9775    
9776     // Vérification que l'utilisateur a accès au dossier
9777     if ($this->can_user_access_dossier() === false) {
9778     return false;
9779     }
9780     // Vérification que la classe métier instanciée est adéquate.
9781 softime 7996 return $this->is_class_dossier_corresponding_to_type_form($this->get_absolute_class_name());
9782 softime 6565 }
9783    
9784     /**
9785     * VIEW - redirect.
9786     *
9787     * Cette vue est appelée lorsque l'on souhaite consulter un dossier dont on ne connaît pas le groupe.
9788     * Ce fonctionnement est nécessaire car les classes métier filles de 'dossier' sont relatives à ce groupe.
9789     *
9790     * Par exemple, depuis l'onglet "Dossiers Liés" du DI, le listing ne permet pas d'instancier chaque résultat
9791     * et par conséquent on n'a pas accès au groupe du dossier. L'action tableau consulter y est surchargée afin
9792     * d'amener à cette vue qui se charge de faire la redirection adéquate.
9793     *
9794     * @return void
9795     */
9796     public function redirect() {
9797     // Redirection vers la classe métier adéquate
9798     $context = $this->get_type_affichage_formulaire();
9799     switch ($context) {
9800     case 'ADS':
9801 softime 10573 case 'CONSULTATION ENTRANTE':
9802 softime 6565 $obj = 'dossier_instruction';
9803     break;
9804     case 'CTX RE':
9805     $obj = 'dossier_contentieux_tous_recours';
9806     break;
9807     case 'CTX IN':
9808     $obj = 'dossier_contentieux_toutes_infractions';
9809     break;
9810     default:
9811     return;
9812     }
9813     $idx = $this->getVal($this->clePrimaire);
9814 softime 7996 $link = OM_ROUTE_FORM.'&obj='.$obj.'&action=3&idx='.$idx;
9815 softime 6565 if ($this->f->get_submitted_get_value('retourformulaire') !== null
9816     && $this->f->get_submitted_get_value('idxformulaire') !== null) {
9817 softime 7996 $link .= '&premier=0&tricol=&retourformulaire='.$this->f->get_submitted_get_value('retourformulaire');
9818 softime 6565 $link .= '&idxformulaire='.$this->f->get_submitted_get_value('idxformulaire');
9819     }
9820    
9821     header('Location: '.$link);
9822     exit();
9823     }
9824    
9825    
9826     /**
9827     * CONDITION - is_confidentiel
9828     *
9829     * Permet de savoir si le type de dossier d'autorisation du dossier courant est
9830     * confidentiel.
9831     *
9832     * @return boolean true si le dossier est confidentiel, sinon false.
9833     *
9834     */
9835     public function is_confidentiel() {
9836     //
9837     $inst_dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
9838     $inst_dossier_autorisation_type = $this->get_inst_dossier_autorisation_type($inst_dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
9839     $confidentiel = $inst_dossier_autorisation_type->getVal('confidentiel');
9840     //
9841     if ($confidentiel === 't') {
9842     return true;
9843     }
9844     return false;
9845     }
9846    
9847    
9848     /**
9849     * CONDITION - can_user_access_dossier
9850     *
9851     * Effectue les vérifications suivantes :
9852     * - L'utilisateur doit avoir accès au groupe du dossier
9853     * - Si le dossier est confidentiel, l'utilisateur doit avoir accès aux dossiers
9854     * confidentiels de ce groupe
9855     *
9856     * @return boolean true si les conditions ci-dessus sont réunies, sinon false
9857     *
9858     */
9859     public function can_user_access_dossier() {
9860     // Récupère le code du groupe
9861     $groupe_dossier = $this->get_groupe();
9862    
9863     // Le groupe doit être accessible par l'utilisateur ;
9864     if ($this->f->is_user_in_group($groupe_dossier) === false) {
9865     return false;
9866     }
9867     if ($this->is_confidentiel() === true) {
9868     //
9869     if ($this->f->can_user_access_dossiers_confidentiels_from_groupe($groupe_dossier) === false) {
9870     return false;
9871     }
9872     }
9873     return true;
9874     }
9875    
9876    
9877     /**
9878 softime 6272 * Met à jour une métadonnée sur tous les fichiers liés au dossier.
9879     *
9880     * @param string $metadata Nom de la métadonnée.
9881     * @param string $metadata_value Nouvelle valeur de la métadonnée.
9882     *
9883     * @return boolean
9884     */
9885     public function update_metadata_by_dossier($metadata, $metadata_value) {
9886     // Rècupère la liste des fichiers stockés liés au dossier
9887 softime 14542 $qres = $this->f->get_all_results_from_db_query(
9888     sprintf(
9889     'SELECT
9890     uid AS uid
9891     FROM
9892     %1$sdocument_numerise
9893     WHERE
9894     dossier = \'%2$s\'
9895     AND document_numerise IS NOT NULL
9896     UNION
9897     SELECT
9898     fichier AS uid
9899     FROM
9900     %1$sconsultation
9901     WHERE
9902     dossier = \'%2$s\'
9903     AND fichier IS NOT NULL
9904     UNION
9905     SELECT
9906     om_fichier_consultation AS uid
9907     FROM
9908     %1$sconsultation
9909     WHERE
9910     dossier = \'%2$s\'
9911     AND om_fichier_consultation IS NOT NULL
9912     UNION
9913     SELECT
9914     om_fichier_instruction AS uid
9915     FROM
9916     %1$sinstruction
9917     WHERE
9918     dossier = \'%2$s\'
9919     AND om_fichier_instruction IS NOT NULL
9920     UNION
9921     SELECT
9922     om_fichier_rapport_instruction AS uid
9923     FROM
9924     %1$srapport_instruction
9925     WHERE
9926     dossier_instruction = \'%2$s\'
9927     AND om_fichier_rapport_instruction IS NOT NULL;',
9928     DB_PREFIXE,
9929     $this->f->db->escapeSimple($this->getVal($this->clePrimaire))
9930     ),
9931     array(
9932     'origin' => __METHOD__
9933     )
9934 softime 6272 );
9935    
9936     // Définit la métadonnée à mettre à jour
9937     $metadata_update = array();
9938     $metadata_update[$metadata] = $metadata_value;
9939    
9940     // Pour chaque résultat
9941 softime 14542 foreach ($qres['result'] as $row) {
9942 softime 6272 // Met à jour les métadonnées du fichier
9943     $uid_update = $this->f->storage->storage->update_metadata($row['uid'], $metadata_update);
9944    
9945     // Si la méthode ne retourne pas l'uid du fichier alors la mise
9946     // à jour ne s'est pas réalisée
9947     if ($uid_update !== $row['uid']) {
9948     //
9949     return false;
9950     }
9951     }
9952    
9953     //
9954     return true;
9955     }
9956    
9957    
9958     /**
9959     * Traitement pour les ERP.
9960     * Si la valeur du champ 'erp' a été modifié, modifie la valeur de la
9961     * métadonnée concernceERP sur tous les fichiers liés au dossier.
9962     *
9963     * @param array $values Liste des nouvelles valeurs.
9964     *
9965     * @return boolean
9966     */
9967     public function update_concerneERP(array $values) {
9968     // Définit le champ et la métadonnée
9969     $champ = 'erp';
9970     $metadata = 'concerneERP';
9971    
9972     // Définit les valeurs à comparer
9973     $value_after = $this->get_boolean_from_view_value($values[$champ]);
9974     $value_before = $this->get_boolean_from_pgsql_value($this->getVal($champ));
9975    
9976     // Vérifie si la valeur du champ a été modifié
9977     if ($value_after !== $value_before) {
9978     // Transforme la valeur booléenne en string
9979     $metadata_value = 'false';
9980     if ($value_after === true) {
9981     $metadata_value = 'true';
9982     }
9983    
9984     // Met à jour les métadonnées des fichiers liés au dossier
9985     $update = $this->update_metadata_by_dossier($metadata, $metadata_value);
9986     //
9987     if ($update !== true) {
9988     //
9989     return false;
9990     }
9991     }
9992    
9993     //
9994     return true;
9995     }
9996    
9997    
9998 softime 6565 /**
9999 softime 10573 * TODO: replace with '$this->f->findObjectById' ?
10000     *
10001 softime 6565 * Récupère l'instance du groupe.
10002     *
10003     * @param string $groupe Identifiant du groupe.
10004     *
10005     * @return object
10006     */
10007     private function get_inst_groupe($groupe) {
10008     //
10009     return $this->get_inst_common("groupe", $groupe);
10010     }
10011    
10012    
10013     /**
10014 softime 10573 * TODO: replace with '$this->f->findObjectById' ?
10015     *
10016 softime 6565 * Récupère l'instance du type de dossier d'autorisation.
10017     *
10018     * @param string $dossier_autorisation_type Identifiant du type de dossier
10019     * d'autorisation.
10020     *
10021     * @return object
10022     */
10023     private function get_inst_dossier_autorisation_type($dossier_autorisation_type) {
10024     //
10025     return $this->get_inst_common("dossier_autorisation_type", $dossier_autorisation_type);
10026     }
10027    
10028    
10029 softime 7366 /**
10030     * Récupère l'instance de la demande du dossier
10031     *
10032     * @param mixed Identifiant de la demande
10033     *
10034     * @return object
10035     */
10036     function get_inst_demande($demande = null) {
10037     //
10038     if (is_null($this->inst_demande)) {
10039     //
10040     if (is_null($demande)) {
10041     $demande = $this->get_demande_by_dossier_instruction();
10042     }
10043     //
10044     return $this->get_inst_common("demande", $demande);
10045     }
10046     //
10047     return $this->inst_demande;
10048     }
10049    
10050    
10051     /**
10052 softime 7541 * Récupère l'identifiant de la demande initiale par le dossier d'instruction.
10053 softime 7366 *
10054 softime 14064 * @return integer|null renvoie l'identifiant de la demande ou null si
10055     * rien n'a été récupéré
10056 softime 7366 */
10057     function get_demande_by_dossier_instruction() {
10058 softime 14064 $qres = $this->f->get_one_result_from_db_query(
10059     sprintf(
10060     'SELECT
10061     demande
10062     FROM
10063     %1$sdemande
10064     WHERE
10065     dossier_instruction = \'%2$s\'
10066     ORDER BY
10067     instruction_recepisse ASC
10068     LIMIT 1',
10069     DB_PREFIXE,
10070     $this->getVal($this->clePrimaire)
10071     ),
10072     array(
10073     "origin" => __METHOD__,
10074     )
10075     );
10076 softime 7366
10077 softime 14064 return $qres["result"];
10078 softime 7366 }
10079    
10080 softime 7996 /**
10081     * TREATMENT - update_last_modification_date.
10082     *
10083     * Cette methode met à jour la date de dernière modification du dossier.
10084     *
10085     * @return boolean
10086     */
10087     public function update_last_modification_date() {
10088     //
10089     $this->begin_treatment(__METHOD__);
10090     //
10091     $this->correct = true;
10092 softime 9245 $valF = array();
10093     $valF["date_modification"] = 'NOW';
10094 softime 7996 //
10095     $res = $this->f->db->autoExecute(
10096     DB_PREFIXE.$this->table,
10097 softime 9245 $valF,
10098 softime 7996 DB_AUTOQUERY_UPDATE,
10099     $this->clePrimaire." = '".$this->getVal($this->clePrimaire)."'"
10100     );
10101     if ($this->f->isDatabaseError($res, true)) {
10102     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
10103     $this->correct = false;
10104     return $this->end_treatment(__METHOD__, false);
10105     } else {
10106     return $this->end_treatment(__METHOD__, true);
10107     }
10108     //
10109     return $this->end_treatment(__METHOD__, false);
10110     }
10111 softime 7366
10112 softime 7996 /**
10113     * TREATMENT - update_hash_sitadel.
10114     *
10115     * Cette methode met à jour le hash SITADEL du dossier.
10116     *
10117     * @return boolean
10118     */
10119     public function update_hash_sitadel($hash_sitadel = null) {
10120     //
10121     $this->begin_treatment(__METHOD__);
10122     //
10123     if ($hash_sitadel !== null && $hash_sitadel !== '') {
10124     //
10125     $this->correct = true;
10126 softime 9245 $valF = array();
10127     $valF["hash_sitadel"] = $hash_sitadel;
10128 softime 7996 //
10129     $res = $this->f->db->autoExecute(
10130     DB_PREFIXE.$this->table,
10131 softime 9245 $valF,
10132 softime 7996 DB_AUTOQUERY_UPDATE,
10133     $this->clePrimaire." = '".$this->getVal($this->clePrimaire)."'"
10134     );
10135     if ($this->f->isDatabaseError($res, true)) {
10136     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
10137     $this->correct = false;
10138     return $this->end_treatment(__METHOD__, false);
10139     } else {
10140     return $this->end_treatment(__METHOD__, true);
10141     }
10142     }
10143     //
10144     return $this->end_treatment(__METHOD__, false);
10145     }
10146    
10147 softime 8477 /**
10148 softime 9245 * TREATMENT - update_version_clos
10149     *
10150     * @param string $mode Mode de mise à jour ("up" ou "down")
10151     *
10152     * @return boolean
10153     */
10154     public function update_version_clos($mode) {
10155     //
10156     $this->begin_treatment(__METHOD__);
10157     //
10158     if ($mode !== 'up' && $mode !== 'down') {
10159     return $this->end_treatment(__METHOD__, false);
10160     }
10161     //
10162     $inst_da = $this->get_inst_dossier_autorisation($this->getVal("dossier_autorisation"));
10163     $da_version_clos = $inst_da->getval('numero_version_clos');
10164     //
10165     $this->correct = true;
10166     $data = array();
10167     $data["version_clos"] = 0;
10168     if ($da_version_clos !== null
10169     && $da_version_clos !== '') {
10170     //
10171     if ($mode === 'up') {
10172     $data["version_clos"] = intval($da_version_clos)+1;
10173     $inst_da->update_numero_version_clos($data["version_clos"]);
10174     }
10175     if ($mode === 'down') {
10176     $data["version_clos"] = null;
10177     }
10178     } else {
10179     $inst_da->update_numero_version_clos($data["version_clos"]);
10180     }
10181     //
10182     $res = $this->f->db->autoExecute(
10183     sprintf('%s%s', DB_PREFIXE, $this->table),
10184     $data,
10185     DB_AUTOQUERY_UPDATE,
10186     sprintf("%s = '%s'", $this->clePrimaire, $this->getVal($this->clePrimaire))
10187     );
10188     $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);
10189     if ($this->f->isDatabaseError($res, true) === true) {
10190     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
10191     $this->correct = false;
10192     return $this->end_treatment(__METHOD__, false);
10193     }
10194     return $this->end_treatment(__METHOD__, true);
10195     }
10196    
10197     /**
10198     * Récupère l'identifiant de l'état car le getVal() récupère le libellé.
10199     *
10200     * @return mixed Soit un string, soit "false"
10201     */
10202     function get_id_etat() {
10203 softime 14064 $dossier = $this->f->get_inst__om_dbform(array(
10204     'obj' => 'dossier',
10205     'idx' => $this->getVal($this->clePrimaire)
10206     ));
10207     return $dossier->getVal('etat');
10208 softime 9245 }
10209    
10210     /**
10211 softime 13528 * Methode clesecondaire
10212     *
10213     * Vérifications Effectuées :
10214     * - Vérifie si le dossier est lié à un contentieux. Si c'est le cas
10215     * affiche un message d'erreur personnalisé et ne lance pas la
10216     * la vérification des clé étrangère.
10217     */
10218     function cleSecondaire($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
10219     // Le dossier d'instruction n'est pas supprimé si celui-ci est lié à un contentieux
10220     $autorisation_contestee = $this->get_idx_by_args(
10221     'autorisation_contestee',
10222     'dossier',
10223     'autorisation_contestee',
10224     $this->getVal($this->clePrimaire)
10225     );
10226     if (! empty($autorisation_contestee)) {
10227     $this->addToMessage(__("Le dossier d'instruction ne peut pas être supprimé car celui-ci est lié à un contentieux."));
10228     $this->correct = false;
10229     return;
10230     }
10231     parent::cleSecondaire($id, $dnu1, $val, $dnu2);
10232     }
10233    
10234     /**
10235 softime 8477 * Surcharge de la méthode rechercheTable pour éviter de court-circuiter le
10236     * générateur en devant surcharger la méthode cleSecondaire afin de supprimer
10237     * les éléments liés dans les tables NaN.
10238     *
10239 softime 13528 * Vérifications Effectuées :
10240     * - Vérifie si la table à chercher fait partie des tables que l'on va
10241     * supprimer si c'est le cas la vérification de la présence d'élement
10242     * n'est pas faite
10243     *
10244 softime 8477 * @param mixed $dnu1 Instance BDD - À ne pas utiliser
10245     * @param string $table Table
10246     * @param string $field Champ
10247     * @param mixed $id Identifiant
10248     * @param mixed $dnu2 Marqueur de débogage - À ne pas utiliser
10249     * @param string $selection Condition de la requête
10250     *
10251     * @return void
10252     */
10253 softime 13528 function rechercheTable(&$dnu1 = null, $table = "", $field = "", $id = null, $dnu2 = null, $selection = "") {
10254 softime 8477 // Dans le cas d'une suppression du dossier d'instruction, les tables
10255     // liées ne sont pas vérifiées
10256 softime 13528 if (! isset($this->related_tables)) {
10257     $this->set_related_tables();
10258     }
10259     // Récupère le nom des tables de liaison à partir de la liste des tables liées.
10260     // Vérifie pour chaque élément du tableau des liaisons si il existe une clé "table".
10261     // Si c'est le cas on récupère le nom de la table dans cette entrée si ce n'est pas
10262     // le cas on récupère la clé de l'élement car il dois contenir le nom de la table.
10263     // Ensuite supprime les doublons et renvoie un tableau contenant le nom des tables
10264     // liées pour lesquels la suppression va être effectuée.
10265     $liaison_suppr = array_unique( // supprime les doublons
10266     array_map(function($value, $key) { // Récupère le nom des tables de liaison
10267     return ! empty($value['table']) ? $value['table'] : $key;
10268     },
10269     $this->related_tables,
10270     array_keys($this->related_tables)
10271     ),
10272     SORT_STRING
10273 softime 8477 );
10274 softime 13528
10275 softime 8477 if ($this->get_action_crud() === 'delete'
10276 softime 13528 && in_array($table, $liaison_suppr) === true) {
10277     // Annule la vérif
10278 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);
10279     return;
10280     }
10281 softime 13528
10282 softime 8477 parent::rechercheTable($this->f->db, $table, $field, $id, null, $selection);
10283     }
10284    
10285 softime 12124 /**
10286     * Effectue une requête sql pour récupérer la liste des id des demandeurs
10287     * associé au dossier et l'indicateur permettant de savoir si c'est un
10288     * demandeur principal ou pas.
10289     * Renvoi les résultats sous la forme d'un tableau.
10290     *
10291     * @return array|boolean tableau contenant les infos des demandeurs et false
10292     * en cas d'erreur de base de données.
10293     */
10294 softime 10573 public function get_demandeurs() {
10295     $query = sprintf('
10296 softime 12847 SELECT
10297     demandeur.demandeur,
10298     lien_dossier_demandeur.petitionnaire_principal,
10299     demandeur.type_demandeur
10300     FROM
10301     %1$sdemandeur
10302     INNER JOIN %1$slien_dossier_demandeur
10303     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
10304     WHERE
10305     lien_dossier_demandeur.dossier = \'%2$s\'',
10306 softime 10573 DB_PREFIXE,
10307     $this->getVal($this->clePrimaire)
10308     );
10309 softime 13137 $res = $this->f->get_all_results_from_db_query(
10310     $query,
10311     array(
10312     "origin" => __METHOD__,
10313     "force_return" => true,
10314     )
10315     );
10316 softime 10573 if ($res['code'] === 'KO') {
10317     return false;
10318     }
10319     return $res['result'];
10320     }
10321 softime 8477
10322 softime 10573 /**
10323     * TREATMENT - normalize_address
10324     *
10325     * Enregistre en base de données les valeurs concernant l'adresse normalisée.
10326     *
10327     * @param string $address Valeur de l'adresse normalisée.
10328     * @param string $address_json JSON de toutes les données de l'adresse normalisée.
10329     * @return boolean
10330     */
10331     public function normalize_address(string $address = null, string $address_json = '{}') {
10332     //
10333     $this->begin_treatment(__METHOD__);
10334     // Valeurs par défaut si l'adresse normalisée est vide
10335     if ($address === '') {
10336     $address = null;
10337     $address_json = '{}';
10338     }
10339     // Valeur par défaut pour le JSON de l'adresse si l'adresse saisie ne
10340     // correspond au label du JSON, donc adresse non sélectionnée parmis les
10341     // résultats retourner par l'API adresse
10342     if ($address !== null) {
10343     $address_json_decode = json_decode($address_json, true);
10344     if (isset($address_json_decode['label']) === true
10345     && $address !== $address_json_decode['label']) {
10346     //
10347     $address_json = '{}';
10348     }
10349     }
10350     //
10351     $this->correct = true;
10352     $data = array();
10353     $data["adresse_normalisee"] = $address;
10354     $data["adresse_normalisee_json"] = $address_json;
10355     //
10356     $res = $this->f->db->autoExecute(
10357     sprintf('%s%s', DB_PREFIXE, $this->table),
10358     $data,
10359     DB_AUTOQUERY_UPDATE,
10360     sprintf("%s = '%s'", $this->clePrimaire, $this->getVal($this->clePrimaire))
10361     );
10362     $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);
10363     if ($this->f->isDatabaseError($res, true) === true) {
10364     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
10365     $this->correct = false;
10366     return $this->end_treatment(__METHOD__, false);
10367     }
10368     return $this->end_treatment(__METHOD__, true);
10369     }
10370 mbroquet 3730
10371 softime 10573 public function get_last_instruction_decision() {
10372 softime 13137 $qres = $this->f->get_one_result_from_db_query(
10373     sprintf(
10374     'SELECT
10375     instruction.instruction
10376     FROM
10377     %1$sinstruction
10378 softime 14064 INNER JOIN %1$sdossier
10379     ON dossier.dossier = instruction.dossier
10380     INNER JOIN %1$setat
10381     ON dossier.etat = etat.etat
10382 softime 13137 WHERE
10383     instruction.etat = dossier.etat
10384     AND instruction.dossier = \'%2$s\'
10385     AND etat.statut = \'cloture\'
10386     ORDER BY
10387     instruction.instruction DESC
10388     LIMIT 1',
10389     DB_PREFIXE,
10390     $this->f->db->escapeSimple($this->getVal('dossier'))
10391     ),
10392     array(
10393     "origin" => __METHOD__,
10394     "force_return" => true,
10395     )
10396 softime 10573 );
10397 softime 13137 if ($qres["code"] !== "OK") {
10398 softime 10573 return false;
10399     }
10400 softime 13137 return $qres["result"];
10401 softime 10573 }
10402 softime 7996
10403 softime 10573 /**
10404     * VIEW - view_normalize_address.
10405     *
10406     * Formulaire de recherche de l'adresse normalisée.
10407     *
10408     * @return void
10409     */
10410     public function view_normalize_address() {
10411     // Vérification de l'accessibilité sur l'élément
10412     $this->checkAccessibility();
10413    
10414     // Par défaut l'adresse saisie est celle renseignée sur le dossier
10415     $address_val = trim(preg_replace('/\s\s+/', ' ', sprintf('%s %s %s %s %s %s %s',
10416     $this->getVal('terrain_adresse_voie_numero'),
10417     $this->getVal('terrain_adresse_voie'),
10418     $this->getVal('terrain_adresse_lieu_dit'),
10419     $this->getVal('terrain_adresse_localite'),
10420     $this->getVal('terrain_adresse_code_postal'),
10421     $this->getVal('terrain_adresse_bp'),
10422     $this->getVal('terrain_adresse_cedex')
10423     )));
10424     $address_val_json = '{}';
10425     if ($this->getVal('adresse_normalisee') !== null
10426     && $this->getVal('adresse_normalisee') !== '') {
10427     //
10428     $address_val = $this->getVal('adresse_normalisee');
10429     $address_val_json = htmlentities($this->getVal('adresse_normalisee_json'));
10430     if ($this->f->get_submitted_post_value("submit-normalize") === null) {
10431     $this->f->displayMessage("error", __("L'adresse de ce terrain a déjà été normalisée."));
10432     }
10433     }
10434    
10435     /**
10436     * TREATMENT
10437     */
10438     // Traitement si validation du formulaire
10439     if ($this->f->get_submitted_post_value("submit-normalize") !== null) {
10440     //
10441     $this->normalize_address($_POST["address"], $_POST["address_json"]);
10442     return;
10443     }
10444    
10445     // Formulaire de validation
10446     $this->f->layout->display__form_container__begin(array(
10447     "action" => "",
10448     "name" => "f2_normalize_address",
10449     "onsubmit" => "normalize_address(this);return false;",
10450     ));
10451     //
10452     printf('
10453     <div id="sousform-href" data-href="%s"></div>',
10454     $this->compose_form_url("form", array(
10455     "validation" => null,
10456     "maj" => 160,
10457     "retour" => "form",
10458     ))
10459     );
10460     $champs = array('address', 'address_json', );
10461     // Instanciation de l'objet formulaire
10462     $this->form = $this->f->get_inst__om_formulaire(array(
10463     "validation" => 0,
10464     "maj" => $this->getParameter("maj"),
10465     "champs" => $champs,
10466     ));
10467     // Paramétrage des champs du formulaire
10468     // address
10469     $this->form->setLib("address", __("adresse à normaliser"));
10470     $this->form->setTaille("address", 60);
10471     $this->form->setMax("address", 255);
10472     $this->form->setType("address", "text");
10473     $this->form->setVal('address', $address_val);
10474     // address_json
10475     $this->form->setType("address_json", "hidden");
10476     $this->form->setVal('address_json', $address_val_json);
10477     $this->f->displayDescription(__("Veuillez sélectionner l'adresse normalisée qui se rapproche le plus de l'adresse du terrain."));
10478     // Ouverture du conteneur de formulaire
10479     $this->form->entete();
10480     $this->form->afficher($champs, 0, false, false);
10481     $this->form->enpied();
10482     $this->f->layout->display__form_controls_container__begin(array(
10483     "controls" => "bottom",
10484     ));
10485     $this->f->layout->display__form_input_submit(array(
10486     "name" => "submit-normalize",
10487     "value" => __("Normaliser l'adresse"),
10488     "class" => "boutonFormulaire",
10489     ));
10490     $this->f->layout->display__form_controls_container__end();
10491     //
10492     $this->f->layout->display__form_container__end();
10493     }
10494    
10495    
10496     public function get_last_instruction_incompletude() {
10497 softime 13137 $qres = $this->f->get_one_result_from_db_query(
10498     sprintf(
10499     'SELECT
10500     instruction.instruction
10501     FROM
10502     %1$sinstruction
10503 softime 14064 INNER JOIN %1$sevenement
10504     ON evenement.evenement = instruction.evenement
10505 softime 13137 WHERE
10506     instruction.dossier = \'%2$s\'
10507     AND evenement.type = \'incompletude\'
10508     ORDER BY
10509     instruction.instruction DESC
10510     LIMIT 1',
10511     DB_PREFIXE,
10512     $this->f->db->escapeSimple($this->getVal('dossier'))
10513     ),
10514     array(
10515     "origin" => __METHOD__,
10516     "force_return" => true,
10517     )
10518 softime 10573 );
10519 softime 13137 if ($qres["code"] !== "OK") {
10520 softime 10573 return false;
10521     }
10522 softime 13137 return $qres["result"];
10523 softime 10573 }
10524    
10525     function get_max_num_suffixe($dat_c, $annee, $dep_c, $com_c, $num) {
10526 softime 13137 $qres = $this->f->get_one_result_from_db_query(
10527     sprintf(
10528     'SELECT
10529 softime 14064 MAX(numerotation_num_suffixe) AS max_num_suffixe
10530 softime 13137 FROM
10531     %1$sdossier
10532     WHERE
10533     numerotation_type = \'%2$s\'
10534     AND annee = \'%3$s\'
10535     AND numerotation_dep = \'%4$s\'
10536     AND numerotation_com = \'%5$s\'
10537     AND numerotation_num = \'%6$s\'',
10538     DB_PREFIXE,
10539     $this->f->db->escapeSimple($dat_c),
10540     $this->f->db->escapeSimple($annee),
10541     $this->f->db->escapeSimple($dep_c),
10542     $this->f->db->escapeSimple($com_c),
10543     $this->f->db->escapeSimple($num)
10544     ),
10545     array(
10546     "origin" => __METHOD__,
10547     "force_return" => true,
10548     )
10549 softime 10573 );
10550 softime 13137 if ($qres["code"] !== "OK") {
10551 softime 10573 return null;
10552     }
10553 softime 13137 return $qres["result"];
10554 softime 10573 }
10555    
10556     public function view_json_data() {
10557     $this->checkAccessibility();
10558     $this->f->disableLog();
10559     $view = $this->get_json_data();
10560     printf(json_encode($view));
10561     }
10562    
10563     public function get_json_data() {
10564     $val = array_combine($this->champs, $this->val);
10565     foreach ($val as $key => $value) {
10566     $val[$key] = strip_tags($value);
10567     }
10568     $inst_datd = $this->get_inst_dossier_autorisation_type_detaille();
10569     $inst_dat = $this->get_inst_dossier_autorisation_type($inst_datd->getVal('dossier_autorisation_type'));
10570     $val['dossier_autorisation_type_detaille_code'] = $inst_datd->getVal('code');
10571     $val['dossier_autorisation_type_code'] = $inst_dat->getVal('code');
10572     $val['dossier_instruction_type_code'] = $this->getCode($this->getVal('dossier_instruction_type'));
10573     $val['dossier_suffixe'] = '';
10574     if ($this->getSuffixe($this->getVal('dossier_instruction_type')) === 't') {
10575     $val['dossier_suffixe'] = sprintf('%s%s',
10576     $this->getCode($this->getVal('dossier_instruction_type')),
10577 softime 14064 $this->get_di_numero_suffixe()
10578 softime 10573 );
10579     }
10580     /*$parameters = $this->f->getCollectivite($this->getVal('om_collectivite'));
10581     $val['insee'] = $parameters['insee'];*/
10582     $val['insee'] = $this->get_da_insee();
10583     $inst_ac = $this->get_inst_autorite_competente($val['autorite_competente']);
10584     $val['autorite_competente_code'] = $inst_ac->getVal('code');
10585 softime 10808 $val['source_depot'] = $this->get_source_depot_from_demande();
10586 softime 10573 return $val;
10587     }
10588    
10589     public function update_by_instruction(array $val, array $extra_params = array()) {
10590     $this->begin_treatment(__METHOD__);
10591     // XXX Supprime les champs qui n'existent pas dans dossier
10592     $valF = $val;
10593     unset($valF['instruction']);
10594 softime 10968 unset($valF['crud']);
10595 softime 10573 if (empty($valF) === false) {
10596     $res = $this->f->db->autoExecute(
10597     sprintf('%s%s', DB_PREFIXE, $this->table),
10598     $valF,
10599     DB_AUTOQUERY_UPDATE,
10600     sprintf("%s = '%s'", $this->clePrimaire, $this->getVal($this->clePrimaire))
10601     );
10602     $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);
10603     if ($this->f->isDatabaseError($res, true) === true) {
10604     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
10605     $this->correct = false;
10606     return $this->end_treatment(__METHOD__, false);
10607     }
10608     }
10609     $trigger = $this->trigger_update_by_instruction($val);
10610     if ($trigger === false) {
10611 softime 10808 $this->addToLog(__METHOD__."(): ".__("Erreur lors de la mise à jour par instruction."), DEBUG_MODE);
10612 softime 10573 $this->correct = false;
10613     return $this->end_treatment(__METHOD__, false);
10614     }
10615     return $this->end_treatment(__METHOD__, true);
10616     }
10617    
10618     protected function trigger_update_by_instruction(array $val, array $extra_params = array()) {
10619     foreach ($this->task_types as $task_type) {
10620     $method = sprintf('add_task_%s', $task_type);
10621     if (method_exists($this, $method) === true) {
10622     //
10623     if ($this->f->is_type_dossier_platau($this->getVal('dossier_autorisation')) === true
10624 softime 10808 && $this->getVal('etat_transmission_platau') !== 'jamais_transmissible'
10625     && ($this->f->is_option_mode_service_consulte_enabled() !== true
10626     || ($this->f->is_option_mode_service_consulte_enabled() === true
10627 softime 13137 && ($this->get_source_depot_from_demande() === PLATAU
10628     || $this->get_source_depot_from_demande() === PORTAL)))) {
10629 softime 10573 //
10630     $res = $this->$method($val, $extra_params);
10631     if ($res !== true) {
10632     return $res;
10633     }
10634     }
10635     }
10636     }
10637     return true;
10638     }
10639    
10640 softime 14064 /**
10641     * Ajoute une tâche pec_metier_consultation, sortante si le tableau des valeurs
10642     * contiens :
10643     * - une entrée "pec_metier" n'ont vide
10644     *
10645     * Si le mode service consulte n'est pas activé et que le dossier est "non transmissible"
10646     * la tâche sera à l'état "draft". Sinon son état est "New".
10647     *
10648     * @param array $val : tableau de valeur servant à l'ajout de la tâche
10649     * @param array $extra_params : tableau contenant des paramètres supplémentaire servant
10650     * à l'ajout de la tâche
10651     *
10652     * @return boolean true : traitement ok, false : erreur de traitement
10653     */
10654 softime 10573 protected function add_task_pec_metier_consultation(array $val, array $extra_params = array()) {
10655     if (array_key_exists("pec_metier", $val) === true
10656 softime 11228 && $val['pec_metier'] !== null
10657     && $val['pec_metier'] !== '') {
10658 softime 10573 //
10659     $inst_task = $this->f->get_inst__om_dbform(array(
10660     "obj" => "task",
10661     "idx" => 0,
10662     ));
10663     $task_val = array(
10664     'type' => 'pec_metier_consultation',
10665     'object_id' => $val['instruction'],
10666     'dossier' => $this->getVal($this->clePrimaire),
10667     );
10668     if ($this->f->is_option_mode_service_consulte_enabled() === false
10669     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
10670     $task_val['state'] = $inst_task::STATUS_DRAFT;
10671     }
10672     $add_task = $inst_task->add_task(array('val' => $task_val));
10673     if ($add_task === false) {
10674     return false;
10675     }
10676     }
10677     return true;
10678     }
10679    
10680 softime 14064 /**
10681     * Ajoute une tâche qualification_DI, sortante si le tableau des valeurs
10682     * contiens :
10683     * - une entrée "autorite_competente" ayant une valeur différente de celle du dossier
10684     *
10685     * Si le mode service consulte n'est pas activé et que le dossier est "non transmissible"
10686     * la tâche sera à l'état "draft". Sinon son état est "New".
10687     *
10688     * @param array $val : tableau de valeur servant à l'ajout de la tâche
10689     * @param array $extra_params : tableau contenant des paramètres supplémentaire servant
10690     * à l'ajout de la tâche
10691     *
10692     * @return boolean true : traitement ok, false : erreur de traitement
10693     */
10694 softime 10573 protected function add_task_qualification_DI(array $val, array $extra_params = array()) {
10695     if (array_key_exists("autorite_competente", $val) === true
10696     && $val["autorite_competente"] !== $this->getVal('autorite_competente')) {
10697     //
10698     $inst_task = $this->f->get_inst__om_dbform(array(
10699     "obj" => "task",
10700     "idx" => 0,
10701     ));
10702     $task_val = array(
10703     'type' => 'qualification_DI',
10704     'object_id' => $val['instruction'],
10705     'dossier' => $this->getVal($this->clePrimaire),
10706     );
10707     if ($this->f->is_option_mode_service_consulte_enabled() === false
10708     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
10709     $task_val['state'] = $inst_task::STATUS_DRAFT;
10710     }
10711     $add_task = $inst_task->add_task(array('val' => $task_val));
10712     if ($add_task === false) {
10713     return false;
10714     }
10715     }
10716     return true;
10717     }
10718    
10719 softime 14064 /**
10720     * Ajoute une tâche decision_DI, sortante si le tableau des valeurs
10721     * contiens :
10722     * - une entrée "date_decision" non vide
10723     * - une entrée "avis_decision" non vide
10724     * - une entrée "crud" qui n'a pas pour valeur 'delete'
10725     * et si l'avis de décision n'a pas de prescription.
10726     *
10727     * Si le mode service consulte n'est pas activé et que le dossier est "non transmissible"
10728     * la tâche sera à l'état "draft". Sinon son état est "New".
10729     *
10730     * @param array $val : tableau de valeur servant à l'ajout de la tâche
10731     * @param array $extra_params : tableau contenant des paramètres supplémentaire servant
10732     * à l'ajout de la tâche
10733     *
10734     * @return boolean true : traitement ok, false : erreur de traitement
10735     */
10736 softime 10573 protected function add_task_decision_DI(array $val, array $extra_params = array()) {
10737     if (array_key_exists("date_decision", $val) === true
10738     && array_key_exists("avis_decision", $val) === true
10739 softime 14542 && !empty($val['date_decision'])
10740     && !empty($val['avis_decision'])
10741 softime 14064 && array_key_exists("crud", $val) === true
10742     && $val['crud'] !== 'delete') {
10743 softime 10573 //
10744 softime 10869 $inst_ad = $this->f->get_inst__om_dbform(array(
10745     "obj" => "avis_decision",
10746     "idx" => $val['avis_decision'],
10747 softime 10573 ));
10748 softime 10869 if ($inst_ad->getVal('prescription') === 'f') {
10749     //
10750     $inst_task = $this->f->get_inst__om_dbform(array(
10751     "obj" => "task",
10752     "idx" => 0,
10753     ));
10754     $task_val = array(
10755     'type' => 'decision_DI',
10756     'object_id' => $val['instruction'],
10757     'dossier' => $this->getVal($this->clePrimaire),
10758     );
10759     if ($this->f->is_option_mode_service_consulte_enabled() === false
10760     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
10761     $task_val['state'] = $inst_task::STATUS_DRAFT;
10762     }
10763     $add_task = $inst_task->add_task(array('val' => $task_val));
10764     if ($add_task === false) {
10765     return false;
10766     }
10767 softime 10573 }
10768     }
10769     return true;
10770     }
10771    
10772 softime 14064 /**
10773     * Ajoute une tâche avis_consultation, sortante si le tableau des valeurs
10774     * contiens :
10775     * - une entrée "date_decision" non vide
10776     * - une entrée "avis_decision" non vide
10777     * - une entrée "crud" qui n'a pas pour valeur 'delete'
10778     * et si l'avis de décision n'a pas de prescription.
10779     *
10780     * Si le mode service consulte n'est pas activé et que le dossier est "non transmissible"
10781     * la tâche sera à l'état "draft". Sinon son état est "New".
10782     *
10783     * @param array $val : tableau de valeur servant à l'ajout de la tâche
10784     * @param array $extra_params : tableau contenant des paramètres supplémentaire servant
10785     * à l'ajout de la tâche
10786     *
10787     * @return boolean true : traitement ok, false : erreur de traitement
10788     */
10789 softime 10573 protected function add_task_avis_consultation(array $val, array $extra_params = array()) {
10790     if (array_key_exists("date_decision", $val) === true
10791     && array_key_exists("avis_decision", $val) === true
10792 softime 14542 && !empty($val['date_decision'])
10793     && !empty($val['avis_decision'])
10794 softime 14064 && array_key_exists("crud", $val) === true
10795     && $val['crud'] !== 'delete') {
10796 softime 10573 //
10797 softime 10869 $inst_ad = $this->f->get_inst__om_dbform(array(
10798     "obj" => "avis_decision",
10799     "idx" => $val['avis_decision'],
10800 softime 10573 ));
10801 softime 10869 if ($inst_ad->getVal('prescription') === 'f') {
10802     //
10803     $inst_task = $this->f->get_inst__om_dbform(array(
10804     "obj" => "task",
10805     "idx" => 0,
10806     ));
10807     $task_val = array(
10808     'type' => 'avis_consultation',
10809     'object_id' => $val['instruction'],
10810     'dossier' => $this->getVal($this->clePrimaire),
10811     );
10812     if ($this->f->is_option_mode_service_consulte_enabled() === false
10813     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
10814     $task_val['state'] = $inst_task::STATUS_DRAFT;
10815     }
10816     $add_task = $inst_task->add_task(array('val' => $task_val));
10817     if ($add_task === false) {
10818     return false;
10819     }
10820 softime 10573 }
10821 softime 10869 }
10822     return true;
10823     }
10824    
10825 softime 14064 /**
10826     * Ajoute une tâche prescription, sortante si le tableau des valeurs
10827     * contiens :
10828     * - une entrée "date_decision" non vide
10829     * - une entrée "avis_decision" non vide
10830     * - une entrée "crud" qui n'a pas pour valeur 'delete'
10831     * et si l'avis de décision à une prescription.
10832     *
10833     * Si le mode service consulte n'est pas activé et que le dossier est "non transmissible"
10834     * la tâche sera à l'état "draft". Sinon son état est "New".
10835     *
10836     * @param array $val : tableau de valeur servant à l'ajout de la tâche
10837     * @param array $extra_params : tableau contenant des paramètres supplémentaire servant
10838     * à l'ajout de la tâche
10839     *
10840     * @return boolean true : traitement ok, false : erreur de traitement
10841     */
10842 softime 10869 protected function add_task_prescription(array $val, array $extra_params = array()) {
10843     if (array_key_exists("date_decision", $val) === true
10844     && array_key_exists("avis_decision", $val) === true
10845 softime 14542 && !empty($val['date_decision'])
10846     && !empty($val['avis_decision'])
10847 softime 14064 && array_key_exists("crud", $val) === true
10848     && $val['crud'] !== 'delete') {
10849 softime 10869 //
10850     $inst_ad = $this->f->get_inst__om_dbform(array(
10851     "obj" => "avis_decision",
10852     "idx" => $val['avis_decision'],
10853     ));
10854     if ($inst_ad->getVal('prescription') === 't') {
10855     //
10856     $inst_task = $this->f->get_inst__om_dbform(array(
10857     "obj" => "task",
10858     "idx" => 0,
10859     ));
10860     $task_val = array(
10861     'type' => 'prescription',
10862     'object_id' => $val['instruction'],
10863     'dossier' => $this->getVal($this->clePrimaire),
10864     );
10865     if ($this->f->is_option_mode_service_consulte_enabled() === false
10866     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
10867     $task_val['state'] = $inst_task::STATUS_DRAFT;
10868     }
10869     $add_task = $inst_task->add_task(array('val' => $task_val));
10870     if ($add_task === false) {
10871     return false;
10872     }
10873 softime 10573 }
10874     }
10875     return true;
10876     }
10877    
10878 softime 14064 /**
10879     * Ajoute une tâche completude_DI, sortante à l'état "draft" si le tableau des valeurs
10880     * contiens :
10881     * - une entrée "incomplet_notifie" qui a pour valeur 'f'
10882     * - une entrée "crud" qui n'a pas pour valeur 'delete'
10883     * - pas d'entrée "avis_decision"
10884     * - pas d'entrée "date_decision"
10885     *
10886     * Si le mode service consulte n'est pas activé et que le dossier est "non transmissible"
10887     * la tâche sera à l'état "draft". Sinon son état est "New".
10888     *
10889     * @param array $val : tableau de valeur servant à l'ajout de la tâche
10890     * @param array $extra_params : tableau contenant des paramètres supplémentaire servant
10891     * à l'ajout de la tâche
10892     *
10893     * @return boolean true : traitement ok, false : erreur de traitement
10894     */
10895 softime 10573 protected function add_task_completude_DI(array $val, array $extra_params = array()) {
10896     if (array_key_exists("incomplet_notifie", $val) === true
10897 softime 10968 && $val['incomplet_notifie'] === 'f'
10898 softime 14064 && $this->getVal('incomplet_notifie') === 't'
10899 softime 10968 && array_key_exists("crud", $val) === true
10900 softime 14064 && $val['crud'] !== 'delete'
10901 softime 14542 && empty($val['date_decision'])
10902     && empty($val['avis_decision'])) {
10903 softime 10573 //
10904     $inst_task = $this->f->get_inst__om_dbform(array(
10905     "obj" => "task",
10906     "idx" => 0,
10907     ));
10908     $task_val = array(
10909     'type' => 'completude_DI',
10910     'object_id' => $val['instruction'],
10911     'dossier' => $this->getVal($this->clePrimaire),
10912     );
10913     if ($this->f->is_option_mode_service_consulte_enabled() === false
10914     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
10915     $task_val['state'] = $inst_task::STATUS_DRAFT;
10916     }
10917     $add_task = $inst_task->add_task(array('val' => $task_val));
10918     if ($add_task === false) {
10919     return false;
10920     }
10921     }
10922     return true;
10923     }
10924    
10925 softime 14064 /**
10926     * Ajoute une tâche incompletude_DI, sortante à l'état "draft" si le tableau des valeurs
10927     * contiens une entrée "incomplet_notifie" qui a pour valeur 't' et une entrée "crud"
10928     * qui n'a pas pour valeur 'delete'.
10929     * Si la tâche d'incompletude est bien ajoute une tâche lettre_incompletude est également
10930     * ajoutée.
10931     *
10932     * Si le mode service consulte n'est pas activé et que le dossier est "non transmissible"
10933     * la tâche incompletude_DI sera à l'état "draft". Sinon son état est "New".
10934     *
10935     * @param array $val : tableau de valeur servant à l'ajout de la tâche
10936     * @param array $extra_params : tableau contenant des paramètres supplémentaire servant
10937     * à l'ajout de la tâche
10938     *
10939     * @return boolean true : traitement ok, false : erreur de traitement
10940     */
10941 softime 10573 public function add_task_incompletude_DI(array $val, array $extra_params = array()) {
10942     if (array_key_exists("incomplet_notifie", $val) === true
10943 softime 10968 && $val['incomplet_notifie'] === 't'
10944 softime 14064 && $this->getVal('incomplet_notifie') !== 't'
10945 softime 10968 && array_key_exists("crud", $val) === true
10946     && $val['crud'] !== 'delete') {
10947 softime 10573 //
10948     $inst_task = $this->f->get_inst__om_dbform(array(
10949     "obj" => "task",
10950     "idx" => 0,
10951     ));
10952     $task_val = array(
10953     'type' => 'incompletude_DI',
10954     'object_id' => $val['instruction'],
10955     'dossier' => $this->getVal($this->clePrimaire),
10956     );
10957     if ($this->f->is_option_mode_service_consulte_enabled() === false
10958     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
10959     $task_val['state'] = $inst_task::STATUS_DRAFT;
10960     }
10961     $add_task = $inst_task->add_task(array('val' => $task_val));
10962     if ($add_task === false) {
10963     return false;
10964     }
10965     }
10966     return true;
10967     }
10968    
10969 softime 14064 /**
10970     * Ajoute une tâche lettre_incompletude, sortante si le tableau des valeurs contiens une
10971     * entrée "incomplet_notifie" qui a pour valeur 't', que le dossier visé n'est pas déjà en
10972     * incomplet notifié, et une entrée "crud" qui n'a pas pour valeur
10973     * 'delete'.
10974     *
10975     * @param array $val : tableau de valeur servant à l'ajout de la tâche
10976     * @param array $extra_params : tableau contenant des paramètres supplémentaire servant
10977     * à l'ajout de la tâche
10978     *
10979     * @return boolean true : traitement ok, false : erreur de traitement
10980     */
10981     public function add_task_lettre_incompletude(array $val, array $extra_params = array()) {
10982     if (array_key_exists("incomplet_notifie", $val) === true
10983     && $val['incomplet_notifie'] === 't'
10984     && $this->getVal('incomplet_notifie') !== 't'
10985     && array_key_exists("crud", $val) === true
10986     && $val['crud'] !== 'delete') {
10987     // Ajout de la tâche de lettre du premier mois
10988     $extra_params['type'] = 'incompletude';
10989     if ($this->add_task_lettre_petitionnaire($val, $extra_params) === false) {
10990     return false;
10991     }
10992     }
10993     return true;
10994     }
10995    
10996     /**
10997     * Ajoute une tâche lettre_majoration, sortante si le tableau des valeurs contiens une
10998     * entrée "delai" qui a une valeur différente du "delai" du dossier d'instruction
10999     * et une entrée "crud" qui n'a pas pour valeur 'delete'.
11000     *
11001     * @param array $val : tableau de valeur servant à l'ajout de la tâche
11002     * @param array $extra_params : tableau contenant des paramètres supplémentaire servant
11003     * à l'ajout de la tâche
11004     *
11005     * @return boolean true : traitement ok, false : erreur de traitement
11006     */
11007     public function add_task_lettre_majoration(array $val, array $extra_params = array()) {
11008     if (array_key_exists("delai", $val) === true
11009     && $val['delai'] !== null
11010     && $val['delai'] !== ''
11011     && intval($this->getVal('delai')) !== 0
11012     && array_key_exists("crud", $val) === true
11013     && $val['crud'] !== 'delete') {
11014     // Ajout de la tâche de lettre du premier mois
11015     $extra_params['type'] = 'majoration';
11016     if ($this->add_task_lettre_petitionnaire($val, $extra_params) === false) {
11017     return false;
11018     }
11019     }
11020     return true;
11021     }
11022    
11023     /**
11024     * Ajoute une tâche de lettre au pétitionnaire en fonction du type fournis dans les
11025     * extra_params.
11026     * - si extra_params n'a pas d'entrée type ou que cette entrée est vide, ajoute une
11027     * tâche lettre_petitionnaire
11028     * - si l'entrée type existe et n'est pas vide ajoute une tâche lettre_[type fourni]
11029     * /!\ Seule les tâches lettre_majoration et lettre_incompletude existent pour le moment
11030     * et peuvent être ajoutée.
11031     *
11032     * L'instruction doit être liée directement ou indirectement à un courrier.
11033     *
11034     * @param array $val : tableau de valeur servant à l'ajout de la tâche
11035     * @param array $extra_params : tableau contenant des paramètres supplémentaire servant
11036     * à l'ajout de la tâche
11037     *
11038     * @return boolean true : traitement ok, false : erreur de traitement
11039     */
11040     public function add_task_lettre_petitionnaire(array $val, array $extra_params = array()) {
11041     // Vérification de l'existance d'un courrier
11042     $with_doc = false;
11043     if (array_key_exists("instruction", $val) === true
11044     && $val['instruction'] !== ''
11045     && $val['instruction'] !== null) {
11046     //
11047     $inst_instruction = $this->f->get_inst__om_dbform(array(
11048     'obj' => 'instruction',
11049     'idx' => $val['instruction']
11050     ));
11051     // L'instruction executant ce code n'est pas porteur du document
11052     if ($inst_instruction->getVal('lettretype') !== null
11053     && $inst_instruction->getVal('lettretype') !== '') {
11054     //
11055     $with_doc = true;
11056     } else {
11057     // Recherche dans les instructions liés s'il y a un document
11058     $inst_ev = $this->f->get_inst__om_dbform(array(
11059     "obj" => "evenement",
11060     "idx" => $inst_instruction->getVal('evenement'),
11061     ));
11062     if ($inst_ev->getVal('retour') === 't') {
11063     $instructions_related = $inst_instruction->get_related_instructions();
11064     foreach ($instructions_related as $instruction) {
11065     if ($instruction !== null && $instruction !== '') {
11066     $inst_related_instruction = $this->f->get_inst__om_dbform(array(
11067     "obj" => "instruction",
11068     "idx" => $instruction,
11069     ));
11070     if ($inst_related_instruction->getVal('om_fichier_instruction') !== null
11071     && $inst_related_instruction->getVal('om_fichier_instruction') !== '') {
11072     //
11073     $with_doc = true;
11074     }
11075     }
11076     }
11077     }
11078     }
11079     }
11080     //
11081     if ($with_doc === true) {
11082     $inst_task = $this->f->get_inst__om_dbform(array(
11083     "obj" => "task",
11084     "idx" => 0,
11085     ));
11086     $task_val = array(
11087     'type' => (! empty($extra_params['type']) ? 'lettre_'.$extra_params['type'] : 'lettre_petitionnaire'),
11088     'object_id' => $val['instruction'],
11089     'dossier' => $this->getVal($this->clePrimaire),
11090     );
11091     if ($this->f->is_option_mode_service_consulte_enabled() === false
11092     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
11093     $task_val['state'] = $inst_task::STATUS_DRAFT;
11094     }
11095     $add_task_lettre = $inst_task->add_task(array('val' => $task_val));
11096     return $add_task_lettre !== false;
11097     }
11098     return true;
11099     }
11100    
11101 softime 10573 public function get_parcelles($dossier = null) {
11102     if ($dossier === null) {
11103     $dossier = $this->getVal('dossier');
11104     }
11105     $query = sprintf('
11106     SELECT *
11107     FROM %1$sdossier_parcelle
11108     WHERE dossier = \'%2$s\'
11109     ORDER BY dossier_parcelle
11110     ',
11111     DB_PREFIXE,
11112     $dossier
11113     );
11114 softime 13137 $res = $this->f->get_all_results_from_db_query(
11115     $query,
11116     array(
11117     "origin" => __METHOD__,
11118     "force_return" => true,
11119     )
11120     );
11121 softime 10573 if ($res['code'] === 'KO') {
11122     return false;
11123     }
11124     return $res['result'];
11125     }
11126    
11127     protected function getDossier($champ = null) {
11128     return $this->getVal($this->clePrimaire);
11129     }
11130    
11131     protected function getDossierObject() {
11132     return $this;
11133     }
11134    
11135     /**
11136     * Recupère la source du dépôt
11137     *
11138     * @return string source du dépôt
11139     */
11140     public function get_source_depot_from_demande() {
11141     $demande = $this->get_inst_demande();
11142     return $demande->getVal('source_depot');
11143     }
11144    
11145 softime 13137 /**
11146     * Récupère l'instance de consultation entrante associé au dossier.
11147     *
11148     * @return consultation_entrante
11149     */
11150     public function get_inst_consultation_entrante() {
11151     $dossier = $this->getVal($this->clePrimaire);
11152     $qres = $this->f->get_one_result_from_db_query(
11153     sprintf(
11154     'SELECT
11155     consultation_entrante
11156     FROM
11157     %1$sconsultation_entrante
11158     WHERE
11159     dossier = \'%2$s\'',
11160     DB_PREFIXE,
11161     $this->f->db->escapeSimple($dossier)
11162     ),
11163     array(
11164     "origin" => __METHOD__
11165     )
11166     );
11167     $consultationEntrante = $this->f->get_inst__om_dbform(array(
11168     'obj' => 'consultation_entrante',
11169     'idx' => $qres['result']
11170     ));
11171     return $consultationEntrante;
11172     }
11173    
11174     /**
11175     * Récupère l'instance du département lié à la commune du dossier.
11176     *
11177     * @return departement
11178     */
11179     public function get_inst_departement_dossier() {
11180     // Si le dossier n'a pas de commune associé alors il n'est pas non
11181     // plus associé à un département. On renvoie donc null.
11182     if (empty($this->getVal('commune'))) {
11183     return null;
11184     }
11185     $qres = $this->f->get_one_result_from_db_query(
11186     sprintf(
11187     'SELECT
11188     departement
11189     FROM
11190     %1$scommune
11191     LEFT JOIN %1$sdepartement
11192     ON commune.dep = departement.dep
11193     WHERE
11194     commune = %2$s',
11195     DB_PREFIXE,
11196     $this->f->db->escapeSimple($this->getVal('commune'))
11197     ),
11198     array(
11199     "origin" => __METHOD__
11200     )
11201     );
11202     $departement = $this->f->get_inst__om_dbform(array(
11203     'obj' => 'departement',
11204     'idx' => $qres['result']
11205     ));
11206     return $departement;
11207     }
11208 softime 13528
11209    
11210     /**
11211     * Met à jour les informations (log) d'actions de localisation sur un dossier.
11212     *
11213     * @param string $action Nom de l'action.
11214     * @param string $date Date de l'action.
11215     * @param boolean $etat Etat de l'action.
11216     * @param string $message Message de retour de l'action.
11217     *
11218     * @return boolean false si erreur de traitement, true sinon.
11219     */
11220     public function update_dossier_geolocalisation($action, $date, $etat, $message, $dossier = null) {
11221     if ($dossier == null) {
11222     $dossier = $this->getVal('dossier');
11223     }
11224     require_once "../obj/dossier_geolocalisation.class.php";
11225     $dossier_geolocalisation = new dossier_geolocalisation(
11226     null,
11227     null,
11228     null,
11229     $dossier
11230     );
11231    
11232     return $dossier_geolocalisation->set_geolocalisation_state(
11233     $action,
11234     $date,
11235     $etat,
11236     $message
11237     );
11238     }
11239    
11240    
11241     /**
11242     * Retourne une instance du connecteur geoads, et la créer si elle n'existe pas.
11243     *
11244     * @param array $collectivite Informations de la collectivité.
11245     *
11246     * @return geoads Instance du connecteur.
11247     */
11248     protected function get_geoads_instance(array $collectivite, string $dossierIdx) {
11249     $extra_params = array(
11250     "inst_framework" => $this->f,
11251     "dossier_idx" => $dossierIdx,
11252     );
11253     // Instanciation de l'abstracteur geoads
11254     try {
11255     $this->geoads_instance = new geoads($collectivite, $extra_params);
11256     } catch (geoads_exception $e) {
11257     $this->handle_geoads_exception($e, $dossierIdx);
11258     return false;
11259     }
11260     return $this->geoads_instance;
11261     }
11262    
11263    
11264     /**
11265     * Traitement des erreurs retournées par l'abstracteur geoads.
11266     *
11267     * @param geoads_exception $exception Exception retournée par l'abstracteur.
11268     *
11269     * @return void
11270     */
11271     protected function handle_geoads_exception(geoads_exception $exception, $dossierId = null) {
11272     if ($dossierId == null) {
11273     $dossierId = $this->getVal("dossier");
11274     }
11275     // log le message d'erreur retourné par le webservice
11276     $this->f->addToLog(
11277     "geolocalisation : Traitement webservice SIG: id dossier = ".
11278     $dossierId." : ".$exception->getMessage(), DEBUG_MODE
11279     );
11280     $return['log'] = array(
11281     "date" => date('d/m/Y H:i:s'),
11282     "etat" => false,
11283     "message" => $exception->getMessage(),
11284     );
11285     if ($this->f->isAjaxRequest()) {
11286     echo json_encode($return);
11287     die(); // TODO traiter correctement les erreurs !
11288     } else {
11289     $this->f->displayMessage('error', $return["log"]["message"]);
11290     }
11291     }
11292    
11293    
11294     /**
11295     * Réplication de la géolocalisation d'un dossier sur un autre.
11296     *
11297     * @param string $di Identifiant du DI qui va être mis à jour
11298     * @param string $da Identifiant du DA associé au DI
11299     * @param string $collectivite Identifiant de la collectivité associée au DI
11300     * @param string $commune (Optionel) Identifiant de la commune associée au DI
11301     * @param string $ref (Optionel) Identifiant de DI contenant la géolocalisation à répliquer
11302     *
11303     * @return bool|string 'true' si tout s'est bien passé, sinon un message d'erreur
11304     */
11305     public function replicate_geolocalisation(string $di, string $da, string $collectivite,
11306     string $commune = null, string $ref = null) {
11307     $this->addToLog(__METHOD__."() BEGIN", EXTRA_VERBOSE_MODE);
11308    
11309     if (empty($di)) {
11310     $di = $this->getVal('dossier');
11311     }
11312    
11313     // si le sig est activé/configuré
11314     if ($this->f->is_option_sig_enabled($collectivite)) {
11315    
11316     // récupération du DI qui vient d'être créé
11317     if (empty($di_inst = $this->f->findObjectById('dossier', $di))) {
11318     return sprintf(
11319     __("Erreur lors de la récupération du DI %s (dossier non-trouvé)"),
11320     $di);
11321     }
11322    
11323     // si un dossier référence est spécifié
11324     if (! empty($ref)) {
11325     $prev_di_idx = $ref;
11326     $err_msg = sprintf(__("Erreur lors de la récupération du DI référence %s"), $ref);
11327     }
11328    
11329     // aucun dossier référence spécifié
11330     else {
11331    
11332     // si on est en mode service consulté, cela concerne des consultations
11333     // et il faut également rechercher un dossier de même type DI
11334     $sameTypeWhereCond = '';
11335     if ($this->f->is_option_mode_service_consulte_enabled($collectivite)) {
11336     $sameTypeWhereCond = 'AND dossier_instruction_type = '.
11337     intval($di_inst->getVal('dossier_instruction_type'));
11338     }
11339    
11340     // récupération du DI le plus récent sur le DA
11341     $qres = $this->f->get_one_result_from_db_query(
11342     sprintf("
11343     SELECT
11344     dossier
11345     FROM
11346     ".DB_PREFIXE."dossier
11347     WHERE
11348     om_collectivite = '%s'
11349     AND dossier_autorisation = '%s'
11350     AND version < %d
11351     AND dossier != '%s'
11352     $sameTypeWhereCond
11353     ORDER BY
11354     version DESC
11355     LIMIT 1
11356     ",
11357     $this->f->db->escapeSimple($collectivite),
11358     $this->f->db->escapeSimple($da),
11359     intval($di_inst->getVal('version')),
11360     $this->f->db->escapeSimple($di)),
11361     array(
11362     "origin" => __METHOD__,
11363     "force_return" => true,
11364     )
11365     );
11366     $err_msg = sprintf(
11367     __("Erreur lors de la récupération du DI le plus récent pour le DA %s"),
11368     $da);
11369     if ($qres["code"] !== "OK") {
11370     $this->addToLog(__METHOD__.'() '.$err_msg);
11371     return $err_msg;
11372     }
11373     if (empty($prev_di_idx = $qres["result"])) {
11374     $this->addToLog(__METHOD__.'() '.$err_msg." (pas de DI trouvé)");
11375     return $err_msg;
11376     }
11377     }
11378    
11379     $prev_di_inst = $this->f->findObjectById('dossier', $prev_di_idx);
11380     if (empty($prev_di_inst)) {
11381     $this->addToLog(__METHOD__.'() '.$err_msg);
11382     return $err_msg;
11383     }
11384    
11385     // si le DI le plus récent est géolocalisé
11386     if (! empty($prev_di_inst->getVal('geom'))) {
11387    
11388     // récupère une instance du connecteur SIG
11389     $collectivite_param = $this->f->getCollectivite($collectivite);
11390     $extra_params = array(
11391     "inst_framework" => $this->f,
11392     );
11393     if ($this->f->is_option_dossier_commune_enabled() === true
11394     && !empty($commune)) {
11395     $extra_params['commune_idx'] = $commune;
11396     }
11397     try {
11398     $geoads = new geoads($collectivite_param, $extra_params);
11399     } catch (geoads_exception $e) {
11400     return __("Erreur lors de l'instanciation du connecteur sig").
11401     ' '.__("Détail: ").json_encode($e->getMessage());
11402     }
11403    
11404     // si le SIG implémente la fonctionnalité de réplication de la
11405     // géolocalisation d'un dossier à partir d'un autre
11406     if (method_exists($geoads, 'methodIsImplemented')
11407     && $geoads->methodIsImplemented('replicate_geolocalisation')) {
11408     try {
11409    
11410     // réplication de sa géolocalisation sur le DI courant
11411     if (! $geoads->replicate_geolocalisation($prev_di_idx, $di)) {
11412     $err_msg = sprintf(
11413     __("Erreur lors de la réplication de la géolocalisation du DI %s sur le DI %"),
11414     $prev_di_idx,
11415     $di);
11416     $this->addToLog(__METHOD__.'() '.$err_msg);
11417     return $err_msg;
11418     }
11419    
11420     // enregistrement du succès de la création du dossier/emprise
11421     $msg = sprintf(
11422     __("Emprise/dossier créé à partir du dossier %s"),
11423     $prev_di_idx);
11424 softime 14064 $this->addToLog(__METHOD__."() msg: $msg", VERBOSE_MODE);
11425 softime 13528 $now_dt_text = (new Datetime())->format('Y-m-d H:i:s');
11426     if (! $di_inst->update_dossier_geolocalisation('calcul_emprise', $now_dt_text, true, $msg)) {
11427     $err_msg = sprintf(
11428     __("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é)"),
11429     $di, $prev_di_idx);
11430     $this->addToLog(__METHOD__.'() '.$err_msg);
11431     }
11432    
11433     // enregistrement du geom (centroide)
11434     $sql = sprintf("
11435     UPDATE
11436     ".DB_PREFIXE."dossier
11437     SET
11438     geom = public.ST_GeomFromText('%s', %s)
11439     WHERE
11440     dossier = '%s'",
11441     $prev_di_inst->getVal('geom'),
11442     $collectivite_param['sig']['sig_referentiel'],
11443     $this->f->db->escapeSimple($di)
11444     );
11445     $qres = $this->f->db->query($sql);
11446     if ($this->f->isDatabaseError($qres, true)) {
11447     $err_msg = sprintf(
11448     __("Erreur lors de l'enregistrement du centroide dans le dossier %s (le dossier a bien été créé/géolocalisé dans le SIG)"),
11449     $di);
11450     $this->addToLog(__METHOD__.'() '.$err_msg);
11451     }
11452     else {
11453    
11454     // enregistrement du message pour le centroide
11455     $msg = sprintf(
11456     __("Centroide récupéré à partir du dossier %s"),
11457     $prev_di_idx);
11458 softime 14064 $this->addToLog(__METHOD__."() msg: $msg", VERBOSE_MODE);
11459 softime 13528 $now_dt_text = (new Datetime())->format('Y-m-d H:i:s');
11460     if (! $di_inst->update_dossier_geolocalisation('calcul_centroide', $now_dt_text, true, $msg)) {
11461     $err_msg = sprintf(
11462     __("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é)"),
11463     $di, $prev_di_idx);
11464     $this->addToLog(__METHOD__.'() '.$err_msg);
11465     }
11466    
11467     // réplication des contraintes
11468 softime 14064 $res = $this->f->get_all_results_from_db_query(
11469     sprintf('
11470     SELECT
11471     contrainte,
11472     texte_complete,
11473     reference
11474     FROM
11475     %1$sdossier_contrainte
11476     WHERE
11477     dossier = \'%2$s\'',
11478     DB_PREFIXE,
11479     $this->f->db->escapeSimple($prev_di_idx)
11480     ),
11481     array(
11482     "origin" => __METHOD__,
11483     "force_return" => true,
11484     )
11485     );
11486     if ($res['code'] === 'KO') {
11487 softime 13528 $err_msg = sprintf(
11488 softime 14064 __("Erreur lors de la récupération des contraintes sig du dossier %s."),
11489     $di);
11490 softime 13528 $this->addToLog(__METHOD__.'() '.$err_msg);
11491 softime 14064 } else {
11492     $add_all_dc = true;
11493     foreach ($res['result'] as $result) {
11494     $inst_dc = $this->f->get_inst__om_dbform(array(
11495     "obj" => "dossier_contrainte",
11496     "idx" => "]",
11497     ));
11498     $valF = array();
11499     foreach ($inst_dc->champs as $champ) {
11500     $valF[$champ] = null;
11501     }
11502     $valF['dossier'] = $di;
11503     $valF['contrainte'] = $result['contrainte'];
11504     $valF['texte_complete'] = $result['texte_complete'];
11505     $valF['reference'] = $result['reference'];
11506     $add_dc = $inst_dc->ajouter($valF);
11507     if ($add_dc === false) {
11508     $add_all_dc = false;
11509     $this->addToLog(__METHOD__."() ".sprintf(__("Erreur lors de l'enregistrement de la contrainte %s sur le dossier %s."), $valF['contrainte'], $valF['dossier'])." : ".$inst_dc->msg);
11510     }
11511     }
11512     if ($add_all_dc === false) {
11513 softime 13528 $err_msg = sprintf(
11514 softime 14064 __("Erreur lors de la réplication d'une ou des contraintes sig du dossier %s à partir du dossier %s (le dossier a bien été créé/géolocalisé dans le SIG)"),
11515 softime 13528 $di, $prev_di_idx);
11516     $this->addToLog(__METHOD__.'() '.$err_msg);
11517     }
11518 softime 14064
11519     // TODO recopie-t-on les données de la géolocalisation par disque (latitude/longitude/rayon) ?
11520    
11521     else {
11522    
11523     // enregistrement du message pour les contraintes
11524     $msg = sprintf(
11525     __("Contraintes récupérées à partir du dossier %s"),
11526     $prev_di_idx);
11527     $this->addToLog(__METHOD__."() msg: $msg", VERBOSE_MODE);
11528     $now_dt_text = (new Datetime())->format('Y-m-d H:i:s');
11529     if (! $di_inst->update_dossier_geolocalisation('recup_contrainte', $now_dt_text, true, $msg)) {
11530     $err_msg = sprintf(
11531     __("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é)"),
11532     $di, $prev_di_idx);
11533     $this->addToLog(__METHOD__.'() '.$err_msg);
11534     }
11535     }
11536 softime 13528 }
11537     }
11538     }
11539     catch(geoads_connector_method_not_implemented_exception $e) {
11540     $this->addToLog(__METHOD__."() Method not impletemented 'replicate_geolocalisation'");
11541     }
11542     }
11543     }
11544     }
11545    
11546     return true;
11547     }
11548 softime 10573 }

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26