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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 8989 - (hide annotations)
Thu Oct 31 15:09:51 2019 UTC (5 years, 3 months ago) by softime
File size: 323751 byte(s)
* Merge de la branche d'intégration 4.12.0-develop vers 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 6565 );
30     var $postedIdDemandeur = array("petitionnaire_principal" => array(),
31     "delegataire" => array(),
32     "petitionnaire" => array(),
33     "plaignant_principal" => array(),
34     "plaignant" => array(),
35     "contrevenant_principal" => array(),
36     "contrevenant" => array(),
37     "requerant_principal" => array(),
38     "requerant" => array(),
39     "avocat_principal" => array(),
40     "avocat" => array(),
41 softime 7067 "bailleur_principal" => array(),
42     "bailleur" => array(),
43 softime 6565 );
44 mbroquet 3730 /**
45     * Instance de la classe taxe_amenagement.
46     *
47     * @var null
48     */
49     var $inst_taxe_amenagement = null;
50    
51     /**
52     * Instance de la classe donnees_techniques.
53     *
54     * @var null
55     */
56     var $inst_donnees_techniques = null;
57    
58     /**
59     * Instance de la classe dossier_autorisation.
60     *
61     * @var mixed (resource | null)
62     */
63     var $inst_dossier_autorisation = null;
64    
65     /**
66     * Instance de la classe dossier_autorisation_type_detaille.
67     *
68     * @var null
69     */
70     var $inst_dossier_autorisation_type_detaille = null;
71    
72     /**
73     * Instance de la classe cerfa.
74     *
75     * @var null
76     */
77     var $inst_cerfa = null;
78    
79 softime 6565 /**
80     * Groupe du dossier d'instruction.
81     *
82     * @var null
83     */
84     var $groupe = null;
85 mbroquet 3730
86 softime 6565 /**
87     * Instance de la classe groupe.
88     */
89     var $inst_groupe = null;
90    
91     /**
92     * Instance de la classe dossier_autorisation_type.
93     *
94     * @var null
95     */
96     var $inst_dossier_autorisation_type = null;
97    
98 softime 7366 /**
99     * Instance de la classe demande.
100     *
101     * @var mixed (resource | null)
102     */
103     var $inst_demande = null;
104 mbroquet 3730
105     /*Mutateur pour ma variable dossier_instruction_type*/
106     public function getDossierInstructionType(){
107     return $this->dossier_instruction_type;
108     }
109     public function setDossierInstructionType($dossier_instruction_type){
110     $this->dossier_instruction_type = $dossier_instruction_type;
111     }
112    
113     /**
114     * Définition des actions disponibles sur la classe.
115     *
116     * @return void
117     */
118     function init_class_actions() {
119    
120     parent::init_class_actions();
121    
122     // ACTION - 003 - consulter
123     //
124 softime 6565 $this->class_actions[3]["condition"] = array(
125     "is_user_from_allowed_collectivite",
126     "check_context",
127     );
128 mbroquet 3730
129     // ACTION - 004 - contrainte
130     //
131     $this->class_actions[4] = array(
132     "identifier" => "contrainte",
133     "view" => "view_contrainte",
134     "permission_suffix" => "contrainte_tab",
135     "condition" => array(
136     "is_user_from_allowed_collectivite",
137     ),
138     );
139    
140     // ACTION - 005 - view_document_numerise
141     // Interface spécifique du tableau des pièces
142     $this->class_actions[5] = array(
143     "identifier" => "view_document_numerise",
144     "view" => "view_document_numerise",
145     "permission_suffix" => "document_numerise",
146     "condition" => array(
147     "is_user_from_allowed_collectivite",
148     ),
149     );
150    
151     // ACTION - 006 - view_sitadel
152     //
153     $this->class_actions[6] = array(
154     "identifier" => "sitadel",
155     "view" => "view_sitadel",
156     "permission_suffix" => "export_sitadel",
157     );
158 softime 6565
159     // ACTION - 777 - Redirection vers la classe fille adéquate
160     //
161     $this->class_actions[777] = array(
162     "identifier" => "redirect",
163     "view" => "redirect",
164     "permission_suffix" => "consulter",
165     );
166 mbroquet 3730 }
167    
168     /**
169 softime 8989 * Clause select pour la requête de sélection des données de l'enregistrement.
170     *
171     * @return array
172     */
173     function get_var_sql_forminc__champs() {
174     return array(
175     "dossier.dossier",
176     "dossier.om_collectivite AS om_collectivite",
177     "dossier.dossier_libelle",
178     "dossier.dossier_instruction_type",
179     "dossier_autorisation_type_detaille.libelle as dossier_autorisation_type_detaille",
180     "autorisation_contestee",
181     "donnees_techniques.ctx_reference_dsj as ctx_reference_dsj",
182     "donnees_techniques.ctx_reference_sagace as ctx_reference_sagace",
183     "dossier.depot_electronique",
184     "CASE WHEN requerant_principal.qualite='particulier' THEN
185     TRIM(CONCAT(requerant_principal.particulier_nom, ' ', requerant_principal.particulier_prenom))
186     ELSE
187     TRIM(CONCAT(requerant_principal.personne_morale_raison_sociale, ' ', requerant_principal.personne_morale_denomination))
188     END as requerants",
189     "CASE WHEN petitionnaire_principal.qualite='particulier' THEN
190     TRIM(CONCAT(petitionnaire_principal.particulier_nom, ' ', petitionnaire_principal.particulier_prenom))
191     ELSE
192     TRIM(CONCAT(petitionnaire_principal.personne_morale_raison_sociale, ' ', petitionnaire_principal.personne_morale_denomination))
193     END as dossier_petitionnaire",
194     "'' as dossier_petitionnaires",
195     "CASE WHEN contrevenant_principal.qualite='particulier' THEN
196     TRIM(CONCAT(contrevenant_principal.particulier_nom, ' ', contrevenant_principal.particulier_prenom))
197     ELSE
198     TRIM(CONCAT(contrevenant_principal.personne_morale_raison_sociale, ' ', contrevenant_principal.personne_morale_denomination))
199     END as contrevenants",
200     "concat(replace(dossier.terrain_references_cadastrales,';',' '),'<br/>',
201     dossier.terrain_adresse_voie_numero,' ',
202     dossier.terrain_adresse_voie,' ',
203     dossier.terrain_adresse_code_postal) as terrain",
204     "arrondissement.libelle as dossier_arrondissement",
205     // description/nature des travaux. En cas de modif, bloc de code aussi
206     // présent dans 'dossier_instruction.inc.php','om_requete'
207     // et 'stats à la demande'.
208     "CONCAT_WS(
209     '<br/>',
210     CASE WHEN co_projet_desc = '' THEN
211     NULL
212     ELSE
213     TRIM(co_projet_desc)
214     END,
215     CASE WHEN ope_proj_desc = '' THEN
216     NULL
217     ELSE
218     TRIM(ope_proj_desc)
219     END,
220     CASE WHEN am_projet_desc = '' THEN
221     NULL
222     ELSE
223     TRIM(am_projet_desc)
224     END,
225     CASE WHEN dm_projet_desc = '' THEN
226     NULL
227     ELSE
228     TRIM(dm_projet_desc)
229     END,
230     CASE WHEN donnees_techniques.erp_cstr_neuve IS TRUE
231     THEN '".str_replace("'", "''", _('erp_cstr_neuve'))."' END,
232     CASE WHEN donnees_techniques.erp_trvx_acc IS TRUE
233     THEN '".str_replace("'", "''", _('erp_trvx_acc'))."' END,
234     CASE WHEN donnees_techniques.erp_extension IS TRUE
235     THEN '".str_replace("'", "''", _('erp_extension'))."' END,
236     CASE WHEN donnees_techniques.erp_rehab IS TRUE
237     THEN '".str_replace("'", "''", _('erp_rehab'))."' END,
238     CASE WHEN donnees_techniques.erp_trvx_am IS TRUE
239     THEN '".str_replace("'", "''", _('erp_trvx_am'))."' END,
240     CASE WHEN donnees_techniques.erp_vol_nouv_exist IS TRUE
241     THEN '".str_replace("'", "''", _('erp_vol_nouv_exist'))."' END
242     ) as \"description_projet\"",
243     //
244     "donnees_techniques.ctx_synthese_nti as dt_ctx_synthese_nti",
245     "donnees_techniques.ctx_synthese_anr as dt_ctx_synthese_anr ",
246     "donnees_techniques.ctx_infraction as dt_ctx_infraction ",
247     "donnees_techniques.ctx_regularisable as dt_ctx_regularisable ",
248     "dossier_autorisation.dossier_autorisation",
249     "dossier_autorisation.dossier_autorisation_libelle",
250     "annee",
251     "autorite_competente",
252     "dossier.instructeur",
253     "instructeur_2",
254     "dossier.division",
255     "public.ST_AsText(dossier.geom::geometry) as geom",
256     // Enjeu
257     "enjeu_urba",
258     "enjeu_erp",
259     "'' as enjeu_ctx",
260     // Qualification
261     "erp",
262     "a_qualifier",
263     // Archive
264     "numero_versement_archive",
265     "date_demande",
266     // Fieldset instruction
267     // Suivi
268     // Col 1
269     "dossier.date_depot",
270     "dossier.date_affichage",
271     "date_premiere_visite",
272     "date_derniere_visite",
273     "date_contradictoire",
274     "date_retour_contradictoire",
275     "date_ait",
276     "date_transmission_parquet",
277     "donnees_techniques.ctx_date_audience as date_audience",
278     "delai",
279     "delai_incompletude",
280     "date_dernier_depot",
281     "date_limite",
282     "date_complet",
283     "date_limite_incompletude",
284     "date_cloture_instruction",
285     // Col 2
286     "etat.libelle as etat",
287     "evenement_suivant_tacite",
288     "evenement_suivant_tacite_incompletude",
289     // Bloc 2 fieldsets
290     // Col 1 : Fieldset "Décision"
291     "dossier.date_decision",
292     "dossier.avis_decision",
293     // Col 2 : Fieldset "Validité de l'autorisation"
294     "dossier.date_validite",
295     // Autre
296     // Col 1
297     "accord_tacite",
298     // Col 2
299     "date_rejet",
300     "date_notification_delai",
301     "dossier.date_chantier",
302     "dossier.date_achevement",
303     // Col 3
304     "date_conformite",
305     // Fieldset "Simulation des taxes"
306     "tax_secteur",
307     "tax_mtn_part_commu",
308     "tax_mtn_part_commu_sans_exo",
309     "tax_mtn_part_depart",
310     "tax_mtn_part_depart_sans_exo",
311     "tax_mtn_part_reg",
312     "tax_mtn_part_reg_sans_exo",
313     "tax_mtn_total",
314     "tax_mtn_total_sans_exo",
315     "tax_mtn_rap",
316     "tax_mtn_rap_sans_exo",
317     // Fieldset "Localisation du terrain"
318     // Col 1
319     "dossier.terrain_adresse_voie_numero",
320     "dossier.terrain_adresse_lieu_dit",
321     "dossier.terrain_adresse_code_postal",
322     "dossier.terrain_adresse_cedex",
323     "dossier.parcelle_temporaire",
324     "dossier.terrain_references_cadastrales",
325     // Col 2
326     "dossier.terrain_adresse_voie",
327     "dossier.terrain_adresse_bp",
328     "dossier.terrain_adresse_localite",
329     "dossier.terrain_superficie",
330     //
331     "geom1",
332     "dossier.description",
333     "version",
334     "incompletude",
335     "incomplet_notifie",
336     "etat_pendant_incompletude",
337     "dossier.duree_validite",
338     "quartier",
339     "dossier.log_instructions",
340     "interface_referentiel_erp",
341     "date_modification",
342     "hash_sitadel",
343     );
344     }
345    
346     /**
347     * Clause from pour la requête de sélection des données de l'enregistrement.
348     *
349     * @return string
350     */
351     function get_var_sql_forminc__tableSelect() {
352     return sprintf(
353     '%1$s%2$s
354     LEFT JOIN %1$savis_decision
355     ON avis_decision.avis_decision=dossier.avis_decision
356     LEFT JOIN %1$sdossier_autorisation
357     ON dossier.dossier_autorisation=dossier_autorisation.dossier_autorisation
358     LEFT JOIN %1$sdossier_autorisation_type_detaille
359     ON dossier_autorisation.dossier_autorisation_type_detaille=dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
360     LEFT JOIN (
361     SELECT *
362     FROM %1$slien_dossier_demandeur
363     INNER JOIN %1$sdemandeur
364     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
365     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
366     AND LOWER(demandeur.type_demandeur) = LOWER(\'petitionnaire\')
367     ) as petitionnaire_principal
368     ON petitionnaire_principal.dossier = dossier.dossier
369     LEFT JOIN (
370     SELECT *
371     FROM %1$slien_dossier_demandeur
372     INNER JOIN %1$sdemandeur
373     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
374     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
375     AND LOWER(demandeur.type_demandeur) = LOWER(\'requerant\')
376     ) as requerant_principal
377     ON requerant_principal.dossier = dossier.dossier
378     LEFT JOIN (
379     SELECT *
380     FROM %1$slien_dossier_demandeur
381     INNER JOIN %1$sdemandeur
382     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
383     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
384     AND LOWER(demandeur.type_demandeur) = LOWER(\'contrevenant\')
385     ) as contrevenant_principal
386     ON contrevenant_principal.dossier = dossier.dossier
387     LEFT JOIN %1$sdonnees_techniques
388     ON donnees_techniques.dossier_instruction = dossier.dossier
389     LEFT JOIN %1$setat
390     ON dossier.etat = etat.etat
391     LEFT JOIN %1$sarrondissement
392     ON dossier.terrain_adresse_code_postal = arrondissement.code_postal',
393     DB_PREFIXE,
394     $this->table
395     );
396     }
397    
398     /**
399     *
400     * @return string
401     */
402     function get_var_sql_forminc__sql_avis_decision() {
403     return "SELECT avis_decision,libelle from ".DB_PREFIXE."avis_decision order by libelle";
404     }
405    
406     /**
407     *
408     * @return string
409     */
410     function get_var_sql_forminc__sql_avis_decision_by_id() {
411     return "SELECT avis_decision.avis_decision, libelle FROM ".DB_PREFIXE."avis_decision WHERE avis_decision = '<idx>'";
412     }
413    
414     /**
415     *
416     * @return string
417     */
418     function get_var_sql_forminc__sql_dossier_autorisation() {
419     return "SELECT dossier_autorisation.dossier_autorisation, dossier_autorisation.dossier_autorisation FROM ".DB_PREFIXE."dossier_autorisation ORDER BY dossier_autorisation.dossier_autorisation ASC";
420     }
421    
422     /**
423     *
424     * @return string
425     */
426     function get_var_sql_forminc__sql_dossier_autorisation_by_id() {
427     return "SELECT dossier_autorisation.dossier_autorisation, dossier_autorisation.dossier_autorisation FROM ".DB_PREFIXE."dossier_autorisation WHERE dossier_autorisation = '<idx>'";
428     }
429    
430     /**
431     *
432     * @return string
433     */
434     function get_var_sql_forminc__sql_arrondissement() {
435     return "SELECT arrondissement.arrondissement, arrondissement.libelle FROM ".DB_PREFIXE."arrondissement ORDER BY arrondissement.libelle ASC";
436     }
437    
438     /**
439     *
440     * @return string
441     */
442     function get_var_sql_forminc__sql_arrondissement_by_id() {
443     return "SELECT arrondissement.arrondissement, arrondissement.libelle FROM ".DB_PREFIXE."arrondissement WHERE arrondissement = <idx>";
444     }
445    
446     /**
447     *
448     * @return string
449     */
450     function get_var_sql_forminc__sql_autorisation_contestee() {
451     return "SELECT dossier.dossier, dossier.dossier_libelle FROM ".DB_PREFIXE."dossier ORDER BY dossier.annee ASC";
452     }
453    
454     /**
455     *
456     * @return string
457     */
458     function get_var_sql_forminc__sql_autorisation_contestee_by_id() {
459     return "SELECT dossier.dossier, dossier.dossier_libelle FROM ".DB_PREFIXE."dossier WHERE dossier = '<idx>'";
460     }
461    
462     /**
463     *
464     * @return string
465     */
466     function get_var_sql_forminc__sql_dossier_autorisation_type_detaille() {
467     return "SELECT dossier_autorisation_type_detaille.dossier_autorisation_type_detaille, dossier_autorisation_type_detaille.code
468     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
469     ORDER BY dossier_autorisation_type_detaille.libelle";
470     }
471    
472     /**
473     *
474     * @return string
475     */
476     function get_var_sql_forminc__sql_dossier_autorisation_type_detaille_by_id() {
477     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>";
478     }
479    
480     /**
481     *
482     * @return string
483     */
484     function get_var_sql_forminc__sql_demandeur() {
485     return "SELECT dossier_autorisation_type_detaille.dossier_autorisation_type_detaille, dossier_autorisation_type_detaille.libelle
486     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
487     ORDER BY dossier_autorisation_type_detaille.libelle";
488     }
489    
490     /**
491     *
492     * @return string
493     */
494     function get_var_sql_forminc__sql_demandeur_by_id() {
495     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>";
496     }
497    
498     /**
499     *
500     * @return string
501     */
502     function get_var_sql_forminc__sql_instructeur_div() {
503     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
504     FROM ".DB_PREFIXE."instructeur
505     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
506     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
507     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)))
508     <instructeur_qualite>
509     ORDER BY nom";
510     }
511    
512     /**
513     *
514     * @return string
515     */
516     function get_var_sql_forminc__sql_instructeur_div_by_id() {
517     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
518     FROM ".DB_PREFIXE."instructeur
519     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
520     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
521     WHERE instructeur = <idx>";
522     }
523    
524     /**
525     *
526     * @return string
527     */
528     function get_var_sql_forminc__sql_instructeur_div_by_di() {
529     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
530     FROM ".DB_PREFIXE."instructeur
531     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
532     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
533     LEFT JOIN ".DB_PREFIXE."direction
534     ON division.direction = direction.direction
535     LEFT JOIN ".DB_PREFIXE."om_collectivite
536     ON direction.om_collectivite = om_collectivite.om_collectivite
537     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)))
538     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
539     <instructeur_qualite>
540     ORDER BY nom";
541     }
542    
543     /**
544     *
545     * @return string
546     */
547     function get_var_sql_forminc__sql_instructeur_by_di() {
548     return "SELECT instructeur.instructeur, instructeur.nom
549     FROM ".DB_PREFIXE."instructeur
550     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
551     LEFT JOIN ".DB_PREFIXE."division
552     ON instructeur.division = division.division
553     LEFT JOIN ".DB_PREFIXE."direction
554     ON division.direction = direction.direction
555     LEFT JOIN ".DB_PREFIXE."om_collectivite
556     ON direction.om_collectivite = om_collectivite.om_collectivite
557     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)))
558     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
559     <instructeur_qualite>
560     ORDER BY instructeur.nom ASC";
561     }
562    
563     /**
564     *
565     * @return string
566     */
567     function get_var_sql_forminc__sql_instructeur_2_div() {
568     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
569     FROM ".DB_PREFIXE."instructeur
570     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
571     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
572     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)))
573     AND instructeur_qualite.code = 'tech'
574     ORDER BY nom";
575     }
576    
577     /**
578     *
579     * @return string
580     */
581     function get_var_sql_forminc__sql_instructeur_2_div_by_id() {
582     return $this->get_var_sql_forminc__sql("instructeur_div_by_id");
583     }
584    
585     /**
586     *
587     * @return string
588     */
589     function get_var_sql_forminc__sql_instructeur_2_div_by_di() {
590     return "SELECT instructeur.instructeur, instructeur.nom||' ('||division.code||')'
591     FROM ".DB_PREFIXE."instructeur
592     INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division
593     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
594     LEFT JOIN ".DB_PREFIXE."direction
595     ON division.direction = direction.direction
596     LEFT JOIN ".DB_PREFIXE."om_collectivite
597     ON direction.om_collectivite = om_collectivite.om_collectivite
598     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)))
599     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
600     AND instructeur_qualite.code = 'tech'
601     ORDER BY nom";
602     }
603    
604     /**
605     *
606     * @return string
607     */
608     function get_var_sql_forminc__sql_instructeur_2_by_di() {
609     return "SELECT instructeur.instructeur, instructeur.nom
610     FROM ".DB_PREFIXE."instructeur
611     INNER JOIN ".DB_PREFIXE."instructeur_qualite ON instructeur_qualite.instructeur_qualite=instructeur.instructeur_qualite
612     LEFT JOIN ".DB_PREFIXE."division
613     ON instructeur.division = division.division
614     LEFT JOIN ".DB_PREFIXE."direction
615     ON division.direction = direction.direction
616     LEFT JOIN ".DB_PREFIXE."om_collectivite
617     ON direction.om_collectivite = om_collectivite.om_collectivite
618     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)))
619     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
620     AND instructeur_qualite.code = 'tech'
621     ORDER BY instructeur.nom ASC";
622     }
623    
624     /**
625     *
626     * @return string
627     */
628     function get_var_sql_forminc__sql_division_by_di() {
629     return "SELECT division.division, division.libelle
630     FROM ".DB_PREFIXE."division
631     LEFT JOIN ".DB_PREFIXE."direction
632     ON division.direction = direction.direction
633     LEFT JOIN ".DB_PREFIXE."om_collectivite
634     ON direction.om_collectivite = om_collectivite.om_collectivite
635     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)))
636     AND (om_collectivite.niveau = '2' OR direction.om_collectivite = '<collectivite_di>')
637     ORDER BY division.libelle ASC";
638     }
639    
640     /**
641 mbroquet 3730 * VIEW - view_sitadel.
642     *
643     * @return void
644     */
645     function view_sitadel() {
646 softime 8989 // Affichage du formulaire permettant le choix d'un interval de date
647 mbroquet 3730 // ainsi que le numéro de d'ordre qui est le numéro de la version de
648     // l'export
649 softime 8989 if (empty($this->f->get_submitted_post_value())) {
650 mbroquet 3730 // Affichage du formulaire
651 softime 8989 $this->affichageFormulaire();
652 mbroquet 3730 }
653     else {
654     // Initialisation des variables pour les messages de fin de traitement
655     $correct=true;
656     // Initialisation de la chaîne contenant le message d'erreur
657     $erreur = "";
658 softime 8989 //
659     $message_valid = '';
660     $message_info = '';
661 mbroquet 3730
662     // Initialisation des dates de début et de fin
663     $datedebut ='';
664     $datefin='';
665    
666     // Traitement des erreurs
667     if ($this->f->get_submitted_post_value("datedebut") == "") {
668     $correct=false;
669     } else {
670     $datedebut = substr($this->f->get_submitted_post_value("datedebut"),6,4).
671     "-".substr($this->f->get_submitted_post_value("datedebut"),3,2)."-".
672     substr($this->f->get_submitted_post_value("datedebut"),0,2);
673     }
674     if ($this->f->get_submitted_post_value("datefin") == "") {
675     $correct=false;
676     } else {
677     $datefin = substr($this->f->get_submitted_post_value("datefin"),6,4).
678     "-".substr($this->f->get_submitted_post_value("datefin"),3,2)."-".
679     substr($this->f->get_submitted_post_value("datefin"),0,2);
680     }
681     $numero = $this->f->get_submitted_post_value("numero");
682     //
683     if ($correct === true){ // ***
684     // Requête permettant de lister tous les dossiers de l'export
685     $sql= "SELECT dossier.dossier,
686     dossier.om_collectivite as collectivite,
687     dossier.dossier_autorisation,
688     dossier_instruction_type.mouvement_sitadel,
689     dossier_instruction_type.code as dossier_instruction_type_code,
690     dossier.date_depot,
691     dossier.date_decision,
692     dossier.date_chantier,
693     dossier.date_achevement,
694     dossier.terrain_references_cadastrales as dossier_terrain_references_cadastrales,
695     dossier.terrain_adresse_voie_numero as dossier_terrain_adresse_voie_numero,
696     dossier.terrain_adresse_voie as dossier_terrain_adresse_voie,
697     dossier.terrain_adresse_lieu_dit as dossier_terrain_adresse_lieu_dit,
698     dossier.terrain_adresse_localite as dossier_terrain_adresse_localite,
699     dossier.terrain_adresse_code_postal as dossier_terrain_adresse_code_postal,
700     dossier.terrain_adresse_bp as dossier_terrain_adresse_bp,
701     dossier.terrain_adresse_cedex as dossier_terrain_adresse_cedex,
702     dossier_autorisation_type.code,
703     dossier.date_limite,
704     dossier.date_limite_incompletude,
705     dossier.date_notification_delai,
706     dossier.terrain_superficie as dossier_terrain_superficie,
707 softime 7996 dossier.date_modification,
708     dossier.hash_sitadel,
709 mbroquet 3730
710     arrondissement.code_impots as code_impots,
711    
712     autorite_competente.autorite_competente_sitadel,
713     pp.type_demandeur,
714     pp.qualite,
715     civilite_pp.libelle as civilite_pp,
716     pp.particulier_nom as pp_particulier_nom,
717     pp.particulier_prenom as pp_particulier_prenom,
718     pp.personne_morale_denomination as pp_personne_morale_denomination,
719     pp.personne_morale_raison_sociale as pp_personne_morale_raison_sociale,
720     pp.personne_morale_siret as pp_personne_morale_siret,
721     pp.personne_morale_categorie_juridique as pp_personne_morale_categorie_juridique,
722     civilite_pm.libelle as civilite_pm_libelle,
723     pp.personne_morale_nom as pp_personne_morale_nom,
724     pp.personne_morale_prenom as pp_personne_morale_prenom,
725    
726     pp.numero as pp_numero,
727     pp.voie as pp_voie,
728     pp.complement as pp_complement,
729     pp.lieu_dit as pp_lieu_dit,
730     pp.localite as pp_localite,
731     pp.code_postal as pp_code_postal,
732     pp.bp as pp_bp,
733     pp.cedex as pp_cedex,
734     pp.pays as pp_pays,
735     pp.division_territoriale as pp_division_territoriale,
736    
737     pp.telephone_fixe as pp_telephone_fixe,
738     pp.courriel as pp_courriel,
739    
740     donnees_techniques.co_archi_recours,
741     donnees_techniques.am_terr_surf,
742     donnees_techniques.am_lotiss,
743     donnees_techniques.terr_juri_zac,
744     donnees_techniques.terr_juri_afu,
745     donnees_techniques.co_projet_desc,
746     donnees_techniques.am_projet_desc,
747     donnees_techniques.dm_projet_desc,
748     donnees_techniques.co_cstr_nouv,
749     donnees_techniques.co_cstr_exist,
750     donnees_techniques.co_modif_aspect,
751     donnees_techniques.co_modif_struct,
752     donnees_techniques.co_cloture,
753     donnees_techniques.co_trx_exten,
754     donnees_techniques.co_trx_surelev,
755     donnees_techniques.co_trx_nivsup,
756     donnees_techniques.co_trx_amgt,
757     donnees_techniques.co_anx_pisc,
758     donnees_techniques.co_anx_gara,
759     donnees_techniques.co_anx_veran,
760     donnees_techniques.co_anx_abri,
761     donnees_techniques.co_anx_autr,
762     donnees_techniques.co_bat_niv_nb,
763 softime 4636
764     -- Tableau des destinations
765 mbroquet 3730 donnees_techniques.su_avt_shon1,
766     donnees_techniques.su_avt_shon2,
767     donnees_techniques.su_avt_shon3,
768     donnees_techniques.su_avt_shon4,
769     donnees_techniques.su_avt_shon5,
770     donnees_techniques.su_avt_shon6,
771     donnees_techniques.su_avt_shon7,
772     donnees_techniques.su_avt_shon8,
773     donnees_techniques.su_avt_shon9,
774     donnees_techniques.su_demo_shon1,
775     donnees_techniques.su_demo_shon2,
776     donnees_techniques.su_demo_shon3,
777     donnees_techniques.su_demo_shon4,
778     donnees_techniques.su_demo_shon5,
779     donnees_techniques.su_demo_shon6,
780     donnees_techniques.su_demo_shon7,
781     donnees_techniques.su_demo_shon8,
782     donnees_techniques.su_demo_shon9,
783     donnees_techniques.su_chge_shon1,
784     donnees_techniques.su_chge_shon2,
785     donnees_techniques.su_chge_shon3,
786     donnees_techniques.su_chge_shon4,
787     donnees_techniques.su_chge_shon5,
788     donnees_techniques.su_chge_shon6,
789     donnees_techniques.su_chge_shon7,
790     donnees_techniques.su_chge_shon8,
791     donnees_techniques.su_chge_shon9,
792 softime 4636 donnees_techniques.su_sup_shon1,
793     donnees_techniques.su_sup_shon2,
794     donnees_techniques.su_sup_shon3,
795     donnees_techniques.su_sup_shon4,
796     donnees_techniques.su_sup_shon5,
797     donnees_techniques.su_sup_shon6,
798     donnees_techniques.su_sup_shon7,
799     donnees_techniques.su_sup_shon8,
800     donnees_techniques.su_sup_shon9,
801 mbroquet 3730 donnees_techniques.su_cstr_shon1,
802     donnees_techniques.su_cstr_shon2,
803     donnees_techniques.su_cstr_shon3,
804     donnees_techniques.su_cstr_shon4,
805     donnees_techniques.su_cstr_shon5,
806     donnees_techniques.su_cstr_shon6,
807     donnees_techniques.su_cstr_shon7,
808     donnees_techniques.su_cstr_shon8,
809     donnees_techniques.su_cstr_shon9,
810     donnees_techniques.su_tot_shon1,
811     donnees_techniques.su_tot_shon2,
812     donnees_techniques.su_tot_shon3,
813     donnees_techniques.su_tot_shon4,
814     donnees_techniques.su_tot_shon5,
815     donnees_techniques.su_tot_shon6,
816     donnees_techniques.su_tot_shon7,
817     donnees_techniques.su_tot_shon8,
818     donnees_techniques.su_tot_shon9,
819 softime 4636 -- XXX valeurs obsolètes mais utilisées dans les conditions
820     -- pour afficher les messages d'incohérence
821     donnees_techniques.su_trsf_shon1,
822     donnees_techniques.su_trsf_shon2,
823     donnees_techniques.su_trsf_shon3,
824     donnees_techniques.su_trsf_shon4,
825     donnees_techniques.su_trsf_shon5,
826     donnees_techniques.su_trsf_shon6,
827     donnees_techniques.su_trsf_shon7,
828     donnees_techniques.su_trsf_shon8,
829     donnees_techniques.su_trsf_shon9,
830    
831     -- Tableau des sous-destinations
832     donnees_techniques.su2_avt_shon1,
833     donnees_techniques.su2_avt_shon2,
834     donnees_techniques.su2_avt_shon3,
835     donnees_techniques.su2_avt_shon4,
836     donnees_techniques.su2_avt_shon5,
837     donnees_techniques.su2_avt_shon6,
838     donnees_techniques.su2_avt_shon7,
839     donnees_techniques.su2_avt_shon8,
840     donnees_techniques.su2_avt_shon9,
841     donnees_techniques.su2_avt_shon10,
842     donnees_techniques.su2_avt_shon11,
843     donnees_techniques.su2_avt_shon12,
844     donnees_techniques.su2_avt_shon13,
845     donnees_techniques.su2_avt_shon14,
846     donnees_techniques.su2_avt_shon15,
847     donnees_techniques.su2_avt_shon16,
848     donnees_techniques.su2_avt_shon17,
849     donnees_techniques.su2_avt_shon18,
850     donnees_techniques.su2_avt_shon19,
851     donnees_techniques.su2_avt_shon20,
852     donnees_techniques.su2_demo_shon1,
853     donnees_techniques.su2_demo_shon2,
854     donnees_techniques.su2_demo_shon3,
855     donnees_techniques.su2_demo_shon4,
856     donnees_techniques.su2_demo_shon5,
857     donnees_techniques.su2_demo_shon6,
858     donnees_techniques.su2_demo_shon7,
859     donnees_techniques.su2_demo_shon8,
860     donnees_techniques.su2_demo_shon9,
861     donnees_techniques.su2_demo_shon10,
862     donnees_techniques.su2_demo_shon11,
863     donnees_techniques.su2_demo_shon12,
864     donnees_techniques.su2_demo_shon13,
865     donnees_techniques.su2_demo_shon14,
866     donnees_techniques.su2_demo_shon15,
867     donnees_techniques.su2_demo_shon16,
868     donnees_techniques.su2_demo_shon17,
869     donnees_techniques.su2_demo_shon18,
870     donnees_techniques.su2_demo_shon19,
871     donnees_techniques.su2_demo_shon20,
872     donnees_techniques.su2_chge_shon1,
873     donnees_techniques.su2_chge_shon2,
874     donnees_techniques.su2_chge_shon3,
875     donnees_techniques.su2_chge_shon4,
876     donnees_techniques.su2_chge_shon5,
877     donnees_techniques.su2_chge_shon6,
878     donnees_techniques.su2_chge_shon7,
879     donnees_techniques.su2_chge_shon8,
880     donnees_techniques.su2_chge_shon9,
881     donnees_techniques.su2_chge_shon10,
882     donnees_techniques.su2_chge_shon11,
883     donnees_techniques.su2_chge_shon12,
884     donnees_techniques.su2_chge_shon13,
885     donnees_techniques.su2_chge_shon14,
886     donnees_techniques.su2_chge_shon15,
887     donnees_techniques.su2_chge_shon16,
888     donnees_techniques.su2_chge_shon17,
889     donnees_techniques.su2_chge_shon18,
890     donnees_techniques.su2_chge_shon19,
891     donnees_techniques.su2_chge_shon20,
892     donnees_techniques.su2_sup_shon1,
893     donnees_techniques.su2_sup_shon2,
894     donnees_techniques.su2_sup_shon3,
895     donnees_techniques.su2_sup_shon4,
896     donnees_techniques.su2_sup_shon5,
897     donnees_techniques.su2_sup_shon6,
898     donnees_techniques.su2_sup_shon7,
899     donnees_techniques.su2_sup_shon8,
900     donnees_techniques.su2_sup_shon9,
901     donnees_techniques.su2_sup_shon10,
902     donnees_techniques.su2_sup_shon11,
903     donnees_techniques.su2_sup_shon12,
904     donnees_techniques.su2_sup_shon13,
905     donnees_techniques.su2_sup_shon14,
906     donnees_techniques.su2_sup_shon15,
907     donnees_techniques.su2_sup_shon16,
908     donnees_techniques.su2_sup_shon17,
909     donnees_techniques.su2_sup_shon18,
910     donnees_techniques.su2_sup_shon19,
911     donnees_techniques.su2_sup_shon20,
912     donnees_techniques.su2_cstr_shon1,
913     donnees_techniques.su2_cstr_shon2,
914     donnees_techniques.su2_cstr_shon3,
915     donnees_techniques.su2_cstr_shon4,
916     donnees_techniques.su2_cstr_shon5,
917     donnees_techniques.su2_cstr_shon6,
918     donnees_techniques.su2_cstr_shon7,
919     donnees_techniques.su2_cstr_shon8,
920     donnees_techniques.su2_cstr_shon9,
921     donnees_techniques.su2_cstr_shon10,
922     donnees_techniques.su2_cstr_shon11,
923     donnees_techniques.su2_cstr_shon12,
924     donnees_techniques.su2_cstr_shon13,
925     donnees_techniques.su2_cstr_shon14,
926     donnees_techniques.su2_cstr_shon15,
927     donnees_techniques.su2_cstr_shon16,
928     donnees_techniques.su2_cstr_shon17,
929     donnees_techniques.su2_cstr_shon18,
930     donnees_techniques.su2_cstr_shon19,
931     donnees_techniques.su2_cstr_shon20,
932     donnees_techniques.su2_tot_shon1,
933     donnees_techniques.su2_tot_shon2,
934     donnees_techniques.su2_tot_shon3,
935     donnees_techniques.su2_tot_shon4,
936     donnees_techniques.su2_tot_shon5,
937     donnees_techniques.su2_tot_shon6,
938     donnees_techniques.su2_tot_shon7,
939     donnees_techniques.su2_tot_shon8,
940     donnees_techniques.su2_tot_shon9,
941     donnees_techniques.su2_tot_shon10,
942     donnees_techniques.su2_tot_shon11,
943     donnees_techniques.su2_tot_shon12,
944     donnees_techniques.su2_tot_shon13,
945     donnees_techniques.su2_tot_shon14,
946     donnees_techniques.su2_tot_shon15,
947     donnees_techniques.su2_tot_shon16,
948     donnees_techniques.su2_tot_shon17,
949     donnees_techniques.su2_tot_shon18,
950     donnees_techniques.su2_tot_shon19,
951     donnees_techniques.su2_tot_shon20,
952    
953 mbroquet 3730 donnees_techniques.co_sp_transport,
954     donnees_techniques.co_sp_enseign,
955     donnees_techniques.co_sp_sante,
956     donnees_techniques.co_sp_act_soc,
957     donnees_techniques.co_sp_ouvr_spe,
958     donnees_techniques.co_sp_culture,
959     donnees_techniques.dm_tot_log_nb,
960     donnees_techniques.co_tot_ind_nb,
961     donnees_techniques.co_tot_coll_nb,
962     donnees_techniques.co_tot_log_nb,
963     donnees_techniques.co_resid_agees,
964     donnees_techniques.co_resid_etud,
965     donnees_techniques.co_resid_tourism,
966     donnees_techniques.co_resid_hot_soc,
967     donnees_techniques.co_resid_hand,
968     donnees_techniques.co_resid_autr,
969     donnees_techniques.co_resid_autr_desc,
970     donnees_techniques.co_uti_pers,
971     donnees_techniques.co_uti_princ,
972     donnees_techniques.co_uti_secon,
973     donnees_techniques.co_uti_vente,
974     donnees_techniques.co_uti_loc,
975     donnees_techniques.co_foyer_chamb_nb,
976     donnees_techniques.co_fin_lls_nb,
977     donnees_techniques.co_fin_aa_nb,
978     donnees_techniques.co_fin_ptz_nb,
979     donnees_techniques.co_fin_autr_nb,
980     donnees_techniques.co_mais_piece_nb,
981     donnees_techniques.co_log_1p_nb,
982     donnees_techniques.co_log_2p_nb,
983     donnees_techniques.co_log_3p_nb,
984     donnees_techniques.co_log_4p_nb,
985     donnees_techniques.co_log_5p_nb,
986     donnees_techniques.co_log_6p_nb,
987     donnees_techniques.mod_desc,
988    
989     donnees_techniques.doc_date,
990     donnees_techniques.terr_div_surf_av_div,
991     donnees_techniques.doc_tot_trav,
992     donnees_techniques.doc_tranche_trav,
993     donnees_techniques.doc_tranche_trav_desc,
994     donnees_techniques.doc_surf,
995     donnees_techniques.doc_nb_log,
996     donnees_techniques.doc_nb_log_indiv,
997     donnees_techniques.doc_nb_log_coll,
998     donnees_techniques.doc_nb_log_lls,
999     donnees_techniques.doc_nb_log_aa,
1000     donnees_techniques.doc_nb_log_ptz,
1001     donnees_techniques.doc_nb_log_autre,
1002     donnees_techniques.daact_date,
1003     donnees_techniques.daact_date_chgmt_dest,
1004     donnees_techniques.daact_tot_trav,
1005     donnees_techniques.daact_tranche_trav,
1006     donnees_techniques.daact_tranche_trav_desc,
1007     donnees_techniques.daact_surf,
1008     donnees_techniques.daact_nb_log,
1009     donnees_techniques.daact_nb_log_indiv,
1010     donnees_techniques.daact_nb_log_coll,
1011     donnees_techniques.daact_nb_log_lls,
1012     donnees_techniques.daact_nb_log_aa,
1013     donnees_techniques.daact_nb_log_ptz,
1014     donnees_techniques.daact_nb_log_autre,
1015    
1016     dossier_autorisation.date_depot as date_depot_da,
1017     dossier_autorisation.date_decision as date_decision_da,
1018     dossier_autorisation.date_validite as date_validite_da,
1019     dossier_autorisation.date_chantier as date_chantier_da,
1020     dossier_autorisation.date_achevement as date_achevement_da,
1021     avis_decision.typeavis as typeavis_da,
1022     avis_decision.sitadel,
1023     avis_decision.sitadel_motif,
1024     avis_decision.typeavis,
1025     etat.statut as statut_di
1026    
1027     FROM ".DB_PREFIXE."dossier
1028    
1029     INNER JOIN ".DB_PREFIXE."dossier_instruction_type
1030     ON dossier.dossier_instruction_type =
1031     dossier_instruction_type.dossier_instruction_type
1032     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
1033     ON dossier_instruction_type.dossier_autorisation_type_detaille
1034     =dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1035     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
1036     ON dossier_autorisation_type.dossier_autorisation_type
1037     =dossier_autorisation_type_detaille.dossier_autorisation_type
1038 softime 6565 INNER JOIN ".DB_PREFIXE."groupe
1039     ON dossier_autorisation_type.groupe = groupe.groupe
1040     AND groupe.code != 'CTX'
1041 mbroquet 3730 INNER JOIN ".DB_PREFIXE."dossier_autorisation
1042     ON dossier_autorisation.dossier_autorisation
1043     =dossier.dossier_autorisation
1044     INNER JOIN ".DB_PREFIXE."autorite_competente
1045     ON autorite_competente.autorite_competente
1046     =dossier.autorite_competente
1047    
1048     LEFT JOIN ".DB_PREFIXE."donnees_techniques
1049     ON donnees_techniques.dossier_instruction = dossier.dossier
1050     LEFT JOIN ".DB_PREFIXE."avis_decision
1051     ON avis_decision.avis_decision = dossier.avis_decision
1052     LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur as ldd_pp
1053     ON ldd_pp.dossier = dossier.dossier
1054     LEFT JOIN ".DB_PREFIXE."demandeur as pp
1055     ON ldd_pp.demandeur = pp.demandeur
1056     LEFT JOIN ".DB_PREFIXE."civilite as civilite_pp
1057     ON civilite_pp.civilite = pp.particulier_civilite
1058     LEFT JOIN ".DB_PREFIXE."civilite as civilite_pm
1059     ON civilite_pm.civilite = pp.personne_morale_civilite
1060     LEFT JOIN ".DB_PREFIXE."etat
1061     ON etat.etat = dossier.etat
1062     LEFT JOIN ".DB_PREFIXE."arrondissement
1063     ON dossier_autorisation.arrondissement=arrondissement.arrondissement
1064    
1065     WHERE dossier_instruction_type.mouvement_sitadel IS NOT NULL
1066     AND ldd_pp.petitionnaire_principal is TRUE
1067 softime 7996 AND (dossier.date_modification >= '".$datedebut."' AND dossier.date_modification <= '".$datefin."')
1068 mbroquet 3730 ORDER by dossier_instruction_type.mouvement_sitadel, dossier.dossier";
1069     //Exécution de la requête
1070     $res = $this->f->db -> query ($sql);
1071     $this->f->addToLog("dossier.class.php : db->query(\"".$sql."\")", VERBOSE_MODE);
1072     $this->f->isDatabaseError($res);
1073     $export="";
1074     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
1075     // initialisation de la classe permettant la mise en forme de chaque ligne de l'export
1076     require_once "../obj/export_sitadel.class.php";
1077     $export_sitadel = new export_sitadel($row['dossier'], $this->f);
1078     $export_sitadel->setRow($row);
1079     //Ajout du fichier de variable
1080     if(file_exists ("../sql/".OM_DB_PHPTYPE."/export_sitadel.inc.php")) {
1081     include ("../sql/".OM_DB_PHPTYPE."/export_sitadel.inc.php");
1082     }
1083     //
1084     $export_sitadel->setVal($val);
1085     $departement = $export_sitadel->getDepartement($row["collectivite"]);
1086     $commune = $export_sitadel->getCommune($row["collectivite"]);
1087     $region = $this->f->getParameter("region");
1088 softime 4636
1089     // Initialisation des variables pour le tableau des
1090     // surfaces en version 1
1091     $prefix_su = 'su';
1092     $count_su = 9;
1093     // S'il faut utiliser le tableau des surfaces en
1094     // version 2
1095     if ($export_sitadel->get_tab_su_version() === 2) {
1096     //
1097     $prefix_su = 'su2';
1098     $count_su = 20;
1099     }
1100    
1101 softime 4838 // Récupère la version du dossier d'instruction depuis son
1102     // numéro
1103     $version = 0;
1104     $version = intval($this->get_dossier_instruction_version($row['dossier']));
1105    
1106 mbroquet 3730 // Mouvement de dépôt
1107     $depot="";
1108    
1109     // Tous les mouvements autres que transfert ont comme mouvement le code DEPOT
1110     // les décisions devant êtres précédées par le dépôt correspondant,
1111     // les dossiers avec date de décision comprise dans l'interval fourni sont
1112     // réaffichés en tant que dépôts (mouvement DEPOT)
1113     if (($row['mouvement_sitadel'] == 'DEPOT'||($row['mouvement_sitadel'] == 'MODIFICATIF'
1114 softime 7996 AND $row['statut_di']=='cloture' AND $row['typeavis']=='F'))) {
1115 softime 4838 $depot.=$export_sitadel->entete("DEPOT",$departement,$commune, $version);
1116 mbroquet 3730 $depot.=$export_sitadel->etatcivil();
1117     $depot.=$export_sitadel->adresse();
1118     $depot.=$export_sitadel->delegataire();
1119     $depot.=$export_sitadel->meltel($row['mouvement_sitadel']);
1120     $depot.=$export_sitadel->adresse_terrain();
1121     $depot.=$export_sitadel->parcelle();
1122     // ===========================
1123     // contrat maison individuelle
1124     // ===========================
1125     // sitadel : contrat|
1126     // openads : non renseigne
1127     $depot.= $export_sitadel->defaultValue('contrat')."|";
1128     // ==========
1129     // architecte
1130     // ==========
1131     // sitadel : architecte|
1132     // openads : données techniques.co_archi_recours
1133     $depot.= ($row['co_archi_recours'] == "t")?"1|":"0|";
1134     // =====================
1135     // utilisation data cnil
1136     // ======================
1137     // sitadel : cnil
1138     // openads : non renseigne
1139     $depot.= $export_sitadel->defaultValue('cnil');
1140     // fin d enregistrement depot
1141     $depot.="\n";
1142     }
1143    
1144     // Seuls les dossier de type transfert ont comme mouvement le code TRANSFERT
1145     $transfert ="";
1146 softime 7996 if ($row['mouvement_sitadel']=='TRANSFERT') {
1147 softime 4838 $transfert.=$export_sitadel->entete("TRANSFERT",$departement,$commune, $version);
1148 mbroquet 3730 $transfert.=$export_sitadel->etatcivil();
1149     $transfert.=$export_sitadel->adresse();
1150     $transfert.=$export_sitadel->meltel($row['mouvement_sitadel']);
1151     $transfert.="\n";
1152     }
1153    
1154    
1155     // Une ligne de mouvement DECISION est insérée après chaque ligne
1156     // de mouvement DEPOT
1157     $decision="";
1158     if ($row['mouvement_sitadel'] != 'TRANSFERT'
1159     and $row['mouvement_sitadel'] != 'SUPPRESSION'
1160 softime 7996 and $row['mouvement_sitadel'] == 'DEPOT') {
1161 mbroquet 3730
1162     //Ajout de l'entête
1163 softime 4838 $decision.=$export_sitadel->entete("DECISION",$departement,$commune, $version);
1164 mbroquet 3730
1165     //Ajout du groupe 1
1166     $decision.= $export_sitadel->decision_groupe1();
1167     // Si la décision est favorable, on remplit le groupe 2
1168     if ( $row['sitadel'] == 2 || $row['sitadel'] == 4 || $row['sitadel'] == 5
1169     || $row['sitadel'] == 0 ){
1170     //
1171     $decision.= $export_sitadel->amenagement_terrain();
1172     //Nature du projet
1173     $natproj = 2;
1174     $natprojlib= array(
1175     1=>_("Nouvelle construction"),
1176     2=>_("Travaux sur construction existante"),
1177     3=>_("Nouvelle construction et travaux sur construction"),
1178     );
1179     if ( isset($row['co_cstr_nouv']) && isset($row['co_cstr_exist']) &&
1180     $row['co_cstr_nouv'] == 't' &&
1181     $row['co_cstr_exist'] == 't' ){
1182     $natproj = 3;
1183     }
1184     //Nouvelle construction
1185     elseif ( isset($row['co_cstr_nouv']) && $row['co_cstr_nouv'] == 't' ) {
1186     $natproj = 1;
1187     }
1188     //
1189 softime 4636 $su_avt_shon = $export_sitadel->shon("avt");
1190 mbroquet 3730 //Si la SHON existante avant travaux est supérieur à la SHON
1191     //démolie alors la variable natproj est égale à 2
1192     $shonExistante = 0;
1193     $shonDemolie = 0;
1194 softime 4636 // Pour chaque ligne du tableau
1195     for ($i = 1; $i <= $count_su; $i++) {
1196     //
1197     $shonExistante += floor($row[$prefix_su.'_avt_shon'.$i]);
1198     $shonDemolie += floor($row[$prefix_su.'_demo_shon'.$i]);
1199 mbroquet 3730 }
1200     //Si la SHON existante avant travaux et la SHON démolie sont
1201     //égales alors la variable natproj est égale à 1
1202     if ( $shonExistante == 0 && $shonDemolie == 0 && $natproj != 1 &&
1203     $row['code'] != 'DP' && $row['code'] != 'PA') {
1204     $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";
1205     } elseif ( $shonExistante > $shonDemolie && $natproj != 2 ){
1206 softime 4640 $erreur .= _("Dossier ").$row['dossier']." \"".$natprojlib[$natproj]."\" "._("La SHON existante avant travaux ne doit pas être supérieure à la SHON démolie.")."\n";
1207 mbroquet 3730 }
1208     $decision .= $su_avt_shon;
1209    
1210 softime 4636 $su_demo_shon = $export_sitadel->shon("demo");
1211 mbroquet 3730 //La SHON démolie s'accompagne obligatoirement de la shon
1212     //existante avant travaux
1213     if ( $shonDemolie != 0 && $shonExistante == 0 ){
1214     $erreur .= _("Dossier ").$row['dossier']." "._("La SHON demolie s'accompagne obligatoirement de la SHON existante avant travaux.")."\n";
1215     }
1216     $decision .= $su_demo_shon;
1217     //
1218 softime 4636 $su_sup_shon = $export_sitadel->shon("sup");
1219     $su_chge_shon = $export_sitadel->shon("chge");
1220 mbroquet 3730 if ( strcasecmp($su_sup_shon, $su_chge_shon) != 0){
1221     //
1222 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";
1223 mbroquet 3730 }
1224     $decision .= $su_sup_shon;
1225     $decision .= $su_chge_shon;
1226 softime 4636 $decision .= $export_sitadel->shon("cstr");
1227 mbroquet 3730 $decision .= "0|0|0|0|0|0|0|0|0|";
1228 softime 4640 // Les SHON créées par changement de destination ou
1229     // de sous-destination s'accompagnent obligatoirement
1230     // de SHON existante avant travaux non nulle
1231 mbroquet 3730 if (preg_match("/[0|]{7}/", $su_chge_shon) &&
1232     preg_match("/[0|]{7}/", $su_avt_shon)){
1233    
1234 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";
1235 mbroquet 3730 }
1236     // Un nombre de logements démolis strictement positif doit
1237     // s'accompagner obligatoirement de SHON démolie.
1238     if($row['dm_tot_log_nb'] > 0) {
1239 softime 4636 if($export_sitadel->get_shon_val('demo', 1) <= 0) {
1240 mbroquet 3730 //
1241     $erreur .= _("Dossier ").$row['dossier']." "._("Un nombre de logements demolis strictement positif doit s'accompagner obligatoirement de SHON demolie.")."\n";
1242     }
1243     }
1244     // Un nombre de logements créés strictement positif doit
1245     // s'accompagner obligatoirement de SHON créée ou de SHON
1246 softime 4640 // créée par changement de destination ou de sous-destination
1247     // ayant pour destination l'habitation.
1248     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)) {
1249 mbroquet 3730 //
1250 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";
1251 mbroquet 3730 }
1252    
1253     // La SHON créée ou issue de la transformation
1254     // suffixée par 9 (intérêt collectif ou service public) doit
1255     // obligatoirement s'accompagner de la décomposition
1256     // en sous modalité renseignée par la variable cpublic et réciproquement.
1257    
1258     // Test si une valeur est true
1259     $cpublic = FALSE;
1260     if (isset($row['co_sp_transport']) && $row['co_sp_transport'] == 't') {
1261     $cpublic = TRUE;
1262     }
1263     if (isset($row['co_sp_enseign']) && $row['co_sp_enseign'] == 't') {
1264     $cpublic = TRUE;
1265     }
1266     if (isset($row['co_sp_sante']) && $row['co_sp_sante'] == 't') {
1267     $cpublic = TRUE;
1268     }
1269     if (isset($row['co_sp_act_soc']) && $row['co_sp_act_soc'] == 't') {
1270     $cpublic = TRUE;
1271     }
1272     if (isset($row['co_sp_ouvr_spe']) && $row['co_sp_ouvr_spe'] == 't') {
1273     $cpublic = TRUE;
1274     }
1275     if (isset($row['co_sp_culture']) && $row['co_sp_culture'] == 't') {
1276     $cpublic = TRUE;
1277     }
1278     //
1279 softime 4640 if($cpublic !== TRUE AND ($export_sitadel->get_shon_val('cstr', 9) > 0 OR $export_sitadel->get_shon_val('chge', 9) > 0)) {
1280     $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";
1281 mbroquet 3730 }
1282    
1283     // La destination principale du logement mise à résidence
1284     // principale ou résidence secondaire doit obligatoirement
1285     // s'accompagner d'un mode d'utilisation à occupation personnelle
1286     if($row['co_uti_princ'] == 't' OR $row['co_uti_secon'] == 't') {
1287     if($row['co_uti_pers'] != 't') {
1288    
1289     $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";
1290     }
1291     }
1292    
1293     $decision.= $export_sitadel->destination($row['mouvement_sitadel']);
1294    
1295     // Le nombre total de logements créés (variable nbtotlog)
1296     // doit être égal à la somme des nombres de logements créés
1297     // ventilés par type de financement
1298     if($row['co_tot_log_nb'] != ($row['co_fin_lls_nb'] + $row['co_fin_aa_nb'] +
1299     $row['co_fin_ptz_nb'] + $row['co_fin_autr_nb'])) {
1300    
1301     $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";
1302     }
1303    
1304     $decision.= $export_sitadel->repartitionFinan();
1305    
1306     // Le nombre total de logements créés (variable nbtotlog)
1307     // doit être égal à la totalisation de la répartition des
1308     // logements par nombre de pièces
1309     if($row['co_tot_log_nb'] != ($row['co_log_1p_nb'] + $row['co_log_2p_nb'] +
1310     $row['co_log_3p_nb'] + $row['co_log_4p_nb'] + $row['co_log_5p_nb'] +
1311     $row['co_log_6p_nb'])) {
1312    
1313     $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";
1314     }
1315    
1316     $decision.= $export_sitadel->repartitionNbPiece($row['mouvement_sitadel']);
1317     }
1318     else {
1319     //
1320     $decision.= str_repeat("|", 6);
1321     if($row['code']=='DP'){
1322     $decision .= "00000|";
1323     }else{
1324     $decision .= "|";
1325     }
1326     $decision .= "0000|00000|";
1327     $decision.= str_repeat("|", 74);
1328     }
1329     $decision.="\n";
1330     }
1331    
1332     // modificatif
1333     $modificatif='';
1334     if($row['mouvement_sitadel'] == 'MODIFICATIF' AND $row['statut_di']=='cloture' AND
1335 softime 7996 $row['typeavis']=='F') {
1336 softime 4838 $modificatif.=$export_sitadel->entete("MODIFICATIF",$departement,$commune, $version);
1337 mbroquet 3730
1338     $modificatif.= $export_sitadel->decision_groupe1();
1339    
1340     if(isset($row['date_decision']) or $row['date_decision']==""){
1341     // avis_sitadel et avis_sitadel_motif
1342     // si la decision est favorable, envoi des informations statistiques
1343     if($row["sitadel"] == 2 or $row["sitadel"] == 4
1344     or $row["sitadel"] == 5){
1345     // si accordé : ajout du 2nd groupe d'informations
1346     $modificatif .= $export_sitadel->adresse_terrain(); // adresse du terrain
1347     $modificatif .= $export_sitadel->parcelle(); // 3 premières parcelles
1348     $modificatif .= $export_sitadel->modificatif_terrain(); // Informations complémentaires
1349    
1350 softime 4636 $modificatif.= $export_sitadel->shon("avt");
1351     $modificatif.= $export_sitadel->shon("demo");
1352     $modificatif.= $export_sitadel->shon("chge");
1353     $modificatif.= $export_sitadel->shon("trsf");
1354     $modificatif.= $export_sitadel->shon("cstr");
1355 mbroquet 3730
1356     $modificatif.= "|||||||||";
1357     $modificatif.= $export_sitadel->destination($row['mouvement_sitadel']);
1358     $modificatif.= $export_sitadel->repartitionFinan();
1359     $modificatif.= $export_sitadel->repartitionNbPiece($row['mouvement_sitadel']);
1360     }
1361     else {
1362     $modificatif .= str_repeat("|", 90);
1363     }
1364     }
1365     else {
1366     $modificatif .= str_repeat("|", 90);
1367     }
1368    
1369     $modificatif.="\n";
1370     }
1371    
1372     // Mouvement suppression
1373     $suppression = '';
1374     if($row['mouvement_sitadel'] == 'SUPPRESSION') {
1375 softime 4838 $suppression .= $export_sitadel->entete("SUPPRESSION",$departement,$commune, $version);
1376 mbroquet 3730 $suppression .= "\n";
1377     }
1378    
1379     // Règles sur le mouvement suivi
1380     $suivi="";
1381     if($row['mouvement_sitadel'] == 'SUIVI' and
1382     ($row['date_chantier'] >= $datedebut and $row['date_chantier']<=$datefin) ||
1383     ($row['date_achevement'] >= $datedebut and $row['date_achevement']<=$datefin)){
1384     // Si le dossier est une DOC
1385     if($row['dossier_instruction_type_code']=='DOC'){
1386     // Une ouverture de chantier ne peut concerner qu'un permis autorisé
1387     if($row['typeavis_da'] != 'F'&&$row['typeavis_da'] != '') {
1388     $erreur .= _("Dossier ").$row['dossier']." "._("Une ouverture de chantier ne peut concerner qu'un permis autorise.")."\n";
1389     }
1390     // La date d'ouverture de chantier doit être supérieur à la date d'autorisation
1391     if($row['doc_date'] > $row['date_decision_da']) {
1392     $erreur .= _("Dossier ").$row['dossier']." "._("La date d'ouverture de chantier doit être superieur a la date d'autorisation.")."\n";
1393     }
1394     // Un achèvement de chantier ne peut concerner qu'un permis autorisé
1395     if($row['typeavis_da'] != 'F'&&$row['typeavis_da'] != '') {
1396     $erreur .= _("Dossier ").$row['dossier']." "._("Un achevement de chantier ne peut concerner qu'un permis autorise.")."\n";
1397     }
1398     if( $row['date_chantier_da'] == "" && $row['date_achevement']!="") {
1399     $erreur .= _("Dossier ").$row['dossier']." "._("Un achevement de chantier ne peut concerner qu'un permis sur lequel un chantier a ete ouvert.")."\n";
1400     }
1401     // La date d'achevement de travaux doit être supérieur à la date d'ouverture des travaux
1402     if($row['daact_date'] > $row['date_chantier_da']) {
1403     $erreur .= _("Dossier ").$row['dossier']." "._("La date d'achevement de travaux doit etre superieur a la date d'ouverture des travaux.")."\n";
1404     }
1405 softime 4838 $suivi.=$export_sitadel->entete("SUIVI",$departement,$commune, $version);//8|
1406 mbroquet 3730 $suivi.=$export_sitadel->chantier($row);
1407     //On récupère la DAACT si elle existe
1408     $sqlDAACT = "SELECT
1409     donnees_techniques.daact_date,
1410     donnees_techniques.daact_date_chgmt_dest,
1411     donnees_techniques.daact_tot_trav,
1412     donnees_techniques.daact_tranche_trav,
1413     donnees_techniques.daact_tranche_trav_desc,
1414     donnees_techniques.daact_surf,
1415     donnees_techniques.daact_nb_log,
1416     donnees_techniques.daact_nb_log_indiv,
1417     donnees_techniques.daact_nb_log_coll,
1418     donnees_techniques.daact_nb_log_lls,
1419     donnees_techniques.daact_nb_log_aa,
1420     donnees_techniques.daact_nb_log_ptz,
1421     donnees_techniques.daact_nb_log_autre,
1422     etat.statut as statut_di
1423    
1424     FROM ".DB_PREFIXE."dossier
1425     LEFT JOIN ".DB_PREFIXE."donnees_techniques
1426     ON dossier.dossier=donnees_techniques.dossier_instruction
1427     LEFT JOIN ".DB_PREFIXE."etat
1428     ON dossier.etat = etat.etat
1429     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
1430     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1431     WHERE dossier.dossier_autorisation ='".$row['dossier_autorisation']."' AND
1432     dossier_instruction_type.code = 'DAACT' and mouvement_sitadel='SUIVI'";
1433     $resDAACT = $this->f->db -> query ($sqlDAACT);
1434     $this->f->addToLog("dossier.class.php : db->query(\"".$sqlDAACT."\")", VERBOSE_MODE);
1435     $this->f->isDatabaseError($resDAACT);
1436     $rowDAACT=& $resDAACT->fetchRow(DB_FETCHMODE_ASSOC);
1437     $suivi.=$export_sitadel->achevement($rowDAACT);
1438     $suivi.="\n";
1439     }
1440     elseif($row['dossier_instruction_type_code']=='DAACT'){
1441    
1442     //On vérifie qu'une DOC existe
1443     $sqlDOC = "SELECT dossier.dossier,
1444     dossier.date_chantier,
1445     donnees_techniques.doc_date,
1446     donnees_techniques.terr_div_surf_av_div,
1447     donnees_techniques.doc_tot_trav,
1448     donnees_techniques.doc_tranche_trav,
1449     donnees_techniques.doc_tranche_trav_desc,
1450     donnees_techniques.doc_surf,
1451     donnees_techniques.doc_nb_log,
1452     donnees_techniques.doc_nb_log_indiv,
1453     donnees_techniques.doc_nb_log_coll,
1454     donnees_techniques.doc_nb_log_lls,
1455     donnees_techniques.doc_nb_log_aa,
1456     donnees_techniques.doc_nb_log_ptz,
1457     donnees_techniques.doc_nb_log_autre
1458     FROM ".DB_PREFIXE."dossier
1459     LEFT JOIN ".DB_PREFIXE."donnees_techniques
1460     ON dossier.dossier=donnees_techniques.dossier_instruction
1461     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
1462     ON dossier.dossier_instruction_type=dossier_instruction_type.dossier_instruction_type
1463     WHERE dossier.dossier_autorisation ='".$row['dossier_autorisation']."' AND
1464     dossier_instruction_type.code = 'DOC' and mouvement_sitadel='SUIVI'";
1465     $resDOC = $this->f->db -> query ($sqlDOC);
1466     $this->f->addToLog("dossier.class.php : db->query(\"".$sqlDOC."\")", VERBOSE_MODE);
1467     $this->f->isDatabaseError($resDOC);
1468     $rowDOC=& $resDOC->fetchRow(DB_FETCHMODE_ASSOC);
1469    
1470     if((isset($rowDOC['dossier']) &&
1471     $rowDOC['date_chantier']<$datedebut || $rowDOC['date_chantier']>$datefin) ||
1472     !isset($rowDOC['dossier'])) {
1473     //
1474 softime 4838 $suivi.=$export_sitadel->entete("SUIVI",$departement,$commune, $version);//8|
1475 mbroquet 3730 $suivi.=$export_sitadel->chantier($rowDOC);
1476     $suivi.=$export_sitadel->achevement($row);
1477 softime 7996 $suivi.="\n";
1478 mbroquet 3730 }
1479     }
1480 softime 7996 }
1481     // Ligne SITADEL généré
1482     $line_sitadel = $depot.$decision.$transfert.$modificatif.$suivi.$suppression;
1483     if ($line_sitadel !== '') {
1484     // Hash la ligne SITADEL
1485     $hash_sitadel = md5($line_sitadel);
1486     // Si le hash de la ligne générée est différent du hash
1487     // sauvegardé sur le dossier
1488     if ($row['hash_sitadel'] !== $hash_sitadel) {
1489     // Met la ligne dans l'export
1490     $export .= $line_sitadel;
1491     // Met à jour le hash SITADEL du dossier
1492     $inst_di = $this->get_inst_dossier($row['dossier']);
1493     $inst_di->update_hash_sitadel($hash_sitadel);
1494     } else {
1495     // Supprime les erreurs liées à la ligne qui ne sera
1496     // pas exportée
1497     $erreur = '';
1498     }
1499     }
1500 mbroquet 3730 } // fin while
1501    
1502     /**
1503     *
1504     */
1505     //
1506     if (DBCHARSET == 'UTF8') {
1507     $export = utf8_decode($export);
1508     }
1509    
1510     /**
1511     * En-tête de fichier.
1512     *
1513     * C'est la première ligne du fichier.
1514     */
1515     // on éclate la chaîne export par ligne pour calculer le nombre
1516     // d'enregistrements et la longueur maximale des enregistrements
1517     $export_by_line = explode("\n", $export);
1518     // longueur maximale des enregistrements
1519     // (Num)(6) longueur de l’enregistrement le plus long contenu dans le
1520     // fichier (sans compter la fin d’enregistrement ou la fin de fichier)
1521     $longueur_maximale_des_enregistrements = 0;
1522     foreach ($export_by_line as $export_line) {
1523     if ($longueur_maximale_des_enregistrements > strlen($export_line)) {
1524     continue;
1525     }
1526     $longueur_maximale_des_enregistrements = strlen($export_line);
1527     }
1528     // nombre d'enregistrements
1529     // (Num)(6) nombre d’enregistrements présents dans le fichier en
1530     // comptant l’en-tête du fichier
1531     // XXX Ne faut-il pas ajouter +1 pour la ligne d'en-tête ?
1532     $nombre_d_enregistrements = count($export_by_line);
1533     // code application
1534     // (Alphanum)(7) = SITADEL
1535     $code_application = "SITADEL";
1536     // code département
1537     // (Alphanum)(3) département dans lequel se trouve le service instructeur
1538     // nomenclature : 001 à 095, 02A, 02B, 971...974
1539     $code_departement = $this->f->getParameter("departement");
1540     // service expéditeur
1541     // (Alphanum)(3) DDE ou commune (la plus grosse en cas d'EPCI) ou DGI
1542     // nomenclature : 'ADS', ‘DGI ou code commune INSEE
1543     $service_expediteur = $this->f->getParameter("commune");
1544     // service destinataire
1545     // (Alphanum)(2) DRE
1546     // nomenclature : code région INSEE (exemple : Ile-de-France=11)
1547     $service_destinataire = $this->f->getParameter("region");
1548     // code du fichier transmis
1549     // (AlphaNum)(12) AAMMjjdddccc
1550     // ddd = département du service instructeur
1551     // ccc = code du service expéditeur
1552     // AAMMjj = date
1553     // par exemple : 090531093ADS dans le cas de la transmission mensuelle
1554     // des événements intervenus au mois de mai communiqués par la DDE de
1555     // Seine-Saint-Denis.
1556     // XXX La date du jour correspond bien à la date demandée ?
1557     $code_du_fichier_transmis = sprintf(
1558     "%s%s%s",
1559     date('ymd'),
1560     $code_departement,
1561     $service_expediteur
1562     );
1563     // numéro d'ordre
1564     // (AlphaNum)(1) numéro d’ordre du fichier en cas de rectificatif
1565     // XXX Le formulaire propose jusqu'à la valeur 10 alors que la taille
1566     // de la châine doit être (1) ?
1567     $numero_d_ordre = $this->f->get_submitted_post_value("numero");
1568     // date de création
1569     // (Alphanum)(6) AAMMjj date de création du fichier transmis
1570     $date_de_creation = date('ymd');
1571     // nom de l'applicatif expéditeur
1572     // (Alphanum)(20) Exemple : GESTIO
1573     $nom_de_l_applicatif_expediteur = "openADS";
1574     // version de l'applicatif expéditeur
1575     // (Alphanum)(8) Exemple : 2.05
1576 softime 7996 $version_de_l_applicatif_expediteur = substr($this->f->get_application_version(), 0, 8);
1577 mbroquet 3730 // Consititution de la ligne d'en-tête.
1578     $entete = sprintf(
1579     "%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n",
1580     $code_application,
1581     $code_departement,
1582     $service_expediteur,
1583     $service_destinataire,
1584     $code_du_fichier_transmis,
1585     $numero_d_ordre,
1586     $longueur_maximale_des_enregistrements,
1587     $date_de_creation,
1588     $nombre_d_enregistrements,
1589     $nom_de_l_applicatif_expediteur,
1590     $version_de_l_applicatif_expediteur
1591     );
1592    
1593     /**
1594     *
1595     */
1596     //
1597     $export = $entete.$export;
1598    
1599     /**
1600     * Écriture de l'export dans un fichier sur le disque et affichage du
1601     * lien de téléchargement.
1602     */
1603     // Composition du nom du fichier
1604     $nom_fichier = "SITADEL".substr($this->f->get_submitted_post_value("datedebut"),3,2)."".substr($this->f->get_submitted_post_value("datedebut"),8,4).".txt";
1605     // Composition des métadonnées du fichier
1606     $metadata_fichier = array(
1607     "filename" => $nom_fichier,
1608     "size" => strlen($export),
1609 softime 8989 "mimetype" => "text/csv",
1610 mbroquet 3730 );
1611     // Écriture du fichier
1612 softime 8989 $id_fichier = $this->f->store_file(
1613     $export,
1614     $metadata_fichier,
1615     "sitadel",
1616     json_encode(array(
1617     'date_debut' => $datedebut,
1618     'date_fin' => $datefin,
1619     ))
1620     );
1621     if ($id_fichier === false) {
1622     $msg_error = __("Erreur lors du stockage/enregistrement du fichier SITADEL.").' '.__("Veuillez contacter votre administrateur.");
1623     $this->f->displayMessage("error", $msg_error);
1624     $this->f->addToLog(__METHOD__."(): ".$msg_error, DEBUG_MODE);
1625     return;
1626     }
1627 mbroquet 3730 //
1628 softime 8989 $message_valid = sprintf(
1629     "%s<br/>%s",
1630     sprintf(__("Le fichier %s a été généré."), $nom_fichier),
1631     sprintf(
1632     '<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>',
1633     OM_ROUTE_FORM,
1634     $id_fichier,
1635     __("Télécharger le fichier SITADEL")
1636     )
1637     );
1638 mbroquet 3730
1639     /**
1640     * Écriture d'une éventuelle erreur durant l'export dans un fichier sur
1641     * le disque et affichage du lien de téléchargement.
1642     */
1643     //
1644     if ($erreur != "") {
1645     // Composition du nom du fichier
1646     $nom_fichier_erreur = "probleme_".$nom_fichier;
1647     // Composition des métadonnées du fichier
1648     $metadata_fichier_erreur = array(
1649     "filename" => $nom_fichier_erreur,
1650     "size" => strlen($erreur),
1651 softime 8989 "mimetype" => "application/octet-stream",
1652 mbroquet 3730 );
1653     // Écriture du fichier
1654 softime 8989 $id_fichier_erreur = $this->f->store_file(
1655     $erreur,
1656     $metadata_fichier_erreur,
1657     "sitadel",
1658     json_encode(array(
1659     'date_debut' => $datedebut,
1660     'date_fin' => $datefin,
1661     ))
1662     );
1663     if ($id_fichier_erreur === false) {
1664     $msg_error = __("Erreur lors du stockage/enregistrement du fichier des incohérences SITADEL.").' '.__("Veuillez contacter votre administrateur.");
1665     $this->f->displayMessage("error", $msg_error);
1666     $this->f->addToLog(__METHOD__."(): ".$msg_error, DEBUG_MODE);
1667     return;
1668     }
1669 mbroquet 3730 //
1670 softime 8989 $message_info .= sprintf(
1671     "%s<br/>%s",
1672     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),
1673     sprintf(
1674     '<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>',
1675     OM_ROUTE_FORM,
1676     $id_fichier_erreur,
1677     __("Télécharger le fichier d'incohérence SITADEL")
1678     )
1679     );
1680 mbroquet 3730 }
1681 softime 8989
1682     //
1683     $this->f->displayMessage("valid",
1684     sprintf(
1685     '%s%s%s',
1686     $message_valid,
1687     $message_info !== '' ? '<br/><br/>' : '',
1688     $message_info
1689     )
1690     );
1691    
1692     //
1693 mbroquet 3730 if (DEBUG > 0) {
1694     printf($export);
1695     }
1696    
1697     } else {// correct = false
1698 softime 8989 $this->f->displayMessage("error", __("Les champs dates sont obligatoires."));
1699 mbroquet 3730 }
1700     }
1701     }
1702    
1703    
1704 softime 8989 function affichageFormulaire() {
1705     printf("<form method=\"POST\" name=f1>");
1706     //
1707     printf(
1708     "<div id=\"sitadel-form-fonctionnement\" class=\"sitadel-form-bloc\"><h3>%s</h3><p>%s</p></div>",
1709     __("Fonctionnement"),
1710     __("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.")
1711     );
1712     //
1713     printf(
1714     "<div id=\"sitadel-form-export\" class=\"sitadel-form-bloc\"><h3>%s</h3>",
1715     __("Export")
1716     );
1717 mbroquet 3730 //Description de la page
1718 softime 8989 $description = __("Saisissez la période pour laquelle vous souhaitez exporter les mouvements des dossiers au format SITADEL.");
1719 mbroquet 3730 $this->f->displayDescription($description);
1720     //
1721 softime 8989 $input = "<input type=\"text\" name=\"%s\" id=\"%s\" value=\"%s\" size=\"15\" class=\"champFormulaire datepicker\" onchange=\"fdate(this)\" />";
1722 mbroquet 3730 // champ date debut
1723 softime 8989 printf(" "._("Date de début")." ");
1724     printf($input, "datedebut", "datedebut", '');
1725 mbroquet 3730 // champ date fin
1726 softime 8989 printf(" "._("Date de fin")." ");
1727     printf($input, "datefin", "datefin", '');
1728 mbroquet 3730 // numero d'ordre d'envoi
1729     printf(" "._("Numero d'ordre d'envoi")." : "."<select name=\"numero\">");
1730     for ($i = 1; $i < 11; $i++) {
1731     printf("<option value =\"%d\" ", $i);
1732     printf(">%d</option>", $i);
1733     }
1734     printf("</select>");
1735 softime 8989 printf(
1736     "<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\" />",
1737     __("Exporter le fichier SITADEL"),
1738     addslashes(sprintf(
1739     "<b>%s</b><br/><br/>%s",
1740     __("Important à lire avant de confirmer le message de validation."),
1741     __("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.")
1742     )),
1743     OM_ROUTE_FORM
1744     );
1745     printf("</div>");
1746    
1747     // Affiche le tableau des fichiers sitadel stocké
1748     $link_tab_storage = OM_ROUTE_SOUSTAB.'&obj=storage&idxformulaire=0&retour=tab&retourformulaire=sitadel';
1749     $tab_storage = sprintf(
1750     '<div id="sousform-storage-sitadel" class="sitadel-form-bloc-tab"></div>
1751     <script type="text/javascript" >
1752     ajaxIt(\'storage-sitadel\', \'%1$s\');
1753     </script>',
1754     $link_tab_storage
1755     );
1756     printf(
1757     "<div id=\"sitadel-form-histo\" class=\"sitadel-form-bloc-end\"><h3>%s</h3>%s</div>",
1758     __("Historique des exports"),
1759     $tab_storage
1760     );
1761    
1762 mbroquet 3730 printf("</form>");
1763     }
1764    
1765     /**
1766     * VIEW - view_document_numerise.
1767     *
1768     * Vue du tableau des pièces du dossier d'autorisation.
1769     *
1770     * Cette vue permet de gérer le contenu de l'onglet "Pièce(s)" sur un
1771     * dossier d'autorisation. Cette vue spécifique est nécessaire car
1772     * l'ergonomie standard du framework ne prend pas en charge ce cas.
1773     * C'est ici la vue spécifique des pièces liées au dossier qui est
1774     * affichée directement au clic de l'onglet au lieu du soustab.
1775     *
1776     * L'idée est donc de simuler l'ergonomie standard en créant un container
1777     * et d'appeler la méthode javascript 'ajaxit' pour charger le contenu
1778     * de la vue visualisation de l'objet lié.
1779     *
1780     * @return void
1781     */
1782     function view_document_numerise() {
1783     // Vérification de l'accessibilité sur l'élément
1784     $this->checkAccessibility();
1785     // Récupération des variables GET
1786     ($this->f->get_submitted_get_value('idxformulaire')!==null ? $idxformulaire =
1787     $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = "");
1788     ($this->f->get_submitted_get_value('retourformulaire')!==null ? $retourformulaire =
1789     $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = "");
1790     // Objet à charger
1791     $obj = "document_numerise";
1792 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
1793     if ($type_aff_form === 'CTX RE' OR $type_aff_form === 'CTX IN') {
1794     $obj = "document_numerise_contexte_ctx";
1795     }
1796 mbroquet 3730 // Construction de l'url de sousformulaire à appeler
1797 softime 7996 $url = OM_ROUTE_SOUSFORM."&obj=".$obj;
1798 mbroquet 3730 $url .= "&idx=".$idxformulaire;
1799     $url .= "&action=4";
1800     $url .= "&retourformulaire=".$retourformulaire;
1801     $url .= "&idxformulaire=".$idxformulaire;
1802     $url .= "&retour=form";
1803     // Affichage du container permettant le reffraichissement du contenu
1804     // dans le cas des action-direct.
1805     printf('
1806     <div id="sousform-href" data-href="%s">
1807     </div>',
1808     $url
1809     );
1810     // Affichage du container permettant de charger le retour de la requête
1811     // ajax récupérant le sous formulaire.
1812     printf('
1813     <div id="sousform-%s">
1814     </div>
1815     <script>
1816     ajaxIt(\'%s\', \'%s\');
1817     </script>',
1818     $obj,
1819     $obj,
1820     $url
1821     );
1822     }
1823    
1824    
1825     /*
1826 nmeucci 4526 * Définition de la version et du suffixe du DI lors de sa création.
1827 mbroquet 3730 */
1828     function setValFAjout($val = array()) {
1829 nmeucci 4526
1830     //
1831     // GESTION DE LA VERSION DU DI
1832     // Elle est unique et basée sur celle du DA qui débute à -1.
1833     // Ainsi la version du DI initial est à 0.
1834     //
1835     $numeroVersion = $this->getNumeroVersion($val['dossier_autorisation']);
1836     if (is_numeric($numeroVersion) or $numeroVersion == -1){
1837     $this->incrementNumeroVersion($val['dossier_autorisation'], ++$numeroVersion);
1838     }
1839    
1840     //
1841     // GESTION DU SUFFIXE
1842     // La version du suffixe est celle du type de DI : à ne pas confondre
1843     // avec celle du DI lui même.
1844     // Exemple chronologique :
1845     // DI n° PC0130551600004 -> version 0
1846     // DI n° PC0130551600004M01 -> version 1
1847     // DI n° PC0130551600004PRO01 -> version 2 !!
1848     //
1849     $suffixe = "";
1850     // Si l'option suffixe de ce type de DI est activée
1851     if ( $this->getSuffixe($this->getDossierInstructionType()) === 't' ){
1852     // Récupération de la lettre associée au type de dossier d'instruction
1853     $code = $this->getCode($this->getDossierInstructionType());
1854     // Récupération du numéro de version en fonction du type de dossier d'instruction
1855 mbroquet 3730 $numeroVersionDossierInstructionType = $this->getNumeroVersionDossierInstructionType($val['dossier_autorisation'], $val['dossier_instruction_type'], $numeroVersion);
1856 nmeucci 4526 // Suffixe
1857     $suffixe = $code.$numeroVersionDossierInstructionType;
1858 mbroquet 3730 }
1859    
1860 nmeucci 4526 // Numéro de dossier
1861     $this->valF['dossier'] = $val['dossier_autorisation'].$suffixe;
1862     // Identifiant du dossier d'instruction lisible
1863     $this->valF['dossier_libelle'] = $this->get_dossier_autorisation_libelle($val['dossier_autorisation']).$suffixe;
1864     // Version du dossier
1865 mbroquet 3730 $this->valF['version'] = $numeroVersion;
1866     }
1867    
1868     /*Récupère la valeur du suffixe d'un dossier_instruction_type*/
1869     function getSuffixe($dossierInstructionType){
1870    
1871     $suffixe = "";
1872    
1873     $sql = "SELECT
1874     suffixe
1875     FROM
1876     ".DB_PREFIXE."dossier_instruction_type
1877     WHERE
1878     dossier_instruction_type = $dossierInstructionType";
1879    
1880     $this->addToLog("getSuffixe(): db->query(\"".$sql."\")", VERBOSE_MODE);
1881 softime 8989 $res = $this->f->db->query($sql);
1882 mbroquet 3730 if (database :: isError($res))
1883     die($res->getMessage()."erreur ".$sql);
1884    
1885     if ( $res->numRows() > 0 ){
1886    
1887     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
1888     $suffixe = $row['suffixe'];
1889     }
1890    
1891     return $suffixe;
1892     }
1893    
1894     /*Récupère dans la table de paramètrage la lettre correspondant
1895     * au dossier_instruction_type
1896     */
1897     function getCode($dossierInstructionType){
1898    
1899     $code = "";
1900    
1901     $sql = "SELECT
1902     code
1903     FROM
1904     ".DB_PREFIXE."dossier_instruction_type
1905     WHERE
1906     dossier_instruction_type = $dossierInstructionType";
1907    
1908     $this->addToLog("getCode(): db->query(\"".$sql."\")", VERBOSE_MODE);
1909 softime 8989 $res = $this->f->db->query($sql);
1910 mbroquet 3730 if (database :: isError($res))
1911     die($res->getMessage()."erreur ".$sql);
1912    
1913     if ( $res->numRows() > 0 ){
1914    
1915     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
1916     $code = $row['code'];
1917     }
1918    
1919     return $code;
1920     }
1921    
1922     /*Récupère le numéro de version d'un dossier_autorisation*/
1923     function getNumeroVersion($dossierAutorisation){
1924    
1925     $numeroVersion = "";
1926    
1927     $sql = "SELECT
1928     numero_version
1929     FROM
1930     ".DB_PREFIXE."dossier_autorisation
1931     WHERE
1932     dossier_autorisation = '$dossierAutorisation'";
1933    
1934     $this->addToLog("getNumeroVersion(): db->query(\"".$sql."\")", VERBOSE_MODE);
1935 softime 8989 $res = $this->f->db->query($sql);
1936 mbroquet 3730 if (database :: isError($res))
1937     die($res->getMessage()."erreur ".$sql);
1938    
1939     if ( $res->numRows() > 0 ){
1940    
1941     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
1942     $numeroVersion = $row['numero_version'];
1943     }
1944    
1945     return $numeroVersion;
1946     }
1947 fmichon 3892
1948     /**
1949     * Retourne le numéro d'un dossier d'instruction et ses six parties.
1950     *
1951     * @param string $dossier_instruction Identifiant du dossier d'instruction (avec ou sans espace)
1952     *
1953     * @return array
1954     */
1955     function get_dossier_instruction_numero($dossier_instruction = null) {
1956    
1957     // Si le DI n'a pas été fourni
1958     if ($dossier_instruction === null) {
1959     // On le récupère
1960     $dossier_instruction = $this->getVal($this->clePrimaire);
1961     }
1962    
1963     /*
1964     Analyse du numéro du DI et extraction de ses parties
1965    
1966     Retour : tableau à 7 entrées, chacune étant elle-même un tableau à 1 entrée :
1967    
1968     - 0 : chaîne testée (identifiant du DI)
1969 softime 4838 - 1 : type du DA (2 ou 3 lettres)
1970 fmichon 3892 - 2 : code département + code communes(3 + 3 integer)
1971     - 3 : année (2 integer)
1972     - 4 : division + numéro (le premier peut être une lettre ou un
1973     - integer et le reste integer)
1974     - 5 : lettre(s) du type du dossier d'instruction (P, M, ANNUL, ...)
1975     - 6 : version du dossier d'instruction (1 ou 2 integer)
1976     */
1977 softime 8477 preg_match_all('|^([A-Z]{2,3})\s{0,1}(\d{6})\s{0,1}(\d{2})\s{0,1}([[:alnum:]]{5})([A-Z]{1,5})?(\d{1,2})?$|', $dossier_instruction, $return);
1978 fmichon 3892 //
1979     return $return;
1980     }
1981    
1982     /**
1983 softime 8989 * Récupère les arguments nécessaires à la construction d'une séquence de
1984     * dossier.
1985 softime 8477 *
1986 softime 8989 * @return array
1987 softime 8477 */
1988 softime 8989 function get_sequence_args() {
1989 softime 8477 //
1990 softime 8989 $result = array();
1991 softime 8477 $inst_datd = $this->get_inst_dossier_autorisation_type_detaille();
1992     $inst_dat = $this->get_inst_dossier_autorisation_type($inst_datd->getVal('dossier_autorisation_type'));
1993 softime 8989 $result['datc'] = $inst_dat->getVal('code');
1994     $result['annee'] = $this->getVal('annee');
1995 softime 8477 $parse_id = $this->get_dossier_instruction_numero();
1996     $dep_com = $parse_id[2][0];
1997 softime 8989 $result['dep'] = substr($dep_com, 0, 3);
1998     $result['com'] = substr($dep_com, 3);
1999     return $result;
2000     }
2001    
2002     /**
2003     * Retourne le nom de la sequence du dossier d'instruction courant.
2004     *
2005     * @return String
2006     */
2007     function get_sequence_name() {
2008 softime 8477 //
2009 softime 8989 $sequence_args = $this->get_sequence_args();
2010     //
2011     return $this->compose_sequence_name($sequence_args['datc'], $sequence_args['annee'], $sequence_args['dep'], $sequence_args['com']);
2012 softime 8477 }
2013    
2014     /**
2015 fmichon 3892 * Récupère le numéro de version du dossier d'instruction.
2016     *
2017     * @return string
2018     */
2019 softime 4838 function get_dossier_instruction_version($dossier_instruction = null) {
2020 fmichon 3892
2021     // Expression régulière qui découpe le numéro du dossier
2022 softime 4838 $return = $this->get_dossier_instruction_numero($dossier_instruction);
2023 fmichon 3892
2024     // Si l'expression régulière retourne une erreur
2025     if ($return == false) {
2026     // Message dans le log
2027     $this->f->addToLog(__METHOD__."(): "._("Erreur lors de la recuperation du numero de version du dossier d'instruction"), DEBUG_MODE);
2028     //
2029     return false;
2030     }
2031    
2032 nmeucci 4526 // Retourne seulement la version du dossier d'instruction.
2033     // Elle vaut 0 si le numéro du DI n'a pas de suffixe.
2034     if (isset($return[6][0])) {
2035     return $return[6][0];
2036     }
2037     return 0;
2038 fmichon 3892 }
2039 mbroquet 3730
2040     /*Incrémente le numéro de version du dossier*/
2041     function incrementNumeroVersion($dossierAutorisation, $nouveauNumeroVersion) {
2042    
2043     $valF = array (
2044     "numero_version" => $nouveauNumeroVersion
2045     );
2046    
2047 softime 8989 $res = $this->f->db->autoExecute(DB_PREFIXE."dossier_autorisation",
2048 mbroquet 3730 $valF,
2049     DB_AUTOQUERY_UPDATE,
2050     "dossier_autorisation = '$dossierAutorisation'");
2051    
2052     if (database :: isError($res))
2053     die($res->getMessage()."erreur ".$sql);
2054    
2055     }
2056    
2057     /**
2058     * Retourne un numéro de version en fonction du type de dossier d'instruction
2059     * @param string $dossier_autorisation
2060     * @param integer $dossier_instruction_type
2061     * @return int
2062     */
2063     public function getNumeroVersionDossierInstructionType($dossier_autorisation, $dossier_instruction_type, $numero_version, $increment = true){
2064    
2065     $numeroVersionDossierInstructionType = $numero_version;
2066    
2067     //On récupère le code correspondant au type de dossier d'instruction passé
2068     //en paramètre
2069     $sql = "SELECT
2070     code
2071     FROM
2072     ".DB_PREFIXE."dossier_instruction_type
2073     WHERE
2074     dossier_instruction_type = ".$dossier_instruction_type;
2075 softime 8989 $codeDossierInstructionType = $this->f->db->getOne($sql);
2076 mbroquet 3730 $this->f->addToLog("getNumeroVersionDossierInstructionType(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
2077     if ( database::isError($codeDossierInstructionType)){
2078     $this->f->addToError("", $codeDossierInstructionType, $codeDossierInstructionType);
2079     return false;
2080     }
2081    
2082    
2083     // Si c'est un dossier d'instruction de type "Initial", code "P", on retourne 0
2084     if ( strcmp($codeDossierInstructionType, "P") == 0 ){
2085     return 0;
2086     }
2087     //Si c'est un modificatif ou transfert on retourne un nombre correspondant au
2088     //nombre de dossier d'instruction de ce type, rattaché au dossier
2089     //d'autorisation complété par des 0 à gauche si besoin. Format du retour
2090     //attendu : 01 ou 02, etc.
2091     else {
2092    
2093     //On récupère le nombre de dossier d'instruction de ce type rattaché au
2094     //dossier d'autorisation
2095     $sql = "SELECT
2096     count(dossier)
2097     FROM
2098     ".DB_PREFIXE."dossier
2099     LEFT JOIN
2100     ".DB_PREFIXE."dossier_autorisation
2101     ON
2102     dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
2103     WHERE
2104     dossier_autorisation.dossier_autorisation = '".$dossier_autorisation."'
2105     AND
2106     dossier.dossier_instruction_type = ".$dossier_instruction_type;
2107 softime 8989 $numeroVersionDossierInstructionType = $this->f->db->getOne($sql);
2108 mbroquet 3730 $this->f->addToLog("getNumeroVersionDossierInstructionType(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
2109     if ( database::isError($numeroVersionDossierInstructionType)){
2110     $this->f->addToError("", $numeroVersionDossierInstructionType, $numeroVersionDossierInstructionType);
2111     return false;
2112     }
2113    
2114     // Requête SQL
2115     $sql = "SELECT
2116     substring(dossier, '\d*$')::int as last_num_dossier
2117     FROM ".DB_PREFIXE."dossier
2118     WHERE dossier_instruction_type = ".$dossier_instruction_type."
2119     AND dossier_autorisation = '".$dossier_autorisation."'
2120     AND version = (
2121     SELECT max(version)
2122     FROM ".DB_PREFIXE."dossier
2123     WHERE dossier_instruction_type = ".$dossier_instruction_type."
2124     AND dossier_autorisation = '".$dossier_autorisation."'
2125     GROUP BY dossier_instruction_type, dossier_autorisation
2126     )";
2127 softime 8989 $res = $this->f->db->query($sql);
2128 mbroquet 3730 $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\")", VERBOSE_MODE);
2129     $this->f->isDatabaseError($res);
2130     $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
2131    
2132     $num_version_last_dossier = $row['last_num_dossier'];
2133    
2134     if (!empty($num_version_last_dossier)
2135     && $num_version_last_dossier >= $numeroVersionDossierInstructionType) {
2136     // Modifie le numéro suivant
2137     $numeroVersionDossierInstructionType = $num_version_last_dossier;
2138     }
2139     //
2140     if ($increment === true) {
2141     $numeroVersionDossierInstructionType = ++$numeroVersionDossierInstructionType;
2142     }
2143     //On compléte par des 0 à gauche
2144     $numeroVersionDossierInstructionType = str_pad($numeroVersionDossierInstructionType, 2, "0", STR_PAD_LEFT);
2145    
2146     return $numeroVersionDossierInstructionType;
2147     }
2148     }
2149     /**
2150     * Retourne le libellé du dossier d'autorisation
2151     * @param string $dossier_autorisation Identifiant du dossier d'autorisation
2152     * @return string Libellé dossier d'autorisation
2153     */
2154     function get_dossier_autorisation_libelle($dossier_autorisation) {
2155    
2156     $dossier_autorisation_libelle = "";
2157    
2158     // Requête SQL
2159     $sql = "SELECT
2160     dossier_autorisation_libelle
2161     FROM
2162     ".DB_PREFIXE."dossier_autorisation
2163     WHERE
2164     dossier_autorisation = '$dossier_autorisation'";
2165    
2166 softime 8989 $dossier_autorisation_libelle = $this->f->db->getOne($sql);
2167 mbroquet 3730 $this->addToLog("get_dossier_autorisation_libelle(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
2168     database::isError($dossier_autorisation_libelle);
2169    
2170     // Retourne le résultat
2171     return $dossier_autorisation_libelle;
2172     }
2173    
2174 softime 6929 function setvalF($val = array()){
2175 mbroquet 3730 parent::setvalF($val);
2176    
2177     // Récupération des id demandeurs postés
2178     $this->getPostedValues();
2179    
2180     // enlever les valeurs a ne pas saisir -> recherche en trigger ajouter et modifier
2181     unset ($this->valF['geom']);
2182     unset ($this->valF['geom1']);
2183     // valeurs hiddenstatic (calcule)
2184     if($this->maj==1){
2185     // par defaut
2186     unset ($this->valF['etat']);
2187     unset ($this->valF['delai']);
2188     unset ($this->valF['accord_tacite']);
2189     }
2190     unset ($this->valF['avis_decision']); // avis + libelle avis
2191     unset ($this->valF['terrain_surface_calcul']);
2192     unset ($this->valF['shon_calcul']);
2193     unset ($this->valF['date_notification_delai']);
2194     unset ($this->valF['date_decision']);
2195     unset ($this->valF['date_limite']);
2196     unset ($this->valF['date_validite']);
2197     unset ($this->valF['date_chantier']);
2198     unset ($this->valF['date_achevement']);
2199     unset ($this->valF['date_conformite']);
2200 nmeucci 3887 // Ce champ est mis à jour uniquement par la gestion spécifique du log
2201     // et donc jamais par les actions ajouter/modifier
2202     unset ($this->valF['log_instructions']);
2203 mbroquet 3730
2204     // Durée de validité lors de la création du dossier d'instruction
2205     $this->valF['duree_validite'] = $this->get_duree_validite($this->valF['dossier_autorisation']);
2206     }
2207    
2208 softime 6929
2209 softime 6565 /**
2210 softime 7067 * Retourne le type de formulaire : ADS, CTX RE, CTX IN ou DPC.
2211 softime 6565 *
2212     * @return mixed $type_aff_form Type de formulaire (string) ou false (bool) si erreur BDD.
2213     */
2214     function get_type_affichage_formulaire() {
2215     if (isset($this->type_aff_form) === true) {
2216     return $this->type_aff_form;
2217 mbroquet 3730 }
2218 softime 6565 //
2219 softime 7996 if($this->getParameter('maj') == '0' OR $this->get_action_crud() === 'create') {
2220 softime 6565 $id_dossier_instruction_type = $this->valF["dossier_instruction_type"];
2221     } else {
2222     $id_dossier_instruction_type = $this->getVal("dossier_instruction_type");
2223     }
2224     $sql = "SELECT dossier_autorisation_type.affichage_form
2225     FROM " . DB_PREFIXE . "dossier_instruction_type
2226     INNER JOIN " . DB_PREFIXE . "dossier_autorisation_type_detaille
2227     ON dossier_instruction_type.dossier_autorisation_type_detaille=dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2228     INNER JOIN " . DB_PREFIXE . "dossier_autorisation_type
2229     ON dossier_autorisation_type.dossier_autorisation_type=dossier_autorisation_type_detaille.dossier_autorisation_type
2230     WHERE dossier_instruction_type.dossier_instruction_type=" . intval($id_dossier_instruction_type);
2231 softime 8989 $type_aff_form = $this->f->db->getOne($sql);
2232 softime 6565 $this->f->addToLog(__METHOD__ . " : db->getOne(\"" . $sql . "\")", VERBOSE_MODE);
2233     if($this->f->isDatabaseError($type_aff_form, true) === true) {
2234     return false;
2235     }
2236     $this->type_aff_form = $type_aff_form;
2237     //
2238     return $this->type_aff_form;
2239     }
2240 mbroquet 3730
2241    
2242 softime 6565 /**
2243     * Retourne le code du groupe du dossier d'instruction.
2244     *
2245     * @return string
2246     */
2247     public function get_groupe() {
2248     //
2249     if (isset($this->groupe) === true && $this->groupe !== null) {
2250     return $this->groupe;
2251 mbroquet 3730 }
2252    
2253 softime 6565 // Récupère le code du groupe
2254     $inst_dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
2255     $inst_dossier_autorisation_type = $this->get_inst_dossier_autorisation_type($inst_dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
2256     $inst_groupe = $this->get_inst_groupe($inst_dossier_autorisation_type->getVal('groupe'));
2257     $groupe = $inst_groupe->getVal('code');
2258 mbroquet 3730
2259 softime 6565 //
2260     $this->groupe = $groupe;
2261     //
2262     return $this->groupe;
2263     }
2264 mbroquet 3730
2265 softime 6565 /**
2266 softime 8989 * @return void
2267 softime 6565 */
2268 softime 8989 function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
2269     parent::verifier($val);
2270 softime 7366 // La date de dépôt est obligatoire
2271     if ($val['date_depot'] === '' || $val['date_depot'] === null) {
2272     //
2273     $this->correct = false;
2274     $this->addToMessage( _('Le champ').' <span class="bold">'.$this->getLibFromField('date_depot').'</span> '._('est obligatoire'));
2275     }
2276    
2277 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
2278     if ($type_aff_form ===false) {
2279     $this->correct = false;
2280     $this->addToMessage(_("Une erreur s'est produite lors de l'ajout de ce dossier. Veuillez contacter votre administrateur."));
2281 mbroquet 3730 }
2282 softime 6565
2283     switch ($type_aff_form) {
2284     case 'ADS':
2285     case 'CTX RE':
2286     if (!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
2287     empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
2288     !is_null($this->form)) {
2289     $this->correct = false;
2290     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
2291 mbroquet 3730 }
2292 softime 6565 break;
2293     case 'CTX IN':
2294     if (!isset($this->postedIdDemandeur["contrevenant_principal"]) OR
2295     empty($this->postedIdDemandeur["contrevenant_principal"]) AND
2296     !is_null($this->form)) {
2297     $this->correct = false;
2298     $this->addToMessage(_("La saisie d'un contrevenant principal est obligatoire."));
2299     }
2300     break;
2301 softime 7067 case 'DPC':
2302     if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
2303     empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
2304     !is_null($this->form)) {
2305     $this->correct = false;
2306     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
2307     }
2308     if(!isset($this->postedIdDemandeur["bailleur_principal"]) OR
2309     empty($this->postedIdDemandeur["bailleur_principal"]) AND
2310     !is_null($this->form)) {
2311     $this->correct = false;
2312     $this->addToMessage(_("La saisie d'un bailleur principal est obligatoire."));
2313     }
2314     break;
2315 mbroquet 3730 }
2316 softime 7366
2317     // Récupération du crud par rapport au mode du formulaire
2318     $crud = $this->get_action_crud($this->getParameter("maj"));
2319    
2320     // L'année de la date de dépot ne peut pas être modifiée
2321     if ($crud === 'update' && array_key_exists("date_depot", $val) === true && ($val["date_depot"] !== "" && $val["date_depot"] !== null)) {
2322     //
2323     $new_date = DateTime::createFromFormat('d/m/Y', $val["date_depot"]);
2324     $old_date = DateTime::createFromFormat('Y-m-d', $this->getVal("date_depot"));
2325     if ($new_date->format("Y") != $old_date->format("Y")) {
2326     $this->addToMessage(_("L'année de la date de dépôt n'est pas modifiable."));
2327     $this->correct = false;
2328     }
2329     }
2330 softime 6565 }
2331 mbroquet 3730
2332    
2333 softime 6565 function setType(&$form,$maj) {
2334     // Par défaut le type des champs est géré nativement par le framework
2335     parent::setType($form,$maj);
2336    
2337     // Récupération du contexte : groupe, CRUD et paramètres
2338     $groupe = $this->get_type_affichage_formulaire();
2339     $crud = $this->get_action_crud($maj);
2340     $parameters = $this->f->getCollectivite($this->getVal('om_collectivite'));
2341    
2342 mbroquet 3730 //
2343 softime 6565 // Gestion du groupe
2344 mbroquet 3730 //
2345    
2346 softime 6565 // INFRACTION
2347     $inf_fields = array(
2348     'a_qualifier' => 'hidden',
2349     'autorisation_contestee' => 'hidden',
2350     'autorite_competente' => 'hidden',
2351     'cle_acces_citoyen' => 'hidden',
2352     'contrevenants' => 'static',
2353     'date_ait' => 'hiddenstaticdate',
2354     'date_audience' => 'hiddenstaticdate',
2355     'date_cloture_instruction' => 'hidden',
2356     'date_complet' => 'hidden',
2357     'date_contradictoire' => 'hiddenstaticdate',
2358     'date_decision' => 'hiddenstaticdate',
2359     'date_depot' => 'hiddenstaticdate',
2360     'date_dernier_depot' => 'hidden',
2361     'date_derniere_visite' => 'hiddenstaticdate',
2362     'date_limite' => 'hidden',
2363     'date_limite_incompletude' => 'hidden',
2364     'date_premiere_visite' => 'hiddenstaticdate',
2365     'date_transmission_parquet' => 'hiddenstaticdate',
2366     'date_validite' => 'hidden',
2367     'delai' => 'hidden',
2368     'description_projet' => 'hidden',
2369     'dossier_autorisation_type_detaille' => 'hidden',
2370     'dossier_instruction_type' => 'hidden',
2371     'dossier_petitionnaire' => 'hidden',
2372     'dossier_petitionnaires' => 'hidden',
2373     'dt_ctx_infraction' => 'checkboxhiddenstatic',
2374     'dt_ctx_regularisable' => 'checkboxhiddenstatic',
2375     'dt_ctx_synthese_anr' => 'static',
2376     'dt_ctx_synthese_nti' => 'static',
2377 softime 8477 'ctx_reference_dsj' => 'static',
2378 softime 6565 'enjeu_ctx' => 'hidden',
2379     'enjeu_erp' => 'hidden',
2380     'enjeu_urba' => 'hidden',
2381     'erp' => 'hidden',
2382     'evenement_suivant_tacite' => 'hidden',
2383     'evenement_suivant_tacite_incompletude' => 'hidden',
2384     'numero_versement_archive' => 'hidden',
2385     'requerants' => 'hidden',
2386     'tax_mtn_part_commu' => 'hidden',
2387     'tax_mtn_part_depart' => 'hidden',
2388     'tax_mtn_part_reg' => 'hidden',
2389     'tax_mtn_total' => 'hidden',
2390 softime 6929 'tax_mtn_rap' => 'hidden',
2391 softime 6565 'tax_secteur' => 'hidden',
2392 softime 6929 'tax_mtn_part_commu_sans_exo' => 'hidden',
2393     'tax_mtn_part_depart_sans_exo' => 'hidden',
2394     'tax_mtn_part_reg_sans_exo' => 'hidden',
2395     'tax_mtn_total_sans_exo' => 'hidden',
2396     'tax_mtn_rap_sans_exo' => 'hidden',
2397 softime 7067 'bailleur' => 'hidden',
2398 softime 8477 'ctx_reference_sagace' => 'static',
2399 softime 6565 );
2400     // RECOURS
2401     $re_fields = array(
2402     'a_qualifier' => 'hidden',
2403     'autorite_competente' => 'hidden',
2404     'cle_acces_citoyen' => 'hidden',
2405     'contrevenants' => 'hidden',
2406     'date_ait' => 'hidden',
2407     'date_audience' => 'hidden',
2408     'date_cloture_instruction' => 'hiddenstaticdate',
2409     'date_complet' => 'hidden',
2410     'date_contradictoire' => 'hidden',
2411     'date_decision' => 'hiddenstaticdate',
2412     'date_depot' => 'hiddenstaticdate',
2413     'date_dernier_depot' => 'hidden',
2414     'date_derniere_visite' => 'hidden',
2415     'date_limite' => 'hiddenstaticdate',
2416     'date_limite_incompletude' => 'hidden',
2417     'date_premiere_visite' => 'hidden',
2418     'date_transmission_parquet' => 'hidden',
2419     'date_validite' => 'hidden',
2420     'delai' => 'hidden',
2421     'description_projet' => 'hidden',
2422     'dossier_autorisation_type_detaille' => 'static',
2423     'dossier_instruction_type' => 'hidden',
2424     'dossier_petitionnaire' => 'hidden',
2425     'dossier_petitionnaires' => 'static',
2426     'dt_ctx_infraction' => 'hidden',
2427     'dt_ctx_regularisable' => 'hidden',
2428     'dt_ctx_synthese_anr' => 'hidden',
2429     'dt_ctx_synthese_nti' => 'hidden',
2430     'enjeu_ctx' => 'hidden',
2431     'enjeu_erp' => 'hidden',
2432     'enjeu_urba' => 'hidden',
2433     'erp' => 'hidden',
2434     'evenement_suivant_tacite' =>'selecthiddenstatic',
2435     'evenement_suivant_tacite_incompletude' => 'hidden',
2436     'instructeur_2' => 'hidden',
2437     'numero_versement_archive' => 'hidden',
2438     'requerants' => 'static',
2439     'tax_mtn_part_commu' => 'hidden',
2440     'tax_mtn_part_depart' => 'hidden',
2441     'tax_mtn_part_reg' => 'hidden',
2442     'tax_mtn_total' => 'hidden',
2443 softime 6929 'tax_mtn_rap' => 'hidden',
2444 softime 6565 'tax_secteur' => 'hidden',
2445 softime 6929 'tax_mtn_part_commu_sans_exo' => 'hidden',
2446     'tax_mtn_part_depart_sans_exo' => 'hidden',
2447     'tax_mtn_part_reg_sans_exo' => 'hidden',
2448     'tax_mtn_total_sans_exo' => 'hidden',
2449     'tax_mtn_rap_sans_exo' => 'hidden',
2450 softime 7067 'bailleur' => 'hidden',
2451 softime 8477 'ctx_reference_dsj' => 'static',
2452     'ctx_reference_sagace' => 'static',
2453 softime 6565 );
2454     // ADS
2455     $ads_fields = array(
2456     'autorisation_contestee' => 'hidden',
2457     'cle_acces_citoyen' => 'static',
2458     'contrevenants' => 'hidden',
2459     'date_ait' => 'hidden',
2460     'date_audience' => 'hidden',
2461 softime 8989 'date_affichage' => 'datestatic',
2462 softime 6565 'date_cloture_instruction' => 'hidden',
2463     'date_contradictoire' => 'hidden',
2464     'date_derniere_visite' => 'hidden',
2465     'date_premiere_visite' => 'hidden',
2466     'date_transmission_parquet' => 'hidden',
2467     'dossier_autorisation_type_detaille' => 'hidden',
2468     'dossier_instruction_type' => 'selecthiddenstatic',
2469     'dossier_petitionnaires' => 'hidden',
2470     'dt_ctx_infraction' => 'hidden',
2471     'dt_ctx_regularisable' => 'hidden',
2472     'dt_ctx_synthese_anr' => 'hidden',
2473     'dt_ctx_synthese_nti' => 'hidden',
2474 softime 8477 'ctx_reference_dsj' => 'hidden',
2475 softime 6565 'enjeu_ctx' => 'static',
2476     'instructeur_2' => 'hidden',
2477     'requerants' => 'hidden',
2478 softime 7067 'bailleur' => 'hidden',
2479 softime 8477 'ctx_reference_sagace' => 'hidden',
2480 softime 6565 );
2481 softime 7067 // DPC
2482     $dpc_fields = array(
2483     'autorisation_contestee' => 'hidden',
2484     'cle_acces_citoyen' => 'static',
2485     'contrevenants' => 'hidden',
2486     'date_ait' => 'hidden',
2487     'date_audience' => 'hidden',
2488     'date_cloture_instruction' => 'hidden',
2489     'date_contradictoire' => 'hidden',
2490     'date_derniere_visite' => 'hidden',
2491     'date_premiere_visite' => 'hidden',
2492     'date_transmission_parquet' => 'hidden',
2493     'dossier_autorisation_type_detaille' => 'hidden',
2494     'dossier_instruction_type' => 'selecthiddenstatic',
2495     'dossier_petitionnaires' => 'hidden',
2496     'dt_ctx_infraction' => 'hidden',
2497     'dt_ctx_regularisable' => 'hidden',
2498     'dt_ctx_synthese_anr' => 'hidden',
2499     'dt_ctx_synthese_nti' => 'hidden',
2500 softime 8477 'ctx_reference_dsj' => 'hidden',
2501 softime 7067 'enjeu_ctx' => 'static',
2502     'instructeur_2' => 'hidden',
2503     'requerants' => 'hidden',
2504     'bailleur' => 'static',
2505 softime 8477 'ctx_reference_sagace' => 'hidden',
2506 softime 7067 );
2507 softime 6565 // COMMUN
2508     $all_fields = array(
2509     'accord_tacite' => 'hidden',
2510     'annee' => 'hidden',
2511     'autres_demandeurs' => 'hidden',
2512     'date_achevement' => 'hidden',
2513     'date_chantier' => 'hidden',
2514     'date_conformite' => 'hidden',
2515     'date_notification_delai' => 'hidden',
2516     'date_rejet' => 'hidden',
2517     'date_retour_contradictoire' => 'hidden',
2518     'delai_incompletude' => 'hidden',
2519     'description' => 'hidden',
2520     'dossier' => 'hidden',
2521     'dossier_arrondissement' => 'hidden',
2522     'dossier_autorisation' => 'hidden',
2523     'dossier_autorisation_libelle' => 'hidden',
2524     'duree_validite' => 'hidden',
2525     'etat_pendant_incompletude' => 'hidden',
2526     'geom' => 'hiddenstatic',
2527     'geom1' => 'hidden',
2528     'incomplet_notifie' => 'hidden',
2529     'incompletude' => 'hidden',
2530     'interface_referentiel_erp' => 'hidden',
2531     'log_instructions' => 'nodisplay',
2532     'om_collectivite' => 'hidden',
2533     'quartier' => 'hidden',
2534     'version' => 'hidden',
2535 softime 7996 'date_modification' => 'hidden',
2536     'hash_sitadel' => 'hidden',
2537 softime 8329 'depot_electronique' => 'hidden',
2538 softime 6565 );
2539     if (isset($parameters['option_afficher_division'])
2540     && $parameters['option_afficher_division'] !== 'true') {
2541     $all_fields['division'] = 'hidden';
2542 mbroquet 3730 }
2543 softime 6565 if (isset($parameters['option_sig'])
2544     && $parameters['option_sig'] !== 'sig_interne'
2545     && $parameters['option_sig'] !== 'sig_externe'){
2546     $all_fields['geom'] = 'hidden';
2547 mbroquet 3730 }
2548    
2549 softime 6565 //
2550     // Gestion du contexte
2551     //
2552 mbroquet 3730
2553 softime 6565 // AJOUTER, MODIFIER
2554     if ($crud === 'create' OR $crud === 'update') {
2555 mbroquet 3730
2556 softime 7366 $all_fields['avis_decision'] = 'selecthiddenstatic';
2557 softime 6565 $all_fields['etat'] = 'hiddenstatic';
2558     $all_fields['terrain'] = 'hiddenstatic';
2559     //
2560     $ads_fields['a_qualifier'] = 'checkbox';
2561     $ads_fields['accord_tacite'] = 'hiddenstatic';
2562     $ads_fields['autorite_competente'] = 'selecthiddenstatic';
2563     $ads_fields['date_achevement'] = 'hiddenstaticdate';
2564     $ads_fields['date_chantier'] = 'hiddenstaticdate';
2565     $ads_fields['date_conformite'] = 'hiddenstaticdate';
2566     $ads_fields['date_decision'] = 'hiddenstaticdate';
2567 softime 8989 $ads_fields['date_affichage'] = 'hiddenstaticdate';
2568 softime 6565 $ads_fields['date_depot'] = 'hiddenstaticdate';
2569     $ads_fields['date_dernier_depot'] = 'hiddenstaticdate';
2570     $ads_fields['date_notification_delai'] = 'hiddenstaticdate';
2571     $ads_fields['date_rejet'] = 'hiddenstaticdate';
2572     $ads_fields['date_validite'] = 'hiddenstaticdate';
2573     $ads_fields['delai'] = 'hiddenstatic';
2574     $ads_fields['description_projet'] = 'hiddenstatic';
2575 softime 7366 $ads_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
2576 softime 6565 $ads_fields['shon_calcul'] = 'hiddenstatic';
2577     $ads_fields['tax_mtn_part_commu'] = 'hidden';
2578     $ads_fields['tax_mtn_part_depart'] = 'hidden';
2579     $ads_fields['tax_mtn_part_reg'] = 'hidden';
2580     $ads_fields['tax_mtn_total'] = 'hidden';
2581 softime 6929 $ads_fields['tax_mtn_rap'] = 'hidden';
2582     $ads_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
2583     $ads_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
2584     $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
2585     $ads_fields['tax_mtn_total_sans_exo'] = 'hidden';
2586     $ads_fields['tax_mtn_rap_sans_exo'] = 'hidden';
2587 softime 6565 $ads_fields['terrain_surface_calcul'] = 'hiddenstatic';
2588 softime 7067 //
2589     $dpc_fields['a_qualifier'] = 'checkbox';
2590     $dpc_fields['accord_tacite'] = 'hiddenstatic';
2591     $dpc_fields['autorite_competente'] = 'selecthiddenstatic';
2592     $dpc_fields['date_achevement'] = 'hiddenstaticdate';
2593     $dpc_fields['date_chantier'] = 'hiddenstaticdate';
2594     $dpc_fields['date_conformite'] = 'hiddenstaticdate';
2595     $dpc_fields['date_decision'] = 'hiddenstaticdate';
2596     $dpc_fields['date_depot'] = 'hiddenstaticdate';
2597     $dpc_fields['date_dernier_depot'] = 'hiddenstaticdate';
2598     $dpc_fields['date_notification_delai'] = 'hiddenstaticdate';
2599     $dpc_fields['date_rejet'] = 'hiddenstaticdate';
2600     $dpc_fields['date_validite'] = 'hiddenstaticdate';
2601     $dpc_fields['delai'] = 'hiddenstatic';
2602     $dpc_fields['description_projet'] = 'hiddenstatic';
2603 softime 7366 $dpc_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
2604 softime 7067 $dpc_fields['shon_calcul'] = 'hiddenstatic';
2605     $dpc_fields['tax_mtn_part_commu'] = 'hidden';
2606     $dpc_fields['tax_mtn_part_depart'] = 'hidden';
2607     $dpc_fields['tax_mtn_part_reg'] = 'hidden';
2608     $dpc_fields['tax_mtn_total'] = 'hidden';
2609     $dpc_fields['tax_mtn_rap'] = 'hidden';
2610     $dpc_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
2611     $dpc_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
2612     $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
2613     $dpc_fields['tax_mtn_total_sans_exo'] = 'hidden';
2614     $dpc_fields['tax_mtn_rap_sans_exo'] = 'hidden';
2615     $dpc_fields['terrain_surface_calcul'] = 'hiddenstatic';
2616 softime 7366 //
2617     $re_fields['dossier_autorisation_type_detaille'] = 'hiddenstatic';
2618     $re_fields['dossier_petitionnaires'] = 'hiddenstatic';
2619     $re_fields['requerants'] = 'hiddenstatic';
2620     $inf_fields['contrevenants'] = 'hiddenstatic';
2621     $inf_fields['dt_ctx_synthese_anr'] = 'hiddenstatic';
2622     $inf_fields['dt_ctx_synthese_nti'] = 'hiddenstatic';
2623 softime 6565 // Si l'état du dossier est incomplet
2624     if ($this->is_incomplet_notifie()) {
2625     // On cache les dates de complétude et de limite d'instruction
2626     $ads_fields['date_complet'] = 'hidden';
2627     $ads_fields['date_limite'] = 'hidden';
2628     $ads_fields['evenement_suivant_tacite_incompletude'] ='selecthiddenstatic';
2629     $ads_fields['evenement_suivant_tacite'] ='hidden';
2630     $ads_fields['date_limite_incompletude'] = 'hiddenstaticdate';
2631 softime 7067 //
2632     $dpc_fields['date_complet'] = 'hidden';
2633     $dpc_fields['date_limite'] = 'hidden';
2634     $dpc_fields['evenement_suivant_tacite_incompletude'] ='selecthiddenstatic';
2635     $dpc_fields['evenement_suivant_tacite'] ='hidden';
2636     $dpc_fields['date_limite_incompletude'] = 'hiddenstaticdate';
2637 softime 6565 } else {
2638     // Sinon on cache la date de limite d'incomplétude
2639     $ads_fields['date_limite_incompletude'] = 'hidden';
2640     $ads_fields['evenement_suivant_tacite_incompletude'] ='hidden';
2641     $ads_fields['evenement_suivant_tacite'] ='selecthiddenstatic';
2642     $ads_fields['date_complet'] = 'hiddenstaticdate';
2643     $ads_fields['date_limite'] = 'hiddenstaticdate';
2644 softime 7067 //
2645     $dpc_fields['date_limite_incompletude'] = 'hidden';
2646     $dpc_fields['evenement_suivant_tacite_incompletude'] ='hidden';
2647     $dpc_fields['evenement_suivant_tacite'] ='selecthiddenstatic';
2648     $dpc_fields['date_complet'] = 'hiddenstaticdate';
2649     $dpc_fields['date_limite'] = 'hiddenstaticdate';
2650 softime 6565 }
2651    
2652     // MODIFIER
2653     if ($crud ==='update') {
2654     $all_fields['dossier_libelle'] = 'hiddenstatic';
2655     $ads_fields['dossier_petitionnaire'] = 'hiddenstatic';
2656 softime 7067 $dpc_fields['dossier_petitionnaire'] = 'hiddenstatic';
2657 softime 6565 //
2658     if ($this->f->isAccredited("dossier_modifier_instructeur")) {
2659     $all_fields['instructeur'] = 'select';
2660     $inf_fields['instructeur_2'] = 'select';
2661     } else {
2662     $all_fields['instructeur'] = 'selecthiddenstatic';
2663     $inf_fields['instructeur_2'] = 'selecthiddenstatic';
2664     }
2665     //
2666     if (isset($parameters['option_afficher_division'])
2667     && $parameters['option_afficher_division'] === 'true') {
2668     $all_fields['division'] = 'selecthiddenstatic';
2669     if ($this->f->isAccredited("dossier_modifier_division")) {
2670     $all_fields['division'] = 'select';
2671     }
2672     }
2673     // Si l'utilisateur ne peut pas qualifier un DI (guichet unique & guichet et suivi)
2674     if (!$this->f->isAccredited(array("dossier_instruction","dossier_instruction_qualifier"), "OR")) {
2675     // Il ne peut pas modifier les champs suivants
2676     $ads_fields['numero_versement_archive'] = 'hiddenstatic';
2677     $ads_fields['enjeu_urba'] = 'checkboxhiddenstatic';
2678     $ads_fields['enjeu_erp'] = 'checkboxhiddenstatic';
2679     $ads_fields['erp'] = 'checkboxhiddenstatic';
2680     $ads_fields['a_qualifier'] = 'checkboxhiddenstatic';
2681 softime 7067 //
2682     $dpc_fields['numero_versement_archive'] = 'hiddenstatic';
2683     $dpc_fields['enjeu_urba'] = 'checkboxhiddenstatic';
2684     $dpc_fields['enjeu_erp'] = 'checkboxhiddenstatic';
2685     $dpc_fields['erp'] = 'checkboxhiddenstatic';
2686     $dpc_fields['a_qualifier'] = 'checkboxhiddenstatic';
2687 softime 6565 }
2688     // Le profil Qualificateur peut modifier seulement les champs
2689     // autorite_competente, a_qualifier et erp
2690     if ($this->f->isUserQualificateur()) {
2691     $ads_fields['numero_versement_archive'] = 'static';
2692     $ads_fields['enjeu_urba'] = 'checkboxstatic';
2693     $ads_fields['enjeu_erp'] = 'checkboxstatic';
2694 softime 7067 //
2695     $dpc_fields['numero_versement_archive'] = 'static';
2696     $dpc_fields['enjeu_urba'] = 'checkboxstatic';
2697     $dpc_fields['enjeu_erp'] = 'checkboxstatic';
2698 softime 6565 }
2699 softime 7366 // Le dossier ne doit pas être instruit
2700     if ($this->has_only_recepisse() === true
2701     && $this->getStatut() !== 'cloture') {
2702     //
2703     $all_fields['date_depot'] = 'date';
2704     }
2705 softime 8593 // Gestion de la case à cocher ERP en cas d'interfaçage avec le
2706     // référentiel ERP
2707     if ($this->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true) {
2708     // Par défaut la case à cocher ERP est non modifiable
2709     $all_fields['erp'] = 'checkboxhiddenstatic';
2710     // Si le type du dossier d'instruction en cours est présent
2711     // dans les paramètres autorisant l'interfaçage avec le référentiel ERP
2712     if (isset($parameters['erp__dossier__nature__at']) === true
2713     && $this->f->getDATCode($this->getVal($this->clePrimaire)) == $parameters['erp__dossier__nature__at']) {
2714     //
2715     $all_fields['erp'] = 'checkbox';
2716     }
2717     if (isset($parameters['erp__dossier__nature__pc']) === true
2718     && $this->f->getDATCode($this->getVal($this->clePrimaire)) == $parameters['erp__dossier__nature__pc']
2719     && isset($parameters['erp__dossier__type_di__pc']) === true) {
2720     //
2721     $erp_di_pc = explode(";", $parameters['erp__dossier__type_di__pc']);
2722     if (is_array($erp_di_pc) === true
2723     && in_array($this->getVal("dossier_instruction_type"), $erp_di_pc) === true) {
2724     //
2725     $all_fields['erp'] = 'checkbox';
2726     }
2727     }
2728     }
2729 softime 8989 // modification de la date d'affichage pour les ADS
2730     if ($this->f->isAccredited($this->get_absolute_class_name()."_modifier_date_affichage")) {
2731     $ads_fields['date_affichage'] = 'date';
2732     }
2733 softime 6565 }
2734     }
2735     // MODIFIER, SUPPRIMER, CONSULTER
2736     if ($crud !== 'create') {
2737     $re_fields['autorisation_contestee'] = 'selecthiddenstatic';
2738     $all_fields['date_demande'] = 'hidden';
2739     // La collectivité n'est jamais modifiable
2740     if ($_SESSION['niveau'] == 2) {
2741     $all_fields['om_collectivite'] = 'selecthiddenstatic';
2742     }
2743 softime 6929 // Instance du paramétrage des taxes
2744 mbroquet 3730 $inst_taxe_amenagement = $this->get_inst_taxe_amenagement();
2745     // Instance de cerfa
2746     $inst_cerfa = $this->get_inst_cerfa();
2747 softime 6929 // Si l'option de simulation est activée pour la collectivité du
2748     // dossier, l'utilisateur connecté a la permissions de voir
2749     // la simulation des taxes, la collectivité à un paramétrage pour
2750     // les taxes et que le cerfa du dossier à les champs requis
2751     if ($this->f->is_option_simulation_taxes_enabled($this->getVal('om_collectivite')) === true
2752     && $this->f->isAccredited("dossier_instruction_simulation_taxes") === true
2753     && $inst_taxe_amenagement !== null
2754     && $inst_cerfa->can_simulate_taxe_amenagement() === true) {
2755 mbroquet 3730
2756 softime 6565 // MODIFIER
2757     if ($crud === 'update') {
2758 mbroquet 3730 //
2759 softime 8989 if ($this->is_in_context_of_foreign_key("tax_secteur", $this->getParameter("retourformulaire"))) {
2760 softime 6565 $ads_fields['tax_secteur'] = 'selecthiddenstatic';
2761 softime 7067 $dpc_fields['tax_secteur'] = 'selecthiddenstatic';
2762 mbroquet 3730 } else {
2763 softime 6565 $ads_fields['tax_secteur'] = 'select';
2764 softime 7067 $dpc_fields['tax_secteur'] = 'select';
2765 mbroquet 3730 }
2766     }
2767 softime 6565 // SUPPRIMER
2768     if ($crud === 'delete') {
2769 mbroquet 3730 //
2770 softime 6565 $ads_fields['tax_secteur'] = 'selectstatic';
2771 softime 7067 $dpc_fields['tax_secteur'] = 'selectstatic';
2772 mbroquet 3730 }
2773 softime 6565 // CONSULTER
2774     if ($crud === 'read') {
2775 mbroquet 3730 //
2776 softime 6565 $ads_fields['tax_secteur'] = 'selectstatic';
2777 softime 7067 $dpc_fields['tax_secteur'] = 'selectstatic';
2778 mbroquet 3730 }
2779 softime 6565 // Si ce n'est pas une commune d'Île-de-France
2780 mbroquet 3730 if ($inst_taxe_amenagement->getVal('en_ile_de_france') == 'f') {
2781     //
2782 softime 6565 $ads_fields['tax_mtn_part_reg'] = 'hidden';
2783 softime 6929 $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
2784 softime 7067 $dpc_fields['tax_mtn_part_reg'] = 'hidden';
2785     $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
2786 mbroquet 3730 }
2787     } else {
2788 softime 6565 // MODIFER
2789     if ($crud === 'update') {
2790     $ads_fields['tax_secteur'] = 'hidden';
2791 softime 7067 $dpc_fields['tax_secteur'] = 'hidden';
2792 mbroquet 3730 }
2793 softime 6565 // SUPPRIMER, CONSULTER
2794     if ($crud === 'delete' OR $crud ==='read') {
2795     $ads_fields['tax_secteur'] = 'hidden';
2796     $ads_fields['tax_mtn_part_commu'] = 'hidden';
2797     $ads_fields['tax_mtn_part_depart'] = 'hidden';
2798     $ads_fields['tax_mtn_part_reg'] = 'hidden';
2799     $ads_fields['tax_mtn_total'] = 'hidden';
2800 softime 6929 $ads_fields['tax_mtn_rap'] = 'hidden';
2801     $ads_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
2802     $ads_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
2803     $ads_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
2804     $ads_fields['tax_mtn_total_sans_exo'] = 'hidden';
2805     $ads_fields['tax_mtn_rap_sans_exo'] = 'hidden';
2806 softime 7067 //
2807     $dpc_fields['tax_secteur'] = 'hidden';
2808     $dpc_fields['tax_mtn_part_commu'] = 'hidden';
2809     $dpc_fields['tax_mtn_part_depart'] = 'hidden';
2810     $dpc_fields['tax_mtn_part_reg'] = 'hidden';
2811     $dpc_fields['tax_mtn_total'] = 'hidden';
2812     $dpc_fields['tax_mtn_rap'] = 'hidden';
2813     $dpc_fields['tax_mtn_part_commu_sans_exo'] = 'hidden';
2814     $dpc_fields['tax_mtn_part_depart_sans_exo'] = 'hidden';
2815     $dpc_fields['tax_mtn_part_reg_sans_exo'] = 'hidden';
2816     $dpc_fields['tax_mtn_total_sans_exo'] = 'hidden';
2817     $dpc_fields['tax_mtn_rap_sans_exo'] = 'hidden';
2818 mbroquet 3730 }
2819     }
2820     }
2821 softime 8477 // CONSULTER
2822     if ($crud ==='read') {
2823 mbroquet 3730
2824 softime 6565 $ads_fields['geom'] = 'static';
2825     $ads_fields['a_qualifier'] = 'checkboxstatic';
2826     $ads_fields['terrain_references_cadastrales'] = 'referencescadastralesstatic';
2827 softime 7067 //
2828     $dpc_fields['geom'] = 'static';
2829     $dpc_fields['a_qualifier'] = 'checkboxstatic';
2830     $dpc_fields['terrain_references_cadastrales'] = 'referencescadastralesstatic';
2831 softime 6565 // Si l'état du dossier est incomplet
2832     if ($this->is_incomplet_notifie()) {
2833     // on cache les dates de complétude et de limite d'instruction
2834     $ads_fields['date_complet'] = 'hidden';
2835     $ads_fields['date_limite'] = 'hidden';
2836     $ads_fields['evenement_suivant_tacite_incompletude'] = 'selecthiddenstatic';
2837     $ads_fields['evenement_suivant_tacite'] = 'hidden';
2838 softime 7067 //
2839     $dpc_fields['date_complet'] = 'hidden';
2840     $dpc_fields['date_limite'] = 'hidden';
2841     $dpc_fields['evenement_suivant_tacite_incompletude'] = 'selecthiddenstatic';
2842     $dpc_fields['evenement_suivant_tacite'] = 'hidden';
2843 softime 6565 } else {
2844     // sinon on cache la date de limite d'incomplétude
2845     $ads_fields['date_limite_incompletude'] = 'hidden';
2846     $ads_fields['evenement_suivant_tacite_incompletude'] = 'hidden';
2847     $ads_fields['evenement_suivant_tacite'] = 'selecthiddenstatic';
2848 softime 7067 //
2849     $dpc_fields['date_limite_incompletude'] = 'hidden';
2850     $dpc_fields['evenement_suivant_tacite_incompletude'] = 'hidden';
2851     $dpc_fields['evenement_suivant_tacite'] = 'selecthiddenstatic';
2852 softime 6565 }
2853     if (isset($parameters['option_arrondissement'])
2854     && $parameters['option_arrondissement'] === 'true') {
2855     $all_fields['dossier_arrondissement'] = 'static';
2856     }
2857     }
2858 softime 8477 // SUPPRIMER
2859     if($crud === 'delete') {
2860     // Cache tous les champs execepté le libellé du dossier
2861     foreach ($this->champs as $champ) {
2862     $all_fields[$champ] = 'hidden';
2863     }
2864     $all_fields['dossier_libelle'] = 'hiddenstatic';
2865     }
2866 softime 6565
2867     //
2868     // Typage
2869     //
2870    
2871     switch ($groupe) {
2872     case 'CTX IN':
2873     $this->manage_type($form, $inf_fields);
2874     break;
2875     case 'CTX RE':
2876     $this->manage_type($form, $re_fields);
2877     break;
2878     case 'ADS':
2879     $this->manage_type($form, $ads_fields);
2880     break;
2881 softime 7067 case 'DPC':
2882     $this->manage_type($form, $dpc_fields);
2883     break;
2884 softime 6565 }
2885     $this->manage_type($form, $all_fields);
2886 mbroquet 3730 }
2887    
2888 softime 6929
2889 softime 6565 /**
2890     * Gestion du typage des champs
2891     *
2892     * @param object $form formulaire instancié
2893     * @param array $fields tableau associatif des champs avec leur widget de formulaire en valeur
2894     * @return void
2895     */
2896     protected function manage_type($form, $fields) {
2897     foreach ($this->champs as $key => $field) {
2898     if (array_key_exists($field, $fields) === true) {
2899     $form->setType($field, $fields[$field]);
2900     }
2901     }
2902     }
2903    
2904    
2905     /**
2906 softime 7067 * Retourne le nombre de parcelles qu'à en commun le dossier passé en
2907     * paramètre avec les dossiers contentieux en cours. Le nombre de parcelles
2908     * est groupé par type de dossier d'autorisation : RE ou IN.
2909 softime 6565 *
2910 softime 7067 * @param string $di identifiant du DI
2911 softime 6565 * @return array
2912     */
2913 softime 7067 function get_nb_parcelles_dossier_ciblees_par_contentieux($di) {
2914 softime 6565 $sql = "
2915     SELECT
2916     dossier_autorisation_type.code, COUNT(*) as nb
2917     FROM " . DB_PREFIXE . "dossier
2918     LEFT JOIN " . DB_PREFIXE . "dossier_parcelle
2919     ON dossier.dossier = dossier_parcelle.dossier
2920     LEFT JOIN " . DB_PREFIXE . "dossier_parcelle as parcelle_ctx
2921     ON dossier_parcelle.libelle = parcelle_ctx.libelle
2922     AND dossier_parcelle.dossier != parcelle_ctx.dossier
2923     LEFT JOIN " . DB_PREFIXE . "dossier as dossier_ctx
2924     ON dossier_ctx.dossier = parcelle_ctx.dossier
2925 softime 7067 INNER JOIN " . DB_PREFIXE . "etat
2926     ON dossier_ctx.etat = etat.etat AND etat.statut != 'cloture'
2927 softime 6565 LEFT JOIN " . DB_PREFIXE . "dossier_autorisation
2928     ON dossier_ctx.dossier_autorisation = dossier_autorisation.dossier_autorisation
2929     LEFT JOIN " . DB_PREFIXE . "dossier_autorisation_type_detaille
2930     ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2931     = dossier_autorisation.dossier_autorisation_type_detaille
2932     LEFT JOIN " . DB_PREFIXE . "dossier_autorisation_type
2933     ON dossier_autorisation_type_detaille.dossier_autorisation_type
2934     = dossier_autorisation_type.dossier_autorisation_type
2935     WHERE
2936     dossier.dossier = '" . $di . "'
2937     AND (dossier_autorisation_type.code = 'RE'
2938     OR dossier_autorisation_type.code = 'IN')
2939     GROUP BY dossier_autorisation_type.code
2940     ";
2941 softime 7067 $this->addToLog("get_nb_parcelles_dossier_ciblees_par_contentieux : db->query(\"$sql\")", VERBOSE_MODE);
2942 softime 8989 $res = $this->f->db->query($sql);
2943 softime 7067 $this->f->isDatabaseError($res);
2944 softime 6565
2945     $nb_re_inf = array('re' => 0, 'inf' => 0);
2946    
2947     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
2948     if ($row["code"] == "RE"){
2949     $nb_re_inf['re'] += $row["nb"];
2950     }
2951     if ($row["code"] == "IN"){
2952     $nb_re_inf['inf'] += $row["nb"];
2953     }
2954     }
2955    
2956     return $nb_re_inf;
2957     }
2958    
2959 softime 8989 /**
2960     * SETTER_FORM - setVal (setVal).
2961     *
2962     * @return void
2963     */
2964     function setVal(&$form, $maj, $validation, &$dnu1 = null, $dnu2 = null) {
2965     // parent::setVal($form, $maj, $validation);
2966     //
2967 mbroquet 3730 $this->maj=$maj;
2968 softime 8989 //
2969     if ($this->getVal("geom") != ""
2970     && $this->f->getParameter("option_sig") == "sig_externe"
2971     && $this->f->issetSIGParameter($this->getVal("dossier")) === true) {
2972     //
2973     $form->setVal("geom", $this->getGeolocalisationLink());
2974 mbroquet 3730 }
2975 softime 8989 //
2976 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
2977 softime 8989 if ($affichage_form === "ADS") {
2978     // Dans le cas d'un dépôt électronique un pictogramme apparait devant le demandeur
2979     if ($maj == 1 || $maj == 2 || $maj == 3) {
2980     if ($this->getVal("depot_electronique") === "t"
2981     || $this->getVal("depot_electronique") === true
2982     || $this->getVal("depot_electronique") === 1) {
2983 softime 8329 //
2984 softime 8989 $form->setVal(
2985     "dossier_petitionnaire",
2986     sprintf(
2987     '<span class="om-icon om-icon-16 om-icon-fix depot-electronique-16" title="%s"> </span>%s',
2988     "Dépôt électronique",
2989     $this->getVal("dossier_petitionnaire")
2990     )
2991     );
2992 softime 8329 }
2993     }
2994 softime 6565 if ($maj == 3) {
2995 softime 8989 $nb_re_inf = $this->get_nb_parcelles_dossier_ciblees_par_contentieux($this->getVal("dossier"));
2996 softime 6565 $message = "";
2997 softime 8989 if ($nb_re_inf["re"] > 0) {
2998 softime 6565 $message .= "<span class=\"label label-warning\" ";
2999 nmeucci 7085 $message .= "title=\""._("Au moins un dossier de recours contentieux ou gracieux en cours concerne les références cadastrales du dossier courant.")."\">";
3000 softime 6565 $message .= _("RE");
3001     $message .= "</span>";
3002 softime 8989 if ($nb_re_inf["inf"] > 0) {
3003 softime 6565 $message .= " ";
3004     }
3005     }
3006 softime 8989 if ($nb_re_inf["inf"] > 0) {
3007 softime 6565 $message .= "<span class=\"label label-important\" ";
3008 nmeucci 7085 $message .= "title=\""._("Au moins un dossier d'infraction en cours concerne les références cadastrales du dossier courant.")."\">";
3009 softime 6565 $message .= _("IN");
3010     $message .= "</span>";
3011     }
3012 softime 8989 $form->setVal("enjeu_ctx", $message);
3013 softime 6565 }
3014 softime 8989 } elseif ($affichage_form === "CTX RE") {
3015 softime 6565 // Récupération des demandeurs liés au dossier
3016 softime 8989 $this->listeDemandeur("dossier", $this->getVal("dossier"));
3017 softime 6565 //
3018 softime 8989 $requerants = "";
3019     if ($this->getVal("requerants") != "") {
3020     $requerants = $this->getVal("requerants");
3021     if (isset($this->valIdDemandeur["requerant"]) === true
3022     && count($this->valIdDemandeur["requerant"]) > 0) {
3023     //
3024     $requerants .= " "._("et autres");
3025 softime 6565 }
3026     }
3027 softime 8989 $form->setVal("requerants", $requerants);
3028 softime 6565 //
3029 softime 8989 $dossier_petitionnaires = "";
3030     if ($this->getVal("dossier_petitionnaire") != "") {
3031     $dossier_petitionnaires = $this->getVal("dossier_petitionnaire");
3032 softime 6565 }
3033 softime 8989 if (isset($this->valIdDemandeur["petitionnaire"]) === true
3034     && count($this->valIdDemandeur["petitionnaire"]) > 0) {
3035     //
3036     $dossier_petitionnaires .= " "._("et autres");
3037 softime 6565 }
3038 softime 8989 $form->setVal("dossier_petitionnaires", $dossier_petitionnaires);
3039     } elseif ($affichage_form === "CTX IN") {
3040 softime 6565 // Récupération des demandeurs liés au dossier
3041 softime 8989 $this->listeDemandeur("dossier", $this->getVal("dossier"));
3042 softime 6565 //
3043 softime 8989 $contrevenants = "";
3044     if ($this->getVal("contrevenants") != "") {
3045     $contrevenants = $this->getVal("contrevenants");
3046     if (isset($this->valIdDemandeur["contrevenant"]) === true
3047     && count($this->valIdDemandeur["contrevenant"]) > 0) {
3048     //
3049     $contrevenants .= " "._("et autres");
3050 softime 6565 }
3051     }
3052 softime 8989 $form->setVal("contrevenants", $contrevenants);
3053     } elseif ($affichage_form === "DPC") {
3054 softime 7067 // Récupération des demandeurs liés au dossier
3055 softime 8989 $this->listeDemandeur("dossier", $this->getVal("dossier"));
3056 softime 7067 //
3057 softime 8989 $bailleurs = "";
3058     if ($this->getVal("bailleurs") != "") {
3059     $bailleurs = $this->getVal("bailleurs");
3060     if (isset($this->valIdDemandeur["bailleur"]) === true
3061     && count($this->valIdDemandeur["bailleur"]) > 0) {
3062     //
3063     $bailleurs .= " "._("et autres");
3064 softime 7067 }
3065     }
3066 softime 8989 $form->setVal("bailleurs", $bailleurs);
3067 softime 7067 }
3068 softime 8989 //
3069 softime 6565 if ($validation == 0) {
3070 softime 8989 if ($maj == 0) {
3071     $form->setVal("annee", date("y"));
3072     $form->setVal("date_demande", date("Y-m-d"));
3073     $form->setVal("date_depot", date("Y-m-d"));
3074     $form->setVal("accord_tacite", "Non");
3075     $form->setVal("etat", "initialiser");
3076 mbroquet 3730 }
3077     }
3078     }
3079    
3080     /**
3081     * getGeolocalisationLink retourne le code HTML affichant l'icone du globe, ainsi que
3082     * les coordonnées du centroide du dossier, le tout étant un lien vers le SIG.
3083     *
3084     * @return string Lien vers le SIG
3085     */
3086     function getGeolocalisationLink() {
3087     //
3088     $link = "<a id='action-form-localiser'".
3089 softime 7996 " target='_SIG' href='".OM_ROUTE_FORM."&obj=dossier_instruction&action=140&idx=".$this->getVal("dossier")."'>".
3090 mbroquet 3730 "<span class='om-icon om-icon-16 om-icon-fix sig-16' title='Localiser'>Localiser</span> ".
3091     $this->getVal('geom').
3092     " </a>";
3093     return $link;
3094     }
3095    
3096 softime 8989 /**
3097     * SETTER_FORM - setSelect.
3098     *
3099     * @return void
3100     */
3101     function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
3102 mbroquet 3730 // XXX Commenté pour patcher le problème de montée en charge de la base
3103     // de données en cas de reprise de données d'un gros volume de dossier
3104     // d'instruction
3105 softime 8989 // parent::setSelect($form, $maj);
3106 mbroquet 3730 // om_collectivite
3107 softime 8989 $this->init_select(
3108     $form,
3109     $this->f->db,
3110     $maj,
3111     null,
3112     "om_collectivite",
3113     $this->get_var_sql_forminc__sql("om_collectivite"),
3114     $this->get_var_sql_forminc__sql("om_collectivite_by_id"),
3115     false
3116     );
3117 mbroquet 3730
3118     /*
3119     * Pour chaque init_select d'un select non modifiable on teste
3120     * si l'on est en mode modifier : si c'est le cas alors on initialise le
3121     * select en mode consulter (qui n'affiche rien s'il n'y a aucune valeur).
3122     */
3123    
3124     $collectivite_idx = $this->getVal("om_collectivite");
3125 softime 6565 $affichage_form_dat = "";
3126 mbroquet 3730 // Si recherche avancée om_collectivite = collectivité utilisateur
3127 softime 8989 if ($maj == 999) {
3128 mbroquet 3730 $collectivite_idx = $this->f->getParameter("om_collectivite_idx");
3129 softime 6565 } else {
3130     $affichage_form_dat = $this->get_type_affichage_formulaire();
3131 mbroquet 3730 }
3132 softime 6565 // Définition de la qualité et de la traduction de l'instructeur
3133     switch ($affichage_form_dat) {
3134 softime 7067 case 'DPC':
3135 softime 6565 case 'ADS':
3136     $affichage_instr = "AND instructeur_qualite.code = 'instr'";
3137     $lib_instructeur = _("l'instructeur");
3138     break;
3139     case 'CTX RE':
3140     case 'CTX IN':
3141     $affichage_instr = "AND instructeur_qualite.code = 'juri'";
3142     $lib_instructeur = _('le juriste');
3143     break;
3144     default:
3145     $affichage_instr = "";
3146     $lib_instructeur = _("l'instructeur");
3147     break;
3148     }
3149 mbroquet 3730
3150     // instructeur
3151     // on recupère les services des multicollectivités et de celle du DI
3152 softime 8989 if ($this->f->getParameter('option_afficher_division')==='true') {
3153 mbroquet 3730 // instructeur
3154 softime 8989 $sql_instructeur_div_by_di = str_replace(
3155     '<collectivite_di>',
3156     $collectivite_idx,
3157     $this->get_var_sql_forminc__sql("instructeur_div_by_di")
3158     );
3159     $sql_instructeur_div_by_di = str_replace(
3160     '<instructeur_qualite>',
3161     $affichage_instr,
3162     $sql_instructeur_div_by_di
3163     );
3164     $this->init_select(
3165     $form,
3166     $this->f->db,
3167     $maj,
3168     null,
3169     "instructeur",
3170     $sql_instructeur_div_by_di,
3171     $this->get_var_sql_forminc__sql("instructeur_div_by_id"),
3172     true,
3173     false,
3174     $lib_instructeur
3175     );
3176     // instructeur_2
3177     $sql_instructeur_2_div_by_di = str_replace(
3178     '<collectivite_di>',
3179     $collectivite_idx,
3180     $this->get_var_sql_forminc__sql("instructeur_2_div_by_di")
3181     );
3182     $this->init_select(
3183     $form,
3184     $this->f->db,
3185     $maj,
3186     null,
3187     "instructeur_2",
3188     $sql_instructeur_2_div_by_di,
3189     $this->get_var_sql_forminc__sql("instructeur_2_div_by_id"),
3190     true,
3191     false,
3192     _('le technicien')
3193     );
3194 mbroquet 3730 } else {
3195 softime 8989 $sql_instructeur_by_di = str_replace(
3196     '<collectivite_di>',
3197     $collectivite_idx,
3198     $this->get_var_sql_forminc__sql("instructeur_by_di")
3199     );
3200     $sql_instructeur_by_di = str_replace(
3201     '<instructeur_qualite>',
3202     $affichage_instr,
3203     $sql_instructeur_by_di
3204     );
3205     $this->init_select(
3206     $form,
3207     $this->f->db,
3208     $maj,
3209     null,
3210     "instructeur",
3211     $sql_instructeur_by_di,
3212     $this->get_var_sql_forminc__sql("instructeur_by_id"),
3213     true,
3214     false,
3215     $lib_instructeur
3216     );
3217     $sql_instructeur_2_by_di = str_replace(
3218     '<collectivite_di>',
3219     $collectivite_idx,
3220     $this->get_var_sql_forminc__sql("instructeur_2_by_di")
3221     );
3222     $this->init_select(
3223     $form,
3224     $this->f->db,
3225     $maj,
3226     null,
3227     "instructeur_2",
3228     $sql_instructeur_2_by_di,
3229     $this->get_var_sql_forminc__sql("instructeur_2_by_id"),
3230     true,
3231     false,
3232     _('le technicien')
3233     );
3234 mbroquet 3730 }
3235 softime 6565
3236 mbroquet 3730 // etat
3237     if ($maj == 1) {
3238 softime 8989 $this->init_select(
3239     $form,
3240     $this->f->db,
3241     3,
3242     null,
3243     "etat",
3244     $this->get_var_sql_forminc__sql("etat"),
3245     $this->get_var_sql_forminc__sql("etat_by_id"),
3246     false
3247     );
3248 mbroquet 3730 } else {
3249 softime 8989 $this->init_select(
3250     $form,
3251     $this->f->db,
3252     $maj,
3253     null,
3254     "etat",
3255     $this->get_var_sql_forminc__sql("etat"),
3256     $this->get_var_sql_forminc__sql("etat_by_id"),
3257     false
3258     );
3259 mbroquet 3730 }
3260    
3261     // dossier_instruction_type
3262 softime 8989 $this->init_select(
3263     $form,
3264     $this->f->db,
3265     $maj,
3266     null,
3267     "dossier_instruction_type",
3268     $this->get_var_sql_forminc__sql("dossier_instruction_type"),
3269     $this->get_var_sql_forminc__sql("dossier_instruction_type_by_id"),
3270     false
3271     );
3272 mbroquet 3730
3273     // division
3274 softime 8989 $sql_division_by_di = str_replace(
3275     '<collectivite_di>',
3276     $collectivite_idx,
3277     $this->get_var_sql_forminc__sql("division_by_di")
3278     );
3279     $this->init_select(
3280     $form,
3281     $this->f->db,
3282     $maj,
3283     null,
3284     "division",
3285     $sql_division_by_di,
3286     $this->get_var_sql_forminc__sql("division_by_id"),
3287     true
3288     );
3289 mbroquet 3730
3290     // autorite_competente
3291 softime 8989 $this->init_select(
3292     $form,
3293     $this->f->db,
3294     $maj,
3295     null,
3296     "autorite_competente",
3297     $this->get_var_sql_forminc__sql("autorite_competente"),
3298     $this->get_var_sql_forminc__sql("autorite_competente_by_id"),
3299     false
3300     );
3301 mbroquet 3730
3302     // avis_decision
3303     if ($maj == 1) {
3304 softime 8989 $this->init_select(
3305     $form,
3306     $this->f->db,
3307     3,
3308     null,
3309     "avis_decision",
3310     $this->get_var_sql_forminc__sql("avis_decision"),
3311     $this->get_var_sql_forminc__sql("avis_decision_by_id"),
3312     false
3313     );
3314 mbroquet 3730 } else {
3315 softime 8989 $this->init_select(
3316     $form,
3317     $this->f->db,
3318     $maj,
3319     null,
3320     "avis_decision",
3321     $this->get_var_sql_forminc__sql("avis_decision"),
3322     $this->get_var_sql_forminc__sql("avis_decision_by_id"),
3323     false
3324     );
3325 mbroquet 3730 }
3326 softime 7366
3327 softime 6565 // autorisation_contestee
3328 softime 7366 if ($affichage_form_dat === 'CTX RE'
3329     && ($maj == 1 || $maj == 3)) {
3330     // À exécuter seulement en mode modifier ou consulter des recours
3331     // pour éviter le ralentissement de l'affichage des listings des DI
3332 softime 8989 $this->init_select(
3333     $form,
3334     $this->f->db,
3335     $maj,
3336     null,
3337     "autorisation_contestee",
3338     $this->get_var_sql_forminc__sql("autorisation_contestee"),
3339     $this->get_var_sql_forminc__sql("autorisation_contestee_by_id"),
3340     false
3341     );
3342 softime 6565 }
3343 mbroquet 3730
3344     // evenement_suivant_tacite
3345 softime 8989 $this->init_select(
3346     $form,
3347     $this->f->db,
3348     $maj,
3349     null,
3350     "evenement_suivant_tacite",
3351     $this->get_var_sql_forminc__sql("evenement_suivant_tacite"),
3352     $this->get_var_sql_forminc__sql("evenement_suivant_tacite_by_id"),
3353     false
3354     );
3355 mbroquet 3730
3356     // evenement_suivant_tacite_incompletude
3357 softime 8989 $this->init_select(
3358     $form,
3359     $this->f->db,
3360     $maj,
3361     null,
3362     "evenement_suivant_tacite_incompletude",
3363     $this->get_var_sql_forminc__sql("evenement_suivant_tacite_incompletude"),
3364     $this->get_var_sql_forminc__sql("evenement_suivant_tacite_incompletude_by_id"),
3365     false
3366     );
3367 mbroquet 3730
3368     // Ajout, modification et recherche avancée
3369 softime 8989 if ($maj == 0 || $maj == 1 || $maj == 999) {
3370 mbroquet 3730 // accord tacite
3371     $contenu=array();
3372     $contenu[0]=array('Non','Oui');
3373     $contenu[1]=array('Non','Oui');
3374 softime 8989 $form->setSelect("accord_tacite", $contenu);
3375 mbroquet 3730 // geom *** a voir
3376 softime 8989 if ($maj == 1) { //modification
3377 mbroquet 3730 $contenu=array();
3378 softime 8989 $contenu[0]=array("dossier", $this->getParameter("idx"));
3379     $form->setSelect('geom', $contenu);
3380 mbroquet 3730 }
3381 softime 6565 // arrondissement recherche avancée
3382 softime 8989 $this->init_select(
3383     $form,
3384     $this->f->db,
3385     $maj,
3386     null,
3387     "arrondissement",
3388     $this->get_var_sql_forminc__sql("arrondissement"),
3389     $this->get_var_sql_forminc__sql("arrondissement_by_id"),
3390     false
3391     );
3392 softime 6565 // dossier_autorisation_type_detaille recherche avancée
3393 softime 8989 $this->init_select(
3394     $form,
3395     $this->f->db,
3396     $maj,
3397     null,
3398     "dossier_autorisation_type_detaille",
3399     $this->get_var_sql_forminc__sql("dossier_autorisation_type_detaille"),
3400     $this->get_var_sql_forminc__sql("dossier_autorisation_type_detaille_by_id"),
3401     false
3402     );
3403 mbroquet 3730 }
3404    
3405     // Ce formulaire n'est pas accessible en ajout ni en recherche avancée
3406     // mais dans le cas où il le serait, rien ne doit être fait concernant
3407 softime 6929 // les taxes
3408 mbroquet 3730 if ($maj != 0 && $maj != 999) {
3409 softime 6929 // Instance du parmétrage des taxes
3410 mbroquet 3730 $inst_taxe_amenagement = $this->get_inst_taxe_amenagement();
3411     // Si la colletivité à un paramétrage pour la taxe d'aménagement
3412 softime 6929 if ($inst_taxe_amenagement !== null) {
3413 mbroquet 3730 // Choix du secteur pour part communale
3414     $contenu = array();
3415     $contenu[0][0] = "";
3416     $contenu[1][0] = _('choisir')."&nbsp;"._("tax_secteur");
3417     // Il y a 20 secteurs maximum dans une commune de France
3418     for ($i=1; $i < 21; $i++) {
3419     // Valeur du secteur
3420     $value = $inst_taxe_amenagement->getVal('tx_comm_secteur_'.$i);
3421     //
3422 softime 6929 if ($value !== null && $value !== '') {
3423 mbroquet 3730 //
3424     $contenu[0][$i] = $i;
3425     $contenu[1][$i] = sprintf(_('Secteur %s'), $i);
3426     }
3427     }
3428     //
3429     $form->setSelect("tax_secteur", $contenu);
3430     }
3431     }
3432     }
3433    
3434 softime 8989 /**
3435     * SETTER_FORM - setLib.
3436     *
3437     * @return void
3438     */
3439     function setLib(&$form, $maj) {
3440     parent::setLib($form, $maj);
3441     //
3442 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
3443     if ($affichage_form === 'ADS') {
3444     $form->setLib('date_decision', _("date de la decision"));
3445     $form->setLib('date_limite', _("limite d'instruction"));
3446     }
3447     if ($affichage_form === 'CTX IN') {
3448     $form->setLib('avis_decision', _("Décision"));
3449     $form->setLib('date_cloture_instruction', _("Date de clôture d'instruction"));
3450     $form->setLib('date_decision', _("Date de décision"));
3451     $form->setLib('date_depot', _("Date de réception"));
3452     $form->setLib('date_limite', _("Tacicité"));
3453     $form->setLib('instructeur',_('Juriste'));
3454     }
3455     if ($affichage_form === 'CTX RE') {
3456     $form->setLib('autorisation_contestee', _("Autorisation contestée"));
3457     $form->setLib('avis_decision', _("Décision"));
3458     $form->setLib('date_cloture_instruction', _("Date de clôture d'instruction"));
3459     $form->setLib('date_decision', _("Date de décision"));
3460     $form->setLib('date_depot', _("Date de recours"));
3461     $form->setLib('date_limite', _("Tacicité"));
3462     $form->setLib('instructeur',_('Juriste'));
3463     }
3464 softime 7067 if ($affichage_form === 'DPC') {
3465     //
3466     }
3467 softime 6565 $form->setLib('accord_tacite',_("decision tacite"));
3468     $form->setLib('autorite_competente',_('competence'));
3469     $form->setLib('cle_acces_citoyen', _("cle_acces_citoyen"));
3470     $form->setLib('date_ait', _("Date d'AIT"));
3471     $form->setLib('date_audience', _("Date d'audience"));
3472     $form->setLib('date_complet', _("completude"));
3473     $form->setLib('date_contradictoire', _("Date de contradictoire"));
3474     $form->setLib('date_dernier_depot', _("dernier depot"));
3475     $form->setLib('date_derniere_visite', _("Date de dernière visite"));
3476     $form->setLib('date_limite_incompletude', _("limite d'instruction"));
3477     $form->setLib('date_premiere_visite', _("Date de 1ère visite"));
3478     $form->setLib('date_transmission_parquet', _('Date de transmission au Parquet'));
3479     $form->setLib('date_validite', _("fin de validite le"));
3480     $form->setLib('delai', _("delai (mois)"));
3481     $form->setLib('delai',_("delai d'instruction"));
3482     $form->setLib('description_projet',_('description du projet'));
3483     $form->setLib('dossier_arrondissement', _("Arrondissement"));
3484 mbroquet 3730 $form->setLib('dossier_autorisation_libelle',_('dossier_autorisation_libelle'));
3485 softime 6565 $form->setLib('dossier_autorisation_type_detaille', _("Type"));
3486     $form->setLib('contrevenants', _("Contrevenant(s)"));
3487 mbroquet 3730 $form->setLib('dossier_instruction_type',_('type de dossier'));
3488 softime 6565 $form->setLib('dossier_petitionnaire',_('demandeur'));
3489     $form->setLib('dossier_petitionnaires', _("Pétitionnaire(s)"));
3490     $form->setLib('requerants', _("Requérant(s)"));
3491     $form->setLib('dt_ctx_infraction', _("Infraction"));
3492     $form->setLib('dt_ctx_regularisable', _("Régularisable"));
3493     $form->setLib('dt_ctx_synthese_anr', _("Synthèse des ANR"));
3494     $form->setLib('dt_ctx_synthese_nti', _("Synthèse des NTI"));
3495 softime 8477 $form->setLib('ctx_reference_dsj', _("ctx_reference_dsj"));
3496     $form->setLib('ctx_reference_sagace', _("ctx_reference_sagace"));
3497 softime 6565 $form->setLib('enjeu_ctx', _("contentieux"));
3498     $form->setLib('enjeu_erp', _("ERP"));
3499     $form->setLib('enjeu_urba', _("urbanisme"));
3500     $form->setLib('erp', _("ERP"));
3501 mbroquet 3730 $form->setLib('geom',_('geolocalisaion'));
3502 softime 6565 $form->setLib('instructeur_2', _('Technicien'));
3503 mbroquet 3730 $form->setLib('numero_versement_archive', _("numero"));
3504 softime 7067 $form->setLib('bailleur', _("Bailleur(s)"));
3505     $form->setLib('terrain', _("Localisation"));
3506 softime 6565 }
3507 mbroquet 3730
3508     function setOnchange(&$form,$maj){
3509     parent::setOnchange($form,$maj);
3510     // mise en majuscule
3511     $form->setOnchange("demandeur_nom","this.value=this.value.toUpperCase()");
3512     $form->setOnchange("demandeur_societe","this.value=this.value.toUpperCase()");
3513     $form->setOnchange("delegataire_nom","this.value=this.value.toUpperCase()");
3514     $form->setOnchange("delegataire_societe","this.value=this.value.toUpperCase()");
3515     $form->setOnchange("architecte_nom","this.value=this.value.toUpperCase()");
3516     $form->setOnchange("terrain_adresse","this.value=this.value.toUpperCase()");
3517     $form->setOnchange('terrain_surface','VerifNumdec(this)');
3518     $form->setOnchange('tax_mtn_part_commu', 'VerifFloat(this, 0)');
3519     $form->setOnchange('tax_mtn_part_depart', 'VerifFloat(this, 0)');
3520     $form->setOnchange('tax_mtn_part_reg', 'VerifFloat(this, 0)');
3521     $form->setOnchange('tax_mtn_total', 'VerifFloat(this, 0)');
3522 softime 6929 $form->setOnchange('tax_mtn_rap', 'VerifFloat(this, 0)');
3523     $form->setOnchange('tax_mtn_part_commu_sans_exo', 'VerifFloat(this, 0)');
3524     $form->setOnchange('tax_mtn_part_depart_sans_exo', 'VerifFloat(this, 0)');
3525     $form->setOnchange('tax_mtn_part_reg_sans_exo', 'VerifFloat(this, 0)');
3526     $form->setOnchange('tax_mtn_total_sans_exo', 'VerifFloat(this, 0)');
3527     $form->setOnchange('tax_mtn_rap_sans_exo', 'VerifFloat(this, 0)');
3528 mbroquet 3730 }
3529    
3530     function setLayout(&$form, $maj) {
3531    
3532 softime 8477 // Récupère le CRUD
3533     $crud = $this->get_action_crud($this->getParameter("maj"));
3534    
3535     // Il n'y a pas d'affichage spécifique dans le cas d'une suppression
3536     if ($crud === 'delete') {
3537     return;
3538     }
3539    
3540 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
3541 softime 7067 if ($affichage_form === 'ADS' || $affichage_form === 'DPC') {
3542 softime 6565 // En-tête
3543     $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
3544 mbroquet 3730
3545 softime 6565 // Col1 : Fieldset "Dossier d'Instruction"
3546     $form->setBloc('om_collectivite', 'D', '', 'col_9');
3547 mbroquet 3730
3548 softime 6565 $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
3549     $form->setFieldset('geom', 'F');
3550    
3551 mbroquet 3730
3552 softime 6565 $form->setBloc('geom', 'F');
3553    
3554     // Col2 : 3 fieldsets
3555     $form->setBloc('enjeu_urba', 'D', '', 'col_3');
3556 mbroquet 3730
3557 softime 6565 // Fieldset "Enjeu"
3558     $form->setFieldset('enjeu_urba', 'D', _("Enjeu"));
3559     $form->setFieldset('enjeu_ctx', 'F');
3560     // Fieldset "Qualification"
3561     $form->setFieldset('erp', 'D', _("Qualification"));
3562     $form->setFieldset('a_qualifier', 'F');
3563     // Fieldset "Archive"
3564     $form->setFieldset('numero_versement_archive', 'D', _("Archive"));
3565     $form->setFieldset('date_demande', 'F');
3566    
3567     $form->setBloc('date_demande', 'F');
3568 mbroquet 3730 $form->setBloc('date_demande', 'F');
3569    
3570 softime 6565 // Fieldset "Instruction"
3571     $form->setBloc('date_depot', 'D', '', 'col_12');
3572     $form->setFieldset('date_depot', 'D', _('Instruction'), 'col_12');
3573 mbroquet 3730
3574 softime 6565 // Fieldset "Suivi"
3575     $form->setBloc('date_depot', 'D', '', 'col_12');
3576    
3577     $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
3578     // Col 1
3579     $form->setBloc('date_depot', 'D', '', 'col_6');
3580     $form->setBloc('date_depot', 'D');
3581     $form->setBloc('date_dernier_depot', 'F');
3582     $form->setBloc('date_limite', 'D', '', 'interligne');
3583     $form->setBloc('date_limite_incompletude', 'F');
3584 mbroquet 3730 $form->setBloc('date_limite_incompletude', 'F');
3585 softime 6565 // Col 2
3586     $form->setBloc('etat', 'D', '', 'col_6');
3587     $form->setBloc('etat', 'D');
3588     $form->setBloc('etat', 'F');
3589     $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
3590     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
3591 mbroquet 3730 $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
3592 softime 6565 $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
3593    
3594     $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
3595 mbroquet 3730
3596 softime 6565 // Bloc 2 fieldsets
3597     $form->setBloc('date_decision', 'D', '', 'col_12');
3598 mbroquet 3730
3599 softime 6565 // Col 1 Fieldset "Décision"
3600     $form->setFieldset('date_decision', 'D', _('Decision'), 'col_6');
3601     $form->setFieldset('avis_decision','F','');
3602     // Col 2 Fieldset "Validité de l'autorisation"
3603     $form->setFieldset('date_validite', 'D', _("Validite de l'autorisation"), 'col_6');
3604     $form->setFieldset('date_validite','F','');
3605 mbroquet 3730
3606 softime 6565 $form->setBloc('date_validite', 'F'); // Fin bloc 2 fieldsets
3607 mbroquet 3730
3608 softime 6565 $form->setFieldset('date_conformite','F','');
3609     $form->setBloc('date_conformite', 'F'); // Fin Instruction
3610 mbroquet 3730
3611 softime 6929 // Fieldset "Simulation des taxes"
3612 softime 6565 $form->setBloc('tax_secteur', 'D', '', 'col_12');
3613 softime 6929 $form->setFieldset('tax_secteur', 'D', _("Simulation des taxes"), 'startClosed');
3614     //
3615     $form->setBloc('tax_secteur', 'D', '', 'col_12');
3616     $form->setFieldset('tax_secteur', 'D', _("Taxe d'aménagement"), 'collapsible');
3617     $form->setFieldset('tax_mtn_total_sans_exo', 'F', '');
3618     $form->setBloc('tax_mtn_total_sans_exo', 'F');
3619     //
3620     $form->setBloc('tax_mtn_rap', 'D', '', 'col_12');
3621     $form->setFieldset('tax_mtn_rap', 'D', _("Redevance d'archéologie préventive"), 'collapsible');
3622     $form->setFieldset('tax_mtn_rap_sans_exo', 'F', '');
3623     $form->setBloc('tax_mtn_rap_sans_exo', 'F');
3624     //
3625     $form->setFieldset('tax_mtn_rap_sans_exo', 'F', '');
3626     $form->setBloc('tax_mtn_rap_sans_exo', 'F');
3627 mbroquet 3730
3628 softime 7067 // Fieldset "Localisation"
3629 softime 6565 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
3630 mbroquet 3730
3631 softime 7067 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
3632 softime 6565 // Col 1
3633     $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
3634     $form->setBloc('terrain_references_cadastrales', 'F');
3635     // Col 2
3636     $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
3637     $form->setBloc('terrain_superficie', 'F');
3638 mbroquet 3730
3639 softime 6565 $form->setFieldset('terrain_superficie', 'F', '');
3640 mbroquet 3730
3641 softime 6565 $form->setBloc('terrain_superficie', 'F');
3642     }
3643     // RECOURS
3644     if ($affichage_form === 'CTX RE') {
3645     // Fieldset "Dossier d'Instruction"
3646     $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
3647     $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
3648     $form->setFieldset('date_demande', 'F');
3649     $form->setBloc('date_demande', 'F');
3650 mbroquet 3730
3651 softime 6565 // Fieldset "Instruction"
3652     $form->setBloc('date_depot', 'D', '', 'col_12');
3653     $form->setFieldset('date_depot', 'D', _('Instruction'), 'col_12');
3654 mbroquet 3730
3655 softime 6565 // Fieldset "Suivi"
3656     $form->setBloc('date_depot', 'D', '', 'col_12');
3657    
3658     $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
3659 mbroquet 3730 // Col 1
3660 softime 6565 $form->setBloc('date_depot', 'D', '', 'col_6');
3661     // $form->setBloc('date_depot', 'D');
3662     // $form->setBloc('date_dernier_depot', 'F');
3663     // $form->setBloc('date_limite', 'D', '');
3664     // $form->setBloc('date_limite_incompletude', 'F');
3665     $form->setBloc('date_cloture_instruction', 'F');
3666 mbroquet 3730 // Col 2
3667 softime 6565 $form->setBloc('etat', 'D', '', 'col_6');
3668     $form->setBloc('etat', 'D');
3669     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
3670     // $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
3671     // $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
3672     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
3673     $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
3674    
3675     $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
3676 mbroquet 3730
3677 softime 6565 // Bloc 2 fieldsets
3678     $form->setBloc('date_decision', 'D', '', 'col_12');
3679 mbroquet 3730
3680 softime 6565 // Col 1 Fieldset "Décision"
3681     $form->setFieldset('date_decision', 'D', _('Decision'), 'col_12');
3682     $form->setFieldset('avis_decision','F','');
3683     // Col 2 Fieldset "Validité de l'autorisation"
3684    
3685     $form->setBloc('date_validite', 'F'); // Fin bloc 2 fieldsets
3686    
3687     $form->setFieldset('date_conformite','F','');
3688     $form->setBloc('date_conformite', 'F'); // Fin Instruction
3689    
3690 softime 7067 // Fieldset "Localisation"
3691 softime 6565 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
3692    
3693 softime 7067 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
3694 softime 6565 // Col 1
3695     $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
3696     $form->setBloc('terrain_references_cadastrales', 'F');
3697     // Col 2
3698     $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
3699     $form->setBloc('terrain_superficie', 'F');
3700    
3701     $form->setFieldset('terrain_superficie', 'F', '');
3702    
3703     $form->setBloc('terrain_superficie', 'F');
3704     }
3705    
3706     // INFRACTION
3707     if ($affichage_form === 'CTX IN') {
3708    
3709     // Fieldset "Dossier d'Instruction"
3710     $form->setBloc('om_collectivite', 'D', '', ($maj == 3 ? 'col_9':'col_12'));
3711     $form->setFieldset('om_collectivite', 'D', _("Dossier d'instruction"));
3712     $form->setFieldset('date_demande', 'F');
3713     $form->setBloc('date_demande', 'F');
3714    
3715     // Fieldset "Instruction"
3716     $form->setBloc('date_depot', 'D', '', 'col_12');
3717     $form->setFieldset('date_depot', 'D', _('Instruction'), 'col_12');
3718     // Fieldset "Suivi"
3719     $form->setBloc('date_depot', 'D', '', 'col_12');
3720     $form->setFieldset('date_depot', 'D', _('Suivi'), 'col_12');
3721     // Col 1
3722     $form->setBloc('date_depot', 'D', '', 'col_6');
3723     $form->setBloc('date_depot', 'D');
3724     $form->setBloc('date_dernier_depot', 'F');
3725     $form->setBloc('date_limite', 'D', '', 'interligne');
3726     $form->setBloc('date_limite_incompletude', 'F');
3727     $form->setBloc('date_limite_incompletude', 'F');
3728     // Col 2
3729     $form->setBloc('etat', 'D', '', 'col_6');
3730     $form->setBloc('etat', 'D');
3731     $form->setBloc('etat', 'F');
3732     $form->setBloc('evenement_suivant_tacite', 'D', '', 'evmt_suivant_tacite_di');
3733     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
3734     $form->setBloc('evenement_suivant_tacite_incompletude', 'F');
3735     $form->setFieldset('evenement_suivant_tacite_incompletude','F','');
3736     $form->setBloc('evenement_suivant_tacite_incompletude', 'F'); // Fin Suivi
3737     // Fieldset "Décision"
3738     $form->setFieldset('date_decision', 'D', _('Decision'), 'col_12');
3739     $form->setFieldset('date_conformite','F',''); // Fin Décision
3740     $form->setFieldset('date_conformite','F','');
3741     $form->setBloc('date_conformite', 'F'); // Fin Instruction
3742    
3743 softime 7067 // Fieldset "Localisation"
3744 softime 6565 $form->setBloc('terrain_adresse_voie_numero', 'D', '', 'col_12');
3745 softime 7067 $form->setFieldset('terrain_adresse_voie_numero', 'D', _('Localisation'), 'startClosed');
3746 softime 6565 // Col 1
3747     $form->setBloc('terrain_adresse_voie_numero', 'D', "", "col_6");
3748     $form->setBloc('terrain_references_cadastrales', 'F');
3749     // Col 2
3750     $form->setBloc('terrain_adresse_voie', 'D', "", "col_6");
3751     $form->setBloc('terrain_superficie', 'F');
3752     $form->setFieldset('terrain_superficie', 'F', '');
3753     $form->setBloc('terrain_superficie', 'F');
3754    
3755     // Fieldset "Demandeurs"
3756     // → cf. formSpecificContent()
3757     }
3758 mbroquet 3730 }
3759    
3760     /**
3761     * Permet de retourner si le dossier est incomplet notifié
3762     *
3763     * @return boolean true si incomplet notifié
3764     */
3765     function is_incomplet_notifie() {
3766     // Si le dossier est défini en tant qu'incomplet notifie
3767     if($this->getVal('incomplet_notifie') == 't' AND
3768     $this->getVal('incompletude') == 't') {
3769     return true;
3770     }
3771     return false;
3772     }
3773    
3774 softime 6929
3775 fmichon 4708 /**
3776 softime 7366 * Vérifie que le dossier d'instruction en cours ne soit pas instruit.
3777     * Ne sont pas compté comme instruit les dossiers n'ayant que des événements
3778     * d'instruction de type 'affichage'.
3779 softime 6929 *
3780     * @return boolean
3781     */
3782 softime 7366 function has_only_recepisse() {
3783 softime 6929
3784 softime 7366 // Récupère la liste des instructions du dossier
3785 softime 6929 $list_instructions = $this->get_list_instructions(true);
3786    
3787 softime 7366 // Si le dossier a pour seule instruction le récépissé de la demande
3788     if (count($list_instructions) === 1
3789     && $list_instructions[0] === $this->get_demande_instruction_recepisse()) {
3790 softime 6929 //
3791 softime 7366 return true;
3792 softime 6929 }
3793    
3794     //
3795 softime 7366 return false;
3796 softime 6929 }
3797    
3798    
3799     /**
3800 fmichon 4708 * TRIGGER - triggerajouterapres.
3801     *
3802     * - Interface avec le référentiel ERP [108]
3803     * - Gestion des données techniques liées
3804     * - Mise à jour du DA
3805     * - Gestion des références cadastrales / parcelles liées
3806     *
3807     * @return boolean
3808     */
3809 softime 8989 function triggerajouterapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
3810     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
3811 mbroquet 3730
3812 fmichon 4708 /**
3813     * Interface avec le référentiel ERP.
3814     *
3815     * (WS->ERP)[108] Dépôt de dossier DAT -> AT
3816     * Déclencheur :
3817     * - L'option ERP est activée
3818     * - Validation du formulaire d'ajout d'une demande de nouveau dossier
3819     * de type AT
3820     */
3821     //
3822 softime 8989 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
3823 fmichon 4708 && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__at')) {
3824     //
3825     $infos = array(
3826     "dossier_instruction" => $this->valF['dossier'],
3827     );
3828     //
3829     $ret = $this->f->send_message_to_referentiel_erp(108, $infos);
3830     if ($ret !== true) {
3831     $this->cleanMessage();
3832     $this->addToMessage(_("Une erreur s'est produite lors de la notification (108) du référentiel ERP. Contactez votre administrateur."));
3833     return false;
3834 mbroquet 3730 }
3835 fmichon 4708 $this->addToMessage(_("Notification (108) du référentiel ERP OK."));
3836     }
3837    
3838     /**
3839     * Gestion des données techniques liées.
3840     */
3841     // On ajoute les données techniques
3842 softime 8989 if ($this->ajoutDonneesTechniquesDI($id, $val) === false) {
3843 mbroquet 3730 //
3844 fmichon 4708 $this->addToMessage(_("Erreur lors de l'enregistrement du dossier.")." "._("Contactez votre administrateur."));
3845 mbroquet 3730 $this->correct = false;
3846     return false;
3847     }
3848    
3849 fmichon 4708 /**
3850     * Mise à jour des données du DA.
3851     */
3852     //
3853     $inst_da = $this->get_inst_dossier_autorisation($this->valF["dossier_autorisation"]);
3854     //
3855 softime 8640 $params = array(
3856     'di_id' => $this->valF[$this->clePrimaire],
3857     );
3858     if ($inst_da->majDossierAutorisation($params) === false) {
3859 fmichon 4708 //
3860     $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
3861     $this->correct = false;
3862     return false;
3863     }
3864    
3865     /**
3866     * Gestion des références cadastrales / parcelles liées.
3867     */
3868 mbroquet 3730 // Si le champ des références cadastrales n'est pas vide
3869     if ($this->valF['terrain_references_cadastrales'] != '') {
3870     // Ajout des parcelles dans la table dossier_parcelle
3871 softime 8989 $this->ajouter_dossier_parcelle(
3872     $this->valF['dossier'],
3873     $this->valF['terrain_references_cadastrales']
3874     );
3875 softime 6565 }
3876 mbroquet 3730
3877 softime 6565 /**
3878     * Notification de l'éventuelle autorisation contestée
3879     */
3880     if ($this->valF['autorisation_contestee'] !== null) {
3881     // Instancie la classe dossier_message
3882     $dossier_message = $this->get_inst_dossier_message(']');
3883     // Ajoute le message de notification
3884     $dossier_message_val = array();
3885     $dossier_message_val['dossier'] = $this->valF['autorisation_contestee'];
3886     $dossier_message_val['type'] = _('Autorisation contestée');
3887     $dossier_message_val['emetteur'] = $this->f->get_connected_user_login_name();
3888     $dossier_message_val['login'] = $_SESSION['login'];
3889     $dossier_message_val['date_emission'] = date('Y-m-d H:i:s');
3890     $dossier_message_val['contenu'] = sprintf(_('Cette autorisation a été contestée par le recours %s.'), $this->valF['dossier']);
3891     // Si une erreur se produit lors de l'ajout
3892     if ($dossier_message->add_notification_message($dossier_message_val) !== true) {
3893     // Message d'erreur affiché à l'utilisateur
3894     $this->addToMessage(_("L'autorisation contestée n'a pas pu être notifiée du recours."));
3895     $this->correct = false;
3896     return false;
3897     }
3898 mbroquet 3730 }
3899    
3900 softime 6565 //
3901     return true;
3902 mbroquet 3730 }
3903 softime 6565
3904 mbroquet 3730 /**
3905 softime 6565 * Récupère l'instance de dossier message.
3906     *
3907     * @param string $dossier_message Identifiant du message.
3908     *
3909     * @return object
3910     */
3911     private function get_inst_dossier_message($dossier_message = null) {
3912     //
3913     return $this->get_inst_common("dossier_message", $dossier_message);
3914     }
3915    
3916     /**
3917 mbroquet 3730 * Récupère l'identifiant du quartier et d'un arrondissement d'une référence
3918     * cadastrale
3919     * @param string $reference_cadastrale
3920     *
3921     * @return array
3922     */
3923     function getQuartierArrondissement($reference_cadastrale) {
3924    
3925     $reference_cadastrale = trim($reference_cadastrale);
3926     $quartier = '';
3927    
3928     //Récupère le code impot du quartier dans la référence cadastrale
3929     for ( $i = 0 ; $i < strlen($reference_cadastrale) ; $i++ ){
3930    
3931     //Si c'est un chiffre, c'est le code quartier
3932     if (is_numeric($reference_cadastrale[$i]) ){
3933    
3934     $quartier .= $reference_cadastrale[$i];
3935     }
3936     //Sinon c'est la section
3937     else{
3938     break;
3939     }
3940     }
3941    
3942     //Si le code impôt du quartier a bien été renseigné
3943     if ( $quartier !== '' ){
3944    
3945     //Requête de récupération de l'identifiantdu quartier et de
3946     //l'arrondissement
3947     $sql = "SELECT
3948     quartier, arrondissement
3949     FROM
3950     ".DB_PREFIXE."quartier
3951     WHERE
3952     code_impots='$quartier'";
3953     $this->addToLog("getQuartierArrondissement() : db->query(\"$sql\")", VERBOSE_MODE);
3954 softime 8989 $res = $this->f->db->query($sql);
3955 mbroquet 3730 if (database::isError($res)) {
3956     die();
3957     }
3958    
3959     //Si on a un résultat
3960     if ( $res->numRows() == 1 ){
3961     //
3962     return $res->fetchRow(DB_FETCHMODE_ASSOC);
3963     }
3964     }
3965    
3966     return NULL;
3967     }
3968    
3969     /**
3970     * Récupère la section d'une référence cadastrale
3971     * @param string $reference_cadastrale
3972     *
3973     * @return string
3974     */
3975     function getSection($reference_cadastrale){
3976    
3977     $reference_cadastrale = trim($reference_cadastrale);
3978     $section = NULL;
3979    
3980     for ( $i = 0 ; $i < strlen($reference_cadastrale) ; $i++ )
3981     if ( !is_numeric($reference_cadastrale[$i]) && is_string($reference_cadastrale[$i]) && $reference_cadastrale[$i] !== ' ' )
3982     $section .= $reference_cadastrale[$i];
3983    
3984     return $section;
3985     }
3986    
3987     /*
3988     * Retourne l'intructeur correspondant le mieux à la parcelle
3989     * */
3990     /**
3991     * Récupère la section d'une référence cadastrale
3992     * @param string $quartier
3993     * @param string $arrondissement
3994     * @param string $section
3995     * @param string $dossier_autorisation
3996     *
3997     * @return array
3998     */
3999 softime 6565 function getInstructeurDivision( $quartier, $arrondissement, $section, $dossier_autorisation_type_detaille, $collectivite, $column = 'instructeur') {
4000 mbroquet 3730
4001     $quartier = ( $quartier == NULL ) ? -1 : $quartier;
4002     $arrondissement = ( $arrondissement == NULL ) ? -1 : $arrondissement;
4003     $collectivite = ( $collectivite == "" ) ? -1 : $collectivite;
4004    
4005     //Si le dossier d'autorisation a un type détaillé de dossier
4006     //d'autorisation associé
4007     if ($dossier_autorisation_type_detaille != ''
4008     && $dossier_autorisation_type_detaille != null){
4009    
4010     //Requête de récupération de l'instructeur à affecter
4011     $sql = "
4012     SELECT
4013 softime 6565 ".$column.", section, quartier, arrondissement, dossier_autorisation_type_detaille
4014 mbroquet 3730 FROM
4015     ".DB_PREFIXE."affectation_automatique l
4016     WHERE
4017     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier IS NULL AND section IS NULL AND om_collectivite IS NULL) OR
4018     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier IS NULL AND section IS NULL AND om_collectivite = $collectivite) OR
4019     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier IS NULL AND section = '$section' AND om_collectivite = $collectivite) OR
4020     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier IS NULL AND section = '$section' AND om_collectivite IS NULL) OR
4021     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier = $quartier AND section IS NULL AND om_collectivite = $collectivite) OR
4022     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier = $quartier AND section IS NULL AND om_collectivite IS NULL) OR
4023     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier = $quartier AND section = '$section' AND om_collectivite = $collectivite) OR
4024     ( dossier_autorisation_type_detaille IS NULL AND arrondissement IS NULL AND quartier = $quartier AND section = '$section' AND om_collectivite IS NULL) OR
4025     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier IS NULL AND section IS NULL AND om_collectivite = $collectivite) OR
4026     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier IS NULL AND section IS NULL AND om_collectivite IS NULL) OR
4027     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier IS NULL AND section = '$section' AND om_collectivite = $collectivite) OR
4028     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier IS NULL AND section = '$section' AND om_collectivite IS NULL) OR
4029     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier = $quartier AND section IS NULL AND om_collectivite = $collectivite) OR
4030     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier = $quartier AND section IS NULL AND om_collectivite IS NULL) OR
4031     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier = $quartier AND section = '$section' AND om_collectivite IS NULL) OR
4032     ( dossier_autorisation_type_detaille IS NULL AND arrondissement = $arrondissement AND quartier = $quartier AND section = '$section' AND om_collectivite = $collectivite) OR
4033     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier IS NULL AND section IS NULL AND om_collectivite IS NULL) OR
4034     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier IS NULL AND section IS NULL AND om_collectivite = $collectivite) OR
4035     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier IS NULL AND section = '$section' AND om_collectivite = $collectivite) OR
4036     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier IS NULL AND section = '$section' AND om_collectivite IS NULL) OR
4037     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier = $quartier AND section IS NULL AND om_collectivite = $collectivite) OR
4038     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier = $quartier AND section IS NULL AND om_collectivite IS NULL) OR
4039     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier = $quartier AND section = '$section' AND om_collectivite = $collectivite) OR
4040     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement IS NULL AND quartier = $quartier AND section = '$section' AND om_collectivite IS NULL) OR
4041     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier IS NULL AND section IS NULL AND om_collectivite = $collectivite) OR
4042     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier IS NULL AND section IS NULL AND om_collectivite IS NULL) OR
4043     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier IS NULL AND section = '$section' AND om_collectivite = $collectivite) OR
4044     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier IS NULL AND section = '$section' AND om_collectivite IS NULL) OR
4045     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier = $quartier AND section IS NULL AND om_collectivite = $collectivite) OR
4046     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier = $quartier AND section IS NULL AND om_collectivite IS NULL) OR
4047     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier = $quartier AND section = '$section' AND om_collectivite IS NULL) OR
4048     ( dossier_autorisation_type_detaille = ".$dossier_autorisation_type_detaille." AND arrondissement = $arrondissement AND quartier = $quartier AND section = '$section' AND om_collectivite = $collectivite)
4049     ORDER BY dossier_autorisation_type_detaille, section, quartier, arrondissement
4050     LIMIT 1";
4051     $this->addToLog("getInstructeurDivision : db->query(\"$sql\")", VERBOSE_MODE);
4052 softime 8989 $res = $this->f->db->query($sql);
4053 mbroquet 3730 if (database :: isError($res))
4054     die($res->getMessage()."erreur ".$sql);
4055    
4056     //Si on a récupéré un instructeur correspondant aux critères
4057     if ( $res->numRows() > 0 ){
4058    
4059     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
4060 softime 6565 // On vérifie que l'instructeur est paramétré
4061     if ($row[$column] !== '') {
4062     //On récupère sa division
4063     $sql = "SELECT division FROM ".DB_PREFIXE."instructeur WHERE instructeur = ".$row[$column];
4064 softime 8989 $res = $this->f->db->query($sql);
4065 softime 6565 if (database :: isError($res))
4066     die($res->getMessage()."erreur ".$sql);
4067 mbroquet 3730
4068 softime 6565 $row['division'] = NULL;
4069     //S'il a une division
4070     if ( $res->numRows() > 0 ){
4071    
4072     $rowT=& $res->fetchRow(DB_FETCHMODE_ASSOC);
4073     $row['division'] = $rowT['division'];
4074     }
4075    
4076     return $row;
4077 mbroquet 3730 }
4078     }
4079     }
4080    
4081 softime 6565 return NULL;
4082 mbroquet 3730 }
4083    
4084     /**
4085     * Récupère le type détaillé d'une dossier d'autorisation.
4086     *
4087     * @param integer $dossier_autorisation DA
4088     *
4089     * @return mixed
4090     */
4091     function get_dossier_autorisation_da_type_detaille($dossier_autorisation) {
4092    
4093     //
4094     $resDATD = "";
4095    
4096     //Récupération du dossier_autorisation_type_detaille concerné par le
4097     //$dossier_autorisation
4098     $sql = "
4099     SELECT
4100     dossier_autorisation_type_detaille
4101     FROM
4102     ".DB_PREFIXE."dossier_autorisation
4103     WHERE
4104     dossier_autorisation = '$dossier_autorisation'";
4105     $this->addToLog(__METHOD__." : db->query(\"$sql\")", VERBOSE_MODE);
4106 softime 8989 $resDATD = $this->f->db->getOne($sql);
4107 mbroquet 3730 $this->f->isDatabaseError($resDATD);
4108    
4109     //
4110     return $resDATD;
4111     }
4112    
4113 softime 8989 /**
4114     * TRIGGER - triggerajouter.
4115     *
4116     * @return boolean
4117     */
4118     function triggerajouter($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
4119     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
4120 mbroquet 3730
4121     // Initialisation des variables nécessaires à l'affectation automatique
4122 softime 8989 $quartier = null;
4123     $arrondissement = null;
4124     $section = null;
4125     $instructeur = null;
4126     // Si la référence cadastrale n'est pas vide alors on récupère la
4127     // section, le quartier et l'arrondissement
4128 mbroquet 3730 if ($this->valF['terrain_references_cadastrales'] != '') {
4129     // Cette méthode récupère l'arrondissement et le quartier de la
4130 softime 8989 // référence cadastrale saisie
4131 mbroquet 3730 $quartierArrondissement = $this->getQuartierArrondissement($this->valF['terrain_references_cadastrales']);
4132 softime 8989 if ($quartierArrondissement != null) {
4133 mbroquet 3730 $quartier = $quartierArrondissement['quartier'];
4134     $arrondissement = $quartierArrondissement['arrondissement'];
4135     }
4136     // Si il n'y a pas d'arrondissement alors on vide le quartier
4137 softime 8989 if (strcmp($arrondissement, '') == 0) {
4138     $arrondissement = null;
4139     $quartier = null;
4140 mbroquet 3730 }
4141     // On récupère la section
4142     $section = $this->getSection($this->valF['terrain_references_cadastrales']);
4143     }
4144     // Si aucun instructeur n'est saisi et que la dossier_autorisation_type_detaille n'est pas vide
4145     // alors on récupère l'instructeur et la division depuis l'affectation
4146 softime 8989 if ((empty($this->valF['instructeur']) || $this->valF['instructeur'] == '') && $val['dossier_autorisation'] != '') {
4147 mbroquet 3730 // Récupère le type détaillé du DA
4148     $dossier_autorisation_type_detaille = $this->get_dossier_autorisation_da_type_detaille($this->valF['dossier_autorisation']);
4149     //Récupération de l'instructeur ainsi que de sa division
4150     $instructeurDivision = $this->getInstructeurDivision($quartier, $arrondissement, $section, $dossier_autorisation_type_detaille, $this->valF['om_collectivite']);
4151 softime 8989 // Si un instructeur et sa division ont été récupérés
4152     if ($instructeurDivision != null) {
4153 mbroquet 3730 $instructeur = $instructeurDivision['instructeur'];
4154     $division = $instructeurDivision['division'];
4155     }
4156 softime 8989 // Si un instructeur et sa division n'ont pas été récupérés, on
4157     // ajoute pas les données
4158     if ($instructeur != null) {
4159 mbroquet 3730 $this->valF['instructeur'] = $instructeur;
4160     $this->valF['division'] = $division;
4161     } else {
4162 softime 8989 // On affiche un message à l'utilisateur pour lui signifier
4163     // qu'aucun instructeur n'a été assigné au dossier d'instruction
4164     // créé
4165 mbroquet 3730 if ($this->f->isAccredited("dossier_modifier_instructeur")) {
4166     $this->addToMessage("<br/> "._("Pensez a assigner un instructeur a ce dossier.")." <br/>");
4167     } else {
4168     $this->addToMessage("<br/> "._("Aucun instructeur compatible avec ce dossier trouve, contactez votre administrateur afin d'en assigner un a ce dossier.")." <br/>");
4169     }
4170     }
4171 softime 6565 // Gestion instructeur 2
4172     $instr2 = $this->getInstructeurDivision($quartier, $arrondissement, $section, $dossier_autorisation_type_detaille, $this->valF['om_collectivite'], 'instructeur_2');
4173 softime 8989 if ($instr2 != null) {
4174 softime 6565 $this->valF['instructeur_2'] = $instr2['instructeur_2'];
4175     }
4176 mbroquet 3730 } else {
4177     $this->addToMessage("<br/> "._("Aucun instructeur compatible avec ce dossier trouve, contactez votre administrateur afin d'en assigner un a ce dossier.")." <br/>");
4178     }
4179     //
4180 softime 8989 $this->addToLog(__METHOD__."(): end", EXTRA_VERBOSE_MODE);
4181 mbroquet 3730 }
4182    
4183 fmichon 4708 /**
4184     * TRIGGER - triggermodifierapres.
4185     *
4186     * - Interface avec le référentiel ERP [101]
4187     * - Interface avec le référentiel ERP [102][103]
4188 softime 6272 * - Interface avec le référentiel ERP [114]
4189 fmichon 4708 * - Gestion des demandeurs liés
4190     * - Gestion des références cadastrales / parcelles liées
4191     * - Gestion des taxes
4192 softime 8989 *
4193 fmichon 4708 * @return boolean
4194     */
4195 softime 8989 function triggermodifierapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
4196     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
4197    
4198 softime 6565 // Mise à jour DA si miroir du DI
4199     $inst_da = $this->get_inst_dossier_autorisation($this->getVal('dossier_autorisation'));
4200     if ($inst_da->is_dossier_autorisation_visible() === false) {
4201 softime 8640 $params = array(
4202     'di_id' => $this->getVal($this->clePrimaire),
4203     );
4204     if ($inst_da->majDossierAutorisation($params) === false) {
4205 softime 6565 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
4206     return false;
4207     }
4208     }
4209 fmichon 4708
4210     /**
4211     * Interface avec le référentiel ERP.
4212     *
4213     * (WS->ERP)[101] ERP Qualifié -> AT
4214     * Déclencheur :
4215     * - L'option ERP est activée
4216     * - Le dossier est de type AT
4217     * - Le dossier est marqué comme "connecté au référentiel ERP"
4218     * - Le formulaire de modification du dossier est validé avec le
4219     * marqueur "à qualifier" à "NON" alors qu'il était précédemment à
4220     * "OUI"
4221     */
4222 softime 8989 //
4223 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
4224 fmichon 4708 && $this->is_connected_to_referentiel_erp() === true
4225     && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__at')
4226     && $this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false) {
4227 softime 4740 // Récupère la liste des contraintes
4228     $contraintes_plu_list = $this->getListContrainte($this->valF['dossier'], false);
4229     // Extrait les libellés de chaque contraintes
4230     $contraintes_plu = array();
4231     $contraintes_plu_string = "";
4232 softime 8989 while ($row =& $contraintes_plu_list->fetchRow(DB_FETCHMODE_ASSOC)) {
4233 softime 4740 //
4234     $contraintes_plu[] = $row['contrainte_libelle'];
4235     }
4236     // Chaîne de caractère listant toutes les contraintes du dossier
4237     $contraintes_plu_string = implode(' ; ', $contraintes_plu);
4238 nhaye 6052 $competence = "";
4239     if ($this->valF['autorite_competente'] !== null) {
4240     $inst_ac = $this->get_inst_autorite_competente($this->valF['autorite_competente']);
4241     $competence = $inst_ac->getVal("libelle");
4242     }
4243 fmichon 4708 //
4244     $infos = array(
4245     "dossier_instruction" => $this->valF['dossier'],
4246 nhaye 6052 "competence" => $competence,
4247 softime 4740 "contraintes_plu" => $contraintes_plu_string,
4248 fmichon 4708 "references_cadastrales" => $this->getReferenceCadastrale($this->valF['dossier']),
4249     );
4250     //
4251     $ret = $this->f->send_message_to_referentiel_erp(101, $infos);
4252     if ($ret !== true) {
4253     $this->cleanMessage();
4254     $this->addToMessage(_("Une erreur s'est produite lors de la notification (101) du référentiel ERP. Contactez votre administrateur."));
4255     return false;
4256 mbroquet 3730 }
4257 fmichon 4708 $this->addToMessage(_("Notification (101) du référentiel ERP OK."));
4258     }
4259 mbroquet 3730
4260 fmichon 4708 /**
4261     * Interface avec le référentiel ERP.
4262     *
4263     * (WS->ERP)[102] Demande de complétude de dossier PC pour un ERP -> PC qui concerne un ERP
4264     * (WS->ERP)[103] Demande de qualification de dossier PC pour un ERP -> PC qui concerne un ERP
4265     * Déclencheur :
4266     * - L'option ERP est activée
4267     * - Le dossier est de type PC
4268     * - Le formulaire de modification du dossier est validé avec le
4269     * marqueur "à qualifier" à "NON" alors qu'il était précédemment à
4270     * "OUI"
4271     * - Le formulaire de modification du dossier est validé avec le
4272     * marqueur "ERP" à "OUI"
4273     */
4274     //
4275 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
4276 fmichon 4708 && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
4277     && $this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false
4278     && $this->valF['erp'] == true) {
4279     //
4280     $infos = array(
4281     "dossier_instruction" => $this->valF['dossier'],
4282     );
4283     // [102] Demande de complétude de dossier PC pour un ERP
4284     $ret = $this->f->send_message_to_referentiel_erp(102, $infos);
4285     if ($ret !== true) {
4286     $this->cleanMessage();
4287     $this->addToMessage(_("Une erreur s'est produite lors de la notification (102) du référentiel ERP. Contactez votre administrateur."));
4288     return false;
4289     }
4290     $this->addToMessage(_("Notification (102) du référentiel ERP OK."));
4291     // [103] Demande de qualification de dossier PC pour un ERP
4292     $ret = $this->f->send_message_to_referentiel_erp(103, $infos);
4293     if ($ret !== true) {
4294     $this->cleanMessage();
4295     $this->addToMessage(_("Une erreur s'est produite lors de la notification (103) du référentiel ERP. Contactez votre administrateur."));
4296     return false;
4297     }
4298     $this->addToMessage(_("Notification (103) du référentiel ERP OK."));
4299     }
4300    
4301     /**
4302 softime 6272 * Interface avec le référentiel ERP.
4303     *
4304     * (WS->ERP)[114] ERP Qualifié -> PC
4305     * Déclencheur :
4306     * - l'option ERP est activée
4307     * - ET le dossier est marqué comme "connecté au référentiel ERP"
4308     * - ET le dossier est de type PC
4309     * - ET
4310     * - soit le formulaire de modification du dossier est validé avec le
4311     * marqueur "enjeu_urba" qui change de statut
4312     * - soit ce marqueur est vrai et le dossier passe à qualifié
4313     */
4314     // Étant donné que l'objet a été modifié en base après sa création,
4315     // il faut le ré-instancier pour récupérer ses informations.
4316 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
4317     "obj" => "dossier",
4318     "idx" => $this->valF['dossier'],
4319     ));
4320 softime 7366 if ($dossier->f->is_option_referentiel_erp_enabled($this->getVal('om_collectivite')) === true
4321 softime 6272 && $dossier->is_connected_to_referentiel_erp() === true
4322     && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
4323     && (($this->getVal('enjeu_urba') == 't') != $this->valF['enjeu_urba']
4324     || ($this->getVal('a_qualifier') == 't' && $this->valF['a_qualifier'] === false
4325     && $this->getVal('enjeu_urba') == 't'))) {
4326    
4327     $enjeu = "non";
4328     if ($this->valF['enjeu_urba']) {
4329     $enjeu = "oui";
4330     }
4331    
4332     $infos = array(
4333     "dossier_instruction" => $this->valF['dossier'],
4334     "Dossier à enjeu ADS" => $enjeu
4335     );
4336     //
4337     $ret = $this->f->send_message_to_referentiel_erp(114, $infos);
4338     if ($ret !== true) {
4339     $this->cleanMessage();
4340     $this->addToMessage(_("Une erreur s'est produite lors de la notification (114) du référentiel ERP. Contactez votre administrateur."));
4341     return false;
4342     }
4343     $this->addToMessage(_("Notification (114) du référentiel ERP OK."));
4344     }
4345    
4346     /**
4347 fmichon 4708 * Gestion des demandeurs liés.
4348     */
4349 mbroquet 3730 // Ajout ou modification des demandeurs
4350 softime 8989 $this->insertLinkDossierDemandeur();
4351 mbroquet 3730
4352 fmichon 4708 /**
4353     * Gestion des références cadastrales / parcelles liées.
4354     */
4355 mbroquet 3730 // Si le champ des références cadastrales n'est pas vide
4356     if ($this->getVal('terrain_references_cadastrales')
4357     != $this->valF['terrain_references_cadastrales']) {
4358    
4359     // On supprime toutes les lignes de la table dossier_parcelle qui
4360     // font référence le dossier en cours de modification
4361     $this->supprimer_dossier_parcelle($val['dossier']);
4362    
4363     // Ajout des parcelles dans la table dossier_parcelle
4364     $this->ajouter_dossier_parcelle($val['dossier'],
4365     $val['terrain_references_cadastrales']);
4366    
4367     }
4368    
4369 fmichon 4708 /**
4370     * Gestion des taxes.
4371     */
4372 softime 6929 // Si le champ tax_secteur est modifié et que l'option de simulation des
4373     // taxes est activée
4374     if ($this->getVal('tax_secteur') != $this->valF['tax_secteur']
4375     && $this->f->is_option_simulation_taxes_enabled($this->getVal('om_collectivite')) === true) {
4376 mbroquet 3730
4377     // Valeurs pour le calcul de la taxe d'aménagement
4378 softime 6929 $values = array();
4379     // Instance de la classe donnees_techniques
4380     $donnees_techniques = $this->get_inst_donnees_techniques();
4381     // Récupère les valeurs des données techniques
4382     $values = $donnees_techniques->get_form_val();
4383 mbroquet 3730
4384     // Met à jour les montants du dossier
4385 softime 6929 $update_dossier_tax_mtn = $this->update_dossier_tax_mtn($this->valF['tax_secteur'], $values);
4386     if ($update_dossier_tax_mtn === false) {
4387 mbroquet 3730 //
4388     $this->addToMessage(_("La mise a jour des montants de la simulation de la taxe d'amenagement a echouee."));
4389 softime 6929 //
4390 mbroquet 3730 return false;
4391     }
4392     }
4393    
4394 softime 6272 /**
4395     * Gestion des métadonées des pièces liés.
4396     * Vérifie les méthodes à exécuter configurées dans le connecteur du
4397     * filestorage.
4398     */
4399 mbroquet 3730 //
4400 softime 6272 $ret = $this->post_update_metadata($val);
4401     //
4402     if ($ret === false) {
4403     //
4404     $this->cleanMessage();
4405     $this->addToMessage(_("La mise à jour des métadonnées des pièces liées à ce dossier a échouée."));
4406     return false;
4407     }
4408    
4409 softime 7366 /**
4410     * Gestion des du changement de date de dépôt.
4411     * Vérification préalable de la présence de la date et de sa
4412     * modification.
4413     */
4414 softime 6272 //
4415 softime 7366 if (array_key_exists("date_depot", $val) === true) {
4416     //
4417 softime 7540 $inst_new_date = DateTime::createFromFormat('d/m/Y', $val["date_depot"]);
4418     $inst_old_date = DateTime::createFromFormat('Y-m-d', $this->getVal("date_depot"));
4419     $new_date = $inst_new_date->format('d/m/Y');
4420     $old_date = $inst_old_date->format('d/m/Y');
4421 softime 7366
4422     //
4423     if ($new_date !== $old_date) {
4424     //
4425     $status = $this->update_date_depot($val["date_depot"]);
4426     //
4427     if ($status === false) {
4428     //
4429     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
4430     return false;
4431     }
4432    
4433     }
4434     }
4435     //
4436 mbroquet 3730 return true;
4437     }
4438    
4439 softime 7366 /**
4440 softime 8989 * TRIGGER - triggermodifier.
4441     *
4442     * @return boolean
4443 softime 7366 */
4444 softime 8989 function triggermodifier($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
4445     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
4446 softime 7366 // Si la date de dépôt a changé et si elle valait celle du dernier dépôt
4447     // alors cette dernière prend également sa valeur
4448     if ($this->f->formatDate($this->getVal('date_depot')) !== $val['date_depot']
4449     && $this->f->formatDate($this->getVal('date_depot')) === $this->f->formatDate($this->getVal('date_dernier_depot'))) {
4450     $this->valF['date_dernier_depot'] = $this->valF['date_depot'];
4451     }
4452     //
4453     return true;
4454     }
4455    
4456 mbroquet 3730 /**
4457 softime 7366 * Methode de traitement suite à la modification de la date de dépot.
4458     *
4459     * @param string $new_date_str Nouvelle date de dépot.
4460     *
4461     * @return boolean
4462     */
4463     function update_date_depot($new_date_str) {
4464     $demande = $this->get_inst_demande();
4465     if ($demande === false) {
4466     return false;
4467     }
4468    
4469     $retour = $this->majDateInstruction($demande->getVal("instruction_recepisse"), $new_date_str);
4470     if ($retour === false) {
4471     return false;
4472     }
4473    
4474     $valF = array();
4475     foreach ($demande->champs as $id => $champ) {
4476     $valF[$champ] = $demande->val[$id];
4477     }
4478     $valF['date_demande'] = $new_date_str;
4479 softime 8989 $modification = $demande->modifier($valF);
4480 softime 7366 if ($modification === false) {
4481     return false;
4482     }
4483    
4484     $row_date = array("date_demande" => $new_date_str);
4485 softime 8989 $res = $this->f->db->autoExecute(
4486 softime 7366 DB_PREFIXE."dossier",
4487     $row_date,
4488     DB_AUTOQUERY_UPDATE,
4489     "dossier = '".$this->getVal("dossier")."'"
4490     );
4491     $this->f->addToLog(__METHOD__ . "() : db->autoExecute(" . $res . ")", VERBOSE_MODE);
4492     if ($this->f->isDatabaseError($res, true)) {
4493     return false;
4494     }
4495    
4496 softime 7541 // Si c'est un dossier d'instruction initial
4497     $di_version = $this->get_dossier_instruction_version();
4498     if ($di_version === 0 || $di_version === '0') {
4499     //
4500     $row_date = array("depot_initial" => $new_date_str);
4501 softime 8989 $res = $this->f->db->autoExecute(
4502 softime 7541 DB_PREFIXE."dossier_autorisation",
4503     $row_date,
4504     DB_AUTOQUERY_UPDATE,
4505     "dossier_autorisation = '" . $this->getVal("dossier_autorisation") . "'"
4506     );
4507     $this->f->addToLog(__METHOD__ . "() : db->autoExecute(" . $res . ")", VERBOSE_MODE);
4508     if ($this->f->isDatabaseError($res, true)) {
4509     return false;
4510     }
4511 softime 7366 }
4512     }
4513    
4514    
4515     /**
4516     * Met à jour l'instruction en fonction de la nouvelle date
4517     * ou retourne false si il ya une erreur.
4518     *
4519     * @param integer $instruction_id Identifiant de l'instruction.
4520     * @param string $date_depot Nouvelle date de dépôt.
4521     *
4522     * @return boolean
4523     */
4524     public function majDateInstruction($instruction_id, $date_depot) {
4525    
4526     // Definalise l'instruction de récépissé si nécessaire
4527 softime 7996 $instruction = $this->f->get_inst__om_dbform(array(
4528     "obj" => "instruction",
4529     "idx" => $instruction_id,
4530     ));
4531 softime 7366 $instruction->setParameter('maj', 110);
4532     //
4533     if ($instruction->is_unfinalizable_without_bypass() === true
4534     && $instruction->unfinalize($instruction->valF) === false) {
4535     return false;
4536     }
4537    
4538     // Modifie la date d'événement
4539     $instruction->setParameter('maj', 1);
4540     //
4541     $valF = array();
4542     foreach ($instruction->champs as $id => $champ) {
4543     $valF[$champ] = $instruction->getVal($champ);
4544     }
4545     //
4546     $valF['date_evenement'] = $date_depot;
4547     $valF['date_finalisation_courrier'] = null;
4548     //
4549 softime 8989 $modification = $instruction->modifier($valF);
4550 softime 7366 //
4551     if ($modification === false) {
4552     return false;
4553     }
4554    
4555     // Finalise l'instruction
4556     $instruction->setParameter('maj', 100);
4557     if ($instruction->finalize($instruction->valF) === false) {
4558     return false;
4559     }
4560    
4561     //
4562     return true;
4563     }
4564    
4565     /**
4566 softime 6272 * Récupère l'instance de l'autorité compétente.
4567     *
4568     * @param string $autorite_competente Identifiant de l'autorité compétente.
4569     *
4570     * @return object
4571     */
4572     function get_inst_autorite_competente($autorite_competente = null) {
4573     //
4574     return $this->get_inst_common("autorite_competente", $autorite_competente);
4575     }
4576    
4577    
4578     /**
4579 softime 6929 * Met à jour les montants des taxes du dossier d'instruction.
4580 mbroquet 3730 *
4581 softime 6929 * @param integer $tax_secteur Secteur communal.
4582     * @param array $val Valeurs des données techniques.
4583 mbroquet 3730 *
4584     * @return boolean
4585     */
4586 softime 6929 public function update_dossier_tax_mtn($tax_secteur, $val = array()) {
4587 mbroquet 3730 // Instance du paramétrage de la taxe d'aménagement
4588     $taxe_amenagement = $this->get_inst_taxe_amenagement();
4589    
4590 softime 6929 // Liste des montants à mettre à jour
4591     $valF = array();
4592     $valF['tax_mtn_part_commu'] = null;
4593     $valF['tax_mtn_part_depart'] = null;
4594     $valF['tax_mtn_part_reg'] = null;
4595     $valF['tax_mtn_total'] = null;
4596     $valF['tax_mtn_rap'] = null;
4597     $valF['tax_mtn_part_commu_sans_exo'] = null;
4598     $valF['tax_mtn_part_depart_sans_exo'] = null;
4599     $valF['tax_mtn_part_reg_sans_exo'] = null;
4600     $valF['tax_mtn_total_sans_exo'] = null;
4601     $valF['tax_mtn_rap_sans_exo'] = null;
4602 mbroquet 3730
4603 softime 6929 // Si le tableau des valeurs n'est pas vide
4604     if ($val !== array()) {
4605 mbroquet 3730
4606 softime 6929 // Si le taux communal est renseigné
4607     if ($taxe_amenagement->getVal('tx_comm_secteur_'.$tax_secteur) !== null
4608     && $taxe_amenagement->getVal('tx_comm_secteur_'.$tax_secteur) !== '') {
4609 mbroquet 3730
4610 softime 6929 // Calcul de la TA
4611     $calcul_ta = $taxe_amenagement->compute_ta($tax_secteur, $val);
4612    
4613     // Si chaque résultat est calculable
4614     if ($calcul_ta !== null && is_array($calcul_ta) === true) {
4615    
4616     // Total des parts de la TA avec exonération
4617     $total_ta = $calcul_ta['commu'] + $calcul_ta['depart'] + $calcul_ta['reg'];
4618     $total_ta_ss_exo = $calcul_ta['commu_ss_exo'] + $calcul_ta['depart_ss_exo'] + $calcul_ta['reg_ss_exo'];
4619    
4620     // Valeurs à mettre à jour, les montants doivent être à l'entier
4621     // inférieur
4622     $valF['tax_mtn_part_commu'] = floor($calcul_ta['commu']);
4623     $valF['tax_mtn_part_depart'] = floor($calcul_ta['depart']);
4624     $valF['tax_mtn_part_reg'] = floor($calcul_ta['reg']);
4625     $valF['tax_mtn_total'] = floor($total_ta);
4626     $valF['tax_mtn_part_commu_sans_exo'] = floor($calcul_ta['commu_ss_exo']);
4627     $valF['tax_mtn_part_depart_sans_exo'] = floor($calcul_ta['depart_ss_exo']);
4628     $valF['tax_mtn_part_reg_sans_exo'] = floor($calcul_ta['reg_ss_exo']);
4629     $valF['tax_mtn_total_sans_exo'] = floor($total_ta_ss_exo);
4630     }
4631     }
4632    
4633     // Calcul de la RAP
4634     $calcul_rap = $taxe_amenagement->compute_rap($val);
4635    
4636     // Si chaque résultat est calculable
4637     if ($calcul_rap !== null && is_array($calcul_rap) === true) {
4638    
4639     // RAP avec exonération
4640     $mtn_rap = $calcul_rap['rap'];
4641     // RAP sans exonération
4642     $mtn_rap_ss_exo = $calcul_rap['rap_ss_exo'];
4643    
4644     // Valeurs à mettre à jour, les montants doivent être à l'entier
4645     // inférieur
4646     $valF['tax_mtn_rap'] = floor($mtn_rap);
4647     $valF['tax_mtn_rap_sans_exo'] = floor($mtn_rap_ss_exo);
4648     }
4649 mbroquet 3730 }
4650    
4651     // Met à jour l'enregistrement de dossier
4652 softime 8989 $res = $this->f->db->autoExecute(
4653 softime 6929 DB_PREFIXE.$this->table,
4654     $valF,
4655     DB_AUTOQUERY_UPDATE,
4656     $this->clePrimaire ."='".$this->getVal($this->clePrimaire)."'"
4657     );
4658 mbroquet 3730 // Log
4659     $this->f->addToLog(__METHOD__."() : db->autoExecute(".$res.")", VERBOSE_MODE);
4660     //
4661     if ($this->f->isDatabaseError($res, true)) {
4662     //
4663     $this->correct = false;
4664     return false;
4665     }
4666    
4667     //
4668     return true;
4669     }
4670    
4671 softime 8477 /**
4672 softime 8989 * TRIGGER - triggersupprimer.
4673 softime 8477 *
4674     * @return boolean
4675     */
4676 softime 8989 function triggersupprimer($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
4677     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
4678 softime 6929
4679 softime 8477 // Le dossier d'instruction n'est pas supprimé si celui-ci est lié à un
4680     // contentieux
4681     $autorisation_contestee = $this->get_idx_by_args('autorisation_contestee', 'dossier', 'autorisation_contestee', $this->getVal($this->clePrimaire));
4682     if ($autorisation_contestee !== null && $autorisation_contestee !== '') {
4683     $this->addToMessage("Le dossier d'instruction ne peut pas être supprimé car celui-ci est lié à un contentieux.");
4684     return false;
4685     }
4686    
4687     /**
4688     * Gestion de la suppression des tables liées au dossier d'instruction.
4689     * Les fichiers potentiellement liés aux tables ne sont pas supprimés.
4690     */
4691     // Tableau pour la conception des requêtes de suppression
4692     $related_tables = array(
4693     'lien_demande_demandeur' => array(
4694     'condition_field' => 'demande',
4695     'condition_value' => $this->get_idx_by_args('demande', 'demande', 'dossier_instruction', $this->getVal($this->clePrimaire)),
4696     ),
4697     'demande' => array(
4698     'condition_field' => 'dossier_instruction',
4699     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4700     ),
4701     'lien_dossier_demandeur' => array(
4702     'condition_field' => 'dossier',
4703     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4704     ),
4705     'instruction' => array(
4706     'condition_field' => 'dossier',
4707     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4708     ),
4709     'dossier_parcelle' => array(
4710     'condition_field' => 'dossier',
4711     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4712     ),
4713     'dossier_contrainte' => array(
4714     'condition_field' => 'dossier',
4715     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4716     ),
4717     'lien_donnees_techniques_moyen_retenu_juge' => array(
4718     'condition_field' => 'donnees_techniques',
4719     'condition_value' => $this->get_idx_by_args('donnees_techniques', 'donnees_techniques', 'dossier_instruction', $this->getVal($this->clePrimaire)),
4720     ),
4721     'lien_donnees_techniques_moyen_souleve' => array(
4722     'condition_field' => 'donnees_techniques',
4723     'condition_value' => $this->get_idx_by_args('donnees_techniques', 'donnees_techniques', 'dossier_instruction', $this->getVal($this->clePrimaire)),
4724     ),
4725     'donnees_techniques_di' => array(
4726     'table' => 'donnees_techniques',
4727     'condition_field' => 'dossier_instruction',
4728     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4729     ),
4730     'blocnote' => array(
4731     'condition_field' => 'dossier',
4732     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4733     ),
4734     'consultation' => array(
4735     'condition_field' => 'dossier',
4736     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4737     ),
4738     'document_numerise' => array(
4739     'condition_field' => 'dossier',
4740     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4741     ),
4742     'rapport_instruction' => array(
4743     'condition_field' => 'dossier_instruction',
4744     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4745     ),
4746     'dossier_commission' => array(
4747     'condition_field' => 'dossier',
4748     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4749     ),
4750     'dossier_message' => array(
4751     'condition_field' => 'dossier',
4752     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4753     ),
4754     'lien_dossier_dossier_1' => array(
4755     'table' => 'lien_dossier_dossier',
4756     'condition_field' => 'dossier_src',
4757     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4758     ),
4759     'lien_dossier_dossier_2' => array(
4760     'table' => 'lien_dossier_dossier',
4761     'condition_field' => 'dossier_cible',
4762     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4763     ),
4764     'dossier_geolocalisation' => array(
4765     'condition_field' => 'dossier',
4766     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4767     ),
4768     'donnees_techniques_lot' => array(
4769     'table' => 'donnees_techniques',
4770     'condition_field' => 'lot',
4771     'condition_value' => $this->get_idx_by_args("string_agg(lot::text, ', ')", 'lot', 'dossier', $this->getVal($this->clePrimaire)),
4772     ),
4773     'lien_lot_demandeur' => array(
4774     'condition_field' => 'lot',
4775     'condition_value' => $this->get_idx_by_args("string_agg(lot::text, ', ')", 'lot', 'dossier', $this->getVal($this->clePrimaire)),
4776     ),
4777     'lot' => array(
4778     'condition_field' => 'dossier',
4779     'condition_value' => sprintf("'%s'", $this->getVal($this->clePrimaire)),
4780     ),
4781     );
4782     // Supprime les enregistrements des tables
4783     $delete = $this->delete_related_tables($related_tables);
4784     if ($delete === false) {
4785     return false;
4786     }
4787    
4788     //
4789     return true;
4790     }
4791    
4792 mbroquet 3730 /**
4793 softime 8989 * TRIGGER - triggersupprimerapres.
4794 softime 8477 *
4795     * @return boolean
4796 mbroquet 3730 */
4797 softime 8989 function triggersupprimerapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
4798     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
4799 mbroquet 3730
4800 softime 8477 /**
4801     * Gestion de la suppression des tables liées au dossier d'instruction.
4802     * Dans le cas d'un dossier d'instruction initial le dossier
4803     * d'autorisation est également supprimé pour libérer la numéroration.
4804     * S'il s'agit d'un dossier d'instruction sur exsitant alors le dossier
4805     * d'autorisation est mise à jour.
4806     * Les fichiers potentiellement liés aux tables ne sont pas supprimés.
4807     */
4808     // S'il s'agit d'une suppression de dossier d'instruction sur existant
4809     if ($this->has_only_initial_di(true) === false) {
4810     // Mise à jour des données du dossier d'autorisation
4811     $da = $this->f->get_inst__om_dbform(array(
4812     "obj" => "dossier_autorisation",
4813     "idx" => $this->getVal("dossier_autorisation"),
4814     ));
4815     $da->majDossierAutorisation();
4816 mbroquet 3730
4817 softime 8477 } else {
4818     // S'il s'agit d'une suppression de dossier d'instruction initial
4819     // Tableau pour la conception des requêtes de suppression
4820     $related_tables = array(
4821     'lien_dossier_autorisation_demandeur' => array(
4822     'condition_field' => 'dossier_autorisation',
4823     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
4824     ),
4825     'dossier_autorisation_parcelle' => array(
4826     'condition_field' => 'dossier_autorisation',
4827     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
4828     ),
4829     'donnees_techniques' => array(
4830     'condition_field' => 'dossier_autorisation',
4831     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
4832     ),
4833     'dossier_autorisation' => array(
4834     'condition_field' => 'dossier_autorisation',
4835     'condition_value' => sprintf("'%s'", $val['dossier_autorisation']),
4836     ),
4837     );
4838     // Supprime les tables
4839     $delete = $this->delete_related_tables($related_tables);
4840     if ($delete === false) {
4841     return false;
4842     }
4843    
4844     /**
4845     * Mise à jour de la séquence.
4846     */
4847 softime 8989 $curr_da_num = $this->get_max_da_num();
4848     if (is_integer($curr_da_num) !== true) {
4849     $this->addToMessage(__('Erreur lors du calcul du numéro de dossier.'));
4850     return false;
4851     }
4852 softime 8477 // Dans le cas de la suppression du dernier dossier d'instruction de
4853     // sa numérotation alors la séquence est supprimée
4854 softime 8989 if ($curr_da_num === 0) {
4855 softime 8477 $table_name = substr($this->get_sequence_name(), 0, -4);
4856 softime 8989 $res = $this->f->db->dropSequence($table_name);
4857 softime 8477 $this->f->addToLog(__METHOD__."(): db->createSequence(\"".$table_name."\");", VERBOSE_MODE);
4858     $this->f->isDatabaseError($res);
4859    
4860     } else {
4861     // La méthode setval avec la valeur true en troisième argument
4862     // signifie que le prochain nextval avancera la séquence avant
4863     // de renvoyer une valeur.
4864     $sql = sprintf("
4865     SELECT setval('%s', %s, true)",
4866     $this->get_sequence_name(),
4867 softime 8989 $curr_da_num
4868 softime 8477 );
4869     $res = $this->f->db->query($sql);
4870     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
4871     $this->f->isDatabaseError($res);
4872     }
4873     }
4874    
4875     /**
4876     * Supprime le dossier d'instruction des derniers dossiers consultés,
4877     * sauvegardé en session
4878     */
4879     if (isset($_SESSION['dossiers_consulte']) !== false) {
4880     $id_di = $this->getVal($this->clePrimaire);
4881     if (in_array($id_di, $_SESSION['dossiers_consulte']) === true) {
4882     unset($_SESSION['dossiers_consulte'][$id_di]);
4883     }
4884     // Supprime le tableau s'il n'y a plus de dossier consulté
4885     if (count($_SESSION['dossiers_consulte']) === 0) {
4886     unset($_SESSION['dossiers_consulte']);
4887     }
4888     }
4889 mbroquet 3730 }
4890 softime 8477
4891 mbroquet 3730 /**
4892 softime 8477 * TREATMENT - delete_related_tables.
4893     *
4894     * Suppression par requête SQL les enregistrements des tables passées en
4895     * paramètre.
4896     *
4897     * @param array $related_tables Liste des enregistrements à supprimer
4898     *
4899     * @return boolean
4900     */
4901     function delete_related_tables(array $related_tables) {
4902     $this->begin_treatment(__METHOD__);
4903    
4904     // Supprime chaque enregistrement liés au dossier d'instruction
4905     $template_delete_sql = 'DELETE FROM %s%s WHERE %s IN (%s)';
4906     foreach ($related_tables as $table => $value) {
4907     if (isset($value['table']) === true) {
4908     $table = $value['table'];
4909     }
4910     if ($value['condition_value'] !== '' && $value['condition_value'] !== null) {
4911     $sql = sprintf($template_delete_sql, DB_PREFIXE, $table, $value['condition_field'], $value['condition_value']);
4912     $res = $this->f->db->query($sql);
4913     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
4914     $this->f->isDatabaseError($res);
4915     }
4916     }
4917    
4918     return $this->end_treatment(__METHOD__, true);
4919     }
4920    
4921     /**
4922     * CONDITION - has_only_initial_di.
4923     *
4924     * Permet de vérifier qu'il s'agit du dossier d'instruction initial de
4925     * l'autorisation.
4926     *
4927     * @param boolean $after_delete À activer si la méthode est utilisée lors de
4928     * la suppression.
4929     *
4930     * @return boolean
4931     */
4932     function has_only_initial_di($after_delete=false) {
4933    
4934     // Compte le nombre de dossier lié au dossier d'autorisation
4935     $res = $this->get_idx_by_args('COUNT(dossier)', 'dossier', 'dossier_autorisation', $this->getVal('dossier_autorisation'));
4936    
4937     // Si la méthode est utilisé dans le triggersupprimerapres alors le
4938     // dossier d'instruction est déjà supprimé dans la base de données, le
4939     // retour doit donc être 0 pour prouver la suppression du DI initial
4940     if ($after_delete === true) {
4941     if ($res === '0') {
4942     return true;
4943     }
4944     //
4945     return false;
4946     }
4947    
4948     // S'il y a qu'un seul dossier d'instruction alors le DI courant est
4949     // forcément l'initial
4950     if ($res === '1') {
4951     return true;
4952     }
4953     //
4954     return false;
4955     }
4956    
4957     /**
4958     * Récupère la dernière valeur d'une séquence.
4959     *
4960     * @param string $sequence_name Nom de la séquence (optionnel)
4961     *
4962     * @return integer Dernière valeur de la séquence
4963     */
4964     function get_last_value_sequence($sequence_name=null) {
4965     // Récupère autoamtiquement le nom de la séquence du dossier
4966     // d'instruction courant
4967     if ($sequence_name === null) {
4968     $sequence_name = $this->get_sequence_name();
4969     }
4970    
4971     $sql = sprintf(
4972     "SELECT last_value FROM %s",
4973     $this->get_sequence_name()
4974     );
4975     $res = $this->f->db->getOne($sql);
4976     $this->f->isDatabaseError($res);
4977    
4978     return intval($res);
4979     }
4980    
4981     /**
4982 softime 8989 * [get_max_da_num description]
4983     * @param [type] $sequence_name [description]
4984     * @return [type] [description]
4985     */
4986     function get_max_da_num($sequence_name = null) {
4987     if ($sequence_name === null) {
4988     $sequence_name = $this->get_sequence_name();
4989     }
4990     $da = $this->f->get_inst__om_dbform(array(
4991     "obj" => "dossier_autorisation",
4992     "idx" => $this->getVal('dossier_autorisation'),
4993     ));
4994     if ($da->doesNumeroDossierSequenceExists($sequence_name) !== true) {
4995     return false;
4996     }
4997     $sequence_args = $this->get_sequence_args();
4998     return $da->getMaxDANumeroDossier($sequence_args['datc'], $sequence_args['annee'], $sequence_args['dep'], $sequence_args['com']);
4999     }
5000    
5001     /**
5002 mbroquet 3730 * Retourne la reference cadastrale de la demande attache a un dossier ERP
5003     * specifique
5004     * @param string $dossier L'identifiant du dossier
5005     * @return string|null La reference cadastrale si elle est trouve,
5006     * sinon NULL. En cas d'erreur de la BD, l'execution s'arrete.
5007     */
5008     function getReferenceCadastrale($dossier) {
5009     $sql = "SELECT terrain_references_cadastrales FROM ".DB_PREFIXE."demande WHERE dossier_instruction = '" . $dossier . "'";
5010 softime 8989 $res = $this->f->db->limitquery($sql, 0, 1);
5011 mbroquet 3730 $this->addToLog("getReferenceCadastrale(): db->limitquery(\"".
5012     str_replace(",",", ",$sql)."\", 0, 1);", VERBOSE_MODE);
5013     // Si une erreur survient on die
5014     if (database::isError($res, true)) {
5015     // Appel de la methode de recuperation des erreurs
5016     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), 'demande');
5017     }
5018     // retourne la nature du dossier
5019     while ($row =& $res->fetchRow()) {
5020     return $row[0];
5021     }
5022     // la nature n'etait pas trouve, ce qui ne devrait pas se passer
5023     return NULL;
5024     }
5025    
5026     /**
5027 softime 6565 * Supprime puis recrée tous les liens entre dossier et demandeurs
5028 mbroquet 3730 **/
5029 softime 8989 function insertLinkDossierDemandeur() {
5030 softime 6565 // Suppression des anciens demandeurs
5031 softime 8989 $this->deleteLinkDossierDemandeur();
5032 softime 6565 $types_demandeur = array(
5033     "petitionnaire_principal",
5034     "delegataire",
5035     "petitionnaire",
5036     "plaignant_principal",
5037     "plaignant",
5038     "contrevenant_principal",
5039     "contrevenant",
5040     "requerant_principal",
5041     "requerant",
5042     "avocat_principal",
5043     "avocat",
5044 softime 7067 "bailleur_principal",
5045     "bailleur",
5046 softime 6565 );
5047     foreach ($types_demandeur as $type) {
5048     // Comparaison des autres demandeurs
5049     if(isset($this->postedIdDemandeur[$type]) === true) {
5050     // Ajout des nouveaux liens
5051     foreach ($this->postedIdDemandeur[$type] as $demandeur) {
5052     //
5053     $principal = false;
5054     if (strpos($type, '_principal') !== false) {
5055     $principal = true;
5056     }
5057 softime 8989 if ($this->addLinkDossierDemandeur($demandeur, $principal) === false) {
5058 softime 6565 //
5059     return false;
5060     }
5061     }
5062 mbroquet 3730 }
5063     }
5064     }
5065    
5066    
5067     /**
5068     * Fonction permettant d'ajouter un lien
5069 softime 6565 * entre la table dossier et demandeur
5070 mbroquet 3730 **/
5071 softime 8989 function addLinkDossierDemandeur($id, $principal) {
5072 softime 7996 $lienAjout = $this->f->get_inst__om_dbform(array(
5073     "obj" => "lien_dossier_demandeur",
5074     "idx" => "]",
5075     ));
5076 mbroquet 3730 $lien = array('lien_dossier_demandeur' => "",
5077     'petitionnaire_principal' => (($principal)?"t":"f"),
5078     'dossier' => $this->valF['dossier'],
5079     'demandeur' => $id);
5080 softime 8989 $lienAjout->ajouter($lien);
5081 mbroquet 3730 $lienAjout->__destruct();
5082     }
5083    
5084     /**
5085     * Fonction permettant de supprimer un lien
5086     * entre la table demande et demandeur
5087     **/
5088 softime 8989 function deleteLinkDossierDemandeur() {
5089 mbroquet 3730 // Suppression
5090     $sql = "DELETE FROM ".DB_PREFIXE."lien_dossier_demandeur ".
5091     "WHERE dossier='".$this->valF['dossier']."'";
5092     // Execution de la requete de suppression de l'objet
5093 softime 8989 $res = $this->f->db->query($sql);
5094 mbroquet 3730 // Logger
5095 softime 6565 $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
5096 mbroquet 3730 if ( database::isError($res)){
5097     die();
5098     }
5099     }
5100    
5101     /**
5102     * Methode de recupération des valeurs postées
5103     **/
5104     function getPostedValues() {
5105     // Récupération des demandeurs dans POST
5106 softime 6565 $types_demandeur = array(
5107     "petitionnaire_principal",
5108     "delegataire",
5109     "petitionnaire",
5110     "plaignant_principal",
5111     "plaignant",
5112     "contrevenant_principal",
5113     "contrevenant",
5114     "requerant_principal",
5115     "requerant",
5116     "avocat_principal",
5117     "avocat",
5118 softime 7067 "bailleur_principal",
5119     "bailleur",
5120 softime 6565 );
5121     foreach ($types_demandeur as $type) {
5122     if($this->f->get_submitted_post_value($type) !== null AND
5123     $this->f->get_submitted_post_value($type) != '') {
5124     $this->postedIdDemandeur[$type] = $this->f->get_submitted_post_value($type);
5125 mbroquet 3730 }
5126     }
5127     }
5128    
5129     /**
5130     * Méthode permettant de récupérer les id des demandeurs liés à la table
5131     * liée passée en paramètre
5132     *
5133     * @param string $from Table liée : "demande", "dossier", dossier_autorisation"
5134     * @param string $id Identifiant (clé primaire de la table liée en question)
5135     */
5136     function listeDemandeur($from, $id) {
5137 softime 6565
5138     // Si la donnée membre a déjà été remplie par un précédent appel à cette méthode,
5139     // on sort.
5140     if ($this->valIdDemandeur["petitionnaire_principal"] !== array() or
5141     $this->valIdDemandeur["delegataire"] !== array() or
5142     $this->valIdDemandeur["petitionnaire"] !== array() or
5143     $this->valIdDemandeur["plaignant_principal"] !== array() or
5144     $this->valIdDemandeur["plaignant"] !== array() or
5145     $this->valIdDemandeur["contrevenant_principal"] !== array() or
5146     $this->valIdDemandeur["contrevenant"] !== array() or
5147     $this->valIdDemandeur["requerant_principal"] !== array() or
5148     $this->valIdDemandeur["requerant"] !== array() or
5149     $this->valIdDemandeur["avocat_principal"] !== array() or
5150 softime 7067 $this->valIdDemandeur["avocat"] !== array() or
5151     $this->valIdDemandeur["bailleur_principal"] !== array() or
5152     $this->valIdDemandeur["bailleur"] !== array()) {
5153 softime 6565 return;
5154     }
5155    
5156 mbroquet 3730 // Récupération des demandeurs de la base
5157     $sql = "SELECT demandeur.demandeur,
5158     demandeur.type_demandeur,
5159     lien_".$from."_demandeur.petitionnaire_principal
5160     FROM ".DB_PREFIXE."lien_".$from."_demandeur
5161     INNER JOIN ".DB_PREFIXE."demandeur
5162     ON demandeur.demandeur=lien_".$from."_demandeur.demandeur
5163     WHERE ".$from." = '".$id."'";
5164     $res = $this->f->db->query($sql);
5165     $this->f->addToLog("listeDemandeur(): db->query(\"".$sql."\")", VERBOSE_MODE);
5166 softime 6565 $this->f->isDatabaseError($res);
5167    
5168 mbroquet 3730 // Stockage du résultat dans un tableau
5169     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
5170 softime 6565
5171     $demandeur_type = $row['type_demandeur'];
5172     if ($row['petitionnaire_principal'] == 't'){
5173     $demandeur_type .= "_principal";
5174 mbroquet 3730 }
5175 softime 6565 $this->valIdDemandeur[$demandeur_type][] = $row['demandeur'];
5176 mbroquet 3730 }
5177     }
5178    
5179     /**
5180     * Récupère la liste des contraintes d'un dossier.
5181     *
5182 softime 4740 * @param string $dossier Identifiant du dossier.
5183     * @param boolean $for_di_view Liste avec condition affichage DI.
5184     *
5185 mbroquet 3730 * @return object Résultat de la requête
5186     */
5187 softime 4740 function getListContrainte($dossier, $for_di_view = true) {
5188 mbroquet 3730
5189     // Select
5190     $select = "SELECT dossier_contrainte.dossier_contrainte as dossier_contrainte_id,
5191     dossier_contrainte.texte_complete as dossier_contrainte_texte,
5192     dossier_contrainte.reference as dossier_contrainte_reference,
5193     contrainte.libelle as contrainte_libelle,
5194     contrainte.nature as contrainte_nature,
5195     contrainte.texte as contrainte_texte,
5196     contrainte.reference as contrainte_reference,
5197     lower(contrainte.groupe) as contrainte_groupe,
5198     lower(contrainte.sousgroupe) as contrainte_sousgroupe ";
5199    
5200     // From
5201     $from = " FROM ".DB_PREFIXE."contrainte
5202     LEFT JOIN ".DB_PREFIXE."dossier_contrainte
5203     ON dossier_contrainte.contrainte = contrainte.contrainte ";
5204    
5205     // Where
5206     $where = " WHERE dossier_contrainte.dossier = '".$dossier."' ";
5207    
5208 softime 4740 // Si les contraintes sont listées pour être affichées dans le DI
5209     if ($for_di_view === true) {
5210     // Si le paramètre "option_contrainte_di" est défini
5211     if ($this->f->getParameter('option_contrainte_di') != 'aucun') {
5212     // Ajoute la condition
5213     $where .= $this->f->traitement_condition_contrainte(
5214     $this->f->getParameter('option_contrainte_di'));
5215     }
5216 mbroquet 3730 }
5217    
5218     // Tri
5219     $tri = " ORDER BY contrainte_groupe DESC, contrainte_sousgroupe,
5220     contrainte.no_ordre, contrainte.libelle ";
5221    
5222     // Requête SQL
5223     $sql = $select.$from.$where.$tri;
5224     $res = $this->f->db->query($sql);
5225     $this->f->addToLog("listContrainte(): db->query(\"".$sql."\");", VERBOSE_MODE);
5226     $this->f->isDatabaseError($res);
5227    
5228     // Retourne le résultat
5229     return $res;
5230     }
5231    
5232     /**
5233     * Ajout de la liste des contraintes et des demandeurs
5234     */
5235     function formSpecificContent($maj) {
5236    
5237 softime 8477 // Récupère le CRUD
5238     $crud = $this->get_action_crud($this->getParameter("maj"));
5239    
5240     // Les contenus spécifiques ne sont pas affichés en cas de suppression
5241     if ($crud === 'delete') {
5242     return;
5243     }
5244    
5245 mbroquet 3730 /**
5246     * Liste des contraintes
5247     */
5248     //
5249     $listContrainte = $this->getListContrainte($this->getVal('dossier'));
5250    
5251     // Si le dossier possède des contraintes
5252     if ($listContrainte->numRows() != 0) {
5253    
5254     // Affiche du fieldset
5255     printf("<div id=\"liste_contrainte\" class=\"demande_hidden_bloc\">");
5256     printf("<fieldset class=\"cadre ui-corner-all ui-widget-content col_12 startClosed\">");
5257     printf(" <legend class=\"ui-corner-all ui-widget-content ui-state-active\"
5258     id =\"fieldset_contraintes_liees\">"
5259     ._("dossier_contrainte")."</legend>");
5260     printf("<div class=\"fieldsetContent\" style=\"display: none;\">");
5261    
5262     // Entête pour le groupe
5263     $groupeHeader = "
5264     <div class='dossier_contrainte_groupe'>
5265     <div class='dossier_contrainte_groupe_header'>
5266     <span class='name'>
5267     %s
5268     </span>
5269     </div>
5270     ";
5271    
5272     // Entête pour le sous-groupe
5273     $sousgroupeHeader = "
5274     <div class='dossier_contrainte_sousgroupe'>
5275     <div class='dossier_contrainte_sousgroupe_header'>
5276     <span class='name'>
5277     %s
5278     </span>
5279     </div>
5280     ";
5281    
5282     // Titres des colonnes
5283     $tableHeader = "
5284     <thead>
5285     <tr class='ui-tabs-nav ui-accordion ui-state-default tab-title'>
5286     <th class='title col-0 firstcol contrainte_th_texte_complete'>
5287     <span class='name'>
5288     "._('texte_complete')."
5289     </span>
5290     </th>
5291     <th class='title col-1 contrainte_th_reference'>
5292     <span class='name'>
5293     "._('reference')."
5294     </span>
5295     </th>
5296     <th class='title col-2 contrainte_th_nature'>
5297     <span class='name'>
5298     "._('nature')."
5299     </span>
5300     </th>
5301     </tr>
5302     </thead>
5303     ";
5304    
5305     // Ligne de données
5306     $line = "
5307     <tr class='tab-data %s'>
5308     <td class='col-0 firstcol contrainte_th_texte_complete'>
5309     %s
5310     </td>
5311     <td class='col-1 contrainte_th_reference'>
5312     %s
5313     </td>
5314     <td class='col-2 contrainte_th_nature'>
5315     %s
5316     </td>
5317     ";
5318    
5319     // Sauvegarde des données pour les comparer
5320     $lastRow = array();
5321     $lastRow['contrainte_groupe'] = 'empty';
5322     $lastRow['contrainte_sousgroupe'] = 'empty';
5323    
5324     // Tant qu'il y a des résultats
5325     while($row = &$listContrainte->fetchRow(DB_FETCHMODE_ASSOC)) {
5326     // Si l'identifiant du groupe de la contrainte présente et
5327     // celle d'avant est différent
5328     if ($row['contrainte_groupe'] != $lastRow['contrainte_groupe']) {
5329    
5330     // Si l'identifiant du groupe d'avant est vide
5331     if ($lastRow['contrainte_groupe'] != 'empty') {
5332     // Ferme le tableau
5333     printf("</table>");
5334     // Ferme le div
5335     printf("</div>");
5336     // Ferme le div
5337     printf("</div>");
5338     }
5339    
5340     // Affiche le header du groupe
5341     printf($groupeHeader, $row['contrainte_groupe']);
5342     }
5343    
5344     // Si l'identifiant du sous-groupe de la contrainte présente et
5345     // celle d'avant est différent
5346     // Ou qu'ils soient identique mais n'appartiennent pas au même groupe
5347     if ($row['contrainte_sousgroupe'] != $lastRow['contrainte_sousgroupe']
5348     || ($row['contrainte_sousgroupe'] == $lastRow['contrainte_sousgroupe']
5349     && $row['contrainte_groupe'] != $lastRow['contrainte_groupe'])) {
5350    
5351     //
5352     if($row['contrainte_groupe'] == $lastRow['contrainte_groupe']) {
5353     // Si l'identifiant de la sous-groupe d'avant est vide
5354     if ($lastRow['contrainte_sousgroupe'] != 'empty') {
5355     // Ferme le tableau
5356     printf("</table>");
5357     // Ferme le div
5358     printf("</div>");
5359     }
5360     }
5361    
5362     // Affiche le header du sous-groupe
5363     printf($sousgroupeHeader, $row['contrainte_sousgroupe']);
5364    
5365     // Ouvre le tableau
5366     printf("<table id='sousgroupe_".$row['contrainte_sousgroupe']."' class='tab-tab dossier_contrainte_view'>");
5367    
5368     // Affiche le header des données
5369     printf($tableHeader);
5370    
5371     // Définis le style des lignes
5372     $style = 'odd';
5373     }
5374    
5375     // Si toujours dans la même groupe et même sous-groupe,
5376     // on change le style de la ligne
5377     if ($row['contrainte_groupe'] == $lastRow['contrainte_groupe']
5378     && $row['contrainte_sousgroupe'] == $lastRow['contrainte_sousgroupe']) {
5379     // Définis le style
5380     $style = ($style=='even')?'odd':'even';
5381     }
5382    
5383     // Affiche "Oui" ou "Non" pour le bouléen
5384     if ($row['dossier_contrainte_reference'] == 1
5385     || $row['dossier_contrainte_reference'] == "t"
5386     || $row['dossier_contrainte_reference'] == "Oui") {
5387     //
5388     $contrainte_reference = "Oui";
5389     } else {
5390     //
5391     $contrainte_reference = "Non";
5392     }
5393    
5394     // Affiche les données
5395     printf($line, $style,
5396     $row['dossier_contrainte_texte'],
5397     $contrainte_reference,
5398     $row['contrainte_nature']
5399     );
5400    
5401     // Sauvegarde les données
5402     $lastRow['contrainte_groupe'] = $row['contrainte_groupe'];
5403     $lastRow['contrainte_sousgroupe'] = $row['contrainte_sousgroupe'];
5404    
5405     }
5406     // Ferme le tableau
5407     printf("</table>");
5408     // Ferme le sous-groupe
5409     printf("</div>");
5410     // Ferme le groupe
5411     printf("</div>");
5412    
5413     printf("</div>");
5414    
5415     printf("<div class=\"visualClear\"></div>");
5416     // Ferme le fieldset content
5417     printf("</div>");
5418     printf("</fieldset>");
5419     }
5420     /**
5421     * Fin Liste des contraintes
5422     */
5423    
5424     /**
5425     * Liste des demandeurs
5426     */
5427 softime 6565 // Tableau des demandeurs selon le contexte
5428     $listeDemandeur = $this->valIdDemandeur;
5429     /**
5430     * Gestion du bloc des demandeurs
5431     */
5432     // Si le mode est (modification ou suppression ou consultation) ET que
5433     // le formulaire n'est pas correct (c'est-à-dire que le formulaire est
5434     // actif)
5435     if ($this->correct !== true AND
5436 softime 7996 $this->getParameter('validation') == 0 AND
5437     $this->getParameter("maj") != 0) {
5438 softime 6565 // Alors on récupère les demandeurs dans la table lien pour
5439     // affectation des résultats dans $this->valIdDemandeur
5440     $this->listeDemandeur("dossier", $this->getval($this->clePrimaire));
5441     $listeDemandeur = $this->valIdDemandeur;
5442     }
5443 mbroquet 3730
5444 softime 6565 // Récupération des valeurs postées
5445 softime 7996 if ($this->getParameter('validation') != 0) {
5446 softime 6565 $listeDemandeur = $this->postedIdDemandeur;
5447     }
5448    
5449     // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
5450     // correct (c'est-à-dire que le formulaire est actif)
5451     if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
5452     // Alors on positionne le marqueur linkable a true qui permet
5453     // d'afficher ou non les actions de gestion des demandeurs
5454 mbroquet 3730 $linkable = true;
5455     } else {
5456 softime 6565 // Sinon on positionne le marqueur linkable a false qui permet
5457     // d'afficher ou non les actions de gestion des demandeurs
5458 mbroquet 3730 $linkable = false;
5459     }
5460 softime 6565 $affichage_form = $this->get_type_affichage_formulaire();
5461     // Pour les dossiers contentieux, il faut un droit spécifique pour visualiser le
5462     // fieldset "Demandeurs"
5463 softime 7067 if (($affichage_form === 'ADS' || $affichage_form === 'DPC')
5464 softime 6565 OR ($affichage_form === 'CTX RE' AND $this->f->isAccredited('dossier_contentieux_recours_afficher_demandeurs') === true)
5465     OR ($affichage_form === 'CTX IN' AND $this->f->isAccredited('dossier_contentieux_infractions_afficher_demandeurs') === true)) {
5466 mbroquet 3730
5467 softime 6565 // Conteneur de la listes des demandeurs
5468     echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">";
5469     echo "<fieldset id=\"fieldset-form-dossier_instruction-demandeur\" class=\"cadre ui-corner-all ui-widget-content startClosed\">";
5470     echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">"
5471     ._("Demandeurs")."</legend>";
5472     echo "<div class=\"fieldsetContent\" style=\"display: none;\">";
5473 mbroquet 3730
5474 softime 6565
5475     // Pour les DI avec DA visible, dans tous les modes excepté en ajout et si l'option d'accès au
5476     // portail citoyen est activée
5477 mbroquet 3730 $inst_da = $this->get_inst_dossier_autorisation();
5478 softime 6565 if ($this->getParameter("maj") != 0
5479     && $this->f->is_option_citizen_access_portal_enabled() === true
5480     && $inst_da->is_dossier_autorisation_visible() === true) {
5481     // Instance du dossier d'autorisation
5482     //
5483     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'));
5484     }
5485     // Sélection des demandeur à afficher en fonction du paramétrage du type
5486     // du dossier d'autorisation.
5487     switch ($affichage_form) {
5488     case 'ADS':
5489     $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
5490     break;
5491     case 'CTX RE':
5492     $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
5493     $this->display_demandeur_requerant_avocat($listeDemandeur);
5494     break;
5495     case 'CTX IN':
5496     $this->display_demandeur_plaignant_contrevenant($listeDemandeur);
5497     break;
5498 softime 7067 case 'DPC':
5499     $this->display_demandeur_petitionnaire_delegataire($listeDemandeur);
5500     $this->display_demandeur_petitionnaire_delegataire_bailleur($listeDemandeur);
5501     break;
5502 softime 6565 }
5503 mbroquet 3730
5504     }
5505    
5506     echo "</fieldset>";
5507     echo "</div>";
5508     /**
5509     * Fin liste des demandeurs
5510     */
5511 fmichon 4708
5512     /**
5513     * Interface avec le référentiel ERP.
5514     *
5515     * On affiche le message uniquement si le dossier est connecté.
5516     */
5517 softime 6565 if ($this->getParameter('maj') == 3 && $this->is_connected_to_referentiel_erp() === true) {
5518 fmichon 4708 //
5519     printf(
5520     '<div class="col_12">
5521     Ce dossier est connecté au référentiel ERP.
5522     </div>'
5523     );
5524     }
5525    
5526 mbroquet 3730 }
5527    
5528     /**
5529 softime 6565 * Affiche le bloc d'affichage des demandeurs pour dossiers ADS avec actions.
5530     *
5531     * @param array $listeDemandeur Liste des demandeurs.
5532     */
5533     function display_demandeur_petitionnaire_delegataire($listeDemandeur) {
5534    
5535     // Affichage du bloc pétitionnaire principal / délégataire
5536     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
5537     echo "<div id=\"petitionnaire_principal_delegataire\">";
5538     // Affichage de la synthèse du pétitionnaire principal
5539     $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire_principal");
5540     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
5541     echo "<div id=\"delegataire\">";
5542     // Affichage de la synthèse du délégataire
5543     $this->displaySyntheseDemandeur($listeDemandeur, "delegataire");
5544     echo "</div>";
5545     echo "<div class=\"both\"></div>";
5546     echo "</div>";
5547     // Bloc des pétitionnaires secondaires
5548     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
5549     echo "<div id=\"listePetitionnaires\">";
5550     $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire");
5551     echo "</div>";
5552     }
5553    
5554     /**
5555     * Affiche le bloc d'affichage des demandeurs pour dossiers CTX recours
5556     * avec actions.
5557     *
5558     * @param array $listeDemandeur Liste des demandeurs.
5559     */
5560     function display_demandeur_plaignant_contrevenant($listeDemandeur) {
5561    
5562     echo "<div id=\"plaignant_contrevenant\">";
5563     // Affichage du bloc contrevenant
5564     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
5565     echo "<div id=\"listeContrevenants\" class=\"col_12\">";
5566     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
5567     echo "<div id=\"contrevenant_principal\">";
5568     // Affichage de la synthèse
5569     $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant_principal");
5570     echo "</div>";
5571     echo "<div id=\"listeAutresContrevenants\">";
5572     // Affichage de la synthèse
5573     $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant");
5574     echo "</div>";
5575     echo "</div>";
5576     // Affichage du bloc plaignant
5577     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
5578     echo "<div id=\"listePlaignants\" class=\"col_12\">";
5579     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
5580     echo "<div id=\"plaignant_principal\">";
5581     // Affichage de la synthèse
5582     $this->displaySyntheseDemandeur($listeDemandeur, "plaignant_principal");
5583     echo "</div>";
5584     echo "<div id=\"listeAutresPlaignants\">";
5585     $this->displaySyntheseDemandeur($listeDemandeur, "plaignant");
5586     echo "</div>";
5587     echo "</div>";
5588     echo "</div>";
5589    
5590     }
5591    
5592     /**
5593     * Affiche le bloc d'affichage des demandeurs pour dossiers CTX infraction
5594     * avec actions.
5595     *
5596     * @param array $listeDemandeur Liste des demandeurs.
5597     */
5598     function display_demandeur_requerant_avocat($listeDemandeur) {
5599     echo "<div id=\"requerant_avocat\">";
5600     // Affichage du bloc requérant
5601     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
5602     echo "<div id=\"listeRequerants\" class=\"col_12\">";
5603     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
5604     echo "<div id=\"requerant_principal\">";
5605     // Affichage de la synthèse
5606     $this->displaySyntheseDemandeur($listeDemandeur, "requerant_principal");
5607     echo "</div>";
5608     echo "<div id=\"listeAutresRequerants\">";
5609     $this->displaySyntheseDemandeur($listeDemandeur, "requerant");
5610     echo "</div>";
5611     echo "</div>";
5612     // Affichage du bloc avocat
5613     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
5614     echo "<div id=\"listeAvocat\" class=\"col_12\">";
5615     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
5616     echo "<div id=\"avocat_principal\">";
5617     $this->displaySyntheseDemandeur($listeDemandeur, "avocat_principal");
5618     echo "</div>";
5619     echo "<div id=\"listeAutresAvocats\">";
5620     $this->displaySyntheseDemandeur($listeDemandeur, "avocat");
5621     echo "</div>";
5622     echo "</div>";
5623     echo "</div>";
5624     echo "</fieldset>";
5625     // Champ flag permettant de récupérer la valeur de l'option sig pour
5626     // l'utiliser en javascript, notamment lors du chargement de l'interface
5627     // pour les références cadastrales
5628     // XXX Si un widget pour les références cadastrales existait, il n'y
5629     // aurait pas besoin de faire cela
5630     echo "<input id='option_sig' type='hidden' value='".$this->f->getParameter("option_sig")."' name='option_sig'>";
5631     echo "</div>";
5632     }
5633    
5634    
5635 softime 7067 /**
5636     * Affiche le bloc d'affichage des demandeurs pour dossiers DPC avec actions.
5637     *
5638     * @param array $listeDemandeur Liste des demandeurs.
5639     */
5640     function display_demandeur_petitionnaire_delegataire_bailleur($listeDemandeur) {
5641    
5642     // Affichage du bloc pétitionnaire principal / délégataire / bailleur
5643     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
5644     echo "<div id=\"petitionnaire_principal_delegataire_bailleur\">";
5645     // Doit être utilisé avec la div petitionnaire_principal_delegataire
5646     echo "<div id=\"listeBailleurs\" class=\"col_12\">";
5647     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
5648     echo "<div id=\"bailleur_principal\">";
5649     // Affichage de la synthèse
5650     $this->displaySyntheseDemandeur($listeDemandeur, "bailleur_principal");
5651     echo "</div>";
5652     echo "<div id=\"listeAutresBailleurs\">";
5653     $this->displaySyntheseDemandeur($listeDemandeur, "bailleur");
5654     echo "</div>";
5655     echo "</div>";
5656     echo "</div>";
5657     }
5658    
5659    
5660 softime 6565 function displaySyntheseDemandeur($listeDemandeur, $type) {
5661     // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
5662     // correct (c'est-à-dire que le formulaire est actif)
5663     if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
5664     // Alors on positionne le marqueur linkable a true qui permet
5665     // d'afficher ou non les actions de gestion des demandeurs
5666     $linkable = true;
5667     } else {
5668     // Sinon on positionne le marqueur linkable a false qui permet
5669     // d'afficher ou non les actions de gestion des demandeurs
5670     $linkable = false;
5671     }
5672     // Récupération du type de demandeur pour l'affichage
5673     switch ($type) {
5674     case 'petitionnaire_principal':
5675     $legend = _("Petitionnaire principal");
5676     break;
5677    
5678     case 'delegataire':
5679     $legend = _("Autre correspondant");
5680     break;
5681    
5682     case 'petitionnaire':
5683     $legend = _("Petitionnaire");
5684     break;
5685    
5686     case 'contrevenant_principal':
5687     $legend = _("Contrevenant principal");
5688     break;
5689    
5690     case 'contrevenant':
5691     $legend = _("Autre contrevenant");
5692     break;
5693    
5694     case 'plaignant_principal':
5695     $legend = _("Plaignant principal");
5696     break;
5697    
5698     case 'plaignant':
5699     $legend = _("Autre plaignant");
5700     break;
5701    
5702     case 'requerant_principal':
5703     $legend = _("Requérant principal");
5704     break;
5705    
5706     case 'requerant':
5707     $legend = _("Autre requérant");
5708     break;
5709    
5710     case 'avocat_principal':
5711     $legend = _("Avocat principal");
5712     break;
5713    
5714     case 'avocat':
5715     $legend = _("Autre avocat");
5716     break;
5717 softime 7067
5718     case 'bailleur_principal':
5719     $legend = _("Bailleur principal");
5720     break;
5721    
5722     case 'bailleur':
5723     $legend = _("Bailleur");
5724     break;
5725 softime 6565 }
5726     foreach ($listeDemandeur[$type] as $demandeur_id) {
5727     $obj = str_replace('_principal', '', $type);
5728 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
5729     "obj" => $obj,
5730     "idx" => $demandeur_id,
5731     ));
5732 softime 6565 $demandeur -> afficherSynthese($type, $linkable);
5733     $demandeur -> __destruct();
5734     }
5735     // Si en édition de formulaire
5736     if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
5737     // Bouton d'ajout du avocat
5738     // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
5739     echo "<a id=\"add_".$type."\"
5740     class=\"om-form-button add-16\">".
5741     $legend.
5742     "</a>";
5743     }
5744     }
5745     /**
5746 mbroquet 3730 * Retourne le statut du dossier
5747     * @return string Le statut du dossier d'instruction
5748     */
5749     function getStatut(){
5750    
5751     $statut = '';
5752    
5753     $etat = $this->getVal("etat");
5754     //Si l'état du dossier d'instruction n'est pas vide
5755     if ( $etat != '' ){
5756    
5757     $sql = "SELECT statut
5758     FROM ".DB_PREFIXE."etat
5759     WHERE libelle ='".$etat."'";
5760 softime 8989 $statut = $this->f->db->getOne($sql);
5761 mbroquet 3730 $this->f->addToLog("getStatut() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
5762     if ( database::isError($statut, true)){
5763     die();
5764     }
5765     }
5766     return $statut;
5767     }
5768 softime 5024
5769 mbroquet 3730 /**
5770 softime 5024 * Retourne le dernier événement lié au dossier instancié
5771     *
5772     * @return [string] ID du dernier événement
5773     */
5774     function get_dernier_evenement() {
5775     $sql = "SELECT max(instruction)
5776     FROM ".DB_PREFIXE."instruction
5777     WHERE dossier = '".$this->getVal($this->clePrimaire)."'";
5778 softime 8989 $id_dernier_evenement = $this->f->db->getOne($sql);
5779 softime 5024 $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
5780     $this->f->isDatabaseError($id_dernier_evenement);
5781     return $id_dernier_evenement;
5782     }
5783    
5784     /**
5785 mbroquet 3730 * Retourne l'identifiant du rapport d'instruction lié du dossier
5786     * @return string L'identifiant du rapport d'instruction lié du dossier
5787     */
5788 softime 6565 function getRapportInstruction() {
5789 mbroquet 3730
5790 softime 7366 $rapport_instruction = null;
5791 mbroquet 3730
5792     $sql = "SELECT rapport_instruction
5793     FROM ".DB_PREFIXE."rapport_instruction
5794     WHERE dossier_instruction ='".$this->getVal($this->clePrimaire)."'";
5795 softime 8989 $rapport_instruction = $this->f->db->getOne($sql);
5796 softime 7366 $this->f->addToLog(__METHOD__."() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
5797     $this->f->isDatabaseError($rapport_instruction);
5798 mbroquet 3730
5799     return $rapport_instruction;
5800     }
5801    
5802     /**
5803     * Retourne l'identifiant des données techniques liées du dossier
5804     * @return string L'identifiant des données techniques liées du dossier
5805     */
5806 softime 6565 function getDonneesTechniques() {
5807 mbroquet 3730
5808     $donnees_techniques = '';
5809    
5810     $sql = "SELECT donnees_techniques
5811     FROM ".DB_PREFIXE."donnees_techniques
5812     WHERE dossier_instruction ='".$this->getVal($this->clePrimaire)."'";
5813 softime 8989 $donnees_techniques = $this->f->db->getOne($sql);
5814 mbroquet 3730 $this->f->addToLog("getStatut() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
5815     if ( database::isError($donnees_techniques)){
5816     die();
5817     }
5818    
5819     return $donnees_techniques;
5820     }
5821    
5822     /**
5823     * Surcharge du bouton retour afin de retourner sur la recherche de dossiers
5824     * d'instruction existant
5825     */
5826     function retour($premier = 0, $recherche = "", $tricol = "") {
5827    
5828     echo "\n<a class=\"retour\" ";
5829     echo "href=\"";
5830     //
5831     if($this->getParameter("idx_dossier") != "") {
5832 softime 7996 echo OM_ROUTE_TAB;
5833     echo "&obj=recherche_dossier";
5834 mbroquet 3730
5835     } else {
5836     if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
5837 softime 7996 echo OM_ROUTE_FORM;
5838 mbroquet 3730 } else {
5839 softime 7996 echo OM_ROUTE_TAB;
5840 mbroquet 3730 }
5841 softime 7996 echo "&obj=".$this->get_absolute_class_name();
5842 mbroquet 3730 if ($this->f->get_submitted_get_value('retourformulaire2') !== null && $this->f->get_submitted_get_value('retourformulaire2') != '') {
5843     echo "&retourformulaire=".$this->f->get_submitted_get_value('retourformulaire2');
5844     }
5845     if($this->getParameter("retour")=="form") {
5846 softime 6565 $idx = $this->getParameter("idx");
5847     echo "&amp;idx=".$idx;
5848 mbroquet 3730 echo "&amp;action=3";
5849     }
5850     }
5851     echo "&amp;premier=".$this->getParameter("premier");
5852     echo "&amp;tricol=".$this->getParameter("tricol");
5853     echo "&amp;advs_id=".$this->getParameter("advs_id");
5854     echo "&amp;valide=".$this->getParameter("valide");
5855     //
5856     echo "\"";
5857     echo ">";
5858     //
5859     echo _("Retour");
5860     //
5861     echo "</a>\n";
5862    
5863     }
5864    
5865     /**
5866     * Permet de modifier le fil d'Ariane
5867     * @param string $ent Fil d'Ariane
5868     * @param array $val Valeurs de l'objet
5869     * @param intger $maj Mode du formulaire
5870     */
5871     function getFormTitle($ent) {
5872    
5873     // Fil d'Ariane
5874 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
5875     switch ($type_aff_form) {
5876 softime 7067 case 'DPC':
5877 softime 6565 case 'ADS':
5878     $ent = _("instruction")." -> "._("dossiers d'instruction");
5879     break;
5880     case 'CTX IN':
5881     $ent = _("contentieux")." -> "._("infraction");
5882     break;
5883     case 'CTX RE':
5884     $ent = _("contentieux")." -> "._("recours");
5885     break;
5886     }
5887 mbroquet 3730
5888     // Si différent de l'ajout
5889     if($this->getParameter("maj") != 0) {
5890     // Si le champ dossier_libelle existe
5891     if (trim($this->getVal("dossier_libelle")) != '') {
5892     $ent .= " -> ".strtoupper($this->getVal("dossier_libelle"));
5893     }
5894 softime 6565 // Si contexte ADS
5895     if ($type_aff_form ==='ADS'
5896     && trim($this->getVal("dossier")) != '') {
5897 mbroquet 3730 $demandeur = $this->get_demandeur($this->getVal("dossier"));
5898     // Si le demandeur existe
5899     if (isset($demandeur) && trim($demandeur) != '') {
5900     $ent .= " ".mb_strtoupper($demandeur, "UTF-8");
5901     }
5902     }
5903     }
5904    
5905 softime 7996 // Change le fil d'Ariane pour l'interface de géolocalisation automatique des DI
5906     if ($this->getParameter("maj") == 126) {
5907     $ent = _("administration")." -> "._("options avancées")." -> "._("Géolocalisation des dossiers");
5908     }
5909    
5910 mbroquet 3730 // Change le fil d'Ariane
5911     return $ent;
5912     }
5913    
5914     /**
5915     * Récupère le demandeur du dossier
5916     * @return string Identifiant du dossier
5917     */
5918     private function get_demandeur($dossier) {
5919    
5920     // init de la variable de retour
5921     $demandeur = '';
5922    
5923     // Requête SQL
5924     $sql = "SELECT
5925     CASE WHEN demandeur.qualite='particulier'
5926     THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
5927     ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
5928     END as demandeur
5929     FROM ".DB_PREFIXE."dossier
5930     LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur
5931     ON lien_dossier_demandeur.dossier=dossier.dossier
5932     AND lien_dossier_demandeur.petitionnaire_principal IS TRUE
5933     LEFT JOIN ".DB_PREFIXE."demandeur
5934     ON lien_dossier_demandeur.demandeur=demandeur.demandeur
5935     WHERE dossier.dossier ='".$dossier."'";
5936 softime 8989 $demandeur = $this->f->db->getOne($sql);
5937 mbroquet 3730 $this->f->addToLog("get_demandeur() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
5938     database::isError($demandeur);
5939    
5940     // Résultat retourné
5941     return $demandeur;
5942     }
5943    
5944     /**
5945     * Récupère la durée de validité
5946     * @param string $dossier_autorisation Identifiant dossier d'autorisation
5947     * @return intger Durée de validité
5948     */
5949     function get_duree_validite($dossier_autorisation) {
5950    
5951     // init de la variable de retour
5952     $duree_validite = "";
5953    
5954     // Récupère le numéro de version
5955     $numeroVersion = $this->getNumeroVersion($dossier_autorisation);
5956    
5957     // Si c'est l'ajout du dossier initial
5958     if ($numeroVersion < 0) {
5959    
5960     // Récupération de la duree de validite depuis la table
5961     // "dossier_autorisation_type_detaille"
5962     $sql = "SELECT duree_validite_parametrage
5963     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
5964     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
5965     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
5966     WHERE dossier_autorisation.dossier_autorisation='".$dossier_autorisation."'";
5967 softime 8989 $duree_validite = $this->f->db->getOne($sql);
5968 mbroquet 3730 $this->f->addToLog("get_duree_validite(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
5969     database::isError($duree_validite);
5970    
5971     } else {
5972    
5973     // Récupération de la duree de validite depuis le P0
5974     $sql = "SELECT duree_validite
5975     FROM ".DB_PREFIXE."dossier
5976     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
5977     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
5978     WHERE dossier_autorisation.dossier_autorisation='".$dossier_autorisation."'
5979     AND dossier.version = 0";
5980 softime 8989 $duree_validite = $this->f->db->getOne($sql);
5981 mbroquet 3730 $this->f->addToLog("get_duree_validite(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
5982     database::isError($duree_validite);
5983     }
5984    
5985     // retourne le résultat
5986     return $duree_validite;
5987    
5988     }
5989    
5990     /**
5991     * Ajoute les parcelles du dossier passé en paramètre et met à jour le
5992     * quartier du dossier.
5993     * @param string $dossier Identifiant du dossier
5994     * @param string $terrain_references_cadastrales Références cadastrales du
5995     * dossier
5996     */
5997     function ajouter_dossier_parcelle($dossier, $terrain_references_cadastrales) {
5998    
5999     // Parse les parcelles
6000     $list_parcelles = $this->f->parseParcelles($terrain_references_cadastrales, $this->getVal('om_collectivite'));
6001    
6002     // A chaque parcelle une nouvelle ligne est créée dans la table
6003     // dossier_parcelle
6004     foreach ($list_parcelles as $parcelle) {
6005    
6006     // Instance de la classe dossier_parcelle
6007 softime 7996 $dossier_parcelle = $this->f->get_inst__om_dbform(array(
6008     "obj" => "dossier_parcelle",
6009     "idx" => "]",
6010     ));
6011 mbroquet 3730
6012     // Valeurs à sauvegarder
6013     $value = array(
6014     'dossier_parcelle' => '',
6015     'dossier' => $dossier,
6016     'parcelle' => '',
6017     'libelle' => $parcelle['quartier']
6018     .$parcelle['section']
6019     .$parcelle['parcelle']
6020     );
6021    
6022     // Ajout de la ligne
6023 softime 8989 $dossier_parcelle->ajouter($value);
6024 mbroquet 3730 }
6025    
6026     // Si la liste des parcelles n'est pas vide
6027     if (count($list_parcelles) > 0) {
6028    
6029     // Récupère le code impôt de la première référence cadastrale
6030     $quartier_code_impots = $list_parcelles[0]['quartier'];
6031     // Récupère l'identifiant du quartier
6032     $quartier = $this->get_quartier_by_code_impot($quartier_code_impots);
6033    
6034     // Ajoute le quartier au dossier
6035     $this->modifier_quartier_dossier($dossier, $quartier);
6036     }
6037     }
6038    
6039     /**
6040     * Supprime les parcelles du dossier passé en paramètre et met à jour le
6041     * quartier du dossier.
6042     * @param string $dossier Identifiant du dossier
6043     */
6044     function supprimer_dossier_parcelle($dossier) {
6045    
6046     // Suppression des parcelles du dossier
6047     $sql = "DELETE FROM ".DB_PREFIXE."dossier_parcelle
6048     WHERE dossier='".$dossier."'";
6049 softime 8989 $res = $this->f->db->query($sql);
6050 mbroquet 3730 $this->addToLog("supprimer_dossier_parcelle() db->query(\"".$sql."\");",
6051     VERBOSE_MODE);
6052     database::isError($res);
6053    
6054     // Supprime le quartier dans dossier
6055     $this->modifier_quartier_dossier($dossier);
6056     }
6057    
6058     /**
6059     * Modifie le quartier au dossier.
6060     * @param string $dossier Numéro du dossier
6061     * @param integer $quartier Identifiant du quartier
6062     */
6063     function modifier_quartier_dossier($dossier, $quartier = null) {
6064    
6065     // Valeurs à mettre à jour
6066     $valF = array();
6067     $valF['quartier'] = $quartier;
6068    
6069     // Met à jour le quartier du dossier
6070     $cle = " dossier='".$dossier."'";
6071 softime 8989 $res = $this->f->db->autoExecute(
6072 mbroquet 3730 DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
6073     $this->addToLog("ajouter_quartier_dossier(): db->autoexecute(\""
6074     .DB_PREFIXE."dossier\", ".print_r($valF, true)
6075     .", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
6076     $this->f->isDatabaseError($res);
6077     }
6078    
6079     /**
6080     * Récupère le quartier par rapport au code impôts.
6081     * @param string $code_impots Code impôts du quartier
6082     *
6083     * @return integer Identifiant du quartier
6084     */
6085     function get_quartier_by_code_impot($code_impots) {
6086    
6087     // Initialisation résultat
6088     $quartier = null;
6089    
6090     // Si la condition n'est pas vide
6091     if ($code_impots != ""
6092     && $code_impots != null) {
6093    
6094     // Requête SQL
6095     $sql = "SELECT quartier
6096     FROM ".DB_PREFIXE."quartier
6097     WHERE code_impots = '".$code_impots."'";
6098     $this->f->addToLog(
6099     "get_quartier_by_code_impots() : db->getOne(\"".$sql."\")",
6100     VERBOSE_MODE);
6101 softime 8989 $quartier = $this->f->db->getOne($sql);
6102 mbroquet 3730 $this->f->isDatabaseError($quartier);
6103     }
6104    
6105     // Retourne résultat
6106     return $quartier;
6107     }
6108    
6109     /**
6110     * Méthode permettant d'ajouter les données techniques d'un DI.
6111     *
6112     * @param integer $id identifiant de la demande
6113     * @param array $val tableau de valeurs postées via le formulaire
6114     *
6115     * @return boolean false si erreur
6116     */
6117 softime 8989 function ajoutDonneesTechniquesDI($id, $val) {
6118 mbroquet 3730
6119     //On vérifie que le dossier d'autorisation a des données techniques
6120     $sql = "SELECT * "
6121     ."FROM ".DB_PREFIXE."donnees_techniques "
6122     ."WHERE dossier_autorisation = '".$this->valF["dossier_autorisation"]."'";
6123 softime 8989 $dtda = $this->f->db->query($sql);
6124 mbroquet 3730 $this->addToLog(__METHOD__."(): db->query(\"".$sql."\")", VERBOSE_MODE);
6125     if($this->f->isDatabaseError($dtda, true)){
6126     $this->f->addToLog(__METHOD__."() : ERROR - Erreur de base de données. Impossible d'ajouter les données techniques du dossier d'instruction.", DEBUG_MODE);
6127     return false;
6128     }
6129    
6130     //Si le dossier d'autorisation a des données techniques
6131     if ( $dtda->numrows() == 1 ){
6132     //
6133 softime 7996 $dtdi = $this->f->get_inst__om_dbform(array(
6134     "obj" => "donnees_techniques",
6135     "idx" => "]",
6136     ));
6137 mbroquet 3730 //Préparation des données
6138     $valF = $dtda->fetchRow(DB_FETCHMODE_ASSOC);
6139     //Suppression de l'identifiant
6140     $valF["donnees_techniques"] = null;
6141     // Ajout du numéro de dossier d'instruction
6142     $valF['dossier_instruction'] = $this->valF['dossier'];
6143     // Suppression du numéro de dossier d'autorisation
6144     $valF['dossier_autorisation'] = null;
6145     // Ajout des données techniques
6146 softime 8989 if($dtdi->ajouter($valF) === false) {
6147 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du dossier d'instruction.", DEBUG_MODE);
6148     return false;
6149     }
6150     }
6151     else {
6152     //Le dossier d'autorisation n'a pas de données techniques
6153     $this->f->addToLog(__METHOD__."() : ERROR - le DA n'a pas de données techniques.", DEBUG_MODE);
6154     return -1;
6155     }
6156    
6157     //
6158     return true;
6159     }
6160    
6161     /**
6162     * VIEW - contrainte.
6163     *
6164     * Vue des contraintes du dossier
6165     *
6166     * Cette vue permet de gérer le contenu de l'onglet "Contrainte(s)" sur un
6167     * dossier. Cette vue spécifique est nécessaire car l'ergonomie standard du
6168     * framework ne prend pas en charge ce cas.
6169     * C'est ici la vue spécifique des contraintes liées au dossier qui est
6170     * affichée directement au clic de l'onglet au lieu du soustab.
6171     *
6172     * L'idée est donc de simuler l'ergonomie standard en créant un container
6173     * et d'appeler la méthode javascript 'ajaxit' pour charger le contenu
6174     * de la vue visualisation de l'objet lié.
6175     *
6176     * @return void
6177     */
6178     function view_contrainte() {
6179     // Vérification de l'accessibilité sur l'élément
6180     $this->checkAccessibility();
6181     // Récupération des variables GET
6182     ($this->f->get_submitted_get_value('idxformulaire')!==null ? $idxformulaire =
6183     $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = "");
6184     ($this->f->get_submitted_get_value('retourformulaire')!==null ? $retourformulaire =
6185     $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = "");
6186 softime 6565 $obj = "dossier_contrainte";
6187     $type_aff_form = $this->get_type_affichage_formulaire();
6188     if ($type_aff_form === 'CTX RE' OR $type_aff_form === 'CTX IN') {
6189     $obj = "dossier_contrainte_contexte_ctx";
6190     }
6191 mbroquet 3730 // Objet à charger
6192     // Construction de l'url de sousformulaire à appeler
6193 softime 7996 $url = OM_ROUTE_SOUSFORM."&obj=".$obj;
6194 mbroquet 3730 $url .= "&action=4";
6195 softime 6929 $url .= "&idx=".$idxformulaire;
6196 mbroquet 3730 $url .= "&retourformulaire=".$retourformulaire;
6197     $url .= "&idxformulaire=".$idxformulaire;
6198     $url .= "&retour=form";
6199     // Affichage du container permettant le reffraichissement du contenu
6200     // dans le cas des action-direct.
6201     printf('
6202     <div id="sousform-href" data-href="%s">
6203     </div>',
6204     $url
6205     );
6206     // Affichage du container permettant de charger le retour de la requête
6207     // ajax récupérant le sous formulaire.
6208     printf('
6209     <div id="sousform-%s">
6210     </div>
6211     <script>
6212     ajaxIt(\'%s\', \'%s\');
6213     </script>',
6214     $obj,
6215     $obj,
6216     $url
6217     );
6218     }
6219    
6220     /**
6221     * Cette methode permet d'afficher le bouton de validation du formulaire
6222     *
6223     * @param integer $maj Mode de mise a jour
6224     * @return void
6225     */
6226     function bouton($maj) {
6227    
6228     if (!$this->correct
6229     && $this->checkActionAvailability() == true) {
6230     //
6231     switch($maj) {
6232     case 0 :
6233     $bouton = _("Ajouter");
6234     break;
6235     case 1 :
6236     $bouton = _("Modifier");
6237     break;
6238     case 2 :
6239     $bouton = _("Supprimer");
6240     break;
6241     default :
6242     // Actions specifiques
6243     if ($this->get_action_param($maj, "button") != null) {
6244     //
6245     $bouton = $this->get_action_param($maj, "button");
6246     } else {
6247     //
6248     $bouton = _("Valider");
6249     }
6250     break;
6251     }
6252     //
6253     $params = array(
6254     "value" => $bouton,
6255     "name" => "submit",
6256     "onclick"=>"return getDataFieldReferenceCadastrale();",
6257     );
6258     //
6259     $this->f->layout->display_form_button($params);
6260     }
6261    
6262     }
6263    
6264     /**
6265 softime 6929 * Récupère l'instance de paramétrage des taxes.
6266 mbroquet 3730 *
6267     * @param integer $taxe_amenagement Identifiant
6268     *
6269     * @return object
6270     */
6271     function get_inst_taxe_amenagement($taxe_amenagement = null) {
6272     //
6273 softime 6929 if ($this->inst_taxe_amenagement === null) {
6274 mbroquet 3730 //
6275 softime 6929 if ($taxe_amenagement === null) {
6276     //
6277 mbroquet 3730 $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($this->getVal('om_collectivite'));
6278 softime 6929
6279     // Si aucun paramétrage de taxe trouvé et que la collectivité
6280     // est mono
6281     if ($taxe_amenagement === null
6282     && $this->f->isCollectiviteMono($this->getVal('om_collectivite')) === true) {
6283     // Récupère la collectivité multi
6284     $om_collectivite_multi = $this->f->get_idx_collectivite_multi();
6285     //
6286     $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite_multi);
6287     }
6288    
6289     //
6290     if ($taxe_amenagement === null) {
6291     //
6292     return null;
6293     }
6294 mbroquet 3730 }
6295     //
6296 softime 7996 $this->inst_taxe_amenagement = $this->f->get_inst__om_dbform(array(
6297     "obj" => "taxe_amenagement",
6298     "idx" => $taxe_amenagement,
6299     ));
6300 mbroquet 3730 }
6301     //
6302     return $this->inst_taxe_amenagement;
6303     }
6304    
6305     /**
6306     * Récupère l'identifiant de la taxe d'aménagement par rapport à la collectivité.
6307     *
6308     * @param integer $om_collectivite La collectivité
6309     *
6310     * @return integer
6311     */
6312     function get_taxe_amenagement_by_om_collectivite($om_collectivite) {
6313 softime 6929 //
6314     $taxe_amenagement = null;
6315    
6316 mbroquet 3730 // Si la collectivité n'est pas renseigné
6317 softime 6929 if ($om_collectivite !== '' && $om_collectivite !== null) {
6318    
6319     // SQL
6320     $sql = "SELECT taxe_amenagement
6321     FROM ".DB_PREFIXE."taxe_amenagement
6322     WHERE om_collectivite = ".intval($om_collectivite);
6323     $taxe_amenagement = $this->f->db->getOne($sql);
6324     $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
6325     $this->f->isDatabaseError($taxe_amenagement);
6326 mbroquet 3730 }
6327    
6328     //
6329 softime 6929 return $taxe_amenagement;
6330 mbroquet 3730 }
6331    
6332     /**
6333     * [get_inst_donnees_techniques description]
6334     *
6335     * @param [type] $donnees_techniques [description]
6336     *
6337     * @return [type] [description]
6338     */
6339     function get_inst_donnees_techniques($donnees_techniques = null) {
6340     //
6341     if (is_null($this->inst_donnees_techniques)) {
6342     //
6343     if (is_null($donnees_techniques)) {
6344     $donnees_techniques = $this->getDonneesTechniques();
6345     }
6346     //
6347 softime 7996 $this->inst_donnees_techniques = $this->f->get_inst__om_dbform(array(
6348     "obj" => "donnees_techniques",
6349     "idx" => $donnees_techniques,
6350     ));
6351 mbroquet 3730 }
6352     //
6353     return $this->inst_donnees_techniques;
6354     }
6355    
6356    
6357     /**
6358     * Récupère l'instance du dossier d'autorisation.
6359     *
6360     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
6361     *
6362     * @return object
6363     */
6364 fmichon 4708 function get_inst_dossier_autorisation($dossier_autorisation = null) {
6365 mbroquet 3730 //
6366     return $this->get_inst_common("dossier_autorisation", $dossier_autorisation);
6367     }
6368    
6369    
6370     /**
6371     * Récupère l'instance du dossier d'autorisation, puis la clé d'accès au portail
6372     * citoyen associée à ce DA.
6373     *
6374     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
6375     *
6376     * @return string $cle_acces_citoyen si la clé d'accès existe
6377     * boolean false si la clé n'existe pas
6378     */
6379     protected function get_citizen_access_key($dossier_autorisation = null) {
6380     //
6381     $inst_da = $this->get_inst_dossier_autorisation($dossier_autorisation);
6382     // Récupération de la valeur de la clé d'accès
6383     $cle_acces_citoyen = $inst_da->getVal('cle_acces_citoyen');
6384     if ($cle_acces_citoyen === '' OR $cle_acces_citoyen === null) {
6385     return false;
6386     }
6387     return $cle_acces_citoyen;
6388     }
6389    
6390    
6391     /**
6392     * Récupère l'instance du type détaillé du dossier d'autorisation.
6393     *
6394     * @param integer $dossier_autorisation_type_detaille Identifiant
6395     *
6396     * @return object
6397     */
6398     function get_inst_dossier_autorisation_type_detaille($dossier_autorisation_type_detaille = null) {
6399     //
6400     if (is_null($this->inst_dossier_autorisation_type_detaille)) {
6401     //
6402     if (is_null($dossier_autorisation_type_detaille)) {
6403     //
6404     $dossier_autorisation = $this->get_inst_dossier_autorisation();
6405     //
6406     $dossier_autorisation_type_detaille = $dossier_autorisation->getVal('dossier_autorisation_type_detaille');
6407     }
6408     //
6409 softime 7996 $this->inst_dossier_autorisation_type_detaille = $this->f->get_inst__om_dbform(array(
6410     "obj" => "dossier_autorisation_type_detaille",
6411     "idx" => $dossier_autorisation_type_detaille,
6412     ));
6413 mbroquet 3730 }
6414     //
6415     return $this->inst_dossier_autorisation_type_detaille;
6416     }
6417    
6418     /**
6419     * Récupère l'instance du cerfa
6420     *
6421     * @param integer $cerfa Identifiant du cerfa
6422     *
6423     * @return object
6424     */
6425     function get_inst_cerfa($cerfa = null) {
6426     //
6427     if (is_null($this->inst_cerfa)) {
6428     //
6429     if (is_null($cerfa)) {
6430     //
6431     $dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
6432     //
6433     $cerfa = $dossier_autorisation_type_detaille->getVal('cerfa');
6434     }
6435     //
6436 softime 7996 $this->inst_cerfa = $this->f->get_inst__om_dbform(array(
6437     "obj" => "cerfa",
6438     "idx" => $cerfa,
6439     ));
6440 mbroquet 3730 }
6441     //
6442     return $this->inst_cerfa;
6443     }
6444    
6445     /**
6446     * CONDITION - is_user_from_allowed_collectivite.
6447     *
6448     * Cette condition permet de vérifier si l'utilisateur connecté appartient
6449     * à une collectivité autorisée : c'est-à-dire de niveau 2 ou identique à
6450     * la collectivité de l'enregistrement sur lequel on se trouve.
6451     *
6452     * @return boolean
6453     */
6454     function is_user_from_allowed_collectivite() {
6455    
6456     // Si l'utilisateur est de niveau 2
6457     if ($_SESSION["niveau"] == "2") {
6458     // Alors l'utilisateur fait partie d'une collectivité autorisée
6459     return true;
6460     }
6461    
6462     // L'utilisateur est donc de niveau 1
6463     // On vérifie donc si la collectivité de l'utilisateur est la même
6464     // que la collectivité de l'élément sur lequel on se trouve
6465     if ($_SESSION["collectivite"] === $this->getVal("om_collectivite")) {
6466     // Alors l'utilisateur fait partie d'une collectivité autorisée
6467     return true;
6468     }
6469    
6470     // L'utilisateur ne fait pas partie d'une collectivité autorisée
6471     return false;
6472     }
6473    
6474     /**
6475     * Création ou mise à jour du répertoire de numérisation.
6476     *
6477     * L'objet de cette méthode est la création ou la mise à jour de la date de
6478     * modification du répertoire de numérisation destiné à recevoir les pièces
6479     * numérisées pour un import automatique.
6480     * À chaque saisie d'une nouvelle demande dans openADS, le répertoire est
6481     * soit créé soit mis à jour pour être disponible en dehors d'openADS
6482     * (point de montage sur le serveur) pour permettre de déposer les pièces
6483     * numérisées directement depuis le copieur. À intervalle régulier, un
6484     * service vérifie le contenu de ces répertoire pour importer
6485     * automatiquement ces fichiers dans l'onglet 'Pièce(s)' du dossier
6486     * concerné.
6487     * La mise à jour de la date de modification est importante pour réaliser
6488     * la purge des répertoires vides sur la base de la date de la dernière
6489     * demande qui concerne le dossier.
6490     *
6491     * @return boolean
6492     */
6493     function create_or_touch_digitalization_folder() {
6494    
6495     // Nom du répertoire
6496     // Le répertoire créé possède comme nom le libellé du dossier avec
6497     // le suffixe séparé par un '.'. Exemple : PC0130551601234.P0
6498 nmeucci 4526 $separateur = '';
6499     if ($this->getSuffixe($this->getVal('dossier_instruction_type')) === 't') {
6500     $separateur = '.';
6501     }
6502    
6503 mbroquet 3730 $digitalization_folder_name = str_replace(
6504     $this->getVal("dossier_autorisation"),
6505 nmeucci 4526 $this->getVal("dossier_autorisation").$separateur,
6506 mbroquet 3730 $this->getVal($this->clePrimaire)
6507     );
6508    
6509     // Vérifie que l'option de numérisation des dossiers est désactivée
6510     if ($this->f->is_option_digitalization_folder_enabled() !== true) {
6511     //
6512     $this->addToLog(
6513     _("L'option de numerisation des dossiers n'est pas activee").".",
6514     DEBUG_MODE
6515     );
6516     return false;
6517     }
6518    
6519     // Vérifie le paramétrage du répertoire de numérisation
6520     if ($this->f->getParameter("digitalization_folder_path") === null) {
6521     //
6522     $this->addToLog(
6523     "Configuration du répertoire de numérisation incorrecte.",
6524     DEBUG_MODE
6525     );
6526     return false;
6527     }
6528    
6529     // Répertoire cible
6530     $root_folder_path = $this->f->getParameter("digitalization_folder_path");
6531    
6532     // Vérifie que le répertoire existe
6533     if (is_dir($root_folder_path) !== true) {
6534     //
6535     $this->addToLog(
6536     sprintf(
6537     "Le répertoire '%s' n'existe pas.",
6538     $root_folder_path
6539     ),
6540     DEBUG_MODE
6541     );
6542     return false;
6543     }
6544    
6545     // Répertoire des "à traiter"
6546     $todo_folder_path = $root_folder_path."Todo/";
6547    
6548     // Vérifie que le répertoire existe
6549     if (is_dir($todo_folder_path) !== true) {
6550     //
6551     $this->addToLog(
6552     sprintf(
6553     "Le répertoire '%s' n'existe pas.",
6554     $todo_folder_path
6555     ),
6556     DEBUG_MODE
6557     );
6558     return false;
6559     }
6560    
6561     // Répertoire de numérisation.
6562     $digitalization_folder_path = $todo_folder_path.$digitalization_folder_name;
6563    
6564     // Si le répertore existe déjà le répertoire n'est pas créé
6565     if (file_exists($digitalization_folder_path) == true) {
6566     // Mise à jour du répertoire
6567     if (touch($digitalization_folder_path) !== true) {
6568     // Si une erreur survient
6569     $this->addToLog(
6570     sprintf(
6571     "Erreur lors de la mise à jour du répertoire '%s'.",
6572     $digitalization_folder_path
6573     ),
6574     DEBUG_MODE
6575     );
6576     return false;
6577     }
6578     //
6579     return true;
6580     } else {
6581     // Création du répertoire
6582     if (mkdir($digitalization_folder_path) !== true) {
6583     //
6584     $this->addToLog(
6585     sprintf(
6586     "Erreur lors de la création du répertoire '%s'.",
6587     $digitalization_folder_path
6588     ),
6589     DEBUG_MODE
6590     );
6591     return false;
6592     }
6593     //
6594     return true;
6595     }
6596     }
6597    
6598 nmeucci 3876 /**
6599     * Récupère, convertit et retourne les logs de toutes les instructions
6600     *
6601     * @return array tableau indexé de logs
6602     */
6603     public function get_log_instructions() {
6604     $log_instructions = $this->getVal('log_instructions');
6605     // Gestion du premier log
6606 nmeucci 3887 if ($log_instructions === '') {
6607 nmeucci 3876 $log_instructions = json_encode(array());
6608     }
6609 nmeucci 3887 // Gestion du log invalide
6610     if(!$this->isJson($log_instructions)) {
6611     return false;
6612     }
6613 nmeucci 3876 return json_decode($log_instructions, true);
6614     }
6615    
6616     /**
6617     * Ajoute un log d'instruction aux logs existants
6618     *
6619     * @param array $log valeurs de l'instruction
6620     * @return bool vrai si traitement effectué avec succès
6621     */
6622     public function add_log_instructions($log) {
6623     // Begin
6624     $this->begin_treatment(__METHOD__);
6625     // Ajout du log
6626     $log_instructions = $this->get_log_instructions();
6627 nmeucci 3887 if ($log_instructions === false) {
6628     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
6629     return $this->end_treatment(__METHOD__, false);
6630     }
6631 nmeucci 3876 array_push($log_instructions, $log);
6632 nmeucci 3907 $log_instructions = json_encode($log_instructions);
6633 nmeucci 3876 // Mise à jour du DI
6634     $val = array("log_instructions"=>$log_instructions);
6635     $ret = $this->f->db->autoExecute(
6636     DB_PREFIXE."dossier",
6637     $val,
6638     DB_AUTOQUERY_UPDATE,
6639     "dossier = '".$this->getVal('dossier')."'");
6640     if (database::isError($ret, true)) {
6641     $this->erreur_db($ret->getDebugInfo(), $ret->getMessage(), 'dossier');
6642     $this->addToMessage(_("Erreur de base de donnees. Contactez votre administrateur."));
6643     return $this->end_treatment(__METHOD__, false);
6644     }
6645     return $this->end_treatment(__METHOD__, true);
6646     }
6647    
6648 nmeucci 3887 /**
6649     * Vérifie qu'une chaîne est au format json
6650     *
6651     * @param string $text chaîne à analyser
6652     * @return boolean vrai si formatée json
6653     */
6654     function isJson($text) {
6655     json_decode($text);
6656     return (json_last_error() == JSON_ERROR_NONE);
6657     }
6658    
6659 fmichon 4708 /**
6660     * TREATMENT - mark_as_connected_to_referentiel_erp.
6661     *
6662     * Cette méthode permet de positionner le marqueur
6663     * 'interface_referentiel_erp' à 'true'. Cela signifie que le dossier est
6664     * connecté au référentiel ERP.
6665     *
6666     * @return boolean
6667     */
6668     function mark_as_connected_to_referentiel_erp() {
6669     //
6670     $this->begin_treatment(__METHOD__);
6671     //
6672     $data = array("interface_referentiel_erp" => true, );
6673     // Exécution de la requête
6674     $res = $this->f->db->autoExecute(
6675     DB_PREFIXE.$this->table,
6676     $data,
6677     DB_AUTOQUERY_UPDATE,
6678     $this->getCle($this->getVal($this->clePrimaire))
6679     );
6680     // Logger
6681     $this->addToLog(
6682     __METHOD__."(): db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($data, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($this->getVal($this->clePrimaire))."\");",
6683     VERBOSE_MODE
6684     );
6685     //
6686     if ($this->f->isDatabaseError($res, true)) {
6687     // Appel de la methode de recuperation des erreurs
6688     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
6689     $this->correct = false;
6690     $this->addToLog(
6691     __METHOD__."(): Problème erreur lors de la mise à jour du dossier",
6692     DEBUG_MODE
6693     );
6694     // Termine le traitement
6695     return $this->end_treatment(__METHOD__, false);
6696     }
6697     //
6698     $this->addToMessage(_("Le dossier est désormais 'connecté avec le référentiel ERP'."));
6699     return $this->end_treatment(__METHOD__, true);
6700     }
6701 nmeucci 3887
6702 fmichon 4708 /**
6703     * CONDITION - is_connected_to_referentiel_erp.
6704     *
6705     * @return boolean
6706     */
6707     function is_connected_to_referentiel_erp() {
6708     //
6709     if ($this->getVal("interface_referentiel_erp") !== "t") {
6710     return false;
6711     }
6712     //
6713     return true;
6714     }
6715    
6716 nhaye 4777
6717 fmichon 4708 /**
6718 nhaye 4777 * Retourne les données techniques applicables au dossier courant, càd les données
6719     * techniques liées au dossier avec seulement les champs du CERFA associé au type de
6720     * dossier.
6721     *
6722     * @return array $donnees_techniques_applicables Tableau associatif contenant
6723     * seulement les données techniques
6724     * applicables au dossier.
6725     */
6726     public function get_donnees_techniques_applicables() {
6727    
6728     // Récupération de l'identifiant des données techniques liées au dossier
6729     $donnees_techniques = $this->getDonneesTechniques();
6730    
6731     $inst_donnees_techniques = $this->get_inst_common('donnees_techniques', $donnees_techniques);
6732     $donnees_techniques_applicables = $inst_donnees_techniques->get_donnees_techniques_applicables();
6733     //
6734     return $donnees_techniques_applicables;
6735    
6736     }
6737    
6738    
6739     /**
6740 fmichon 4708 * Retourne un tableau avec les données du dossier d'instruction.
6741     *
6742 jymadier 5275 * L'objectif est de mettre à disposition via un WS REST un ensemble
6743 fmichon 4708 * de données exploitable par une autre application.
6744     */
6745     function get_datas() {
6746    
6747     /**
6748     *
6749     */
6750 nhaye 4777
6751     $om_collectivite = $this->get_inst_common('om_collectivite', $this->getVal('om_collectivite'));
6752     $instructeur = $this->get_inst_common('instructeur', $this->getVal('instructeur'));
6753     $division = $this->get_inst_common('division', $this->getVal('division'));
6754     $dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
6755     $dossier_autorisation_type = $this->get_inst_common('dossier_autorisation_type', $dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
6756     $donnees_techniques = $this->get_donnees_techniques_applicables();
6757    
6758 fmichon 4708 //
6759     $datas = array(
6760     //
6761     "dossier_instruction" => $this->getVal($this->clePrimaire),
6762     //
6763     "dossier_autorisation" => $this->getVal("dossier_autorisation"),
6764     //
6765     "terrain_adresse_voie_numero" => $this->getVal("terrain_adresse_voie_numero"),
6766     "terrain_adresse_lieu_dit" => $this->getVal("terrain_adresse_lieu_dit"),
6767     "terrain_adresse_code_postal" => $this->getVal("terrain_adresse_code_postal"),
6768     "terrain_adresse_cedex" => $this->getVal("terrain_adresse_cedex"),
6769     "terrain_adresse_voie" => $this->getVal("terrain_adresse_voie"),
6770     "terrain_adresse_bp" => $this->getVal("terrain_adresse_bp"),
6771     "terrain_adresse_localite" => $this->getVal("terrain_adresse_localite"),
6772     "terrain_superficie" => $this->getVal("terrain_superficie"),
6773     //
6774     "references_cadastrales" => $this->f->parseParcelles($this->getVal("terrain_references_cadastrales"), $this->getVal('om_collectivite')),
6775 nhaye 4777 "dossier_autorisation_type" => $dossier_autorisation_type->getVal("libelle"),
6776     "dossier_autorisation_type_detaille" => $dossier_autorisation_type_detaille->getVal("libelle"),
6777     "collectivite" => $om_collectivite->getVal("libelle"),
6778     "instructeur" => $instructeur->getVal("nom"),
6779     "division" => $division->getVal("libelle"),
6780     "etat_dossier" => $this->getVal("etat"),
6781     "statut_dossier" => $this->getStatut(),
6782     "date_depot_initial" => $this->getVal("date_depot"),
6783     "date_limite_instruction" => $this->getVal("date_limite"),
6784     "date_decision" => $this->getVal("date_decision"),
6785     "enjeu_urbanisme" => $this->getVal("enjeu_urba") == 't' ? 'true' : 'false',
6786     "enjeu_erp" => $this->getVal("enjeu_erp") == 't' ? 'true' : 'false',
6787 fmichon 4708 );
6788    
6789 softime 6565 // Gestion des demandeurs.
6790 fmichon 4708 $this->listeDemandeur('dossier', $this->getVal($this->clePrimaire));
6791     //
6792 softime 6565 if (isset($this->valIdDemandeur["petitionnaire_principal"]) AND !empty($this->valIdDemandeur["petitionnaire_principal"])) {
6793 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
6794     "obj" => "petitionnaire",
6795     "idx" => $this->valIdDemandeur["petitionnaire_principal"][0],
6796     ));
6797 softime 6565 $datas["petitionnaire_principal"] = $demandeur->get_datas();
6798     $demandeur->__destruct();
6799     }
6800 fmichon 4708 //
6801     if (isset($this->valIdDemandeur["delegataire"]) && !empty($this->valIdDemandeur["delegataire"])) {
6802 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
6803     "obj" => "delegataire",
6804     "idx" => $this->valIdDemandeur["delegataire"][0],
6805     ));
6806 fmichon 4708 $datas["delegataire"] = $demandeur->get_datas();
6807     $demandeur->__destruct();
6808     }
6809     //
6810     if (isset($this->valIdDemandeur["petitionnaire"]) AND !empty($this->valIdDemandeur["petitionnaire"])) {
6811     $datas["autres_petitionnaires"] = array();
6812     foreach ($this->valIdDemandeur["petitionnaire"] as $petitionnaire) {
6813 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
6814     "obj" => "petitionnaire",
6815     "idx" => $petitionnaire,
6816     ));
6817 fmichon 4708 $datas["autres_petitionnaires"][] = $demandeur->get_datas();
6818     $demandeur->__destruct();
6819     }
6820     }
6821    
6822 nhaye 4777 // Tableau contenant le nom de chaque champ de données techniques à retourner
6823     $dt_a_afficher = array(
6824     "co_tot_log_nb",
6825     "co_cstr_exist",
6826     "co_uti_pers",
6827     "co_uti_vente",
6828     "co_uti_loc",
6829     "su_tot_shon_tot",
6830     "su_avt_shon_tot",
6831     "am_lot_max_nb",
6832     "am_empl_nb",
6833     );
6834    
6835 jymadier 4785 // Tableau associatif contenant les données techniques voulues
6836     $tab_donnees_techniques = array();
6837 nhaye 4777 foreach ($dt_a_afficher as $key) {
6838     // On ajoute le champ de données techniques dans le retour seulement s'il
6839     // existe dans $donnees_techniques (s'il est applicable au dossier)
6840 jymadier 4785 if (array_key_exists($key, $donnees_techniques) === true) {
6841 nhaye 4777 if ($donnees_techniques[$key] === 't') {
6842     $donnees_techniques[$key] = 'true';
6843     };
6844     if ($donnees_techniques[$key] === 'f') {
6845     $donnees_techniques[$key] = 'false';
6846     };
6847 jymadier 4785 $tab_donnees_techniques[$key] = $donnees_techniques[$key];
6848 nhaye 4777 };
6849     };
6850    
6851 jymadier 4785 $datas['donnees_techniques'] = $tab_donnees_techniques;
6852 fmichon 4708 /**
6853     *
6854     */
6855     //
6856     return $datas;
6857     }
6858    
6859 softime 6565 /**
6860     * CONDITION - is_class_dossier_corresponding_to_his_groupe
6861     *
6862     * Vérifie la correspondance groupe/classe du dossier instancié.
6863     *
6864     * @param string $classe
6865     * @return boolean
6866     */
6867     protected function is_class_dossier_corresponding_to_type_form($classe) {
6868     $type_form = $this->get_type_affichage_formulaire();
6869     switch ($type_form) {
6870 softime 7067 case 'DPC';
6871 softime 6565 case 'ADS':
6872     if ($this->f->starts_with($classe, 'dossier_instruction') === true) {
6873     return true;
6874     }
6875     return false;
6876     case 'CTX RE':
6877     if ($this->f->ends_with($classe, '_recours') === true) {
6878     return true;
6879     }
6880     return false;
6881     case 'CTX IN':
6882     if ($this->f->ends_with($classe, '_infractions') === true) {
6883     return true;
6884     }
6885     return false;
6886     default:
6887     return false;
6888     }
6889     }
6890 nhaye 4777
6891 softime 6565
6892 softime 6272 /**
6893 softime 6565 * CONDITION - check_context
6894     *
6895     * Vérifie la correspondance groupes dossier/utilisateur.
6896     * Vérifie l'accès aux dossiers confidentiels.
6897     * Vérifie la correspondance groupe/classe.
6898     *
6899     * @return boolean
6900     */
6901     public function check_context() {
6902     // Le dossier doit être un objet valide
6903     $id = $this->getVal($this->clePrimaire);
6904     if ($id === 0 OR $id === '0' OR $id === '' OR $id === ']') {
6905     return false;
6906     }
6907    
6908     // Vérification que l'utilisateur a accès au dossier
6909     if ($this->can_user_access_dossier() === false) {
6910     return false;
6911     }
6912     // Vérification que la classe métier instanciée est adéquate.
6913 softime 7996 return $this->is_class_dossier_corresponding_to_type_form($this->get_absolute_class_name());
6914 softime 6565 }
6915    
6916     /**
6917     * VIEW - redirect.
6918     *
6919     * Cette vue est appelée lorsque l'on souhaite consulter un dossier dont on ne connaît pas le groupe.
6920     * Ce fonctionnement est nécessaire car les classes métier filles de 'dossier' sont relatives à ce groupe.
6921     *
6922     * Par exemple, depuis l'onglet "Dossiers Liés" du DI, le listing ne permet pas d'instancier chaque résultat
6923     * et par conséquent on n'a pas accès au groupe du dossier. L'action tableau consulter y est surchargée afin
6924     * d'amener à cette vue qui se charge de faire la redirection adéquate.
6925     *
6926     * @return void
6927     */
6928     public function redirect() {
6929     // Redirection vers la classe métier adéquate
6930     $context = $this->get_type_affichage_formulaire();
6931     switch ($context) {
6932     case 'ADS':
6933     $obj = 'dossier_instruction';
6934     break;
6935     case 'CTX RE':
6936     $obj = 'dossier_contentieux_tous_recours';
6937     break;
6938     case 'CTX IN':
6939     $obj = 'dossier_contentieux_toutes_infractions';
6940     break;
6941     default:
6942     return;
6943     }
6944     $idx = $this->getVal($this->clePrimaire);
6945 softime 7996 $link = OM_ROUTE_FORM.'&obj='.$obj.'&action=3&idx='.$idx;
6946 softime 6565 if ($this->f->get_submitted_get_value('retourformulaire') !== null
6947     && $this->f->get_submitted_get_value('idxformulaire') !== null) {
6948 softime 7996 $link .= '&premier=0&tricol=&retourformulaire='.$this->f->get_submitted_get_value('retourformulaire');
6949 softime 6565 $link .= '&idxformulaire='.$this->f->get_submitted_get_value('idxformulaire');
6950     }
6951    
6952     header('Location: '.$link);
6953     exit();
6954     }
6955    
6956    
6957     /**
6958     * CONDITION - is_confidentiel
6959     *
6960     * Permet de savoir si le type de dossier d'autorisation du dossier courant est
6961     * confidentiel.
6962     *
6963     * @return boolean true si le dossier est confidentiel, sinon false.
6964     *
6965     */
6966     public function is_confidentiel() {
6967     //
6968     $inst_dossier_autorisation_type_detaille = $this->get_inst_dossier_autorisation_type_detaille();
6969     $inst_dossier_autorisation_type = $this->get_inst_dossier_autorisation_type($inst_dossier_autorisation_type_detaille->getVal('dossier_autorisation_type'));
6970     $confidentiel = $inst_dossier_autorisation_type->getVal('confidentiel');
6971     //
6972     if ($confidentiel === 't') {
6973     return true;
6974     }
6975     return false;
6976     }
6977    
6978    
6979     /**
6980     * CONDITION - can_user_access_dossier
6981     *
6982     * Effectue les vérifications suivantes :
6983     * - L'utilisateur doit avoir accès au groupe du dossier
6984     * - Si le dossier est confidentiel, l'utilisateur doit avoir accès aux dossiers
6985     * confidentiels de ce groupe
6986     *
6987     * @return boolean true si les conditions ci-dessus sont réunies, sinon false
6988     *
6989     */
6990     public function can_user_access_dossier() {
6991     // Récupère le code du groupe
6992     $groupe_dossier = $this->get_groupe();
6993    
6994     // Le groupe doit être accessible par l'utilisateur ;
6995     if ($this->f->is_user_in_group($groupe_dossier) === false) {
6996     return false;
6997     }
6998     if ($this->is_confidentiel() === true) {
6999     //
7000     if ($this->f->can_user_access_dossiers_confidentiels_from_groupe($groupe_dossier) === false) {
7001     return false;
7002     }
7003     }
7004     return true;
7005     }
7006    
7007    
7008     /**
7009 softime 6272 * Met à jour une métadonnée sur tous les fichiers liés au dossier.
7010     *
7011     * @param string $metadata Nom de la métadonnée.
7012     * @param string $metadata_value Nouvelle valeur de la métadonnée.
7013     *
7014     * @return boolean
7015     */
7016     public function update_metadata_by_dossier($metadata, $metadata_value) {
7017     // Rècupère la liste des fichiers stockés liés au dossier
7018     $sql = sprintf('
7019     SELECT uid AS uid
7020     FROM %1$sdocument_numerise
7021     WHERE dossier = \'%2$s\'
7022     AND document_numerise IS NOT NULL
7023     UNION
7024     SELECT fichier AS uid
7025     FROM %1$sconsultation
7026     WHERE dossier = \'%2$s\'
7027     AND fichier IS NOT NULL
7028     UNION
7029     SELECT om_fichier_consultation AS uid
7030     FROM %1$sconsultation
7031     WHERE dossier = \'%2$s\'
7032     AND om_fichier_consultation IS NOT NULL
7033     UNION
7034     SELECT om_fichier_instruction AS uid
7035     FROM %1$sinstruction
7036     WHERE dossier = \'%2$s\'
7037     AND om_fichier_instruction IS NOT NULL
7038     UNION
7039     SELECT om_fichier_rapport_instruction AS uid
7040     FROM %1$srapport_instruction
7041     WHERE dossier_instruction = \'%2$s\'
7042     AND om_fichier_rapport_instruction IS NOT NULL;
7043     ',
7044     DB_PREFIXE,
7045     $this->getVal($this->clePrimaire)
7046     );
7047     $res = $this->f->db->query($sql);
7048     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
7049     $this->f->isDatabaseError($res);
7050    
7051     // Définit la métadonnée à mettre à jour
7052     $metadata_update = array();
7053     $metadata_update[$metadata] = $metadata_value;
7054    
7055     // Pour chaque résultat
7056     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
7057     // Met à jour les métadonnées du fichier
7058     $uid_update = $this->f->storage->storage->update_metadata($row['uid'], $metadata_update);
7059    
7060     // Si la méthode ne retourne pas l'uid du fichier alors la mise
7061     // à jour ne s'est pas réalisée
7062     if ($uid_update !== $row['uid']) {
7063     //
7064     return false;
7065     }
7066     }
7067     $res->free();
7068    
7069     //
7070     return true;
7071     }
7072    
7073    
7074     /**
7075     * Traitement pour les ERP.
7076     * Si la valeur du champ 'erp' a été modifié, modifie la valeur de la
7077     * métadonnée concernceERP sur tous les fichiers liés au dossier.
7078     *
7079     * @param array $values Liste des nouvelles valeurs.
7080     *
7081     * @return boolean
7082     */
7083     public function update_concerneERP(array $values) {
7084     // Définit le champ et la métadonnée
7085     $champ = 'erp';
7086     $metadata = 'concerneERP';
7087    
7088     // Définit les valeurs à comparer
7089     $value_after = $this->get_boolean_from_view_value($values[$champ]);
7090     $value_before = $this->get_boolean_from_pgsql_value($this->getVal($champ));
7091    
7092     // Vérifie si la valeur du champ a été modifié
7093     if ($value_after !== $value_before) {
7094     // Transforme la valeur booléenne en string
7095     $metadata_value = 'false';
7096     if ($value_after === true) {
7097     $metadata_value = 'true';
7098     }
7099    
7100     // Met à jour les métadonnées des fichiers liés au dossier
7101     $update = $this->update_metadata_by_dossier($metadata, $metadata_value);
7102     //
7103     if ($update !== true) {
7104     //
7105     return false;
7106     }
7107     }
7108    
7109     //
7110     return true;
7111     }
7112    
7113    
7114 softime 6565 /**
7115     * Récupère l'instance du groupe.
7116     *
7117     * @param string $groupe Identifiant du groupe.
7118     *
7119     * @return object
7120     */
7121     private function get_inst_groupe($groupe) {
7122     //
7123     return $this->get_inst_common("groupe", $groupe);
7124     }
7125    
7126    
7127     /**
7128     * Récupère l'instance du type de dossier d'autorisation.
7129     *
7130     * @param string $dossier_autorisation_type Identifiant du type de dossier
7131     * d'autorisation.
7132     *
7133     * @return object
7134     */
7135     private function get_inst_dossier_autorisation_type($dossier_autorisation_type) {
7136     //
7137     return $this->get_inst_common("dossier_autorisation_type", $dossier_autorisation_type);
7138     }
7139    
7140    
7141 softime 7366 /**
7142     * Récupère l'instance de la demande du dossier
7143     *
7144     * @param mixed Identifiant de la demande
7145     *
7146     * @return object
7147     */
7148     function get_inst_demande($demande = null) {
7149     //
7150     if (is_null($this->inst_demande)) {
7151     //
7152     if (is_null($demande)) {
7153     $demande = $this->get_demande_by_dossier_instruction();
7154     }
7155     //
7156     return $this->get_inst_common("demande", $demande);
7157     }
7158     //
7159     return $this->inst_demande;
7160     }
7161    
7162    
7163     /**
7164 softime 7541 * Récupère l'identifiant de la demande initiale par le dossier d'instruction.
7165 softime 7366 *
7166     * @return integer
7167     */
7168     function get_demande_by_dossier_instruction() {
7169     // Initialisation de la variable de retour
7170     $res = null;
7171    
7172     // SQL
7173     $sql = "SELECT demande
7174     FROM ".DB_PREFIXE."demande
7175 softime 7541 WHERE dossier_instruction = '".$this->getVal($this->clePrimaire)."'
7176     ORDER BY instruction_recepisse ASC
7177     LIMIT 1";
7178 softime 7366 $res = $this->f->db->getOne($sql);
7179     $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
7180     $this->f->isDatabaseError($res);
7181    
7182     //
7183     return $res;
7184     }
7185    
7186 softime 7996 /**
7187     * TREATMENT - update_last_modification_date.
7188     *
7189     * Cette methode met à jour la date de dernière modification du dossier.
7190     *
7191     * @return boolean
7192     */
7193     public function update_last_modification_date() {
7194     //
7195     $this->begin_treatment(__METHOD__);
7196     //
7197     $this->correct = true;
7198     $this->valF["date_modification"] = 'NOW';
7199     //
7200     $res = $this->f->db->autoExecute(
7201     DB_PREFIXE.$this->table,
7202     $this->valF,
7203     DB_AUTOQUERY_UPDATE,
7204     $this->clePrimaire." = '".$this->getVal($this->clePrimaire)."'"
7205     );
7206     if ($this->f->isDatabaseError($res, true)) {
7207     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
7208     $this->correct = false;
7209     return $this->end_treatment(__METHOD__, false);
7210     } else {
7211     return $this->end_treatment(__METHOD__, true);
7212     }
7213     //
7214     return $this->end_treatment(__METHOD__, false);
7215     }
7216 softime 7366
7217 softime 7996 /**
7218     * TREATMENT - update_hash_sitadel.
7219     *
7220     * Cette methode met à jour le hash SITADEL du dossier.
7221     *
7222     * @return boolean
7223     */
7224     public function update_hash_sitadel($hash_sitadel = null) {
7225     //
7226     $this->begin_treatment(__METHOD__);
7227     //
7228     if ($hash_sitadel !== null && $hash_sitadel !== '') {
7229     //
7230     $this->correct = true;
7231     $this->valF["hash_sitadel"] = $hash_sitadel;
7232     //
7233     $res = $this->f->db->autoExecute(
7234     DB_PREFIXE.$this->table,
7235     $this->valF,
7236     DB_AUTOQUERY_UPDATE,
7237     $this->clePrimaire." = '".$this->getVal($this->clePrimaire)."'"
7238     );
7239     if ($this->f->isDatabaseError($res, true)) {
7240     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
7241     $this->correct = false;
7242     return $this->end_treatment(__METHOD__, false);
7243     } else {
7244     return $this->end_treatment(__METHOD__, true);
7245     }
7246     }
7247     //
7248     return $this->end_treatment(__METHOD__, false);
7249     }
7250    
7251 softime 8477 /**
7252     * Surcharge de la méthode rechercheTable pour éviter de court-circuiter le
7253     * générateur en devant surcharger la méthode cleSecondaire afin de supprimer
7254     * les éléments liés dans les tables NaN.
7255     *
7256     * @param mixed $dnu1 Instance BDD - À ne pas utiliser
7257     * @param string $table Table
7258     * @param string $field Champ
7259     * @param mixed $id Identifiant
7260     * @param mixed $dnu2 Marqueur de débogage - À ne pas utiliser
7261     * @param string $selection Condition de la requête
7262     *
7263     * @return void
7264     */
7265     function rechercheTable(&$dnu1 = null, $table, $field, $id, $dnu2 = null, $selection = "") {
7266 softime 7996
7267 softime 8477 // Dans le cas d'une suppression du dossier d'instruction, les tables
7268     // liées ne sont pas vérifiées
7269     $liaison_suppr = array (
7270     "demande",
7271     "donnees_techniques",
7272     "instruction",
7273     "lien_dossier_demandeur",
7274     );
7275     if ($this->get_action_crud() === 'delete'
7276     && in_array($table, array_keys($liaison_suppr)) === true) {
7277     // Annule la vérid
7278     $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);
7279     return;
7280     }
7281     //
7282     parent::rechercheTable($this->f->db, $table, $field, $id, null, $selection);
7283     }
7284    
7285    
7286 mbroquet 3730 }
7287    
7288 softime 7996

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26