1 |
<?php |
2 |
/** |
3 |
* |
4 |
* @package openfoncier |
5 |
* @version SVN : $Id: dossier_instruction.inc.php 6128 2016-03-08 15:43:42Z jymadier $ |
6 |
*/ |
7 |
|
8 |
/*Etend la classe dossier*/ |
9 |
include('../sql/pgsql/dossier.inc.php'); |
10 |
include "../sql/pgsql/app_om_tab_common_select.inc.php"; |
11 |
|
12 |
/*Titre de la page*/ |
13 |
$ent = __("instruction")." -> ".__("dossiers d'instruction"); |
14 |
|
15 |
$tab_title = __("DI"); |
16 |
|
17 |
// Pour le formulaire de géocodage par lot |
18 |
// Change le nom de l'onglet principal et cache les autres onglets |
19 |
if ($f->get_submitted_get_value('action') === '126'){ |
20 |
$tab_title = __("Géolocalisation des dossiers"); |
21 |
$sousformulaire = array(); |
22 |
} |
23 |
|
24 |
/* Test SQL pour récupérer les bons champs selon la qualité du demandeur : |
25 |
* particulier ou personne morale*/ |
26 |
$case_demandeur = "CASE WHEN demandeur.qualite='particulier' |
27 |
THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom)) |
28 |
ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination)) |
29 |
END"; |
30 |
|
31 |
/* Section de construction de la variable $table : tables sur lequels la recherche va s'effectuer |
32 |
cette variable sera utiliée comme FROM pour les écrans incluant dossier_instruction.inc.php |
33 |
nous ajoutons donc des paramètres d'Optimisation des requetes SQL selon les écrans |
34 |
*/ |
35 |
// Traitement des 1ers tables à inclure |
36 |
// SQL d'origine de la recherche |
37 |
$table_debut_old = sprintf(' |
38 |
-- Recherche le pétitionnaire principal du dossier (unique !) |
39 |
LEFT JOIN ( |
40 |
SELECT |
41 |
* |
42 |
FROM |
43 |
%1$slien_dossier_demandeur |
44 |
INNER JOIN %1$sdemandeur |
45 |
ON demandeur.demandeur = lien_dossier_demandeur.demandeur |
46 |
WHERE |
47 |
lien_dossier_demandeur.petitionnaire_principal IS TRUE |
48 |
AND LOWER(demandeur.type_demandeur) = LOWER(\'petitionnaire\') |
49 |
) as demandeur |
50 |
ON demandeur.dossier = dossier.dossier |
51 |
-- Recherche l etat du dossier |
52 |
LEFT JOIN %1$setat |
53 |
ON dossier.etat = etat.etat |
54 |
', |
55 |
DB_PREFIXE |
56 |
); |
57 |
// SQL permetant d'accelere les 'encours' et les 'clotures' |
58 |
$table_debut_optimiser_lien_demandeurs = sprintf( |
59 |
'-- Recherche l etat du dossier |
60 |
JOIN %1$setat |
61 |
ON dossier.etat = etat.etat', |
62 |
DB_PREFIXE |
63 |
); |
64 |
|
65 |
// Traitement des tables générales |
66 |
// SQL d'origine de la recherche |
67 |
$table_middle = sprintf( |
68 |
'-- Recherche le type de DATD |
69 |
LEFT JOIN %1$sdossier_instruction_type |
70 |
ON dossier_instruction_type.dossier_instruction_type = dossier.dossier_instruction_type |
71 |
LEFT JOIN %1$sdossier_autorisation_type_detaille |
72 |
ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille = dossier_instruction_type.dossier_autorisation_type_detaille |
73 |
-- Recherche l instructeur du dossier |
74 |
LEFT JOIN %1$sinstructeur |
75 |
ON dossier.instructeur = instructeur.instructeur |
76 |
LEFT JOIN %1$som_utilisateur |
77 |
ON instructeur.om_utilisateur = om_utilisateur.om_utilisateur |
78 |
-- Recherche l instructeur 2 du dossier |
79 |
LEFT JOIN %1$sinstructeur as instructeur_secondaire |
80 |
ON dossier.instructeur_2 = instructeur_secondaire.instructeur |
81 |
LEFT JOIN %1$som_utilisateur as utilisateur_2 |
82 |
ON instructeur_secondaire.om_utilisateur = utilisateur_2.om_utilisateur |
83 |
-- Recherche la division de rattachement du dossier (différente de celle de l instructeur) |
84 |
LEFT JOIN %1$sdivision |
85 |
ON dossier.division = division.division |
86 |
-- Recherche l avis de décision |
87 |
LEFT JOIN %1$savis_decision |
88 |
ON avis_decision.avis_decision=dossier.avis_decision |
89 |
-- Recherche la collectivite de rattachement du dossier |
90 |
LEFT JOIN %1$som_collectivite |
91 |
ON dossier.om_collectivite=om_collectivite.om_collectivite |
92 |
-- Recherche l arrondissement du dossier |
93 |
LEFT JOIN %1$sarrondissement |
94 |
ON arrondissement.code_postal = dossier.terrain_adresse_code_postal |
95 |
-- Récupère la demande qui a créé le type dossier du dossier |
96 |
LEFT JOIN (%1$sdemande |
97 |
JOIN %1$sdemande_type |
98 |
ON demande.demande_type = demande_type.demande_type |
99 |
) |
100 |
ON demande.dossier_instruction = dossier.dossier |
101 |
AND demande_type.dossier_instruction_type = dossier.dossier_instruction_type |
102 |
', |
103 |
DB_PREFIXE |
104 |
); |
105 |
|
106 |
// Traitement des dernières tables à inclure |
107 |
// SQL d'origine de la recherche |
108 |
$table_end_old = ""; |
109 |
|
110 |
// SQL permetant d'accelere les 'encours' et les 'clotures' |
111 |
$table_end_optimiser_lien_demandeurs = sprintf(' |
112 |
-- Recherche le pétitionnaire principal du dossier (unique !) |
113 |
JOIN %1$slien_dossier_demandeur |
114 |
ON dossier.dossier = lien_dossier_demandeur.dossier AND lien_dossier_demandeur.petitionnaire_principal IS TRUE |
115 |
JOIN %1$sdemandeur |
116 |
ON lien_dossier_demandeur.demandeur = demandeur.demandeur AND LOWER(demandeur.type_demandeur) = LOWER(\'petitionnaire\') |
117 |
', |
118 |
DB_PREFIXE |
119 |
); |
120 |
|
121 |
$table = sprintf( |
122 |
'%1$sdossier |
123 |
%2$s |
124 |
%3$s |
125 |
%4$s |
126 |
%5$s |
127 |
', |
128 |
DB_PREFIXE, |
129 |
$table_debut_old, |
130 |
$table_middle, |
131 |
$table_end_old, |
132 |
$join_enjeux_dossier |
133 |
); |
134 |
|
135 |
// Génération de la sortie selon le paramètrage |
136 |
if ( |
137 |
isset($optimisation_demandeurs) && $optimisation_demandeurs == true |
138 |
){ |
139 |
$table = sprintf( |
140 |
'%1$sdossier |
141 |
%2$s |
142 |
%3$s |
143 |
%4$s |
144 |
%5$s |
145 |
', |
146 |
DB_PREFIXE, |
147 |
$table_debut_optimiser_lien_demandeurs, |
148 |
$table_middle, |
149 |
$table_end_optimiser_lien_demandeurs, |
150 |
$join_enjeux_dossier |
151 |
); |
152 |
} |
153 |
|
154 |
if ($f->is_option_dossier_commune_enabled()) { |
155 |
$table .= " |
156 |
LEFT OUTER JOIN ".DB_PREFIXE."commune |
157 |
ON commune.commune = dossier.commune |
158 |
"; |
159 |
} |
160 |
|
161 |
$nature_travaux_from = "LEFT JOIN ( |
162 |
SELECT ntc.dossier, string_agg(ntc.libelle::text, '\n' order by ntc.libelle) as libelle |
163 |
FROM |
164 |
(SELECT DISTINCT |
165 |
dossier, |
166 |
famille_travaux.libelle as famille_travaux, |
167 |
CONCAT(famille_travaux.libelle, ' / ', nature_travaux.libelle) as libelle |
168 |
FROM |
169 |
".DB_PREFIXE."lien_dossier_nature_travaux |
170 |
INNER JOIN |
171 |
".DB_PREFIXE."nature_travaux |
172 |
ON lien_dossier_nature_travaux.nature_travaux = nature_travaux.nature_travaux |
173 |
INNER JOIN |
174 |
".DB_PREFIXE."famille_travaux |
175 |
ON nature_travaux.famille_travaux = famille_travaux.famille_travaux ORDER BY famille_travaux.libelle) as ntc |
176 |
GROUP BY dossier ORDER BY libelle) as nature_travaux ON nature_travaux.dossier = dossier.dossier |
177 |
"; |
178 |
// Ajout des colonnes concernant la demat |
179 |
if ($f->get_submitted_get_value('mode') === 'export_csv') { |
180 |
// Jointure permettant d'afficher l'id platau du service consultant et le |
181 |
// libellé du service consultant dans les exports si le mode service consulté est |
182 |
// actif |
183 |
$table .= $f->is_option_mode_service_consulte_enabled() === true ? |
184 |
'LEFT JOIN '.DB_PREFIXE.'consultation_entrante |
185 |
ON dossier.dossier = consultation_entrante.dossier |
186 |
' : |
187 |
''; |
188 |
$table .= |
189 |
"LEFT JOIN |
190 |
(SELECT |
191 |
dossier, |
192 |
external_uid |
193 |
FROM |
194 |
".DB_PREFIXE."lien_id_interne_uid_externe |
195 |
WHERE object = 'dossier' |
196 |
AND category = 'platau' |
197 |
) AS dossier_platau |
198 |
ON |
199 |
dossier_platau.dossier = dossier.dossier |
200 |
LEFT JOIN |
201 |
(SELECT |
202 |
dossier, |
203 |
external_uid |
204 |
FROM |
205 |
".DB_PREFIXE."lien_id_interne_uid_externe |
206 |
WHERE object = 'dossier_consultation' |
207 |
AND category = 'platau' |
208 |
) AS consultation_platau |
209 |
ON |
210 |
consultation_platau.dossier = dossier.dossier |
211 |
LEFT JOIN |
212 |
(SELECT |
213 |
dossier, |
214 |
ARRAY_TO_STRING(ARRAY_AGG(external_uid ORDER BY external_uid ASC), ', ') AS external_uid |
215 |
FROM |
216 |
".DB_PREFIXE."lien_id_interne_uid_externe |
217 |
WHERE |
218 |
object = 'piece' |
219 |
AND category = 'platau' |
220 |
GROUP BY |
221 |
dossier) AS pieces_platau |
222 |
ON |
223 |
pieces_platau.dossier = dossier.dossier |
224 |
LEFT JOIN |
225 |
(SELECT |
226 |
dossier, |
227 |
ARRAY_TO_STRING(ARRAY_AGG(object || ' : ' || external_uid), ', ') AS external_uid |
228 |
FROM |
229 |
".DB_PREFIXE."lien_id_interne_uid_externe |
230 |
WHERE |
231 |
object != 'piece' |
232 |
AND object != 'dossier' |
233 |
AND object != 'dossier_consultation' |
234 |
AND category = 'platau' |
235 |
GROUP BY |
236 |
dossier) AS autres_platau |
237 |
ON |
238 |
autres_platau.dossier = dossier.dossier |
239 |
"; |
240 |
$nature_travaux_from = "LEFT JOIN ( |
241 |
SELECT ftc.dossier, string_agg(ftc.libelle::text, ', ') as famille_travaux_libelle |
242 |
FROM |
243 |
(SELECT DISTINCT |
244 |
dossier, |
245 |
famille_travaux.libelle |
246 |
FROM |
247 |
".DB_PREFIXE."lien_dossier_nature_travaux |
248 |
INNER JOIN |
249 |
".DB_PREFIXE."nature_travaux |
250 |
ON lien_dossier_nature_travaux.nature_travaux = nature_travaux.nature_travaux |
251 |
INNER JOIN |
252 |
".DB_PREFIXE."famille_travaux |
253 |
ON nature_travaux.famille_travaux = famille_travaux.famille_travaux |
254 |
ORDER BY famille_travaux.libelle) as ftc |
255 |
GROUP BY dossier) as famille_travaux ON famille_travaux.dossier = dossier.dossier |
256 |
LEFT JOIN ( |
257 |
SELECT ntc.dossier, string_agg(ntc.libelle::text, ', ') as nature_travaux_libelle |
258 |
FROM |
259 |
(SELECT DISTINCT |
260 |
dossier, |
261 |
nature_travaux.libelle |
262 |
FROM |
263 |
".DB_PREFIXE."lien_dossier_nature_travaux |
264 |
INNER JOIN |
265 |
".DB_PREFIXE."nature_travaux |
266 |
ON lien_dossier_nature_travaux.nature_travaux = nature_travaux.nature_travaux |
267 |
ORDER BY nature_travaux.libelle) as ntc |
268 |
GROUP BY dossier) as nature_travaux ON nature_travaux.dossier = dossier.dossier |
269 |
"; |
270 |
} |
271 |
|
272 |
$champ_date_depot_mairie = 'to_char(dossier.date_depot_mairie ,\'DD/MM/YYYY\') as "'.__("dépôt mairie").'"'; |
273 |
|
274 |
/*Champs du début de la requête*/ |
275 |
$champAffiche_debut_commun = $array_base_ct_select_champaffiche; |
276 |
if ($f->is_option_dossier_commune_enabled()) { |
277 |
$champAffiche_debut_commun[] = 'commune.libelle as "'.__("commune").'"'; |
278 |
} |
279 |
array_push($champAffiche_debut_commun, |
280 |
$case_demandeur.' as "'.__("petitionnaire").'"', |
281 |
$trim_concat_terrain.'as "'.__("localisation").'"', |
282 |
'dossier_autorisation_type_detaille.libelle as "'.__("type").'"', |
283 |
'to_char(dossier.date_depot ,\'DD/MM/YYYY\') as "'.__("dépôt").'"', |
284 |
'to_char(dossier.date_complet ,\'DD/MM/YYYY\') as "'.__("complétude").'"', |
285 |
'CASE WHEN dossier.incomplet_notifie IS TRUE AND dossier.incompletude IS TRUE |
286 |
THEN to_char(dossier.date_limite_incompletude ,\'DD/MM/YYYY\') |
287 |
ELSE to_char(dossier.date_limite ,\'DD/MM/YYYY\') |
288 |
END as "'.__("limite").'"' |
289 |
); |
290 |
|
291 |
if ($f->is_option_date_depot_mairie_enabled() === true) { |
292 |
$champAffiche_debut_commun[] = $champ_date_depot_mairie; |
293 |
} |
294 |
/** |
295 |
* Colonne "Nature des travaux" (regroupe les descriptions des données |
296 |
* techniques). |
297 |
*/ |
298 |
// Nombre max de caractères à afficher dans la colonne de la nature des travaux |
299 |
// avant de tronquer la valeur et d'ajouter une ellipse "…" |
300 |
$max_chars = 40; |
301 |
// |
302 |
$description_projet_select = " |
303 |
CASE WHEN nature_travaux.libelle IS NULL AND char_length(description_projet) <= ".$max_chars." THEN |
304 |
CONCAT('<span class=\"nature_travaux_cursor\" title=\"', |
305 |
description_projet, |
306 |
'\">', |
307 |
replace(description_projet, '\n', '<br/>'), |
308 |
'</span>') |
309 |
WHEN nature_travaux.libelle IS NULL AND char_length(description_projet) > ".$max_chars." THEN |
310 |
CONCAT('<span class=\"nature_travaux_cursor\" title=\"', |
311 |
description_projet, |
312 |
'\">', |
313 |
replace(left(description_projet, ".$max_chars."), '\n', '<br/>') || '…', |
314 |
'</span>') |
315 |
WHEN nature_travaux.libelle IS NOT NULL AND ARRAY_LENGTH(STRING_TO_ARRAY(nature_travaux.libelle, '\n'), 1) = 1 THEN |
316 |
CONCAT('<span class=\"nature_travaux_cursor\" title=\"', |
317 |
nature_travaux.libelle, |
318 |
'\n', |
319 |
description_projet, |
320 |
'\">', |
321 |
replace(nature_travaux.libelle, '\n', '<br/>'), |
322 |
'</span>') |
323 |
WHEN nature_travaux.libelle IS NOT NULL AND ARRAY_LENGTH(STRING_TO_ARRAY(nature_travaux.libelle, '\n'), 1) > 1 THEN |
324 |
CONCAT('<span class=\"nature_travaux_cursor\" title=\"', |
325 |
nature_travaux.libelle, |
326 |
'\n', |
327 |
description_projet, |
328 |
'\">', |
329 |
split_part(nature_travaux.libelle, '\n', 1), '<br/>', '[...]', |
330 |
'</span>') |
331 |
END as \"".__("nature des travaux").'"'; |
332 |
// description/nature des travaux. En cas de modif, bloc de code aussi présent dans |
333 |
// dossier.form.inc.php (le formulaire du DI)', 'om_requete' et 'stats à la demande' |
334 |
$description_projet_from = " |
335 |
INNER JOIN ( |
336 |
SELECT |
337 |
CONCAT_WS( |
338 |
'\n', |
339 |
CASE WHEN co_projet_desc = '' THEN |
340 |
NULL |
341 |
ELSE |
342 |
TRIM(co_projet_desc) |
343 |
END, |
344 |
CASE WHEN ope_proj_desc = '' THEN |
345 |
NULL |
346 |
ELSE |
347 |
TRIM(ope_proj_desc) |
348 |
END, |
349 |
CASE WHEN am_projet_desc = '' THEN |
350 |
NULL |
351 |
ELSE |
352 |
TRIM(am_projet_desc) |
353 |
END, |
354 |
CASE WHEN dm_projet_desc = '' THEN |
355 |
NULL |
356 |
ELSE |
357 |
TRIM(dm_projet_desc) |
358 |
END, |
359 |
CASE WHEN donnees_techniques.erp_cstr_neuve IS TRUE |
360 |
THEN '".str_replace("'", "''", __('erp_cstr_neuve'))."' END, |
361 |
CASE WHEN donnees_techniques.erp_trvx_acc IS TRUE |
362 |
THEN '".str_replace("'", "''", __('erp_trvx_acc'))."' END, |
363 |
CASE WHEN donnees_techniques.erp_extension IS TRUE |
364 |
THEN '".str_replace("'", "''", __('erp_extension'))."' END, |
365 |
CASE WHEN donnees_techniques.erp_rehab IS TRUE |
366 |
THEN '".str_replace("'", "''", __('erp_rehab'))."' END, |
367 |
CASE WHEN donnees_techniques.erp_trvx_am IS TRUE |
368 |
THEN '".str_replace("'", "''", __('erp_trvx_am'))."' END, |
369 |
CASE WHEN donnees_techniques.erp_vol_nouv_exist IS TRUE |
370 |
THEN '".str_replace("'", "''", __('erp_vol_nouv_exist'))."' END, |
371 |
CASE WHEN mh_design_appel_denom = '' THEN |
372 |
NULL |
373 |
ELSE |
374 |
TRIM(mh_design_appel_denom) |
375 |
END, |
376 |
CASE WHEN mh_loc_denom = '' THEN |
377 |
NULL |
378 |
ELSE |
379 |
TRIM(mh_loc_denom) |
380 |
END |
381 |
) as description_projet, |
382 |
dossier_instruction |
383 |
FROM ".DB_PREFIXE."donnees_techniques |
384 |
) as description_projet |
385 |
ON description_projet.dossier_instruction = dossier.dossier |
386 |
"; |
387 |
// On ne veut cette colonne que dans les trois listings "Recherche", |
388 |
// "Mes encours" et "Tous les encours" |
389 |
$listings = array("dossier_instruction", |
390 |
"dossier_instruction_mes_encours", |
391 |
"dossier_instruction_tous_encours"); |
392 |
// |
393 |
$is_in_obj_whitelist = in_array($obj, $listings); |
394 |
// La variable $retourformulaire permet de s'assurer que l'on est pas dans un |
395 |
// sous-tableau |
396 |
if ($is_in_obj_whitelist === true && $retourformulaire === '') { |
397 |
// Modifie les colonnes à afficher en début du tableau |
398 |
$champAffiche_debut_commun = $array_base_ct_select_champaffiche; |
399 |
if ($f->is_option_dossier_commune_enabled()) { |
400 |
$champAffiche_debut_commun[] = 'commune.libelle as "'.__("commune").'"'; |
401 |
} |
402 |
array_push($champAffiche_debut_commun, |
403 |
$case_demandeur.' as "'.__("petitionnaire").'"', |
404 |
$trim_concat_terrain.'as "'.__("localisation").'"', |
405 |
'dossier_autorisation_type_detaille.libelle as "'.__("type").'"', |
406 |
$description_projet_select, |
407 |
'to_char(dossier.date_depot ,\'DD/MM/YYYY\') as "'.__("dépôt").'"', |
408 |
'to_char(dossier.date_complet ,\'DD/MM/YYYY\') as "'.__("complétude").'"', |
409 |
'CASE WHEN dossier.incomplet_notifie IS TRUE AND dossier.incompletude IS TRUE |
410 |
THEN to_char(dossier.date_limite_incompletude ,\'DD/MM/YYYY\') |
411 |
ELSE to_char(dossier.date_limite ,\'DD/MM/YYYY\') |
412 |
END as "'.__("limite").'"' |
413 |
); |
414 |
if ($f->is_option_date_depot_mairie_enabled() === true) { |
415 |
$champAffiche_debut_commun[] = $champ_date_depot_mairie; |
416 |
} |
417 |
// Modifie également le from |
418 |
$table .= $description_projet_from.' '.$nature_travaux_from; |
419 |
} |
420 |
|
421 |
/*Champs de la fin de la requête*/ |
422 |
$champAffiche_fin_commun = array( |
423 |
'etat.libelle as "'.__("etat").'"', |
424 |
$select_enjeux_dossier, |
425 |
); |
426 |
|
427 |
// |
428 |
if ($_SESSION['niveau'] == '2') { |
429 |
array_push($champAffiche_fin_commun, "om_collectivite.libelle as \"".__("collectivite")."\""); |
430 |
} |
431 |
|
432 |
// Identifie s'il y a déjà un WHERE dans la requête |
433 |
if (stripos($selection, "WHERE") === false) { |
434 |
$selection .= " WHERE "; |
435 |
} else { |
436 |
$selection .= " AND "; |
437 |
} |
438 |
// Les dossiers des contentieux sont gérés dans un autre listing, il ne doivent |
439 |
// pas apparaître dans la liste des dossiers d'instruction de l'onglet instruction -> recherche |
440 |
// /!\ l'opérateur != exclus les valeurs null. Il faut donc préciser que les groupe ayant un |
441 |
// code NULL doivent bien être récupérés. |
442 |
$selection .= " (groupe.code IS NULL OR groupe.code != 'CTX')"; |
443 |
|
444 |
$instructeur_nom = 'CASE WHEN instructeur.nom IS NOT NULL AND division.code IS NOT NULL THEN |
445 |
CONCAT(\'<span title="Instructeur: \', instructeur.nom, '."'\n'".', \'Division: \', division.code, \'"\', \'>\', instructeur.nom, \' (\', division.code, \')\', \'</span>\') |
446 |
WHEN instructeur.nom IS NOT NULL AND division.code IS NULL THEN |
447 |
instructeur.nom |
448 |
ELSE |
449 |
instructeur.nom |
450 |
END as "'.__("instructeur").'"'; |
451 |
|
452 |
|
453 |
/*Liste des champs affichés dans le tableau de résultat*/ |
454 |
$champAffiche = array_merge( |
455 |
$champAffiche_debut_commun, |
456 |
array( |
457 |
$instructeur_nom, |
458 |
), |
459 |
$champAffiche_fin_commun |
460 |
); |
461 |
|
462 |
// Suppression du bouton d'ajout, qui n'est pas affiché par défaut dans les listings de |
463 |
// dossiers d'instruction |
464 |
$tab_actions['corner']['ajouter'] = NULL; |
465 |
|
466 |
if (isset($_GET['message_help']) |
467 |
&& ! is_null($_GET['message_help']) |
468 |
&& $_GET['message_help'] != "" |
469 |
&& $_GET['module'] == 'tab') { |
470 |
|
471 |
$tab_actions['left']["consulter"]['id'] .= '&message_help='.urlencode($_GET['message_help']); |
472 |
$tab_actions['content'] = $tab_actions['left']["consulter"]; |
473 |
} |
474 |
|
475 |
// Liste des autres dossiers d'instructions |
476 |
if ($retourformulaire== 'dossier_instruction'){ |
477 |
$champAffiche = array( |
478 |
'dossier.dossier as "'.__("dossier_instruction").'"', |
479 |
'dossier.geom as "geom_picto"', |
480 |
'demande.source_depot as "demat_picto"', |
481 |
$select__dossier_libelle__column_as, |
482 |
); |
483 |
if ($f->is_option_dossier_commune_enabled()) { |
484 |
$champAffiche[] = 'c.libelle as "'.__("commune").'"'; |
485 |
} |
486 |
array_push($champAffiche, |
487 |
'dossier_instruction_type.libelle as "'.__("demande_type").'"', |
488 |
'to_char(dossier.date_depot ,\'DD/MM/YYYY\') as "'.__("dépôt").'"', |
489 |
'dossier.etat as "'.__("etat").'"' |
490 |
); |
491 |
|
492 |
$table =DB_PREFIXE.'dossier as a |
493 |
JOIN '.DB_PREFIXE.'dossier_autorisation |
494 |
ON a.dossier_autorisation=dossier_autorisation.dossier_autorisation |
495 |
JOIN '.DB_PREFIXE.'dossier as dossier |
496 |
ON dossier.dossier_autorisation=dossier_autorisation.dossier_autorisation |
497 |
JOIN '.DB_PREFIXE.'dossier_instruction_type |
498 |
ON dossier_instruction_type.dossier_instruction_type = dossier.dossier_instruction_type'; |
499 |
if ($f->is_option_dossier_commune_enabled()) { |
500 |
$table .= ' |
501 |
JOIN '.DB_PREFIXE.'commune as c |
502 |
ON c.commune = dossier.commune'; |
503 |
} |
504 |
$selection = 'WHERE a.dossier=\''.$f->db->escapeSimple($idxformulaire).'\''; |
505 |
$tri= "order by dossier.date_depot ASC"; |
506 |
|
507 |
// |
508 |
$tab_actions['left']["consulter"] = |
509 |
array('lien' => ''.OM_ROUTE_FORM.'&obj=dossier_instruction&action=3'.'&idx=', |
510 |
'id' => '&retourformulaire='.$retourformulaire.'&retour=', |
511 |
'lib' => '<span class="om-icon om-icon-16 om-icon-fix consult-16" title="'.__('Consulter').'">'.__('Consulter').'</span>', |
512 |
'rights' => array('list' => array('dossier_instruction', 'dossier_instruction_consulter'), 'operator' => 'OR'), |
513 |
'ordre' => 10, |
514 |
'ajax' => false); |
515 |
|
516 |
$tab_actions['content'] = $tab_actions['left']["consulter"]; |
517 |
$options[] = array( |
518 |
"type"=>"pagination_select", |
519 |
"display"=>false, |
520 |
); |
521 |
} |
522 |
|
523 |
|
524 |
if ( $retourformulaire == "dossier_autorisation") { |
525 |
|
526 |
// |
527 |
$tab_actions['left']["consulter"] = |
528 |
array('lien' => ''.OM_ROUTE_FORM.'&obj=dossier_instruction&action=3&idx=', |
529 |
'id' => '&retourformulaire='.$retourformulaire, |
530 |
'lib' => '<span class="om-icon om-icon-16 om-icon-fix consult-16" title="'.__('Consulter').'">'.__('Consulter').'</span>', |
531 |
'rights' => array('list' => array('dossier_instruction', 'dossier_instruction_consulter'), 'operator' => 'OR'), |
532 |
'ordre' => 10, |
533 |
'ajax' => false); |
534 |
|
535 |
$tab_actions['content'] = $tab_actions['left']["consulter"] ; |
536 |
} |
537 |
|
538 |
|
539 |
// Affichage du bouton de redirection vers le SIG externe si configuré |
540 |
// XXX Ajouter filtre pour afficher l'icone géolocalisation en fonction de la conf SIG du dossier |
541 |
if($f->getParameter('option_sig') == 'sig_externe') { |
542 |
$tab_actions['left']["localiser-sig-externe"] = array( |
543 |
'lien' => ''.OM_ROUTE_FORM.'&obj=dossier_instruction&action=140&idx=', |
544 |
'id' => '', |
545 |
'lib' => '<span class="om-icon om-icon-16 om-icon-fix sig-16" title="'.__('Localiser').'">'.__('Localiser').'</span>', |
546 |
'rights' => array('list' => array('dossier_instruction', 'dossier_instruction_consulter'), 'operator' => 'OR'), |
547 |
'ordre' => 20, |
548 |
'target' => "_SIG", |
549 |
'ajax' => false); |
550 |
} |
551 |
|
552 |
// Si filtre DI auxquels on peut proposer une autre décision |
553 |
// /!\ Requête lié à celles permettant de savoir si l'instructeur peut changer la |
554 |
// décision et à l'affichage du widgets des dossiers éligibles au changement : |
555 |
// * instruction.class.php : isInstrCanChangeDecision() |
556 |
// * dossier_instruction.class.php : view_widget_dossiers_evenement_retour_finalise() |
557 |
// TODO ; faire évoluer cette affichage pour reprendre celui des DI (avec la recherche avancée) |
558 |
if (isset($extra_parameters["filtre_decision"]) |
559 |
&& $extra_parameters["filtre_decision"] == true) { |
560 |
|
561 |
// Augmentation de la limite |
562 |
$serie = 50; |
563 |
// Réinitialisation des options |
564 |
$options = array(); |
565 |
// Suppression de la recherche avancée |
566 |
$options[] = array( |
567 |
'type' => 'search', |
568 |
'display' => false); |
569 |
// Suppression du sélecteur de pages |
570 |
$options[] = array( |
571 |
'type' => 'pagination_select', |
572 |
'display' => false); |
573 |
// Ajout jointure |
574 |
$table = sprintf( |
575 |
'%1$sdossier |
576 |
JOIN %1$setat |
577 |
ON dossier.etat = etat.etat AND etat.statut = \'encours\' |
578 |
JOIN %1$slien_dossier_demandeur |
579 |
ON dossier.dossier = lien_dossier_demandeur.dossier AND lien_dossier_demandeur.petitionnaire_principal IS TRUE |
580 |
JOIN %1$sdossier_instruction_type |
581 |
ON dossier.dossier_instruction_type=dossier_instruction_type.dossier_instruction_type |
582 |
JOIN %1$sdossier_autorisation_type_detaille |
583 |
ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille |
584 |
-- Récupère la demande qui a créé le type dossier du dossier |
585 |
LEFT JOIN (%1$sdemande |
586 |
JOIN %1$sdemande_type |
587 |
ON demande.demande_type = demande_type.demande_type |
588 |
) |
589 |
ON demande.dossier_instruction = dossier.dossier |
590 |
AND demande_type.dossier_instruction_type = dossier.dossier_instruction_type |
591 |
JOIN %1$sinstruction |
592 |
-- Recherche de la dernière instruction qui ne soit pas liée à un événement retour |
593 |
ON instruction.instruction = ( |
594 |
SELECT instruction |
595 |
FROM %1$sinstruction |
596 |
JOIN %1$sevenement ON instruction.evenement=evenement.evenement |
597 |
AND evenement.retour IS FALSE |
598 |
WHERE instruction.dossier = dossier.dossier |
599 |
ORDER BY date_evenement DESC, instruction DESC |
600 |
LIMIT 1 |
601 |
) |
602 |
-- On ne garde que les dossiers pour lesquels la dernière instruction est finalisée |
603 |
-- ou alors pour laquelle l instruction a été ajouté par la commune et est |
604 |
-- non signée, non notifié, etc. |
605 |
AND (instruction.om_final_instruction IS TRUE |
606 |
OR instruction.created_by_commune IS TRUE) |
607 |
AND instruction.date_retour_signature IS NULL |
608 |
AND instruction.date_envoi_rar IS NULL |
609 |
AND instruction.date_retour_rar IS NULL |
610 |
AND instruction.date_envoi_controle_legalite IS NULL |
611 |
AND instruction.date_retour_controle_legalite IS NULL |
612 |
-- On vérifie que l instruction soit un arrêté ou un changement de décision |
613 |
JOIN %1$sevenement |
614 |
ON instruction.evenement=evenement.evenement |
615 |
AND (evenement.type = \'arrete\' |
616 |
OR evenement.type = \'changement_decision\') |
617 |
-- Recherche les informations du pétitionnaire principal pour l affichage |
618 |
JOIN %1$sdemandeur |
619 |
ON lien_dossier_demandeur.demandeur = demandeur.demandeur |
620 |
-- Recherche la collectivité rattachée à l instructeur |
621 |
JOIN %1$sinstructeur |
622 |
ON dossier.instructeur=instructeur.instructeur |
623 |
JOIN %1$sdivision |
624 |
ON instructeur.division=division.division |
625 |
JOIN %1$sdirection |
626 |
ON division.direction=direction.direction |
627 |
JOIN %1$som_collectivite |
628 |
ON direction.om_collectivite=om_collectivite.om_collectivite |
629 |
%2$s %3$s |
630 |
%4$s |
631 |
', |
632 |
DB_PREFIXE, |
633 |
$description_projet_from, |
634 |
$nature_travaux_from, |
635 |
$join_enjeux_dossier |
636 |
); |
637 |
// Modification sélection |
638 |
$selection = "WHERE dossier_instruction_type.sous_dossier IS NOT TRUE AND |
639 |
om_collectivite.niveau = '2'"; |
640 |
// Si collectivité de l'utilisateur niveau mono alors filtre sur celle-ci |
641 |
if ($f->isCollectiviteMono($_SESSION['collectivite']) === true) { |
642 |
$selection .= " AND dossier.om_collectivite=".$_SESSION['collectivite']; |
643 |
} |
644 |
// Modification tri |
645 |
$tri = " ORDER BY dossier.dossier "; |
646 |
} |
647 |
|
648 |
|
649 |
// Ajout de la gestion des groupes et confidentialité à la requête du listing |
650 |
$sqlFiltreGroup = $this->get_sql_filtre_groupe($table.$selection); |
651 |
$selection .= $sqlFiltreGroup['WHERE']; |
652 |
$table .= $sqlFiltreGroup['FROM']; |
653 |
// Ajout du filtrage des sous dossier à la requête d'affichage du listing |
654 |
$sqlFiltreSD = $this->get_sql_filtre_sous_dossier($table.$selection); |
655 |
$selection .= $sqlFiltreSD['WHERE']; |
656 |
$table .= $sqlFiltreSD['FROM']; |
657 |
|
658 |
// Si l'option qui permet de masquer les colonnes comporte la localisation |
659 |
// ou le champ date_complet alors on masque la colonne |
660 |
$param_affichage_col = $f->get_affichage_di_listing_colonnes_masquees(); |
661 |
if (! empty($param_affichage_col)) { |
662 |
if (array_search('localisation', $param_affichage_col) !== false) { |
663 |
$key_champaff = array_search($trim_concat_terrain.'as "'.__("localisation").'"', $champAffiche); |
664 |
unset($champAffiche[$key_champaff]); |
665 |
$champAffiche = array_values($champAffiche); |
666 |
// Gestion pour les listings tous_encours et tous_cloture |
667 |
$key_champaff_commun = array_search($trim_concat_terrain.'as "'.__("localisation").'"', $champAffiche_debut_commun); |
668 |
unset($champAffiche_debut_commun[$key_champaff_commun]); |
669 |
$champAffiche_debut_commun = array_values($champAffiche_debut_commun); |
670 |
} |
671 |
if (array_search('date_complet', $param_affichage_col) !== false) { |
672 |
$key_champaff = array_search('to_char(dossier.date_complet ,\'DD/MM/YYYY\') as "'.__("complétude").'"', $champAffiche); |
673 |
unset($champAffiche[$key_champaff]); |
674 |
$champAffiche = array_values($champAffiche); |
675 |
// Gestion pour les listings tous_encours et tous_cloture |
676 |
$key_champaff_commun = array_search('to_char(dossier.date_complet ,\'DD/MM/YYYY\') as "'.__("complétude").'"', $champAffiche_debut_commun); |
677 |
unset($champAffiche_debut_commun[$key_champaff_commun]); |
678 |
$champAffiche_debut_commun = array_values($champAffiche_debut_commun); |
679 |
} |
680 |
} |
681 |
|
682 |
?> |