|
|
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;
|