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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10968 - (hide annotations)
Wed Dec 15 00:06:28 2021 UTC (3 years, 1 month ago) by softime
File size: 430700 byte(s)
* Fusion de la branche d'intégration 5.4.0-develop dans le trunk

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26