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 |
|
11 |
/*Titre de la page*/ |
12 |
$ent = _("instruction")." -> "._("dossiers d'instruction"); |
13 |
|
14 |
$tab_title = _("DI"); |
15 |
|
16 |
// Pour le formulaire de géocodage par lot |
17 |
// Change le nom de l'onglet principal et cache les autres onglets |
18 |
if ($f->get_submitted_get_value('action') === '126'){ |
19 |
$tab_title = _("Géolocalisation des dossiers"); |
20 |
$sousformulaire = array(); |
21 |
} |
22 |
|
23 |
/* Test SQL pour récupérer les bons champs selon la qualité du demandeur : |
24 |
* particulier ou personne morale*/ |
25 |
$case_demandeur = "CASE WHEN demandeur.qualite='particulier' |
26 |
THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom)) |
27 |
ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination)) |
28 |
END"; |
29 |
|
30 |
/*Formatage de l'adresse du terrain, concatenantion de plusieurs champs pour les |
31 |
* mettrent dans une seule colonne*/ |
32 |
$trim_concat_terrain = ' |
33 |
TRIM( |
34 |
CASE |
35 |
WHEN dossier.adresse_normalisee IS NULL |
36 |
OR TRIM(dossier.adresse_normalisee) = \'\' |
37 |
THEN |
38 |
CONCAT_WS( |
39 |
\' \', |
40 |
dossier.terrain_adresse_voie_numero, |
41 |
dossier.terrain_adresse_voie, |
42 |
dossier.terrain_adresse_code_postal |
43 |
) |
44 |
ELSE |
45 |
dossier.adresse_normalisee |
46 |
END |
47 |
) as "'.__("localisation").'"'; |
48 |
|
49 |
/*Tables sur lesquels la requête va s'effectuer*/ |
50 |
$table = DB_PREFIXE."dossier |
51 |
LEFT JOIN ( |
52 |
SELECT * |
53 |
FROM ".DB_PREFIXE."lien_dossier_demandeur |
54 |
INNER JOIN ".DB_PREFIXE."demandeur |
55 |
ON demandeur.demandeur = lien_dossier_demandeur.demandeur |
56 |
WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE |
57 |
AND LOWER(demandeur.type_demandeur) = LOWER('petitionnaire') |
58 |
) as demandeur |
59 |
ON demandeur.dossier = dossier.dossier |
60 |
LEFT JOIN ".DB_PREFIXE."dossier_autorisation |
61 |
ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation |
62 |
LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille |
63 |
ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille = dossier_autorisation.dossier_autorisation_type_detaille |
64 |
LEFT JOIN ".DB_PREFIXE."instructeur |
65 |
ON dossier.instructeur = instructeur.instructeur |
66 |
LEFT JOIN ".DB_PREFIXE."om_utilisateur |
67 |
ON instructeur.om_utilisateur = om_utilisateur.om_utilisateur |
68 |
LEFT JOIN ".DB_PREFIXE."instructeur as instructeur2 |
69 |
ON dossier.instructeur_2 = instructeur2.instructeur |
70 |
LEFT JOIN ".DB_PREFIXE."om_utilisateur as om_utilisateur2 |
71 |
ON instructeur2.om_utilisateur = om_utilisateur2.om_utilisateur |
72 |
LEFT JOIN ".DB_PREFIXE."etat |
73 |
ON dossier.etat = etat.etat |
74 |
LEFT JOIN ".DB_PREFIXE."division |
75 |
ON dossier.division = division.division |
76 |
LEFT JOIN ".DB_PREFIXE."avis_decision |
77 |
ON avis_decision.avis_decision=dossier.avis_decision |
78 |
LEFT JOIN ".DB_PREFIXE."om_collectivite |
79 |
ON dossier.om_collectivite=om_collectivite.om_collectivite |
80 |
LEFT OUTER JOIN ".DB_PREFIXE."arrondissement |
81 |
ON arrondissement.code_postal = dossier.terrain_adresse_code_postal |
82 |
"; |
83 |
if ($f->is_option_dossier_commune_enabled()) { |
84 |
$table .= " |
85 |
LEFT OUTER JOIN ".DB_PREFIXE."commune |
86 |
ON commune.commune = dossier.commune |
87 |
"; |
88 |
} |
89 |
|
90 |
// Ajout des colonnes concernant la demat |
91 |
if ($f->get_submitted_get_value('mode') === 'export_csv') { |
92 |
$table .= |
93 |
"LEFT JOIN |
94 |
(SELECT |
95 |
dossier, |
96 |
external_uid |
97 |
FROM |
98 |
".DB_PREFIXE."lien_id_interne_uid_externe |
99 |
WHERE object = 'dossier' |
100 |
AND category = 'platau' |
101 |
) AS dossier_platau |
102 |
ON |
103 |
dossier_platau.dossier = dossier.dossier |
104 |
LEFT JOIN |
105 |
(SELECT |
106 |
dossier, |
107 |
external_uid |
108 |
FROM |
109 |
".DB_PREFIXE."lien_id_interne_uid_externe |
110 |
WHERE object = 'dossier_consultation' |
111 |
AND category = 'platau' |
112 |
) AS consultation_platau |
113 |
ON |
114 |
consultation_platau.dossier = dossier.dossier |
115 |
LEFT JOIN |
116 |
(SELECT |
117 |
dossier, |
118 |
ARRAY_TO_STRING(ARRAY_AGG(external_uid ORDER BY external_uid ASC), ', ') AS external_uid |
119 |
FROM |
120 |
".DB_PREFIXE."lien_id_interne_uid_externe |
121 |
WHERE |
122 |
object = 'piece' |
123 |
AND category = 'platau' |
124 |
GROUP BY |
125 |
dossier) AS pieces_platau |
126 |
ON |
127 |
pieces_platau.dossier = dossier.dossier |
128 |
LEFT JOIN |
129 |
(SELECT |
130 |
dossier, |
131 |
ARRAY_TO_STRING(ARRAY_AGG(object || ' : ' || external_uid), ', ') AS external_uid |
132 |
FROM |
133 |
".DB_PREFIXE."lien_id_interne_uid_externe |
134 |
WHERE |
135 |
object != 'piece' |
136 |
AND object != 'dossier' |
137 |
AND object != 'dossier_consultation' |
138 |
AND category = 'platau' |
139 |
GROUP BY |
140 |
dossier) AS autres_platau |
141 |
ON |
142 |
autres_platau.dossier = dossier.dossier |
143 |
LEFT JOIN |
144 |
(SELECT DISTINCT(dossier_instruction), source_depot |
145 |
FROM ".DB_PREFIXE."demande) AS demande |
146 |
ON demande.dossier_instruction = dossier.dossier |
147 |
"; |
148 |
} |
149 |
|
150 |
$champ_date_depot_mairie = 'to_char(dossier.date_depot_mairie ,\'DD/MM/YYYY\') as "'._("date_depot_mairie").'"'; |
151 |
|
152 |
/*Champs du début de la requête*/ |
153 |
$champAffiche_debut_commun = array( |
154 |
'dossier.dossier as "'._("dossier").'"', |
155 |
'dossier.dossier_libelle as "'._("dossier").'"' |
156 |
); |
157 |
if ($f->is_option_dossier_commune_enabled()) { |
158 |
$champAffiche_debut_commun[] = 'commune.libelle as "'.__("commune").'"'; |
159 |
} |
160 |
array_push($champAffiche_debut_commun, |
161 |
$case_demandeur.' as "'._("petitionnaire").'"', |
162 |
$trim_concat_terrain, |
163 |
'dossier_autorisation_type_detaille.libelle as "'._("nature_dossier").'"', |
164 |
'to_char(dossier.date_depot ,\'DD/MM/YYYY\') as "'._("date_depot").'"', |
165 |
'to_char(dossier.date_complet ,\'DD/MM/YYYY\') as "'._("date_complet").'"', |
166 |
'CASE WHEN dossier.incomplet_notifie IS TRUE AND dossier.incompletude IS TRUE |
167 |
THEN to_char(dossier.date_limite_incompletude ,\'DD/MM/YYYY\') |
168 |
ELSE to_char(dossier.date_limite ,\'DD/MM/YYYY\') |
169 |
END as "'._("date_limite").'"' |
170 |
); |
171 |
|
172 |
if ($f->is_option_date_depot_mairie_enabled() === true) { |
173 |
$champAffiche_debut_commun[] = $champ_date_depot_mairie; |
174 |
} |
175 |
/** |
176 |
* Colonne "Nature des travaux" (regroupe les descriptions des données |
177 |
* techniques). |
178 |
*/ |
179 |
// Nombre max de caractères à afficher dans la colonne de la nature des travaux |
180 |
// avant de tronquer la valeur et d'ajouter une ellipse "…" |
181 |
$max_chars = 40; |
182 |
// |
183 |
$nature_des_travaux_select = " |
184 |
CASE WHEN char_length(nature_des_travaux) <= ".$max_chars." THEN |
185 |
CONCAT('<span title=\"', |
186 |
nature_des_travaux, |
187 |
'\">', |
188 |
replace(nature_des_travaux, '\n', '<br/>'), |
189 |
'</span>') |
190 |
ELSE |
191 |
CONCAT('<span title=\"', |
192 |
nature_des_travaux, |
193 |
'\">', |
194 |
replace(left(nature_des_travaux, ".$max_chars."), '\n', '<br/>') || '…', |
195 |
'</span>') |
196 |
END as \""._("nature des travaux").'"'; |
197 |
// description/nature des travaux. En cas de modif, bloc de code aussi présent dans |
198 |
// dossier.form.inc.php (le formulaire du DI)', 'om_requete' et 'stats à la demande' |
199 |
$nature_des_travaux_from = " |
200 |
INNER JOIN ( |
201 |
SELECT |
202 |
CONCAT_WS( |
203 |
'\n', |
204 |
CASE WHEN co_projet_desc = '' THEN |
205 |
NULL |
206 |
ELSE |
207 |
TRIM(co_projet_desc) |
208 |
END, |
209 |
CASE WHEN ope_proj_desc = '' THEN |
210 |
NULL |
211 |
ELSE |
212 |
TRIM(ope_proj_desc) |
213 |
END, |
214 |
CASE WHEN am_projet_desc = '' THEN |
215 |
NULL |
216 |
ELSE |
217 |
TRIM(am_projet_desc) |
218 |
END, |
219 |
CASE WHEN dm_projet_desc = '' THEN |
220 |
NULL |
221 |
ELSE |
222 |
TRIM(dm_projet_desc) |
223 |
END, |
224 |
CASE WHEN donnees_techniques.erp_cstr_neuve IS TRUE |
225 |
THEN '".str_replace("'", "''", _('erp_cstr_neuve'))."' END, |
226 |
CASE WHEN donnees_techniques.erp_trvx_acc IS TRUE |
227 |
THEN '".str_replace("'", "''", _('erp_trvx_acc'))."' END, |
228 |
CASE WHEN donnees_techniques.erp_extension IS TRUE |
229 |
THEN '".str_replace("'", "''", _('erp_extension'))."' END, |
230 |
CASE WHEN donnees_techniques.erp_rehab IS TRUE |
231 |
THEN '".str_replace("'", "''", _('erp_rehab'))."' END, |
232 |
CASE WHEN donnees_techniques.erp_trvx_am IS TRUE |
233 |
THEN '".str_replace("'", "''", _('erp_trvx_am'))."' END, |
234 |
CASE WHEN donnees_techniques.erp_vol_nouv_exist IS TRUE |
235 |
THEN '".str_replace("'", "''", _('erp_vol_nouv_exist'))."' END |
236 |
) as nature_des_travaux, |
237 |
dossier_instruction |
238 |
FROM ".DB_PREFIXE."donnees_techniques |
239 |
) as nature_des_travaux |
240 |
ON nature_des_travaux.dossier_instruction = dossier.dossier |
241 |
"; |
242 |
// On ne veut cette colonne que dans les trois listings "Recherche", |
243 |
// "Mes encours" et "Tous les encours" |
244 |
$listings = array("dossier_instruction", |
245 |
"dossier_instruction_mes_encours", |
246 |
"dossier_instruction_tous_encours"); |
247 |
// |
248 |
$is_in_obj_whitelist = in_array($obj, $listings); |
249 |
// La variable $retourformulaire permet de s'assurer que l'on est pas dans un |
250 |
// sous-tableau |
251 |
if ($is_in_obj_whitelist === true && $retourformulaire === '') { |
252 |
// Modifie les colonnes à afficher en début du tableau |
253 |
$champAffiche_debut_commun = array( |
254 |
'dossier.dossier as "'._("dossier").'"', |
255 |
'dossier.dossier_libelle as "'._("dossier").'"' |
256 |
); |
257 |
if ($f->is_option_dossier_commune_enabled()) { |
258 |
$champAffiche_debut_commun[] = 'commune.libelle as "'.__("commune").'"'; |
259 |
} |
260 |
array_push($champAffiche_debut_commun, |
261 |
$case_demandeur.' as "'._("petitionnaire").'"', |
262 |
$trim_concat_terrain, |
263 |
'dossier_autorisation_type_detaille.libelle as "'._("nature_dossier").'"', |
264 |
$nature_des_travaux_select, |
265 |
'to_char(dossier.date_depot ,\'DD/MM/YYYY\') as "'._("date_depot").'"', |
266 |
'to_char(dossier.date_complet ,\'DD/MM/YYYY\') as "'._("date_complet").'"', |
267 |
'CASE WHEN dossier.incomplet_notifie IS TRUE AND dossier.incompletude IS TRUE |
268 |
THEN to_char(dossier.date_limite_incompletude ,\'DD/MM/YYYY\') |
269 |
ELSE to_char(dossier.date_limite ,\'DD/MM/YYYY\') |
270 |
END as "'._("date_limite").'"' |
271 |
); |
272 |
if ($f->is_option_date_depot_mairie_enabled() === true) { |
273 |
$champAffiche_debut_commun[] = $champ_date_depot_mairie; |
274 |
} |
275 |
// Modifie également le from |
276 |
$table .= $nature_des_travaux_from; |
277 |
} |
278 |
|
279 |
/*Champs de la fin de la requête*/ |
280 |
$champAffiche_fin_commun = array( |
281 |
'etat.libelle as "'._("etat").'"', |
282 |
'CASE WHEN dossier.enjeu_urba is TRUE |
283 |
THEN \'<span class="om-icon om-icon-16 om-icon-fix enjeu_urba-16" title="'._("Enjeu URBA").'">URBA</span>\' |
284 |
ELSE \'\' |
285 |
END || |
286 |
CASE WHEN dossier.enjeu_erp is TRUE |
287 |
THEN \'<span class="om-icon om-icon-16 om-icon-fix enjeu_erp-16" title="'._("Enjeu ERP").'">ERP</span>\' |
288 |
ELSE \'\' |
289 |
END |
290 |
as "'._("enjeu").'"', |
291 |
); |
292 |
|
293 |
// |
294 |
if ($_SESSION['niveau'] == '2') { |
295 |
array_push($champAffiche_fin_commun, "om_collectivite.libelle as \""._("collectivite")."\""); |
296 |
} |
297 |
|
298 |
$selection .= "AND groupe.code != 'CTX'"; |
299 |
|
300 |
/*Liste des champs affichés dans le tableau de résultat*/ |
301 |
$champAffiche = array_merge( |
302 |
$champAffiche_debut_commun, |
303 |
array('instructeur.nom as "'._("instructeur").'"', |
304 |
'division.code as "'._("division").'"', |
305 |
), |
306 |
$champAffiche_fin_commun |
307 |
); |
308 |
|
309 |
// Suppression du bouton d'ajout, qui n'est pas affiché par défaut dans les listings de |
310 |
// dossiers d'instruction |
311 |
$tab_actions['corner']['ajouter'] = NULL; |
312 |
|
313 |
if (isset($_GET['message_help']) |
314 |
&& ! is_null($_GET['message_help']) |
315 |
&& $_GET['message_help'] != "" |
316 |
&& $_GET['module'] == 'tab') { |
317 |
|
318 |
$tab_actions['left']["consulter"]['id'] .= '&message_help='.urlencode($_GET['message_help']); |
319 |
$tab_actions['content'] = $tab_actions['left']["consulter"]; |
320 |
} |
321 |
|
322 |
// Liste des autres dossiers d'instructions |
323 |
if ($retourformulaire== 'dossier_instruction'){ |
324 |
$champAffiche = array( |
325 |
'b.dossier as "'._("dossier_instruction").'"', |
326 |
'b.dossier_libelle as "'._("dossier").'"' |
327 |
); |
328 |
if ($f->is_option_dossier_commune_enabled()) { |
329 |
$champAffiche[] = 'c.libelle as "'._("commune").'"'; |
330 |
} |
331 |
array_push($champAffiche, |
332 |
'dossier_instruction_type.libelle as "'._("demande_type").'"', |
333 |
'to_char(b.date_depot ,\'DD/MM/YYYY\') as "'._("date_depot").'"', |
334 |
'b.etat as "'._("etat").'"' |
335 |
); |
336 |
|
337 |
$table =DB_PREFIXE.'dossier as a |
338 |
JOIN '.DB_PREFIXE.'dossier_autorisation |
339 |
ON a.dossier_autorisation=dossier_autorisation.dossier_autorisation |
340 |
JOIN '.DB_PREFIXE.'dossier as b |
341 |
ON b.dossier_autorisation=dossier_autorisation.dossier_autorisation |
342 |
JOIN '.DB_PREFIXE.'dossier_instruction_type |
343 |
ON dossier_instruction_type.dossier_instruction_type = b.dossier_instruction_type'; |
344 |
if ($f->is_option_dossier_commune_enabled()) { |
345 |
$table .= ' |
346 |
JOIN '.DB_PREFIXE.'commune as c |
347 |
ON c.commune = dossier.commune'; |
348 |
} |
349 |
$selection = 'WHERE a.dossier=\''.$f->db->escapeSimple($idxformulaire).'\''; |
350 |
$tri= "order by b.date_depot ASC"; |
351 |
|
352 |
// |
353 |
$tab_actions['left']["consulter"] = |
354 |
array('lien' => ''.OM_ROUTE_FORM.'&obj=dossier_instruction&action=3'.'&idx=', |
355 |
'id' => '&retourformulaire='.$retourformulaire.'&retour=', |
356 |
'lib' => '<span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'._('Consulter').'</span>', |
357 |
'rights' => array('list' => array('dossier_instruction', 'dossier_instruction_consulter'), 'operator' => 'OR'), |
358 |
'ordre' => 10, |
359 |
'ajax' => false); |
360 |
|
361 |
$tab_actions['content'] = $tab_actions['left']["consulter"]; |
362 |
$options[] = array( |
363 |
"type"=>"pagination_select", |
364 |
"display"=>false, |
365 |
); |
366 |
} |
367 |
if ( $retourformulaire == "dossier_autorisation") { |
368 |
|
369 |
// |
370 |
$tab_actions['left']["consulter"] = |
371 |
array('lien' => ''.OM_ROUTE_FORM.'&obj=dossier_instruction&action=3&idx=', |
372 |
'id' => '&retourformulaire='.$retourformulaire, |
373 |
'lib' => '<span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'._('Consulter').'</span>', |
374 |
'rights' => array('list' => array('dossier_instruction', 'dossier_instruction_consulter'), 'operator' => 'OR'), |
375 |
'ordre' => 10, |
376 |
'ajax' => false); |
377 |
|
378 |
$tab_actions['content'] = $tab_actions['left']["consulter"] ; |
379 |
} |
380 |
|
381 |
|
382 |
// Affichage du bouton de redirection vers le SIG externe si configuré |
383 |
// XXX Ajouter filtre pour afficher l'icone géolocalisation en fonction de la conf SIG du dossier |
384 |
if($f->getParameter('option_sig') == 'sig_externe') { |
385 |
$tab_actions['left']["localiser-sig-externe"] = array( |
386 |
'lien' => ''.OM_ROUTE_FORM.'&obj=dossier_instruction&action=140&idx=', |
387 |
'id' => '', |
388 |
'lib' => '<span class="om-icon om-icon-16 om-icon-fix sig-16" title="'._('Localiser').'">'._('Localiser').'</span>', |
389 |
'rights' => array('list' => array('dossier_instruction', 'dossier_instruction_consulter'), 'operator' => 'OR'), |
390 |
'ordre' => 20, |
391 |
'target' => "_SIG", |
392 |
'ajax' => false); |
393 |
} |
394 |
|
395 |
// Si filtre DI auxquels on peut proposer une autre décision |
396 |
if (isset($extra_parameters["filtre_decision"]) |
397 |
&& $extra_parameters["filtre_decision"] == true) { |
398 |
|
399 |
// Augmentation de la limite |
400 |
$serie = 50; |
401 |
// Réinitialisation des options |
402 |
$options = array(); |
403 |
// Suppression de la recherche avancée |
404 |
$options[] = array( |
405 |
'type' => 'search', |
406 |
'display' => false); |
407 |
// Suppression du sélecteur de pages |
408 |
$options[] = array( |
409 |
'type' => 'pagination_select', |
410 |
'display' => false); |
411 |
// Ajout jointure |
412 |
$table .= "JOIN ".DB_PREFIXE."instruction ON instruction.instruction = ( |
413 |
SELECT instruction |
414 |
FROM ".DB_PREFIXE."instruction |
415 |
JOIN ".DB_PREFIXE."evenement on instruction.evenement=evenement.evenement |
416 |
WHERE instruction.dossier = dossier.dossier |
417 |
AND evenement.retour IS FALSE |
418 |
ORDER BY date_evenement DESC, instruction DESC |
419 |
LIMIT 1 |
420 |
) |
421 |
JOIN ".DB_PREFIXE."evenement ON instruction.evenement=evenement.evenement |
422 |
JOIN ".DB_PREFIXE."dossier_instruction_type ON dossier.dossier_instruction_type=dossier_instruction_type.dossier_instruction_type AND dossier_instruction_type.code IN ('P', 'T', 'M')"; |
423 |
// Modification sélection |
424 |
$selection = "WHERE |
425 |
groupe.code != 'CTX' |
426 |
AND ((evenement.type = 'arrete' AND instruction.om_final_instruction IS TRUE) OR evenement.type = 'changement_decision') |
427 |
AND evenement.retour IS FALSE |
428 |
AND instruction.date_retour_signature IS NULL |
429 |
AND instruction.date_envoi_rar IS NULL |
430 |
AND instruction.date_retour_rar IS NULL |
431 |
AND instruction.date_envoi_controle_legalite IS NULL |
432 |
AND instruction.date_retour_controle_legalite IS NULL |
433 |
AND etat.statut = 'encours' |
434 |
AND om_utilisateur.login != '".$_SESSION['login']."'"; |
435 |
// Si collectivité de l'utilisateur niveau mono alors filtre sur celle-ci |
436 |
if ($f->isCollectiviteMono($_SESSION['collectivite']) === true) { |
437 |
$selection .= " AND dossier.om_collectivite=".$_SESSION['collectivite']; |
438 |
} |
439 |
// Modification tri |
440 |
$tri = " ORDER BY dossier.dossier "; |
441 |
} |
442 |
|
443 |
// Gestion des groupes et confidentialité |
444 |
include ('../sql/pgsql/filter_group.inc.php'); |
445 |
|
446 |
?> |