You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

158 lines
6.5 KiB

return: text
lang: plpgsql
parameters:
p0:
type: bigint
name: i_rapport_id
src: |
DECLARE
BEGIN
DROP TABLE IF EXISTS w_VP_rapports_rubriques;
CREATE TEMP TABLE w_VP_rapports_rubriques AS
SELECT t_rapports_rubriques.*,
array_cat(CASE WHEN erase_rapport_indicateur_condition IS DISTINCT FROM '1' THEN t_rapports.rapport_indicateur_condition_id ELSE NULL END,indicateur_condition_id) AS vp_indicateur_condition_id
FROM rh.t_rapports_rubriques
JOIN rh.t_rapports ON rapport_id = t_rapports.oid
WHERE rapport_id = i_rapport_id
;
DROP TABLE IF EXISTS w_VP_indicateurs;
CREATE TEMP TABLE w_VP_indicateurs AS
SELECT t_indicateurs_target.*,
numero_rubrique AS vp_numero_rubrique,
vp_indicateur_condition_id AS indicateur_condition_id,
''::text AS indicateur_condition_where,
row_number() OVER(ORDER BY numero_rubrique, indicateur_id) AS vp_oid
FROM rh.t_indicateurs
JOIN rh.t_indicateurs t_indicateurs_target ON
(
t_indicateurs.total_function = '*CALC' AND
t_indicateurs_target.oid = ANY(
ARRAY[
t_indicateurs.indicateur_associe_1_id,
t_indicateurs.indicateur_associe_2_id,
t_indicateurs.indicateur_associe_3_id,
t_indicateurs.indicateur_associe_4_id,
t_indicateurs.indicateur_associe_5_id,
t_indicateurs.indicateur_associe_6_id,
t_indicateurs.indicateur_associe_7_id,
t_indicateurs.indicateur_associe_8_id,
t_indicateurs.indicateur_associe_9_id,
t_indicateurs.indicateur_associe_10_id
]) OR
t_indicateurs.oid = t_indicateurs_target.oid
)
JOIN w_VP_rapports_rubriques t_rapports_rubriques ON
t_indicateurs.oid = t_rapports_rubriques.indicateur_id
ORDER BY numero_rubrique, indicateur_id
;
UPDATE w_VP_rapports_rubriques
SET indicateur_id = w_VP_indicateurs.vp_oid
FROM w_VP_indicateurs
WHERE w_VP_rapports_rubriques.numero_rubrique = w_VP_indicateurs.vp_numero_rubrique AND
w_VP_rapports_rubriques.indicateur_id = w_VP_indicateurs.oid
;
UPDATE w_VP_indicateurs
SET indicateur_associe_1_id = w_VP_indicateurs_f.vp_oid
FROM w_VP_indicateurs w_VP_indicateurs_f
WHERE w_VP_indicateurs.indicateur_associe_1_id = w_VP_indicateurs_f.oid AND
w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique
;
UPDATE w_VP_indicateurs
SET indicateur_associe_2_id = w_VP_indicateurs_f.vp_oid
FROM w_VP_indicateurs w_VP_indicateurs_f
WHERE w_VP_indicateurs.indicateur_associe_2_id = w_VP_indicateurs_f.oid AND
w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique
;
UPDATE w_VP_indicateurs
SET indicateur_associe_3_id = w_VP_indicateurs_f.vp_oid
FROM w_VP_indicateurs w_VP_indicateurs_f
WHERE w_VP_indicateurs.indicateur_associe_3_id = w_VP_indicateurs_f.oid AND
w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique
;
UPDATE w_VP_indicateurs
SET indicateur_associe_4_id = w_VP_indicateurs_f.vp_oid
FROM w_VP_indicateurs w_VP_indicateurs_f
WHERE w_VP_indicateurs.indicateur_associe_4_id = w_VP_indicateurs_f.oid AND
w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique
;
UPDATE w_VP_indicateurs
SET indicateur_associe_5_id = w_VP_indicateurs_f.vp_oid
FROM w_VP_indicateurs w_VP_indicateurs_f
WHERE w_VP_indicateurs.indicateur_associe_5_id = w_VP_indicateurs_f.oid AND
w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique
;
UPDATE w_VP_indicateurs
SET indicateur_associe_6_id = w_VP_indicateurs_f.vp_oid
FROM w_VP_indicateurs w_VP_indicateurs_f
WHERE w_VP_indicateurs.indicateur_associe_6_id = w_VP_indicateurs_f.oid AND
w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique
;
UPDATE w_VP_indicateurs
SET indicateur_associe_7_id = w_VP_indicateurs_f.vp_oid
FROM w_VP_indicateurs w_VP_indicateurs_f
WHERE w_VP_indicateurs.indicateur_associe_7_id = w_VP_indicateurs_f.oid AND
w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique
;
UPDATE w_VP_indicateurs
SET indicateur_associe_8_id = w_VP_indicateurs_f.vp_oid
FROM w_VP_indicateurs w_VP_indicateurs_f
WHERE w_VP_indicateurs.indicateur_associe_8_id = w_VP_indicateurs_f.oid AND
w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique
;
UPDATE w_VP_indicateurs
SET indicateur_associe_9_id = w_VP_indicateurs_f.vp_oid
FROM w_VP_indicateurs w_VP_indicateurs_f
WHERE w_VP_indicateurs.indicateur_associe_9_id = w_VP_indicateurs_f.oid AND
w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique
;
UPDATE w_VP_indicateurs
SET indicateur_associe_10_id = w_VP_indicateurs_f.vp_oid
FROM w_VP_indicateurs w_VP_indicateurs_f
WHERE w_VP_indicateurs.indicateur_associe_10_id = w_VP_indicateurs_f.oid AND
w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique
;
UPDATE w_VP_indicateurs SET
oid = vp_oid
;
UPDATE w_VP_indicateurs SET
indicateur_condition_where = condition_where
FROM
(
SELECT w_VP_indicateurs.oid, array_to_string(array_agg('('||COALESCE(t_indicateur_condition_table_spec.check_where,t_indicateur_condition_table.check_where)||')'),' AND ') AS condition_where
FROM w_VP_indicateurs
JOIN rh.t_indicateur_condition ON t_indicateur_condition.oid = ANY(indicateur_condition_id)
JOIN rh.t_indicateur_condition_table ON
t_indicateur_condition_table.indicateur_condition_id = t_indicateur_condition.oid AND
t_indicateur_condition_table.table_name = ''
LEFT JOIN rh.t_indicateur_condition_table t_indicateur_condition_table_spec ON
t_indicateur_condition_table_spec.indicateur_condition_id = t_indicateur_condition.oid AND
t_indicateur_condition_table_spec.table_name = w_VP_indicateurs.table_name
WHERE COALESCE(t_indicateur_condition_table_spec.check_where,t_indicateur_condition_table.check_where) <> ''
GROUP BY 1
) subview
WHERE w_VP_indicateurs.oid = subview.oid
;
UPDATE w_VP_indicateurs
SET column_name =
CASE WHEN column_name ILIKE 'DISTINCT%' THEN 'DISTINCT ' ELSE '' END ||
'CASE WHEN ' || indicateur_condition_where ||
' THEN ' || CASE WHEN column_name ILIKE 'DISTINCT%' THEN substr(column_name,9) ELSE column_name END ||
' ELSE ' ||
CASE WHEN total_function = 'SUM' THEN '0' ELSE 'NULL' END || ' END'
WHERE indicateur_condition_where <> '' AND
total_function In('SUM','COUNT')
;
RETURN 'OK';
END;