/[openfoncier]/trunk/sql/pgsql/dossier_instruction.inc.php
ViewVC logotype

Contents of /trunk/sql/pgsql/dossier_instruction.inc.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 18876 - (show annotations)
Tue Oct 8 08:41:06 2024 UTC (3 months, 3 weeks ago) by softime
File size: 28930 byte(s)
merge: fusion de la branche d'intégration 6.8.0-develop dans le trunk

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'] .= '&amp;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&amp;action=3'.'&amp;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&amp;action=3&amp;idx=',
529 'id' => '&amp;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&amp;action=140&amp;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 ?>

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26