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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26