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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10713 - (hide annotations)
Thu Nov 4 13:35:54 2021 UTC (3 years, 2 months ago) by softime
File size: 424022 byte(s)
* Fusion de la branche d'intégration 5.0.1-develop dans le trunk

1 mbroquet 3730 <?php
2 softime 7996 /**
3     * DBFORM - 'dossier' - Surcharge gen.
4     *
5     * @package openads
6     * @version SVN : $$Id: dossier.class.php 6912 2017-06-15 08:20:09Z tuxayo $
7     */
8 mbroquet 3730
9 softime 6565 require_once "../gen/obj/dossier.class.php";
10 mbroquet 3730
11     class dossier extends dossier_gen {
12    
13     var $maj;
14     var $dossier_instruction_type;
15     var $is_incomplet_notifie = null;
16 softime 6565 var $valIdDemandeur = array("petitionnaire_principal" => array(),
17     "delegataire" => array(),
18     "petitionnaire" => array(),
19     "plaignant_principal" => array(),
20     "plaignant" => array(),
21     "contrevenant_principal" => array(),
22     "contrevenant" => array(),
23     "requerant_principal" => array(),
24     "requerant" => array(),
25     "avocat_principal" => array(),
26     "avocat" => array(),
27 softime 7067 "bailleur_principal" => array(),
28     "bailleur" => array(),
29 softime 10573 "proprietaire" => array(),
30     "architecte_lc" => array(),
31     "paysagiste" => array(),
32 softime 6565 );
33     var $postedIdDemandeur = array("petitionnaire_principal" => array(),
34     "delegataire" => array(),
35     "petitionnaire" => array(),
36     "plaignant_principal" => array(),
37     "plaignant" => array(),
38     "contrevenant_principal" => array(),
39     "contrevenant" => array(),
40     "requerant_principal" => array(),
41     "requerant" => array(),
42     "avocat_principal" => array(),
43     "avocat" => array(),
44 softime 7067 "bailleur_principal" => array(),
45     "bailleur" => array(),
46 softime 10573 "proprietaire" => array(),
47     "architecte_lc" => array(),
48     "paysagiste" => array(),
49 softime 6565 );
50 mbroquet 3730 /**
51     * Instance de la classe taxe_amenagement.
52     *
53     * @var null
54     */
55     var $inst_taxe_amenagement = null;
56    
57     /**
58     * Instance de la classe donnees_techniques.
59     *
60     * @var null
61     */
62     var $inst_donnees_techniques = null;
63    
64     /**
65     * Instance de la classe dossier_autorisation.
66     *
67     * @var mixed (resource | null)
68     */
69     var $inst_dossier_autorisation = null;
70    
71     /**
72     * Instance de la classe dossier_autorisation_type_detaille.
73     *
74     * @var null
75     */
76     var $inst_dossier_autorisation_type_detaille = null;
77    
78     /**
79     * Instance de la classe cerfa.
80     *
81     * @var null
82     */
83     var $inst_cerfa = null;
84    
85 softime 6565 /**
86     * Groupe du dossier d'instruction.
87     *
88     * @var null
89     */
90     var $groupe = null;
91 mbroquet 3730
92 softime 6565 /**
93     * Instance de la classe groupe.
94     */
95     var $inst_groupe = null;
96    
97     /**
98     * Instance de la classe dossier_autorisation_type.
99     *
100     * @var null
101     */
102     var $inst_dossier_autorisation_type = null;
103    
104 softime 7366 /**
105     * Instance de la classe demande.
106     *
107     * @var mixed (resource | null)
108     */
109     var $inst_demande = null;
110 softime 10573
111     /**
112     * Liste des types de tâches.
113     *
114     * @var array
115     */
116     var $task_types = array(
117     'incompletude_DI',
118     'qualification_DI',
119     'decision_DI',
120     'completude_DI',
121     'pec_metier_consultation',
122     'avis_consultation',
123     'modification_DI',
124     );
125    
126     /**
127     * Liste des champs requis dans Plat'AU.
128     *
129     * @var array
130     */
131     var $list_platau_required_fields_dossier = array(
132     'donnees_techniques.enga_decla_date',
133     'donnees_techniques.enga_decla_lieu',
134     'dossier.terrain_adresse_localite',
135     'demandeur.localite',
136     'architecte.ville'
137     );
138    
139    
140 mbroquet 3730 /*Mutateur pour ma variable dossier_instruction_type*/
141     public function getDossierInstructionType(){
142     return $this->dossier_instruction_type;
143     }
144     public function setDossierInstructionType($dossier_instruction_type){
145     $this->dossier_instruction_type = $dossier_instruction_type;
146     }
147    
148     /**
149     * Définition des actions disponibles sur la classe.
150     *
151     * @return void
152     */
153     function init_class_actions() {
154    
155     parent::init_class_actions();
156    
157     // ACTION - 003 - consulter
158     //
159 softime 6565 $this->class_actions[3]["condition"] = array(
160     "is_user_from_allowed_collectivite",
161     "check_context",
162     );
163 mbroquet 3730
164     // ACTION - 004 - contrainte
165     //
166     $this->class_actions[4] = array(
167     "identifier" => "contrainte",
168     "view" => "view_contrainte",
169     "permission_suffix" => "contrainte_tab",
170     "condition" => array(
171     "is_user_from_allowed_collectivite",
172     ),
173     );
174    
175     // ACTION - 005 - view_document_numerise
176     // Interface spécifique du tableau des pièces
177     $this->class_actions[5] = array(
178     "identifier" => "view_document_numerise",
179     "view" => "view_document_numerise",
180     "permission_suffix" => "document_numerise",
181     "condition" => array(
182     "is_user_from_allowed_collectivite",
183     ),
184     );
185    
186     // ACTION - 006 - view_sitadel
187     //
188     $this->class_actions[6] = array(
189     "identifier" => "sitadel",
190     "view" => "view_sitadel",
191     "permission_suffix" => "export_sitadel",
192     );
193 softime 6565
194     // ACTION - 777 - Redirection vers la classe fille adéquate
195     //
196     $this->class_actions[777] = array(
197     "identifier" => "redirect",
198     "view" => "redirect",
199     "permission_suffix" => "consulter",
200     );
201 softime 10573
202     //
203     //
204     $this->class_actions[998] = array(
205     "identifier" => "json_data",
206     "view" => "view_json_data",
207     "permission_suffix" => "consulter",
208     );
209 mbroquet 3730 }
210    
211     /**
212 softime 8989 * Clause select pour la requête de sélection des données de l'enregistrement.
213     *
214     * @return array
215     */
216     function get_var_sql_forminc__champs() {
217 softime 10573 $champs = array(
218 softime 8989 "dossier.dossier",
219 softime 10573 "dossier.om_collectivite AS om_collectivite"
220     );
221     if ($this->f->is_option_dossier_commune_enabled()) {
222     $champs[] = "dossier.commune AS commune";
223     }
224     array_push($champs,
225 softime 8989 "dossier.dossier_libelle",
226     "dossier.dossier_instruction_type",
227     "dossier_autorisation_type_detaille.libelle as dossier_autorisation_type_detaille",
228     "autorisation_contestee",
229     "donnees_techniques.ctx_reference_dsj as ctx_reference_dsj",
230     "donnees_techniques.ctx_reference_sagace as ctx_reference_sagace",
231     "dossier.depot_electronique",
232     "CASE WHEN requerant_principal.qualite='particulier' THEN
233     TRIM(CONCAT(requerant_principal.particulier_nom, ' ', requerant_principal.particulier_prenom))
234     ELSE
235     TRIM(CONCAT(requerant_principal.personne_morale_raison_sociale, ' ', requerant_principal.personne_morale_denomination))
236     END as requerants",
237     "CASE WHEN petitionnaire_principal.qualite='particulier' THEN
238     TRIM(CONCAT(petitionnaire_principal.particulier_nom, ' ', petitionnaire_principal.particulier_prenom))
239     ELSE
240     TRIM(CONCAT(petitionnaire_principal.personne_morale_raison_sociale, ' ', petitionnaire_principal.personne_morale_denomination))
241     END as dossier_petitionnaire",
242     "'' as dossier_petitionnaires",
243     "CASE WHEN contrevenant_principal.qualite='particulier' THEN
244     TRIM(CONCAT(contrevenant_principal.particulier_nom, ' ', contrevenant_principal.particulier_prenom))
245     ELSE
246     TRIM(CONCAT(contrevenant_principal.personne_morale_raison_sociale, ' ', contrevenant_principal.personne_morale_denomination))
247     END as contrevenants",
248 softime 10573 "TRIM(
249     CONCAT_WS(
250     ' ',
251     replace(dossier.terrain_references_cadastrales,';',' '),
252     '<br/>',
253     COALESCE(
254     dossier.adresse_normalisee,
255     CONCAT_WS(
256     ' ',
257     dossier.terrain_adresse_voie_numero,
258     dossier.terrain_adresse_voie,
259     dossier.terrain_adresse_code_postal
260     )
261     )
262     )
263     ) as terrain",
264 softime 8989 "arrondissement.libelle as dossier_arrondissement",
265 softime 10573 'dossier.adresse_normalisee',
266     'dossier.adresse_normalisee_json',
267 softime 8989 // description/nature des travaux. En cas de modif, bloc de code aussi
268     // présent dans 'dossier_instruction.inc.php','om_requete'
269     // et 'stats à la demande'.
270     "CONCAT_WS(
271     '<br/>',
272     CASE WHEN co_projet_desc = '' THEN
273     NULL
274     ELSE
275     TRIM(co_projet_desc)
276     END,
277     CASE WHEN ope_proj_desc = '' THEN
278     NULL
279     ELSE
280     TRIM(ope_proj_desc)
281     END,
282     CASE WHEN am_projet_desc = '' THEN
283     NULL
284     ELSE
285     TRIM(am_projet_desc)
286     END,
287     CASE WHEN dm_projet_desc = '' THEN
288     NULL
289     ELSE
290     TRIM(dm_projet_desc)
291     END,
292     CASE WHEN donnees_techniques.erp_cstr_neuve IS TRUE
293     THEN '".str_replace("'", "''", _('erp_cstr_neuve'))."' END,
294     CASE WHEN donnees_techniques.erp_trvx_acc IS TRUE
295     THEN '".str_replace("'", "''", _('erp_trvx_acc'))."' END,
296     CASE WHEN donnees_techniques.erp_extension IS TRUE
297     THEN '".str_replace("'", "''", _('erp_extension'))."' END,
298     CASE WHEN donnees_techniques.erp_rehab IS TRUE
299     THEN '".str_replace("'", "''", _('erp_rehab'))."' END,
300     CASE WHEN donnees_techniques.erp_trvx_am IS TRUE
301     THEN '".str_replace("'", "''", _('erp_trvx_am'))."' END,
302     CASE WHEN donnees_techniques.erp_vol_nouv_exist IS TRUE
303     THEN '".str_replace("'", "''", _('erp_vol_nouv_exist'))."' END
304     ) as \"description_projet\"",
305     //
306     "donnees_techniques.ctx_synthese_nti as dt_ctx_synthese_nti",
307     "donnees_techniques.ctx_synthese_anr as dt_ctx_synthese_anr ",
308     "donnees_techniques.ctx_infraction as dt_ctx_infraction ",
309     "donnees_techniques.ctx_regularisable as dt_ctx_regularisable ",
310     "dossier_autorisation.dossier_autorisation",
311     "dossier_autorisation.dossier_autorisation_libelle",
312     "annee",
313     "autorite_competente",
314     "dossier.instructeur",
315     "instructeur_2",
316     "dossier.division",
317     "public.ST_AsText(dossier.geom::geometry) as geom",
318 softime 10573 "'' as streetview",
319     "tax_secteur",
320 softime 8989 // Enjeu
321     "enjeu_urba",
322     "enjeu_erp",
323     "'' as enjeu_ctx",
324     // Qualification
325     "erp",
326     "a_qualifier",
327 softime 10573 "pec_metier",
328 softime 8989 // Archive
329     "numero_versement_archive",
330     "date_demande",
331     // Fieldset instruction
332     // Suivi
333     // Col 1
334     "dossier.date_depot",
335 softime 10573 "dossier.date_depot_mairie",
336 softime 8989 "dossier.date_affichage",
337     "date_premiere_visite",
338     "date_derniere_visite",
339     "date_contradictoire",
340     "date_retour_contradictoire",
341     "date_ait",
342     "date_transmission_parquet",
343     "donnees_techniques.ctx_date_audience as date_audience",
344     "delai",
345     "delai_incompletude",
346     "date_dernier_depot",
347     "date_limite",
348     "date_complet",
349     "date_limite_incompletude",
350     "date_cloture_instruction",
351     // Col 2
352 softime 9282 "dossier.etat",
353 softime 8989 "evenement_suivant_tacite",
354     "evenement_suivant_tacite_incompletude",
355     // Bloc 2 fieldsets
356     // Col 1 : Fieldset "Décision"
357     "dossier.date_decision",
358     "dossier.avis_decision",
359     // Col 2 : Fieldset "Validité de l'autorisation"
360     "dossier.date_validite",
361     // Autre
362     // Col 1
363     "accord_tacite",
364     // Col 2
365     "date_rejet",
366     "date_notification_delai",
367     "dossier.date_chantier",
368     "dossier.date_achevement",
369     // Col 3
370     "date_conformite",
371     // Fieldset "Simulation des taxes"
372     "tax_mtn_part_commu",
373     "tax_mtn_part_commu_sans_exo",
374     "tax_mtn_part_depart",
375     "tax_mtn_part_depart_sans_exo",
376     "tax_mtn_part_reg",
377     "tax_mtn_part_reg_sans_exo",
378     "tax_mtn_total",
379     "tax_mtn_total_sans_exo",
380     "tax_mtn_rap",
381     "tax_mtn_rap_sans_exo",
382     // Fieldset "Localisation du terrain"
383     // Col 1
384     "dossier.terrain_adresse_voie_numero",
385     "dossier.terrain_adresse_lieu_dit",
386     "dossier.terrain_adresse_code_postal",
387     "dossier.terrain_adresse_cedex",
388     "dossier.parcelle_temporaire",
389     "dossier.terrain_references_cadastrales",
390     // Col 2
391     "dossier.terrain_adresse_voie",
392     "dossier.terrain_adresse_bp",
393     "dossier.terrain_adresse_localite",
394     "dossier.terrain_superficie",
395     //
396     "geom1",
397     "dossier.description",
398     "version",
399     "incompletude",
400     "incomplet_notifie",
401     "etat_pendant_incompletude",
402     "dossier.duree_validite",
403     "quartier",
404     "dossier.log_instructions",
405     "interface_referentiel_erp",
406     "date_modification",
407     "hash_sitadel",
408 softime 9245 "version_clos",
409     "initial_dt",
410 softime 10573 "dossier.etat_transmission_platau",
411     // POC
412     "dossier.numerotation_type",
413     "dossier.numerotation_dep",
414     "dossier.numerotation_com",
415     "dossier.numerotation_division",
416     "dossier.numerotation_suffixe",
417     "dossier.numerotation_entite",
418     "dossier.numerotation_num",
419     "dossier.numerotation_num_suffixe",
420     "dossier.numerotation_num_entite",
421     // CONSULTATION ENTRANTE
422     "consultation_entrante.consultation_entrante",
423     "consultation_entrante.delai_reponse",
424     "consultation_entrante.type_delai",
425     "consultation_entrante.date_consultation",
426     "consultation_entrante.date_emission",
427     "consultation_entrante.date_production_notification",
428     "consultation_entrante.date_premiere_consultation",
429     "consultation_entrante.objet_consultation",
430     "consultation_entrante.etat_consultation",
431     "consultation_entrante.type_consultation",
432     "consultation_entrante.texte_fondement_reglementaire",
433     "consultation_entrante.texte_objet_consultation",
434     "consultation_entrante.service_consultant_id",
435     "consultation_entrante.service_consultant_libelle",
436     "consultation_entrante.service_consultant_insee",
437     "consultation_entrante.service_consultant_mail",
438     "consultation_entrante.service_consultant_type",
439     "consultation_entrante.service_consultant__siren",
440     "consultation_entrante.dossier as dossier_consultation"
441 softime 8989 );
442 softime 10573 return $champs;
443 softime 8989 }
444    
445     /**
446     * Clause from pour la requête de sélection des données de l'enregistrement.
447     *
448     * @return string
449     */
450     function get_var_sql_forminc__tableSelect() {
451     return sprintf(
452     '%1$s%2$s
453     LEFT JOIN %1$savis_decision
454     ON avis_decision.avis_decision=dossier.avis_decision
455     LEFT JOIN %1$sdossier_autorisation
456     ON dossier.dossier_autorisation=dossier_autorisation.dossier_autorisation
457     LEFT JOIN %1$sdossier_autorisation_type_detaille
458     ON dossier_autorisation.dossier_autorisation_type_detaille=dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
459     LEFT JOIN (
460     SELECT *
461     FROM %1$slien_dossier_demandeur
462     INNER JOIN %1$sdemandeur
463     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
464     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
465     AND LOWER(demandeur.type_demandeur) = LOWER(\'petitionnaire\')
466     ) as petitionnaire_principal
467     ON petitionnaire_principal.dossier = dossier.dossier
468     LEFT JOIN (
469     SELECT *
470     FROM %1$slien_dossier_demandeur
471     INNER JOIN %1$sdemandeur
472     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
473     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
474     AND LOWER(demandeur.type_demandeur) = LOWER(\'requerant\')
475     ) as requerant_principal
476     ON requerant_principal.dossier = dossier.dossier
477     LEFT JOIN (
478     SELECT *
479     FROM %1$slien_dossier_demandeur
480     INNER JOIN %1$sdemandeur
481     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
482     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
483     AND LOWER(demandeur.type_demandeur) = LOWER(\'contrevenant\')
484     ) as contrevenant_principal
485     ON contrevenant_principal.dossier = dossier.dossier
486     LEFT JOIN %1$sdonnees_techniques
487     ON donnees_techniques.dossier_instruction = dossier.dossier
488     LEFT JOIN %1$setat
489     ON dossier.etat = etat.etat
490     LEFT JOIN %1$sarrondissement
491 softime 10573 ON dossier.terrain_adresse_code_postal = arrondissement.code_postal
492     LEFT JOIN %1$sconsultation_entrante
493     ON dossier.dossier = consultation_entrante.dossier',
494 softime 8989 DB_PREFIXE,
495     $this->table
496     );
497     }
498    
499     /**
500     *
501     * @return string
502     */
503     function get_var_sql_forminc__sql_avis_decision() {
504     return "SELECT avis_decision,libelle from ".DB_PREFIXE."avis_decision order by libelle";
505     }
506    
507     /**
508     *
509     * @return string
510     */
511     function get_var_sql_forminc__sql_avis_decision_by_id() {
512     return "SELECT avis_decision.avis_decision, libelle FROM ".DB_PREFIXE."avis_decision WHERE avis_decision = '<idx>'";
513     }
514    
515     /**
516     *
517     * @return string
518     */
519     function get_var_sql_forminc__sql_dossier_autorisation() {
520     return "SELECT dossier_autorisation.dossier_autorisation, dossier_autorisation.dossier_autorisation FROM ".DB_PREFIXE."dossier_autorisation ORDER BY dossier_autorisation.dossier_autorisation ASC";
521     }
522    
523     /**
524     *
525     * @return string
526     */
527     function get_var_sql_forminc__sql_dossier_autorisation_by_id() {
528     return "SELECT dossier_autorisation.dossier_autorisation, dossier_autorisation.dossier_autorisation FROM ".DB_PREFIXE."dossier_autorisation WHERE dossier_autorisation = '<idx>'";
529     }
530    
531     /**
532     *
533     * @return string
534     */
535     function get_var_sql_forminc__sql_arrondissement() {
536     return "SELECT arrondissement.arrondissement, arrondissement.libelle FROM ".DB_PREFIXE."arrondissement ORDER BY arrondissement.libelle ASC";
537     }
538    
539     /**
540     *
541     * @return string
542     */
543     function get_var_sql_forminc__sql_arrondissement_by_id() {
544     return "SELECT arrondissement.arrondissement, arrondissement.libelle FROM ".DB_PREFIXE."arrondissement WHERE arrondissement = <idx>";
545     }
546    
547     /**
548     *
549     * @return string
550     */
551     function get_var_sql_forminc__sql_autorisation_contestee() {
552     return "SELECT dossier.dossier, dossier.dossier_libelle FROM ".DB_PREFIXE."dossier ORDER BY dossier.annee ASC";
553     }
554    
555     /**
556     *
557     * @return string
558     */
559     function get_var_sql_forminc__sql_autorisation_contestee_by_id() {
560     return "SELECT dossier.dossier, dossier.dossier_libelle FROM ".DB_PREFIXE."dossier WHERE dossier = '<idx>'";
561     }
562    
563     /**
564     *
565     * @return string
566     */
567     function get_var_sql_forminc__sql_dossier_autorisation_type_detaille() {
568     return "SELECT dossier_autorisation_type_detaille.dossier_autorisation_type_detaille, dossier_autorisation_type_detaille.code
569     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
570     ORDER BY dossier_autorisation_type_detaille.libelle";
571     }
572    
573     /**
574     *
575     * @return string
576     */
577     function get_var_sql_forminc__sql_dossier_autorisation_type_detaille_by_id() {
578     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>";
579     }
580    
581     /**
582     *
583     * @return string
584     */
585     function get_var_sql_forminc__sql_demandeur() {
586     return "SELECT dossier_autorisation_type_detaille.dossier_autorisation_type_detaille, dossier_autorisation_type_detaille.libelle
587     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
588     ORDER BY dossier_autorisation_type_detaille.libelle";
589     }
590    
591     /**
592     *
593     * @return string
594     */
595     function get_var_sql_forminc__sql_demandeur_by_id() {
596     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>";
597     }
598    
599     /**
600     *
601     * @return string
602     */
603     function get_var_sql_forminc__sql_instructeur_div() {
604     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
605     FROM ".DB_PREFIXE."instructeur
606     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
607     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
608     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)))
609     <instructeur_qualite>
610     ORDER BY nom";
611     }
612    
613     /**
614     *
615     * @return string
616     */
617     function get_var_sql_forminc__sql_instructeur_div_by_id() {
618     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
619     FROM ".DB_PREFIXE."instructeur
620     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
621     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
622     WHERE instructeur = <idx>";
623     }
624    
625     /**
626     *
627     * @return string
628     */
629     function get_var_sql_forminc__sql_instructeur_div_by_di() {
630     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
631     FROM ".DB_PREFIXE."instructeur
632     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
633     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
634     LEFT JOIN ".DB_PREFIXE."direction
635     ON division.direction = direction.direction
636     LEFT JOIN ".DB_PREFIXE."om_collectivite
637     ON direction.om_collectivite = om_collectivite.om_collectivite
638     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)))
639     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
640     <instructeur_qualite>
641     ORDER BY nom";
642     }
643    
644     /**
645     *
646     * @return string
647     */
648     function get_var_sql_forminc__sql_instructeur_by_di() {
649     return "SELECT instructeur.instructeur, instructeur.nom
650     FROM ".DB_PREFIXE."instructeur
651     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
652     LEFT JOIN ".DB_PREFIXE."division
653     ON instructeur.division = division.division
654     LEFT JOIN ".DB_PREFIXE."direction
655     ON division.direction = direction.direction
656     LEFT JOIN ".DB_PREFIXE."om_collectivite
657     ON direction.om_collectivite = om_collectivite.om_collectivite
658     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)))
659     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
660     <instructeur_qualite>
661     ORDER BY instructeur.nom ASC";
662     }
663    
664     /**
665     *
666     * @return string
667     */
668     function get_var_sql_forminc__sql_instructeur_2_div() {
669     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
670     FROM ".DB_PREFIXE."instructeur
671     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
672     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
673     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)))
674     AND instructeur_qualite.code = 'tech'
675     ORDER BY nom";
676     }
677    
678     /**
679     *
680     * @return string
681     */
682     function get_var_sql_forminc__sql_instructeur_2_div_by_id() {
683     return $this->get_var_sql_forminc__sql("instructeur_div_by_id");
684     }
685    
686     /**
687     *
688     * @return string
689     */
690     function get_var_sql_forminc__sql_instructeur_2_div_by_di() {
691     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
692     FROM ".DB_PREFIXE."instructeur
693     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
694     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
695     LEFT JOIN ".DB_PREFIXE."direction
696     ON division.direction = direction.direction
697     LEFT JOIN ".DB_PREFIXE."om_collectivite
698     ON direction.om_collectivite = om_collectivite.om_collectivite
699     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)))
700     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
701     AND instructeur_qualite.code = 'tech'
702     ORDER BY nom";
703     }
704    
705     /**
706     *
707     * @return string
708     */
709     function get_var_sql_forminc__sql_instructeur_2_by_di() {
710     return "SELECT instructeur.instructeur, instructeur.nom
711     FROM ".DB_PREFIXE."instructeur
712     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
713     LEFT JOIN ".DB_PREFIXE."division
714     ON instructeur.division = division.division
715     LEFT JOIN ".DB_PREFIXE."direction
716     ON division.direction = direction.direction
717     LEFT JOIN ".DB_PREFIXE."om_collectivite
718     ON direction.om_collectivite = om_collectivite.om_collectivite
719     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)))
720     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
721     AND instructeur_qualite.code = 'tech'
722     ORDER BY instructeur.nom ASC";
723     }
724    
725     /**
726     *
727     * @return string
728     */
729     function get_var_sql_forminc__sql_division_by_di() {
730     return "SELECT division.division, division.libelle
731     FROM ".DB_PREFIXE."division
732     LEFT JOIN ".DB_PREFIXE."direction
733     ON division.direction = direction.direction
734     LEFT JOIN ".DB_PREFIXE."om_collectivite
735     ON direction.om_collectivite = om_collectivite.om_collectivite
736     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)))
737     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
738     ORDER BY division.libelle ASC";
739     }
740    
741     /**
742 softime 10573 *
743     * @return string
744     */
745     function get_var_sql_forminc__sql_commune() {
746     return "
747     SELECT
748     commune.commune,
749     commune.com || ' - ' || commune.libelle AS libelle
750     FROM
751     ".DB_PREFIXE."commune
752     WHERE
753     commune.om_validite_debut <= CURRENT_DATE
754     AND (commune.om_validite_fin IS NULL OR commune.om_validite_fin > CURRENT_DATE)
755     ORDER BY
756     commune.libelle ASC
757     ";
758     }
759    
760     /**
761 mbroquet 3730 * VIEW - view_sitadel.
762     *
763     * @return void
764     */
765     function view_sitadel() {
766 softime 8989 // Affichage du formulaire permettant le choix d'un interval de date
767 mbroquet 3730 // ainsi que le numéro de d'ordre qui est le numéro de la version de
768     // l'export
769 softime 8989 if (empty($this->f->get_submitted_post_value())) {
770 mbroquet 3730 // Affichage du formulaire
771 softime 8989 $this->affichageFormulaire();
772 mbroquet 3730 }
773     else {
774     // Initialisation des variables pour les messages de fin de traitement
775     $correct=true;
776     // Initialisation de la chaîne contenant le message d'erreur
777     $erreur = "";
778 softime 8989 //
779     $message_valid = '';
780     $message_info = '';
781 mbroquet 3730
782     // Initialisation des dates de début et de fin
783     $datedebut ='';
784     $datefin='';
785    
786     // Traitement des erreurs
787     if ($this->f->get_submitted_post_value("datedebut") == "") {
788     $correct=false;
789     } else {
790     $datedebut = substr($this->f->get_submitted_post_value("datedebut"),6,4).
791     "-".substr($this->f->get_submitted_post_value("datedebut"),3,2)."-".
792     substr($this->f->get_submitted_post_value("datedebut"),0,2);
793     }
794     if ($this->f->get_submitted_post_value("datefin") == "") {
795     $correct=false;
796     } else {
797     $datefin = substr($this->f->get_submitted_post_value("datefin"),6,4).
798     "-".substr($this->f->get_submitted_post_value("datefin"),3,2)."-".
799     substr($this->f->get_submitted_post_value("datefin"),0,2);
800     }
801     $numero = $this->f->get_submitted_post_value("numero");
802     //
803     if ($correct === true){ // ***
804     // Requête permettant de lister tous les dossiers de l'export
805     $sql= "SELECT dossier.dossier,
806     dossier.om_collectivite as collectivite,
807     dossier.dossier_autorisation,
808     dossier_instruction_type.mouvement_sitadel,
809     dossier_instruction_type.code as dossier_instruction_type_code,
810     dossier.date_depot,
811     dossier.date_decision,
812     dossier.date_chantier,
813     dossier.date_achevement,
814     dossier.terrain_references_cadastrales as dossier_terrain_references_cadastrales,
815     dossier.terrain_adresse_voie_numero as dossier_terrain_adresse_voie_numero,
816     dossier.terrain_adresse_voie as dossier_terrain_adresse_voie,
817     dossier.terrain_adresse_lieu_dit as dossier_terrain_adresse_lieu_dit,
818     dossier.terrain_adresse_localite as dossier_terrain_adresse_localite,
819     dossier.terrain_adresse_code_postal as dossier_terrain_adresse_code_postal,
820     dossier.terrain_adresse_bp as dossier_terrain_adresse_bp,
821     dossier.terrain_adresse_cedex as dossier_terrain_adresse_cedex,
822     dossier_autorisation_type.code,
823     dossier.date_limite,
824     dossier.date_limite_incompletude,
825     dossier.date_notification_delai,
826     dossier.terrain_superficie as dossier_terrain_superficie,
827 softime 7996 dossier.date_modification,
828     dossier.hash_sitadel,
829 mbroquet 3730
830     arrondissement.code_impots as code_impots,
831    
832     autorite_competente.autorite_competente_sitadel,
833     pp.type_demandeur,
834     pp.qualite,
835     civilite_pp.libelle as civilite_pp,
836     pp.particulier_nom as pp_particulier_nom,
837     pp.particulier_prenom as pp_particulier_prenom,
838     pp.personne_morale_denomination as pp_personne_morale_denomination,
839     pp.personne_morale_raison_sociale as pp_personne_morale_raison_sociale,
840     pp.personne_morale_siret as pp_personne_morale_siret,
841     pp.personne_morale_categorie_juridique as pp_personne_morale_categorie_juridique,
842     civilite_pm.libelle as civilite_pm_libelle,
843     pp.personne_morale_nom as pp_personne_morale_nom,
844     pp.personne_morale_prenom as pp_personne_morale_prenom,
845    
846     pp.numero as pp_numero,
847     pp.voie as pp_voie,
848     pp.complement as pp_complement,
849     pp.lieu_dit as pp_lieu_dit,
850     pp.localite as pp_localite,
851     pp.code_postal as pp_code_postal,
852     pp.bp as pp_bp,
853     pp.cedex as pp_cedex,
854     pp.pays as pp_pays,
855     pp.division_territoriale as pp_division_territoriale,
856    
857     pp.telephone_fixe as pp_telephone_fixe,
858     pp.courriel as pp_courriel,
859    
860     donnees_techniques.co_archi_recours,
861     donnees_techniques.am_terr_surf,
862     donnees_techniques.am_lotiss,
863     donnees_techniques.terr_juri_zac,
864     donnees_techniques.terr_juri_afu,
865     donnees_techniques.co_projet_desc,
866     donnees_techniques.am_projet_desc,
867     donnees_techniques.dm_projet_desc,
868     donnees_techniques.co_cstr_nouv,
869     donnees_techniques.co_cstr_exist,
870     donnees_techniques.co_modif_aspect,
871     donnees_techniques.co_modif_struct,
872     donnees_techniques.co_cloture,
873     donnees_techniques.co_trx_exten,
874     donnees_techniques.co_trx_surelev,
875     donnees_techniques.co_trx_nivsup,
876     donnees_techniques.co_trx_amgt,
877     donnees_techniques.co_anx_pisc,
878     donnees_techniques.co_anx_gara,
879     donnees_techniques.co_anx_veran,
880     donnees_techniques.co_anx_abri,
881     donnees_techniques.co_anx_autr,
882     donnees_techniques.co_bat_niv_nb,
883 softime 4636
884     -- Tableau des destinations
885 mbroquet 3730 donnees_techniques.su_avt_shon1,
886     donnees_techniques.su_avt_shon2,
887     donnees_techniques.su_avt_shon3,
888     donnees_techniques.su_avt_shon4,
889     donnees_techniques.su_avt_shon5,
890     donnees_techniques.su_avt_shon6,
891     donnees_techniques.su_avt_shon7,
892     donnees_techniques.su_avt_shon8,
893     donnees_techniques.su_avt_shon9,
894     donnees_techniques.su_demo_shon1,
895     donnees_techniques.su_demo_shon2,
896     donnees_techniques.su_demo_shon3,
897     donnees_techniques.su_demo_shon4,
898     donnees_techniques.su_demo_shon5,
899     donnees_techniques.su_demo_shon6,
900     donnees_techniques.su_demo_shon7,
901     donnees_techniques.su_demo_shon8,
902     donnees_techniques.su_demo_shon9,
903     donnees_techniques.su_chge_shon1,
904     donnees_techniques.su_chge_shon2,
905     donnees_techniques.su_chge_shon3,
906     donnees_techniques.su_chge_shon4,
907     donnees_techniques.su_chge_shon5,
908     donnees_techniques.su_chge_shon6,
909     donnees_techniques.su_chge_shon7,
910     donnees_techniques.su_chge_shon8,
911     donnees_techniques.su_chge_shon9,
912 softime 4636 donnees_techniques.su_sup_shon1,
913     donnees_techniques.su_sup_shon2,
914     donnees_techniques.su_sup_shon3,
915     donnees_techniques.su_sup_shon4,
916     donnees_techniques.su_sup_shon5,
917     donnees_techniques.su_sup_shon6,
918     donnees_techniques.su_sup_shon7,
919     donnees_techniques.su_sup_shon8,
920     donnees_techniques.su_sup_shon9,
921 mbroquet 3730 donnees_techniques.su_cstr_shon1,
922     donnees_techniques.su_cstr_shon2,
923     donnees_techniques.su_cstr_shon3,
924     donnees_techniques.su_cstr_shon4,
925     donnees_techniques.su_cstr_shon5,
926     donnees_techniques.su_cstr_shon6,
927     donnees_techniques.su_cstr_shon7,
928     donnees_techniques.su_cstr_shon8,
929     donnees_techniques.su_cstr_shon9,
930     donnees_techniques.su_tot_shon1,
931     donnees_techniques.su_tot_shon2,
932     donnees_techniques.su_tot_shon3,
933     donnees_techniques.su_tot_shon4,
934     donnees_techniques.su_tot_shon5,
935     donnees_techniques.su_tot_shon6,
936     donnees_techniques.su_tot_shon7,
937     donnees_techniques.su_tot_shon8,
938     donnees_techniques.su_tot_shon9,
939 softime 4636 -- XXX valeurs obsolètes mais utilisées dans les conditions
940     -- pour afficher les messages d'incohérence
941     donnees_techniques.su_trsf_shon1,
942     donnees_techniques.su_trsf_shon2,
943     donnees_techniques.su_trsf_shon3,
944     donnees_techniques.su_trsf_shon4,
945     donnees_techniques.su_trsf_shon5,
946     donnees_techniques.su_trsf_shon6,
947     donnees_techniques.su_trsf_shon7,
948     donnees_techniques.su_trsf_shon8,
949     donnees_techniques.su_trsf_shon9,
950    
951     -- Tableau des sous-destinations
952     donnees_techniques.su2_avt_shon1,
953     donnees_techniques.su2_avt_shon2,
954     donnees_techniques.su2_avt_shon3,
955     donnees_techniques.su2_avt_shon4,
956     donnees_techniques.su2_avt_shon5,
957     donnees_techniques.su2_avt_shon6,
958     donnees_techniques.su2_avt_shon7,
959     donnees_techniques.su2_avt_shon8,
960     donnees_techniques.su2_avt_shon9,
961     donnees_techniques.su2_avt_shon10,
962     donnees_techniques.su2_avt_shon11,
963     donnees_techniques.su2_avt_shon12,
964     donnees_techniques.su2_avt_shon13,
965     donnees_techniques.su2_avt_shon14,
966     donnees_techniques.su2_avt_shon15,
967     donnees_techniques.su2_avt_shon16,
968     donnees_techniques.su2_avt_shon17,
969     donnees_techniques.su2_avt_shon18,
970     donnees_techniques.su2_avt_shon19,
971     donnees_techniques.su2_avt_shon20,
972     donnees_techniques.su2_demo_shon1,
973     donnees_techniques.su2_demo_shon2,
974     donnees_techniques.su2_demo_shon3,
975     donnees_techniques.su2_demo_shon4,
976     donnees_techniques.su2_demo_shon5,
977     donnees_techniques.su2_demo_shon6,
978     donnees_techniques.su2_demo_shon7,
979     donnees_techniques.su2_demo_shon8,
980     donnees_techniques.su2_demo_shon9,
981     donnees_techniques.su2_demo_shon10,
982     donnees_techniques.su2_demo_shon11,
983     donnees_techniques.su2_demo_shon12,
984     donnees_techniques.su2_demo_shon13,
985     donnees_techniques.su2_demo_shon14,
986     donnees_techniques.su2_demo_shon15,
987     donnees_techniques.su2_demo_shon16,
988     donnees_techniques.su2_demo_shon17,
989     donnees_techniques.su2_demo_shon18,
990     donnees_techniques.su2_demo_shon19,
991     donnees_techniques.su2_demo_shon20,
992     donnees_techniques.su2_chge_shon1,
993     donnees_techniques.su2_chge_shon2,
994     donnees_techniques.su2_chge_shon3,
995     donnees_techniques.su2_chge_shon4,
996     donnees_techniques.su2_chge_shon5,
997     donnees_techniques.su2_chge_shon6,
998     donnees_techniques.su2_chge_shon7,
999     donnees_techniques.su2_chge_shon8,
1000     donnees_techniques.su2_chge_shon9,
1001     donnees_techniques.su2_chge_shon10,
1002     donnees_techniques.su2_chge_shon11,
1003     donnees_techniques.su2_chge_shon12,
1004     donnees_techniques.su2_chge_shon13,
1005     donnees_techniques.su2_chge_shon14,
1006     donnees_techniques.su2_chge_shon15,
1007     donnees_techniques.su2_chge_shon16,
1008     donnees_techniques.su2_chge_shon17,
1009     donnees_techniques.su2_chge_shon18,
1010     donnees_techniques.su2_chge_shon19,
1011     donnees_techniques.su2_chge_shon20,
1012     donnees_techniques.su2_sup_shon1,
1013     donnees_techniques.su2_sup_shon2,
1014     donnees_techniques.su2_sup_shon3,
1015     donnees_techniques.su2_sup_shon4,
1016     donnees_techniques.su2_sup_shon5,
1017     donnees_techniques.su2_sup_shon6,
1018     donnees_techniques.su2_sup_shon7,
1019     donnees_techniques.su2_sup_shon8,
1020     donnees_techniques.su2_sup_shon9,
1021     donnees_techniques.su2_sup_shon10,
1022     donnees_techniques.su2_sup_shon11,
1023     donnees_techniques.su2_sup_shon12,
1024     donnees_techniques.su2_sup_shon13,
1025     donnees_techniques.su2_sup_shon14,
1026     donnees_techniques.su2_sup_shon15,
1027     donnees_techniques.su2_sup_shon16,
1028     donnees_techniques.su2_sup_shon17,
1029     donnees_techniques.su2_sup_shon18,
1030     donnees_techniques.su2_sup_shon19,
1031     donnees_techniques.su2_sup_shon20,
1032     donnees_techniques.su2_cstr_shon1,
1033     donnees_techniques.su2_cstr_shon2,
1034     donnees_techniques.su2_cstr_shon3,
1035     donnees_techniques.su2_cstr_shon4,
1036     donnees_techniques.su2_cstr_shon5,
1037     donnees_techniques.su2_cstr_shon6,
1038     donnees_techniques.su2_cstr_shon7,
1039     donnees_techniques.su2_cstr_shon8,
1040     donnees_techniques.su2_cstr_shon9,
1041     donnees_techniques.su2_cstr_shon10,
1042     donnees_techniques.su2_cstr_shon11,
1043     donnees_techniques.su2_cstr_shon12,
1044     donnees_techniques.su2_cstr_shon13,
1045     donnees_techniques.su2_cstr_shon14,
1046     donnees_techniques.su2_cstr_shon15,
1047     donnees_techniques.su2_cstr_shon16,
1048     donnees_techniques.su2_cstr_shon17,
1049     donnees_techniques.su2_cstr_shon18,
1050     donnees_techniques.su2_cstr_shon19,
1051     donnees_techniques.su2_cstr_shon20,
1052     donnees_techniques.su2_tot_shon1,
1053     donnees_techniques.su2_tot_shon2,
1054     donnees_techniques.su2_tot_shon3,
1055     donnees_techniques.su2_tot_shon4,
1056     donnees_techniques.su2_tot_shon5,
1057     donnees_techniques.su2_tot_shon6,
1058     donnees_techniques.su2_tot_shon7,
1059     donnees_techniques.su2_tot_shon8,
1060     donnees_techniques.su2_tot_shon9,
1061     donnees_techniques.su2_tot_shon10,
1062     donnees_techniques.su2_tot_shon11,
1063     donnees_techniques.su2_tot_shon12,
1064     donnees_techniques.su2_tot_shon13,
1065     donnees_techniques.su2_tot_shon14,
1066     donnees_techniques.su2_tot_shon15,
1067     donnees_techniques.su2_tot_shon16,
1068     donnees_techniques.su2_tot_shon17,
1069     donnees_techniques.su2_tot_shon18,
1070     donnees_techniques.su2_tot_shon19,
1071     donnees_techniques.su2_tot_shon20,
1072    
1073 mbroquet 3730 donnees_techniques.co_sp_transport,
1074     donnees_techniques.co_sp_enseign,
1075     donnees_techniques.co_sp_sante,
1076     donnees_techniques.co_sp_act_soc,
1077     donnees_techniques.co_sp_ouvr_spe,
1078     donnees_techniques.co_sp_culture,
1079     donnees_techniques.dm_tot_log_nb,
1080     donnees_techniques.co_tot_ind_nb,
1081     donnees_techniques.co_tot_coll_nb,
1082     donnees_techniques.co_tot_log_nb,
1083     donnees_techniques.co_resid_agees,
1084     donnees_techniques.co_resid_etud,
1085     donnees_techniques.co_resid_tourism,
1086     donnees_techniques.co_resid_hot_soc,
1087     donnees_techniques.co_resid_hand,
1088     donnees_techniques.co_resid_autr,
1089     donnees_techniques.co_resid_autr_desc,
1090     donnees_techniques.co_uti_pers,
1091     donnees_techniques.co_uti_princ,
1092     donnees_techniques.co_uti_secon,
1093     donnees_techniques.co_uti_vente,
1094     donnees_techniques.co_uti_loc,
1095     donnees_techniques.co_foyer_chamb_nb,
1096     donnees_techniques.co_fin_lls_nb,
1097     donnees_techniques.co_fin_aa_nb,
1098     donnees_techniques.co_fin_ptz_nb,
1099     donnees_techniques.co_fin_autr_nb,
1100     donnees_techniques.co_mais_piece_nb,
1101     donnees_techniques.co_log_1p_nb,
1102     donnees_techniques.co_log_2p_nb,
1103     donnees_techniques.co_log_3p_nb,
1104     donnees_techniques.co_log_4p_nb,
1105     donnees_techniques.co_log_5p_nb,
1106     donnees_techniques.co_log_6p_nb,
1107     donnees_techniques.mod_desc,
1108    
1109     donnees_techniques.doc_date,
1110     donnees_techniques.terr_div_surf_av_div,
1111     donnees_techniques.doc_tot_trav,
1112     donnees_techniques.doc_tranche_trav,
1113     donnees_techniques.doc_tranche_trav_desc,
1114     donnees_techniques.doc_surf,
1115     donnees_techniques.doc_nb_log,
1116     donnees_techniques.doc_nb_log_indiv,
1117     donnees_techniques.doc_nb_log_coll,
1118     donnees_techniques.doc_nb_log_lls,
1119     donnees_techniques.doc_nb_log_aa,
1120     donnees_techniques.doc_nb_log_ptz,
1121     donnees_techniques.doc_nb_log_autre,
1122     donnees_techniques.daact_date,
1123     donnees_techniques.daact_date_chgmt_dest,
1124     donnees_techniques.daact_tot_trav,
1125     donnees_techniques.daact_tranche_trav,
1126     donnees_techniques.daact_tranche_trav_desc,
1127     donnees_techniques.daact_surf,
1128     donnees_techniques.daact_nb_log,
1129     donnees_techniques.daact_nb_log_indiv,
1130     donnees_techniques.daact_nb_log_coll,
1131     donnees_techniques.daact_nb_log_lls,
1132     donnees_techniques.daact_nb_log_aa,
1133     donnees_techniques.daact_nb_log_ptz,
1134     donnees_techniques.daact_nb_log_autre,
1135    
1136     dossier_autorisation.date_depot as date_depot_da,
1137     dossier_autorisation.date_decision as date_decision_da,
1138     dossier_autorisation.date_validite as date_validite_da,
1139     dossier_autorisation.date_chantier as date_chantier_da,
1140     dossier_autorisation.date_achevement as date_achevement_da,
1141     avis_decision.typeavis as typeavis_da,
1142     avis_decision.sitadel,
1143     avis_decision.sitadel_motif,
1144     avis_decision.typeavis,
1145     etat.statut as statut_di
1146    
1147     FROM ".DB_PREFIXE."dossier
1148    
1149     INNER JOIN ".DB_PREFIXE."dossier_instruction_type
1150     ON dossier.dossier_instruction_type =
1151     dossier_instruction_type.dossier_instruction_type
1152     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
1153     ON dossier_instruction_type.dossier_autorisation_type_detaille
1154     =dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1155     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
1156     ON dossier_autorisation_type.dossier_autorisation_type
1157     =dossier_autorisation_type_detaille.dossier_autorisation_type
1158 softime 6565 INNER JOIN ".DB_PREFIXE."groupe
1159     ON dossier_autorisation_type.groupe = groupe.groupe
1160     AND groupe.code != 'CTX'
1161 mbroquet 3730 INNER JOIN ".DB_PREFIXE."dossier_autorisation
1162     ON dossier_autorisation.dossier_autorisation
1163     =dossier.dossier_autorisation
1164     INNER JOIN ".DB_PREFIXE."autorite_competente
1165     ON autorite_competente.autorite_competente
1166     =dossier.autorite_competente
1167    
1168     LEFT JOIN ".DB_PREFIXE."donnees_techniques
1169     ON donnees_techniques.dossier_instruction = dossier.dossier
1170     LEFT JOIN ".DB_PREFIXE."avis_decision
1171     ON avis_decision.avis_decision = dossier.avis_decision
1172     LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur as ldd_pp
1173     ON ldd_pp.dossier = dossier.dossier
1174     LEFT JOIN ".DB_PREFIXE."demandeur as pp
1175     ON ldd_pp.demandeur = pp.demandeur
1176     LEFT JOIN ".DB_PREFIXE."civilite as civilite_pp
1177     ON civilite_pp.civilite = pp.particulier_civilite
1178     LEFT JOIN ".DB_PREFIXE."civilite as civilite_pm
1179     ON civilite_pm.civilite = pp.personne_morale_civilite
1180     LEFT JOIN ".DB_PREFIXE."etat
1181     ON etat.etat = dossier.etat
1182     LEFT JOIN ".DB_PREFIXE."arrondissement
1183     ON dossier_autorisation.arrondissement=arrondissement.arrondissement
1184    
1185     WHERE dossier_instruction_type.mouvement_sitadel IS NOT NULL
1186     AND ldd_pp.petitionnaire_principal is TRUE
1187 softime 7996 AND (dossier.date_modification >= '".$datedebut."' AND dossier.date_modification <= '".$datefin."')
1188 mbroquet 3730 ORDER by dossier_instruction_type.mouvement_sitadel, dossier.dossier";
1189     //Exécution de la requête
1190     $res = $this->f->db -> query ($sql);
1191     $this->f->addToLog("dossier.class.php : db->query(\"".$sql."\")", VERBOSE_MODE);
1192     $this->f->isDatabaseError($res);
1193     $export="";
1194     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
1195     // initialisation de la classe permettant la mise en forme de chaque ligne de l'export
1196     require_once "../obj/export_sitadel.class.php";
1197     $export_sitadel = new export_sitadel($row['dossier'], $this->f);
1198     $export_sitadel->setRow($row);
1199     //Ajout du fichier de variable
1200     if(file_exists ("../sql/".OM_DB_PHPTYPE."/export_sitadel.inc.php")) {
1201     include ("../sql/".OM_DB_PHPTYPE."/export_sitadel.inc.php");
1202     }
1203     //
1204     $export_sitadel->setVal($val);
1205     $departement = $export_sitadel->getDepartement($row["collectivite"]);
1206     $commune = $export_sitadel->getCommune($row["collectivite"]);
1207     $region = $this->f->getParameter("region");
1208 softime 4636
1209     // Initialisation des variables pour le tableau des
1210     // surfaces en version 1
1211     $prefix_su = 'su';
1212     $count_su = 9;
1213     // S'il faut utiliser le tableau des surfaces en
1214     // version 2
1215     if ($export_sitadel->get_tab_su_version() === 2) {
1216     //
1217     $prefix_su = 'su2';
1218     $count_su = 20;
1219     }
1220    
1221 softime 4838 // Récupère la version du dossier d'instruction depuis son
1222     // numéro
1223     $version = 0;
1224     $version = intval($this->get_dossier_instruction_version($row['dossier']));
1225    
1226 mbroquet 3730 // Mouvement de dépôt
1227     $depot="";
1228    
1229     // Tous les mouvements autres que transfert ont comme mouvement le code DEPOT
1230     // les décisions devant êtres précédées par le dépôt correspondant,
1231     // les dossiers avec date de décision comprise dans l'interval fourni sont
1232     // réaffichés en tant que dépôts (mouvement DEPOT)
1233     if (($row['mouvement_sitadel'] == 'DEPOT'||($row['mouvement_sitadel'] == 'MODIFICATIF'
1234 softime 7996 AND $row['statut_di']=='cloture' AND $row['typeavis']=='F'))) {
1235 softime 4838 $depot.=$export_sitadel->entete("DEPOT",$departement,$commune, $version);
1236 mbroquet 3730 $depot.=$export_sitadel->etatcivil();
1237     $depot.=$export_sitadel->adresse();
1238     $depot.=$export_sitadel->delegataire();
1239     $depot.=$export_sitadel->meltel($row['mouvement_sitadel']);
1240     $depot.=$export_sitadel->adresse_terrain();
1241     $depot.=$export_sitadel->parcelle();
1242     // ===========================
1243     // contrat maison individuelle
1244     // ===========================
1245     // sitadel : contrat|
1246     // openads : non renseigne
1247     $depot.= $export_sitadel->defaultValue('contrat')."|";
1248     // ==========
1249     // architecte
1250     // ==========
1251     // sitadel : architecte|
1252     // openads : données techniques.co_archi_recours
1253     $depot.= ($row['co_archi_recours'] == "t")?"1|":"0|";
1254     // =====================
1255     // utilisation data cnil
1256     // ======================
1257     // sitadel : cnil
1258     // openads : non renseigne
1259     $depot.= $export_sitadel->defaultValue('cnil');
1260     // fin d enregistrement depot
1261     $depot.="\n";
1262     }
1263    
1264     // Seuls les dossier de type transfert ont comme mouvement le code TRANSFERT
1265     $transfert ="";
1266 softime 7996 if ($row['mouvement_sitadel']=='TRANSFERT') {
1267 softime 4838 $transfert.=$export_sitadel->entete("TRANSFERT",$departement,$commune, $version);
1268 mbroquet 3730 $transfert.=$export_sitadel->etatcivil();
1269     $transfert.=$export_sitadel->adresse();
1270     $transfert.=$export_sitadel->meltel($row['mouvement_sitadel']);
1271     $transfert.="\n";
1272     }
1273    
1274    
1275     // Une ligne de mouvement DECISION est insérée après chaque ligne
1276     // de mouvement DEPOT
1277     $decision="";
1278     if ($row['mouvement_sitadel'] != 'TRANSFERT'
1279     and $row['mouvement_sitadel'] != 'SUPPRESSION'
1280 softime 7996 and $row['mouvement_sitadel'] == 'DEPOT') {
1281 mbroquet 3730
1282     //Ajout de l'entête
1283 softime 4838 $decision.=$export_sitadel->entete("DECISION",$departement,$commune, $version);
1284 mbroquet 3730
1285     //Ajout du groupe 1
1286     $decision.= $export_sitadel->decision_groupe1();
1287     // Si la décision est favorable, on remplit le groupe 2
1288     if ( $row['sitadel'] == 2 || $row['sitadel'] == 4 || $row['sitadel'] == 5
1289     || $row['sitadel'] == 0 ){
1290     //
1291     $decision.= $export_sitadel->amenagement_terrain();
1292     //Nature du projet
1293     $natproj = 2;
1294     $natprojlib= array(
1295     1=>_("Nouvelle construction"),
1296     2=>_("Travaux sur construction existante"),
1297     3=>_("Nouvelle construction et travaux sur construction"),
1298     );
1299     if ( isset($row['co_cstr_nouv']) && isset($row['co_cstr_exist']) &&
1300     $row['co_cstr_nouv'] == 't' &&
1301     $row['co_cstr_exist'] == 't' ){
1302     $natproj = 3;
1303     }
1304     //Nouvelle construction
1305     elseif ( isset($row['co_cstr_nouv']) && $row['co_cstr_nouv'] == 't' ) {
1306     $natproj = 1;
1307     }
1308     //
1309 softime 4636 $su_avt_shon = $export_sitadel->shon("avt");
1310 mbroquet 3730 //Si la SHON existante avant travaux est supérieur à la SHON
1311     //démolie alors la variable natproj est égale à 2
1312     $shonExistante = 0;
1313     $shonDemolie = 0;
1314 softime 4636 // Pour chaque ligne du tableau
1315     for ($i = 1; $i <= $count_su; $i++) {
1316     //
1317     $shonExistante += floor($row[$prefix_su.'_avt_shon'.$i]);
1318     $shonDemolie += floor($row[$prefix_su.'_demo_shon'.$i]);
1319 mbroquet 3730 }
1320     //Si la SHON existante avant travaux et la SHON démolie sont
1321     //égales alors la variable natproj est égale à 1
1322     if ( $shonExistante == 0 && $shonDemolie == 0 && $natproj != 1 &&
1323     $row['code'] != 'DP' && $row['code'] != 'PA') {
1324     $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";
1325     } elseif ( $shonExistante > $shonDemolie && $natproj != 2 ){
1326 softime 4640 $erreur .= _("Dossier ").$row['dossier']." \"".$natprojlib[$natproj]."\" "._("La SHON existante avant travaux ne doit pas être supérieure à la SHON démolie.")."\n";
1327 mbroquet 3730 }
1328     $decision .= $su_avt_shon;
1329    
1330 softime 4636 $su_demo_shon = $export_sitadel->shon("demo");
1331 mbroquet 3730 //La SHON démolie s'accompagne obligatoirement de la shon
1332     //existante avant travaux
1333     if ( $shonDemolie != 0 && $shonExistante == 0 ){
1334     $erreur .= _("Dossier ").$row['dossier']." "._("La SHON demolie s'accompagne obligatoirement de la SHON existante avant travaux.")."\n";
1335     }
1336     $decision .= $su_demo_shon;
1337     //
1338 softime 4636 $su_sup_shon = $export_sitadel->shon("sup");
1339     $su_chge_shon = $export_sitadel->shon("chge");
1340 mbroquet 3730 if ( strcasecmp($su_sup_shon, $su_chge_shon) != 0){
1341     //
1342 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";
1343 mbroquet 3730 }
1344     $decision .= $su_sup_shon;
1345     $decision .= $su_chge_shon;
1346 softime 4636 $decision .= $export_sitadel->shon("cstr");
1347 mbroquet 3730 $decision .= "0|0|0|0|0|0|0|0|0|";
1348 softime 4640 // Les SHON créées par changement de destination ou
1349     // de sous-destination s'accompagnent obligatoirement
1350     // de SHON existante avant travaux non nulle
1351 mbroquet 3730 if (preg_match("/[0|]{7}/", $su_chge_shon) &&
1352     preg_match("/[0|]{7}/", $su_avt_shon)){
1353    
1354 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";
1355 mbroquet 3730 }
1356     // Un nombre de logements démolis strictement positif doit
1357     // s'accompagner obligatoirement de SHON démolie.
1358     if($row['dm_tot_log_nb'] > 0) {
1359 softime 4636 if($export_sitadel->get_shon_val('demo', 1) <= 0) {
1360 mbroquet 3730 //
1361     $erreur .= _("Dossier ").$row['dossier']." "._("Un nombre de logements demolis strictement positif doit s'accompagner obligatoirement de SHON demolie.")."\n";
1362     }
1363     }
1364     // Un nombre de logements créés strictement positif doit
1365     // s'accompagner obligatoirement de SHON créée ou de SHON
1366 softime 4640 // créée par changement de destination ou de sous-destination
1367     // ayant pour destination l'habitation.
1368     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)) {
1369 mbroquet 3730 //
1370 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";
1371 mbroquet 3730 }
1372    
1373     // La SHON créée ou issue de la transformation
1374     // suffixée par 9 (intérêt collectif ou service public) doit
1375     // obligatoirement s'accompagner de la décomposition
1376     // en sous modalité renseignée par la variable cpublic et réciproquement.
1377    
1378     // Test si une valeur est true
1379     $cpublic = FALSE;
1380     if (isset($row['co_sp_transport']) && $row['co_sp_transport'] == 't') {
1381     $cpublic = TRUE;
1382     }
1383     if (isset($row['co_sp_enseign']) && $row['co_sp_enseign'] == 't') {
1384     $cpublic = TRUE;
1385     }
1386     if (isset($row['co_sp_sante']) && $row['co_sp_sante'] == 't') {
1387     $cpublic = TRUE;
1388     }
1389     if (isset($row['co_sp_act_soc']) && $row['co_sp_act_soc'] == 't') {
1390     $cpublic = TRUE;
1391     }
1392     if (isset($row['co_sp_ouvr_spe']) && $row['co_sp_ouvr_spe'] == 't') {
1393     $cpublic = TRUE;
1394     }
1395     if (isset($row['co_sp_culture']) && $row['co_sp_culture'] == 't') {
1396     $cpublic = TRUE;
1397     }
1398     //
1399 softime 4640 if($cpublic !== TRUE AND ($export_sitadel->get_shon_val('cstr', 9) > 0 OR $export_sitadel->get_shon_val('chge', 9) > 0)) {
1400     $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";
1401 mbroquet 3730 }
1402    
1403     // La destination principale du logement mise à résidence
1404     // principale ou résidence secondaire doit obligatoirement
1405     // s'accompagner d'un mode d'utilisation à occupation personnelle
1406     if($row['co_uti_princ'] == 't' OR $row['co_uti_secon'] == 't') {
1407     if($row['co_uti_pers'] != 't') {
1408    
1409     $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";
1410     }
1411     }
1412    
1413     $decision.= $export_sitadel->destination($row['mouvement_sitadel']);
1414    
1415     // Le nombre total de logements créés (variable nbtotlog)
1416     // doit être égal à la somme des nombres de logements créés
1417     // ventilés par type de financement
1418 softime 9245 if(intval($row['co_tot_log_nb']) != (intval($row['co_fin_lls_nb']) + intval($row['co_fin_aa_nb']) +
1419     intval($row['co_fin_ptz_nb']) + intval($row['co_fin_autr_nb']))) {
1420 mbroquet 3730
1421     $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";
1422     }
1423    
1424     $decision.= $export_sitadel->repartitionFinan();
1425    
1426     // Le nombre total de logements créés (variable nbtotlog)
1427     // doit être égal à la totalisation de la répartition des
1428     // logements par nombre de pièces
1429 softime 9245 if(intval($row['co_tot_log_nb']) != (intval($row['co_log_1p_nb']) + intval($row['co_log_2p_nb']) +
1430     intval($row['co_log_3p_nb']) + intval($row['co_log_4p_nb']) + intval($row['co_log_5p_nb']) +
1431     intval($row['co_log_6p_nb']))) {
1432 mbroquet 3730
1433     $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";
1434     }
1435    
1436     $decision.= $export_sitadel->repartitionNbPiece($row['mouvement_sitadel']);
1437     }
1438     else {
1439     //
1440     $decision.= str_repeat("|", 6);
1441     if($row['code']=='DP'){
1442     $decision .= "00000|";
1443     }else{
1444     $decision .= "|";
1445     }
1446     $decision .= "0000|00000|";
1447     $decision.= str_repeat("|", 74);
1448     }
1449     $decision.="\n";
1450     }
1451    
1452     // modificatif
1453     $modificatif='';
1454     if($row['mouvement_sitadel'] == 'MODIFICATIF' AND $row['statut_di']=='cloture' AND
1455 softime 7996 $row['typeavis']=='F') {
1456 softime 4838 $modificatif.=$export_sitadel->entete("MODIFICATIF",$departement,$commune, $version);
1457 mbroquet 3730
1458     $modificatif.= $export_sitadel->decision_groupe1();
1459    
1460     if(isset($row['date_decision']) or $row['date_decision']==""){
1461     // avis_sitadel et avis_sitadel_motif
1462     // si la decision est favorable, envoi des informations statistiques
1463     if($row["sitadel"] == 2 or $row["sitadel"] == 4
1464     or $row["sitadel"] == 5){
1465     // si accordé : ajout du 2nd groupe d'informations
1466     $modificatif .= $export_sitadel->adresse_terrain(); // adresse du terrain
1467     $modificatif .= $export_sitadel->parcelle(); // 3 premières parcelles
1468     $modificatif .= $export_sitadel->modificatif_terrain(); // Informations complémentaires
1469    
1470 softime 4636 $modificatif.= $export_sitadel->shon("avt");
1471     $modificatif.= $export_sitadel->shon("demo");
1472     $modificatif.= $export_sitadel->shon("chge");
1473     $modificatif.= $export_sitadel->shon("trsf");
1474     $modificatif.= $export_sitadel->shon("cstr");
1475 mbroquet 3730
1476     $modificatif.= "|||||||||";
1477     $modificatif.= $export_sitadel->destination($row['mouvement_sitadel']);
1478     $modificatif.= $export_sitadel->repartitionFinan();
1479     $modificatif.= $export_sitadel->repartitionNbPiece($row['mouvement_sitadel']);
1480     }
1481     else {
1482     $modificatif .= str_repeat("|", 90);
1483     }
1484     }
1485     else {
1486     $modificatif .= str_repeat("|", 90);
1487     }
1488    
1489     $modificatif.="\n";
1490     }
1491    
1492     // Mouvement suppression
1493     $suppression = '';
1494     if($row['mouvement_sitadel'] == 'SUPPRESSION') {
1495 softime 4838 $suppression .= $export_sitadel->entete("SUPPRESSION",$departement,$commune, $version);
1496 mbroquet 3730 $suppression .= "\n";
1497     }
1498    
1499     // Règles sur le mouvement suivi
1500     $suivi="";
1501     if($row['mouvement_sitadel'] == 'SUIVI' and
1502     ($row['date_chantier'] >= $datedebut and $row['date_chantier']<=$datefin) ||
1503     ($row['date_achevement'] >= $datedebut and $row['date_achevement']<=$datefin)){
1504     // Si le dossier est une DOC
1505     if($row['dossier_instruction_type_code']=='DOC'){
1506     // Une ouverture de chantier ne peut concerner qu'un permis autorisé
1507     if($row['typeavis_da'] != 'F'&&$row['typeavis_da'] != '') {
1508     $erreur .= _("Dossier ").$row['dossier']." "._("Une ouverture de chantier ne peut concerner qu'un permis autorise.")."\n";
1509     }
1510     // La date d'ouverture de chantier doit être supérieur à la date d'autorisation
1511     if($row['doc_date'] > $row['date_decision_da']) {
1512     $erreur .= _("Dossier ").$row['dossier']." "._("La date d'ouverture de chantier doit être superieur a la date d'autorisation.")."\n";
1513     }
1514     // Un achèvement de chantier ne peut concerner qu'un permis autorisé
1515     if($row['typeavis_da'] != 'F'&&$row['typeavis_da'] != '') {
1516     $erreur .= _("Dossier ").$row['dossier']." "._("Un achevement de chantier ne peut concerner qu'un permis autorise.")."\n";
1517     }
1518     if( $row['date_chantier_da'] == "" && $row['date_achevement']!="") {
1519     $erreur .= _("Dossier ").$row['dossier']." "._("Un achevement de chantier ne peut concerner qu'un permis sur lequel un chantier a ete ouvert.")."\n";
1520     }
1521     // La date d'achevement de travaux doit être supérieur à la date d'ouverture des travaux
1522     if($row['daact_date'] > $row['date_chantier_da']) {
1523     $erreur .= _("Dossier ").$row['dossier']." "._("La date d'achevement de travaux doit etre superieur a la date d'ouverture des travaux.")."\n";
1524     }
1525 softime 4838 $suivi.=$export_sitadel->entete("SUIVI",$departement,$commune, $version);//8|
1526 mbroquet 3730 $suivi.=$export_sitadel->chantier($row);
1527     //On récupère la DAACT si elle existe
1528     $sqlDAACT = "SELECT
1529     donnees_techniques.daact_date,
1530     donnees_techniques.daact_date_chgmt_dest,
1531     donnees_techniques.daact_tot_trav,
1532     donnees_techniques.daact_tranche_trav,
1533     donnees_techniques.daact_tranche_trav_desc,
1534     donnees_techniques.daact_surf,
1535     donnees_techniques.daact_nb_log,
1536     donnees_techniques.daact_nb_log_indiv,
1537     donnees_techniques.daact_nb_log_coll,
1538     donnees_techniques.daact_nb_log_lls,
1539     donnees_techniques.daact_nb_log_aa,
1540     donnees_techniques.daact_nb_log_ptz,
1541     donnees_techniques.daact_nb_log_autre,
1542     etat.statut as statut_di
1543    
1544     FROM ".DB_PREFIXE."dossier
1545     LEFT JOIN ".DB_PREFIXE."donnees_techniques
1546     ON dossier.dossier=donnees_techniques.dossier_instruction
1547     LEFT JOIN ".DB_PREFIXE."etat
1548     ON dossier.etat = etat.etat
1549     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
1550     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1551     WHERE dossier.dossier_autorisation ='".$row['dossier_autorisation']."' AND
1552     dossier_instruction_type.code = 'DAACT' and mouvement_sitadel='SUIVI'";
1553     $resDAACT = $this->f->db -> query ($sqlDAACT);
1554     $this->f->addToLog("dossier.class.php : db->query(\"".$sqlDAACT."\")", VERBOSE_MODE);
1555     $this->f->isDatabaseError($resDAACT);
1556     $rowDAACT=& $resDAACT->fetchRow(DB_FETCHMODE_ASSOC);
1557     $suivi.=$export_sitadel->achevement($rowDAACT);
1558     $suivi.="\n";
1559     }
1560     elseif($row['dossier_instruction_type_code']=='DAACT'){
1561    
1562     //On vérifie qu'une DOC existe
1563     $sqlDOC = "SELECT dossier.dossier,
1564     dossier.date_chantier,
1565     donnees_techniques.doc_date,
1566     donnees_techniques.terr_div_surf_av_div,
1567     donnees_techniques.doc_tot_trav,
1568     donnees_techniques.doc_tranche_trav,
1569     donnees_techniques.doc_tranche_trav_desc,
1570     donnees_techniques.doc_surf,
1571     donnees_techniques.doc_nb_log,
1572     donnees_techniques.doc_nb_log_indiv,
1573     donnees_techniques.doc_nb_log_coll,
1574     donnees_techniques.doc_nb_log_lls,
1575     donnees_techniques.doc_nb_log_aa,
1576     donnees_techniques.doc_nb_log_ptz,
1577     donnees_techniques.doc_nb_log_autre
1578     FROM ".DB_PREFIXE."dossier
1579     LEFT JOIN ".DB_PREFIXE."donnees_techniques
1580     ON dossier.dossier=donnees_techniques.dossier_instruction
1581     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
1582     ON dossier.dossier_instruction_type=dossier_instruction_type.dossier_instruction_type
1583     WHERE dossier.dossier_autorisation ='".$row['dossier_autorisation']."' AND
1584     dossier_instruction_type.code = 'DOC' and mouvement_sitadel='SUIVI'";
1585     $resDOC = $this->f->db -> query ($sqlDOC);
1586     $this->f->addToLog("dossier.class.php : db->query(\"".$sqlDOC."\")", VERBOSE_MODE);
1587     $this->f->isDatabaseError($resDOC);
1588     $rowDOC=& $resDOC->fetchRow(DB_FETCHMODE_ASSOC);
1589    
1590     if((isset($rowDOC['dossier']) &&
1591     $rowDOC['date_chantier']<$datedebut || $rowDOC['date_chantier']>$datefin) ||
1592     !isset($rowDOC['dossier'])) {
1593     //
1594 softime 4838 $suivi.=$export_sitadel->entete("SUIVI",$departement,$commune, $version);//8|
1595 mbroquet 3730 $suivi.=$export_sitadel->chantier($rowDOC);
1596     $suivi.=$export_sitadel->achevement($row);
1597 softime 7996 $suivi.="\n";
1598 mbroquet 3730 }
1599     }
1600 softime 7996 }
1601     // Ligne SITADEL généré
1602     $line_sitadel = $depot.$decision.$transfert.$modificatif.$suivi.$suppression;
1603     if ($line_sitadel !== '') {
1604     // Hash la ligne SITADEL
1605     $hash_sitadel = md5($line_sitadel);
1606     // Si le hash de la ligne générée est différent du hash
1607     // sauvegardé sur le dossier
1608     if ($row['hash_sitadel'] !== $hash_sitadel) {
1609     // Met la ligne dans l'export
1610     $export .= $line_sitadel;
1611     // Met à jour le hash SITADEL du dossier
1612     $inst_di = $this->get_inst_dossier($row['dossier']);
1613     $inst_di->update_hash_sitadel($hash_sitadel);
1614     } else {
1615     // Supprime les erreurs liées à la ligne qui ne sera
1616     // pas exportée
1617     $erreur = '';
1618     }
1619     }
1620 mbroquet 3730 } // fin while
1621    
1622     /**
1623     *
1624     */
1625     //
1626     if (DBCHARSET == 'UTF8') {
1627     $export = utf8_decode($export);
1628     }
1629    
1630     /**
1631     * En-tête de fichier.
1632     *
1633     * C'est la première ligne du fichier.
1634     */
1635     // on éclate la chaîne export par ligne pour calculer le nombre
1636     // d'enregistrements et la longueur maximale des enregistrements
1637     $export_by_line = explode("\n", $export);
1638     // longueur maximale des enregistrements
1639     // (Num)(6) longueur de l’enregistrement le plus long contenu dans le
1640     // fichier (sans compter la fin d’enregistrement ou la fin de fichier)
1641     $longueur_maximale_des_enregistrements = 0;
1642     foreach ($export_by_line as $export_line) {
1643     if ($longueur_maximale_des_enregistrements > strlen($export_line)) {
1644     continue;
1645     }
1646     $longueur_maximale_des_enregistrements = strlen($export_line);
1647     }
1648     // nombre d'enregistrements
1649     // (Num)(6) nombre d’enregistrements présents dans le fichier en
1650     // comptant l’en-tête du fichier
1651     // XXX Ne faut-il pas ajouter +1 pour la ligne d'en-tête ?
1652     $nombre_d_enregistrements = count($export_by_line);
1653     // code application
1654     // (Alphanum)(7) = SITADEL
1655     $code_application = "SITADEL";
1656     // code département
1657     // (Alphanum)(3) département dans lequel se trouve le service instructeur
1658     // nomenclature : 001 à 095, 02A, 02B, 971...974
1659     $code_departement = $this->f->getParameter("departement");
1660     // service expéditeur
1661     // (Alphanum)(3) DDE ou commune (la plus grosse en cas d'EPCI) ou DGI
1662     // nomenclature : 'ADS', ‘DGI ou code commune INSEE
1663     $service_expediteur = $this->f->getParameter("commune");
1664     // service destinataire
1665     // (Alphanum)(2) DRE
1666     // nomenclature : code région INSEE (exemple : Ile-de-France=11)
1667     $service_destinataire = $this->f->getParameter("region");
1668     // code du fichier transmis
1669     // (AlphaNum)(12) AAMMjjdddccc
1670     // ddd = département du service instructeur
1671     // ccc = code du service expéditeur
1672     // AAMMjj = date
1673     // par exemple : 090531093ADS dans le cas de la transmission mensuelle
1674     // des événements intervenus au mois de mai communiqués par la DDE de
1675     // Seine-Saint-Denis.
1676     // XXX La date du jour correspond bien à la date demandée ?
1677     $code_du_fichier_transmis = sprintf(
1678     "%s%s%s",
1679     date('ymd'),
1680     $code_departement,
1681     $service_expediteur
1682     );
1683     // numéro d'ordre
1684     // (AlphaNum)(1) numéro d’ordre du fichier en cas de rectificatif
1685     // XXX Le formulaire propose jusqu'à la valeur 10 alors que la taille
1686     // de la châine doit être (1) ?
1687     $numero_d_ordre = $this->f->get_submitted_post_value("numero");
1688     // date de création
1689     // (Alphanum)(6) AAMMjj date de création du fichier transmis
1690     $date_de_creation = date('ymd');
1691     // nom de l'applicatif expéditeur
1692     // (Alphanum)(20) Exemple : GESTIO
1693     $nom_de_l_applicatif_expediteur = "openADS";
1694     // version de l'applicatif expéditeur
1695     // (Alphanum)(8) Exemple : 2.05
1696 softime 7996 $version_de_l_applicatif_expediteur = substr($this->f->get_application_version(), 0, 8);
1697 mbroquet 3730 // Consititution de la ligne d'en-tête.
1698     $entete = sprintf(
1699     "%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n",
1700     $code_application,
1701     $code_departement,
1702     $service_expediteur,
1703     $service_destinataire,
1704     $code_du_fichier_transmis,
1705     $numero_d_ordre,
1706     $longueur_maximale_des_enregistrements,
1707     $date_de_creation,
1708     $nombre_d_enregistrements,
1709     $nom_de_l_applicatif_expediteur,
1710     $version_de_l_applicatif_expediteur
1711     );
1712    
1713     /**
1714     *
1715     */
1716     //
1717     $export = $entete.$export;
1718    
1719     /**
1720     * Écriture de l'export dans un fichier sur le disque et affichage du
1721     * lien de téléchargement.
1722     */
1723     // Composition du nom du fichier
1724     $nom_fichier = "SITADEL".substr($this->f->get_submitted_post_value("datedebut"),3,2)."".substr($this->f->get_submitted_post_value("datedebut"),8,4).".txt";
1725     // Composition des métadonnées du fichier
1726     $metadata_fichier = array(
1727     "filename" => $nom_fichier,
1728     "size" => strlen($export),
1729 softime 8989 "mimetype" => "text/csv",
1730 mbroquet 3730 );
1731     // Écriture du fichier
1732 softime 8989 $id_fichier = $this->f->store_file(
1733     $export,
1734     $metadata_fichier,
1735     "sitadel",
1736     json_encode(array(
1737     'date_debut' => $datedebut,
1738     'date_fin' => $datefin,
1739     ))
1740     );
1741     if ($id_fichier === false) {
1742     $msg_error = __("Erreur lors du stockage/enregistrement du fichier SITADEL.").' '.__("Veuillez contacter votre administrateur.");
1743     $this->f->displayMessage("error", $msg_error);
1744     $this->f->addToLog(__METHOD__."(): ".$msg_error, DEBUG_MODE);
1745     return;
1746     }
1747 mbroquet 3730 //
1748 softime 8989 $message_valid = sprintf(
1749     "%s<br/>%s",
1750     sprintf(__("Le fichier %s a été généré."), $nom_fichier),
1751     sprintf(
1752     '<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>',
1753     OM_ROUTE_FORM,
1754     $id_fichier,
1755     __("Télécharger le fichier SITADEL")
1756     )
1757     );
1758 mbroquet 3730
1759     /**
1760     * Écriture d'une éventuelle erreur durant l'export dans un fichier sur
1761     * le disque et affichage du lien de téléchargement.
1762     */
1763     //
1764     if ($erreur != "") {
1765     // Composition du nom du fichier
1766     $nom_fichier_erreur = "probleme_".$nom_fichier;
1767     // Composition des métadonnées du fichier
1768     $metadata_fichier_erreur = array(
1769     "filename" => $nom_fichier_erreur,
1770     "size" => strlen($erreur),
1771 softime 8989 "mimetype" => "application/octet-stream",
1772 mbroquet 3730 );
1773     // Écriture du fichier
1774 softime 8989 $id_fichier_erreur = $this->f->store_file(
1775     $erreur,
1776     $metadata_fichier_erreur,
1777     "sitadel",
1778     json_encode(array(
1779     'date_debut' => $datedebut,
1780     'date_fin' => $datefin,
1781     ))
1782     );
1783     if ($id_fichier_erreur === false) {
1784     $msg_error = __("Erreur lors du stockage/enregistrement du fichier des incohérences SITADEL.").' '.__("Veuillez contacter votre administrateur.");
1785     $this->f->displayMessage("error", $msg_error);
1786     $this->f->addToLog(__METHOD__."(): ".$msg_error, DEBUG_MODE);
1787     return;
1788     }
1789 mbroquet 3730 //
1790 softime 8989 $message_info .= sprintf(
1791     "%s<br/>%s",
1792     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),
1793     sprintf(
1794     '<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>',
1795     OM_ROUTE_FORM,
1796     $id_fichier_erreur,
1797     __("Télécharger le fichier d'incohérence SITADEL")
1798     )
1799     );
1800 mbroquet 3730 }
1801 softime 8989
1802     //
1803     $this->f->displayMessage("valid",
1804     sprintf(
1805     '%s%s%s',
1806     $message_valid,
1807     $message_info !== '' ? '<br/><br/>' : '',
1808     $message_info
1809     )
1810     );
1811    
1812     //
1813 mbroquet 3730 if (DEBUG > 0) {
1814     printf($export);
1815     }
1816    
1817     } else {// correct = false
1818 softime 8989 $this->f->displayMessage("error", __("Les champs dates sont obligatoires."));
1819 mbroquet 3730 }
1820     }
1821     }
1822    
1823    
1824 softime 8989 function affichageFormulaire() {
1825     printf("<form method=\"POST\" name=f1>");
1826     //
1827     printf(
1828     "<div id=\"sitadel-form-fonctionnement\" class=\"sitadel-form-bloc\"><h3>%s</h3><p>%s</p></div>",
1829     __("Fonctionnement"),
1830     __("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.")
1831     );
1832     //
1833     printf(
1834     "<div id=\"sitadel-form-export\" class=\"sitadel-form-bloc\"><h3>%s</h3>",
1835     __("Export")
1836     );
1837 mbroquet 3730 //Description de la page
1838 softime 8989 $description = __("Saisissez la période pour laquelle vous souhaitez exporter les mouvements des dossiers au format SITADEL.");
1839 mbroquet 3730 $this->f->displayDescription($description);
1840     //
1841 softime 8989 $input = "<input type=\"text\" name=\"%s\" id=\"%s\" value=\"%s\" size=\"15\" class=\"champFormulaire datepicker\" onchange=\"fdate(this)\" />";
1842 mbroquet 3730 // champ date debut
1843 softime 8989 printf(" "._("Date de début")." ");
1844     printf($input, "datedebut", "datedebut", '');
1845 mbroquet 3730 // champ date fin
1846 softime 8989 printf(" "._("Date de fin")." ");
1847     printf($input, "datefin", "datefin", '');
1848 mbroquet 3730 // numero d'ordre d'envoi
1849     printf(" "._("Numero d'ordre d'envoi")." : "."<select name=\"numero\">");
1850     for ($i = 1; $i < 11; $i++) {
1851     printf("<option value =\"%d\" ", $i);
1852     printf(">%d</option>", $i);
1853     }
1854     printf("</select>");
1855 softime 8989 printf(
1856     "<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\" />",
1857     __("Exporter le fichier SITADEL"),
1858     addslashes(sprintf(
1859     "<b>%s</b><br/><br/>%s",
1860     __("Important à lire avant de confirmer le message de validation."),
1861     __("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.")
1862     )),
1863     OM_ROUTE_FORM
1864     );
1865     printf("</div>");
1866    
1867     // Affiche le tableau des fichiers sitadel stocké
1868     $link_tab_storage = OM_ROUTE_SOUSTAB.'&obj=storage&idxformulaire=0&retour=tab&retourformulaire=sitadel';
1869     $tab_storage = sprintf(
1870     '<div id="sousform-storage-sitadel" class="sitadel-form-bloc-tab"></div>
1871     <script type="text/javascript" >
1872     ajaxIt(\'storage-sitadel\', \'%1$s\');
1873     </script>',
1874     $link_tab_storage
1875     );
1876     printf(
1877     "<div id=\"sitadel-form-histo\" class=\"sitadel-form-bloc-end\"><h3>%s</h3>%s</div>",
1878     __("Historique des exports"),
1879     $tab_storage
1880     );
1881    
1882 mbroquet 3730 printf("</form>");
1883     }
1884    
1885     /**
1886     * VIEW - view_document_numerise.
1887     *
1888     * Vue du tableau des pièces du dossier d'autorisation.
1889     *
1890     * Cette vue permet de gérer le contenu de l'onglet "Pièce(s)" sur un
1891     * dossier d'autorisation. Cette vue spécifique est nécessaire car
1892     * l'ergonomie standard du framework ne prend pas en charge ce cas.
1893     * C'est ici la vue spécifique des pièces liées au dossier qui est
1894     * affichée directement au clic de l'onglet au lieu du soustab.
1895     *
1896     * L'idée est donc de simuler l'ergonomie standard en créant un container
1897     * et d'appeler la méthode javascript 'ajaxit' pour charger le contenu
1898     * de la vue visualisation de l'objet lié.
1899     *
1900     * @return void
1901     */
1902     function view_document_numerise() {
1903     // Vérification de l'accessibilité sur l'élément
1904     $this->checkAccessibility();
1905     // Récupération des variables GET
1906     ($this->f->get_submitted_get_value('idxformulaire')!==null ? $idxformulaire =
1907     $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = "");
1908     ($this->f->get_submitted_get_value('retourformulaire')!==null ? $retourformulaire =
1909     $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = "");
1910     // Objet à charger
1911     $obj = "document_numerise";
1912 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
1913     if ($type_aff_form === 'CTX RE' OR $type_aff_form === 'CTX IN') {
1914     $obj = "document_numerise_contexte_ctx";
1915     }
1916 mbroquet 3730 // Construction de l'url de sousformulaire à appeler
1917 softime 7996 $url = OM_ROUTE_SOUSFORM."&obj=".$obj;
1918 mbroquet 3730 $url .= "&idx=".$idxformulaire;
1919     $url .= "&action=4";
1920     $url .= "&retourformulaire=".$retourformulaire;
1921     $url .= "&idxformulaire=".$idxformulaire;
1922     $url .= "&retour=form";
1923     // Affichage du container permettant le reffraichissement du contenu
1924     // dans le cas des action-direct.
1925     printf('
1926     <div id="sousform-href" data-href="%s">
1927     </div>',
1928     $url
1929     );
1930     // Affichage du container permettant de charger le retour de la requête
1931     // ajax récupérant le sous formulaire.
1932     printf('
1933     <div id="sousform-%s">
1934     </div>
1935     <script>
1936     ajaxIt(\'%s\', \'%s\');
1937     </script>',
1938     $obj,
1939     $obj,
1940     $url
1941     );
1942     }
1943    
1944     /*
1945 nmeucci 4526 * Définition de la version et du suffixe du DI lors de sa création.
1946 mbroquet 3730 */
1947     function setValFAjout($val = array()) {
1948 nmeucci 4526
1949 softime 10573 /**
1950     * GESTION DE LA NUMÉROTATION
1951     */
1952    
1953 nmeucci 4526 //
1954     // GESTION DE LA VERSION DU DI
1955     // Elle est unique et basée sur celle du DA qui débute à -1.
1956     // Ainsi la version du DI initial est à 0.
1957     //
1958     $numeroVersion = $this->getNumeroVersion($val['dossier_autorisation']);
1959     if (is_numeric($numeroVersion) or $numeroVersion == -1){
1960     $this->incrementNumeroVersion($val['dossier_autorisation'], ++$numeroVersion);
1961     }
1962 softime 10573 // Version du dossier
1963     $this->valF['version'] = $numeroVersion;
1964 nmeucci 4526
1965 softime 10573 // Vérification de la saisie manuelle du numéro complet
1966     $num_doss_comp = isset($val['numero_dossier_complet']) === true ? $val['numero_dossier_complet'] : null;
1967    
1968     if ($num_doss_comp !== null) {
1969     $num_urba = $this->f->numerotation_urbanisme($num_doss_comp);
1970     if (empty($num_urba['di']) === false) {
1971    
1972     //
1973     $this->valF[$this->clePrimaire] = sprintf("%s%s%s%s%s%s%s%s",
1974     $num_urba['di'][1],
1975     $num_urba['di'][2],
1976     $num_urba['di'][3],
1977     $num_urba['di'][4],
1978     $num_urba['di'][5],
1979     $num_urba['di'][6],
1980     isset($num_urba['di'][7]) === true ? $num_urba['di'][7] : '',
1981     isset($num_urba['di'][8]) === true ? str_pad($num_urba['di'][8], 2, '0', STR_PAD_LEFT) : ''
1982     );
1983     $this->valF["dossier_libelle"] = sprintf("%s %s%s %s %s%s%s%s",
1984     $num_urba['di'][1],
1985     $num_urba['di'][2],
1986     $num_urba['di'][3],
1987     $num_urba['di'][4],
1988     $num_urba['di'][5],
1989     $num_urba['di'][6],
1990     isset($num_urba['di'][7]) === true ? $num_urba['di'][7] : '',
1991     isset($num_urba['di'][8]) === true ? str_pad($num_urba['di'][8], 2, '0', STR_PAD_LEFT) : ''
1992     );
1993    
1994     $this->valF["numerotation_type"] = $num_urba['di'][1];
1995     $this->valF["numerotation_dep"] = $num_urba['di'][2];
1996     $this->valF["numerotation_com"] = $num_urba['di'][3];
1997     $this->valF["numerotation_division"] = $num_urba['di'][5];
1998     $this->valF["numerotation_num"] = $num_urba['di'][6];
1999     $this->valF["numerotation_suffixe"] = isset($num_urba['di'][7]) === true ? $num_urba['di'][7] : null;
2000     $this->valF["numerotation_num_suffixe"] = isset($num_urba['di'][8]) === true ? $num_urba['di'][8] : null;
2001     }
2002     else {
2003     $this->valF[$this->clePrimaire] = $num_doss_comp;
2004     $this->valF["dossier_libelle"] = $num_doss_comp;
2005     }
2006     }
2007     else {
2008    
2009     //
2010     // GESTION DU SUFFIXE
2011     // La version du suffixe est celle du type de DI : à ne pas confondre
2012     // avec celle du DI lui même.
2013     // Exemple chronologique :
2014     // DI n° PC0130551600004 -> version 0
2015     // DI n° PC0130551600004M01 -> version 1
2016     // DI n° PC0130551600004PRO01 -> version 2 !!
2017     //
2018     $code = null;
2019     $numeroVersionDossierInstructionType = null;
2020     $suffixe = "";
2021     // Si l'option suffixe de ce type de DI est activée
2022     if ( $this->getSuffixe($this->getDossierInstructionType()) === 't' ){
2023     // Récupération de la lettre associée au type de dossier d'instruction
2024     $code = $this->getCode($this->getDossierInstructionType());
2025     // Récupération du numéro de version en fonction du type de dossier d'instruction
2026     $numeroVersionDossierInstructionType = $this->getNumeroVersionDossierInstructionType($val['dossier_autorisation'], $val['dossier_instruction_type'], $val['demande_type'], $numeroVersion);
2027     // Suffixe
2028     $suffixe = $code.$numeroVersionDossierInstructionType;
2029     }
2030    
2031     // Numéro de dossier
2032     $this->valF['dossier'] = $val['dossier_autorisation'].$suffixe;
2033     // Identifiant du dossier d'instruction lisible
2034     $this->valF['dossier_libelle'] = $this->get_dossier_autorisation_libelle($val['dossier_autorisation']).$suffixe;
2035    
2036    
2037     // Sauvegarde les valeurs composants la numérotation
2038     $da = $this->f->get_inst__om_dbform(array(
2039     "obj" => "dossier_autorisation",
2040     "idx" => $val['dossier_autorisation'],
2041     ));
2042 softime 10713 $this->valF["numerotation_type"] = ($da->getVal("numerotation_type") !== null && $da->getVal("numerotation_type") !== '') ? $da->getVal("numerotation_type") : null;
2043     $this->valF["numerotation_dep"] = ($da->getVal("numerotation_dep") !== null && $da->getVal("numerotation_dep") !== '') ? $da->getVal("numerotation_dep") : null;
2044     $this->valF["numerotation_com"] = ($da->getVal("numerotation_com") !== null && $da->getVal("numerotation_com") !== '') ? $da->getVal("numerotation_com") : null;
2045     $this->valF["numerotation_division"] = ($da->getVal("numerotation_division") !== null && $da->getVal("numerotation_division") !== '') ? $da->getVal("numerotation_division") : null;
2046     $this->valF["numerotation_num"] = ($da->getVal("numerotation_num") !== null && $da->getVal("numerotation_num") !== '') ? $da->getVal("numerotation_num") : null;
2047 softime 10573 $this->valF["numerotation_suffixe"] = $code;
2048     $this->valF["numerotation_num_suffixe"] = $numeroVersionDossierInstructionType;
2049     }
2050    
2051     $collectivite = $this->f->getCollectivite($val['om_collectivite']);
2052     if ($this->f->is_option_om_collectivite_entity_enabled($val['om_collectivite']) === true
2053     && $collectivite['code_entite'] !== null) {
2054     //
2055     $this->valF["numerotation_entite"] = $collectivite['code_entite'];
2056     $this->valF["numerotation_num_entite"] = $this->increment_num_entite($val['dossier_autorisation']);
2057     $numerotation_num_entite = str_pad($this->valF["numerotation_num_entite"], 2, "0", STR_PAD_LEFT);
2058     $this->valF[$this->clePrimaire] = $this->valF[$this->clePrimaire].$this->valF["numerotation_entite"].$numerotation_num_entite;
2059     $this->valF['dossier_libelle'] = $this->valF['dossier_libelle']." ".$this->valF["numerotation_entite"].$numerotation_num_entite;
2060     }
2061    
2062     }
2063    
2064     // Permet d'incrémenter le numéro de version de l'entité
2065     public function increment_num_entite($da) {
2066     if ($da === null || $da === '') {
2067     return false;
2068     }
2069     $last_entity_num = 0;
2070 nmeucci 4526 //
2071 softime 10573 $inst_da = $this->f->get_inst__om_dbform(array(
2072     "obj" => "dossier_autorisation",
2073     "idx" => $da,
2074     ));
2075     $list_di = $inst_da->get_list_dossier_instruction();
2076     foreach ($list_di as $di) {
2077     $inst_di = $this->f->get_inst__om_dbform(array(
2078     "obj" => "dossier",
2079     "idx" => $di['dossier'],
2080     ));
2081     if (intval($inst_di->getVal('numerotation_num_entite')) > $last_entity_num) {
2082     $last_entity_num = intval($inst_di->getVal('numerotation_num_entite'));
2083     }
2084 mbroquet 3730 }
2085 softime 10573 return ++$last_entity_num;
2086 mbroquet 3730 }
2087    
2088     /*Récupère la valeur du suffixe d'un dossier_instruction_type*/
2089     function getSuffixe($dossierInstructionType){
2090    
2091     $suffixe = "";
2092    
2093     $sql = "SELECT
2094     suffixe
2095     FROM
2096     ".DB_PREFIXE."dossier_instruction_type
2097     WHERE
2098     dossier_instruction_type = $dossierInstructionType";
2099    
2100     $this->addToLog("getSuffixe(): db->query(\"".$sql."\")", VERBOSE_MODE);
2101 softime 8989 $res = $this->f->db->query($sql);
2102 mbroquet 3730 if (database :: isError($res))
2103     die($res->getMessage()."erreur ".$sql);
2104    
2105     if ( $res->numRows() > 0 ){
2106    
2107     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
2108     $suffixe = $row['suffixe'];
2109     }
2110    
2111     return $suffixe;
2112     }
2113    
2114     /*Récupère dans la table de paramètrage la lettre correspondant
2115     * au dossier_instruction_type
2116     */
2117     function getCode($dossierInstructionType){
2118    
2119     $code = "";
2120    
2121     $sql = "SELECT
2122     code
2123     FROM
2124     ".DB_PREFIXE."dossier_instruction_type
2125     WHERE
2126     dossier_instruction_type = $dossierInstructionType";
2127    
2128     $this->addToLog("getCode(): db->query(\"".$sql."\")", VERBOSE_MODE);
2129 softime 8989 $res = $this->f->db->query($sql);
2130 mbroquet 3730 if (database :: isError($res))
2131     die($res->getMessage()."erreur ".$sql);
2132    
2133     if ( $res->numRows() > 0 ){
2134    
2135     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
2136     $code = $row['code'];
2137     }
2138    
2139     return $code;
2140     }
2141    
2142     /*Récupère le numéro de version d'un dossier_autorisation*/
2143     function getNumeroVersion($dossierAutorisation){
2144    
2145     $numeroVersion = "";
2146    
2147     $sql = "SELECT
2148     numero_version
2149     FROM
2150     ".DB_PREFIXE."dossier_autorisation
2151     WHERE
2152     dossier_autorisation = '$dossierAutorisation'";
2153    
2154     $this->addToLog("getNumeroVersion(): db->query(\"".$sql."\")", VERBOSE_MODE);
2155 softime 8989 $res = $this->f->db->query($sql);
2156 mbroquet 3730 if (database :: isError($res))
2157     die($res->getMessage()."erreur ".$sql);
2158    
2159     if ( $res->numRows() > 0 ){
2160    
2161     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
2162     $numeroVersion = $row['numero_version'];
2163     }
2164    
2165     return $numeroVersion;
2166     }
2167 fmichon 3892
2168     /**
2169     * Retourne le numéro d'un dossier d'instruction et ses six parties.
2170     *
2171     * @param string $dossier_instruction Identifiant du dossier d'instruction (avec ou sans espace)
2172     *
2173     * @return array
2174     */
2175     function get_dossier_instruction_numero($dossier_instruction = null) {
2176    
2177     // Si le DI n'a pas été fourni
2178     if ($dossier_instruction === null) {
2179     // On le récupère
2180     $dossier_instruction = $this->getVal($this->clePrimaire);
2181     }
2182    
2183     /*
2184     Analyse du numéro du DI et extraction de ses parties
2185    
2186     Retour : tableau à 7 entrées, chacune étant elle-même un tableau à 1 entrée :
2187    
2188     - 0 : chaîne testée (identifiant du DI)
2189 softime 4838 - 1 : type du DA (2 ou 3 lettres)
2190 fmichon 3892 - 2 : code département + code communes(3 + 3 integer)
2191     - 3 : année (2 integer)
2192     - 4 : division + numéro (le premier peut être une lettre ou un
2193     - integer et le reste integer)
2194     - 5 : lettre(s) du type du dossier d'instruction (P, M, ANNUL, ...)
2195     - 6 : version du dossier d'instruction (1 ou 2 integer)
2196     */
2197 softime 10573 if (preg_match_all('|^([A-Z]{2,3})\s{0,1}(\d{6})\s{0,1}(\d{2})\s{0,1}([[:alnum:]]{5})([A-Z]{1,5})?(\d{1,2})?$|', $dossier_instruction, $return) === false) {
2198     $this->f->addToLog(sprintf('%s() : %s',
2199     __METHOD__,
2200     sprintf(__("Échec du parsing du numéro de dossier %s."), $dossier_instruction)
2201     ), DEBUG_MODE);
2202     return false;
2203     }
2204 fmichon 3892 return $return;
2205     }
2206    
2207     /**
2208 softime 8989 * Récupère les arguments nécessaires à la construction d'une séquence de
2209     * dossier.
2210 softime 8477 *
2211 softime 8989 * @return array
2212 softime 8477 */
2213 softime 8989 function get_sequence_args() {
2214 softime 8477 //
2215 softime 8989 $result = array();
2216 softime 10573
2217 softime 8477 $inst_datd = $this->get_inst_dossier_autorisation_type_detaille();
2218     $inst_dat = $this->get_inst_dossier_autorisation_type($inst_datd->getVal('dossier_autorisation_type'));
2219 softime 8989 $result['datc'] = $inst_dat->getVal('code');
2220     $result['annee'] = $this->getVal('annee');
2221 softime 10573
2222 softime 8477 $parse_id = $this->get_dossier_instruction_numero();
2223 softime 10573 if ($parse_id === false
2224     || (is_array($parse_id) && empty(array_filter($parse_id)) === true)) {
2225     // Message dans le log
2226     $this->f->addToLog(__METHOD__."(): ".__("Erreur lors de la récupération du numéro de version du dossier d'instruction."), DEBUG_MODE);
2227     return false;
2228     }
2229    
2230 softime 8477 $dep_com = $parse_id[2][0];
2231 softime 8989 $result['dep'] = substr($dep_com, 0, 3);
2232     $result['com'] = substr($dep_com, 3);
2233     return $result;
2234     }
2235    
2236     /**
2237     * Retourne le nom de la sequence du dossier d'instruction courant.
2238     *
2239     * @return String
2240     */
2241     function get_sequence_name() {
2242     $sequence_args = $this->get_sequence_args();
2243 softime 10573 if (empty($sequence_args) === true) {
2244     // Message dans le log
2245     $this->f->addToLog(__METHOD__."(): ".__("Erreur lors de la récupération des arguments de la séquence."), DEBUG_MODE);
2246     return false;
2247     }
2248 softime 8989 return $this->compose_sequence_name($sequence_args['datc'], $sequence_args['annee'], $sequence_args['dep'], $sequence_args['com']);
2249 softime 8477 }
2250    
2251     /**
2252 fmichon 3892 * Récupère le numéro de version du dossier d'instruction.
2253     *
2254     * @return string
2255     */
2256 softime 4838 function get_dossier_instruction_version($dossier_instruction = null) {
2257 fmichon 3892
2258     // Expression régulière qui découpe le numéro du dossier
2259 softime 4838 $return = $this->get_dossier_instruction_numero($dossier_instruction);
2260 fmichon 3892
2261     // Si l'expression régulière retourne une erreur
2262     if ($return == false) {
2263     // Message dans le log
2264 softime 10573 $this->f->addToLog(__METHOD__."(): ".__("Erreur lors de la récupération du numéro de version du dossier d'instruction"), DEBUG_MODE);
2265 fmichon 3892 //
2266     return false;
2267     }
2268    
2269 nmeucci 4526 // Retourne seulement la version du dossier d'instruction.
2270     // Elle vaut 0 si le numéro du DI n'a pas de suffixe.
2271     if (isset($return[6][0])) {
2272     return $return[6][0];
2273     }
2274     return 0;
2275 fmichon 3892 }
2276 mbroquet 3730
2277     /*Incrémente le numéro de version du dossier*/
2278     function incrementNumeroVersion($dossierAutorisation, $nouveauNumeroVersion) {
2279    
2280     $valF = array (
2281     "numero_version" => $nouveauNumeroVersion
2282     );
2283    
2284 softime 8989 $res = $this->f->db->autoExecute(DB_PREFIXE."dossier_autorisation",
2285 mbroquet 3730 $valF,
2286     DB_AUTOQUERY_UPDATE,
2287     "dossier_autorisation = '$dossierAutorisation'");
2288    
2289     if (database :: isError($res))
2290     die($res->getMessage()."erreur ".$sql);
2291    
2292     }
2293    
2294     /**
2295     * Retourne un numéro de version en fonction du type de dossier d'instruction
2296     * @param string $dossier_autorisation
2297     * @param integer $dossier_instruction_type
2298     * @return int
2299     */
2300 softime 10573 public function getNumeroVersionDossierInstructionType($dossier_autorisation, $dossier_instruction_type, $demande_type, $numero_version, $increment = true){
2301    
2302 mbroquet 3730 $numeroVersionDossierInstructionType = $numero_version;
2303 softime 10573
2304     // Récupère la nature de la demande
2305     $inst_demande_type = $this->f->get_inst__om_dbform(array(
2306     "obj" => "demande_type",
2307     "idx" => $demande_type
2308     ));
2309     $inst_demande_nature = $this->f->get_inst__om_dbform(array(
2310     "obj" => "demande_nature",
2311     "idx" => $inst_demande_type->getVal('demande_nature')
2312     ));
2313    
2314     // Si c'est un dossier d'instruction de type "Initial"
2315     if (strtolower($inst_demande_nature->getVal('code')) === 'nouv') {
2316 mbroquet 3730 return 0;
2317     }
2318     //Si c'est un modificatif ou transfert on retourne un nombre correspondant au
2319     //nombre de dossier d'instruction de ce type, rattaché au dossier
2320     //d'autorisation complété par des 0 à gauche si besoin. Format du retour
2321     //attendu : 01 ou 02, etc.
2322     else {
2323    
2324     //On récupère le nombre de dossier d'instruction de ce type rattaché au
2325     //dossier d'autorisation
2326     $sql = "SELECT
2327     count(dossier)
2328     FROM
2329     ".DB_PREFIXE."dossier
2330     LEFT JOIN
2331     ".DB_PREFIXE."dossier_autorisation
2332     ON
2333     dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
2334     WHERE
2335     dossier_autorisation.dossier_autorisation = '".$dossier_autorisation."'
2336     AND
2337     dossier.dossier_instruction_type = ".$dossier_instruction_type;
2338 softime 8989 $numeroVersionDossierInstructionType = $this->f->db->getOne($sql);
2339 mbroquet 3730 $this->f->addToLog("getNumeroVersionDossierInstructionType(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
2340     if ( database::isError($numeroVersionDossierInstructionType)){
2341     $this->f->addToError("", $numeroVersionDossierInstructionType, $numeroVersionDossierInstructionType);
2342     return false;
2343     }
2344    
2345     // Requête SQL
2346     $sql = "SELECT
2347     substring(dossier, '\d*$')::int as last_num_dossier
2348     FROM ".DB_PREFIXE."dossier
2349     WHERE dossier_instruction_type = ".$dossier_instruction_type."
2350     AND dossier_autorisation = '".$dossier_autorisation."'
2351     AND version = (
2352     SELECT max(version)
2353     FROM ".DB_PREFIXE."dossier
2354     WHERE dossier_instruction_type = ".$dossier_instruction_type."
2355     AND dossier_autorisation = '".$dossier_autorisation."'
2356     GROUP BY dossier_instruction_type, dossier_autorisation
2357     )";
2358 softime 8989 $res = $this->f->db->query($sql);
2359 mbroquet 3730 $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\")", VERBOSE_MODE);
2360     $this->f->isDatabaseError($res);
2361 softime 9282 $num_version_last_dossier = null;
2362     if ($res->numRows() > 0) {
2363     $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
2364     $num_version_last_dossier = $row['last_num_dossier'];
2365     }
2366 mbroquet 3730
2367     if (!empty($num_version_last_dossier)
2368     && $num_version_last_dossier >= $numeroVersionDossierInstructionType) {
2369     // Modifie le numéro suivant
2370     $numeroVersionDossierInstructionType = $num_version_last_dossier;
2371     }
2372     //
2373     if ($increment === true) {
2374     $numeroVersionDossierInstructionType = ++$numeroVersionDossierInstructionType;
2375     }
2376     //On compléte par des 0 à gauche
2377     $numeroVersionDossierInstructionType = str_pad($numeroVersionDossierInstructionType, 2, "0", STR_PAD_LEFT);
2378    
2379     return $numeroVersionDossierInstructionType;
2380     }
2381     }
2382     /**
2383     * Retourne le libellé du dossier d'autorisation
2384     * @param string $dossier_autorisation Identifiant du dossier d'autorisation
2385     * @return string Libellé dossier d'autorisation
2386     */
2387     function get_dossier_autorisation_libelle($dossier_autorisation) {
2388    
2389     $dossier_autorisation_libelle = "";
2390    
2391     // Requête SQL
2392     $sql = "SELECT
2393     dossier_autorisation_libelle
2394     FROM
2395     ".DB_PREFIXE."dossier_autorisation
2396     WHERE
2397     dossier_autorisation = '$dossier_autorisation'";
2398    
2399 softime 8989 $dossier_autorisation_libelle = $this->f->db->getOne($sql);
2400 mbroquet 3730 $this->addToLog("get_dossier_autorisation_libelle(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
2401     database::isError($dossier_autorisation_libelle);
2402 softime 10573
2403 mbroquet 3730 // Retourne le résultat
2404     return $dossier_autorisation_libelle;
2405     }
2406 softime 10573
2407 softime 6929 function setvalF($val = array()){
2408 softime 10573
2409     if (! $this->f->is_option_dossier_commune_enabled()) {
2410     // ajoute une "fausse" clé 'commune' dans le tableau des données envoyées
2411     // car la fonction 'setValF()' dans 'gen/obj/demande.class.php'
2412     // déclenche une erreur 'Undefined index: commune' sinon
2413     $val['commune'] = null;
2414     // idem pour cette valeur qui est passée au dossier d'instruction
2415     $this->valF['commune'] = null;
2416     }
2417    
2418 mbroquet 3730 parent::setvalF($val);
2419    
2420     // Récupération des id demandeurs postés
2421     $this->getPostedValues();
2422    
2423     // enlever les valeurs a ne pas saisir -> recherche en trigger ajouter et modifier
2424     unset ($this->valF['geom']);
2425     unset ($this->valF['geom1']);
2426     // valeurs hiddenstatic (calcule)
2427     if($this->maj==1){
2428     // par defaut
2429     unset ($this->valF['etat']);
2430     unset ($this->valF['delai']);
2431     unset ($this->valF['accord_tacite']);
2432     }
2433     unset ($this->valF['avis_decision']); // avis + libelle avis
2434     unset ($this->valF['terrain_surface_calcul']);
2435     unset ($this->valF['shon_calcul']);
2436     unset ($this->valF['date_notification_delai']);
2437     unset ($this->valF['date_decision']);
2438     unset ($this->valF['date_limite']);
2439     unset ($this->valF['date_validite']);
2440     unset ($this->valF['date_chantier']);
2441     unset ($this->valF['date_achevement']);
2442     unset ($this->valF['date_conformite']);
2443 nmeucci 3887 // Ce champ est mis à jour uniquement par la gestion spécifique du log
2444     // et donc jamais par les actions ajouter/modifier
2445     unset ($this->valF['log_instructions']);
2446 softime 9245 // Ce champ n'est jamais mis à jour, seulement initialisé à la création
2447     // du dossier d'instruction
2448     unset($this->valF['initial_dt']);
2449 mbroquet 3730
2450 softime 10573 // Vérification de la saisie manuelle du numéro complet
2451     $force_param_duree_val = false;
2452     $num_doss_comp = isset($val['numero_dossier_complet']) === true ? $val['numero_dossier_complet'] : null;
2453     if ($num_doss_comp !== null) {
2454     $num_urba = $this->f->numerotation_urbanisme($num_doss_comp);
2455     if (empty($num_urba['di']) === false) {
2456     $force_param_duree_val = true;
2457     }
2458     }
2459 mbroquet 3730 // Durée de validité lors de la création du dossier d'instruction
2460 softime 10573 $this->valF['duree_validite'] = $this->get_duree_validite($this->valF['dossier_autorisation'], $force_param_duree_val);
2461 mbroquet 3730 }
2462    
2463 softime 6929
2464 softime 6565 /**
2465 softime 7067 * Retourne le type de formulaire : ADS, CTX RE, CTX IN ou DPC.
2466 softime 6565 *
2467     * @return mixed $type_aff_form Type de formulaire (string) ou false (bool) si erreur BDD.
2468     */
2469     function get_type_affichage_formulaire() {
2470     if (isset($this->type_aff_form) === true) {
2471     return $this->type_aff_form;
2472 mbroquet 3730 }
2473 softime 6565 //
2474 softime 7996 if($this->getParameter('maj') == '0' OR $this->get_action_crud() === 'create') {
2475 softime 6565 $id_dossier_instruction_type = $this->valF["dossier_instruction_type"];
2476     } else {
2477     $id_dossier_instruction_type = $this->getVal("dossier_instruction_type");
2478     }
2479     $sql = "SELECT dossier_autorisation_type.affichage_form
2480     FROM " . DB_PREFIXE . "dossier_instruction_type
2481     INNER JOIN " . DB_PREFIXE . "dossier_autorisation_type_detaille
2482     ON dossier_instruction_type.dossier_autorisation_type_detaille=dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2483     INNER JOIN " . DB_PREFIXE . "dossier_autorisation_type
2484     ON dossier_autorisation_type.dossier_autorisation_type=dossier_autorisation_type_detaille.dossier_autorisation_type
2485     WHERE dossier_instruction_type.dossier_instruction_type=" . intval($id_dossier_instruction_type);
2486 softime 8989 $type_aff_form = $this->f->db->getOne($sql);
2487 softime 6565 $this->f->addToLog(__METHOD__ . " : db->getOne(\"" . $sql . "\")", VERBOSE_MODE);
2488     if($this->f->isDatabaseError($type_aff_form, true) === true) {
2489     return false;
2490     }
2491     $this->type_aff_form = $type_aff_form;
2492     //
2493     return $this->type_aff_form;
2494     }
2495 mbroquet 3730
2496    
2497 softime 6565 /**
2498     * Retourne le code du groupe du dossier d'instruction.
2499     *
2500     * @return string
2501     */
2502     public function get_groupe() {
2503     //
2504     if (isset($this->groupe) === true && $this->groupe !== null) {
2505     return $this->groupe;
2506 mbroquet 3730 }
2507    
2508 softime 6565 // Récupère le code du groupe
2509     $inst_dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
2510     $inst_dossier_autorisation_type = $this->get_inst_dossier_autorisation_type($inst_dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
2511     $inst_groupe = $this->get_inst_groupe($inst_dossier_autorisation_type->getVal('groupe'));
2512     $groupe = $inst_groupe->getVal('code');
2513 mbroquet 3730
2514 softime 6565 //
2515     $this->groupe = $groupe;
2516     //
2517     return $this->groupe;
2518     }
2519 mbroquet 3730
2520 softime 6565 /**
2521 softime 8989 * @return void
2522 softime 6565 */
2523 softime 8989 function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
2524     parent::verifier($val);
2525 softime 7366 // La date de dépôt est obligatoire
2526     if ($val['date_depot'] === '' || $val['date_depot'] === null) {
2527     //
2528     $this->correct = false;
2529     $this->addToMessage( _('Le champ').' <span class="bold">'.$this->getLibFromField('date_depot').'</span> '._('est obligatoire'));
2530     }
2531    
2532 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
2533     if ($type_aff_form ===false) {
2534     $this->correct = false;
2535     $this->addToMessage(_("Une erreur s'est produite lors de l'ajout de ce dossier. Veuillez contacter votre administrateur."));
2536 mbroquet 3730 }
2537 softime 6565
2538     switch ($type_aff_form) {
2539     case 'ADS':
2540     case 'CTX RE':
2541 softime 10573 case 'CONSULTATION ENTRANTE':
2542 softime 6565 if (!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
2543     empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
2544     !is_null($this->form)) {
2545     $this->correct = false;
2546     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
2547 mbroquet 3730 }
2548 softime 6565 break;
2549     case 'CTX IN':
2550     if (!isset($this->postedIdDemandeur["contrevenant_principal"]) OR
2551     empty($this->postedIdDemandeur["contrevenant_principal"]) AND
2552     !is_null($this->form)) {
2553     $this->correct = false;
2554     $this->addToMessage(_("La saisie d'un contrevenant principal est obligatoire."));
2555     }
2556     break;
2557 softime 7067 case 'DPC':
2558     if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
2559     empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
2560     !is_null($this->form)) {
2561     $this->correct = false;
2562     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
2563     }
2564     if(!isset($this->postedIdDemandeur["bailleur_principal"]) OR
2565     empty($this->postedIdDemandeur["bailleur_principal"]) AND
2566     !is_null($this->form)) {
2567     $this->correct = false;
2568     $this->addToMessage(_("La saisie d'un bailleur principal est obligatoire."));
2569     }
2570     break;
2571 mbroquet 3730 }
2572 softime 7366
2573     // Récupération du crud par rapport au mode du formulaire
2574     $crud = $this->get_action_crud($this->getParameter("maj"));
2575    
2576     // L'année de la date de dépot ne peut pas être modifiée
2577     if ($crud === 'update' && array_key_exists("date_depot", $val) === true && ($val["date_depot"] !== "" && $val["date_depot"] !== null)) {
2578     //
2579     $new_date = DateTime::createFromFormat('d/m/Y', $val["date_depot"]);
2580     $old_date = DateTime::createFromFormat('Y-m-d', $this->getVal("date_depot"));
2581     if ($new_date->format("Y") != $old_date->format("Y")) {
2582     $this->addToMessage(_("L'année de la date de dépôt n'est pas modifiable."));
2583     $this->correct = false;
2584     }
2585     }
2586 softime 10573
2587     // L'année de la date de dépot en mairie ne peut pas être modifiée
2588     if ($crud === 'update' && array_key_exists("date_depot_mairie", $val) === true && ($val["date_depot_mairie"] !== "" && $val["date_depot_mairie"] !== null)) {
2589     //
2590     $new_date = DateTime::createFromFormat('d/m/Y', $val["date_depot_mairie"]);
2591     $old_date = DateTime::createFromFormat('Y-m-d', $this->getVal("date_depot_mairie"));
2592     if ($new_date->format("Y") != $old_date->format("Y")) {
2593     $this->addToMessage(_("L'année de la date de dépôt en mairie n'est pas modifiable."));
2594     $this->correct = false;
2595     }
2596     }
2597    
2598     // option dossier_commune activée
2599     if ($this->f->is_option_dossier_commune_enabled()) {
2600    
2601     // La commune doit être définie
2602     if ($crud !== 'delete') {
2603     if (! array_key_exists("commune", $val) || empty($val["commune"])) {
2604     $this->addToMessage(__("La commune doit être définie."));
2605     $this->correct = false;
2606     }
2607     else {
2608     // récupération de la date de demande
2609     $date_demande = 'NOW';
2610     $d_match = array();
2611     if (isset($val["date_demande"])
2612     && preg_match('/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/',
2613     $val["date_demande"], $d_match)) {
2614     $date_demande = $d_match[3].'-'.$d_match[2].'-'.$d_match[1];
2615     }
2616     $date_demande = new DateTime($date_demande);
2617    
2618     // La commune doit exister
2619     $commune = $this->f->findObjectById("commune", $val["commune"]);
2620     if (empty($commune)) {
2621     $this->addToMessage(__("La commune doit exister."));
2622     $this->correct = false;
2623     }
2624     // La commune ne peut pas être modifiée
2625     elseif ($crud === 'update') {
2626     if ($val["commune"] != $this->getVal('commune')) {
2627     $this->addToMessage(__("La commune n'est pas modifiable."));
2628     $this->correct = false;
2629     }
2630     }
2631     // La commune doit être valide
2632     elseif (! $commune->valid($date_demande)) {
2633     $this->addToMessage(__(
2634     "La commune doit être valide ".
2635     "à la date du '".$date_demande->format('d/m/Y')."'."));
2636     $this->correct = false;
2637     }
2638     }
2639     }
2640     }
2641 softime 6565 }
2642 mbroquet 3730
2643    
2644 softime 10573 /**
2645     * Permet de vérifier si les champs requis Plat'AU ont été remplis
2646     *
2647     * @param $dossier l'identifiant du dossier
2648     *
2649     * @return array un tableau contenant une clé is_ok qui indique
2650     * si tous les champs sont saisis ou non et une clé
2651     * required_fields_empty qui contient les champs qui n'ont pas été saisis
2652     * | false si une erreur survient
2653     *
2654     */
2655     function check_platau_required_fields($dossier) {
2656    
2657     // On récupère les champs Plat'AU requis
2658     $fields_list = $this->list_platau_required_fields_dossier;
2659    
2660     // On fait un tableau qui contiendra les tables et un tableau
2661     // qui contient les champs au format 'table.champ'
2662     $tables = array();
2663     $champs = array();
2664    
2665     foreach ($fields_list as $value) {
2666     $expl_tab = explode('.', $value);
2667     if (! in_array($expl_tab[0], $tables)) {
2668     $tables[] = $expl_tab[0];
2669     }
2670     $champs[] = $value;
2671     }
2672    
2673     // Il y aura toujours la table dossier dans la requête
2674     if (in_array('dossier', $tables)) {
2675     $key = array_keys($tables, 'dossier');
2676     unset($tables[$key[0]]);
2677     }
2678    
2679     $from_tables = array();
2680     // On construit le 'FROM' de la requête sql avec les jointures
2681     foreach($tables as $table) {
2682     // Cas particulier pour la table demandeur et architecte
2683     if ($table == "demandeur") {
2684     $from_tables[] = sprintf(
2685     ' LEFT JOIN %1$slien_dossier_demandeur ON lien_dossier_demandeur.dossier = dossier.dossier LEFT JOIN %1$sdemandeur ON lien_dossier_demandeur.demandeur = demandeur.demandeur',
2686     DB_PREFIXE
2687     );
2688     } elseif ($table == "architecte") {
2689     $from_tables[] = sprintf(
2690     ' LEFT JOIN %sarchitecte ON architecte.architecte = donnees_techniques.architecte',
2691     DB_PREFIXE
2692     );
2693     } else {
2694     $from_tables[] = sprintf(" LEFT JOIN %s$table ON dossier.dossier = $table.%s ", DB_PREFIXE, $table == 'donnees_techniques' ? 'dossier_instruction' : 'dossier');
2695     }
2696     }
2697    
2698     // Construction de la requête sql
2699     $sql = sprintf(
2700     '
2701     SELECT
2702     %s,
2703     CASE WHEN demandeur.qualite=\'particulier\'
2704     THEN
2705     TRIM(CONCAT_WS(\' \', demandeur.particulier_nom, demandeur.particulier_prenom))
2706     ELSE
2707     CASE WHEN demandeur.personne_morale_nom IS NOT NULL OR demandeur.personne_morale_prenom IS NOT NULL
2708     THEN
2709     TRIM(CONCAT_WS(\' \', demandeur.personne_morale_raison_sociale, demandeur.personne_morale_denomination, \'%s\', demandeur.personne_morale_nom, demandeur.personne_morale_prenom))
2710     ELSE
2711     TRIM(CONCAT(demandeur.personne_morale_raison_sociale, \' \', demandeur.personne_morale_denomination))
2712     END
2713 softime 10713 END as petitionnaire,
2714     demandeur.demandeur
2715 softime 10573 FROM
2716     %sdossier
2717     %s
2718     WHERE dossier.dossier = \'%s\'
2719     ',
2720     implode(', ', $champs),
2721     __("représenté(e) par"),
2722     DB_PREFIXE,
2723     implode(' ', $from_tables),
2724     $dossier
2725     );
2726    
2727     // On récupère les champs
2728     $result_fields = $this->f->get_all_results_from_db_query($sql);
2729    
2730     // Si il y a une erreur
2731     if ($result_fields['code'] == 'KO'
2732     || $result_fields['result'] == ''
2733     || $result_fields['result'] == null) {
2734    
2735     $this->addToLog(__METHOD__."() query : ".var_export($sql, true)." error: ".var_export($result_fields['message'], true), DEBUG_MODE);
2736     return false;
2737     }
2738    
2739     // On récupère le résultat de la requête
2740     $required_fields = $result_fields['result'];
2741    
2742     $required_fields_with_tab = array();
2743    
2744     // Pour chaque champ on récupère la table
2745     $demandeur_num = 1;
2746     foreach ($required_fields as $required_field) {
2747     foreach ($champs as $champ) {
2748     if ($champ == "demandeur.localite") {
2749 softime 10713 $required_fields_with_tab[$champ.','.$required_field['petitionnaire'].' '.$required_field['demandeur']] = $required_field[explode('.', $champ)[1]];
2750 softime 10573 } else {
2751     $required_fields_with_tab[$champ] = $required_field[explode('.', $champ)[1]];
2752     }
2753     }
2754     }
2755    
2756     // On vérifie si un architecte est lié
2757     $sql_architecte = sprintf(
2758     'SELECT
2759     architecte.*
2760     FROM
2761     %1$sdossier
2762     LEFT JOIN %1$sdonnees_techniques on dossier.dossier = donnees_techniques.dossier_instruction
2763     LEFT JOIN %1$sarchitecte ON donnees_techniques.architecte = architecte.architecte
2764     WHERE
2765     dossier.dossier = \'%2$s\'',
2766     DB_PREFIXE,
2767     $this->f->db->escapeSimple($dossier)
2768     );
2769    
2770     $result_architecte = $this->f->get_one_result_from_db_query($sql_architecte);
2771    
2772     if ($result_architecte['code'] == 'KO') {
2773     $this->addToLog(__METHOD__."() plop error: ".var_export($result_architecte['message'], true), DEBUG_MODE);
2774     return false;
2775     }
2776    
2777     // Si il n'est pas lié on enlève le champs architecte
2778     if ($result_architecte['result'] == '' || $result_architecte['result'] == null) {
2779     unset($required_fields_with_tab['architecte.ville']);
2780     }
2781    
2782     $result_tab = array(
2783     'is_ok' => false,
2784     'required_fields_empty' => array()
2785     );
2786    
2787     // Construction du message avec les tables et les champs
2788     foreach ($required_fields_with_tab as $required_field => $value) {
2789     if ($value == null || $value == '') {
2790     $required_fields_splited = explode('.', $required_field);
2791     if (isset(explode(',', $required_fields_splited[1])[1])) {
2792     $required_fields_splited = explode('.', $required_field);
2793 softime 10713 // On enlève l'identifiant du demandeur dans le message
2794     $required_fields_splited[1] = preg_replace('/[0-9]*$/', '', $required_fields_splited[1]);
2795 softime 10573 $result_tab['required_fields_empty'][] = sprintf("%s %s <i>%s</i>",
2796     sprintf(__("Dans le formulaire %s"), "<i>".__($required_fields_splited[0])."</i>"),
2797     __(" le champ : "),
2798     __(explode(',', $required_fields_splited[1])[0]).' pour '.explode(',', $required_fields_splited[1])[1]
2799     );
2800     } else {
2801     $result_tab['required_fields_empty'][] = sprintf("%s %s <i>%s</i>",
2802     sprintf(__("Dans le formulaire %s"), "<i>".__($required_fields_splited[0])."</i>"),
2803     __(" le champ : "),
2804     __($required_fields_splited[1])
2805     );
2806     }
2807     }
2808     }
2809    
2810     if (empty($result_tab['required_fields_empty'])) {
2811     $result_tab['is_ok'] = true;
2812     }
2813    
2814     return $result_tab;
2815    
2816     }
2817    
2818    
2819     /**
2820     * Permet de mettre à jour le state d'une task selon certains paramètre
2821     * Si le paramètre $dossier_autorisation est spécifié cela signifie que
2822     * le dossier a été transmis et qu'on doit modifier les state seulement
2823     * des tache de modification du di et d da
2824     *
2825     * @param dossier l'identifiant du dossier
2826     * @param state_prev le state de la tâche
2827     * @param state_wanted le state que doit avoir la tâche
2828     * @param dossier_autorisation l'identifiant du dossier d'autorisation
2829     *
2830     * @return void
2831     *
2832     */
2833     function update_task_state($dossier, $state_prev, $state_wanted, $dossier_autorisation=null) {
2834    
2835     $already_transmitted_updated = '';
2836     $type_task_to_update = '';
2837     // Si le dossier_autorisation est spécifié on construit le WHERE
2838     if (! is_null($dossier_autorisation)) {
2839     $already_transmitted_updated = sprintf('OR task.dossier=\'%s\'', $dossier_autorisation);
2840     $type_task_to_update = sprintf('AND (type=\'modification_DI\' OR type=\'modification_DA\')');
2841     }
2842    
2843     $sql = sprintf(
2844     'SELECT task FROM %stask WHERE task.state = \'%s\' AND (task.dossier=\'%s\' %s) %s',
2845     DB_PREFIXE,
2846     $state_prev,
2847     $dossier,
2848     $already_transmitted_updated,
2849     $type_task_to_update
2850     );
2851     $tasks_id = $this->f->get_all_results_from_db_query($sql);
2852     $params = array('val' => array('state' => $state_wanted));
2853     foreach ($tasks_id['result'] as $task_id) {
2854     $inst_task = $this->f->get_inst__om_dbform(array(
2855     "obj" => "task",
2856     "idx" => intval($task_id['task'])
2857     ));
2858     $inst_task->update_task($params);
2859     }
2860     }
2861    
2862    
2863 softime 6565 function setType(&$form,$maj) {
2864     // Par défaut le type des champs est géré nativement par le framework
2865     parent::setType($form,$maj);
2866    
2867     // Récupération du contexte : groupe, CRUD et paramètres
2868     $groupe = $this->get_type_affichage_formulaire();
2869     $crud = $this->get_action_crud($maj);
2870     $parameters = $this->f->getCollectivite($this->getVal('om_collectivite'));
2871    
2872 mbroquet 3730 //
2873 softime 6565 // Gestion du groupe
2874 mbroquet 3730 //
2875    
2876 softime 10573 // CONSULTATION ENTRANTE
2877     $ce_fields = array(
2878     'autorisation_contestee' => 'hidden',
2879     'cle_acces_citoyen' => 'static',
2880     'contrevenants' => 'hidden',
2881     'date_ait' => 'hidden',
2882     'date_audience' => 'hidden',
2883     'date_affichage' => 'datestatic',
2884     'date_cloture_instruction' => 'hidden',
2885     'date_contradictoire' => 'hidden',
2886     'date_derniere_visite' => 'hidden',
2887     'date_premiere_visite' => 'hidden',
2888     'date_transmission_parquet' => 'hidden',
2889     'dossier_autorisation_type_detaille' => 'hidden',
2890     'dossier_instruction_type' => 'selecthiddenstatic',
2891     'dossier_petitionnaires' => 'hidden',
2892     'dt_ctx_infraction' => 'hidden',
2893     'dt_ctx_regularisable' => 'hidden',
2894     'dt_ctx_synthese_anr' => 'hidden',
2895     'dt_ctx_synthese_nti' => 'hidden',
2896     'ctx_reference_dsj' => 'hidden',
2897     'enjeu_ctx' => 'static',
2898     'instructeur_2' => 'hidden',
2899     'requerants' => 'hidden',
2900     'bailleur' => 'hidden',
2901     'ctx_reference_sagace' => 'hidden',
2902     'pec_metier' => 'selectstatic',
2903     "consultation_entrante" => 'hidden',
2904     "delai_reponse" => 'hidden',
2905     "type_delai" => 'hidden',
2906     "objet_consultation" => 'hidden',
2907     "date_production_notification" => 'hidden',
2908     "date_premiere_consultation" => 'hidden',
2909     "date_consultation" => 'hidden',
2910     "date_emission" => 'hidden',
2911     "service_consultant_id" => 'hidden',
2912     "service_consultant_libelle" => 'hidden',
2913     "service_consultant_insee" => 'hidden',
2914     "service_consultant_mail" => 'hidden',
2915     "service_consultant_type" => 'hidden',
2916     "service_consultant__siren" => 'hidden',
2917     "etat_consultation" => 'hidden',
2918     "type_consultation" => 'hidden',
2919     "texte_fondement_reglementaire" => 'hidden',
2920     "texte_objet_consultation" => 'hidden',
2921     "dossier_consultation" => 'hidden',
2922     );
2923 softime 6565 // INFRACTION
2924     $inf_fields = array(
2925     'a_qualifier' => 'hidden',
2926     'autorisation_contestee' => 'hidden',
2927     'autorite_competente' => 'hidden',
2928     'cle_acces_citoyen' => 'hidden',
2929     'contrevenants' => 'static',
2930     'date_ait' => 'hiddenstaticdate',
2931     'date_audience' => 'hiddenstaticdate',
2932     'date_cloture_instruction' => 'hidden',
2933     'date_complet' => 'hidden',
2934     'date_contradictoire' => 'hiddenstaticdate',
2935     'date_decision' => 'hiddenstaticdate',
2936     'date_depot' => 'hiddenstaticdate',
2937 softime 10573 'date_depot_mairie' => 'hiddenstaticdate',
2938 softime 6565 'date_dernier_depot' => 'hidden',
2939     'date_derniere_visite' => 'hiddenstaticdate',
2940     'date_limite' => 'hidden',
2941     'date_limite_incompletude' => 'hidden',
2942     'date_premiere_visite' => 'hiddenstaticdate',
2943     'date_transmission_parquet' => 'hiddenstaticdate',
2944     'date_validite' => 'hidden',
2945     'delai' => 'hidden',
2946     'description_projet' => 'hidden',
2947     'dossier_autorisation_type_detaille' => 'hidden',
2948     'dossier_instruction_type' => 'hidden',
2949     'dossier_petitionnaire' => 'hidden',
2950     'dossier_petitionnaires' => 'hidden',
2951     'dt_ctx_infraction' => 'checkboxhiddenstatic',
2952     'dt_ctx_regularisable' => 'checkboxhiddenstatic',
2953     'dt_ctx_synthese_anr' => 'static',
2954     'dt_ctx_synthese_nti' => 'static',
2955 softime 8477 'ctx_reference_dsj' => 'static',
2956 softime 6565 'enjeu_ctx' => 'hidden',
2957     'enjeu_erp' => 'hidden',
2958     'enjeu_urba' => 'hidden',
2959     'erp' => 'hidden',
2960     'evenement_suivant_tacite' => 'hidden',
2961     'evenement_suivant_tacite_incompletude' => 'hidden',
2962     'numero_versement_archive' => 'hidden',
2963     'requerants' => 'hidden',
2964     'tax_mtn_part_commu' => 'hidden',
2965     'tax_mtn_part_depart' => 'hidden',
2966     'tax_mtn_part_reg' => 'hidden',
2967     'tax_mtn_total' => 'hidden',
2968 softime 6929 'tax_mtn_rap' => 'hidden',
2969 softime 6565 'tax_secteur' => 'hidden',
2970 softime 6929 'tax_mtn_part_commu_sans_exo' => 'hidden',
2971     'tax_mtn_part_depart_sans_exo' => 'hidden',
2972     'tax_mtn_part_reg_sans_exo' => 'hidden',
2973     'tax_mtn_total_sans_exo' => 'hidden',
2974     'tax_mtn_rap_sans_exo' => 'hidden',
2975 softime 7067 'bailleur' => 'hidden',
2976 softime 8477 'ctx_reference_sagace' => 'static',
2977 softime 10573 'pec_metier' => 'hidden',
2978     "consultation_entrante" => 'hidden',
2979     "delai_reponse" => 'hidden',
2980     "type_delai" => 'hidden',
2981     "objet_consultation" => 'hidden',
2982     "date_production_notification" => 'hidden',
2983     "date_premiere_consultation" => 'hidden',
2984     "date_consultation" => 'hidden',
2985     "date_emission" => 'hidden',
2986     "service_consultant_id" => 'hidden',
2987     "service_consultant_libelle" => 'hidden',
2988     "service_consultant_insee" => 'hidden',
2989     "service_consultant_mail" => 'hidden',
2990     "service_consultant_type" => 'hidden',
2991     "service_consultant__siren" => 'hidden',
2992     "etat_consultation" => 'hidden',
2993     "type_consultation" => 'hidden',
2994     "texte_fondement_reglementaire" => 'hidden',
2995     "texte_objet_consultation" => 'hidden',
2996     "dossier_consultation" => 'hidden',
2997 softime 6565 );
2998     // RECOURS
2999     $re_fields = array(
3000     'a_qualifier' => 'hidden',
3001     'autorite_competente' => 'hidden',
3002     'cle_acces_citoyen' => 'hidden',
3003     'contrevenants' => 'hidden',
3004     'date_ait' => 'hidden',
3005     'date_audience' => 'hidden',
3006     'date_cloture_instruction' => 'hiddenstaticdate',
3007     'date_complet' => 'hidden',
3008     'date_contradictoire' => 'hidden',
3009     'date_decision' => 'hiddenstaticdate',
3010     'date_depot' => 'hiddenstaticdate',
3011 softime 10573 'date_depot_mairie' => 'hiddenstaticdate',
3012 softime 6565 'date_dernier_depot' => 'hidden',
3013     'date_derniere_visite' => 'hidden',
3014     'date_limite' => 'hiddenstaticdate',
3015     'date_limite_incompletude' => 'hidden',
3016     'date_premiere_visite' => 'hidden',
3017     'date_transmission_parquet' => 'hidden',
3018     'date_validite' => 'hidden',
3019     'delai' => 'hidden',
3020     'description_projet' => 'hidden',
3021     'dossier_autorisation_type_detaille' => 'static',
3022     'dossier_instruction_type' => 'hidden',
3023     'dossier_petitionnaire' => 'hidden',
3024     'dossier_petitionnaires' => 'static',
3025     'dt_ctx_infraction' => 'hidden',
3026     'dt_ctx_regularisable' => 'hidden',
3027     'dt_ctx_synthese_anr' => 'hidden',
3028     'dt_ctx_synthese_nti' => 'hidden',
3029     'enjeu_ctx' => 'hidden',
3030     'enjeu_erp' => 'hidden',
3031     'enjeu_urba' => 'hidden',
3032     'erp' => 'hidden',
3033     'evenement_suivant_tacite' =>'selecthiddenstatic',
3034     'evenement_suivant_tacite_incompletude' => 'hidden',
3035     'instructeur_2' => 'hidden',
3036     'numero_versement_archive' => 'hidden',
3037     'requerants' => 'static',
3038     'tax_mtn_part_commu' => 'hidden',
3039     'tax_mtn_part_depart' => 'hidden',
3040     'tax_mtn_part_reg' => 'hidden',
3041     'tax_mtn_total' => 'hidden',
3042 softime 6929 'tax_mtn_rap' => 'hidden',
3043 softime 6565 'tax_secteur' => 'hidden',
3044 softime 6929 'tax_mtn_part_commu_sans_exo' => 'hidden',
3045     'tax_mtn_part_depart_sans_exo' => 'hidden',
3046     'tax_mtn_part_reg_sans_exo' => 'hidden',
3047     'tax_mtn_total_sans_exo' => 'hidden',
3048     'tax_mtn_rap_sans_exo' => 'hidden',
3049 softime 7067 'bailleur' => 'hidden',
3050 softime 8477 'ctx_reference_dsj' => 'static',
3051     'ctx_reference_sagace' => 'static',
3052 softime 10573 'pec_metier' => 'hidden',
3053     "consultation_entrante" => 'hidden',
3054     "delai_reponse" => 'hidden',
3055     "type_delai" => 'hidden',
3056     "objet_consultation" => 'hidden',
3057     "date_production_notification" => 'hidden',
3058     "date_premiere_consultation" => 'hidden',
3059     "date_consultation" => 'hidden',
3060     "date_emission" => 'hidden',
3061     "service_consultant_id" => 'hidden',
3062     "service_consultant_libelle" => 'hidden',
3063     "service_consultant_insee" => 'hidden',
3064     "service_consultant_mail" => 'hidden',
3065     "service_consultant_type" => 'hidden',
3066     "service_consultant__siren" => 'hidden',
3067     "etat_consultation" => 'hidden',
3068     "type_consultation" => 'hidden',
3069     "texte_fondement_reglementaire" => 'hidden',
3070     "texte_objet_consultation" => 'hidden',
3071     "dossier_consultation" => 'hidden',
3072 softime 6565 );
3073     // ADS
3074     $ads_fields = array(
3075     'autorisation_contestee' => 'hidden',
3076     'cle_acces_citoyen' => 'static',
3077     'contrevenants' => 'hidden',
3078     'date_ait' => 'hidden',
3079     'date_audience' => 'hidden',
3080 softime 8989 'date_affichage' => 'datestatic',
3081 softime 6565 'date_cloture_instruction' => 'hidden',
3082     'date_contradictoire' => 'hidden',
3083     'date_derniere_visite' => 'hidden',
3084     'date_premiere_visite' => 'hidden',
3085     'date_transmission_parquet' => 'hidden',
3086     'dossier_autorisation_type_detaille' => 'hidden',
3087     'dossier_instruction_type' => 'selecthiddenstatic',
3088     'dossier_petitionnaires' => 'hidden',
3089     'dt_ctx_infraction' => 'hidden',
3090     'dt_ctx_regularisable' => 'hidden',
3091     'dt_ctx_synthese_anr' => 'hidden',
3092     'dt_ctx_synthese_nti' => 'hidden',
3093 softime 8477 'ctx_reference_dsj' => 'hidden',
3094 softime 6565 'enjeu_ctx' => 'static',
3095     'instructeur_2' => 'hidden',
3096     'requerants' => 'hidden',
3097 softime 7067 'bailleur' => 'hidden',
3098 softime 8477 'ctx_reference_sagace' => 'hidden',
3099 softime 10573 'pec_metier' => 'selectstatic',
3100     "consultation_entrante" => 'hidden',
3101     "delai_reponse" => 'hidden',
3102     "type_delai" => 'hidden',
3103     "objet_consultation" => 'hidden',
3104     "date_production_notification" => 'hidden',
3105     "date_premiere_consultation" => 'hidden',
3106     "date_consultation" => 'hidden',
3107     "date_emission" => 'hidden',
3108     "service_consultant_id" => 'hidden',
3109     "service_consultant_libelle" => 'hidden',
3110     "service_consultant_insee" => 'hidden',
3111     "service_consultant_mail" => 'hidden',
3112     "service_consultant_type" => 'hidden',
3113     "service_consultant__siren" => 'hidden',
3114     "etat_consultation" => 'hidden',
3115     "type_consultation" => 'hidden',
3116     "texte_fondement_reglementaire" => 'hidden',
3117     "texte_objet_consultation" => 'hidden',
3118     "dossier_consultation" => 'hidden',
3119 softime 6565 );
3120 softime 7067 // DPC
3121     $dpc_fields = array(
3122     'autorisation_contestee' => 'hidden',
3123     'cle_acces_citoyen' => 'static',
3124     'contrevenants' => 'hidden',
3125     'date_ait' => 'hidden',
3126     'date_audience' => 'hidden',
3127     'date_cloture_instruction' => 'hidden',
3128     'date_contradictoire' => 'hidden',
3129     'date_derniere_visite' => 'hidden',
3130     'date_premiere_visite' => 'hidden',
3131     'date_transmission_parquet' => 'hidden',
3132     'dossier_autorisation_type_detaille' => 'hidden',
3133     'dossier_instruction_type' => 'selecthiddenstatic',
3134     'dossier_petitionnaires' => 'hidden',
3135     'dt_ctx_infraction' => 'hidden',
3136     'dt_ctx_regularisable' => 'hidden',
3137     'dt_ctx_synthese_anr' => 'hidden',
3138     'dt_ctx_synthese_nti' => 'hidden',
3139 softime 8477 'ctx_reference_dsj' => 'hidden',
3140 softime 7067 'enjeu_ctx' => 'static',
3141     'instructeur_2' => 'hidden',
3142     'requerants' => 'hidden',
3143     'bailleur' => 'static',
3144 softime 8477 'ctx_reference_sagace' => 'hidden',
3145 softime 10573 'pec_metier' => 'hidden',
3146     "consultation_entrante" => 'hidden',
3147     "delai_reponse" => 'hidden',
3148     "type_delai" => 'hidden',
3149     "objet_consultation" => 'hidden',
3150     "date_production_notification" => 'hidden',
3151     "date_premiere_consultation" => 'hidden',
3152     "date_consultation" => 'hidden',
3153     "date_emission" => 'hidden',
3154     "service_consultant_id" => 'hidden',
3155     "service_consultant_libelle" => 'hidden',
3156     "service_consultant_insee" => 'hidden',
3157     "service_consultant_mail" => 'hidden',
3158     "service_consultant_type" => 'hidden',
3159     "service_consultant__siren" => 'hidden',
3160     "etat_consultation" => 'hidden',
3161     "type_consultation" => 'hidden',
3162     "texte_fondement_reglementaire" => 'hidden',
3163     "texte_objet_consultation" => 'hidden',
3164     "dossier_consultation" => 'hidden',
3165 softime 7067 );
3166 softime 6565 // COMMUN
3167     $all_fields = array(
3168     'accord_tacite' => 'hidden',
3169     'annee' => 'hidden',
3170     'autres_demandeurs' => 'hidden',
3171     'date_achevement' => 'hidden',
3172     'date_chantier' => 'hidden',
3173     'date_conformite' => 'hidden',
3174     'date_notification_delai' => 'hidden',
3175     'date_rejet' => 'hidden',
3176     'date_retour_contradictoire' => 'hidden',
3177     'delai_incompletude' => 'hidden',
3178     'description' => 'hidden',
3179     'dossier' => 'hidden',
3180     'dossier_arrondissement' => 'hidden',
3181     'dossier_autorisation' => 'hidden',
3182     'dossier_autorisation_libelle' => 'hidden',
3183     'duree_validite' => 'hidden',
3184     'etat_pendant_incompletude' => 'hidden',
3185     'geom' => 'hiddenstatic',
3186     'geom1' => 'hidden',
3187     'incomplet_notifie' => 'hidden',
3188     'incompletude' => 'hidden',
3189     'interface_referentiel_erp' => 'hidden',
3190     'log_instructions' => 'nodisplay',
3191     'om_collectivite' => 'hidden',
3192     'quartier' => 'hidden',
3193     'version' => 'hidden',
3194 softime 7996 'date_modification' => 'hidden',
3195     'hash_sitadel' => 'hidden',
3196 softime 8329 'depot_electronique' => 'hidden',
3197 softime 9245 'version_clos' => 'hidden',
3198     'initial_dt' => 'hidden',
3199 softime 10573 'adresse_normalisee' => 'hidden',
3200     'adresse_normalisee_json' => 'hidden',
3201     'streetview' => 'hidden',
3202     'numerotation_type' => 'hidden',
3203     'numerotation_dep' => 'hidden',
3204     'numerotation_com' => 'hidden',
3205     'numerotation_division' => 'hidden',
3206     'numerotation_suffixe' => 'hidden',
3207     'numerotation_entite' => 'hidden',
3208     'numerotation_num' => 'hidden',
3209     'numerotation_num_suffixe' => 'hidden',
3210     'numerotation_num_entite' => 'hidden',
3211 softime 6565 );
3212     if (isset($parameters['option_afficher_division'])
3213     && $parameters['option_afficher_division'] !== 'true') {
3214     $all_fields['division'] = 'hidden';
3215 mbroquet 3730 }
3216 softime 6565 if (isset($parameters['option_sig'])
3217     && $parameters['option_sig'] !== 'sig_interne'
3218     && $parameters['option_sig'] !== 'sig_externe'){
3219     $all_fields['geom'] = 'hidden';
3220 mbroquet 3730 }
3221    
3222 softime 10573 if ($this->f->is_option_date_depot_mairie_enabled() === true) {
3223     $all_fields['date_depot_mairie'] = 'datestatic';
3224     } else {
3225     $all_fields['date_depot_mairie'] = 'hidden';
3226     }
3227    
3228 softime 6565 //
3229     // Gestion du contexte
3230     //
3231 mbroquet 3730
3232 softime 6565 // AJOUTER, MODIFIER
3233     if ($crud === 'create' OR $crud === 'update') {
3234 mbroquet 3730
3235 softime 7366 $all_fields['avis_decision'] = 'selecthiddenstatic';
3236 softime 6565 $all_fields['etat'] = 'hiddenstatic';
3237     $all_fields['terrain'] = 'hiddenstatic';
3238     //
3239     $ads_fields['a_qualifier'] = 'checkbox';
3240     $ads_fields['accord_tacite'] = 'hiddenstatic';
3241     $ads_fields['autorite_competente'] = 'selecthiddenstatic';
3242     $ads_fields['date_achevement'] = 'hiddenstaticdate';
3243     $ads_fields['date_chantier'] = 'hiddenstaticdate';
3244     $ads_fields['date_conformite'] = 'hiddenstaticdate';
3245     $ads_fields['date_decision'] = 'hiddenstaticdate';
3246 softime 8989 $ads_fields['date_affichage'] = 'hiddenstaticdate';
3247 softime 6565 $ads_fields['date_depot'] = 'hiddenstaticdate';
3248 softime 10573 //
3249     $ce_fields['a_qualifier'] = 'checkbox';
3250     $ce_fields['accord_tacite'] = 'hiddenstatic';
3251     $ce_fields['autorite_competente'] = 'selecthiddenstatic';
3252     $ce_fields['date_achevement'] = 'hiddenstaticdate';
3253     $ce_fields['date_chantier'] = 'hiddenstaticdate';
3254     $ce_fields['date_conformite'] = 'hiddenstaticdate';
3255     $ce_fields['date_decision'] = 'hiddenstaticdate';
3256     $ce_fields['date_affichage'] = 'hiddenstaticdate';
3257     $ce_fields['date_depot'] = 'hiddenstaticdate';
3258     if ($this->f->is_option_date_depot_mairie_enabled() === true) {
3259     $ads_fields['date_depot_mairie'] = 'date';
3260     $ce_fields['date_depot_mairie'] = 'date';
3261     } else {
3262     $ads_fields['date_depot_mairie'] = 'hidden';
3263     $ce_fields['date_depot_mairie'] = 'hidden';
3264     }
3265 softime 6565 $ads_fields['date_dernier_depot'] = 'hiddenstaticdate';
3266     $ads_fields['date_notification_delai'] = 'hiddenstaticdate';
3267     $ads_fields['date_rejet'] = 'hiddenstaticdate';
3268     $ads_fields['date_validite'] = 'hiddenstaticdate';
3269     $ads_fields['delai'] = 'hiddenstatic';
3270     $ads_fields['description_projet'] = 'hiddenstatic';
3271 softime 7366 $ads_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
3272 softime 6565 $ads_fields['shon_calcul'] = 'hiddenstatic';
3273     $ads_fields['tax_mtn_part_commu'] = 'hidden';
3274     $ads_fields['tax_mtn_part_depart'] = 'hidden';
3275     $ads_fields['tax_mtn_part_reg'] = 'hidden';
3276     $ads_fields['tax_mtn_total'] = 'hidden';
3277 softime 6929 $ads_fields['tax_mtn_rap'] = 'hidden';
3278     $ads_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
3279     $ads_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
3280     $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3281     $ads_fields['tax_mtn_total_sans_exo'] = 'hidden';
3282     $ads_fields['tax_mtn_rap_sans_exo'] = 'hidden';
3283 softime 6565 $ads_fields['terrain_surface_calcul'] = 'hiddenstatic';
3284 softime 7067 //
3285 softime 10573 $ce_fields['date_dernier_depot'] = 'hiddenstaticdate';
3286     $ce_fields['date_notification_delai'] = 'hiddenstaticdate';
3287     $ce_fields['date_rejet'] = 'hiddenstaticdate';
3288     $ce_fields['date_validite'] = 'hiddenstaticdate';
3289     $ce_fields['delai'] = 'hiddenstatic';
3290     $ce_fields['description_projet'] = 'hiddenstatic';
3291     $ce_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
3292     $ce_fields['shon_calcul'] = 'hiddenstatic';
3293     $ce_fields['tax_mtn_part_commu'] = 'hidden';
3294     $ce_fields['tax_mtn_part_depart'] = 'hidden';
3295     $ce_fields['tax_mtn_part_reg'] = 'hidden';
3296     $ce_fields['tax_mtn_total'] = 'hidden';
3297     $ce_fields['tax_mtn_rap'] = 'hidden';
3298     $ce_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
3299     $ce_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
3300     $ce_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3301     $ce_fields['tax_mtn_total_sans_exo'] = 'hidden';
3302     $ce_fields['tax_mtn_rap_sans_exo'] = 'hidden';
3303     $ce_fields['terrain_surface_calcul'] = 'hiddenstatic';
3304     //
3305 softime 7067 $dpc_fields['a_qualifier'] = 'checkbox';
3306     $dpc_fields['accord_tacite'] = 'hiddenstatic';
3307     $dpc_fields['autorite_competente'] = 'selecthiddenstatic';
3308     $dpc_fields['date_achevement'] = 'hiddenstaticdate';
3309     $dpc_fields['date_chantier'] = 'hiddenstaticdate';
3310     $dpc_fields['date_conformite'] = 'hiddenstaticdate';
3311     $dpc_fields['date_decision'] = 'hiddenstaticdate';
3312     $dpc_fields['date_depot'] = 'hiddenstaticdate';
3313 softime 10573 $dpc_fields['date_depot_mairie'] = 'hiddenstaticdate';
3314 softime 7067 $dpc_fields['date_dernier_depot'] = 'hiddenstaticdate';
3315     $dpc_fields['date_notification_delai'] = 'hiddenstaticdate';
3316     $dpc_fields['date_rejet'] = 'hiddenstaticdate';
3317     $dpc_fields['date_validite'] = 'hiddenstaticdate';
3318     $dpc_fields['delai'] = 'hiddenstatic';
3319     $dpc_fields['description_projet'] = 'hiddenstatic';
3320 softime 7366 $dpc_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
3321 softime 7067 $dpc_fields['shon_calcul'] = 'hiddenstatic';
3322     $dpc_fields['tax_mtn_part_commu'] = 'hidden';
3323     $dpc_fields['tax_mtn_part_depart'] = 'hidden';
3324     $dpc_fields['tax_mtn_part_reg'] = 'hidden';
3325     $dpc_fields['tax_mtn_total'] = 'hidden';
3326     $dpc_fields['tax_mtn_rap'] = 'hidden';
3327     $dpc_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
3328     $dpc_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
3329     $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3330     $dpc_fields['tax_mtn_total_sans_exo'] = 'hidden';
3331     $dpc_fields['tax_mtn_rap_sans_exo'] = 'hidden';
3332     $dpc_fields['terrain_surface_calcul'] = 'hiddenstatic';
3333 softime 7366 //
3334     $re_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
3335 softime 10573 $re_fields['dossier_petitionnaires'] = 'static';
3336 softime 7366 $re_fields['requerants'] = 'hiddenstatic';
3337     $inf_fields['contrevenants'] = 'hiddenstatic';
3338     $inf_fields['dt_ctx_synthese_anr'] = 'hiddenstatic';
3339     $inf_fields['dt_ctx_synthese_nti'] = 'hiddenstatic';
3340 softime 10573 //
3341     // Vérifie que le dossier a été déposé électroniquement
3342     if ($this->getVal('depot_electronique') === 't') {
3343     $ce_fields["consultation_entrante"] = 'hidden';
3344     $ce_fields["delai_reponse"] = 'static';
3345     $ce_fields["type_delai"] = 'static';
3346     $ce_fields["objet_consultation"] = 'static';
3347     $ce_fields["date_production_notification"] = 'datestatic';
3348     $ce_fields["date_premiere_consultation"] = 'datestatic';
3349     $ce_fields["date_consultation"] = 'datestatic';
3350     $ce_fields["date_emission"] = 'datestatic';
3351     $ce_fields["service_consultant_id"] = 'static';
3352     $ce_fields["service_consultant_libelle"] = 'static';
3353     $ce_fields["service_consultant_insee"] = 'static';
3354     $ce_fields["service_consultant_mail"] = 'static';
3355     $ce_fields["service_consultant_type"] = 'static';
3356     $ce_fields["service_consultant__siren"] = 'static';
3357     $ce_fields["etat_consultation"] = 'static';
3358     $ce_fields["type_consultation"] = 'static';
3359     $ce_fields["texte_fondement_reglementaire"] = 'static';
3360     $ce_fields["texte_objet_consultation"] = 'static';
3361     $ce_fields["dossier_consultation"] = 'hidden';
3362     }
3363 softime 6565 // Si l'état du dossier est incomplet
3364     if ($this->is_incomplet_notifie()) {
3365     // On cache les dates de complétude et de limite d'instruction
3366     $ads_fields['date_complet'] = 'hidden';
3367     $ads_fields['date_limite'] = 'hidden';
3368     $ads_fields['evenement_suivant_tacite_incompletude'] ='selecthiddenstatic';
3369     $ads_fields['evenement_suivant_tacite'] ='hidden';
3370     $ads_fields['date_limite_incompletude'] = 'hiddenstaticdate';
3371 softime 7067 //
3372     $dpc_fields['date_complet'] = 'hidden';
3373     $dpc_fields['date_limite'] = 'hidden';
3374     $dpc_fields['evenement_suivant_tacite_incompletude'] ='selecthiddenstatic';
3375     $dpc_fields['evenement_suivant_tacite'] ='hidden';
3376     $dpc_fields['date_limite_incompletude'] = 'hiddenstaticdate';
3377 softime 10573 //
3378     $ce_fields['date_complet'] = 'hidden';
3379     $ce_fields['date_limite'] = 'hidden';
3380     $ce_fields['evenement_suivant_tacite_incompletude'] ='selecthiddenstatic';
3381     $ce_fields['evenement_suivant_tacite'] ='hidden';
3382     $ce_fields['date_limite_incompletude'] = 'hiddenstaticdate';
3383 softime 6565 } else {
3384     // Sinon on cache la date de limite d'incomplétude
3385     $ads_fields['date_limite_incompletude'] = 'hidden';
3386     $ads_fields['evenement_suivant_tacite_incompletude'] ='hidden';
3387     $ads_fields['evenement_suivant_tacite'] ='selecthiddenstatic';
3388     $ads_fields['date_complet'] = 'hiddenstaticdate';
3389     $ads_fields['date_limite'] = 'hiddenstaticdate';
3390 softime 7067 //
3391     $dpc_fields['date_limite_incompletude'] = 'hidden';
3392     $dpc_fields['evenement_suivant_tacite_incompletude'] ='hidden';
3393     $dpc_fields['evenement_suivant_tacite'] ='selecthiddenstatic';
3394     $dpc_fields['date_complet'] = 'hiddenstaticdate';
3395     $dpc_fields['date_limite'] = 'hiddenstaticdate';
3396 softime 10573 //
3397     $ce_fields['date_limite_incompletude'] = 'hidden';
3398     $ce_fields['evenement_suivant_tacite_incompletude'] ='hidden';
3399     $ce_fields['evenement_suivant_tacite'] ='selecthiddenstatic';
3400     $ce_fields['date_complet'] = 'hiddenstaticdate';
3401     $ce_fields['date_limite'] = 'hiddenstaticdate';
3402 softime 6565 }
3403    
3404     // MODIFIER
3405     if ($crud ==='update') {
3406     $all_fields['dossier_libelle'] = 'hiddenstatic';
3407 softime 10573 $ads_fields['dossier_petitionnaire'] = 'static';
3408     $dpc_fields['dossier_petitionnaire'] = 'static';
3409     $ce_fields['dossier_petitionnaire'] = 'static';
3410 softime 6565 //
3411     if ($this->f->isAccredited("dossier_modifier_instructeur")) {
3412     $all_fields['instructeur'] = 'select';
3413     $inf_fields['instructeur_2'] = 'select';
3414     } else {
3415     $all_fields['instructeur'] = 'selecthiddenstatic';
3416     $inf_fields['instructeur_2'] = 'selecthiddenstatic';
3417     }
3418     //
3419     if (isset($parameters['option_afficher_division'])
3420     && $parameters['option_afficher_division'] === 'true') {
3421     $all_fields['division'] = 'selecthiddenstatic';
3422     if ($this->f->isAccredited("dossier_modifier_division")) {
3423     $all_fields['division'] = 'select';
3424     }
3425     }
3426     // Si l'utilisateur ne peut pas qualifier un DI (guichet unique & guichet et suivi)
3427     if (!$this->f->isAccredited(array("dossier_instruction","dossier_instruction_qualifier"), "OR")) {
3428     // Il ne peut pas modifier les champs suivants
3429     $ads_fields['numero_versement_archive'] = 'hiddenstatic';
3430     $ads_fields['enjeu_urba'] = 'checkboxhiddenstatic';
3431     $ads_fields['enjeu_erp'] = 'checkboxhiddenstatic';
3432     $ads_fields['erp'] = 'checkboxhiddenstatic';
3433     $ads_fields['a_qualifier'] = 'checkboxhiddenstatic';
3434 softime 7067 //
3435     $dpc_fields['numero_versement_archive'] = 'hiddenstatic';
3436     $dpc_fields['enjeu_urba'] = 'checkboxhiddenstatic';
3437     $dpc_fields['enjeu_erp'] = 'checkboxhiddenstatic';
3438     $dpc_fields['erp'] = 'checkboxhiddenstatic';
3439     $dpc_fields['a_qualifier'] = 'checkboxhiddenstatic';
3440 softime 10573 //
3441     $ce_fields['numero_versement_archive'] = 'hiddenstatic';
3442     $ce_fields['enjeu_urba'] = 'checkboxhiddenstatic';
3443     $ce_fields['enjeu_erp'] = 'checkboxhiddenstatic';
3444     $ce_fields['erp'] = 'checkboxhiddenstatic';
3445     $ce_fields['a_qualifier'] = 'checkboxhiddenstatic';
3446 softime 6565 }
3447     // Le profil Qualificateur peut modifier seulement les champs
3448     // autorite_competente, a_qualifier et erp
3449     if ($this->f->isUserQualificateur()) {
3450     $ads_fields['numero_versement_archive'] = 'static';
3451     $ads_fields['enjeu_urba'] = 'checkboxstatic';
3452     $ads_fields['enjeu_erp'] = 'checkboxstatic';
3453 softime 7067 //
3454     $dpc_fields['numero_versement_archive'] = 'static';
3455     $dpc_fields['enjeu_urba'] = 'checkboxstatic';
3456     $dpc_fields['enjeu_erp'] = 'checkboxstatic';
3457 softime 10573 //
3458     $ce_fields['numero_versement_archive'] = 'static';
3459     $ce_fields['enjeu_urba'] = 'checkboxstatic';
3460     $ce_fields['enjeu_erp'] = 'checkboxstatic';
3461 softime 6565 }
3462 softime 7366 // Le dossier ne doit pas être instruit
3463     if ($this->has_only_recepisse() === true
3464     && $this->getStatut() !== 'cloture') {
3465     //
3466     $all_fields['date_depot'] = 'date';
3467 softime 10573 if ($this->f->is_option_date_depot_mairie_enabled() === true) {
3468     $all_fields['date_depot_mairie'] = 'date';
3469     } else {
3470     $all_fields['date_depot_mairie'] = 'hidden';
3471     }
3472 softime 7366 }
3473 softime 8593 // Gestion de la case à cocher ERP en cas d'interfaçage avec le
3474     // référentiel ERP
3475     if ($this->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true) {
3476     // Par défaut la case à cocher ERP est non modifiable
3477     $all_fields['erp'] = 'checkboxhiddenstatic';
3478     // Si le type du dossier d'instruction en cours est présent
3479     // dans les paramètres autorisant l'interfaçage avec le référentiel ERP
3480     if (isset($parameters['erp__dossier__nature__at']) === true
3481     && $this->f->getDATCode($this->getVal($this->clePrimaire)) == $parameters['erp__dossier__nature__at']) {
3482     //
3483     $all_fields['erp'] = 'checkbox';
3484     }
3485     if (isset($parameters['erp__dossier__nature__pc']) === true
3486     && $this->f->getDATCode($this->getVal($this->clePrimaire)) == $parameters['erp__dossier__nature__pc']
3487     && isset($parameters['erp__dossier__type_di__pc']) === true) {
3488     //
3489     $erp_di_pc = explode(";", $parameters['erp__dossier__type_di__pc']);
3490     if (is_array($erp_di_pc) === true
3491     && in_array($this->getVal("dossier_instruction_type"), $erp_di_pc) === true) {
3492     //
3493     $all_fields['erp'] = 'checkbox';
3494     }
3495     }
3496     }
3497 softime 8989 // modification de la date d'affichage pour les ADS
3498     if ($this->f->isAccredited($this->get_absolute_class_name()."_modifier_date_affichage")) {
3499     $ads_fields['date_affichage'] = 'date';
3500 softime 10573 $ce_fields['date_affichage'] = 'date';
3501 softime 8989 }
3502 softime 10573
3503     // pas de modificiation de la commune associée au dossier (si l'option est activée)
3504     if ($this->f->is_option_dossier_commune_enabled($this->getVal('om_collectivite'))) {
3505     $ads_fields['commune'] = 'selecthiddenstatic';
3506     $ce_fields['commune'] = 'selecthiddenstatic';
3507     }
3508 softime 6565 }
3509     }
3510     // MODIFIER, SUPPRIMER, CONSULTER
3511     if ($crud !== 'create') {
3512     $re_fields['autorisation_contestee'] = 'selecthiddenstatic';
3513     $all_fields['date_demande'] = 'hidden';
3514     // La collectivité n'est jamais modifiable
3515     if ($_SESSION['niveau'] == 2) {
3516     $all_fields['om_collectivite'] = 'selecthiddenstatic';
3517     }
3518 softime 6929 // Instance du paramétrage des taxes
3519 mbroquet 3730 $inst_taxe_amenagement = $this->get_inst_taxe_amenagement();
3520     // Instance de cerfa
3521     $inst_cerfa = $this->get_inst_cerfa();
3522 softime 10573
3523     // Gestion du secteur pour la taxe d'aménagement
3524     // MODIFIER
3525     if ($crud === 'update') {
3526     //
3527     if ($this->is_in_context_of_foreign_key("tax_secteur", $this->getParameter("retourformulaire"))) {
3528     $ads_fields['tax_secteur'] = 'selecthiddenstatic';
3529     $dpc_fields['tax_secteur'] = 'selecthiddenstatic';
3530     $ce_fields['tax_secteur'] = 'selecthiddenstatic';
3531     } else {
3532     $ads_fields['tax_secteur'] = 'select';
3533     $dpc_fields['tax_secteur'] = 'select';
3534     $ce_fields['tax_secteur'] = 'select';
3535     }
3536     }
3537     // SUPPRIMER
3538     if ($crud === 'delete') {
3539     //
3540     $ads_fields['tax_secteur'] = 'selectstatic';
3541     $dpc_fields['tax_secteur'] = 'selectstatic';
3542     $ce_fields['tax_secteur'] = 'selectstatic';
3543     }
3544     // CONSULTER
3545     if ($crud === 'read') {
3546     //
3547     $ads_fields['tax_secteur'] = 'selectstatic';
3548     $dpc_fields['tax_secteur'] = 'selectstatic';
3549     $ce_fields['tax_secteur'] = 'selectstatic';
3550     }
3551    
3552 softime 6929 // Si l'option de simulation est activée pour la collectivité du
3553     // dossier, l'utilisateur connecté a la permissions de voir
3554     // la simulation des taxes, la collectivité à un paramétrage pour
3555     // les taxes et que le cerfa du dossier à les champs requis
3556     if ($this->f->is_option_simulation_taxes_enabled($this->getVal('om_collectivite')) === true
3557     && $this->f->isAccredited("dossier_instruction_simulation_taxes") === true
3558     && $inst_taxe_amenagement !== null
3559     && $inst_cerfa->can_simulate_taxe_amenagement() === true) {
3560 mbroquet 3730
3561 softime 6565 // Si ce n'est pas une commune d'Île-de-France
3562 mbroquet 3730 if ($inst_taxe_amenagement->getVal('en_ile_de_france') == 'f') {
3563     //
3564 softime 6565 $ads_fields['tax_mtn_part_reg'] = 'hidden';
3565 softime 6929 $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3566 softime 7067 $dpc_fields['tax_mtn_part_reg'] = 'hidden';
3567     $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3568 softime 10573 $ce_fields['tax_mtn_part_reg'] = 'hidden';
3569     $ce_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3570 mbroquet 3730 }
3571     } else {
3572 softime 6565 // SUPPRIMER, CONSULTER
3573     if ($crud === 'delete' OR $crud ==='read') {
3574     $ads_fields['tax_mtn_part_commu'] = 'hidden';
3575     $ads_fields['tax_mtn_part_depart'] = 'hidden';
3576     $ads_fields['tax_mtn_part_reg'] = 'hidden';
3577     $ads_fields['tax_mtn_total'] = 'hidden';
3578 softime 6929 $ads_fields['tax_mtn_rap'] = 'hidden';
3579     $ads_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
3580     $ads_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
3581     $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3582     $ads_fields['tax_mtn_total_sans_exo'] = 'hidden';
3583     $ads_fields['tax_mtn_rap_sans_exo'] = 'hidden';
3584 softime 7067 //
3585     $dpc_fields['tax_mtn_part_commu'] = 'hidden';
3586     $dpc_fields['tax_mtn_part_depart'] = 'hidden';
3587     $dpc_fields['tax_mtn_part_reg'] = 'hidden';
3588     $dpc_fields['tax_mtn_total'] = 'hidden';
3589     $dpc_fields['tax_mtn_rap'] = 'hidden';
3590     $dpc_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
3591     $dpc_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
3592     $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3593     $dpc_fields['tax_mtn_total_sans_exo'] = 'hidden';
3594     $dpc_fields['tax_mtn_rap_sans_exo'] = 'hidden';
3595 softime 10573 //
3596     $ce_fields['tax_mtn_part_commu'] = 'hidden';
3597     $ce_fields['tax_mtn_part_depart'] = 'hidden';
3598     $ce_fields['tax_mtn_part_reg'] = 'hidden';
3599     $ce_fields['tax_mtn_total'] = 'hidden';
3600     $ce_fields['tax_mtn_rap'] = 'hidden';
3601     $ce_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
3602     $ce_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
3603     $ce_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
3604     $ce_fields['tax_mtn_total_sans_exo'] = 'hidden';
3605     $ce_fields['tax_mtn_rap_sans_exo'] = 'hidden';
3606 mbroquet 3730 }
3607     }
3608     }
3609 softime 8477 // CONSULTER
3610     if ($crud ==='read') {
3611 mbroquet 3730
3612 softime 6565 $ads_fields['geom'] = 'static';
3613     $ads_fields['a_qualifier'] = 'checkboxstatic';
3614     $ads_fields['terrain_references_cadastrales'] = 'referencescadastralesstatic';
3615 softime 7067 //
3616     $dpc_fields['geom'] = 'static';
3617     $dpc_fields['a_qualifier'] = 'checkboxstatic';
3618     $dpc_fields['terrain_references_cadastrales'] = 'referencescadastralesstatic';
3619 softime 10573 //
3620     $ce_fields['geom'] = 'static';
3621     $ce_fields['a_qualifier'] = 'checkboxstatic';
3622     $ce_fields['terrain_references_cadastrales'] = 'referencescadastralesstatic';
3623     // Affiche le champ streetview si l'option est active
3624     if ($this->f->is_option_streetview_enabled($this->getVal("om_collectivite")) === true) {
3625     $all_fields['streetview'] = 'static';
3626     }
3627    
3628 softime 6565 // Si l'état du dossier est incomplet
3629     if ($this->is_incomplet_notifie()) {
3630     // on cache les dates de complétude et de limite d'instruction
3631     $ads_fields['date_complet'] = 'hidden';
3632     $ads_fields['date_limite'] = 'hidden';
3633     $ads_fields['evenement_suivant_tacite_incompletude'] = 'selecthiddenstatic';
3634     $ads_fields['evenement_suivant_tacite'] = 'hidden';
3635 softime 7067 //
3636     $dpc_fields['date_complet'] = 'hidden';
3637     $dpc_fields['date_limite'] = 'hidden';
3638     $dpc_fields['evenement_suivant_tacite_incompletude'] = 'selecthiddenstatic';
3639     $dpc_fields['evenement_suivant_tacite'] = 'hidden';
3640 softime 10573 //
3641     $ce_fields['date_complet'] = 'hidden';
3642     $ce_fields['date_limite'] = 'hidden';
3643     $ce_fields['evenement_suivant_tacite_incompletude'] = 'selecthiddenstatic';
3644     $ce_fields['evenement_suivant_tacite'] = 'hidden';
3645 softime 6565 } else {
3646     // sinon on cache la date de limite d'incomplétude
3647     $ads_fields['date_limite_incompletude'] = 'hidden';
3648     $ads_fields['evenement_suivant_tacite_incompletude'] = 'hidden';
3649     $ads_fields['evenement_suivant_tacite'] = 'selecthiddenstatic';
3650 softime 7067 //
3651     $dpc_fields['date_limite_incompletude'] = 'hidden';
3652     $dpc_fields['evenement_suivant_tacite_incompletude'] = 'hidden';
3653     $dpc_fields['evenement_suivant_tacite'] = 'selecthiddenstatic';
3654 softime 10573 //
3655     $ce_fields['date_limite_incompletude'] = 'hidden';
3656     $ce_fields['evenement_suivant_tacite_incompletude'] = 'hidden';
3657     $ce_fields['evenement_suivant_tacite'] = 'selecthiddenstatic';
3658 softime 6565 }
3659     if (isset($parameters['option_arrondissement'])
3660     && $parameters['option_arrondissement'] === 'true') {
3661     $all_fields['dossier_arrondissement'] = 'static';
3662     }
3663 softime 10573 //
3664     // Vérifie que le dossier a été déposé électroniquement
3665     if ($this->getVal('depot_electronique') === 't') {
3666     $ce_fields["consultation_entrante"] = 'hidden';
3667     $ce_fields["delai_reponse"] = 'static';
3668     $ce_fields["type_delai"] = 'static';
3669     $ce_fields["objet_consultation"] = 'static';
3670     $ce_fields["date_production_notification"] = 'datestatic';
3671     $ce_fields["date_premiere_consultation"] = 'datestatic';
3672     $ce_fields["date_consultation"] = 'datestatic';
3673     $ce_fields["date_emission"] = 'datestatic';
3674     $ce_fields["service_consultant_id"] = 'static';
3675     $ce_fields["service_consultant_libelle"] = 'static';
3676     $ce_fields["service_consultant_insee"] = 'static';
3677     $ce_fields["service_consultant_mail"] = 'static';
3678     $ce_fields["service_consultant_type"] = 'static';
3679     $ce_fields["service_consultant__siren"] = 'static';
3680     $ce_fields["etat_consultation"] = 'static';
3681     $ce_fields["type_consultation"] = 'static';
3682     $ce_fields["texte_fondement_reglementaire"] = 'static';
3683     $ce_fields["texte_objet_consultation"] = 'static';
3684     $ce_fields["dossier_consultation"] = 'hidden';
3685     }
3686 softime 6565 }
3687 softime 8477 // SUPPRIMER
3688     if($crud === 'delete') {
3689     // Cache tous les champs execepté le libellé du dossier
3690     foreach ($this->champs as $champ) {
3691     $all_fields[$champ] = 'hidden';
3692     }
3693     $all_fields['dossier_libelle'] = 'hiddenstatic';
3694     }
3695 softime 6565
3696 softime 10573 $all_fields['etat_transmission_platau'] = 'hidden';
3697     if ($crud == 'create' || $crud == 'update') {
3698     $required_fields_platau = $this->list_platau_required_fields_dossier;
3699     if ($this->f->is_option_mode_service_consulte_enabled() === false) {
3700     if ($this->f->is_type_dossier_platau($this->getVal('dossier_autorisation')) === true) {
3701     foreach ($required_fields_platau as $required_field_platau) {
3702     $champ = explode('.', $required_field_platau)[1];
3703     if (in_array($champ, $this->champs)) {
3704     $form->setType($champ ,$form->type[$champ].'_demat_color');
3705     }
3706     }
3707     }
3708     }
3709     }
3710    
3711 softime 6565 //
3712     // Typage
3713     //
3714    
3715     switch ($groupe) {
3716     case 'CTX IN':
3717     $this->manage_type($form, $inf_fields);
3718     break;
3719     case 'CTX RE':
3720     $this->manage_type($form, $re_fields);
3721     break;
3722     case 'ADS':
3723     $this->manage_type($form, $ads_fields);
3724     break;
3725 softime 7067 case 'DPC':
3726     $this->manage_type($form, $dpc_fields);
3727     break;
3728 softime 10573 case 'CONSULTATION ENTRANTE':
3729     $this->manage_type($form, $ce_fields);
3730     break;
3731 softime 6565 }
3732     $this->manage_type($form, $all_fields);
3733 mbroquet 3730 }
3734    
3735 softime 6929
3736 softime 6565 /**
3737     * Gestion du typage des champs
3738     *
3739     * @param object $form formulaire instancié
3740     * @param array $fields tableau associatif des champs avec leur widget de formulaire en valeur
3741     * @return void
3742     */
3743     protected function manage_type($form, $fields) {
3744     foreach ($this->champs as $key => $field) {
3745     if (array_key_exists($field, $fields) === true) {
3746     $form->setType($field, $fields[$field]);
3747     }
3748     }
3749     }
3750    
3751    
3752     /**
3753 softime 7067 * Retourne le nombre de parcelles qu'à en commun le dossier passé en
3754     * paramètre avec les dossiers contentieux en cours. Le nombre de parcelles
3755     * est groupé par type de dossier d'autorisation : RE ou IN.
3756 softime 6565 *
3757 softime 7067 * @param string $di identifiant du DI
3758 softime 6565 * @return array
3759     */
3760 softime 7067 function get_nb_parcelles_dossier_ciblees_par_contentieux($di) {
3761 softime 6565 $sql = "
3762     SELECT
3763     dossier_autorisation_type.code, COUNT(*) as nb
3764     FROM " . DB_PREFIXE . "dossier
3765     LEFT JOIN " . DB_PREFIXE . "dossier_parcelle
3766     ON dossier.dossier = dossier_parcelle.dossier
3767     LEFT JOIN " . DB_PREFIXE . "dossier_parcelle as parcelle_ctx
3768     ON dossier_parcelle.libelle = parcelle_ctx.libelle
3769     AND dossier_parcelle.dossier != parcelle_ctx.dossier
3770     LEFT JOIN " . DB_PREFIXE . "dossier as dossier_ctx
3771     ON dossier_ctx.dossier = parcelle_ctx.dossier
3772 softime 7067 INNER JOIN " . DB_PREFIXE . "etat
3773     ON dossier_ctx.etat = etat.etat AND etat.statut != 'cloture'
3774 softime 6565 LEFT JOIN " . DB_PREFIXE . "dossier_autorisation
3775     ON dossier_ctx.dossier_autorisation = dossier_autorisation.dossier_autorisation
3776     LEFT JOIN " . DB_PREFIXE . "dossier_autorisation_type_detaille
3777     ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
3778     = dossier_autorisation.dossier_autorisation_type_detaille
3779     LEFT JOIN " . DB_PREFIXE . "dossier_autorisation_type
3780     ON dossier_autorisation_type_detaille.dossier_autorisation_type
3781     = dossier_autorisation_type.dossier_autorisation_type
3782     WHERE
3783     dossier.dossier = '" . $di . "'
3784     AND (dossier_autorisation_type.code = 'RE'
3785     OR dossier_autorisation_type.code = 'IN')
3786     GROUP BY dossier_autorisation_type.code
3787     ";
3788 softime 7067 $this->addToLog("get_nb_parcelles_dossier_ciblees_par_contentieux : db->query(\"$sql\")", VERBOSE_MODE);
3789 softime 8989 $res = $this->f->db->query($sql);
3790 softime 7067 $this->f->isDatabaseError($res);
3791 softime 6565
3792     $nb_re_inf = array('re' => 0, 'inf' => 0);
3793    
3794     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
3795     if ($row["code"] == "RE"){
3796     $nb_re_inf['re'] += $row["nb"];
3797     }
3798     if ($row["code"] == "IN"){
3799     $nb_re_inf['inf'] += $row["nb"];
3800     }
3801     }
3802    
3803     return $nb_re_inf;
3804     }
3805    
3806 softime 8989 /**
3807     * SETTER_FORM - setVal (setVal).
3808     *
3809     * @return void
3810     */
3811     function setVal(&$form, $maj, $validation, &$dnu1 = null, $dnu2 = null) {
3812     // parent::setVal($form, $maj, $validation);
3813     //
3814 mbroquet 3730 $this->maj=$maj;
3815 softime 10573
3816     if ($this->f->is_option_sig_enabled($this->getVal("om_collectivite")) === true
3817 softime 8989 && $this->f->issetSIGParameter($this->getVal("dossier")) === true) {
3818 softime 10573
3819     // lien vers le SIG
3820     $geoLinksHtml = $this->getGeolocalisationLink();
3821     $form->setVal("geom", $geoLinksHtml);
3822 mbroquet 3730 }
3823 softime 10573 // si l'option 'streetview' est activée ajoute un lien vers Google Maps Street View
3824 softime 10713 if ($this->f->is_option_streetview_enabled($this->getVal("om_collectivite")) === true
3825     && $maj == 3) {
3826     //
3827 softime 10573 $gStreetViewLinkHtml = $this->getGoogleMapsStreetViewLink();
3828     $form->setVal("streetview", $gStreetViewLinkHtml);
3829     }
3830 softime 8989 //
3831 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
3832 softime 10573 if ($affichage_form === "ADS" || $affichage_form === "CONSULTATION ENTRANTE") {
3833 softime 8989 // Dans le cas d'un dépôt électronique un pictogramme apparait devant le demandeur
3834     if ($maj == 1 || $maj == 2 || $maj == 3) {
3835     if ($this->getVal("depot_electronique") === "t"
3836     || $this->getVal("depot_electronique") === true
3837     || $this->getVal("depot_electronique") === 1) {
3838 softime 8329 //
3839 softime 8989 $form->setVal(
3840     "dossier_petitionnaire",
3841     sprintf(
3842     '<span class="om-icon om-icon-16 om-icon-fix depot-electronique-16" title="%s"> </span>%s',
3843     "Dépôt électronique",
3844     $this->getVal("dossier_petitionnaire")
3845     )
3846     );
3847 softime 8329 }
3848     }
3849 softime 6565 if ($maj == 3) {
3850 softime 8989 $nb_re_inf = $this->get_nb_parcelles_dossier_ciblees_par_contentieux($this->getVal("dossier"));
3851 softime 6565 $message = "";
3852 softime 8989 if ($nb_re_inf["re"] > 0) {
3853 softime 6565 $message .= "<span class=\"label label-warning\" ";
3854 nmeucci 7085 $message .= "title=\""._("Au moins un dossier de recours contentieux ou gracieux en cours concerne les références cadastrales du dossier courant.")."\">";
3855 softime 6565 $message .= _("RE");
3856     $message .= "</span>";
3857 softime 8989 if ($nb_re_inf["inf"] > 0) {
3858 softime 6565 $message .= " ";
3859     }
3860     }
3861 softime 8989 if ($nb_re_inf["inf"] > 0) {
3862 softime 6565 $message .= "<span class=\"label label-important\" ";
3863 nmeucci 7085 $message .= "title=\""._("Au moins un dossier d'infraction en cours concerne les références cadastrales du dossier courant.")."\">";
3864 softime 6565 $message .= _("IN");
3865     $message .= "</span>";
3866     }
3867 softime 8989 $form->setVal("enjeu_ctx", $message);
3868 softime 6565 }
3869 softime 8989 } elseif ($affichage_form === "CTX RE") {
3870 softime 6565 // Récupération des demandeurs liés au dossier
3871 softime 8989 $this->listeDemandeur("dossier", $this->getVal("dossier"));
3872 softime 6565 //
3873 softime 8989 $requerants = "";
3874     if ($this->getVal("requerants") != "") {
3875     $requerants = $this->getVal("requerants");
3876     if (isset($this->valIdDemandeur["requerant"]) === true
3877     && count($this->valIdDemandeur["requerant"]) > 0) {
3878     //
3879     $requerants .= " "._("et autres");
3880 softime 6565 }
3881     }
3882 softime 8989 $form->setVal("requerants", $requerants);
3883 softime 6565 //
3884 softime 8989 $dossier_petitionnaires = "";
3885     if ($this->getVal("dossier_petitionnaire") != "") {
3886     $dossier_petitionnaires = $this->getVal("dossier_petitionnaire");
3887 softime 6565 }
3888 softime 8989 if (isset($this->valIdDemandeur["petitionnaire"]) === true
3889     && count($this->valIdDemandeur["petitionnaire"]) > 0) {
3890     //
3891     $dossier_petitionnaires .= " "._("et autres");
3892 softime 6565 }
3893 softime 8989 $form->setVal("dossier_petitionnaires", $dossier_petitionnaires);
3894     } elseif ($affichage_form === "CTX IN") {
3895 softime 6565 // Récupération des demandeurs liés au dossier
3896 softime 8989 $this->listeDemandeur("dossier", $this->getVal("dossier"));
3897 softime 6565 //
3898 softime 8989 $contrevenants = "";
3899     if ($this->getVal("contrevenants") != "") {
3900     $contrevenants = $this->getVal("contrevenants");
3901     if (isset($this->valIdDemandeur["contrevenant"]) === true
3902     && count($this->valIdDemandeur["contrevenant"]) > 0) {
3903     //
3904     $contrevenants .= " "._("et autres");
3905 softime 6565 }
3906     }
3907 softime 8989 $form->setVal("contrevenants", $contrevenants);
3908     } elseif ($affichage_form === "DPC") {
3909 softime 7067 // Récupération des demandeurs liés au dossier
3910 softime 8989 $this->listeDemandeur("dossier", $this->getVal("dossier"));
3911 softime 7067 //
3912 softime 8989 $bailleurs = "";
3913     if ($this->getVal("bailleurs") != "") {
3914     $bailleurs = $this->getVal("bailleurs");
3915     if (isset($this->valIdDemandeur["bailleur"]) === true
3916     && count($this->valIdDemandeur["bailleur"]) > 0) {
3917     //
3918     $bailleurs .= " "._("et autres");
3919 softime 7067 }
3920     }
3921 softime 8989 $form->setVal("bailleurs", $bailleurs);
3922 softime 7067 }
3923 softime 8989 //
3924 softime 6565 if ($validation == 0) {
3925 softime 8989 if ($maj == 0) {
3926     $form->setVal("annee", date("y"));
3927     $form->setVal("date_demande", date("Y-m-d"));
3928     $form->setVal("date_depot", date("Y-m-d"));
3929     $form->setVal("accord_tacite", "Non");
3930     $form->setVal("etat", "initialiser");
3931 softime 10573 $form->setVal("etat_transmission_platau", "non_transmissible");
3932 mbroquet 3730 }
3933     }
3934     }
3935    
3936     /**
3937     * getGeolocalisationLink retourne le code HTML affichant l'icone du globe, ainsi que
3938     * les coordonnées du centroide du dossier, le tout étant un lien vers le SIG.
3939     *
3940     * @return string Lien vers le SIG
3941     */
3942     function getGeolocalisationLink() {
3943     //
3944     $link = "<a id='action-form-localiser'".
3945 softime 7996 " target='_SIG' href='".OM_ROUTE_FORM."&obj=dossier_instruction&action=140&idx=".$this->getVal("dossier")."'>".
3946 mbroquet 3730 "<span class='om-icon om-icon-16 om-icon-fix sig-16' title='Localiser'>Localiser</span> ".
3947     $this->getVal('geom').
3948     " </a>";
3949     return $link;
3950     }
3951    
3952 softime 10573
3953 softime 8989 /**
3954 softime 10573 * converti un geom au format Lat,Lon
3955     *
3956     * @param string $geom Le Geom
3957     * @param string $fromRefId Le référentiel dans lequel le geom est défini
3958     * @param string $toLongLatId Le référentiel dans lequel le geom doit être converti
3959     *
3960     * @return array[2] Long,Lat ou bien false,"message" en cas d'erreur
3961     */
3962     protected function convertGeomToLongLat(string $geom, string $fromRefId = '2154',
3963     string $toLongLatId = '4326') {
3964     $sql = "
3965     SELECT
3966     ST_X(ST_Transform(ST_GeomFromText('$geom', $fromRefId), $toLongLatId)) AS longitude,
3967     ST_Y(ST_Transform(ST_GeomFromText('$geom', $fromRefId), $toLongLatId)) AS latitude
3968     ";
3969     $this->addToLog(__METHOD__."() sql: '$sql'", EXTRA_VERBOSE_MODE);
3970     $res = $this->f->db->query($sql);
3971     if(database::isError($res)) {
3972     $this->addToLog(__METHOD__."() error: ".var_export($res->getMessage(), true), DEBUG_MODE);
3973     return array(false, $res->getMessage());
3974     }
3975     if ($res->numRows() != 1) {
3976     $this->addToLog(__METHOD__."() error: ".var_export($res->numRows(), true), DEBUG_MODE);
3977     return array(false, __("Erreur: Plus d'un enregistrement retourné").
3978     '('.$res->numRows().')');
3979     }
3980     $coord = $res->fetchRow(DB_FETCHMODE_ASSOC);
3981     $this->addToLog(__METHOD__."() coord: ".var_export($coord, true), EXTRA_VERBOSE_MODE);
3982     return array_values($coord);
3983     }
3984    
3985     /**
3986     * getGoogleMapsStreetViewLink retourne le code HTML affichant un lien vers une vue
3987     * Google Maps Street View à partir des coordonnées du geom.
3988     *
3989     * @return string Lien vers Google Maps Street View
3990     */
3991     protected function getGoogleMapsStreetViewLink() {
3992     // Récupération coordonnées du terrain
3993    
3994     // Passage du numéro de dossier comme id pour pouvoir le récupérer dans le
3995     // jscript lors du clic
3996     $html = sprintf(
3997     "<a id='action-form-gstreetview' class='simple-btn' title='%s' onclick='get_adresse_terrain(this.id, \"%s\")'>
3998     <span class='om-icon om-icon-16 om-icon-fix consult-16'></span>%s
3999     </a>",
4000     __("Ouvrir dans Google Maps Street View"),
4001     $this->getVal($this->clePrimaire),
4002     __("Street View")
4003     );
4004     return $html;
4005     }
4006    
4007     /**
4008 softime 8989 * SETTER_FORM - setSelect.
4009     *
4010     * @return void
4011     */
4012     function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
4013 softime 10573 $crud = $this->get_action_crud($this->getParameter("maj"));
4014    
4015 mbroquet 3730 // XXX Commenté pour patcher le problème de montée en charge de la base
4016     // de données en cas de reprise de données d'un gros volume de dossier
4017     // d'instruction
4018 softime 8989 // parent::setSelect($form, $maj);
4019 mbroquet 3730 // om_collectivite
4020 softime 8989 $this->init_select(
4021     $form,
4022     $this->f->db,
4023     $maj,
4024     null,
4025     "om_collectivite",
4026     $this->get_var_sql_forminc__sql("om_collectivite"),
4027     $this->get_var_sql_forminc__sql("om_collectivite_by_id"),
4028     false
4029     );
4030 mbroquet 3730
4031     /*
4032     * Pour chaque init_select d'un select non modifiable on teste
4033     * si l'on est en mode modifier : si c'est le cas alors on initialise le
4034     * select en mode consulter (qui n'affiche rien s'il n'y a aucune valeur).
4035     */
4036    
4037     $collectivite_idx = $this->getVal("om_collectivite");
4038 softime 6565 $affichage_form_dat = "";
4039 mbroquet 3730 // Si recherche avancée om_collectivite = collectivité utilisateur
4040 softime 8989 if ($maj == 999) {
4041 mbroquet 3730 $collectivite_idx = $this->f->getParameter("om_collectivite_idx");
4042 softime 6565 } else {
4043     $affichage_form_dat = $this->get_type_affichage_formulaire();
4044 mbroquet 3730 }
4045 softime 6565 // Définition de la qualité et de la traduction de l'instructeur
4046     switch ($affichage_form_dat) {
4047 softime 7067 case 'DPC':
4048 softime 6565 case 'ADS':
4049 softime 10573 case 'CONSULTATION ENTRANTE':
4050 softime 6565 $affichage_instr = "AND instructeur_qualite.code = 'instr'";
4051     $lib_instructeur = _("l'instructeur");
4052     break;
4053     case 'CTX RE':
4054     case 'CTX IN':
4055     $affichage_instr = "AND instructeur_qualite.code = 'juri'";
4056     $lib_instructeur = _('le juriste');
4057     break;
4058     default:
4059     $affichage_instr = "";
4060     $lib_instructeur = _("l'instructeur");
4061     break;
4062     }
4063 mbroquet 3730
4064     // instructeur
4065     // on recupère les services des multicollectivités et de celle du DI
4066 softime 8989 if ($this->f->getParameter('option_afficher_division')==='true') {
4067 mbroquet 3730 // instructeur
4068 softime 8989 $sql_instructeur_div_by_di = str_replace(
4069     '<collectivite_di>',
4070     $collectivite_idx,
4071     $this->get_var_sql_forminc__sql("instructeur_div_by_di")
4072     );
4073     $sql_instructeur_div_by_di = str_replace(
4074     '<instructeur_qualite>',
4075     $affichage_instr,
4076     $sql_instructeur_div_by_di
4077     );
4078     $this->init_select(
4079     $form,
4080     $this->f->db,
4081     $maj,
4082     null,
4083     "instructeur",
4084     $sql_instructeur_div_by_di,
4085     $this->get_var_sql_forminc__sql("instructeur_div_by_id"),
4086     true,
4087     false,
4088     $lib_instructeur
4089     );
4090     // instructeur_2
4091     $sql_instructeur_2_div_by_di = str_replace(
4092     '<collectivite_di>',
4093     $collectivite_idx,
4094     $this->get_var_sql_forminc__sql("instructeur_2_div_by_di")
4095     );
4096     $this->init_select(
4097     $form,
4098     $this->f->db,
4099     $maj,
4100     null,
4101     "instructeur_2",
4102     $sql_instructeur_2_div_by_di,
4103     $this->get_var_sql_forminc__sql("instructeur_2_div_by_id"),
4104     true,
4105     false,
4106     _('le technicien')
4107     );
4108 mbroquet 3730 } else {
4109 softime 8989 $sql_instructeur_by_di = str_replace(
4110     '<collectivite_di>',
4111     $collectivite_idx,
4112     $this->get_var_sql_forminc__sql("instructeur_by_di")
4113     );
4114     $sql_instructeur_by_di = str_replace(
4115     '<instructeur_qualite>',
4116     $affichage_instr,
4117     $sql_instructeur_by_di
4118     );
4119     $this->init_select(
4120     $form,
4121     $this->f->db,
4122     $maj,
4123     null,
4124     "instructeur",
4125     $sql_instructeur_by_di,
4126     $this->get_var_sql_forminc__sql("instructeur_by_id"),
4127     true,
4128     false,
4129     $lib_instructeur
4130     );
4131     $sql_instructeur_2_by_di = str_replace(
4132     '<collectivite_di>',
4133     $collectivite_idx,
4134     $this->get_var_sql_forminc__sql("instructeur_2_by_di")
4135     );
4136     $this->init_select(
4137     $form,
4138     $this->f->db,
4139     $maj,
4140     null,
4141     "instructeur_2",
4142     $sql_instructeur_2_by_di,
4143     $this->get_var_sql_forminc__sql("instructeur_2_by_id"),
4144     true,
4145     false,
4146     _('le technicien')
4147     );
4148 mbroquet 3730 }
4149 softime 6565
4150 mbroquet 3730 // etat
4151     if ($maj == 1) {
4152 softime 8989 $this->init_select(
4153     $form,
4154     $this->f->db,
4155     3,
4156     null,
4157     "etat",
4158     $this->get_var_sql_forminc__sql("etat"),
4159     $this->get_var_sql_forminc__sql("etat_by_id"),
4160     false
4161     );
4162 mbroquet 3730 } else {
4163 softime 8989 $this->init_select(
4164     $form,
4165     $this->f->db,
4166     $maj,
4167     null,
4168     "etat",
4169     $this->get_var_sql_forminc__sql("etat"),
4170     $this->get_var_sql_forminc__sql("etat_by_id"),
4171     false
4172     );
4173 mbroquet 3730 }
4174    
4175     // dossier_instruction_type
4176 softime 8989 $this->init_select(
4177     $form,
4178     $this->f->db,
4179     $maj,
4180     null,
4181     "dossier_instruction_type",
4182     $this->get_var_sql_forminc__sql("dossier_instruction_type"),
4183     $this->get_var_sql_forminc__sql("dossier_instruction_type_by_id"),
4184     false
4185     );
4186 mbroquet 3730
4187     // division
4188 softime 8989 $sql_division_by_di = str_replace(
4189     '<collectivite_di>',
4190     $collectivite_idx,
4191     $this->get_var_sql_forminc__sql("division_by_di")
4192     );
4193     $this->init_select(
4194     $form,
4195     $this->f->db,
4196     $maj,
4197     null,
4198     "division",
4199     $sql_division_by_di,
4200     $this->get_var_sql_forminc__sql("division_by_id"),
4201     true
4202     );
4203 mbroquet 3730
4204     // autorite_competente
4205 softime 8989 $this->init_select(
4206     $form,
4207     $this->f->db,
4208     $maj,
4209     null,
4210     "autorite_competente",
4211     $this->get_var_sql_forminc__sql("autorite_competente"),
4212     $this->get_var_sql_forminc__sql("autorite_competente_by_id"),
4213     false
4214     );
4215 mbroquet 3730
4216     // avis_decision
4217     if ($maj == 1) {
4218 softime 8989 $this->init_select(
4219     $form,
4220     $this->f->db,
4221     3,
4222     null,
4223     "avis_decision",
4224     $this->get_var_sql_forminc__sql("avis_decision"),
4225     $this->get_var_sql_forminc__sql("avis_decision_by_id"),
4226     false
4227     );
4228 mbroquet 3730 } else {
4229 softime 8989 $this->init_select(
4230     $form,
4231     $this->f->db,
4232     $maj,
4233     null,
4234     "avis_decision",
4235     $this->get_var_sql_forminc__sql("avis_decision"),
4236     $this->get_var_sql_forminc__sql("avis_decision_by_id"),
4237     false
4238     );
4239 mbroquet 3730 }
4240 softime 7366
4241 softime 6565 // autorisation_contestee
4242 softime 7366 if ($affichage_form_dat === 'CTX RE'
4243     && ($maj == 1 || $maj == 3)) {
4244     // À exécuter seulement en mode modifier ou consulter des recours
4245     // pour éviter le ralentissement de l'affichage des listings des DI
4246 softime 8989 $this->init_select(
4247     $form,
4248     $this->f->db,
4249     $maj,
4250     null,
4251     "autorisation_contestee",
4252     $this->get_var_sql_forminc__sql("autorisation_contestee"),
4253     $this->get_var_sql_forminc__sql("autorisation_contestee_by_id"),
4254     false
4255     );
4256 softime 6565 }
4257 mbroquet 3730
4258     // evenement_suivant_tacite
4259 softime 8989 $this->init_select(
4260     $form,
4261     $this->f->db,
4262     $maj,
4263     null,
4264     "evenement_suivant_tacite",
4265     $this->get_var_sql_forminc__sql("evenement_suivant_tacite"),
4266     $this->get_var_sql_forminc__sql("evenement_suivant_tacite_by_id"),
4267     false
4268     );
4269 mbroquet 3730
4270     // evenement_suivant_tacite_incompletude
4271 softime 8989 $this->init_select(
4272     $form,
4273     $this->f->db,
4274     $maj,
4275     null,
4276     "evenement_suivant_tacite_incompletude",
4277     $this->get_var_sql_forminc__sql("evenement_suivant_tacite_incompletude"),
4278     $this->get_var_sql_forminc__sql("evenement_suivant_tacite_incompletude_by_id"),
4279     false
4280     );
4281 mbroquet 3730
4282     // Ajout, modification et recherche avancée
4283 softime 8989 if ($maj == 0 || $maj == 1 || $maj == 999) {
4284 mbroquet 3730 // accord tacite
4285     $contenu=array();
4286     $contenu[0]=array('Non','Oui');
4287     $contenu[1]=array('Non','Oui');
4288 softime 8989 $form->setSelect("accord_tacite", $contenu);
4289 mbroquet 3730 // geom *** a voir
4290 softime 8989 if ($maj == 1) { //modification
4291 mbroquet 3730 $contenu=array();
4292 softime 8989 $contenu[0]=array("dossier", $this->getParameter("idx"));
4293     $form->setSelect('geom', $contenu);
4294 mbroquet 3730 }
4295 softime 6565 // arrondissement recherche avancée
4296 softime 8989 $this->init_select(
4297     $form,
4298     $this->f->db,
4299     $maj,
4300     null,
4301     "arrondissement",
4302     $this->get_var_sql_forminc__sql("arrondissement"),
4303     $this->get_var_sql_forminc__sql("arrondissement_by_id"),
4304     false
4305     );
4306 softime 6565 // dossier_autorisation_type_detaille recherche avancée
4307 softime 8989 $this->init_select(
4308     $form,
4309     $this->f->db,
4310     $maj,
4311     null,
4312     "dossier_autorisation_type_detaille",
4313     $this->get_var_sql_forminc__sql("dossier_autorisation_type_detaille"),
4314     $this->get_var_sql_forminc__sql("dossier_autorisation_type_detaille_by_id"),
4315     false
4316     );
4317 mbroquet 3730 }
4318    
4319     // Ce formulaire n'est pas accessible en ajout ni en recherche avancée
4320     // mais dans le cas où il le serait, rien ne doit être fait concernant
4321 softime 6929 // les taxes
4322 mbroquet 3730 if ($maj != 0 && $maj != 999) {
4323 softime 10573 // Choix du secteur pour part communale
4324     $contenu = array();
4325     $contenu[0][0] = "";
4326     $contenu[1][0] = __('choisir')."&nbsp;".__("le")."&nbsp;".__("tax_secteur");
4327     if ($crud === 'read') {
4328     $contenu[1][0] = "";
4329     }
4330 softime 6929 // Instance du parmétrage des taxes
4331 mbroquet 3730 $inst_taxe_amenagement = $this->get_inst_taxe_amenagement();
4332     // Si la colletivité à un paramétrage pour la taxe d'aménagement
4333 softime 6929 if ($inst_taxe_amenagement !== null) {
4334 mbroquet 3730 // Il y a 20 secteurs maximum dans une commune de France
4335     for ($i=1; $i < 21; $i++) {
4336     // Valeur du secteur
4337     $value = $inst_taxe_amenagement->getVal('tx_comm_secteur_'.$i);
4338     //
4339 softime 6929 if ($value !== null && $value !== '') {
4340 mbroquet 3730 //
4341     $contenu[0][$i] = $i;
4342 softime 10573 $contenu[1][$i] = sprintf(__('Secteur %s'), $i);
4343 mbroquet 3730 }
4344     }
4345     }
4346 softime 10573 //
4347     $form->setSelect("tax_secteur", $contenu);
4348 mbroquet 3730 }
4349 softime 10573 // commune
4350     $this->init_select(
4351     $form,
4352     $this->f->db,
4353     $maj,
4354     null,
4355     "commune",
4356     $this->get_var_sql_forminc__sql("commune"),
4357     $this->get_var_sql_forminc__sql("commune_by_id"),
4358     false
4359     );
4360     // pec_metier
4361     $this->init_select(
4362     $form,
4363     $this->f->db,
4364     $maj,
4365     null,
4366     "pec_metier",
4367     $this->get_var_sql_forminc__sql("pec_metier"),
4368     $this->get_var_sql_forminc__sql("pec_metier_by_id"),
4369     false
4370     );
4371 mbroquet 3730 }
4372    
4373 softime 8989 /**
4374     * SETTER_FORM - setLib.
4375     *
4376     * @return void
4377     */
4378     function setLib(&$form, $maj) {
4379     parent::setLib($form, $maj);
4380     //
4381 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
4382     if ($affichage_form === 'ADS') {
4383     $form->setLib('date_decision', _("date de la decision"));
4384     $form->setLib('date_limite', _("limite d'instruction"));
4385     }
4386     if ($affichage_form === 'CTX IN') {
4387     $form->setLib('avis_decision', _("Décision"));
4388     $form->setLib('date_cloture_instruction', _("Date de clôture d'instruction"));
4389     $form->setLib('date_decision', _("Date de décision"));
4390     $form->setLib('date_depot', _("Date de réception"));
4391     $form->setLib('date_limite', _("Tacicité"));
4392     $form->setLib('instructeur',_('Juriste'));
4393     }
4394     if ($affichage_form === 'CTX RE') {
4395     $form->setLib('autorisation_contestee', _("Autorisation contestée"));
4396     $form->setLib('avis_decision', _("Décision"));
4397     $form->setLib('date_cloture_instruction', _("Date de clôture d'instruction"));
4398     $form->setLib('date_decision', _("Date de décision"));
4399     $form->setLib('date_depot', _("Date de recours"));
4400     $form->setLib('date_limite', _("Tacicité"));
4401     $form->setLib('instructeur',_('Juriste'));
4402     }
4403 softime 7067 if ($affichage_form === 'DPC') {
4404     //
4405     }
4406 softime 10573 if ($affichage_form === 'CONSULTATION ENTRANTE') {
4407     $form->setLib('date_decision', _("date de la decision"));
4408     $form->setLib('date_limite', _("limite d'instruction"));
4409     //
4410     $form->setLib('delai_reponse', __('Délai de réponse'));
4411     $form->setLib('date_consultation', __('Date de la consultation'));
4412     $form->setLib('date_emission', __("Date d'émission"));
4413     $form->setLib('etat_consultation', __('État de la consultation'));
4414     $form->setLib('type_consultation', __('Type de la consultation'));
4415     $form->setLib('texte_fondement_reglementaire', __('Article(s) réglementaire sur le(s)quel(s) se fonde la consultation'));
4416     $form->setLib('texte_objet_consultation', __("Texte de l'objet de la consultation"));
4417     $form->setLib('service_consultant_id', __('Service consultant : identifiant'));
4418     $form->setLib('service_consultant_libelle', __('Service consultant : libellé'));
4419     $form->setLib('service_consultant_insee', __('Service consultant : INSEE'));
4420     $form->setLib('service_consultant_mail', __('Service consultant : mail'));
4421     $form->setLib('service_consultant_type', __('Service consultant : type'));
4422     $form->setLib('service_consultant__siren', __('Service consultant : SIREN'));
4423    
4424     $form->setLib('type_delai', __('Type de délai'));
4425     $form->setLib('objet_consultation', __('Objet de la consultation'));
4426     $form->setLib('date_production_notification', __('Date de production de la notification'));
4427     $form->setLib('date_premiere_consultation', __('Date de la première consultation'));
4428     }
4429 softime 6565 $form->setLib('accord_tacite',_("decision tacite"));
4430     $form->setLib('autorite_competente',_('competence'));
4431     $form->setLib('cle_acces_citoyen', _("cle_acces_citoyen"));
4432     $form->setLib('date_ait', _("Date d'AIT"));
4433     $form->setLib('date_audience', _("Date d'audience"));
4434     $form->setLib('date_complet', _("completude"));
4435     $form->setLib('date_contradictoire', _("Date de contradictoire"));
4436     $form->setLib('date_dernier_depot', _("dernier depot"));
4437     $form->setLib('date_derniere_visite', _("Date de dernière visite"));
4438     $form->setLib('date_limite_incompletude', _("limite d'instruction"));
4439     $form->setLib('date_premiere_visite', _("Date de 1ère visite"));
4440     $form->setLib('date_transmission_parquet', _('Date de transmission au Parquet'));
4441     $form->setLib('date_validite', _("fin de validite le"));
4442     $form->setLib('delai', _("delai (mois)"));
4443     $form->setLib('delai',_("delai d'instruction"));
4444     $form->setLib('description_projet',_('description du projet'));
4445     $form->setLib('dossier_arrondissement', _("Arrondissement"));
4446 mbroquet 3730 $form->setLib('dossier_autorisation_libelle',_('dossier_autorisation_libelle'));
4447 softime 6565 $form->setLib('dossier_autorisation_type_detaille', _("Type"));
4448     $form->setLib('contrevenants', _("Contrevenant(s)"));
4449 mbroquet 3730 $form->setLib('dossier_instruction_type',_('type de dossier'));
4450 softime 6565 $form->setLib('dossier_petitionnaire',_('demandeur'));
4451     $form->setLib('dossier_petitionnaires', _("Pétitionnaire(s)"));
4452     $form->setLib('requerants', _("Requérant(s)"));
4453     $form->setLib('dt_ctx_infraction', _("Infraction"));
4454     $form->setLib('dt_ctx_regularisable', _("Régularisable"));
4455     $form->setLib('dt_ctx_synthese_anr', _("Synthèse des ANR"));
4456     $form->setLib('dt_ctx_synthese_nti', _("Synthèse des NTI"));
4457 softime 8477 $form->setLib('ctx_reference_dsj', _("ctx_reference_dsj"));
4458     $form->setLib('ctx_reference_sagace', _("ctx_reference_sagace"));
4459 softime 6565 $form->setLib('enjeu_ctx', _("contentieux"));
4460     $form->setLib('enjeu_erp', _("ERP"));
4461     $form->setLib('enjeu_urba', _("urbanisme"));
4462     $form->setLib('erp', _("ERP"));
4463 mbroquet 3730 $form->setLib('geom',_('geolocalisaion'));
4464 softime 6565 $form->setLib('instructeur_2', _('Technicien'));
4465 mbroquet 3730 $form->setLib('numero_versement_archive', _("numero"));
4466 softime 7067 $form->setLib('bailleur', _("Bailleur(s)"));
4467     $form->setLib('terrain', _("Localisation"));
4468 softime 6565 }
4469 mbroquet 3730
4470     function setOnchange(&$form,$maj){
4471     parent::setOnchange($form,$maj);
4472     // mise en majuscule
4473     $form->setOnchange("demandeur_nom","this.value=this.value.toUpperCase()");
4474     $form->setOnchange("demandeur_societe","this.value=this.value.toUpperCase()");
4475     $form->setOnchange("delegataire_nom","this.value=this.value.toUpperCase()");
4476     $form->setOnchange("delegataire_societe","this.value=this.value.toUpperCase()");
4477     $form->setOnchange("architecte_nom","this.value=this.value.toUpperCase()");
4478     $form->setOnchange("terrain_adresse","this.value=this.value.toUpperCase()");
4479     $form->setOnchange('terrain_surface','VerifNumdec(this)');
4480     $form->setOnchange('tax_mtn_part_commu', 'VerifFloat(this, 0)');
4481     $form->setOnchange('tax_mtn_part_depart', 'VerifFloat(this, 0)');
4482     $form->setOnchange('tax_mtn_part_reg', 'VerifFloat(this, 0)');
4483     $form->setOnchange('tax_mtn_total', 'VerifFloat(this, 0)');
4484 softime 6929 $form->setOnchange('tax_mtn_rap', 'VerifFloat(this, 0)');
4485     $form->setOnchange('tax_mtn_part_commu_sans_exo', 'VerifFloat(this, 0)');
4486     $form->setOnchange('tax_mtn_part_depart_sans_exo', 'VerifFloat(this, 0)');
4487     $form->setOnchange('tax_mtn_part_reg_sans_exo', 'VerifFloat(this, 0)');
4488     $form->setOnchange('tax_mtn_total_sans_exo', 'VerifFloat(this, 0)');
4489     $form->setOnchange('tax_mtn_rap_sans_exo', 'VerifFloat(this, 0)');
4490 mbroquet 3730 }
4491    
4492     function setLayout(&$form, $maj) {
4493    
4494 softime 8477 // Récupère le CRUD
4495     $crud = $this->get_action_crud($this->getParameter("maj"));
4496    
4497     // Il n'y a pas d'affichage spécifique dans le cas d'une suppression
4498     if ($crud === 'delete') {
4499     return;
4500     }
4501    
4502 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
4503 softime 10573 if ($affichage_form === 'ADS' || $affichage_form === 'DPC' || $affichage_form === 'CONSULTATION ENTRANTE') {
4504     // Le contrôle de données est seulement possible si on est pas en mode service consulté.
4505     // et si le champ dossier_platau du dossier d'autorisation type detaillé est à true
4506     if ($this->f->is_option_mode_service_consulte_enabled() === false
4507     && $this->f->is_type_dossier_platau($this->getVal('dossier_autorisation')) === true) {
4508     $required_fields_platau = $this->check_platau_required_fields($this->getVal('dossier'));
4509    
4510     if (isset($required_fields_platau['is_ok']) && $required_fields_platau['is_ok'] === false) {
4511     $class = 'demat-color demat-color-text';
4512     $message = __("La transmission à Plat'AU n'est pas possible car certains champs requis ne sont pas saisis.");
4513     if ($this->getVal('etat_transmission_platau') == "transmis_mais_non_transmissible") {
4514     $message = __("La transmission des modifications à Plat'AU n'est pas possible car certains champs requis ne sont pas saisis.");
4515     }
4516     $this->f->display_panel_information($class, $message, $required_fields_platau['required_fields_empty'], __('Champs requis'), 'demat-color');
4517     }
4518     }
4519 softime 6565 // En-tête
4520     $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
4521 mbroquet 3730
4522 softime 6565 // Col1 : Fieldset "Dossier d'Instruction"
4523     $form->setBloc('om_collectivite', 'D', '', 'col_9');
4524 mbroquet 3730
4525 softime 6565 $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
4526 softime 10573 $form->setFieldset('tax_secteur', 'F');
4527 softime 6565
4528 mbroquet 3730
4529 softime 10573 $form->setBloc('tax_secteur', 'F');
4530 softime 6565
4531     // Col2 : 3 fieldsets
4532     $form->setBloc('enjeu_urba', 'D', '', 'col_3');
4533 mbroquet 3730
4534 softime 6565 // Fieldset "Enjeu"
4535     $form->setFieldset('enjeu_urba', 'D', _("Enjeu"));
4536     $form->setFieldset('enjeu_ctx', 'F');
4537     // Fieldset "Qualification"
4538     $form->setFieldset('erp', 'D', _("Qualification"));
4539 softime 10573 $form->setFieldset('pec_metier', 'F');
4540 softime 6565 // Fieldset "Archive"
4541     $form->setFieldset('numero_versement_archive', 'D', _("Archive"));
4542     $form->setFieldset('date_demande', 'F');
4543    
4544     $form->setBloc('date_demande', 'F');
4545 mbroquet 3730 $form->setBloc('date_demande', 'F');
4546    
4547 softime 6565 // Fieldset "Instruction"
4548     $form->setBloc('date_depot', 'D', '', 'col_12');
4549     $form->setFieldset('date_depot', 'D', _('Instruction'), 'col_12');
4550 mbroquet 3730
4551 softime 6565 // Fieldset "Suivi"
4552     $form->setBloc('date_depot', 'D', '', 'col_12');
4553    
4554     $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
4555     // Col 1
4556     $form->setBloc('date_depot', 'D', '', 'col_6');
4557     $form->setBloc('date_depot', 'D');
4558     $form->setBloc('date_dernier_depot', 'F');
4559     $form->setBloc('date_limite', 'D', '', 'interligne');
4560     $form->setBloc('date_limite_incompletude', 'F');
4561 mbroquet 3730 $form->setBloc('date_limite_incompletude', 'F');
4562 softime 6565 // Col 2
4563     $form->setBloc('etat', 'D', '', 'col_6');
4564     $form->setBloc('etat', 'D');
4565     $form->setBloc('etat', 'F');
4566     $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
4567     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
4568 mbroquet 3730 $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
4569 softime 6565 $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
4570    
4571     $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
4572 mbroquet 3730
4573 softime 6565 // Bloc 2 fieldsets
4574     $form->setBloc('date_decision', 'D', '', 'col_12');
4575 mbroquet 3730
4576 softime 6565 // Col 1 Fieldset "Décision"
4577     $form->setFieldset('date_decision', 'D', _('Decision'), 'col_6');
4578     $form->setFieldset('avis_decision','F','');
4579     // Col 2 Fieldset "Validité de l'autorisation"
4580     $form->setFieldset('date_validite', 'D', _("Validite de l'autorisation"), 'col_6');
4581     $form->setFieldset('date_validite','F','');
4582 mbroquet 3730
4583 softime 6565 $form->setBloc('date_validite', 'F'); // Fin bloc 2 fieldsets
4584 mbroquet 3730
4585 softime 6565 $form->setFieldset('date_conformite','F','');
4586     $form->setBloc('date_conformite', 'F'); // Fin Instruction
4587 mbroquet 3730
4588 softime 6929 // Fieldset "Simulation des taxes"
4589 softime 10573 $form->setBloc('tax_mtn_part_commu', 'D', '', 'col_12');
4590     $form->setFieldset('tax_mtn_part_commu', 'D', _("Simulation des taxes"), 'startClosed');
4591 softime 6929 //
4592 softime 10573 $form->setBloc('tax_mtn_part_commu', 'D', '', 'col_12');
4593     $form->setFieldset('tax_mtn_part_commu', 'D', _("Taxe d'aménagement"), 'collapsible');
4594 softime 6929 $form->setFieldset('tax_mtn_total_sans_exo', 'F', '');
4595     $form->setBloc('tax_mtn_total_sans_exo', 'F');
4596     //
4597     $form->setBloc('tax_mtn_rap', 'D', '', 'col_12');
4598     $form->setFieldset('tax_mtn_rap', 'D', _("Redevance d'archéologie préventive"), 'collapsible');
4599     $form->setFieldset('tax_mtn_rap_sans_exo', 'F', '');
4600     $form->setBloc('tax_mtn_rap_sans_exo', 'F');
4601     //
4602     $form->setFieldset('tax_mtn_rap_sans_exo', 'F', '');
4603     $form->setBloc('tax_mtn_rap_sans_exo', 'F');
4604 mbroquet 3730
4605 softime 7067 // Fieldset "Localisation"
4606 softime 6565 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
4607 mbroquet 3730
4608 softime 7067 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
4609 softime 6565 // Col 1
4610     $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
4611     $form->setBloc('terrain_references_cadastrales', 'F');
4612     // Col 2
4613     $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
4614     $form->setBloc('terrain_superficie', 'F');
4615 mbroquet 3730
4616 softime 6565 $form->setFieldset('terrain_superficie', 'F', '');
4617 mbroquet 3730
4618 softime 6565 $form->setBloc('terrain_superficie', 'F');
4619     }
4620 softime 10573 // CONSULTATION ENTRANTE
4621     // Vérifie que le dossier a été déposé électroniquement
4622     if ($affichage_form === 'CONSULTATION ENTRANTE' && $this->getVal('depot_electronique') === 't') {
4623     // Fieldset "Consultation"
4624     $form->setBloc('consultation_entrante', 'D', '', 'col_12');
4625     $form->setFieldset('consultation_entrante', 'D', __('Consultation'), '');
4626     $form->setBloc('consultation_entrante', 'D', "", "col_6");
4627     $form->setBloc('type_consultation', 'F');
4628     $form->setBloc('texte_fondement_reglementaire', 'D', "", "col_6");
4629     $form->setBloc('dossier_consultation', 'F');
4630     $form->setFieldset('dossier_consultation', 'F', '');
4631     $form->setBloc('dossier_consultation', 'F');
4632     }
4633 softime 6565 // RECOURS
4634     if ($affichage_form === 'CTX RE') {
4635     // Fieldset "Dossier d'Instruction"
4636     $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
4637     $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
4638     $form->setFieldset('date_demande', 'F');
4639     $form->setBloc('date_demande', 'F');
4640 mbroquet 3730
4641 softime 6565 // Fieldset "Instruction"
4642     $form->setBloc('date_depot', 'D', '', 'col_12');
4643     $form->setFieldset('date_depot', 'D', _('Instruction'), 'col_12');
4644 mbroquet 3730
4645 softime 6565 // Fieldset "Suivi"
4646     $form->setBloc('date_depot', 'D', '', 'col_12');
4647    
4648     $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
4649 mbroquet 3730 // Col 1
4650 softime 6565 $form->setBloc('date_depot', 'D', '', 'col_6');
4651     // $form->setBloc('date_depot', 'D');
4652     // $form->setBloc('date_dernier_depot', 'F');
4653     // $form->setBloc('date_limite', 'D', '');
4654     // $form->setBloc('date_limite_incompletude', 'F');
4655     $form->setBloc('date_cloture_instruction', 'F');
4656 mbroquet 3730 // Col 2
4657 softime 6565 $form->setBloc('etat', 'D', '', 'col_6');
4658     $form->setBloc('etat', 'D');
4659     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
4660     // $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
4661     // $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
4662     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
4663     $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
4664    
4665     $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
4666 mbroquet 3730
4667 softime 6565 // Bloc 2 fieldsets
4668     $form->setBloc('date_decision', 'D', '', 'col_12');
4669 mbroquet 3730
4670 softime 6565 // Col 1 Fieldset "Décision"
4671     $form->setFieldset('date_decision', 'D', _('Decision'), 'col_12');
4672     $form->setFieldset('avis_decision','F','');
4673     // Col 2 Fieldset "Validité de l'autorisation"
4674    
4675     $form->setBloc('date_validite', 'F'); // Fin bloc 2 fieldsets
4676    
4677     $form->setFieldset('date_conformite','F','');
4678     $form->setBloc('date_conformite', 'F'); // Fin Instruction
4679    
4680 softime 7067 // Fieldset "Localisation"
4681 softime 6565 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
4682    
4683 softime 7067 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
4684 softime 6565 // Col 1
4685     $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
4686     $form->setBloc('terrain_references_cadastrales', 'F');
4687     // Col 2
4688     $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
4689     $form->setBloc('terrain_superficie', 'F');
4690    
4691     $form->setFieldset('terrain_superficie', 'F', '');
4692    
4693     $form->setBloc('terrain_superficie', 'F');
4694     }
4695    
4696     // INFRACTION
4697     if ($affichage_form === 'CTX IN') {
4698    
4699     // Fieldset "Dossier d'Instruction"
4700     $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
4701     $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
4702     $form->setFieldset('date_demande', 'F');
4703     $form->setBloc('date_demande', 'F');
4704    
4705     // Fieldset "Instruction"
4706     $form->setBloc('date_depot', 'D', '', 'col_12');
4707     $form->setFieldset('date_depot', 'D', _('Instruction'), 'col_12');
4708     // Fieldset "Suivi"
4709     $form->setBloc('date_depot', 'D', '', 'col_12');
4710     $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
4711     // Col 1
4712     $form->setBloc('date_depot', 'D', '', 'col_6');
4713     $form->setBloc('date_depot', 'D');
4714     $form->setBloc('date_dernier_depot', 'F');
4715     $form->setBloc('date_limite', 'D', '', 'interligne');
4716     $form->setBloc('date_limite_incompletude', 'F');
4717     $form->setBloc('date_limite_incompletude', 'F');
4718     // Col 2
4719     $form->setBloc('etat', 'D', '', 'col_6');
4720     $form->setBloc('etat', 'D');
4721     $form->setBloc('etat', 'F');
4722     $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
4723     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
4724     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
4725     $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
4726     $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
4727     // Fieldset "Décision"
4728     $form->setFieldset('date_decision', 'D', _('Decision'), 'col_12');
4729     $form->setFieldset('date_conformite','F',''); // Fin Décision
4730     $form->setFieldset('date_conformite','F','');
4731     $form->setBloc('date_conformite', 'F'); // Fin Instruction
4732    
4733 softime 7067 // Fieldset "Localisation"
4734 softime 6565 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
4735 softime 7067 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
4736 softime 6565 // Col 1
4737     $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
4738     $form->setBloc('terrain_references_cadastrales', 'F');
4739     // Col 2
4740     $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
4741     $form->setBloc('terrain_superficie', 'F');
4742     $form->setFieldset('terrain_superficie', 'F', '');
4743     $form->setBloc('terrain_superficie', 'F');
4744    
4745     // Fieldset "Demandeurs"
4746     // → cf. formSpecificContent()
4747     }
4748 mbroquet 3730 }
4749    
4750     /**
4751     * Permet de retourner si le dossier est incomplet notifié
4752     *
4753     * @return boolean true si incomplet notifié
4754     */
4755     function is_incomplet_notifie() {
4756     // Si le dossier est défini en tant qu'incomplet notifie
4757     if($this->getVal('incomplet_notifie') == 't' AND
4758     $this->getVal('incompletude') == 't') {
4759     return true;
4760     }
4761     return false;
4762     }
4763    
4764 softime 6929
4765 fmichon 4708 /**
4766 softime 7366 * Vérifie que le dossier d'instruction en cours ne soit pas instruit.
4767     * Ne sont pas compté comme instruit les dossiers n'ayant que des événements
4768     * d'instruction de type 'affichage'.
4769 softime 6929 *
4770     * @return boolean
4771     */
4772 softime 7366 function has_only_recepisse() {
4773 softime 6929
4774 softime 7366 // Récupère la liste des instructions du dossier
4775 softime 6929 $list_instructions = $this->get_list_instructions(true);
4776    
4777 softime 7366 // Si le dossier a pour seule instruction le récépissé de la demande
4778     if (count($list_instructions) === 1
4779     && $list_instructions[0] === $this->get_demande_instruction_recepisse()) {
4780 softime 6929 //
4781 softime 7366 return true;
4782 softime 6929 }
4783    
4784     //
4785 softime 7366 return false;
4786 softime 6929 }
4787    
4788    
4789     /**
4790 fmichon 4708 * TRIGGER - triggerajouterapres.
4791     *
4792     * - Interface avec le référentiel ERP [108]
4793     * - Gestion des données techniques liées
4794     * - Mise à jour du DA
4795     * - Gestion des références cadastrales / parcelles liées
4796     *
4797     * @return boolean
4798     */
4799 softime 8989 function triggerajouterapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
4800     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
4801 mbroquet 3730
4802 fmichon 4708 /**
4803     * Interface avec le référentiel ERP.
4804     *
4805     * (WS->ERP)[108] Dépôt de dossier DAT -> AT
4806     * Déclencheur :
4807     * - L'option ERP est activée
4808     * - Validation du formulaire d'ajout d'une demande de nouveau dossier
4809     * de type AT
4810     */
4811     //
4812 softime 8989 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
4813 fmichon 4708 && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__at')) {
4814     //
4815     $infos = array(
4816     "dossier_instruction" => $this->valF['dossier'],
4817     );
4818     //
4819     $ret = $this->f->send_message_to_referentiel_erp(108, $infos);
4820     if ($ret !== true) {
4821     $this->cleanMessage();
4822     $this->addToMessage(_("Une erreur s'est produite lors de la notification (108) du référentiel ERP. Contactez votre administrateur."));
4823     return false;
4824 mbroquet 3730 }
4825 fmichon 4708 $this->addToMessage(_("Notification (108) du référentiel ERP OK."));
4826     }
4827    
4828     /**
4829     * Gestion des données techniques liées.
4830     */
4831     // On ajoute les données techniques
4832 softime 8989 if ($this->ajoutDonneesTechniquesDI($id, $val) === false) {
4833 mbroquet 3730 //
4834 fmichon 4708 $this->addToMessage(_("Erreur lors de l'enregistrement du dossier.")." "._("Contactez votre administrateur."));
4835 mbroquet 3730 $this->correct = false;
4836     return false;
4837     }
4838    
4839 fmichon 4708 /**
4840     * Mise à jour des données du DA.
4841     */
4842     //
4843     $inst_da = $this->get_inst_dossier_autorisation($this->valF["dossier_autorisation"]);
4844     //
4845 softime 8640 $params = array(
4846     'di_id' => $this->valF[$this->clePrimaire],
4847     );
4848     if ($inst_da->majDossierAutorisation($params) === false) {
4849 fmichon 4708 //
4850     $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
4851     $this->correct = false;
4852     return false;
4853     }
4854    
4855     /**
4856     * Gestion des références cadastrales / parcelles liées.
4857     */
4858 mbroquet 3730 // Si le champ des références cadastrales n'est pas vide
4859     if ($this->valF['terrain_references_cadastrales'] != '') {
4860     // Ajout des parcelles dans la table dossier_parcelle
4861 softime 8989 $this->ajouter_dossier_parcelle(
4862     $this->valF['dossier'],
4863     $this->valF['terrain_references_cadastrales']
4864     );
4865 softime 6565 }
4866 mbroquet 3730
4867 softime 6565 /**
4868     * Notification de l'éventuelle autorisation contestée
4869     */
4870     if ($this->valF['autorisation_contestee'] !== null) {
4871     // Instancie la classe dossier_message
4872     $dossier_message = $this->get_inst_dossier_message(']');
4873     // Ajoute le message de notification
4874     $dossier_message_val = array();
4875     $dossier_message_val['dossier'] = $this->valF['autorisation_contestee'];
4876     $dossier_message_val['type'] = _('Autorisation contestée');
4877     $dossier_message_val['emetteur'] = $this->f->get_connected_user_login_name();
4878     $dossier_message_val['login'] = $_SESSION['login'];
4879     $dossier_message_val['date_emission'] = date('Y-m-d H:i:s');
4880     $dossier_message_val['contenu'] = sprintf(_('Cette autorisation a été contestée par le recours %s.'), $this->valF['dossier']);
4881     // Si une erreur se produit lors de l'ajout
4882     if ($dossier_message->add_notification_message($dossier_message_val) !== true) {
4883     // Message d'erreur affiché à l'utilisateur
4884     $this->addToMessage(_("L'autorisation contestée n'a pas pu être notifiée du recours."));
4885     $this->correct = false;
4886     return false;
4887     }
4888 mbroquet 3730 }
4889    
4890 softime 10573 if ($this->f->is_option_mode_service_consulte_enabled() === false
4891     && $this->f->is_type_dossier_platau($this->valF['dossier_autorisation']) === true) {
4892     $trigger_platau_required_fields = $this->trigger_platau_required_fields($this->valF['dossier'], 'add');
4893     }
4894    
4895     /**
4896     * Gestion des tâches pour la dématérialisation
4897     */
4898 softime 6565 //
4899 softime 10573 if ($this->f->is_type_dossier_platau($this->valF['dossier_autorisation'])) {
4900     //
4901     if (isset($val['source_depot']) === false || $val['source_depot'] !== 'platau') {
4902     $inst_task = $this->f->get_inst__om_dbform(array(
4903     "obj" => "task",
4904     "idx" => 0,
4905     ));
4906     $task_val = array(
4907     'type' => 'creation_DI',
4908     'object_id' => $id,
4909     'dossier' => $id,
4910     );
4911    
4912     if ($this->f->is_option_mode_service_consulte_enabled() === false
4913     && $this->valF['etat_transmission_platau'] === 'non_transmissible') {
4914     $task_val['state'] = $inst_task::STATUS_DRAFT;
4915     }
4916    
4917     $add_task = $inst_task->add_task(array('val' => $task_val));
4918     if ($add_task === false) {
4919     $this->addToMessage(sprintf('%s %s',
4920     __("Une erreur s'est produite lors de la création tâche."),
4921     __("Veuillez contacter votre administrateur.")
4922     ));
4923     $this->correct = false;
4924     return false;
4925     }
4926     }
4927     if (isset($val['source_depot']) === true && $val['source_depot'] == 'platau') {
4928     //
4929     $inst_task = $this->f->get_inst__om_dbform(array(
4930     "obj" => "task",
4931     "idx" => 0,
4932     ));
4933     $task_val = array(
4934     'type' => 'modification_DI',
4935     'object_id' => $id,
4936     'dossier' => $id,
4937     );
4938     $add_task = $inst_task->add_task(array('val' => $task_val));
4939     if ($add_task === false) {
4940     $this->addToMessage(sprintf('%s %s',
4941     __("Une erreur s'est produite lors de la création tâche."),
4942     __("Veuillez contacter votre administrateur.")
4943     ));
4944     $this->correct = false;
4945     return false;
4946     }
4947     }
4948     //
4949     $inst_task = $this->f->get_inst__om_dbform(array(
4950     "obj" => "task",
4951     "idx" => 0,
4952     ));
4953     $task_val = array(
4954     'type' => 'depot_DI',
4955     'object_id' => $id,
4956     'dossier' => $id,
4957     );
4958     // Change l'état de la tâche de notification en fonction de l'état de
4959     // transmission du dossier d'instruction
4960     if ($this->f->is_option_mode_service_consulte_enabled() === false
4961     && $this->valF['etat_transmission_platau'] === 'non_transmissible') {
4962     //
4963     $task_val['state'] = $inst_task::STATUS_DRAFT;
4964     }
4965     $add_task = $inst_task->add_task(array('val' => $task_val));
4966     if ($add_task === false) {
4967     $this->addToMessage(sprintf('%s %s',
4968     __("Une erreur s'est produite lors de la création tâche."),
4969     __("Veuillez contacter votre administrateur.")
4970     ));
4971     $this->correct = false;
4972     return false;
4973     }
4974     }
4975    
4976     //
4977 softime 6565 return true;
4978 mbroquet 3730 }
4979 softime 6565
4980 mbroquet 3730 /**
4981 softime 10573 * Permet de vérifier que les champs requis pour platau ont été saisis
4982     * et si oui mettre à jour le statut des taches à new
4983     *
4984     * @param string $dossier L'identifiant du dossier.
4985     * @param string $add_or_update Permet de déterminer si on est en ajout ou en modification
4986     *
4987     * @return bool true|false
4988     */
4989     function trigger_platau_required_fields($dossier, $add_or_update) {
4990     // Vérification des champs Plat'AU requis pour transmission
4991     // Si les champs requis sont saisis on met à jour le flag
4992     // etat_transmission_platau à transmitted pour indiquer que le dossier a été transmis à Plat'AU
4993     $is_required_fields_fulfilled = $this->check_platau_required_fields($dossier);
4994    
4995     // Instanciation de l'objet formulaire
4996     $this->form = $this->f->get_inst__om_formulaire(array(
4997     "validation" => 0,
4998     "maj" => $this->getParameter("maj"),
4999     "champs" => $this->champs,
5000     ));
5001    
5002     if ($add_or_update == 'add') {
5003     if ($is_required_fields_fulfilled['is_ok']) {
5004     $this->form->setVal('etat_transmission_platau', 'transmissible');
5005     return true;
5006     }
5007     }
5008    
5009     $dossier_autorisation = null;
5010    
5011     if ($add_or_update === 'update') {
5012     $inst_task = $this->f->get_inst__om_dbform(array(
5013     "obj" => "task",
5014     "idx" => 0,
5015     ));
5016     if ($is_required_fields_fulfilled['is_ok'] == true) {
5017     if (isset($this->valF['etat_transmission_platau'])
5018     && ($this->valF['etat_transmission_platau'] === 'non_transmissible'
5019     || $this->valF['etat_transmission_platau'] === 'transmis_mais_non_transmissible')
5020     || $this->getVal('etat_transmission_platau') == 'non_transmissible'
5021     || $this->getVal('etat_transmission_platau') == 'transmis_mais_non_transmissible') {
5022    
5023     if ($inst_task->task_exists('creation_DI', $dossier) === false) {
5024     $dossier_autorisation = $this->getVal('dossier_autorisation');
5025     }
5026    
5027     // Valeurs à mettre à jour
5028     $valF = array();
5029     $valF['etat_transmission_platau'] = 'transmissible';
5030    
5031     // Met à jour le quartier du dossier
5032     $cle = " dossier='".$dossier."'";
5033     $res = $this->f->db->autoExecute(
5034     DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
5035     $this->addToLog(__METHOD__."(): db->autoexecute(\""
5036     .DB_PREFIXE."dossier\", ".print_r($valF, true)
5037     .", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
5038     $this->f->isDatabaseError($res);
5039    
5040     $this->update_task_state($dossier, 'draft', 'new', $dossier_autorisation);
5041     }
5042     } else {
5043     if ((isset($this->valF['etat_transmission_platau']) && $this->valF['etat_transmission_platau'] === 'transmissible' || $this->getVal('etat_transmission_platau') === 'transmissible')) {
5044    
5045     $valF = array();
5046    
5047     if ($inst_task->task_exists('creation_DI', $dossier)) {
5048     $valF['etat_transmission_platau'] = 'non_transmissible';
5049     } else {
5050     $valF['etat_transmission_platau'] = 'transmis_mais_non_transmissible';
5051     $dossier_autorisation = $this->getVal('dossier_autorisation');
5052     }
5053    
5054     // Met à jour le quartier du dossier
5055     $cle = " dossier='".$dossier."'";
5056     $res = $this->f->db->autoExecute(
5057     DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
5058     $this->addToLog(__METHOD__."(): db->autoexecute(\""
5059     .DB_PREFIXE."dossier\", ".print_r($valF, true)
5060     .", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
5061     $this->f->isDatabaseError($res);
5062    
5063     $this->update_task_state($dossier, 'new', 'draft', $dossier_autorisation);
5064     }
5065     }
5066    
5067     return true;
5068     }
5069     }
5070    
5071     /**
5072     * TODO: replace with '$this->f->findObjectById' ?
5073     *
5074 softime 6565 * Récupère l'instance de dossier message.
5075     *
5076     * @param string $dossier_message Identifiant du message.
5077     *
5078     * @return object
5079     */
5080     private function get_inst_dossier_message($dossier_message = null) {
5081     //
5082     return $this->get_inst_common("dossier_message", $dossier_message);
5083     }
5084    
5085     /**
5086 mbroquet 3730 * Récupère l'identifiant du quartier et d'un arrondissement d'une référence
5087     * cadastrale
5088     * @param string $reference_cadastrale
5089     *
5090     * @return array
5091     */
5092     function getQuartierArrondissement($reference_cadastrale) {
5093    
5094     $reference_cadastrale = trim($reference_cadastrale);
5095     $quartier = '';
5096    
5097     //Récupère le code impot du quartier dans la référence cadastrale
5098     for ( $i = 0 ; $i < strlen($reference_cadastrale) ; $i++ ){
5099    
5100     //Si c'est un chiffre, c'est le code quartier
5101     if (is_numeric($reference_cadastrale[$i]) ){
5102    
5103     $quartier .= $reference_cadastrale[$i];
5104     }
5105     //Sinon c'est la section
5106     else{
5107     break;
5108     }
5109     }
5110    
5111     //Si le code impôt du quartier a bien été renseigné
5112     if ( $quartier !== '' ){
5113    
5114     //Requête de récupération de l'identifiantdu quartier et de
5115     //l'arrondissement
5116     $sql = "SELECT
5117     quartier, arrondissement
5118     FROM
5119     ".DB_PREFIXE."quartier
5120     WHERE
5121     code_impots='$quartier'";
5122     $this->addToLog("getQuartierArrondissement() : db->query(\"$sql\")", VERBOSE_MODE);
5123 softime 8989 $res = $this->f->db->query($sql);
5124 mbroquet 3730 if (database::isError($res)) {
5125     die();
5126     }
5127    
5128     //Si on a un résultat
5129     if ( $res->numRows() == 1 ){
5130     //
5131     return $res->fetchRow(DB_FETCHMODE_ASSOC);
5132     }
5133     }
5134    
5135     return NULL;
5136     }
5137    
5138     /**
5139     * Récupère la section d'une référence cadastrale
5140     * @param string $reference_cadastrale
5141     *
5142     * @return string
5143     */
5144     function getSection($reference_cadastrale){
5145    
5146     $reference_cadastrale = trim($reference_cadastrale);
5147     $section = NULL;
5148    
5149     for ( $i = 0 ; $i < strlen($reference_cadastrale) ; $i++ )
5150 softime 10573 if (ctype_alnum($reference_cadastrale[$i]) === true && $reference_cadastrale[$i] !== ' ')
5151 mbroquet 3730 $section .= $reference_cadastrale[$i];
5152    
5153     return $section;
5154     }
5155 softime 10573
5156 mbroquet 3730 /**
5157 softime 10573 * Retourne l'intructeur correspondant le mieux à la parcelle.
5158     *
5159     * @param int $quartier le numéro de quartier
5160     * @param int $arrondissement le numéro d'arrondissement
5161     * @param string $section la section
5162     * @param int $dadt le type détaillé de dossier d'autorisation
5163     * @param int $collectivite l'identifiant de la collectivité
5164     * @param int $commune_id l'identifiant de la commune (optionel)
5165     * @param string $instructeurColumn l'identifiant de la colonne en BDD de l'instructeur (optionel)
5166     *
5167     * @return array contenant l'instructeur, et éventuellement sa division
5168     */
5169     public function getInstructeurDivision (
5170     int $quartier, int $arrondissement, string $section,
5171     int $dadt, int $collectivite, int $commune_id = 0,
5172     string $instructeurColumn = 'instructeur') : array {
5173 mbroquet 3730
5174 softime 10573 $instrAndDiv = array();
5175 mbroquet 3730
5176 softime 10573 // requête de récupération de l'instructeur à affecter
5177     // (exclu les affectations manuelles supposées avoir été utilisées avant)
5178     $sql = sprintf("
5179     SELECT
5180     %1\$s, section, quartier, arrondissement, dossier_autorisation_type_detaille
5181     FROM
5182     ".DB_PREFIXE."affectation_automatique AS AA
5183     WHERE
5184     (AA.affectation_manuelle IS NULL OR AA.affectation_manuelle = '')
5185     AND AA.%1\$s IS NOT NULL
5186     ",
5187     $this->f->db->quoteIdentifier($instructeurColumn)
5188     );
5189    
5190     // ajoute les conditions SQL correspondantes aux paramètres de filtrage
5191     foreach(array(
5192     'om_collectivite ' => $collectivite,
5193     'dossier_autorisation_type_detaille' => $dadt,
5194     'quartier' => $quartier,
5195     'arrondissement' => $arrondissement,
5196     'section' => $section
5197     ) as $column => $value) {
5198     if (empty($value) === false) {
5199     $valType = 'd'; // int
5200     if ($column == 'section') {
5201     $valType = 's'; // string
5202     $value = $this->f->db->escapeSimple($value);
5203 mbroquet 3730 }
5204 softime 10573 $sql .= sprintf(" AND (AA.$column IS NULL OR AA.$column = '%$valType') ",
5205     $value);
5206 mbroquet 3730 }
5207     }
5208 softime 10573 if (!empty($commune_id) && $this->f->is_option_dossier_commune_enabled()) {
5209     $commune = $this->f->findObjectById('commune', $commune_id);
5210     if (!empty($commune)) {
5211     $code_departement = $commune->getVal('dep');
5212     $code_commune = preg_replace('/^'.$code_departement.'/', '', $commune->getVal('com'));
5213     $sql .= sprintf(
5214     " AND (AA.communes IS NULL OR AA.communes ~ '%s') ",
5215     "(^|,)$code_departement($code_commune)?(,|$)");
5216     }
5217     else {
5218     $this->addToLog(__METHOD__."(): commune '$commune_id' non trouvée", DEBUG_MODE);
5219     }
5220     }
5221 mbroquet 3730
5222 softime 10573 // ordonnancement et limite à un seul résultat
5223     $sql .= sprintf("
5224     ORDER BY
5225     communes %s,
5226     dossier_autorisation_type_detaille %s,
5227     section %s,
5228     quartier %s,
5229     arrondissement %s
5230     LIMIT 1
5231     ",
5232     // on positionne les valeurs NULL en premier si le filtre sur ce champ n'a pas été saisi
5233     $commune_id === 0 ? 'NULLS FIRST' : '',
5234     $dadt === 0 ? 'NULLS FIRST' : '',
5235     empty($section) === true ? 'NULLS FIRST' : '',
5236     $quartier === 0 ? 'NULLS FIRST' : '',
5237     $arrondissement === 0 ? 'NULLS FIRST' : ''
5238     );
5239    
5240     // exécution de la requête
5241     $this->addToLog(__METHOD__."() : db->query(\"$sql\")", VERBOSE_MODE);
5242     $res = $this->f->db->query($sql);
5243     $this->f->isDatabaseError($res);
5244    
5245     // si on a récupéré un instructeur correspondant aux critères
5246     if ($res->numRows() > 0) {
5247    
5248     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
5249    
5250     // récupère sa division
5251     $sql = sprintf(
5252     "SELECT division FROM ".DB_PREFIXE."instructeur WHERE instructeur = '%d'",
5253     intval($row[$instructeurColumn])
5254     );
5255     $this->addToLog(__METHOD__."() : db->getOne(\"$sql\")", VERBOSE_MODE);
5256     $divisionId = $this->f->db->getOne($sql);
5257     $this->f->isDatabaseError($divisionId);
5258    
5259     // s'il a une division, retourne l'instructeur et sa division
5260     if (empty($divisionId === false)) {
5261     return array(
5262     'instructeur' => $row[$instructeurColumn],
5263     'division' => $divisionId,
5264     );
5265     }
5266    
5267     // aucune division trouvée, retour uniquement l'instructeur
5268     return array('instructeur' => $row[$instructeurColumn]);
5269     }
5270    
5271     return $instrAndDiv;
5272 mbroquet 3730 }
5273    
5274     /**
5275     * Récupère le type détaillé d'une dossier d'autorisation.
5276     *
5277     * @param integer $dossier_autorisation DA
5278     *
5279     * @return mixed
5280     */
5281     function get_dossier_autorisation_da_type_detaille($dossier_autorisation) {
5282    
5283     //
5284     $resDATD = "";
5285    
5286     //Récupération du dossier_autorisation_type_detaille concerné par le
5287     //$dossier_autorisation
5288     $sql = "
5289     SELECT
5290     dossier_autorisation_type_detaille
5291     FROM
5292     ".DB_PREFIXE."dossier_autorisation
5293     WHERE
5294     dossier_autorisation = '$dossier_autorisation'";
5295     $this->addToLog(__METHOD__." : db->query(\"$sql\")", VERBOSE_MODE);
5296 softime 8989 $resDATD = $this->f->db->getOne($sql);
5297 mbroquet 3730 $this->f->isDatabaseError($resDATD);
5298    
5299     //
5300     return $resDATD;
5301     }
5302    
5303 softime 8989 /**
5304     * TRIGGER - triggerajouter.
5305     *
5306     * @return boolean
5307     */
5308     function triggerajouter($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
5309     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
5310 softime 10573
5311 mbroquet 3730 // Initialisation des variables nécessaires à l'affectation automatique
5312 softime 10573 $quartier = 0;
5313     $arrondissement = 0;
5314     $section = '';
5315    
5316 softime 8989 // Si la référence cadastrale n'est pas vide alors on récupère la
5317     // section, le quartier et l'arrondissement
5318 mbroquet 3730 if ($this->valF['terrain_references_cadastrales'] != '') {
5319 softime 10573
5320 mbroquet 3730 // Cette méthode récupère l'arrondissement et le quartier de la
5321 softime 8989 // référence cadastrale saisie
5322 softime 10573 $quartierArr = $this->getQuartierArrondissement(
5323     $this->valF['terrain_references_cadastrales']);
5324     if ($quartierArr != null) {
5325     $quartier = $quartierArr['quartier'];
5326     $arrondissement = $quartierArr['arrondissement'];
5327 mbroquet 3730 }
5328 softime 10573
5329 mbroquet 3730 // Si il n'y a pas d'arrondissement alors on vide le quartier
5330 softime 8989 if (strcmp($arrondissement, '') == 0) {
5331     $arrondissement = null;
5332     $quartier = null;
5333 mbroquet 3730 }
5334 softime 10573
5335 mbroquet 3730 // On récupère la section
5336     $section = $this->getSection($this->valF['terrain_references_cadastrales']);
5337     }
5338 softime 10573
5339     // Si une affectation automatique a été spécifiée
5340     if (isset($val['affectation_automatique']) === true &&
5341     empty($val['affectation_automatique']) === false) {
5342     //
5343     $affect_auto_id = intval($val['affectation_automatique']);
5344    
5345     // log si l'affectation automatique n'existe pas
5346     $logMsg = __METHOD__."(): affectation automatique '$affect_auto_id' ".
5347     "non trouvée";
5348     $logMsgMode = DEBUG_MODE;
5349    
5350     // si l'affectation automatique existe
5351     $affectation_auto = $this->f->get_inst__om_dbform(array(
5352     "obj" => "affectation_automatique",
5353     "idx" => $affect_auto_id
5354     ));
5355     if (empty($affectation_auto->getVal($affectation_auto->clePrimaire)) === false) {
5356    
5357     // log si l'instructeur n'est pas défini
5358     $logMsg = __METHOD__."(): affectation automatique '$affect_auto_id' ".
5359     "pas d'instructeur défini";
5360    
5361     // si un instructeur est défini
5362     $instructeur_id = $affectation_auto->getVal('instructeur');
5363     if (empty($instructeur_id) === false) {
5364    
5365     // log si l'instructeur n'existe pas
5366     $logMsg = __METHOD__."(): affectation automatique '$affect_auto_id' ".
5367     "instructeur '$instructeur_id' non trouvé";
5368    
5369     // si l'instructeur existe
5370     $instructeur = $this->f->get_inst__om_dbform(array(
5371     "obj" => "instructeur",
5372     "idx" => intval($instructeur_id)
5373     ));
5374     if (empty($instructeur->getVal($instructeur->clePrimaire)) === false) {
5375    
5376     // récupère son ID et sa division
5377     $this->valF['instructeur'] = $instructeur_id;
5378     $this->valF['division'] = $instructeur->getVal('division');
5379    
5380     // log le succès
5381     $logMsg = __METHOD__."(): affectation automatique '$affect_auto_id' ".
5382     "instructeur [".$this->valF['instructeur']."] ".
5383     "'".$instructeur->getVal('nom')."' affecté, avec sa division ".
5384     "'".$this->valF['division']."'";
5385     $logMsgMode = EXTRA_VERBOSE_MODE;
5386     }
5387 mbroquet 3730 }
5388 softime 10573 $this->addToLog($logMsg, $logMsgMode);
5389    
5390     // log si aucun instructeur secondaire est défini
5391     $logMsg = __METHOD__."(): affectation automatique '$affect_auto_id' ".
5392     "pas de second instructeur défini";
5393     $logMsgMode = EXTRA_VERBOSE_MODE;
5394    
5395     // si l'instructeur secondaire est défini
5396     $instructeur2_id = $affectation_auto->getVal('instructeur_2');
5397     if (empty($instructeur2_id) === false) {
5398    
5399     // log si l'instructeur n'existe pas
5400     $logMsg = __METHOD__."(): affectation automatique '$affect_auto_id' ".
5401     "second instructeur '$instructeur2_id' non trouvé";
5402     $logMsgMode = DEBUG_MODE;
5403    
5404     // si l'instructeur existe
5405     $instructeur2 = $this->f->get_inst__om_dbform(array(
5406     "obj" => "instructeur",
5407     "idx" => intval($instructeur2_id)
5408     ));
5409     if (empty($instructeur2) === false) {
5410    
5411     // récupère son ID
5412     $this->valF['instructeur_2'] = $instructeur2_id;
5413    
5414     // log le succès
5415     $logMsg = __METHOD__."(): affectation automatique '$affect_auto_id' ".
5416     "second instructeur [".$this->valF['instructeur_2']."] ".
5417     "'".$instructeur2->getVal('nom')."' affecté";
5418     $logMsgMode = EXTRA_VERBOSE_MODE;
5419     }
5420     }
5421     $this->addToLog($logMsg, $logMsgMode);
5422    
5423     // succès : plus rien à logger
5424     $logMsg = null;
5425     $logMsgMode = null;
5426 mbroquet 3730 }
5427 softime 10573
5428     // affectation automatique inexistante
5429     if (empty($logMsg) === false && empty($logMsgMode) === false) {
5430     $this->addToLog($logMsg, $logMsgMode);
5431 softime 6565 }
5432 mbroquet 3730 }
5433 softime 10573
5434     // message affiché si aucune instructeur défini/récupéré
5435     $affMsg = "<br/> "._("Aucun instructeur compatible avec ce dossier trouve, ".
5436     "contactez votre administrateur afin d'en assigner un ".
5437     "a ce dossier.")." <br/>";
5438     if ($this->f->isAccredited("dossier_modifier_instructeur") === true) {
5439     $affMsg = "<br/> "._("Pensez a assigner un instructeur a ce dossier.")." <br/>";
5440     }
5441    
5442     // si aucun instructeur n'est saisi et que le dossier_autorisation_type_detaille n'est pas
5443     // vide alors on récupère l'instructeur et la division depuis l'affectation automatique
5444     if (empty($this->valF['instructeur']) === true && empty($val['dossier_autorisation']) === false) {
5445    
5446     // récupère le type détaillé du DA
5447     $dadt = $this->get_dossier_autorisation_da_type_detaille(
5448     $this->valF['dossier_autorisation']);
5449    
5450     // si la commune est spécifiée
5451     $commune_id = 0;
5452     if (isset($this->valF['commune']) && $this->f->is_option_dossier_commune_enabled()) {
5453     $commune_id = $this->valF['commune'];
5454     }
5455    
5456     // récupération de l'instructeur ainsi que de sa division
5457     $instructeurDivision = $this->getInstructeurDivision(
5458     intval($quartier), intval($arrondissement), $section,
5459     intval($dadt), intval($this->valF['om_collectivite']),
5460     intval($commune_id)
5461     );
5462    
5463     // si un instructeur et sa division ont été récupérés
5464     if (isset($instructeurDivision['instructeur']) === true &&
5465     isset($instructeurDivision['division']) === true) {
5466    
5467     // stocke les valeurs dans les données de formulaire
5468     // (pour pouvoir être exploitées ensuite)
5469     $this->valF['instructeur'] = $instructeurDivision['instructeur'];
5470     $this->valF['division'] = $instructeurDivision['division'];
5471    
5472     // n'affiche aucun message à l'utilisateur
5473     $affMsg = null;
5474     }
5475    
5476     // récupération de l'instructeur secondaire
5477     $instr2 = $this->getInstructeurDivision(
5478     intval($quartier), intval($arrondissement), $section,
5479     intval($dadt), intval($this->valF['om_collectivite']),
5480     intval($commune_id), 'instructeur_2'
5481     );
5482     if (isset($instr2['instructeur']) === true) {
5483     $this->valF['instructeur_2'] = $instr2['instructeur'];
5484     }
5485     }
5486    
5487     // si on doit afficher un message à l'utilisateur
5488     if (empty($affMsg) === false) {
5489     $this->addToMessage($affMsg);
5490     }
5491    
5492 softime 8989 $this->addToLog(__METHOD__."(): end", EXTRA_VERBOSE_MODE);
5493 mbroquet 3730 }
5494    
5495 fmichon 4708 /**
5496     * TRIGGER - triggermodifierapres.
5497     *
5498     * - Interface avec le référentiel ERP [101]
5499     * - Interface avec le référentiel ERP [102][103]
5500 softime 6272 * - Interface avec le référentiel ERP [114]
5501 fmichon 4708 * - Gestion des demandeurs liés
5502     * - Gestion des références cadastrales / parcelles liées
5503     * - Gestion des taxes
5504 softime 8989 *
5505 fmichon 4708 * @return boolean
5506     */
5507 softime 8989 function triggermodifierapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
5508     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
5509    
5510 softime 6565 // Mise à jour DA si miroir du DI
5511     $inst_da = $this->get_inst_dossier_autorisation($this->getVal('dossier_autorisation'));
5512     if ($inst_da->is_dossier_autorisation_visible() === false) {
5513 softime 8640 $params = array(
5514     'di_id' => $this->getVal($this->clePrimaire),
5515     );
5516     if ($inst_da->majDossierAutorisation($params) === false) {
5517 softime 6565 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
5518     return false;
5519     }
5520     }
5521 fmichon 4708
5522     /**
5523     * Interface avec le référentiel ERP.
5524     *
5525     * (WS->ERP)[101] ERP Qualifié -> AT
5526     * Déclencheur :
5527     * - L'option ERP est activée
5528     * - Le dossier est de type AT
5529     * - Le dossier est marqué comme "connecté au référentiel ERP"
5530     * - Le formulaire de modification du dossier est validé avec le
5531     * marqueur "à qualifier" à "NON" alors qu'il était précédemment à
5532     * "OUI"
5533     */
5534 softime 8989 //
5535 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
5536 fmichon 4708 && $this->is_connected_to_referentiel_erp() === true
5537     && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__at')
5538     && $this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false) {
5539 softime 4740 // Récupère la liste des contraintes
5540     $contraintes_plu_list = $this->getListContrainte($this->valF['dossier'], false);
5541     // Extrait les libellés de chaque contraintes
5542     $contraintes_plu = array();
5543     $contraintes_plu_string = "";
5544 softime 8989 while ($row =& $contraintes_plu_list->fetchRow(DB_FETCHMODE_ASSOC)) {
5545 softime 4740 //
5546     $contraintes_plu[] = $row['contrainte_libelle'];
5547     }
5548     // Chaîne de caractère listant toutes les contraintes du dossier
5549     $contraintes_plu_string = implode(' ; ', $contraintes_plu);
5550 nhaye 6052 $competence = "";
5551     if ($this->valF['autorite_competente'] !== null) {
5552     $inst_ac = $this->get_inst_autorite_competente($this->valF['autorite_competente']);
5553     $competence = $inst_ac->getVal("libelle");
5554     }
5555 fmichon 4708 //
5556     $infos = array(
5557     "dossier_instruction" => $this->valF['dossier'],
5558 nhaye 6052 "competence" => $competence,
5559 softime 4740 "contraintes_plu" => $contraintes_plu_string,
5560 fmichon 4708 "references_cadastrales" => $this->getReferenceCadastrale($this->valF['dossier']),
5561     );
5562     //
5563     $ret = $this->f->send_message_to_referentiel_erp(101, $infos);
5564     if ($ret !== true) {
5565     $this->cleanMessage();
5566     $this->addToMessage(_("Une erreur s'est produite lors de la notification (101) du référentiel ERP. Contactez votre administrateur."));
5567     return false;
5568 mbroquet 3730 }
5569 fmichon 4708 $this->addToMessage(_("Notification (101) du référentiel ERP OK."));
5570     }
5571 mbroquet 3730
5572 fmichon 4708 /**
5573     * Interface avec le référentiel ERP.
5574     *
5575     * (WS->ERP)[102] Demande de complétude de dossier PC pour un ERP -> PC qui concerne un ERP
5576     * (WS->ERP)[103] Demande de qualification de dossier PC pour un ERP -> PC qui concerne un ERP
5577     * Déclencheur :
5578     * - L'option ERP est activée
5579     * - Le dossier est de type PC
5580     * - Le formulaire de modification du dossier est validé avec le
5581     * marqueur "à qualifier" à "NON" alors qu'il était précédemment à
5582     * "OUI"
5583     * - Le formulaire de modification du dossier est validé avec le
5584     * marqueur "ERP" à "OUI"
5585     */
5586     //
5587 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
5588 fmichon 4708 && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
5589     && $this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false
5590     && $this->valF['erp'] == true) {
5591     //
5592     $infos = array(
5593     "dossier_instruction" => $this->valF['dossier'],
5594     );
5595     // [102] Demande de complétude de dossier PC pour un ERP
5596     $ret = $this->f->send_message_to_referentiel_erp(102, $infos);
5597     if ($ret !== true) {
5598     $this->cleanMessage();
5599     $this->addToMessage(_("Une erreur s'est produite lors de la notification (102) du référentiel ERP. Contactez votre administrateur."));
5600     return false;
5601     }
5602     $this->addToMessage(_("Notification (102) du référentiel ERP OK."));
5603     // [103] Demande de qualification de dossier PC pour un ERP
5604     $ret = $this->f->send_message_to_referentiel_erp(103, $infos);
5605     if ($ret !== true) {
5606     $this->cleanMessage();
5607     $this->addToMessage(_("Une erreur s'est produite lors de la notification (103) du référentiel ERP. Contactez votre administrateur."));
5608     return false;
5609     }
5610     $this->addToMessage(_("Notification (103) du référentiel ERP OK."));
5611     }
5612    
5613     /**
5614 softime 6272 * Interface avec le référentiel ERP.
5615     *
5616     * (WS->ERP)[114] ERP Qualifié -> PC
5617     * Déclencheur :
5618     * - l'option ERP est activée
5619     * - ET le dossier est marqué comme "connecté au référentiel ERP"
5620     * - ET le dossier est de type PC
5621     * - ET
5622     * - soit le formulaire de modification du dossier est validé avec le
5623     * marqueur "enjeu_urba" qui change de statut
5624     * - soit ce marqueur est vrai et le dossier passe à qualifié
5625     */
5626     // Étant donné que l'objet a été modifié en base après sa création,
5627     // il faut le ré-instancier pour récupérer ses informations.
5628 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
5629     "obj" => "dossier",
5630     "idx" => $this->valF['dossier'],
5631     ));
5632 softime 7366 if ($dossier->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
5633 softime 6272 && $dossier->is_connected_to_referentiel_erp() === true
5634     && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
5635     && (($this->getVal('enjeu_urba') == 't') != $this->valF['enjeu_urba']
5636     || ($this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false
5637     && $this->getVal('enjeu_urba') == 't'))) {
5638    
5639     $enjeu = "non";
5640     if ($this->valF['enjeu_urba']) {
5641     $enjeu = "oui";
5642     }
5643    
5644     $infos = array(
5645     "dossier_instruction" => $this->valF['dossier'],
5646     "Dossier à enjeu ADS" => $enjeu
5647     );
5648     //
5649     $ret = $this->f->send_message_to_referentiel_erp(114, $infos);
5650     if ($ret !== true) {
5651     $this->cleanMessage();
5652     $this->addToMessage(_("Une erreur s'est produite lors de la notification (114) du référentiel ERP. Contactez votre administrateur."));
5653     return false;
5654     }
5655     $this->addToMessage(_("Notification (114) du référentiel ERP OK."));
5656     }
5657    
5658     /**
5659 fmichon 4708 * Gestion des demandeurs liés.
5660     */
5661 mbroquet 3730 // Ajout ou modification des demandeurs
5662 softime 8989 $this->insertLinkDossierDemandeur();
5663 mbroquet 3730
5664 fmichon 4708 /**
5665     * Gestion des références cadastrales / parcelles liées.
5666     */
5667 mbroquet 3730 // Si le champ des références cadastrales n'est pas vide
5668     if ($this->getVal('terrain_references_cadastrales')
5669     != $this->valF['terrain_references_cadastrales']) {
5670    
5671     // On supprime toutes les lignes de la table dossier_parcelle qui
5672     // font référence le dossier en cours de modification
5673     $this->supprimer_dossier_parcelle($val['dossier']);
5674    
5675     // Ajout des parcelles dans la table dossier_parcelle
5676     $this->ajouter_dossier_parcelle($val['dossier'],
5677     $val['terrain_references_cadastrales']);
5678    
5679     }
5680    
5681 fmichon 4708 /**
5682     * Gestion des taxes.
5683     */
5684 softime 6929 // Si le champ tax_secteur est modifié et que l'option de simulation des
5685     // taxes est activée
5686     if ($this->getVal('tax_secteur') != $this->valF['tax_secteur']
5687     && $this->f->is_option_simulation_taxes_enabled($this->getVal('om_collectivite')) === true) {
5688 mbroquet 3730
5689     // Valeurs pour le calcul de la taxe d'aménagement
5690 softime 6929 $values = array();
5691     // Instance de la classe donnees_techniques
5692     $donnees_techniques = $this->get_inst_donnees_techniques();
5693     // Récupère les valeurs des données techniques
5694     $values = $donnees_techniques->get_form_val();
5695 mbroquet 3730
5696     // Met à jour les montants du dossier
5697 softime 6929 $update_dossier_tax_mtn = $this->update_dossier_tax_mtn($this->valF['tax_secteur'], $values);
5698     if ($update_dossier_tax_mtn === false) {
5699 mbroquet 3730 //
5700     $this->addToMessage(_("La mise a jour des montants de la simulation de la taxe d'amenagement a echouee."));
5701 softime 6929 //
5702 mbroquet 3730 return false;
5703     }
5704     }
5705    
5706 softime 6272 /**
5707     * Gestion des métadonées des pièces liés.
5708     * Vérifie les méthodes à exécuter configurées dans le connecteur du
5709     * filestorage.
5710     */
5711 mbroquet 3730 //
5712 softime 6272 $ret = $this->post_update_metadata($val);
5713     //
5714     if ($ret === false) {
5715     //
5716     $this->cleanMessage();
5717     $this->addToMessage(_("La mise à jour des métadonnées des pièces liées à ce dossier a échouée."));
5718     return false;
5719     }
5720    
5721 softime 7366 /**
5722     * Gestion des du changement de date de dépôt.
5723     * Vérification préalable de la présence de la date et de sa
5724     * modification.
5725     */
5726 softime 6272 //
5727 softime 7366 if (array_key_exists("date_depot", $val) === true) {
5728     //
5729 softime 7540 $inst_new_date = DateTime::createFromFormat('d/m/Y', $val["date_depot"]);
5730     $inst_old_date = DateTime::createFromFormat('Y-m-d', $this->getVal("date_depot"));
5731     $new_date = $inst_new_date->format('d/m/Y');
5732     $old_date = $inst_old_date->format('d/m/Y');
5733 softime 7366
5734     //
5735     if ($new_date !== $old_date) {
5736     //
5737     $status = $this->update_date_depot($val["date_depot"]);
5738     //
5739     if ($status === false) {
5740     //
5741     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
5742     return false;
5743     }
5744    
5745     }
5746     }
5747 softime 10573
5748     /**
5749     * Gestion de la normalisation de l'adresse.
5750     * En cas de modification de l'adresse du terrain, l'adresse normalisée
5751     * est supprimée.
5752     */
5753     $list_address_keys = array(
5754     'terrain_adresse_voie_numero',
5755     'terrain_adresse_voie',
5756     'terrain_adresse_lieu_dit',
5757     'terrain_adresse_localite',
5758     'terrain_adresse_code_postal',
5759     'terrain_adresse_bp',
5760     'terrain_adresse_cedex',
5761     );
5762     $change = false;
5763     foreach ($list_address_keys as $key) {
5764     if (array_key_exists($key, $val) === true
5765     && $val[$key] !== $this->getVal($key)) {
5766     //
5767     $change = true;
5768     break;
5769     }
5770     }
5771     if ($change === true) {
5772     $this->normalize_address();
5773     }
5774    
5775     if ($this->f->is_option_mode_service_consulte_enabled() === false
5776     && $this->f->is_type_dossier_platau($this->valF['dossier_autorisation']) === true) {
5777     $trigger_platau_required_fields = $this->trigger_platau_required_fields($this->valF['dossier'], 'update');
5778     }
5779    
5780     /**
5781     * Gestion des tâches pour la dématérialisation
5782     */
5783     // Qualification du dossier d'instruction
5784     if ($this->getVal('instructeur') != $this->valF['instructeur']
5785     || $this->getVal('division') != $this->valF['division']) {
5786     //
5787     //
5788     if ($this->f->is_type_dossier_platau($this->valF['dossier_autorisation']) === true
5789     && ($this->f->is_option_dossier_commune_enabled() !== true
5790     || ($this->f->is_option_dossier_commune_enabled() === true
5791     && $this->getVal('depot_electronique') === 't'))) {
5792     //
5793     $inst_task = $this->f->get_inst__om_dbform(array(
5794     "obj" => "task",
5795     "idx" => 0,
5796     ));
5797     $task_val = array(
5798     'type' => 'qualification_DI',
5799     'object_id' => $id,
5800     'dossier' => $id,
5801     );
5802     if ($this->f->is_option_mode_service_consulte_enabled() === false
5803     && $this->valF['etat_transmission_platau'] === 'non_transmissible'
5804     || $this->valF['etat_transmission_platau'] === 'transmis_mais_non_transmissible') {
5805     $task_val['state'] = $inst_task::STATUS_DRAFT;
5806     }
5807     $add_task = $inst_task->add_task(array('val' => $task_val));
5808     if ($add_task === false) {
5809     $this->addToMessage(sprintf('%s %s',
5810     __("Une erreur s'est produite lors de la création tâche."),
5811     __("Veuillez contacter votre administrateur.")
5812     ));
5813     $this->correct = false;
5814     return false;
5815     }
5816     }
5817     }
5818     // Modification du dossier d'instruction
5819     if ($this->f->is_type_dossier_platau($this->valF['dossier_autorisation'])
5820     && ($this->f->is_option_mode_service_consulte_enabled() !== true
5821     || ($this->f->is_option_mode_service_consulte_enabled() === true
5822     && ($this->get_source_depot_from_demande() === 'platau'
5823     || $this->get_source_depot_from_demande() === 'publik')))) {
5824     //
5825     $inst_task = $this->f->get_inst__om_dbform(array(
5826     "obj" => "task",
5827     "idx" => 0,
5828     ));
5829     $task_val = array(
5830     'type' => 'modification_DI',
5831     'object_id' => $id,
5832     'dossier' => $id,
5833     );
5834     // Change l'état de la tâche de notification en fonction de l'état de
5835     // transmission du dossier d'instruction
5836     if ($this->f->is_option_mode_service_consulte_enabled() === false
5837     && $this->valF['etat_transmission_platau'] === 'non_transmissible'
5838     || $this->valF['etat_transmission_platau'] === 'transmis_mais_non_transmissible') {
5839     //
5840     $task_val['state'] = $inst_task::STATUS_DRAFT;
5841     }
5842     $add_task = $inst_task->add_task(array('val' => $task_val));
5843     if ($add_task === false) {
5844     $this->addToMessage(sprintf('%s %s',
5845     __("Une erreur s'est produite lors de la création tâche."),
5846     __("Veuillez contacter votre administrateur.")
5847     ));
5848     $this->correct = false;
5849     return false;
5850     }
5851     // XXX Les données du DA sont mises à jour seulement lors de l'ajout ou modification
5852     // d'une instruction du DI initial et lors de la décision sur le DI non initial.
5853     // Sachant ce comportement, voir si cette tâche modification_DA est bien située.
5854     $inst_task = $this->f->get_inst__om_dbform(array(
5855     "obj" => "task",
5856     "idx" => 0,
5857     ));
5858     $task_val = array(
5859     'type' => 'modification_DA',
5860     'object_id' => $this->getVal('dossier_autorisation'),
5861     'dossier' => $this->getVal('dossier_autorisation'),
5862     );
5863     // Change l'état de la tâche de notification en fonction de l'état de
5864     // transmission du dossier d'instruction
5865     if ($this->f->is_option_mode_service_consulte_enabled() === false
5866     && $this->valF['etat_transmission_platau'] === 'non_transmissible'
5867     || $this->valF['etat_transmission_platau'] === 'transmis_mais_non_transmissible') {
5868     //
5869     $task_val['state'] = $inst_task::STATUS_DRAFT;
5870     }
5871     $add_task = $inst_task->add_task(array('val' => $task_val));
5872     if ($add_task === false) {
5873     $this->addToMessage(sprintf('%s %s',
5874     __("Une erreur s'est produite lors de la création tâche."),
5875     __("Veuillez contacter votre administrateur.")
5876     ));
5877     $this->correct = false;
5878     return false;
5879     }
5880     }
5881    
5882 softime 7366 //
5883 mbroquet 3730 return true;
5884     }
5885    
5886 softime 7366 /**
5887 softime 8989 * TRIGGER - triggermodifier.
5888     *
5889     * @return boolean
5890 softime 7366 */
5891 softime 8989 function triggermodifier($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
5892     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
5893 softime 7366 // Si la date de dépôt a changé et si elle valait celle du dernier dépôt
5894     // alors cette dernière prend également sa valeur
5895     if ($this->f->formatDate($this->getVal('date_depot')) !== $val['date_depot']
5896     && $this->f->formatDate($this->getVal('date_depot')) === $this->f->formatDate($this->getVal('date_dernier_depot'))) {
5897     $this->valF['date_dernier_depot'] = $this->valF['date_depot'];
5898     }
5899     //
5900     return true;
5901     }
5902    
5903 mbroquet 3730 /**
5904 softime 7366 * Methode de traitement suite à la modification de la date de dépot.
5905     *
5906     * @param string $new_date_str Nouvelle date de dépot.
5907     *
5908     * @return boolean
5909     */
5910     function update_date_depot($new_date_str) {
5911     $demande = $this->get_inst_demande();
5912 softime 10573 // TODO: should return null instead of false
5913 softime 7366 if ($demande === false) {
5914     return false;
5915     }
5916    
5917     $retour = $this->majDateInstruction($demande->getVal("instruction_recepisse"), $new_date_str);
5918     if ($retour === false) {
5919     return false;
5920     }
5921    
5922     $valF = array();
5923     foreach ($demande->champs as $id => $champ) {
5924     $valF[$champ] = $demande->val[$id];
5925     }
5926     $valF['date_demande'] = $new_date_str;
5927 softime 8989 $modification = $demande->modifier($valF);
5928 softime 7366 if ($modification === false) {
5929     return false;
5930     }
5931    
5932     $row_date = array("date_demande" => $new_date_str);
5933 softime 8989 $res = $this->f->db->autoExecute(
5934 softime 7366 DB_PREFIXE."dossier",
5935     $row_date,
5936     DB_AUTOQUERY_UPDATE,
5937     "dossier = '".$this->getVal("dossier")."'"
5938     );
5939     $this->f->addToLog(__METHOD__ . "() : db->autoExecute(" . $res . ")", VERBOSE_MODE);
5940     if ($this->f->isDatabaseError($res, true)) {
5941     return false;
5942     }
5943    
5944 softime 7541 // Si c'est un dossier d'instruction initial
5945     $di_version = $this->get_dossier_instruction_version();
5946     if ($di_version === 0 || $di_version === '0') {
5947     //
5948     $row_date = array("depot_initial" => $new_date_str);
5949 softime 8989 $res = $this->f->db->autoExecute(
5950 softime 7541 DB_PREFIXE."dossier_autorisation",
5951     $row_date,
5952     DB_AUTOQUERY_UPDATE,
5953     "dossier_autorisation = '" . $this->getVal("dossier_autorisation") . "'"
5954     );
5955     $this->f->addToLog(__METHOD__ . "() : db->autoExecute(" . $res . ")", VERBOSE_MODE);
5956     if ($this->f->isDatabaseError($res, true)) {
5957     return false;
5958     }
5959 softime 7366 }
5960     }
5961    
5962    
5963     /**
5964     * Met à jour l'instruction en fonction de la nouvelle date
5965     * ou retourne false si il ya une erreur.
5966     *
5967     * @param integer $instruction_id Identifiant de l'instruction.
5968     * @param string $date_depot Nouvelle date de dépôt.
5969     *
5970     * @return boolean
5971     */
5972     public function majDateInstruction($instruction_id, $date_depot) {
5973    
5974     // Definalise l'instruction de récépissé si nécessaire
5975 softime 7996 $instruction = $this->f->get_inst__om_dbform(array(
5976     "obj" => "instruction",
5977     "idx" => $instruction_id,
5978     ));
5979 softime 7366 $instruction->setParameter('maj', 110);
5980     //
5981     if ($instruction->is_unfinalizable_without_bypass() === true
5982     && $instruction->unfinalize($instruction->valF) === false) {
5983     return false;
5984     }
5985    
5986     // Modifie la date d'événement
5987     $instruction->setParameter('maj', 1);
5988     //
5989     $valF = array();
5990     foreach ($instruction->champs as $id => $champ) {
5991     $valF[$champ] = $instruction->getVal($champ);
5992     }
5993     //
5994     $valF['date_evenement'] = $date_depot;
5995     $valF['date_finalisation_courrier'] = null;
5996     //
5997 softime 8989 $modification = $instruction->modifier($valF);
5998 softime 7366 //
5999     if ($modification === false) {
6000     return false;
6001     }
6002    
6003     // Finalise l'instruction
6004     $instruction->setParameter('maj', 100);
6005     if ($instruction->finalize($instruction->valF) === false) {
6006     return false;
6007     }
6008    
6009     //
6010     return true;
6011     }
6012    
6013     /**
6014 softime 10573 * TODO: replace with '$this->f->findObjectById' ?
6015     *
6016 softime 6272 * Récupère l'instance de l'autorité compétente.
6017     *
6018     * @param string $autorite_competente Identifiant de l'autorité compétente.
6019     *
6020     * @return object
6021     */
6022     function get_inst_autorite_competente($autorite_competente = null) {
6023     //
6024     return $this->get_inst_common("autorite_competente", $autorite_competente);
6025     }
6026    
6027    
6028     /**
6029 softime 6929 * Met à jour les montants des taxes du dossier d'instruction.
6030 mbroquet 3730 *
6031 softime 6929 * @param integer $tax_secteur Secteur communal.
6032     * @param array $val Valeurs des données techniques.
6033 mbroquet 3730 *
6034     * @return boolean
6035     */
6036 softime 6929 public function update_dossier_tax_mtn($tax_secteur, $val = array()) {
6037 mbroquet 3730 // Instance du paramétrage de la taxe d'aménagement
6038     $taxe_amenagement = $this->get_inst_taxe_amenagement();
6039    
6040 softime 6929 // Liste des montants à mettre à jour
6041     $valF = array();
6042     $valF['tax_mtn_part_commu'] = null;
6043     $valF['tax_mtn_part_depart'] = null;
6044     $valF['tax_mtn_part_reg'] = null;
6045     $valF['tax_mtn_total'] = null;
6046     $valF['tax_mtn_rap'] = null;
6047     $valF['tax_mtn_part_commu_sans_exo'] = null;
6048     $valF['tax_mtn_part_depart_sans_exo'] = null;
6049     $valF['tax_mtn_part_reg_sans_exo'] = null;
6050     $valF['tax_mtn_total_sans_exo'] = null;
6051     $valF['tax_mtn_rap_sans_exo'] = null;
6052 mbroquet 3730
6053 softime 6929 // Si le tableau des valeurs n'est pas vide
6054     if ($val !== array()) {
6055 mbroquet 3730
6056 softime 6929 // Si le taux communal est renseigné
6057     if ($taxe_amenagement->getVal('tx_comm_secteur_'.$tax_secteur) !== null
6058     && $taxe_amenagement->getVal('tx_comm_secteur_'.$tax_secteur) !== '') {
6059 mbroquet 3730
6060 softime 6929 // Calcul de la TA
6061     $calcul_ta = $taxe_amenagement->compute_ta($tax_secteur, $val);
6062    
6063     // Si chaque résultat est calculable
6064     if ($calcul_ta !== null && is_array($calcul_ta) === true) {
6065    
6066     // Total des parts de la TA avec exonération
6067     $total_ta = $calcul_ta['commu'] + $calcul_ta['depart'] + $calcul_ta['reg'];
6068     $total_ta_ss_exo = $calcul_ta['commu_ss_exo'] + $calcul_ta['depart_ss_exo'] + $calcul_ta['reg_ss_exo'];
6069    
6070     // Valeurs à mettre à jour, les montants doivent être à l'entier
6071     // inférieur
6072     $valF['tax_mtn_part_commu'] = floor($calcul_ta['commu']);
6073     $valF['tax_mtn_part_depart'] = floor($calcul_ta['depart']);
6074     $valF['tax_mtn_part_reg'] = floor($calcul_ta['reg']);
6075     $valF['tax_mtn_total'] = floor($total_ta);
6076     $valF['tax_mtn_part_commu_sans_exo'] = floor($calcul_ta['commu_ss_exo']);
6077     $valF['tax_mtn_part_depart_sans_exo'] = floor($calcul_ta['depart_ss_exo']);
6078     $valF['tax_mtn_part_reg_sans_exo'] = floor($calcul_ta['reg_ss_exo']);
6079     $valF['tax_mtn_total_sans_exo'] = floor($total_ta_ss_exo);
6080     }
6081     }
6082    
6083     // Calcul de la RAP
6084     $calcul_rap = $taxe_amenagement->compute_rap($val);
6085    
6086     // Si chaque résultat est calculable
6087     if ($calcul_rap !== null && is_array($calcul_rap) === true) {
6088    
6089     // RAP avec exonération
6090     $mtn_rap = $calcul_rap['rap'];
6091     // RAP sans exonération
6092     $mtn_rap_ss_exo = $calcul_rap['rap_ss_exo'];
6093    
6094     // Valeurs à mettre à jour, les montants doivent être à l'entier
6095     // inférieur
6096     $valF['tax_mtn_rap'] = floor($mtn_rap);
6097     $valF['tax_mtn_rap_sans_exo'] = floor($mtn_rap_ss_exo);
6098     }
6099 mbroquet 3730 }
6100    
6101     // Met à jour l'enregistrement de dossier
6102 softime 8989 $res = $this->f->db->autoExecute(
6103 softime 6929 DB_PREFIXE.$this->table,
6104     $valF,
6105     DB_AUTOQUERY_UPDATE,
6106     $this->clePrimaire ."='".$this->getVal($this->clePrimaire)."'"
6107     );
6108 mbroquet 3730 // Log
6109     $this->f->addToLog(__METHOD__."() : db->autoExecute(".$res.")", VERBOSE_MODE);
6110     //
6111     if ($this->f->isDatabaseError($res, true)) {
6112     //
6113     $this->correct = false;
6114     return false;
6115     }
6116    
6117     //
6118     return true;
6119     }
6120    
6121 softime 8477 /**
6122 softime 8989 * TRIGGER - triggersupprimer.
6123 softime 8477 *
6124     * @return boolean
6125     */
6126 softime 8989 function triggersupprimer($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
6127     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
6128 softime 6929
6129 softime 8477 // Le dossier d'instruction n'est pas supprimé si celui-ci est lié à un
6130     // contentieux
6131     $autorisation_contestee = $this->get_idx_by_args('autorisation_contestee', 'dossier', 'autorisation_contestee', $this->getVal($this->clePrimaire));
6132     if ($autorisation_contestee !== null && $autorisation_contestee !== '') {
6133     $this->addToMessage("Le dossier d'instruction ne peut pas être supprimé car celui-ci est lié à un contentieux.");
6134     return false;
6135     }
6136    
6137     /**
6138     * Gestion de la suppression des tables liées au dossier d'instruction.
6139     * Les fichiers potentiellement liés aux tables ne sont pas supprimés.
6140     */
6141     // Tableau pour la conception des requêtes de suppression
6142     $related_tables = array(
6143     'lien_demande_demandeur' => array(
6144     'condition_field' => 'demande',
6145     'condition_value' => $this->get_idx_by_args('demande', 'demande', 'dossier_instruction', $this->getVal($this->clePrimaire)),
6146     ),
6147     'demande' => array(
6148     'condition_field' => 'dossier_instruction',
6149     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6150     ),
6151     'lien_dossier_demandeur' => array(
6152     'condition_field' => 'dossier',
6153     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6154     ),
6155     'instruction' => array(
6156     'condition_field' => 'dossier',
6157     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6158     ),
6159     'dossier_parcelle' => array(
6160     'condition_field' => 'dossier',
6161     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6162     ),
6163     'dossier_contrainte' => array(
6164     'condition_field' => 'dossier',
6165     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6166     ),
6167     'lien_donnees_techniques_moyen_retenu_juge' => array(
6168     'condition_field' => 'donnees_techniques',
6169     'condition_value' => $this->get_idx_by_args('donnees_techniques', 'donnees_techniques', 'dossier_instruction', $this->getVal($this->clePrimaire)),
6170     ),
6171     'lien_donnees_techniques_moyen_souleve' => array(
6172     'condition_field' => 'donnees_techniques',
6173     'condition_value' => $this->get_idx_by_args('donnees_techniques', 'donnees_techniques', 'dossier_instruction', $this->getVal($this->clePrimaire)),
6174     ),
6175     'donnees_techniques_di' => array(
6176     'table' => 'donnees_techniques',
6177     'condition_field' => 'dossier_instruction',
6178     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6179     ),
6180     'blocnote' => array(
6181     'condition_field' => 'dossier',
6182     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6183     ),
6184     'consultation' => array(
6185     'condition_field' => 'dossier',
6186     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6187     ),
6188     'document_numerise' => array(
6189     'condition_field' => 'dossier',
6190     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6191     ),
6192     'rapport_instruction' => array(
6193     'condition_field' => 'dossier_instruction',
6194     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6195     ),
6196     'dossier_commission' => array(
6197     'condition_field' => 'dossier',
6198     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6199     ),
6200     'dossier_message' => array(
6201     'condition_field' => 'dossier',
6202     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6203     ),
6204     'lien_dossier_dossier_1' => array(
6205     'table' => 'lien_dossier_dossier',
6206     'condition_field' => 'dossier_src',
6207     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6208     ),
6209     'lien_dossier_dossier_2' => array(
6210     'table' => 'lien_dossier_dossier',
6211     'condition_field' => 'dossier_cible',
6212     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6213     ),
6214     'dossier_geolocalisation' => array(
6215     'condition_field' => 'dossier',
6216     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6217     ),
6218     'donnees_techniques_lot' => array(
6219     'table' => 'donnees_techniques',
6220     'condition_field' => 'lot',
6221     'condition_value' => $this->get_idx_by_args("string_agg(lot::text, ', ')", 'lot', 'dossier', $this->getVal($this->clePrimaire)),
6222     ),
6223     'lien_lot_demandeur' => array(
6224     'condition_field' => 'lot',
6225     'condition_value' => $this->get_idx_by_args("string_agg(lot::text, ', ')", 'lot', 'dossier', $this->getVal($this->clePrimaire)),
6226     ),
6227     'lot' => array(
6228     'condition_field' => 'dossier',
6229     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
6230     ),
6231     );
6232     // Supprime les enregistrements des tables
6233     $delete = $this->delete_related_tables($related_tables);
6234     if ($delete === false) {
6235     return false;
6236     }
6237    
6238     //
6239     return true;
6240     }
6241    
6242 mbroquet 3730 /**
6243 softime 8989 * TRIGGER - triggersupprimerapres.
6244 softime 8477 *
6245     * @return boolean
6246 mbroquet 3730 */
6247 softime 8989 function triggersupprimerapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
6248     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
6249 mbroquet 3730
6250 softime 8477 /**
6251     * Gestion de la suppression des tables liées au dossier d'instruction.
6252     * Dans le cas d'un dossier d'instruction initial le dossier
6253     * d'autorisation est également supprimé pour libérer la numéroration.
6254     * S'il s'agit d'un dossier d'instruction sur exsitant alors le dossier
6255     * d'autorisation est mise à jour.
6256     * Les fichiers potentiellement liés aux tables ne sont pas supprimés.
6257     */
6258     // S'il s'agit d'une suppression de dossier d'instruction sur existant
6259     if ($this->has_only_initial_di(true) === false) {
6260     // Mise à jour des données du dossier d'autorisation
6261     $da = $this->f->get_inst__om_dbform(array(
6262     "obj" => "dossier_autorisation",
6263     "idx" => $this->getVal("dossier_autorisation"),
6264     ));
6265     $da->majDossierAutorisation();
6266 mbroquet 3730
6267 softime 8477 } else {
6268     // S'il s'agit d'une suppression de dossier d'instruction initial
6269     // Tableau pour la conception des requêtes de suppression
6270     $related_tables = array(
6271     'lien_dossier_autorisation_demandeur' => array(
6272     'condition_field' => 'dossier_autorisation',
6273     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
6274     ),
6275     'dossier_autorisation_parcelle' => array(
6276     'condition_field' => 'dossier_autorisation',
6277     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
6278     ),
6279     'donnees_techniques' => array(
6280     'condition_field' => 'dossier_autorisation',
6281     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
6282     ),
6283     'dossier_autorisation' => array(
6284     'condition_field' => 'dossier_autorisation',
6285     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
6286     ),
6287     );
6288     // Supprime les tables
6289     $delete = $this->delete_related_tables($related_tables);
6290     if ($delete === false) {
6291     return false;
6292     }
6293    
6294     /**
6295     * Mise à jour de la séquence.
6296     */
6297 softime 8989 $curr_da_num = $this->get_max_da_num();
6298     if (is_integer($curr_da_num) !== true) {
6299     $this->addToMessage(__('Erreur lors du calcul du numéro de dossier.'));
6300     return false;
6301     }
6302 softime 10573
6303     $seq_name = $this->get_sequence_name();
6304     if (empty($seq_name) === true) {
6305     $this->f->addToLog(sprintf('%s() : %s',
6306     __METHOD__,
6307     __("Échec de la récupération du nom de la séquence.")
6308     ), DEBUG_MODE);
6309     return false;
6310     }
6311    
6312 softime 8477 // Dans le cas de la suppression du dernier dossier d'instruction de
6313     // sa numérotation alors la séquence est supprimée
6314 softime 8989 if ($curr_da_num === 0) {
6315 softime 10573 $table_name = substr($seq_name, 0, -4);
6316 softime 8989 $res = $this->f->db->dropSequence($table_name);
6317 softime 8477 $this->f->addToLog(__METHOD__."(): db->createSequence(\"".$table_name."\");", VERBOSE_MODE);
6318     $this->f->isDatabaseError($res);
6319    
6320     } else {
6321     // La méthode setval avec la valeur true en troisième argument
6322     // signifie que le prochain nextval avancera la séquence avant
6323     // de renvoyer une valeur.
6324     $sql = sprintf("
6325     SELECT setval('%s', %s, true)",
6326 softime 10573 $seq_name,
6327 softime 8989 $curr_da_num
6328 softime 8477 );
6329     $res = $this->f->db->query($sql);
6330     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
6331     $this->f->isDatabaseError($res);
6332     }
6333     }
6334    
6335     /**
6336     * Supprime le dossier d'instruction des derniers dossiers consultés,
6337     * sauvegardé en session
6338     */
6339     if (isset($_SESSION['dossiers_consulte']) !== false) {
6340     $id_di = $this->getVal($this->clePrimaire);
6341     if (in_array($id_di, $_SESSION['dossiers_consulte']) === true) {
6342     unset($_SESSION['dossiers_consulte'][$id_di]);
6343     }
6344     // Supprime le tableau s'il n'y a plus de dossier consulté
6345     if (count($_SESSION['dossiers_consulte']) === 0) {
6346     unset($_SESSION['dossiers_consulte']);
6347     }
6348     }
6349 softime 10573
6350     /**
6351     * Gestion des tâches pour la dématérialisation
6352     */
6353     $inst_task_empty = $this->f->get_inst__om_dbform(array(
6354     "obj" => "task",
6355     "idx" => 0,
6356     ));
6357     $task_types = array(
6358     "creation_DI",
6359     "depot_DI",
6360     );
6361     foreach ($task_types as $task_type) {
6362     $task_exists = $inst_task_empty->task_exists($task_type, $id);
6363     if ($task_exists !== false) {
6364     $inst_task = $this->f->get_inst__om_dbform(array(
6365     "obj" => "task",
6366     "idx" => $task_exists,
6367     ));
6368     if ($inst_task->getVal('state') === $inst_task::STATUS_NEW || $inst_task->getVal('state') === $inst_task::STATUS_DRAFT) {
6369     $task_val = array(
6370     'state' => $inst_task::STATUS_CANCELED,
6371     );
6372     $update_task = $inst_task->update_task(array('val' => $task_val));
6373     if ($update_task === false) {
6374     $this->addToMessage(sprintf('%s %s',
6375     sprintf(__("Une erreur s'est produite lors de la modification de la tâche %."), $inst_task->getVal($inst_task->clePrimaire)),
6376     __("Veuillez contacter votre administrateur.")
6377     ));
6378     $this->correct = false;
6379     return false;
6380     }
6381     }
6382     }
6383     }
6384    
6385     return true;
6386 mbroquet 3730 }
6387 softime 8477
6388 mbroquet 3730 /**
6389 softime 8477 * TREATMENT - delete_related_tables.
6390     *
6391     * Suppression par requête SQL les enregistrements des tables passées en
6392     * paramètre.
6393     *
6394     * @param array $related_tables Liste des enregistrements à supprimer
6395     *
6396     * @return boolean
6397     */
6398     function delete_related_tables(array $related_tables) {
6399     $this->begin_treatment(__METHOD__);
6400    
6401     // Supprime chaque enregistrement liés au dossier d'instruction
6402     $template_delete_sql = 'DELETE FROM %s%s WHERE %s IN (%s)';
6403     foreach ($related_tables as $table => $value) {
6404     if (isset($value['table']) === true) {
6405     $table = $value['table'];
6406     }
6407     if ($value['condition_value'] !== '' && $value['condition_value'] !== null) {
6408     $sql = sprintf($template_delete_sql, DB_PREFIXE, $table, $value['condition_field'], $value['condition_value']);
6409     $res = $this->f->db->query($sql);
6410     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
6411     $this->f->isDatabaseError($res);
6412 softime 10573
6413     /**
6414     * Gestion des tâches pour la dématérialisation
6415     */
6416     // Annule toutes les tâches liées au dossier
6417     $inst_task_empty = $this->f->get_inst__om_dbform(array(
6418     "obj" => "task",
6419     "idx" => 0,
6420     ));
6421     $all_task_type = array_merge($inst_task_empty::TASK_TYPE_SI, $inst_task_empty::TASK_TYPE_SC);
6422     foreach ($all_task_type as $task_type) {
6423     $task_exists = $inst_task_empty->task_exists($task_type, $this->getVal($this->clePrimaire), $this->getVal($this->clePrimaire));
6424     if ($task_exists !== false) {
6425     $inst_task = $this->f->get_inst__om_dbform(array(
6426     "obj" => "task",
6427     "idx" => $task_exists,
6428     ));
6429     if ($inst_task->getVal('state') === $inst_task::STATUS_NEW || $inst_task->getVal('state') === $inst_task::STATUS_DRAFT) {
6430     $task_val = array(
6431     'state' => $inst_task::STATUS_CANCELED,
6432     );
6433     $update_task = $inst_task->update_task(array('val' => $task_val));
6434     if ($update_task === false) {
6435     $this->addToMessage(sprintf('%s %s',
6436     sprintf(__("Une erreur s'est produite lors de la modification de la tâche %."), $inst_task->getVal($inst_task->clePrimaire)),
6437     __("Veuillez contacter votre administrateur.")
6438     ));
6439     $this->correct = false;
6440     return false;
6441     }
6442     }
6443     }
6444     }
6445     // Spécifique au dossier d'autorisation
6446     if ($table === 'dossier_autorisation') {
6447     $task_exists = $inst_task_empty->task_exists('creation_DA', $this->getVal($table));
6448     if ($task_exists !== false) {
6449     $inst_task = $this->f->get_inst__om_dbform(array(
6450     "obj" => "task",
6451     "idx" => $task_exists,
6452     ));
6453     if ($inst_task->getVal('state') === $inst_task::STATUS_NEW || $inst_task->getVal('state') === $inst_task::STATUS_DRAFT) {
6454     $task_val = array(
6455     'state' => $inst_task::STATUS_CANCELED,
6456     );
6457     $update_task = $inst_task->update_task(array('val' => $task_val));
6458     if ($update_task === false) {
6459     $this->addToMessage(sprintf('%s %s',
6460     sprintf(__("Une erreur s'est produite lors de la modification de la tâche %."), $inst_task->getVal($inst_task->clePrimaire)),
6461     __("Veuillez contacter votre administrateur.")
6462     ));
6463     $this->correct = false;
6464     return false;
6465     }
6466     }
6467     }
6468     }
6469 softime 8477 }
6470     }
6471    
6472     return $this->end_treatment(__METHOD__, true);
6473     }
6474    
6475     /**
6476     * CONDITION - has_only_initial_di.
6477     *
6478     * Permet de vérifier qu'il s'agit du dossier d'instruction initial de
6479     * l'autorisation.
6480     *
6481     * @param boolean $after_delete À activer si la méthode est utilisée lors de
6482     * la suppression.
6483     *
6484     * @return boolean
6485     */
6486     function has_only_initial_di($after_delete=false) {
6487    
6488     // Compte le nombre de dossier lié au dossier d'autorisation
6489     $res = $this->get_idx_by_args('COUNT(dossier)', 'dossier', 'dossier_autorisation', $this->getVal('dossier_autorisation'));
6490    
6491     // Si la méthode est utilisé dans le triggersupprimerapres alors le
6492     // dossier d'instruction est déjà supprimé dans la base de données, le
6493     // retour doit donc être 0 pour prouver la suppression du DI initial
6494     if ($after_delete === true) {
6495     if ($res === '0') {
6496     return true;
6497     }
6498     //
6499     return false;
6500     }
6501    
6502     // S'il y a qu'un seul dossier d'instruction alors le DI courant est
6503     // forcément l'initial
6504     if ($res === '1') {
6505     return true;
6506     }
6507     //
6508     return false;
6509     }
6510    
6511     /**
6512     * Récupère la dernière valeur d'une séquence.
6513     *
6514     * @param string $sequence_name Nom de la séquence (optionnel)
6515     *
6516     * @return integer Dernière valeur de la séquence
6517     */
6518     function get_last_value_sequence($sequence_name=null) {
6519     // Récupère autoamtiquement le nom de la séquence du dossier
6520     // d'instruction courant
6521     if ($sequence_name === null) {
6522     $sequence_name = $this->get_sequence_name();
6523 softime 10573
6524     if (empty($sequence_name) === true) {
6525     $this->f->addToLog(sprintf('%s() : %s',
6526     __METHOD__,
6527     __("Échec de la récupération du nom de la séquence.")
6528     ), DEBUG_MODE);
6529     return false;
6530     }
6531 softime 8477 }
6532    
6533     $sql = sprintf(
6534     "SELECT last_value FROM %s",
6535 softime 10573 $sequence_name
6536 softime 8477 );
6537     $res = $this->f->db->getOne($sql);
6538     $this->f->isDatabaseError($res);
6539    
6540     return intval($res);
6541     }
6542    
6543     /**
6544 softime 8989 * [get_max_da_num description]
6545     * @param [type] $sequence_name [description]
6546     * @return [type] [description]
6547     */
6548     function get_max_da_num($sequence_name = null) {
6549     if ($sequence_name === null) {
6550     $sequence_name = $this->get_sequence_name();
6551     }
6552     $da = $this->f->get_inst__om_dbform(array(
6553     "obj" => "dossier_autorisation",
6554     "idx" => $this->getVal('dossier_autorisation'),
6555     ));
6556     if ($da->doesNumeroDossierSequenceExists($sequence_name) !== true) {
6557     return false;
6558     }
6559     $sequence_args = $this->get_sequence_args();
6560     return $da->getMaxDANumeroDossier($sequence_args['datc'], $sequence_args['annee'], $sequence_args['dep'], $sequence_args['com']);
6561     }
6562    
6563     /**
6564 mbroquet 3730 * Retourne la reference cadastrale de la demande attache a un dossier ERP
6565     * specifique
6566     * @param string $dossier L'identifiant du dossier
6567     * @return string|null La reference cadastrale si elle est trouve,
6568     * sinon NULL. En cas d'erreur de la BD, l'execution s'arrete.
6569     */
6570     function getReferenceCadastrale($dossier) {
6571     $sql = "SELECT terrain_references_cadastrales FROM ".DB_PREFIXE."demande WHERE dossier_instruction = '" . $dossier . "'";
6572 softime 8989 $res = $this->f->db->limitquery($sql, 0, 1);
6573 mbroquet 3730 $this->addToLog("getReferenceCadastrale(): db->limitquery(\"".
6574     str_replace(",",", ",$sql)."\", 0, 1);", VERBOSE_MODE);
6575     // Si une erreur survient on die
6576     if (database::isError($res, true)) {
6577     // Appel de la methode de recuperation des erreurs
6578     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), 'demande');
6579     }
6580     // retourne la nature du dossier
6581     while ($row =& $res->fetchRow()) {
6582     return $row[0];
6583     }
6584     // la nature n'etait pas trouve, ce qui ne devrait pas se passer
6585     return NULL;
6586     }
6587    
6588     /**
6589 softime 6565 * Supprime puis recrée tous les liens entre dossier et demandeurs
6590 mbroquet 3730 **/
6591 softime 8989 function insertLinkDossierDemandeur() {
6592 softime 6565 // Suppression des anciens demandeurs
6593 softime 8989 $this->deleteLinkDossierDemandeur();
6594 softime 6565 $types_demandeur = array(
6595     "petitionnaire_principal",
6596     "delegataire",
6597     "petitionnaire",
6598     "plaignant_principal",
6599     "plaignant",
6600     "contrevenant_principal",
6601     "contrevenant",
6602     "requerant_principal",
6603     "requerant",
6604     "avocat_principal",
6605     "avocat",
6606 softime 7067 "bailleur_principal",
6607     "bailleur",
6608 softime 10573 "proprietaire",
6609     "architecte_lc",
6610     "paysagiste",
6611 softime 6565 );
6612     foreach ($types_demandeur as $type) {
6613     // Comparaison des autres demandeurs
6614     if(isset($this->postedIdDemandeur[$type]) === true) {
6615     // Ajout des nouveaux liens
6616     foreach ($this->postedIdDemandeur[$type] as $demandeur) {
6617     //
6618     $principal = false;
6619     if (strpos($type, '_principal') !== false) {
6620     $principal = true;
6621     }
6622 softime 8989 if ($this->addLinkDossierDemandeur($demandeur, $principal) === false) {
6623 softime 6565 //
6624     return false;
6625     }
6626     }
6627 mbroquet 3730 }
6628     }
6629     }
6630    
6631    
6632     /**
6633     * Fonction permettant d'ajouter un lien
6634 softime 6565 * entre la table dossier et demandeur
6635 mbroquet 3730 **/
6636 softime 8989 function addLinkDossierDemandeur($id, $principal) {
6637 softime 7996 $lienAjout = $this->f->get_inst__om_dbform(array(
6638     "obj" => "lien_dossier_demandeur",
6639     "idx" => "]",
6640     ));
6641 mbroquet 3730 $lien = array('lien_dossier_demandeur' => "",
6642     'petitionnaire_principal' => (($principal)?"t":"f"),
6643     'dossier' => $this->valF['dossier'],
6644     'demandeur' => $id);
6645 softime 8989 $lienAjout->ajouter($lien);
6646 mbroquet 3730 $lienAjout->__destruct();
6647     }
6648    
6649     /**
6650     * Fonction permettant de supprimer un lien
6651     * entre la table demande et demandeur
6652     **/
6653 softime 8989 function deleteLinkDossierDemandeur() {
6654 mbroquet 3730 // Suppression
6655     $sql = "DELETE FROM ".DB_PREFIXE."lien_dossier_demandeur ".
6656     "WHERE dossier='".$this->valF['dossier']."'";
6657     // Execution de la requete de suppression de l'objet
6658 softime 8989 $res = $this->f->db->query($sql);
6659 mbroquet 3730 // Logger
6660 softime 6565 $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
6661 mbroquet 3730 if ( database::isError($res)){
6662     die();
6663     }
6664     }
6665    
6666     /**
6667     * Methode de recupération des valeurs postées
6668     **/
6669     function getPostedValues() {
6670     // Récupération des demandeurs dans POST
6671 softime 6565 $types_demandeur = array(
6672     "petitionnaire_principal",
6673     "delegataire",
6674     "petitionnaire",
6675     "plaignant_principal",
6676     "plaignant",
6677     "contrevenant_principal",
6678     "contrevenant",
6679     "requerant_principal",
6680     "requerant",
6681     "avocat_principal",
6682     "avocat",
6683 softime 7067 "bailleur_principal",
6684     "bailleur",
6685 softime 10573 "proprietaire",
6686     "architecte_lc",
6687     "paysagiste",
6688 softime 6565 );
6689     foreach ($types_demandeur as $type) {
6690     if($this->f->get_submitted_post_value($type) !== null AND
6691     $this->f->get_submitted_post_value($type) != '') {
6692     $this->postedIdDemandeur[$type] = $this->f->get_submitted_post_value($type);
6693 mbroquet 3730 }
6694     }
6695     }
6696    
6697     /**
6698     * Méthode permettant de récupérer les id des demandeurs liés à la table
6699     * liée passée en paramètre
6700     *
6701     * @param string $from Table liée : "demande", "dossier", dossier_autorisation"
6702     * @param string $id Identifiant (clé primaire de la table liée en question)
6703     */
6704     function listeDemandeur($from, $id) {
6705 softime 6565
6706     // Si la donnée membre a déjà été remplie par un précédent appel à cette méthode,
6707     // on sort.
6708     if ($this->valIdDemandeur["petitionnaire_principal"] !== array() or
6709     $this->valIdDemandeur["delegataire"] !== array() or
6710     $this->valIdDemandeur["petitionnaire"] !== array() or
6711     $this->valIdDemandeur["plaignant_principal"] !== array() or
6712     $this->valIdDemandeur["plaignant"] !== array() or
6713     $this->valIdDemandeur["contrevenant_principal"] !== array() or
6714     $this->valIdDemandeur["contrevenant"] !== array() or
6715     $this->valIdDemandeur["requerant_principal"] !== array() or
6716     $this->valIdDemandeur["requerant"] !== array() or
6717     $this->valIdDemandeur["avocat_principal"] !== array() or
6718 softime 7067 $this->valIdDemandeur["avocat"] !== array() or
6719     $this->valIdDemandeur["bailleur_principal"] !== array() or
6720 softime 10573 $this->valIdDemandeur["bailleur"] !== array() or
6721     $this->valIdDemandeur["proprietaire"] !== array() or
6722     $this->valIdDemandeur["architecte_lc"] !== array() or
6723     $this->valIdDemandeur["paysagiste"] !== array()) {
6724 softime 6565 return;
6725     }
6726    
6727 mbroquet 3730 // Récupération des demandeurs de la base
6728     $sql = "SELECT demandeur.demandeur,
6729     demandeur.type_demandeur,
6730     lien_".$from."_demandeur.petitionnaire_principal
6731     FROM ".DB_PREFIXE."lien_".$from."_demandeur
6732     INNER JOIN ".DB_PREFIXE."demandeur
6733     ON demandeur.demandeur=lien_".$from."_demandeur.demandeur
6734     WHERE ".$from." = '".$id."'";
6735     $res = $this->f->db->query($sql);
6736     $this->f->addToLog("listeDemandeur(): db->query(\"".$sql."\")", VERBOSE_MODE);
6737 softime 6565 $this->f->isDatabaseError($res);
6738    
6739 mbroquet 3730 // Stockage du résultat dans un tableau
6740     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
6741 softime 6565
6742     $demandeur_type = $row['type_demandeur'];
6743     if ($row['petitionnaire_principal'] == 't'){
6744     $demandeur_type .= "_principal";
6745 mbroquet 3730 }
6746 softime 6565 $this->valIdDemandeur[$demandeur_type][] = $row['demandeur'];
6747 mbroquet 3730 }
6748     }
6749    
6750     /**
6751     * Récupère la liste des contraintes d'un dossier.
6752     *
6753 softime 4740 * @param string $dossier Identifiant du dossier.
6754     * @param boolean $for_di_view Liste avec condition affichage DI.
6755     *
6756 mbroquet 3730 * @return object Résultat de la requête
6757     */
6758 softime 4740 function getListContrainte($dossier, $for_di_view = true) {
6759 mbroquet 3730
6760     // Select
6761     $select = "SELECT dossier_contrainte.dossier_contrainte as dossier_contrainte_id,
6762     dossier_contrainte.texte_complete as dossier_contrainte_texte,
6763     dossier_contrainte.reference as dossier_contrainte_reference,
6764     contrainte.libelle as contrainte_libelle,
6765     contrainte.nature as contrainte_nature,
6766     contrainte.texte as contrainte_texte,
6767     contrainte.reference as contrainte_reference,
6768     lower(contrainte.groupe) as contrainte_groupe,
6769     lower(contrainte.sousgroupe) as contrainte_sousgroupe ";
6770    
6771     // From
6772     $from = " FROM ".DB_PREFIXE."contrainte
6773     LEFT JOIN ".DB_PREFIXE."dossier_contrainte
6774     ON dossier_contrainte.contrainte = contrainte.contrainte ";
6775    
6776     // Where
6777     $where = " WHERE dossier_contrainte.dossier = '".$dossier."' ";
6778    
6779 softime 4740 // Si les contraintes sont listées pour être affichées dans le DI
6780     if ($for_di_view === true) {
6781     // Si le paramètre "option_contrainte_di" est défini
6782     if ($this->f->getParameter('option_contrainte_di') != 'aucun') {
6783     // Ajoute la condition
6784     $where .= $this->f->traitement_condition_contrainte(
6785     $this->f->getParameter('option_contrainte_di'));
6786     }
6787 mbroquet 3730 }
6788    
6789     // Tri
6790     $tri = " ORDER BY contrainte_groupe DESC, contrainte_sousgroupe,
6791     contrainte.no_ordre, contrainte.libelle ";
6792    
6793     // Requête SQL
6794     $sql = $select.$from.$where.$tri;
6795     $res = $this->f->db->query($sql);
6796     $this->f->addToLog("listContrainte(): db->query(\"".$sql."\");", VERBOSE_MODE);
6797     $this->f->isDatabaseError($res);
6798    
6799     // Retourne le résultat
6800     return $res;
6801     }
6802    
6803     /**
6804     * Ajout de la liste des contraintes et des demandeurs
6805     */
6806     function formSpecificContent($maj) {
6807    
6808 softime 8477 // Récupère le CRUD
6809     $crud = $this->get_action_crud($this->getParameter("maj"));
6810    
6811     // Les contenus spécifiques ne sont pas affichés en cas de suppression
6812     if ($crud === 'delete') {
6813     return;
6814     }
6815    
6816 mbroquet 3730 /**
6817 softime 10573 * Liste des identifiants externes
6818     */
6819     //
6820     if ($this->f->is_option_dossier_commune_enabled() !== true
6821     || ($this->f->is_option_dossier_commune_enabled() === true
6822     && $this->getVal('depot_electronique') === 't')) {
6823     //
6824     $template_label = '<label for="%1$s" class="libelle-%1$s" id="lib-%1$s">%2$s</label>';
6825     $template_value = '<span class="field_value" id="%s">%s</span>';
6826     $inst_liiue = $this->f->get_inst__om_dbform(array(
6827     "obj" => "lien_id_interne_uid_externe",
6828     "idx" => 0,
6829     ));
6830     $external_uids = $inst_liiue->get_all_lien_id_interne_uid_externe_by_dossier($this->getVal('dossier'));
6831     if ($external_uids === false) {
6832     printf('<span class="col_12">%s %s</span>',
6833     __("Impossible d'afficher la liste des identifiants externes liés à ce dossier."),
6834     __("Veuillez contacter votre administrateur.")
6835     );
6836     }
6837     if (is_array($external_uids) === true && count($external_uids) > 0) {
6838     $this->f->layout->display_formulaire_debutFieldset(array(
6839     "identifier" => "fieldset-form-dossier_instruction-lien_id_interne_uid_externe",
6840     "action2" => "col_12 startClosed",
6841     "action1" => __("Plat'AU : identifiants techniques"),
6842     ));
6843     foreach ($external_uids as $external_uid) {
6844     $object = $external_uid['object'];
6845     if ($external_uid['object'] === 'dossier_consultation') {
6846     $object = 'Consultation';
6847     }
6848     if ($external_uid['object'] === 'pec_dossier_consultation') {
6849     $object = 'PeC';
6850     }
6851     if ($external_uid['object'] === 'avis_dossier_consultation') {
6852     $object = 'Avis';
6853     }
6854     $this->f->layout->display_formulaire_conteneur_libelle_widget("statiq");
6855     $this->f->layout->display_formulaire_conteneur_libelle_champs();
6856     printf($template_label,
6857     sprintf('%s-%s', $inst_liiue->table, $external_uid['lien_id_interne_uid_externe']),
6858     __($object)
6859     );
6860     $this->f->layout->display_formulaire_fin_conteneur_champs();
6861     $this->f->layout->display_formulaire_conteneur_champs();
6862     printf($template_value,
6863     sprintf('%s-%s', $inst_liiue->table, $external_uid['lien_id_interne_uid_externe']),
6864     $external_uid['external_uid']
6865     );
6866     $this->f->layout->display_formulaire_fin_conteneur_champs();
6867     $this->f->layout->display_formulaire_fin_conteneur_champs();
6868     }
6869     $this->f->layout->display_formulaire_finFieldset(array());
6870     }
6871     }
6872    
6873     /**
6874 mbroquet 3730 * Liste des contraintes
6875     */
6876     //
6877     $listContrainte = $this->getListContrainte($this->getVal('dossier'));
6878    
6879     // Si le dossier possède des contraintes
6880     if ($listContrainte->numRows() != 0) {
6881    
6882     // Affiche du fieldset
6883     printf("<div id=\"liste_contrainte\" class=\"demande_hidden_bloc\">");
6884     printf("<fieldset class=\"cadre ui-corner-all ui-widget-content col_12 startClosed\">");
6885     printf(" <legend class=\"ui-corner-all ui-widget-content ui-state-active\"
6886     id =\"fieldset_contraintes_liees\">"
6887     ._("dossier_contrainte")."</legend>");
6888     printf("<div class=\"fieldsetContent\" style=\"display: none;\">");
6889    
6890     // Entête pour le groupe
6891     $groupeHeader = "
6892     <div class='dossier_contrainte_groupe'>
6893     <div class='dossier_contrainte_groupe_header'>
6894     <span class='name'>
6895     %s
6896     </span>
6897     </div>
6898     ";
6899    
6900     // Entête pour le sous-groupe
6901     $sousgroupeHeader = "
6902     <div class='dossier_contrainte_sousgroupe'>
6903     <div class='dossier_contrainte_sousgroupe_header'>
6904     <span class='name'>
6905     %s
6906     </span>
6907     </div>
6908     ";
6909    
6910     // Titres des colonnes
6911     $tableHeader = "
6912     <thead>
6913     <tr class='ui-tabs-nav ui-accordion ui-state-default tab-title'>
6914     <th class='title col-0 firstcol contrainte_th_texte_complete'>
6915     <span class='name'>
6916     "._('texte_complete')."
6917     </span>
6918     </th>
6919     <th class='title col-1 contrainte_th_reference'>
6920     <span class='name'>
6921     "._('reference')."
6922     </span>
6923     </th>
6924     <th class='title col-2 contrainte_th_nature'>
6925     <span class='name'>
6926     "._('nature')."
6927     </span>
6928     </th>
6929     </tr>
6930     </thead>
6931     ";
6932    
6933     // Ligne de données
6934     $line = "
6935     <tr class='tab-data %s'>
6936     <td class='col-0 firstcol contrainte_th_texte_complete'>
6937     %s
6938     </td>
6939     <td class='col-1 contrainte_th_reference'>
6940     %s
6941     </td>
6942     <td class='col-2 contrainte_th_nature'>
6943     %s
6944     </td>
6945     ";
6946    
6947     // Sauvegarde des données pour les comparer
6948     $lastRow = array();
6949     $lastRow['contrainte_groupe'] = 'empty';
6950     $lastRow['contrainte_sousgroupe'] = 'empty';
6951    
6952     // Tant qu'il y a des résultats
6953     while($row = &$listContrainte->fetchRow(DB_FETCHMODE_ASSOC)) {
6954     // Si l'identifiant du groupe de la contrainte présente et
6955     // celle d'avant est différent
6956     if ($row['contrainte_groupe'] != $lastRow['contrainte_groupe']) {
6957    
6958     // Si l'identifiant du groupe d'avant est vide
6959     if ($lastRow['contrainte_groupe'] != 'empty') {
6960     // Ferme le tableau
6961     printf("</table>");
6962     // Ferme le div
6963     printf("</div>");
6964     // Ferme le div
6965     printf("</div>");
6966     }
6967    
6968     // Affiche le header du groupe
6969     printf($groupeHeader, $row['contrainte_groupe']);
6970     }
6971    
6972     // Si l'identifiant du sous-groupe de la contrainte présente et
6973     // celle d'avant est différent
6974     // Ou qu'ils soient identique mais n'appartiennent pas au même groupe
6975     if ($row['contrainte_sousgroupe'] != $lastRow['contrainte_sousgroupe']
6976     || ($row['contrainte_sousgroupe'] == $lastRow['contrainte_sousgroupe']
6977     && $row['contrainte_groupe'] != $lastRow['contrainte_groupe'])) {
6978    
6979     //
6980     if($row['contrainte_groupe'] == $lastRow['contrainte_groupe']) {
6981     // Si l'identifiant de la sous-groupe d'avant est vide
6982     if ($lastRow['contrainte_sousgroupe'] != 'empty') {
6983     // Ferme le tableau
6984     printf("</table>");
6985     // Ferme le div
6986     printf("</div>");
6987     }
6988     }
6989    
6990     // Affiche le header du sous-groupe
6991     printf($sousgroupeHeader, $row['contrainte_sousgroupe']);
6992    
6993     // Ouvre le tableau
6994     printf("<table id='sousgroupe_".$row['contrainte_sousgroupe']."' class='tab-tab dossier_contrainte_view'>");
6995    
6996     // Affiche le header des données
6997     printf($tableHeader);
6998    
6999     // Définis le style des lignes
7000     $style = 'odd';
7001     }
7002    
7003     // Si toujours dans la même groupe et même sous-groupe,
7004     // on change le style de la ligne
7005     if ($row['contrainte_groupe'] == $lastRow['contrainte_groupe']
7006     && $row['contrainte_sousgroupe'] == $lastRow['contrainte_sousgroupe']) {
7007     // Définis le style
7008     $style = ($style=='even')?'odd':'even';
7009     }
7010    
7011     // Affiche "Oui" ou "Non" pour le bouléen
7012     if ($row['dossier_contrainte_reference'] == 1
7013     || $row['dossier_contrainte_reference'] == "t"
7014     || $row['dossier_contrainte_reference'] == "Oui") {
7015     //
7016     $contrainte_reference = "Oui";
7017     } else {
7018     //
7019     $contrainte_reference = "Non";
7020     }
7021    
7022     // Affiche les données
7023     printf($line, $style,
7024     $row['dossier_contrainte_texte'],
7025     $contrainte_reference,
7026     $row['contrainte_nature']
7027     );
7028    
7029     // Sauvegarde les données
7030     $lastRow['contrainte_groupe'] = $row['contrainte_groupe'];
7031     $lastRow['contrainte_sousgroupe'] = $row['contrainte_sousgroupe'];
7032    
7033     }
7034     // Ferme le tableau
7035     printf("</table>");
7036     // Ferme le sous-groupe
7037     printf("</div>");
7038     // Ferme le groupe
7039     printf("</div>");
7040    
7041     printf("</div>");
7042    
7043     printf("<div class=\"visualClear\"></div>");
7044     // Ferme le fieldset content
7045     printf("</div>");
7046     printf("</fieldset>");
7047     }
7048     /**
7049     * Fin Liste des contraintes
7050     */
7051    
7052     /**
7053     * Liste des demandeurs
7054     */
7055 softime 6565 // Tableau des demandeurs selon le contexte
7056     $listeDemandeur = $this->valIdDemandeur;
7057     /**
7058     * Gestion du bloc des demandeurs
7059     */
7060     // Si le mode est (modification ou suppression ou consultation) ET que
7061     // le formulaire n'est pas correct (c'est-à-dire que le formulaire est
7062     // actif)
7063     if ($this->correct !== true AND
7064 softime 7996 $this->getParameter('validation') == 0 AND
7065     $this->getParameter("maj") != 0) {
7066 softime 6565 // Alors on récupère les demandeurs dans la table lien pour
7067     // affectation des résultats dans $this->valIdDemandeur
7068     $this->listeDemandeur("dossier", $this->getval($this->clePrimaire));
7069     $listeDemandeur = $this->valIdDemandeur;
7070     }
7071 mbroquet 3730
7072 softime 6565 // Récupération des valeurs postées
7073 softime 7996 if ($this->getParameter('validation') != 0) {
7074 softime 6565 $listeDemandeur = $this->postedIdDemandeur;
7075     }
7076    
7077     // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
7078     // correct (c'est-à-dire que le formulaire est actif)
7079     if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
7080     // Alors on positionne le marqueur linkable a true qui permet
7081     // d'afficher ou non les actions de gestion des demandeurs
7082 mbroquet 3730 $linkable = true;
7083     } else {
7084 softime 6565 // Sinon on positionne le marqueur linkable a false qui permet
7085     // d'afficher ou non les actions de gestion des demandeurs
7086 mbroquet 3730 $linkable = false;
7087     }
7088 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
7089     // Pour les dossiers contentieux, il faut un droit spécifique pour visualiser le
7090     // fieldset "Demandeurs"
7091 softime 10573 if (($affichage_form === 'ADS' || $affichage_form === 'DPC' || $affichage_form === 'CONSULTATION ENTRANTE')
7092 softime 6565 OR ($affichage_form === 'CTX RE' AND $this->f->isAccredited('dossier_contentieux_recours_afficher_demandeurs') === true)
7093     OR ($affichage_form === 'CTX IN' AND $this->f->isAccredited('dossier_contentieux_infractions_afficher_demandeurs') === true)) {
7094 mbroquet 3730
7095 softime 6565 // Conteneur de la listes des demandeurs
7096     echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">";
7097     echo "<fieldset id=\"fieldset-form-dossier_instruction-demandeur\" class=\"cadre ui-corner-all ui-widget-content startClosed\">";
7098     echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">"
7099     ._("Demandeurs")."</legend>";
7100     echo "<div class=\"fieldsetContent\" style=\"display: none;\">";
7101 mbroquet 3730
7102 softime 6565
7103     // Pour les DI avec DA visible, dans tous les modes excepté en ajout et si l'option d'accès au
7104     // portail citoyen est activée
7105 mbroquet 3730 $inst_da = $this->get_inst_dossier_autorisation();
7106 softime 6565 if ($this->getParameter("maj") != 0
7107     && $this->f->is_option_citizen_access_portal_enabled() === true
7108     && $inst_da->is_dossier_autorisation_visible() === true) {
7109     // Instance du dossier d'autorisation
7110     //
7111     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'));
7112     }
7113     // Sélection des demandeur à afficher en fonction du paramétrage du type
7114     // du dossier d'autorisation.
7115     switch ($affichage_form) {
7116     case 'ADS':
7117 softime 10573 case 'CONSULTATION ENTRANTE':
7118 softime 6565 $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
7119     break;
7120     case 'CTX RE':
7121     $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
7122     $this->display_demandeur_requerant_avocat($listeDemandeur);
7123     break;
7124     case 'CTX IN':
7125     $this->display_demandeur_plaignant_contrevenant($listeDemandeur);
7126     break;
7127 softime 7067 case 'DPC':
7128     $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
7129     $this->display_demandeur_petitionnaire_delegataire_bailleur($listeDemandeur);
7130     break;
7131 softime 6565 }
7132 mbroquet 3730
7133     }
7134    
7135     echo "</fieldset>";
7136     echo "</div>";
7137     /**
7138     * Fin liste des demandeurs
7139     */
7140 fmichon 4708
7141     /**
7142     * Interface avec le référentiel ERP.
7143     *
7144     * On affiche le message uniquement si le dossier est connecté.
7145     */
7146 softime 6565 if ($this->getParameter('maj') == 3 && $this->is_connected_to_referentiel_erp() === true) {
7147 fmichon 4708 //
7148     printf(
7149     '<div class="col_12">
7150     Ce dossier est connecté au référentiel ERP.
7151     </div>'
7152     );
7153     }
7154    
7155 mbroquet 3730 }
7156    
7157     /**
7158 softime 6565 * Affiche le bloc d'affichage des demandeurs pour dossiers ADS avec actions.
7159     *
7160     * @param array $listeDemandeur Liste des demandeurs.
7161     */
7162     function display_demandeur_petitionnaire_delegataire($listeDemandeur) {
7163    
7164     // Affichage du bloc pétitionnaire principal / délégataire
7165     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7166     echo "<div id=\"petitionnaire_principal_delegataire\">";
7167     // Affichage de la synthèse du pétitionnaire principal
7168     $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire_principal");
7169     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7170     echo "<div id=\"delegataire\">";
7171     // Affichage de la synthèse du délégataire
7172     $this->displaySyntheseDemandeur($listeDemandeur, "delegataire");
7173     echo "</div>";
7174 softime 10573 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7175     echo "<div id=\"proprietaire\">";
7176     // Affichage de la synthèse du délégataire
7177     $this->displaySyntheseDemandeur($listeDemandeur, "proprietaire");
7178     echo "</div>";
7179     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7180     echo "<div id=\"architecte_lc\">";
7181     // Affichage de la synthèse du délégataire
7182     $this->displaySyntheseDemandeur($listeDemandeur, "architecte_lc");
7183     echo "</div>";
7184     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7185     echo "<div id=\"paysagiste\">";
7186     // Affichage de la synthèse du délégataire
7187     $this->displaySyntheseDemandeur($listeDemandeur, "paysagiste");
7188     echo "</div>";
7189 softime 6565 echo "<div class=\"both\"></div>";
7190     echo "</div>";
7191     // Bloc des pétitionnaires secondaires
7192     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7193     echo "<div id=\"listePetitionnaires\">";
7194     $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire");
7195     echo "</div>";
7196     }
7197    
7198     /**
7199     * Affiche le bloc d'affichage des demandeurs pour dossiers CTX recours
7200     * avec actions.
7201     *
7202     * @param array $listeDemandeur Liste des demandeurs.
7203     */
7204     function display_demandeur_plaignant_contrevenant($listeDemandeur) {
7205    
7206     echo "<div id=\"plaignant_contrevenant\">";
7207     // Affichage du bloc contrevenant
7208     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7209     echo "<div id=\"listeContrevenants\" class=\"col_12\">";
7210     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7211     echo "<div id=\"contrevenant_principal\">";
7212     // Affichage de la synthèse
7213     $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant_principal");
7214     echo "</div>";
7215     echo "<div id=\"listeAutresContrevenants\">";
7216     // Affichage de la synthèse
7217     $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant");
7218     echo "</div>";
7219     echo "</div>";
7220     // Affichage du bloc plaignant
7221     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7222     echo "<div id=\"listePlaignants\" class=\"col_12\">";
7223     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7224     echo "<div id=\"plaignant_principal\">";
7225     // Affichage de la synthèse
7226     $this->displaySyntheseDemandeur($listeDemandeur, "plaignant_principal");
7227     echo "</div>";
7228     echo "<div id=\"listeAutresPlaignants\">";
7229     $this->displaySyntheseDemandeur($listeDemandeur, "plaignant");
7230     echo "</div>";
7231     echo "</div>";
7232     echo "</div>";
7233    
7234     }
7235    
7236     /**
7237     * Affiche le bloc d'affichage des demandeurs pour dossiers CTX infraction
7238     * avec actions.
7239     *
7240     * @param array $listeDemandeur Liste des demandeurs.
7241     */
7242     function display_demandeur_requerant_avocat($listeDemandeur) {
7243     echo "<div id=\"requerant_avocat\">";
7244     // Affichage du bloc requérant
7245     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7246     echo "<div id=\"listeRequerants\" class=\"col_12\">";
7247     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7248     echo "<div id=\"requerant_principal\">";
7249     // Affichage de la synthèse
7250     $this->displaySyntheseDemandeur($listeDemandeur, "requerant_principal");
7251     echo "</div>";
7252     echo "<div id=\"listeAutresRequerants\">";
7253     $this->displaySyntheseDemandeur($listeDemandeur, "requerant");
7254     echo "</div>";
7255     echo "</div>";
7256     // Affichage du bloc avocat
7257     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7258     echo "<div id=\"listeAvocat\" class=\"col_12\">";
7259     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7260     echo "<div id=\"avocat_principal\">";
7261     $this->displaySyntheseDemandeur($listeDemandeur, "avocat_principal");
7262     echo "</div>";
7263     echo "<div id=\"listeAutresAvocats\">";
7264     $this->displaySyntheseDemandeur($listeDemandeur, "avocat");
7265     echo "</div>";
7266     echo "</div>";
7267     echo "</div>";
7268     echo "</fieldset>";
7269     // Champ flag permettant de récupérer la valeur de l'option sig pour
7270     // l'utiliser en javascript, notamment lors du chargement de l'interface
7271     // pour les références cadastrales
7272     // XXX Si un widget pour les références cadastrales existait, il n'y
7273     // aurait pas besoin de faire cela
7274     echo "<input id='option_sig' type='hidden' value='".$this->f->getParameter("option_sig")."' name='option_sig'>";
7275     echo "</div>";
7276     }
7277    
7278    
7279 softime 7067 /**
7280     * Affiche le bloc d'affichage des demandeurs pour dossiers DPC avec actions.
7281     *
7282     * @param array $listeDemandeur Liste des demandeurs.
7283     */
7284     function display_demandeur_petitionnaire_delegataire_bailleur($listeDemandeur) {
7285    
7286     // Affichage du bloc pétitionnaire principal / délégataire / bailleur
7287     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7288     echo "<div id=\"petitionnaire_principal_delegataire_bailleur\">";
7289     // Doit être utilisé avec la div petitionnaire_principal_delegataire
7290     echo "<div id=\"listeBailleurs\" class=\"col_12\">";
7291     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7292     echo "<div id=\"bailleur_principal\">";
7293     // Affichage de la synthèse
7294     $this->displaySyntheseDemandeur($listeDemandeur, "bailleur_principal");
7295     echo "</div>";
7296     echo "<div id=\"listeAutresBailleurs\">";
7297     $this->displaySyntheseDemandeur($listeDemandeur, "bailleur");
7298     echo "</div>";
7299     echo "</div>";
7300     echo "</div>";
7301     }
7302    
7303    
7304 softime 6565 function displaySyntheseDemandeur($listeDemandeur, $type) {
7305     // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
7306     // correct (c'est-à-dire que le formulaire est actif)
7307     if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
7308     // Alors on positionne le marqueur linkable a true qui permet
7309     // d'afficher ou non les actions de gestion des demandeurs
7310     $linkable = true;
7311     } else {
7312     // Sinon on positionne le marqueur linkable a false qui permet
7313     // d'afficher ou non les actions de gestion des demandeurs
7314     $linkable = false;
7315     }
7316     // Récupération du type de demandeur pour l'affichage
7317     switch ($type) {
7318     case 'petitionnaire_principal':
7319     $legend = _("Petitionnaire principal");
7320     break;
7321    
7322     case 'delegataire':
7323     $legend = _("Autre correspondant");
7324     break;
7325    
7326     case 'petitionnaire':
7327     $legend = _("Petitionnaire");
7328     break;
7329    
7330     case 'contrevenant_principal':
7331     $legend = _("Contrevenant principal");
7332     break;
7333    
7334     case 'contrevenant':
7335     $legend = _("Autre contrevenant");
7336     break;
7337    
7338     case 'plaignant_principal':
7339     $legend = _("Plaignant principal");
7340     break;
7341    
7342     case 'plaignant':
7343     $legend = _("Autre plaignant");
7344     break;
7345    
7346     case 'requerant_principal':
7347     $legend = _("Requérant principal");
7348     break;
7349    
7350     case 'requerant':
7351     $legend = _("Autre requérant");
7352     break;
7353    
7354     case 'avocat_principal':
7355     $legend = _("Avocat principal");
7356     break;
7357    
7358     case 'avocat':
7359     $legend = _("Autre avocat");
7360     break;
7361 softime 7067
7362     case 'bailleur_principal':
7363     $legend = _("Bailleur principal");
7364     break;
7365    
7366     case 'bailleur':
7367     $legend = _("Bailleur");
7368     break;
7369 softime 10573
7370     case 'proprietaire':
7371     $legend = __("Propriétaire");
7372     break;
7373    
7374     case 'architecte_lc':
7375     $legend = __("Architecte législation connexe");
7376     break;
7377    
7378     case 'paysagiste':
7379     $legend = __("Concepteur-Paysagiste");
7380     break;
7381 softime 6565 }
7382     foreach ($listeDemandeur[$type] as $demandeur_id) {
7383     $obj = str_replace('_principal', '', $type);
7384 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
7385     "obj" => $obj,
7386     "idx" => $demandeur_id,
7387     ));
7388 softime 6565 $demandeur -> afficherSynthese($type, $linkable);
7389     $demandeur -> __destruct();
7390     }
7391     // Si en édition de formulaire
7392     if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
7393     // Bouton d'ajout du avocat
7394     // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
7395     echo "<a id=\"add_".$type."\"
7396     class=\"om-form-button add-16\">".
7397     $legend.
7398     "</a>";
7399     }
7400     }
7401     /**
7402 mbroquet 3730 * Retourne le statut du dossier
7403     * @return string Le statut du dossier d'instruction
7404     */
7405     function getStatut(){
7406    
7407     $statut = '';
7408    
7409     $etat = $this->getVal("etat");
7410     //Si l'état du dossier d'instruction n'est pas vide
7411     if ( $etat != '' ){
7412    
7413     $sql = "SELECT statut
7414     FROM ".DB_PREFIXE."etat
7415 softime 9282 WHERE etat ='".$etat."'";
7416 softime 8989 $statut = $this->f->db->getOne($sql);
7417 mbroquet 3730 $this->f->addToLog("getStatut() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
7418     if ( database::isError($statut, true)){
7419     die();
7420     }
7421     }
7422     return $statut;
7423     }
7424 softime 5024
7425 mbroquet 3730 /**
7426 softime 5024 * Retourne le dernier événement lié au dossier instancié
7427     *
7428     * @return [string] ID du dernier événement
7429     */
7430     function get_dernier_evenement() {
7431     $sql = "SELECT max(instruction)
7432     FROM ".DB_PREFIXE."instruction
7433     WHERE dossier = '".$this->getVal($this->clePrimaire)."'";
7434 softime 8989 $id_dernier_evenement = $this->f->db->getOne($sql);
7435 softime 5024 $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
7436     $this->f->isDatabaseError($id_dernier_evenement);
7437     return $id_dernier_evenement;
7438     }
7439    
7440     /**
7441 mbroquet 3730 * Retourne l'identifiant du rapport d'instruction lié du dossier
7442     * @return string L'identifiant du rapport d'instruction lié du dossier
7443     */
7444 softime 6565 function getRapportInstruction() {
7445 mbroquet 3730
7446 softime 7366 $rapport_instruction = null;
7447 mbroquet 3730
7448     $sql = "SELECT rapport_instruction
7449     FROM ".DB_PREFIXE."rapport_instruction
7450     WHERE dossier_instruction ='".$this->getVal($this->clePrimaire)."'";
7451 softime 8989 $rapport_instruction = $this->f->db->getOne($sql);
7452 softime 7366 $this->f->addToLog(__METHOD__."() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
7453     $this->f->isDatabaseError($rapport_instruction);
7454 mbroquet 3730
7455     return $rapport_instruction;
7456     }
7457    
7458     /**
7459     * Retourne l'identifiant des données techniques liées du dossier
7460     * @return string L'identifiant des données techniques liées du dossier
7461     */
7462 softime 6565 function getDonneesTechniques() {
7463 mbroquet 3730
7464     $donnees_techniques = '';
7465    
7466     $sql = "SELECT donnees_techniques
7467     FROM ".DB_PREFIXE."donnees_techniques
7468     WHERE dossier_instruction ='".$this->getVal($this->clePrimaire)."'";
7469 softime 8989 $donnees_techniques = $this->f->db->getOne($sql);
7470 mbroquet 3730 $this->f->addToLog("getStatut() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
7471     if ( database::isError($donnees_techniques)){
7472     die();
7473     }
7474    
7475     return $donnees_techniques;
7476     }
7477    
7478     /**
7479     * Surcharge du bouton retour afin de retourner sur la recherche de dossiers
7480     * d'instruction existant
7481     */
7482     function retour($premier = 0, $recherche = "", $tricol = "") {
7483    
7484     echo "\n<a class=\"retour\" ";
7485     echo "href=\"";
7486     //
7487     if($this->getParameter("idx_dossier") != "") {
7488 softime 7996 echo OM_ROUTE_TAB;
7489     echo "&obj=recherche_dossier";
7490 mbroquet 3730
7491     } else {
7492     if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
7493 softime 7996 echo OM_ROUTE_FORM;
7494 mbroquet 3730 } else {
7495 softime 7996 echo OM_ROUTE_TAB;
7496 mbroquet 3730 }
7497 softime 7996 echo "&obj=".$this->get_absolute_class_name();
7498 mbroquet 3730 if ($this->f->get_submitted_get_value('retourformulaire2') !== null && $this->f->get_submitted_get_value('retourformulaire2') != '') {
7499     echo "&retourformulaire=".$this->f->get_submitted_get_value('retourformulaire2');
7500     }
7501     if($this->getParameter("retour")=="form") {
7502 softime 6565 $idx = $this->getParameter("idx");
7503     echo "&amp;idx=".$idx;
7504 mbroquet 3730 echo "&amp;action=3";
7505     }
7506     }
7507     echo "&amp;premier=".$this->getParameter("premier");
7508     echo "&amp;tricol=".$this->getParameter("tricol");
7509     echo "&amp;advs_id=".$this->getParameter("advs_id");
7510     echo "&amp;valide=".$this->getParameter("valide");
7511     //
7512     echo "\"";
7513     echo ">";
7514     //
7515     echo _("Retour");
7516     //
7517     echo "</a>\n";
7518    
7519     }
7520    
7521     /**
7522     * Permet de modifier le fil d'Ariane
7523     * @param string $ent Fil d'Ariane
7524     * @param array $val Valeurs de l'objet
7525     * @param intger $maj Mode du formulaire
7526     */
7527     function getFormTitle($ent) {
7528    
7529     // Fil d'Ariane
7530 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
7531     switch ($type_aff_form) {
7532 softime 7067 case 'DPC':
7533 softime 6565 case 'ADS':
7534     $ent = _("instruction")." -> "._("dossiers d'instruction");
7535     break;
7536     case 'CTX IN':
7537     $ent = _("contentieux")." -> "._("infraction");
7538     break;
7539     case 'CTX RE':
7540     $ent = _("contentieux")." -> "._("recours");
7541     break;
7542 softime 10573 case 'CONSULTATION ENTRANTE':
7543     $ent = __("instruction")." -> ".__("dossiers de consultation");
7544 softime 6565 }
7545 mbroquet 3730
7546     // Si différent de l'ajout
7547     if($this->getParameter("maj") != 0) {
7548     // Si le champ dossier_libelle existe
7549     if (trim($this->getVal("dossier_libelle")) != '') {
7550     $ent .= " -> ".strtoupper($this->getVal("dossier_libelle"));
7551     }
7552 softime 6565 // Si contexte ADS
7553     if ($type_aff_form ==='ADS'
7554     && trim($this->getVal("dossier")) != '') {
7555 mbroquet 3730 $demandeur = $this->get_demandeur($this->getVal("dossier"));
7556     // Si le demandeur existe
7557     if (isset($demandeur) && trim($demandeur) != '') {
7558     $ent .= " ".mb_strtoupper($demandeur, "UTF-8");
7559     }
7560     }
7561     }
7562    
7563 softime 7996 // Change le fil d'Ariane pour l'interface de géolocalisation automatique des DI
7564     if ($this->getParameter("maj") == 126) {
7565     $ent = _("administration")." -> "._("options avancées")." -> "._("Géolocalisation des dossiers");
7566     }
7567    
7568 mbroquet 3730 // Change le fil d'Ariane
7569     return $ent;
7570     }
7571    
7572     /**
7573     * Récupère le demandeur du dossier
7574     * @return string Identifiant du dossier
7575     */
7576     private function get_demandeur($dossier) {
7577    
7578     // init de la variable de retour
7579     $demandeur = '';
7580    
7581     // Requête SQL
7582     $sql = "SELECT
7583     CASE WHEN demandeur.qualite='particulier'
7584     THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
7585     ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
7586     END as demandeur
7587     FROM ".DB_PREFIXE."dossier
7588     LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur
7589     ON lien_dossier_demandeur.dossier=dossier.dossier
7590     AND lien_dossier_demandeur.petitionnaire_principal IS TRUE
7591     LEFT JOIN ".DB_PREFIXE."demandeur
7592     ON lien_dossier_demandeur.demandeur=demandeur.demandeur
7593     WHERE dossier.dossier ='".$dossier."'";
7594 softime 8989 $demandeur = $this->f->db->getOne($sql);
7595 mbroquet 3730 $this->f->addToLog("get_demandeur() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
7596     database::isError($demandeur);
7597    
7598     // Résultat retourné
7599     return $demandeur;
7600     }
7601    
7602     /**
7603     * Récupère la durée de validité
7604     * @param string $dossier_autorisation Identifiant dossier d'autorisation
7605     * @return intger Durée de validité
7606     */
7607 softime 10573 function get_duree_validite($dossier_autorisation, $force_param = false) {
7608 mbroquet 3730
7609     // init de la variable de retour
7610     $duree_validite = "";
7611    
7612     // Récupère le numéro de version
7613     $numeroVersion = $this->getNumeroVersion($dossier_autorisation);
7614    
7615     // Si c'est l'ajout du dossier initial
7616 softime 10573 if ($numeroVersion < 0 || $force_param === true) {
7617 mbroquet 3730
7618     // Récupération de la duree de validite depuis la table
7619     // "dossier_autorisation_type_detaille"
7620     $sql = "SELECT duree_validite_parametrage
7621     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
7622     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
7623     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
7624     WHERE dossier_autorisation.dossier_autorisation='".$dossier_autorisation."'";
7625 softime 8989 $duree_validite = $this->f->db->getOne($sql);
7626 mbroquet 3730 $this->f->addToLog("get_duree_validite(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
7627     database::isError($duree_validite);
7628    
7629     } else {
7630    
7631     // Récupération de la duree de validite depuis le P0
7632     $sql = "SELECT duree_validite
7633     FROM ".DB_PREFIXE."dossier
7634     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
7635     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
7636     WHERE dossier_autorisation.dossier_autorisation='".$dossier_autorisation."'
7637     AND dossier.version = 0";
7638 softime 8989 $duree_validite = $this->f->db->getOne($sql);
7639 mbroquet 3730 $this->f->addToLog("get_duree_validite(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
7640     database::isError($duree_validite);
7641     }
7642    
7643     // retourne le résultat
7644     return $duree_validite;
7645    
7646     }
7647    
7648     /**
7649     * Ajoute les parcelles du dossier passé en paramètre et met à jour le
7650     * quartier du dossier.
7651     * @param string $dossier Identifiant du dossier
7652     * @param string $terrain_references_cadastrales Références cadastrales du
7653     * dossier
7654     */
7655     function ajouter_dossier_parcelle($dossier, $terrain_references_cadastrales) {
7656    
7657     // Parse les parcelles
7658     $list_parcelles = $this->f->parseParcelles($terrain_references_cadastrales, $this->getVal('om_collectivite'));
7659    
7660     // A chaque parcelle une nouvelle ligne est créée dans la table
7661     // dossier_parcelle
7662     foreach ($list_parcelles as $parcelle) {
7663    
7664     // Instance de la classe dossier_parcelle
7665 softime 7996 $dossier_parcelle = $this->f->get_inst__om_dbform(array(
7666     "obj" => "dossier_parcelle",
7667     "idx" => "]",
7668     ));
7669 mbroquet 3730
7670     // Valeurs à sauvegarder
7671     $value = array(
7672     'dossier_parcelle' => '',
7673     'dossier' => $dossier,
7674     'parcelle' => '',
7675     'libelle' => $parcelle['quartier']
7676     .$parcelle['section']
7677     .$parcelle['parcelle']
7678     );
7679    
7680     // Ajout de la ligne
7681 softime 8989 $dossier_parcelle->ajouter($value);
7682 mbroquet 3730 }
7683    
7684     // Si la liste des parcelles n'est pas vide
7685     if (count($list_parcelles) > 0) {
7686    
7687     // Récupère le code impôt de la première référence cadastrale
7688     $quartier_code_impots = $list_parcelles[0]['quartier'];
7689     // Récupère l'identifiant du quartier
7690     $quartier = $this->get_quartier_by_code_impot($quartier_code_impots);
7691    
7692     // Ajoute le quartier au dossier
7693     $this->modifier_quartier_dossier($dossier, $quartier);
7694     }
7695     }
7696    
7697     /**
7698     * Supprime les parcelles du dossier passé en paramètre et met à jour le
7699     * quartier du dossier.
7700     * @param string $dossier Identifiant du dossier
7701     */
7702     function supprimer_dossier_parcelle($dossier) {
7703    
7704     // Suppression des parcelles du dossier
7705     $sql = "DELETE FROM ".DB_PREFIXE."dossier_parcelle
7706     WHERE dossier='".$dossier."'";
7707 softime 8989 $res = $this->f->db->query($sql);
7708 mbroquet 3730 $this->addToLog("supprimer_dossier_parcelle() db->query(\"".$sql."\");",
7709     VERBOSE_MODE);
7710     database::isError($res);
7711    
7712     // Supprime le quartier dans dossier
7713     $this->modifier_quartier_dossier($dossier);
7714     }
7715    
7716     /**
7717     * Modifie le quartier au dossier.
7718     * @param string $dossier Numéro du dossier
7719     * @param integer $quartier Identifiant du quartier
7720     */
7721     function modifier_quartier_dossier($dossier, $quartier = null) {
7722    
7723     // Valeurs à mettre à jour
7724     $valF = array();
7725     $valF['quartier'] = $quartier;
7726    
7727     // Met à jour le quartier du dossier
7728     $cle = " dossier='".$dossier."'";
7729 softime 8989 $res = $this->f->db->autoExecute(
7730 mbroquet 3730 DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
7731     $this->addToLog("ajouter_quartier_dossier(): db->autoexecute(\""
7732     .DB_PREFIXE."dossier\", ".print_r($valF, true)
7733     .", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
7734     $this->f->isDatabaseError($res);
7735     }
7736    
7737     /**
7738     * Récupère le quartier par rapport au code impôts.
7739     * @param string $code_impots Code impôts du quartier
7740     *
7741     * @return integer Identifiant du quartier
7742     */
7743     function get_quartier_by_code_impot($code_impots) {
7744    
7745     // Initialisation résultat
7746     $quartier = null;
7747    
7748     // Si la condition n'est pas vide
7749     if ($code_impots != ""
7750     && $code_impots != null) {
7751    
7752     // Requête SQL
7753     $sql = "SELECT quartier
7754     FROM ".DB_PREFIXE."quartier
7755     WHERE code_impots = '".$code_impots."'";
7756     $this->f->addToLog(
7757     "get_quartier_by_code_impots() : db->getOne(\"".$sql."\")",
7758     VERBOSE_MODE);
7759 softime 8989 $quartier = $this->f->db->getOne($sql);
7760 mbroquet 3730 $this->f->isDatabaseError($quartier);
7761     }
7762    
7763     // Retourne résultat
7764     return $quartier;
7765     }
7766 softime 9245
7767     /**
7768     * TREATMENT - update_initial_dt.
7769     *
7770     * Cette méthode ajoute les données techniques initiales d'un DI au format JSON.
7771     *
7772     * @return boolean
7773     */
7774     public function update_initial_dt($dt_json) {
7775     //
7776     $this->begin_treatment(__METHOD__);
7777     //
7778     if ($dt_json === null || $dt_json === '') {
7779     return $this->end_treatment(__METHOD__, false);
7780     }
7781     //
7782     $this->correct = true;
7783     $data = array();
7784     $data["initial_dt"] = $dt_json;
7785     //
7786     $res = $this->f->db->autoExecute(
7787     sprintf('%s%s', DB_PREFIXE, $this->table),
7788     $data,
7789     DB_AUTOQUERY_UPDATE,
7790     sprintf("%s = '%s'", $this->clePrimaire, $this->valF[$this->clePrimaire])
7791     );
7792     $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);
7793     if ($this->f->isDatabaseError($res, true) === true) {
7794     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
7795     $this->correct = false;
7796     return $this->end_treatment(__METHOD__, false);
7797     }
7798     return $this->end_treatment(__METHOD__, true);
7799     }
7800    
7801    
7802 mbroquet 3730
7803     /**
7804     * Méthode permettant d'ajouter les données techniques d'un DI.
7805     *
7806     * @param integer $id identifiant de la demande
7807     * @param array $val tableau de valeurs postées via le formulaire
7808     *
7809     * @return boolean false si erreur
7810     */
7811 softime 8989 function ajoutDonneesTechniquesDI($id, $val) {
7812 mbroquet 3730
7813     //On vérifie que le dossier d'autorisation a des données techniques
7814     $sql = "SELECT * "
7815     ."FROM ".DB_PREFIXE."donnees_techniques "
7816     ."WHERE dossier_autorisation = '".$this->valF["dossier_autorisation"]."'";
7817 softime 8989 $dtda = $this->f->db->query($sql);
7818 mbroquet 3730 $this->addToLog(__METHOD__."(): db->query(\"".$sql."\")", VERBOSE_MODE);
7819     if($this->f->isDatabaseError($dtda, true)){
7820     $this->f->addToLog(__METHOD__."() : ERROR - Erreur de base de données. Impossible d'ajouter les données techniques du dossier d'instruction.", DEBUG_MODE);
7821     return false;
7822     }
7823    
7824     //Si le dossier d'autorisation a des données techniques
7825     if ( $dtda->numrows() == 1 ){
7826     //
7827 softime 7996 $dtdi = $this->f->get_inst__om_dbform(array(
7828     "obj" => "donnees_techniques",
7829     "idx" => "]",
7830     ));
7831 mbroquet 3730 //Préparation des données
7832     $valF = $dtda->fetchRow(DB_FETCHMODE_ASSOC);
7833 softime 9245
7834     //Sauvegarde des données techniques initiales
7835     //Conversion en JSON
7836     $dt_json = json_encode($valF);
7837    
7838     //Enregistrement en BDD
7839     $sauvegarde_bdd = $this->update_initial_dt($dt_json);
7840    
7841     //Gestion des erreurs
7842     if ($sauvegarde_bdd === false){
7843     $msg_error = __("Erreur de base de données. Impossible de sauvegarder les données techniques du dossier d'instruction au format JSON.");
7844     $this->f->addToLog(sprintf(
7845     "%s() : ERREUR - %s",
7846     __METHOD__,
7847     $msg_error
7848     ));
7849     $this->addToMessage(sprintf(
7850     "%s %s",
7851     $msg_error,
7852     __("Veuillez contacter votre administrateur.")
7853     ));
7854    
7855     return false;
7856     }
7857    
7858 mbroquet 3730 //Suppression de l'identifiant
7859     $valF["donnees_techniques"] = null;
7860     // Ajout du numéro de dossier d'instruction
7861     $valF['dossier_instruction'] = $this->valF['dossier'];
7862     // Suppression du numéro de dossier d'autorisation
7863     $valF['dossier_autorisation'] = null;
7864     // Ajout des données techniques
7865 softime 8989 if($dtdi->ajouter($valF) === false) {
7866 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du dossier d'instruction.", DEBUG_MODE);
7867     return false;
7868     }
7869     }
7870     else {
7871     //Le dossier d'autorisation n'a pas de données techniques
7872     $this->f->addToLog(__METHOD__."() : ERROR - le DA n'a pas de données techniques.", DEBUG_MODE);
7873     return -1;
7874     }
7875    
7876     //
7877     return true;
7878     }
7879    
7880     /**
7881     * VIEW - contrainte.
7882     *
7883     * Vue des contraintes du dossier
7884     *
7885     * Cette vue permet de gérer le contenu de l'onglet "Contrainte(s)" sur un
7886     * dossier. Cette vue spécifique est nécessaire car l'ergonomie standard du
7887     * framework ne prend pas en charge ce cas.
7888     * C'est ici la vue spécifique des contraintes liées au dossier qui est
7889     * affichée directement au clic de l'onglet au lieu du soustab.
7890     *
7891     * L'idée est donc de simuler l'ergonomie standard en créant un container
7892     * et d'appeler la méthode javascript 'ajaxit' pour charger le contenu
7893     * de la vue visualisation de l'objet lié.
7894     *
7895     * @return void
7896     */
7897     function view_contrainte() {
7898     // Vérification de l'accessibilité sur l'élément
7899     $this->checkAccessibility();
7900     // Récupération des variables GET
7901     ($this->f->get_submitted_get_value('idxformulaire')!==null ? $idxformulaire =
7902     $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = "");
7903     ($this->f->get_submitted_get_value('retourformulaire')!==null ? $retourformulaire =
7904     $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = "");
7905 softime 6565 $obj = "dossier_contrainte";
7906     $type_aff_form = $this->get_type_affichage_formulaire();
7907     if ($type_aff_form === 'CTX RE' OR $type_aff_form === 'CTX IN') {
7908     $obj = "dossier_contrainte_contexte_ctx";
7909     }
7910 mbroquet 3730 // Objet à charger
7911     // Construction de l'url de sousformulaire à appeler
7912 softime 7996 $url = OM_ROUTE_SOUSFORM."&obj=".$obj;
7913 mbroquet 3730 $url .= "&action=4";
7914 softime 6929 $url .= "&idx=".$idxformulaire;
7915 mbroquet 3730 $url .= "&retourformulaire=".$retourformulaire;
7916     $url .= "&idxformulaire=".$idxformulaire;
7917     $url .= "&retour=form";
7918     // Affichage du container permettant le reffraichissement du contenu
7919     // dans le cas des action-direct.
7920     printf('
7921     <div id="sousform-href" data-href="%s">
7922     </div>',
7923     $url
7924     );
7925     // Affichage du container permettant de charger le retour de la requête
7926     // ajax récupérant le sous formulaire.
7927     printf('
7928     <div id="sousform-%s">
7929     </div>
7930     <script>
7931     ajaxIt(\'%s\', \'%s\');
7932     </script>',
7933     $obj,
7934     $obj,
7935     $url
7936     );
7937     }
7938    
7939     /**
7940     * Cette methode permet d'afficher le bouton de validation du formulaire
7941     *
7942     * @param integer $maj Mode de mise a jour
7943     * @return void
7944     */
7945     function bouton($maj) {
7946    
7947     if (!$this->correct
7948     && $this->checkActionAvailability() == true) {
7949     //
7950     switch($maj) {
7951     case 0 :
7952     $bouton = _("Ajouter");
7953     break;
7954     case 1 :
7955     $bouton = _("Modifier");
7956     break;
7957     case 2 :
7958     $bouton = _("Supprimer");
7959     break;
7960     default :
7961     // Actions specifiques
7962     if ($this->get_action_param($maj, "button") != null) {
7963     //
7964     $bouton = $this->get_action_param($maj, "button");
7965     } else {
7966     //
7967     $bouton = _("Valider");
7968     }
7969     break;
7970     }
7971     //
7972     $params = array(
7973     "value" => $bouton,
7974     "name" => "submit",
7975     "onclick"=>"return getDataFieldReferenceCadastrale();",
7976     );
7977     //
7978     $this->f->layout->display_form_button($params);
7979     }
7980    
7981     }
7982    
7983     /**
7984 softime 6929 * Récupère l'instance de paramétrage des taxes.
7985 mbroquet 3730 *
7986     * @param integer $taxe_amenagement Identifiant
7987     *
7988     * @return object
7989     */
7990     function get_inst_taxe_amenagement($taxe_amenagement = null) {
7991     //
7992 softime 6929 if ($this->inst_taxe_amenagement === null) {
7993 mbroquet 3730 //
7994 softime 6929 if ($taxe_amenagement === null) {
7995     //
7996 mbroquet 3730 $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($this->getVal('om_collectivite'));
7997 softime 6929
7998     // Si aucun paramétrage de taxe trouvé et que la collectivité
7999     // est mono
8000     if ($taxe_amenagement === null
8001     && $this->f->isCollectiviteMono($this->getVal('om_collectivite')) === true) {
8002     // Récupère la collectivité multi
8003     $om_collectivite_multi = $this->f->get_idx_collectivite_multi();
8004     //
8005     $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite_multi);
8006     }
8007    
8008     //
8009     if ($taxe_amenagement === null) {
8010     //
8011     return null;
8012     }
8013 mbroquet 3730 }
8014     //
8015 softime 7996 $this->inst_taxe_amenagement = $this->f->get_inst__om_dbform(array(
8016     "obj" => "taxe_amenagement",
8017     "idx" => $taxe_amenagement,
8018     ));
8019 mbroquet 3730 }
8020     //
8021     return $this->inst_taxe_amenagement;
8022     }
8023    
8024     /**
8025     * Récupère l'identifiant de la taxe d'aménagement par rapport à la collectivité.
8026     *
8027     * @param integer $om_collectivite La collectivité
8028     *
8029     * @return integer
8030     */
8031     function get_taxe_amenagement_by_om_collectivite($om_collectivite) {
8032 softime 6929 //
8033     $taxe_amenagement = null;
8034    
8035 mbroquet 3730 // Si la collectivité n'est pas renseigné
8036 softime 6929 if ($om_collectivite !== '' && $om_collectivite !== null) {
8037    
8038     // SQL
8039     $sql = "SELECT taxe_amenagement
8040     FROM ".DB_PREFIXE."taxe_amenagement
8041     WHERE om_collectivite = ".intval($om_collectivite);
8042     $taxe_amenagement = $this->f->db->getOne($sql);
8043     $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
8044     $this->f->isDatabaseError($taxe_amenagement);
8045 mbroquet 3730 }
8046    
8047     //
8048 softime 6929 return $taxe_amenagement;
8049 mbroquet 3730 }
8050    
8051     /**
8052     * [get_inst_donnees_techniques description]
8053     *
8054     * @param [type] $donnees_techniques [description]
8055     *
8056     * @return [type] [description]
8057     */
8058     function get_inst_donnees_techniques($donnees_techniques = null) {
8059     //
8060     if (is_null($this->inst_donnees_techniques)) {
8061     //
8062     if (is_null($donnees_techniques)) {
8063     $donnees_techniques = $this->getDonneesTechniques();
8064     }
8065     //
8066 softime 7996 $this->inst_donnees_techniques = $this->f->get_inst__om_dbform(array(
8067     "obj" => "donnees_techniques",
8068     "idx" => $donnees_techniques,
8069     ));
8070 mbroquet 3730 }
8071     //
8072     return $this->inst_donnees_techniques;
8073     }
8074    
8075    
8076     /**
8077 softime 10573 * TODO: replace with '$this->f->findObjectById' ?
8078     *
8079 mbroquet 3730 * Récupère l'instance du dossier d'autorisation.
8080     *
8081     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
8082     *
8083     * @return object
8084     */
8085 fmichon 4708 function get_inst_dossier_autorisation($dossier_autorisation = null) {
8086 mbroquet 3730 //
8087     return $this->get_inst_common("dossier_autorisation", $dossier_autorisation);
8088     }
8089    
8090    
8091     /**
8092     * Récupère l'instance du dossier d'autorisation, puis la clé d'accès au portail
8093     * citoyen associée à ce DA.
8094     *
8095     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
8096     *
8097     * @return string $cle_acces_citoyen si la clé d'accès existe
8098     * boolean false si la clé n'existe pas
8099     */
8100     protected function get_citizen_access_key($dossier_autorisation = null) {
8101     //
8102     $inst_da = $this->get_inst_dossier_autorisation($dossier_autorisation);
8103     // Récupération de la valeur de la clé d'accès
8104     $cle_acces_citoyen = $inst_da->getVal('cle_acces_citoyen');
8105     if ($cle_acces_citoyen === '' OR $cle_acces_citoyen === null) {
8106     return false;
8107     }
8108     return $cle_acces_citoyen;
8109     }
8110    
8111    
8112     /**
8113     * Récupère l'instance du type détaillé du dossier d'autorisation.
8114     *
8115     * @param integer $dossier_autorisation_type_detaille Identifiant
8116     *
8117     * @return object
8118     */
8119     function get_inst_dossier_autorisation_type_detaille($dossier_autorisation_type_detaille = null) {
8120     //
8121     if (is_null($this->inst_dossier_autorisation_type_detaille)) {
8122     //
8123     if (is_null($dossier_autorisation_type_detaille)) {
8124     //
8125     $dossier_autorisation = $this->get_inst_dossier_autorisation();
8126     //
8127     $dossier_autorisation_type_detaille = $dossier_autorisation->getVal('dossier_autorisation_type_detaille');
8128     }
8129     //
8130 softime 7996 $this->inst_dossier_autorisation_type_detaille = $this->f->get_inst__om_dbform(array(
8131     "obj" => "dossier_autorisation_type_detaille",
8132     "idx" => $dossier_autorisation_type_detaille,
8133     ));
8134 mbroquet 3730 }
8135     //
8136     return $this->inst_dossier_autorisation_type_detaille;
8137     }
8138    
8139     /**
8140     * Récupère l'instance du cerfa
8141     *
8142     * @param integer $cerfa Identifiant du cerfa
8143     *
8144     * @return object
8145     */
8146     function get_inst_cerfa($cerfa = null) {
8147     //
8148     if (is_null($this->inst_cerfa)) {
8149     //
8150     if (is_null($cerfa)) {
8151     //
8152     $dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
8153     //
8154     $cerfa = $dossier_autorisation_type_detaille->getVal('cerfa');
8155     }
8156     //
8157 softime 7996 $this->inst_cerfa = $this->f->get_inst__om_dbform(array(
8158     "obj" => "cerfa",
8159     "idx" => $cerfa,
8160     ));
8161 mbroquet 3730 }
8162     //
8163     return $this->inst_cerfa;
8164     }
8165    
8166     /**
8167     * CONDITION - is_user_from_allowed_collectivite.
8168     *
8169     * Cette condition permet de vérifier si l'utilisateur connecté appartient
8170     * à une collectivité autorisée : c'est-à-dire de niveau 2 ou identique à
8171     * la collectivité de l'enregistrement sur lequel on se trouve.
8172     *
8173     * @return boolean
8174     */
8175     function is_user_from_allowed_collectivite() {
8176    
8177     // Si l'utilisateur est de niveau 2
8178     if ($_SESSION["niveau"] == "2") {
8179     // Alors l'utilisateur fait partie d'une collectivité autorisée
8180     return true;
8181     }
8182    
8183     // L'utilisateur est donc de niveau 1
8184     // On vérifie donc si la collectivité de l'utilisateur est la même
8185     // que la collectivité de l'élément sur lequel on se trouve
8186     if ($_SESSION["collectivite"] === $this->getVal("om_collectivite")) {
8187     // Alors l'utilisateur fait partie d'une collectivité autorisée
8188     return true;
8189     }
8190    
8191     // L'utilisateur ne fait pas partie d'une collectivité autorisée
8192     return false;
8193     }
8194    
8195     /**
8196     * Création ou mise à jour du répertoire de numérisation.
8197     *
8198     * L'objet de cette méthode est la création ou la mise à jour de la date de
8199     * modification du répertoire de numérisation destiné à recevoir les pièces
8200     * numérisées pour un import automatique.
8201     * À chaque saisie d'une nouvelle demande dans openADS, le répertoire est
8202     * soit créé soit mis à jour pour être disponible en dehors d'openADS
8203     * (point de montage sur le serveur) pour permettre de déposer les pièces
8204     * numérisées directement depuis le copieur. À intervalle régulier, un
8205     * service vérifie le contenu de ces répertoire pour importer
8206     * automatiquement ces fichiers dans l'onglet 'Pièce(s)' du dossier
8207     * concerné.
8208     * La mise à jour de la date de modification est importante pour réaliser
8209     * la purge des répertoires vides sur la base de la date de la dernière
8210     * demande qui concerne le dossier.
8211     *
8212     * @return boolean
8213     */
8214     function create_or_touch_digitalization_folder() {
8215    
8216     // Nom du répertoire
8217     // Le répertoire créé possède comme nom le libellé du dossier avec
8218     // le suffixe séparé par un '.'. Exemple : PC0130551601234.P0
8219 nmeucci 4526 $separateur = '';
8220     if ($this->getSuffixe($this->getVal('dossier_instruction_type')) === 't') {
8221     $separateur = '.';
8222     }
8223    
8224 mbroquet 3730 $digitalization_folder_name = str_replace(
8225     $this->getVal("dossier_autorisation"),
8226 nmeucci 4526 $this->getVal("dossier_autorisation").$separateur,
8227 mbroquet 3730 $this->getVal($this->clePrimaire)
8228     );
8229    
8230     // Vérifie que l'option de numérisation des dossiers est désactivée
8231     if ($this->f->is_option_digitalization_folder_enabled() !== true) {
8232     //
8233     $this->addToLog(
8234     _("L'option de numerisation des dossiers n'est pas activee").".",
8235     DEBUG_MODE
8236     );
8237     return false;
8238     }
8239    
8240     // Vérifie le paramétrage du répertoire de numérisation
8241     if ($this->f->getParameter("digitalization_folder_path") === null) {
8242     //
8243     $this->addToLog(
8244     "Configuration du répertoire de numérisation incorrecte.",
8245     DEBUG_MODE
8246     );
8247     return false;
8248     }
8249    
8250     // Répertoire cible
8251     $root_folder_path = $this->f->getParameter("digitalization_folder_path");
8252    
8253     // Vérifie que le répertoire existe
8254     if (is_dir($root_folder_path) !== true) {
8255     //
8256     $this->addToLog(
8257     sprintf(
8258     "Le répertoire '%s' n'existe pas.",
8259     $root_folder_path
8260     ),
8261     DEBUG_MODE
8262     );
8263     return false;
8264     }
8265    
8266     // Répertoire des "à traiter"
8267     $todo_folder_path = $root_folder_path."Todo/";
8268    
8269     // Vérifie que le répertoire existe
8270     if (is_dir($todo_folder_path) !== true) {
8271     //
8272     $this->addToLog(
8273     sprintf(
8274     "Le répertoire '%s' n'existe pas.",
8275     $todo_folder_path
8276     ),
8277     DEBUG_MODE
8278     );
8279     return false;
8280     }
8281    
8282     // Répertoire de numérisation.
8283     $digitalization_folder_path = $todo_folder_path.$digitalization_folder_name;
8284    
8285     // Si le répertore existe déjà le répertoire n'est pas créé
8286     if (file_exists($digitalization_folder_path) == true) {
8287     // Mise à jour du répertoire
8288     if (touch($digitalization_folder_path) !== true) {
8289     // Si une erreur survient
8290     $this->addToLog(
8291     sprintf(
8292     "Erreur lors de la mise à jour du répertoire '%s'.",
8293     $digitalization_folder_path
8294     ),
8295     DEBUG_MODE
8296     );
8297     return false;
8298     }
8299     //
8300     return true;
8301     } else {
8302     // Création du répertoire
8303     if (mkdir($digitalization_folder_path) !== true) {
8304     //
8305     $this->addToLog(
8306     sprintf(
8307     "Erreur lors de la création du répertoire '%s'.",
8308     $digitalization_folder_path
8309     ),
8310     DEBUG_MODE
8311     );
8312     return false;
8313     }
8314     //
8315     return true;
8316     }
8317     }
8318    
8319 nmeucci 3876 /**
8320     * Récupère, convertit et retourne les logs de toutes les instructions
8321     *
8322     * @return array tableau indexé de logs
8323     */
8324     public function get_log_instructions() {
8325     $log_instructions = $this->getVal('log_instructions');
8326     // Gestion du premier log
8327 nmeucci 3887 if ($log_instructions === '') {
8328 nmeucci 3876 $log_instructions = json_encode(array());
8329     }
8330 nmeucci 3887 // Gestion du log invalide
8331     if(!$this->isJson($log_instructions)) {
8332     return false;
8333     }
8334 nmeucci 3876 return json_decode($log_instructions, true);
8335     }
8336    
8337     /**
8338     * Ajoute un log d'instruction aux logs existants
8339     *
8340     * @param array $log valeurs de l'instruction
8341     * @return bool vrai si traitement effectué avec succès
8342     */
8343     public function add_log_instructions($log) {
8344     // Begin
8345     $this->begin_treatment(__METHOD__);
8346     // Ajout du log
8347     $log_instructions = $this->get_log_instructions();
8348 nmeucci 3887 if ($log_instructions === false) {
8349     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
8350     return $this->end_treatment(__METHOD__, false);
8351     }
8352 nmeucci 3876 array_push($log_instructions, $log);
8353 nmeucci 3907 $log_instructions = json_encode($log_instructions);
8354 nmeucci 3876 // Mise à jour du DI
8355     $val = array("log_instructions"=>$log_instructions);
8356     $ret = $this->f->db->autoExecute(
8357     DB_PREFIXE."dossier",
8358     $val,
8359     DB_AUTOQUERY_UPDATE,
8360     "dossier = '".$this->getVal('dossier')."'");
8361     if (database::isError($ret, true)) {
8362     $this->erreur_db($ret->getDebugInfo(), $ret->getMessage(), 'dossier');
8363     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
8364     return $this->end_treatment(__METHOD__, false);
8365     }
8366     return $this->end_treatment(__METHOD__, true);
8367     }
8368    
8369 nmeucci 3887 /**
8370 fmichon 4708 * TREATMENT - mark_as_connected_to_referentiel_erp.
8371     *
8372     * Cette méthode permet de positionner le marqueur
8373     * 'interface_referentiel_erp' à 'true'. Cela signifie que le dossier est
8374     * connecté au référentiel ERP.
8375     *
8376     * @return boolean
8377     */
8378     function mark_as_connected_to_referentiel_erp() {
8379     //
8380     $this->begin_treatment(__METHOD__);
8381     //
8382     $data = array("interface_referentiel_erp" => true, );
8383     // Exécution de la requête
8384     $res = $this->f->db->autoExecute(
8385     DB_PREFIXE.$this->table,
8386     $data,
8387     DB_AUTOQUERY_UPDATE,
8388     $this->getCle($this->getVal($this->clePrimaire))
8389     );
8390     // Logger
8391     $this->addToLog(
8392     __METHOD__."(): db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($data, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($this->getVal($this->clePrimaire))."\");",
8393     VERBOSE_MODE
8394     );
8395     //
8396     if ($this->f->isDatabaseError($res, true)) {
8397     // Appel de la methode de recuperation des erreurs
8398     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
8399     $this->correct = false;
8400     $this->addToLog(
8401     __METHOD__."(): Problème erreur lors de la mise à jour du dossier",
8402     DEBUG_MODE
8403     );
8404     // Termine le traitement
8405     return $this->end_treatment(__METHOD__, false);
8406     }
8407     //
8408     $this->addToMessage(_("Le dossier est désormais 'connecté avec le référentiel ERP'."));
8409     return $this->end_treatment(__METHOD__, true);
8410     }
8411 nmeucci 3887
8412 fmichon 4708 /**
8413     * CONDITION - is_connected_to_referentiel_erp.
8414     *
8415     * @return boolean
8416     */
8417     function is_connected_to_referentiel_erp() {
8418     //
8419     if ($this->getVal("interface_referentiel_erp") !== "t") {
8420     return false;
8421     }
8422     //
8423     return true;
8424     }
8425    
8426 nhaye 4777
8427 fmichon 4708 /**
8428 nhaye 4777 * Retourne les données techniques applicables au dossier courant, càd les données
8429     * techniques liées au dossier avec seulement les champs du CERFA associé au type de
8430     * dossier.
8431     *
8432     * @return array $donnees_techniques_applicables Tableau associatif contenant
8433     * seulement les données techniques
8434     * applicables au dossier.
8435     */
8436     public function get_donnees_techniques_applicables() {
8437    
8438     // Récupération de l'identifiant des données techniques liées au dossier
8439     $donnees_techniques = $this->getDonneesTechniques();
8440    
8441     $inst_donnees_techniques = $this->get_inst_common('donnees_techniques', $donnees_techniques);
8442     $donnees_techniques_applicables = $inst_donnees_techniques->get_donnees_techniques_applicables();
8443     //
8444     return $donnees_techniques_applicables;
8445    
8446     }
8447    
8448    
8449     /**
8450 fmichon 4708 * Retourne un tableau avec les données du dossier d'instruction.
8451     *
8452 jymadier 5275 * L'objectif est de mettre à disposition via un WS REST un ensemble
8453 fmichon 4708 * de données exploitable par une autre application.
8454     */
8455     function get_datas() {
8456    
8457     /**
8458     *
8459     */
8460 nhaye 4777
8461 softime 10573 // TODO: replace '$this->get_inst_common' with '$this->f->findObjectById' ?
8462 nhaye 4777 $om_collectivite = $this->get_inst_common('om_collectivite', $this->getVal('om_collectivite'));
8463     $instructeur = $this->get_inst_common('instructeur', $this->getVal('instructeur'));
8464     $division = $this->get_inst_common('division', $this->getVal('division'));
8465 softime 9282 $etat = $this->get_inst_common('etat', $this->getVal('etat'));
8466 nhaye 4777 $dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
8467     $dossier_autorisation_type = $this->get_inst_common('dossier_autorisation_type', $dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
8468     $donnees_techniques = $this->get_donnees_techniques_applicables();
8469    
8470 fmichon 4708 //
8471     $datas = array(
8472     //
8473     "dossier_instruction" => $this->getVal($this->clePrimaire),
8474     //
8475     "dossier_autorisation" => $this->getVal("dossier_autorisation"),
8476     //
8477     "terrain_adresse_voie_numero" => $this->getVal("terrain_adresse_voie_numero"),
8478     "terrain_adresse_lieu_dit" => $this->getVal("terrain_adresse_lieu_dit"),
8479     "terrain_adresse_code_postal" => $this->getVal("terrain_adresse_code_postal"),
8480     "terrain_adresse_cedex" => $this->getVal("terrain_adresse_cedex"),
8481     "terrain_adresse_voie" => $this->getVal("terrain_adresse_voie"),
8482     "terrain_adresse_bp" => $this->getVal("terrain_adresse_bp"),
8483     "terrain_adresse_localite" => $this->getVal("terrain_adresse_localite"),
8484     "terrain_superficie" => $this->getVal("terrain_superficie"),
8485     //
8486     "references_cadastrales" => $this->f->parseParcelles($this->getVal("terrain_references_cadastrales"), $this->getVal('om_collectivite')),
8487 nhaye 4777 "dossier_autorisation_type" => $dossier_autorisation_type->getVal("libelle"),
8488     "dossier_autorisation_type_detaille" => $dossier_autorisation_type_detaille->getVal("libelle"),
8489     "collectivite" => $om_collectivite->getVal("libelle"),
8490     "instructeur" => $instructeur->getVal("nom"),
8491     "division" => $division->getVal("libelle"),
8492 softime 9282 "etat_dossier" => $etat->getVal("libelle"),
8493 nhaye 4777 "statut_dossier" => $this->getStatut(),
8494     "date_depot_initial" => $this->getVal("date_depot"),
8495     "date_limite_instruction" => $this->getVal("date_limite"),
8496     "date_decision" => $this->getVal("date_decision"),
8497     "enjeu_urbanisme" => $this->getVal("enjeu_urba") == 't' ? 'true' : 'false',
8498     "enjeu_erp" => $this->getVal("enjeu_erp") == 't' ? 'true' : 'false',
8499 fmichon 4708 );
8500    
8501 softime 6565 // Gestion des demandeurs.
8502 fmichon 4708 $this->listeDemandeur('dossier', $this->getVal($this->clePrimaire));
8503     //
8504 softime 6565 if (isset($this->valIdDemandeur["petitionnaire_principal"]) AND !empty($this->valIdDemandeur["petitionnaire_principal"])) {
8505 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
8506     "obj" => "petitionnaire",
8507     "idx" => $this->valIdDemandeur["petitionnaire_principal"][0],
8508     ));
8509 softime 6565 $datas["petitionnaire_principal"] = $demandeur->get_datas();
8510     $demandeur->__destruct();
8511     }
8512 fmichon 4708 //
8513     if (isset($this->valIdDemandeur["delegataire"]) && !empty($this->valIdDemandeur["delegataire"])) {
8514 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
8515     "obj" => "delegataire",
8516     "idx" => $this->valIdDemandeur["delegataire"][0],
8517     ));
8518 fmichon 4708 $datas["delegataire"] = $demandeur->get_datas();
8519     $demandeur->__destruct();
8520     }
8521     //
8522     if (isset($this->valIdDemandeur["petitionnaire"]) AND !empty($this->valIdDemandeur["petitionnaire"])) {
8523     $datas["autres_petitionnaires"] = array();
8524     foreach ($this->valIdDemandeur["petitionnaire"] as $petitionnaire) {
8525 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
8526     "obj" => "petitionnaire",
8527     "idx" => $petitionnaire,
8528     ));
8529 fmichon 4708 $datas["autres_petitionnaires"][] = $demandeur->get_datas();
8530     $demandeur->__destruct();
8531     }
8532     }
8533    
8534 nhaye 4777 // Tableau contenant le nom de chaque champ de données techniques à retourner
8535     $dt_a_afficher = array(
8536     "co_tot_log_nb",
8537     "co_cstr_exist",
8538     "co_uti_pers",
8539     "co_uti_vente",
8540     "co_uti_loc",
8541     "su_tot_shon_tot",
8542     "su_avt_shon_tot",
8543     "am_lot_max_nb",
8544     "am_empl_nb",
8545     );
8546    
8547 jymadier 4785 // Tableau associatif contenant les données techniques voulues
8548     $tab_donnees_techniques = array();
8549 nhaye 4777 foreach ($dt_a_afficher as $key) {
8550     // On ajoute le champ de données techniques dans le retour seulement s'il
8551     // existe dans $donnees_techniques (s'il est applicable au dossier)
8552 jymadier 4785 if (array_key_exists($key, $donnees_techniques) === true) {
8553 nhaye 4777 if ($donnees_techniques[$key] === 't') {
8554     $donnees_techniques[$key] = 'true';
8555     };
8556     if ($donnees_techniques[$key] === 'f') {
8557     $donnees_techniques[$key] = 'false';
8558     };
8559 jymadier 4785 $tab_donnees_techniques[$key] = $donnees_techniques[$key];
8560 nhaye 4777 };
8561     };
8562    
8563 jymadier 4785 $datas['donnees_techniques'] = $tab_donnees_techniques;
8564 softime 10573
8565     // Affiche le code INSEE de la collectivité du dossier d'instruction
8566     /*$collectivite = $this->f->getCollectivite($this->getVal('om_collectivite'));
8567     $datas['collectivite_insee'] = $collectivite["insee"];*/
8568     $datas['collectivite_insee'] = $this->get_da_insee();
8569 fmichon 4708 //
8570     return $datas;
8571     }
8572    
8573 softime 6565 /**
8574 softime 10573 * Renvoi le code INSEE du DA associé
8575     */
8576     protected function get_da_insee() {
8577     $inst_da = $this->f->get_inst__om_dbform(array(
8578     "obj" => "dossier_autorisation",
8579     "idx" => $this->getVal('dossier_autorisation')
8580     ));
8581     return $inst_da->getVal('insee');
8582     }
8583    
8584     /**
8585 softime 6565 * CONDITION - is_class_dossier_corresponding_to_his_groupe
8586     *
8587     * Vérifie la correspondance groupe/classe du dossier instancié.
8588     *
8589     * @param string $classe
8590     * @return boolean
8591     */
8592     protected function is_class_dossier_corresponding_to_type_form($classe) {
8593     $type_form = $this->get_type_affichage_formulaire();
8594     switch ($type_form) {
8595 softime 7067 case 'DPC';
8596 softime 6565 case 'ADS':
8597 softime 10573 case 'CONSULTATION ENTRANTE':
8598 softime 6565 if ($this->f->starts_with($classe, 'dossier_instruction') === true) {
8599     return true;
8600     }
8601     return false;
8602     case 'CTX RE':
8603     if ($this->f->ends_with($classe, '_recours') === true) {
8604     return true;
8605     }
8606     return false;
8607     case 'CTX IN':
8608     if ($this->f->ends_with($classe, '_infractions') === true) {
8609     return true;
8610     }
8611     return false;
8612     default:
8613     return false;
8614     }
8615     }
8616 nhaye 4777
8617 softime 6565
8618 softime 6272 /**
8619 softime 6565 * CONDITION - check_context
8620     *
8621     * Vérifie la correspondance groupes dossier/utilisateur.
8622     * Vérifie l'accès aux dossiers confidentiels.
8623     * Vérifie la correspondance groupe/classe.
8624     *
8625     * @return boolean
8626     */
8627     public function check_context() {
8628     // Le dossier doit être un objet valide
8629     $id = $this->getVal($this->clePrimaire);
8630     if ($id === 0 OR $id === '0' OR $id === '' OR $id === ']') {
8631     return false;
8632     }
8633    
8634     // Vérification que l'utilisateur a accès au dossier
8635     if ($this->can_user_access_dossier() === false) {
8636     return false;
8637     }
8638     // Vérification que la classe métier instanciée est adéquate.
8639 softime 7996 return $this->is_class_dossier_corresponding_to_type_form($this->get_absolute_class_name());
8640 softime 6565 }
8641    
8642     /**
8643     * VIEW - redirect.
8644     *
8645     * Cette vue est appelée lorsque l'on souhaite consulter un dossier dont on ne connaît pas le groupe.
8646     * Ce fonctionnement est nécessaire car les classes métier filles de 'dossier' sont relatives à ce groupe.
8647     *
8648     * Par exemple, depuis l'onglet "Dossiers Liés" du DI, le listing ne permet pas d'instancier chaque résultat
8649     * et par conséquent on n'a pas accès au groupe du dossier. L'action tableau consulter y est surchargée afin
8650     * d'amener à cette vue qui se charge de faire la redirection adéquate.
8651     *
8652     * @return void
8653     */
8654     public function redirect() {
8655     // Redirection vers la classe métier adéquate
8656     $context = $this->get_type_affichage_formulaire();
8657     switch ($context) {
8658     case 'ADS':
8659 softime 10573 case 'CONSULTATION ENTRANTE':
8660 softime 6565 $obj = 'dossier_instruction';
8661     break;
8662     case 'CTX RE':
8663     $obj = 'dossier_contentieux_tous_recours';
8664     break;
8665     case 'CTX IN':
8666     $obj = 'dossier_contentieux_toutes_infractions';
8667     break;
8668     default:
8669     return;
8670     }
8671     $idx = $this->getVal($this->clePrimaire);
8672 softime 7996 $link = OM_ROUTE_FORM.'&obj='.$obj.'&action=3&idx='.$idx;
8673 softime 6565 if ($this->f->get_submitted_get_value('retourformulaire') !== null
8674     && $this->f->get_submitted_get_value('idxformulaire') !== null) {
8675 softime 7996 $link .= '&premier=0&tricol=&retourformulaire='.$this->f->get_submitted_get_value('retourformulaire');
8676 softime 6565 $link .= '&idxformulaire='.$this->f->get_submitted_get_value('idxformulaire');
8677     }
8678    
8679     header('Location: '.$link);
8680     exit();
8681     }
8682    
8683    
8684     /**
8685     * CONDITION - is_confidentiel
8686     *
8687     * Permet de savoir si le type de dossier d'autorisation du dossier courant est
8688     * confidentiel.
8689     *
8690     * @return boolean true si le dossier est confidentiel, sinon false.
8691     *
8692     */
8693     public function is_confidentiel() {
8694     //
8695     $inst_dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
8696     $inst_dossier_autorisation_type = $this->get_inst_dossier_autorisation_type($inst_dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
8697     $confidentiel = $inst_dossier_autorisation_type->getVal('confidentiel');
8698     //
8699     if ($confidentiel === 't') {
8700     return true;
8701     }
8702     return false;
8703     }
8704    
8705    
8706     /**
8707     * CONDITION - can_user_access_dossier
8708     *
8709     * Effectue les vérifications suivantes :
8710     * - L'utilisateur doit avoir accès au groupe du dossier
8711     * - Si le dossier est confidentiel, l'utilisateur doit avoir accès aux dossiers
8712     * confidentiels de ce groupe
8713     *
8714     * @return boolean true si les conditions ci-dessus sont réunies, sinon false
8715     *
8716     */
8717     public function can_user_access_dossier() {
8718     // Récupère le code du groupe
8719     $groupe_dossier = $this->get_groupe();
8720    
8721     // Le groupe doit être accessible par l'utilisateur ;
8722     if ($this->f->is_user_in_group($groupe_dossier) === false) {
8723     return false;
8724     }
8725     if ($this->is_confidentiel() === true) {
8726     //
8727     if ($this->f->can_user_access_dossiers_confidentiels_from_groupe($groupe_dossier) === false) {
8728     return false;
8729     }
8730     }
8731     return true;
8732     }
8733    
8734    
8735     /**
8736 softime 6272 * Met à jour une métadonnée sur tous les fichiers liés au dossier.
8737     *
8738     * @param string $metadata Nom de la métadonnée.
8739     * @param string $metadata_value Nouvelle valeur de la métadonnée.
8740     *
8741     * @return boolean
8742     */
8743     public function update_metadata_by_dossier($metadata, $metadata_value) {
8744     // Rècupère la liste des fichiers stockés liés au dossier
8745     $sql = sprintf('
8746     SELECT uid AS uid
8747     FROM %1$sdocument_numerise
8748     WHERE dossier = \'%2$s\'
8749     AND document_numerise IS NOT NULL
8750     UNION
8751     SELECT fichier AS uid
8752     FROM %1$sconsultation
8753     WHERE dossier = \'%2$s\'
8754     AND fichier IS NOT NULL
8755     UNION
8756     SELECT om_fichier_consultation AS uid
8757     FROM %1$sconsultation
8758     WHERE dossier = \'%2$s\'
8759     AND om_fichier_consultation IS NOT NULL
8760     UNION
8761     SELECT om_fichier_instruction AS uid
8762     FROM %1$sinstruction
8763     WHERE dossier = \'%2$s\'
8764     AND om_fichier_instruction IS NOT NULL
8765     UNION
8766     SELECT om_fichier_rapport_instruction AS uid
8767     FROM %1$srapport_instruction
8768     WHERE dossier_instruction = \'%2$s\'
8769     AND om_fichier_rapport_instruction IS NOT NULL;
8770     ',
8771     DB_PREFIXE,
8772     $this->getVal($this->clePrimaire)
8773     );
8774     $res = $this->f->db->query($sql);
8775     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
8776     $this->f->isDatabaseError($res);
8777    
8778     // Définit la métadonnée à mettre à jour
8779     $metadata_update = array();
8780     $metadata_update[$metadata] = $metadata_value;
8781    
8782     // Pour chaque résultat
8783     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
8784     // Met à jour les métadonnées du fichier
8785     $uid_update = $this->f->storage->storage->update_metadata($row['uid'], $metadata_update);
8786    
8787     // Si la méthode ne retourne pas l'uid du fichier alors la mise
8788     // à jour ne s'est pas réalisée
8789     if ($uid_update !== $row['uid']) {
8790     //
8791     return false;
8792     }
8793     }
8794     $res->free();
8795    
8796     //
8797     return true;
8798     }
8799    
8800    
8801     /**
8802     * Traitement pour les ERP.
8803     * Si la valeur du champ 'erp' a été modifié, modifie la valeur de la
8804     * métadonnée concernceERP sur tous les fichiers liés au dossier.
8805     *
8806     * @param array $values Liste des nouvelles valeurs.
8807     *
8808     * @return boolean
8809     */
8810     public function update_concerneERP(array $values) {
8811     // Définit le champ et la métadonnée
8812     $champ = 'erp';
8813     $metadata = 'concerneERP';
8814    
8815     // Définit les valeurs à comparer
8816     $value_after = $this->get_boolean_from_view_value($values[$champ]);
8817     $value_before = $this->get_boolean_from_pgsql_value($this->getVal($champ));
8818    
8819     // Vérifie si la valeur du champ a été modifié
8820     if ($value_after !== $value_before) {
8821     // Transforme la valeur booléenne en string
8822     $metadata_value = 'false';
8823     if ($value_after === true) {
8824     $metadata_value = 'true';
8825     }
8826    
8827     // Met à jour les métadonnées des fichiers liés au dossier
8828     $update = $this->update_metadata_by_dossier($metadata, $metadata_value);
8829     //
8830     if ($update !== true) {
8831     //
8832     return false;
8833     }
8834     }
8835    
8836     //
8837     return true;
8838     }
8839    
8840    
8841 softime 6565 /**
8842 softime 10573 * TODO: replace with '$this->f->findObjectById' ?
8843     *
8844 softime 6565 * Récupère l'instance du groupe.
8845     *
8846     * @param string $groupe Identifiant du groupe.
8847     *
8848     * @return object
8849     */
8850     private function get_inst_groupe($groupe) {
8851     //
8852     return $this->get_inst_common("groupe", $groupe);
8853     }
8854    
8855    
8856     /**
8857 softime 10573 * TODO: replace with '$this->f->findObjectById' ?
8858     *
8859 softime 6565 * Récupère l'instance du type de dossier d'autorisation.
8860     *
8861     * @param string $dossier_autorisation_type Identifiant du type de dossier
8862     * d'autorisation.
8863     *
8864     * @return object
8865     */
8866     private function get_inst_dossier_autorisation_type($dossier_autorisation_type) {
8867     //
8868     return $this->get_inst_common("dossier_autorisation_type", $dossier_autorisation_type);
8869     }
8870    
8871    
8872 softime 7366 /**
8873     * Récupère l'instance de la demande du dossier
8874     *
8875     * @param mixed Identifiant de la demande
8876     *
8877     * @return object
8878     */
8879     function get_inst_demande($demande = null) {
8880     //
8881     if (is_null($this->inst_demande)) {
8882     //
8883     if (is_null($demande)) {
8884     $demande = $this->get_demande_by_dossier_instruction();
8885     }
8886     //
8887     return $this->get_inst_common("demande", $demande);
8888     }
8889     //
8890     return $this->inst_demande;
8891     }
8892    
8893    
8894     /**
8895 softime 7541 * Récupère l'identifiant de la demande initiale par le dossier d'instruction.
8896 softime 7366 *
8897     * @return integer
8898     */
8899     function get_demande_by_dossier_instruction() {
8900     // Initialisation de la variable de retour
8901     $res = null;
8902    
8903     // SQL
8904     $sql = "SELECT demande
8905     FROM ".DB_PREFIXE."demande
8906 softime 7541 WHERE dossier_instruction = '".$this->getVal($this->clePrimaire)."'
8907     ORDER BY instruction_recepisse ASC
8908     LIMIT 1";
8909 softime 7366 $res = $this->f->db->getOne($sql);
8910     $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
8911     $this->f->isDatabaseError($res);
8912    
8913     //
8914     return $res;
8915     }
8916    
8917 softime 7996 /**
8918     * TREATMENT - update_last_modification_date.
8919     *
8920     * Cette methode met à jour la date de dernière modification du dossier.
8921     *
8922     * @return boolean
8923     */
8924     public function update_last_modification_date() {
8925     //
8926     $this->begin_treatment(__METHOD__);
8927     //
8928     $this->correct = true;
8929 softime 9245 $valF = array();
8930     $valF["date_modification"] = 'NOW';
8931 softime 7996 //
8932     $res = $this->f->db->autoExecute(
8933     DB_PREFIXE.$this->table,
8934 softime 9245 $valF,
8935 softime 7996 DB_AUTOQUERY_UPDATE,
8936     $this->clePrimaire." = '".$this->getVal($this->clePrimaire)."'"
8937     );
8938     if ($this->f->isDatabaseError($res, true)) {
8939     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
8940     $this->correct = false;
8941     return $this->end_treatment(__METHOD__, false);
8942     } else {
8943     return $this->end_treatment(__METHOD__, true);
8944     }
8945     //
8946     return $this->end_treatment(__METHOD__, false);
8947     }
8948 softime 7366
8949 softime 7996 /**
8950     * TREATMENT - update_hash_sitadel.
8951     *
8952     * Cette methode met à jour le hash SITADEL du dossier.
8953     *
8954     * @return boolean
8955     */
8956     public function update_hash_sitadel($hash_sitadel = null) {
8957     //
8958     $this->begin_treatment(__METHOD__);
8959     //
8960     if ($hash_sitadel !== null && $hash_sitadel !== '') {
8961     //
8962     $this->correct = true;
8963 softime 9245 $valF = array();
8964     $valF["hash_sitadel"] = $hash_sitadel;
8965 softime 7996 //
8966     $res = $this->f->db->autoExecute(
8967     DB_PREFIXE.$this->table,
8968 softime 9245 $valF,
8969 softime 7996 DB_AUTOQUERY_UPDATE,
8970     $this->clePrimaire." = '".$this->getVal($this->clePrimaire)."'"
8971     );
8972     if ($this->f->isDatabaseError($res, true)) {
8973     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
8974     $this->correct = false;
8975     return $this->end_treatment(__METHOD__, false);
8976     } else {
8977     return $this->end_treatment(__METHOD__, true);
8978     }
8979     }
8980     //
8981     return $this->end_treatment(__METHOD__, false);
8982     }
8983    
8984 softime 8477 /**
8985 softime 9245 * TREATMENT - update_version_clos
8986     *
8987     * @param string $mode Mode de mise à jour ("up" ou "down")
8988     *
8989     * @return boolean
8990     */
8991     public function update_version_clos($mode) {
8992     //
8993     $this->begin_treatment(__METHOD__);
8994     //
8995     if ($mode !== 'up' && $mode !== 'down') {
8996     return $this->end_treatment(__METHOD__, false);
8997     }
8998     //
8999     $inst_da = $this->get_inst_dossier_autorisation($this->getVal("dossier_autorisation"));
9000     $da_version_clos = $inst_da->getval('numero_version_clos');
9001     //
9002     $this->correct = true;
9003     $data = array();
9004     $data["version_clos"] = 0;
9005     if ($da_version_clos !== null
9006     && $da_version_clos !== '') {
9007     //
9008     if ($mode === 'up') {
9009     $data["version_clos"] = intval($da_version_clos)+1;
9010     $inst_da->update_numero_version_clos($data["version_clos"]);
9011     }
9012     if ($mode === 'down') {
9013     $data["version_clos"] = null;
9014     }
9015     } else {
9016     $inst_da->update_numero_version_clos($data["version_clos"]);
9017     }
9018     //
9019     $res = $this->f->db->autoExecute(
9020     sprintf('%s%s', DB_PREFIXE, $this->table),
9021     $data,
9022     DB_AUTOQUERY_UPDATE,
9023     sprintf("%s = '%s'", $this->clePrimaire, $this->getVal($this->clePrimaire))
9024     );
9025     $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);
9026     if ($this->f->isDatabaseError($res, true) === true) {
9027     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
9028     $this->correct = false;
9029     return $this->end_treatment(__METHOD__, false);
9030     }
9031     return $this->end_treatment(__METHOD__, true);
9032     }
9033    
9034     /**
9035     * Récupère l'identifiant de l'état car le getVal() récupère le libellé.
9036     *
9037     * @return mixed Soit un string, soit "false"
9038     */
9039     function get_id_etat() {
9040     $query = sprintf('
9041     SELECT etat
9042     FROM %1$sdossier
9043     WHERE dossier = \'%2$s\'
9044     ',
9045     DB_PREFIXE,
9046     $this->getVal($this->clePrimaire)
9047     );
9048     $res = $this->f->get_one_result_from_db_query(
9049     $query,
9050     true
9051     );
9052     if ($res['code'] === 'KO') {
9053     return false;
9054     }
9055     return $res['result'];
9056     }
9057    
9058     /**
9059 softime 8477 * Surcharge de la méthode rechercheTable pour éviter de court-circuiter le
9060     * générateur en devant surcharger la méthode cleSecondaire afin de supprimer
9061     * les éléments liés dans les tables NaN.
9062     *
9063     * @param mixed $dnu1 Instance BDD - À ne pas utiliser
9064     * @param string $table Table
9065     * @param string $field Champ
9066     * @param mixed $id Identifiant
9067     * @param mixed $dnu2 Marqueur de débogage - À ne pas utiliser
9068     * @param string $selection Condition de la requête
9069     *
9070     * @return void
9071     */
9072     function rechercheTable(&$dnu1 = null, $table, $field, $id, $dnu2 = null, $selection = "") {
9073 softime 7996
9074 softime 8477 // Dans le cas d'une suppression du dossier d'instruction, les tables
9075     // liées ne sont pas vérifiées
9076     $liaison_suppr = array (
9077     "demande",
9078     "donnees_techniques",
9079     "instruction",
9080     "lien_dossier_demandeur",
9081     );
9082     if ($this->get_action_crud() === 'delete'
9083     && in_array($table, array_keys($liaison_suppr)) === true) {
9084     // Annule la vérid
9085     $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);
9086     return;
9087     }
9088     //
9089     parent::rechercheTable($this->f->db, $table, $field, $id, null, $selection);
9090     }
9091    
9092 softime 10573 public function get_demandeurs() {
9093     $query = sprintf('
9094     SELECT demandeur.demandeur,
9095     lien_dossier_demandeur.petitionnaire_principal
9096     FROM %1$sdemandeur
9097     INNER JOIN %1$slien_dossier_demandeur
9098     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
9099     WHERE lien_dossier_demandeur.dossier = \'%2$s\'
9100     ',
9101     DB_PREFIXE,
9102     $this->getVal($this->clePrimaire)
9103     );
9104     $res = $this->f->get_all_results_from_db_query($query, true);
9105     if ($res['code'] === 'KO') {
9106     return false;
9107     }
9108     return $res['result'];
9109     }
9110 softime 8477
9111 softime 10573 /**
9112     * TREATMENT - normalize_address
9113     *
9114     * Enregistre en base de données les valeurs concernant l'adresse normalisée.
9115     *
9116     * @param string $address Valeur de l'adresse normalisée.
9117     * @param string $address_json JSON de toutes les données de l'adresse normalisée.
9118     * @return boolean
9119     */
9120     public function normalize_address(string $address = null, string $address_json = '{}') {
9121     //
9122     $this->begin_treatment(__METHOD__);
9123     // Valeurs par défaut si l'adresse normalisée est vide
9124     if ($address === '') {
9125     $address = null;
9126     $address_json = '{}';
9127     }
9128     // Valeur par défaut pour le JSON de l'adresse si l'adresse saisie ne
9129     // correspond au label du JSON, donc adresse non sélectionnée parmis les
9130     // résultats retourner par l'API adresse
9131     if ($address !== null) {
9132     $address_json_decode = json_decode($address_json, true);
9133     if (isset($address_json_decode['label']) === true
9134     && $address !== $address_json_decode['label']) {
9135     //
9136     $address_json = '{}';
9137     }
9138     }
9139     //
9140     $this->correct = true;
9141     $data = array();
9142     $data["adresse_normalisee"] = $address;
9143     $data["adresse_normalisee_json"] = $address_json;
9144     //
9145     $res = $this->f->db->autoExecute(
9146     sprintf('%s%s', DB_PREFIXE, $this->table),
9147     $data,
9148     DB_AUTOQUERY_UPDATE,
9149     sprintf("%s = '%s'", $this->clePrimaire, $this->getVal($this->clePrimaire))
9150     );
9151     $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);
9152     if ($this->f->isDatabaseError($res, true) === true) {
9153     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
9154     $this->correct = false;
9155     return $this->end_treatment(__METHOD__, false);
9156     }
9157     return $this->end_treatment(__METHOD__, true);
9158     }
9159 mbroquet 3730
9160 softime 10573 public function get_last_instruction_decision() {
9161     $query = sprintf('
9162     SELECT
9163     instruction.instruction
9164     FROM %1$sinstruction
9165     INNER JOIN %1$sdossier
9166     ON dossier.dossier = instruction.dossier
9167     INNER JOIN %1$setat
9168     ON dossier.etat = etat.etat
9169     WHERE instruction.etat = dossier.etat
9170     AND instruction.dossier = \'%2$s\'
9171     AND etat.statut = \'%3$s\'
9172     ORDER BY instruction.instruction DESC
9173     LIMIT 1
9174     ',
9175     DB_PREFIXE,
9176     $this->getVal('dossier'),
9177     'cloture'
9178     );
9179     $res = $this->f->get_one_result_from_db_query($query, true);
9180     if ($res['code'] === 'KO') {
9181     return false;
9182     }
9183     return $res['result'];
9184     }
9185 softime 7996
9186 softime 10573 /**
9187     * VIEW - view_normalize_address.
9188     *
9189     * Formulaire de recherche de l'adresse normalisée.
9190     *
9191     * @return void
9192     */
9193     public function view_normalize_address() {
9194     // Vérification de l'accessibilité sur l'élément
9195     $this->checkAccessibility();
9196    
9197     // Par défaut l'adresse saisie est celle renseignée sur le dossier
9198     $address_val = trim(preg_replace('/\s\s+/', ' ', sprintf('%s %s %s %s %s %s %s',
9199     $this->getVal('terrain_adresse_voie_numero'),
9200     $this->getVal('terrain_adresse_voie'),
9201     $this->getVal('terrain_adresse_lieu_dit'),
9202     $this->getVal('terrain_adresse_localite'),
9203     $this->getVal('terrain_adresse_code_postal'),
9204     $this->getVal('terrain_adresse_bp'),
9205     $this->getVal('terrain_adresse_cedex')
9206     )));
9207     $address_val_json = '{}';
9208     if ($this->getVal('adresse_normalisee') !== null
9209     && $this->getVal('adresse_normalisee') !== '') {
9210     //
9211     $address_val = $this->getVal('adresse_normalisee');
9212     $address_val_json = htmlentities($this->getVal('adresse_normalisee_json'));
9213     if ($this->f->get_submitted_post_value("submit-normalize") === null) {
9214     $this->f->displayMessage("error", __("L'adresse de ce terrain a déjà été normalisée."));
9215     }
9216     }
9217    
9218     /**
9219     * TREATMENT
9220     */
9221     // Traitement si validation du formulaire
9222     if ($this->f->get_submitted_post_value("submit-normalize") !== null) {
9223     //
9224     $this->normalize_address($_POST["address"], $_POST["address_json"]);
9225     return;
9226     }
9227    
9228     // Formulaire de validation
9229     $this->f->layout->display__form_container__begin(array(
9230     "action" => "",
9231     "name" => "f2_normalize_address",
9232     "onsubmit" => "normalize_address(this);return false;",
9233     ));
9234     //
9235     printf('
9236     <div id="sousform-href" data-href="%s"></div>',
9237     $this->compose_form_url("form", array(
9238     "validation" => null,
9239     "maj" => 160,
9240     "retour" => "form",
9241     ))
9242     );
9243     $champs = array('address', 'address_json', );
9244     // Instanciation de l'objet formulaire
9245     $this->form = $this->f->get_inst__om_formulaire(array(
9246     "validation" => 0,
9247     "maj" => $this->getParameter("maj"),
9248     "champs" => $champs,
9249     ));
9250     // Paramétrage des champs du formulaire
9251     // address
9252     $this->form->setLib("address", __("adresse à normaliser"));
9253     $this->form->setTaille("address", 60);
9254     $this->form->setMax("address", 255);
9255     $this->form->setType("address", "text");
9256     $this->form->setVal('address', $address_val);
9257     // address_json
9258     $this->form->setType("address_json", "hidden");
9259     $this->form->setVal('address_json', $address_val_json);
9260     $this->f->displayDescription(__("Veuillez sélectionner l'adresse normalisée qui se rapproche le plus de l'adresse du terrain."));
9261     // Ouverture du conteneur de formulaire
9262     $this->form->entete();
9263     $this->form->afficher($champs, 0, false, false);
9264     $this->form->enpied();
9265     $this->f->layout->display__form_controls_container__begin(array(
9266     "controls" => "bottom",
9267     ));
9268     $this->f->layout->display__form_input_submit(array(
9269     "name" => "submit-normalize",
9270     "value" => __("Normaliser l'adresse"),
9271     "class" => "boutonFormulaire",
9272     ));
9273     $this->f->layout->display__form_controls_container__end();
9274     //
9275     $this->f->layout->display__form_container__end();
9276     }
9277    
9278    
9279     public function get_last_instruction_incompletude() {
9280     $query = sprintf('
9281     SELECT
9282     instruction.instruction
9283     FROM %1$sinstruction
9284     INNER JOIN %1$sevenement
9285     ON evenement.evenement = instruction.evenement
9286     WHERE instruction.dossier = \'%2$s\'
9287     AND evenement.type = \'%3$s\'
9288     ORDER BY instruction.instruction DESC
9289     LIMIT 1
9290     ',
9291     DB_PREFIXE,
9292     $this->getVal('dossier'),
9293     'incompletude'
9294     );
9295     $res = $this->f->get_one_result_from_db_query($query, true);
9296     if ($res['code'] === 'KO') {
9297     return false;
9298     }
9299     return $res['result'];
9300     }
9301    
9302     function get_max_num_suffixe($dat_c, $annee, $dep_c, $com_c, $num) {
9303     //
9304     $query = sprintf('
9305     SELECT MAX(numerotation_num_suffixe) as max_num_suffixe
9306     FROM %1$sdossier
9307     WHERE numerotation_type = \'%2$s\'
9308     AND annee = \'%3$s\'
9309     AND numerotation_dep = \'%4$s\'
9310     AND numerotation_com = \'%5$s\'
9311     AND numerotation_num = \'%6$s\'
9312     ',
9313     DB_PREFIXE,
9314     $dat_c,
9315     $annee,
9316     $dep_c,
9317     $com_c,
9318     $num
9319     );
9320     $res = $this->f->get_one_result_from_db_query($query, true);
9321     if ($res['code'] === 'KO') {
9322     return null;
9323     }
9324     //
9325     return $res['result'];
9326     }
9327    
9328     public function view_json_data() {
9329     $this->checkAccessibility();
9330     $this->f->disableLog();
9331     $view = $this->get_json_data();
9332     printf(json_encode($view));
9333     }
9334    
9335     public function get_json_data() {
9336     $val = array_combine($this->champs, $this->val);
9337     foreach ($val as $key => $value) {
9338     $val[$key] = strip_tags($value);
9339     }
9340     $inst_datd = $this->get_inst_dossier_autorisation_type_detaille();
9341     $inst_dat = $this->get_inst_dossier_autorisation_type($inst_datd->getVal('dossier_autorisation_type'));
9342     $val['dossier_autorisation_type_detaille_code'] = $inst_datd->getVal('code');
9343     $val['dossier_autorisation_type_code'] = $inst_dat->getVal('code');
9344     $val['dossier_instruction_type_code'] = $this->getCode($this->getVal('dossier_instruction_type'));
9345     $val['dossier_suffixe'] = '';
9346     if ($this->getSuffixe($this->getVal('dossier_instruction_type')) === 't') {
9347     $val['dossier_suffixe'] = sprintf('%s%s',
9348     $this->getCode($this->getVal('dossier_instruction_type')),
9349     $this->get_dossier_instruction_version()
9350     );
9351     }
9352     /*$parameters = $this->f->getCollectivite($this->getVal('om_collectivite'));
9353     $val['insee'] = $parameters['insee'];*/
9354     $val['insee'] = $this->get_da_insee();
9355     $inst_ac = $this->get_inst_autorite_competente($val['autorite_competente']);
9356     $val['autorite_competente_code'] = $inst_ac->getVal('code');
9357     return $val;
9358     }
9359    
9360     public function update_by_instruction(array $val, array $extra_params = array()) {
9361     $this->begin_treatment(__METHOD__);
9362     // XXX Supprime les champs qui n'existent pas dans dossier
9363     $valF = $val;
9364     unset($valF['instruction']);
9365     if (empty($valF) === false) {
9366     $res = $this->f->db->autoExecute(
9367     sprintf('%s%s', DB_PREFIXE, $this->table),
9368     $valF,
9369     DB_AUTOQUERY_UPDATE,
9370     sprintf("%s = '%s'", $this->clePrimaire, $this->getVal($this->clePrimaire))
9371     );
9372     $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);
9373     if ($this->f->isDatabaseError($res, true) === true) {
9374     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
9375     $this->correct = false;
9376     return $this->end_treatment(__METHOD__, false);
9377     }
9378     }
9379     $trigger = $this->trigger_update_by_instruction($val);
9380     if ($trigger === false) {
9381     $this->addToLog(__('XXX'), DEBUG_MODE);
9382     $this->correct = false;
9383     return $this->end_treatment(__METHOD__, false);
9384     }
9385     return $this->end_treatment(__METHOD__, true);
9386     }
9387    
9388     protected function trigger_update_by_instruction(array $val, array $extra_params = array()) {
9389     foreach ($this->task_types as $task_type) {
9390     $method = sprintf('add_task_%s', $task_type);
9391     if (method_exists($this, $method) === true) {
9392     //
9393     if ($this->f->is_type_dossier_platau($this->getVal('dossier_autorisation')) === true
9394     && ($this->f->is_option_dossier_commune_enabled() !== true
9395     || ($this->f->is_option_dossier_commune_enabled() === true
9396     && $this->getVal('depot_electronique') === 't'))) {
9397     //
9398     $res = $this->$method($val, $extra_params);
9399     if ($res !== true) {
9400     return $res;
9401     }
9402     }
9403     }
9404     }
9405     return true;
9406     }
9407    
9408     protected function add_task_pec_metier_consultation(array $val, array $extra_params = array()) {
9409     // XXX Aucune gestion de la suppression de l'instruction et donc création d'une
9410     // nouvelle task à chaque fois qu'une instruction mettant à jour ce champ est ajoutée
9411     if (array_key_exists("pec_metier", $val) === true
9412     && $val["pec_metier"] !== $this->getVal('pec_metier')) {
9413     //
9414     $inst_task = $this->f->get_inst__om_dbform(array(
9415     "obj" => "task",
9416     "idx" => 0,
9417     ));
9418     $task_val = array(
9419     'type' => 'pec_metier_consultation',
9420     'object_id' => $val['instruction'],
9421     'dossier' => $this->getVal($this->clePrimaire),
9422     );
9423     if ($this->f->is_option_mode_service_consulte_enabled() === false
9424     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
9425     $task_val['state'] = $inst_task::STATUS_DRAFT;
9426     }
9427     $add_task = $inst_task->add_task(array('val' => $task_val));
9428     if ($add_task === false) {
9429     return false;
9430     }
9431     }
9432     return true;
9433     }
9434    
9435     protected function add_task_qualification_DI(array $val, array $extra_params = array()) {
9436     if (array_key_exists("autorite_competente", $val) === true
9437     && $val["autorite_competente"] !== $this->getVal('autorite_competente')) {
9438     //
9439     $inst_task = $this->f->get_inst__om_dbform(array(
9440     "obj" => "task",
9441     "idx" => 0,
9442     ));
9443     $task_val = array(
9444     'type' => 'qualification_DI',
9445     'object_id' => $val['instruction'],
9446     'dossier' => $this->getVal($this->clePrimaire),
9447     );
9448     if ($this->f->is_option_mode_service_consulte_enabled() === false
9449     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
9450     $task_val['state'] = $inst_task::STATUS_DRAFT;
9451     }
9452     $add_task = $inst_task->add_task(array('val' => $task_val));
9453     if ($add_task === false) {
9454     return false;
9455     }
9456     }
9457     return true;
9458     }
9459    
9460     protected function add_task_decision_DI(array $val, array $extra_params = array()) {
9461     if (array_key_exists("date_decision", $val) === true
9462     && array_key_exists("avis_decision", $val) === true
9463     && $val['date_decision'] !== null
9464     && $val['date_decision'] !== ''
9465     && $val['avis_decision'] !== null
9466     && $val['avis_decision'] !== ''
9467     && $val['date_decision'] !== $this->getVal('date_decision')
9468     && $val['avis_decision'] !== $this->getVal('avis_decision')) {
9469     //
9470     $inst_task = $this->f->get_inst__om_dbform(array(
9471     "obj" => "task",
9472     "idx" => 0,
9473     ));
9474     $task_val = array(
9475     'type' => 'decision_DI',
9476     'object_id' => $val['instruction'],
9477     'dossier' => $this->getVal($this->clePrimaire),
9478     );
9479     if ($this->f->is_option_mode_service_consulte_enabled() === false
9480     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
9481     $task_val['state'] = $inst_task::STATUS_DRAFT;
9482     }
9483     $add_task = $inst_task->add_task(array('val' => $task_val));
9484     if ($add_task === false) {
9485     return false;
9486     }
9487     }
9488     return true;
9489     }
9490    
9491     protected function add_task_avis_consultation(array $val, array $extra_params = array()) {
9492     if (array_key_exists("date_decision", $val) === true
9493     && array_key_exists("avis_decision", $val) === true
9494     && $val['date_decision'] !== null
9495     && $val['date_decision'] !== ''
9496     && $val['avis_decision'] !== null
9497     && $val['avis_decision'] !== ''
9498     && $val['date_decision'] !== $this->getVal('date_decision')
9499     && $val['avis_decision'] !== $this->getVal('avis_decision')) {
9500     //
9501     $inst_task = $this->f->get_inst__om_dbform(array(
9502     "obj" => "task",
9503     "idx" => 0,
9504     ));
9505     $task_val = array(
9506     'type' => 'avis_consultation',
9507     'object_id' => $val['instruction'],
9508     'dossier' => $this->getVal($this->clePrimaire),
9509     );
9510     if ($this->f->is_option_mode_service_consulte_enabled() === false
9511     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
9512     $task_val['state'] = $inst_task::STATUS_DRAFT;
9513     }
9514     $add_task = $inst_task->add_task(array('val' => $task_val));
9515     if ($add_task === false) {
9516     return false;
9517     }
9518     }
9519     return true;
9520     }
9521    
9522     protected function add_task_completude_DI(array $val, array $extra_params = array()) {
9523     if (array_key_exists("incomplet_notifie", $val) === true
9524     && $val['incomplet_notifie'] !== $this->boolean_format($this->getVal('incomplet_notifie'))
9525     && $val['incomplet_notifie'] === false) {
9526     //
9527     $inst_task = $this->f->get_inst__om_dbform(array(
9528     "obj" => "task",
9529     "idx" => 0,
9530     ));
9531     $task_val = array(
9532     'type' => 'completude_DI',
9533     'object_id' => $val['instruction'],
9534     'dossier' => $this->getVal($this->clePrimaire),
9535     );
9536     if ($this->f->is_option_mode_service_consulte_enabled() === false
9537     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
9538     $task_val['state'] = $inst_task::STATUS_DRAFT;
9539     }
9540     $add_task = $inst_task->add_task(array('val' => $task_val));
9541     if ($add_task === false) {
9542     return false;
9543     }
9544     }
9545     return true;
9546     }
9547    
9548     public function add_task_incompletude_DI(array $val, array $extra_params = array()) {
9549     if (array_key_exists("incomplet_notifie", $val) === true
9550     // && $val['incomplet_notifie'] !== $this->getVal('incomplet_notifie')
9551     // && $val['incomplet_notifie'] === 't'
9552     && $this->getVal('incomplet_notifie') === 't') {
9553     //
9554     $inst_task = $this->f->get_inst__om_dbform(array(
9555     "obj" => "task",
9556     "idx" => 0,
9557     ));
9558     $task_val = array(
9559     'type' => 'incompletude_DI',
9560     'object_id' => $val['instruction'],
9561     'dossier' => $this->getVal($this->clePrimaire),
9562     );
9563     if ($this->f->is_option_mode_service_consulte_enabled() === false
9564     && $this->getVal('etat_transmission_platau') === 'non_transmissible') {
9565     $task_val['state'] = $inst_task::STATUS_DRAFT;
9566     }
9567     $add_task = $inst_task->add_task(array('val' => $task_val));
9568     if ($add_task === false) {
9569     return false;
9570     }
9571     }
9572     return true;
9573     }
9574    
9575     public function get_parcelles($dossier = null) {
9576     if ($dossier === null) {
9577     $dossier = $this->getVal('dossier');
9578     }
9579     $query = sprintf('
9580     SELECT *
9581     FROM %1$sdossier_parcelle
9582     WHERE dossier = \'%2$s\'
9583     ORDER BY dossier_parcelle
9584     ',
9585     DB_PREFIXE,
9586     $dossier
9587     );
9588     $res = $this->f->get_all_results_from_db_query($query, true);
9589     if ($res['code'] === 'KO') {
9590     return false;
9591     }
9592     return $res['result'];
9593     }
9594    
9595     public function boolean_format(string $val) {
9596     if ($val === 't') {
9597     return true;
9598     }
9599     if ($val === 'f') {
9600     return false;
9601     }
9602     return null;
9603     }
9604    
9605     protected function getDossier($champ = null) {
9606     return $this->getVal($this->clePrimaire);
9607     }
9608    
9609     protected function getDossierObject() {
9610     return $this;
9611     }
9612    
9613     /**
9614     * Recupère la source du dépôt
9615     *
9616     * @return string source du dépôt
9617     */
9618     public function get_source_depot_from_demande() {
9619     $demande = $this->get_inst_demande();
9620     return $demande->getVal('source_depot');
9621     }
9622    
9623     }

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26