Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TDB: Fixe le filtre des indicateurs par plan action #3244

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
218 changes: 4 additions & 214 deletions data_layer/sqitch/deploy/indicateur/filtre.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2,51 +2,9 @@

BEGIN;

create or replace function
thematiques(indicateur_definitions)
returns setof thematique
language sql
security definer
stable
begin
atomic
select t.*
from (
select thematique
from indicateur_definition definition
join thematique
on thematique.md_id = any (definition.thematiques)
where definition.id = $1.indicateur_id
union
select thematique
from indicateur_personnalise_definition definition
join indicateur_personnalise_thematique it
on definition.id = it.indicateur_id
join thematique on it.thematique_id = thematique.id
where definition.id = $1.indicateur_perso_id
) t
where can_read_acces_restreint($1.collectivite_id);
end;
comment on function thematiques(indicateur_definitions) is
'Les thématiques associées à un indicateur.';

create or replace function
definition_referentiel(indicateur_definitions)
returns setof indicateur_definition
rows 1
language sql
security definer
stable
begin
atomic
select ist
from indicateur_definition ist
where ist.id = $1.indicateur_id
and is_authenticated();
end;
comment on function definition_referentiel(indicateur_definitions) is
'La définition de l''indicateur provenant du référentiel.';

-- Recrée la même fonction sans la vérification des droits
-- qui pose des problèmes de performance lors du `fetchFilteredIndicateurs`
-- (requête +30s qui timeout sur l'app)

create or replace function
axes(indicateur_definitions)
Expand All @@ -73,178 +31,10 @@ begin
-- indicateur perso
or ($1.indicateur_perso_id is not null
and fai.indicateur_personnalise_id = $1.indicateur_perso_id))
and can_read_acces_restreint(axe.collectivite_id);
;
end;
comment on function axes(indicateur_definitions) is
'Les axes (plans d''action) associés à un indicateur.';

create or replace function
fiches_non_classees(indicateur_definitions)
returns setof fiche_action_indicateur
language sql
security definer
stable
begin
atomic
select fai
from fiche_action_indicateur fai
join fiche_action fa on fa.id = fai.fiche_id and fa.collectivite_id = $1.collectivite_id
left join definition_referentiel($1) def on true
where not exists (select from fiche_action_axe faa where faa.fiche_id = fai.fiche_id)
and (
-- indicateur prédéfini
fai.indicateur_id = $1.indicateur_id
-- indicateur perso
or fai.indicateur_personnalise_id = $1.indicateur_perso_id
-- indicateur prédéfini dont les valeurs sont celles d'un autre
or def.valeur_indicateur = $1.indicateur_id
)
and can_read_acces_restreint(fa.collectivite_id);
end;
comment on function fiches_non_classees(indicateur_definitions) is
'Les fiches non classées (sans plan d''action) associées à un indicateur.';

create or replace function
pilotes(indicateur_definitions)
returns setof indicateur_pilote
language sql
security definer
stable
begin
atomic
select ip
from indicateur_pilote ip
left join definition_referentiel($1) def on true
where
-- indicateur prédéfini
(($1.indicateur_id is not null
and ip.indicateur_id = $1.indicateur_id
and collectivite_id = $1.collectivite_id)
-- indicateur prédéfini dont les valeurs sont celles d'un autre
or ($1.indicateur_id is not null
and ip.indicateur_id = def.valeur_indicateur
and collectivite_id = $1.collectivite_id)
-- indicateur perso
or ($1.indicateur_perso_id is not null
and ip.indicateur_perso_id = $1.indicateur_perso_id))
and can_read_acces_restreint(ip.collectivite_id);
end;
comment on function pilotes(indicateur_definitions) is
'Les personnes pilotes associées à un indicateur.';

create or replace function
personne(indicateur_pilote)
returns setof personne
rows 1
language sql
security definer
stable
begin
atomic
select private.get_personne($1)
where can_read_acces_restreint($1.collectivite_id);
end;
comment on function personne(indicateur_pilote) is
'Une personne associée comme personne pilote d''un indicateur.';

create or replace function
services(indicateur_definitions)
returns setof indicateur_service_tag
language sql
security definer
stable
begin
atomic
select ist
from indicateur_service_tag ist
left join definition_referentiel($1) def on true
where
-- indicateur prédéfini
(($1.indicateur_id is not null
and ist.indicateur_id = $1.indicateur_id
and collectivite_id = $1.collectivite_id)
-- indicateur prédéfini dont les valeurs sont celles d'un autre
or ($1.indicateur_id is not null
and ist.indicateur_id = def.valeur_indicateur
and collectivite_id = $1.collectivite_id)
-- indicateur perso
or ($1.indicateur_perso_id is not null
and ist.indicateur_perso_id = $1.indicateur_perso_id))
and can_read_acces_restreint(ist.collectivite_id);
end;
comment on function services(indicateur_definitions) is
'Les services associés à un indicateur.';


create or replace function
definition_perso(indicateur_definitions)
returns setof indicateur_personnalise_definition
rows 1
language sql
security definer
stable
begin
atomic
select ipd
from indicateur_personnalise_definition ipd
where ipd.id = $1.indicateur_perso_id
and can_read_acces_restreint(ipd.collectivite_id);
end;
comment on function definition_perso(indicateur_definitions) is
'La définition de l''indicateur personnalisé.';


create or replace function
enfants(indicateur_definitions)
returns setof indicateur_definitions
language sql
security definer
stable
begin
atomic
select $1.collectivite_id as collectivite_id,
definition.id as indicateur_id,
null::integer as indicateur_perso_id,
definition.nom as nom,
definition.description,
definition.unite
from indicateur_definition definition
where definition.parent = $1.indicateur_id
and is_authenticated();
end;
comment on function enfants(indicateur_definitions) is
'Définitions des indicateurs enfants d''un indicateur composé.';

create or replace function
enfants(indicateur_definition)
returns setof indicateur_definition
language sql
security definer
stable
begin
atomic
select def
from indicateur_definition def
where def.parent = $1.id
and is_authenticated();
end;
comment on function enfants(indicateur_definition) is
'Définitions des indicateurs enfants d''un indicateur composé.';

create or replace function
indicateur_action(indicateur_definitions)
returns setof indicateur_action
language sql
security definer
stable
begin
atomic
select ia
from indicateur_action ia
where ia.indicateur_id = $1.indicateur_id
and is_authenticated();
end;
comment on function indicateur_action(indicateur_definitions) is
'La relation entre un indicateur prédéfini et des actions des référentiels.';

COMMIT;
Loading
Loading