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.
 
 

238 lines
10 KiB

return: SETOF record
lang: plpgsql
parameters:
p0:
type: bigint
name: i_rapport_id
p1:
type: text
name: i_option
src: |
DECLARE
sqlcmd text;
_maxind integer;
row RECORD;
BEGIN
_maxind = activite.cti_prepare_rapport_maxoid(i_rapport_id);
IF (i_option <> 'COMP' AND i_rapport_id <> 0) THEN
FOR row IN
SELECT
'INDICATEURS_' || subview_s.table_name || '#' || subview_s.dimension_date,
CASE WHEN SUM(subview.oid) > 0
THEN base.cti_group_concat(CASE WHEN subview.oid IS NOT NULL THEN total_function || '(' || activite.cti_prepare_rapport_get_column(column_name,'') || ')' ELSE 'NULL::numeric' END)
ELSE '' END
FROM
(SELECT v_rapports_tables_indicateurs_1.code AS table_name, generate_series AS indicateur_id , dimension_date
FROM activite.v_rapports_tables_indicateurs_1, generate_series(1, _maxind), base.cti_unnest(Array['1','2','3','4','5']) AS dimension_date
WHERE dimensions_date LIKE '%' || dimension_date || '%') subview_s
LEFT JOIN
(
SELECT *
FROM activite.t_indicateurs
WHERE oid IN (
SELECT base.cti_unnest(Array[indicateur_id, indicateur_associe_1_id, indicateur_associe_2_id, indicateur_associe_3_id, indicateur_associe_4_id, indicateur_associe_5_id, indicateur_associe_6_id, indicateur_associe_7_id])
FROM activite.t_rapports
JOIN activite.t_rapports_rubriques ON t_rapports.oid = t_rapports_rubriques.rapport_id AND rapport_id = i_rapport_id
JOIN activite.t_indicateurs ON t_rapports_rubriques.indicateur_id = t_indicateurs.oid)
) subview ON subview_s.indicateur_id = subview.oid AND subview.table_name = subview_s.table_name AND subview.dimension_date = subview_s.dimension_date
GROUP BY 1
UNION
SELECT
'INDICATEURS_BUDGET'::text,
CASE WHEN SUM(subview.oid) > 0
THEN base.cti_group_concat(CASE WHEN subview.oid IS NOT NULL THEN 'SUM' || '(' || activite.cti_prepare_rapport_get_column('CASE WHEN indicateur_id = ' || subview.oid::text || ' THEN budget ELSE 0 END','') || ')' ELSE 'NULL::numeric' END)
ELSE '' END
FROM
(
SELECT *
FROM
(SELECT generate_series AS indicateur_id , ''::text AS dimension_date
FROM generate_series(1, _maxind)
ORDER BY 1) subview_s
LEFT JOIN
(
SELECT *
FROM activite.t_indicateurs
WHERE oid IN (
SELECT base.cti_unnest(Array[indicateur_id, indicateur_associe_1_id, indicateur_associe_2_id, indicateur_associe_3_id, indicateur_associe_4_id, indicateur_associe_5_id, indicateur_associe_6_id, indicateur_associe_7_id])
FROM activite.t_rapports
JOIN activite.t_rapports_rubriques ON t_rapports.oid = t_rapports_rubriques.rapport_id AND rapport_id = i_rapport_id
JOIN activite.t_indicateurs ON t_rapports_rubriques.indicateur_id = t_indicateurs.oid)
AND oid IN (SELECT indicateur_id FROM activite.t_budget_cle_budget)
) subview ON subview_s.indicateur_id = subview.oid
ORDER BY 1
) subview
GROUP BY 1
ORDER BY 1
LOOP
RETURN NEXT row;
END LOOP;
END IF;
FOR row IN
SELECT
'INDICATEURS_WHERE_' || subview_s.table_name || '#' || subview_s.dimension_date,
CASE WHEN SUM(subview.oid) > 0
THEN
'AND (1<>1 ' || base.cti_group_concat_without_sep(
CASE WHEN subview.oid IS NOT NULL
THEN ' OR ' ||
CASE WHEN total_function <> 'COUNT' THEN 'COALESCE(' || activite.cti_prepare_rapport_get_column(column_name,'') || ',0) <> 0'
ELSE replace(activite.cti_prepare_rapport_get_column(column_name,''),'DISTINCT', '') || ' IS NOT NULL' END
ELSE '' END) || ')'
ELSE '' END
FROM
(SELECT v_rapports_tables_indicateurs_1.code AS table_name, generate_series AS indicateur_id , dimension_date
FROM activite.v_rapports_tables_indicateurs_1, generate_series(1,_maxind), base.cti_unnest(Array['1','2','3','4','5']) AS dimension_date
WHERE dimensions_date LIKE '%' || dimension_date || '%') subview_s
LEFT JOIN
(
SELECT *
FROM activite.t_indicateurs
WHERE oid IN (
SELECT base.cti_unnest(Array[indicateur_id, indicateur_associe_1_id, indicateur_associe_2_id, indicateur_associe_3_id, indicateur_associe_4_id, indicateur_associe_5_id, indicateur_associe_6_id, indicateur_associe_7_id])
FROM activite.t_rapports
JOIN activite.t_rapports_rubriques ON t_rapports.oid = t_rapports_rubriques.rapport_id AND rapport_id = i_rapport_id
JOIN activite.t_indicateurs ON t_rapports_rubriques.indicateur_id = t_indicateurs.oid)
) subview ON subview_s.indicateur_id = subview.oid AND subview.table_name = subview_s.table_name AND subview.dimension_date = subview_s.dimension_date
GROUP BY 1
UNION
SELECT
'INDICATEURS_WHERE_BUDGET'::text,
CASE WHEN SUM(subview.oid) > 0
THEN
'AND (1<>1 ' || base.cti_group_concat_without_sep(
CASE WHEN subview.oid IS NOT NULL
THEN ' OR ' ||
'COALESCE(' || activite.cti_prepare_rapport_get_column('CASE WHEN indicateur_id = ' || subview.oid || ' THEN budget ELSE 0 END','') || ',0) <> 0'
ELSE '' END) || ')'
ELSE '' END
FROM
(SELECT generate_series AS indicateur_id , ''::text AS dimension_date
FROM generate_series(1, _maxind)
GROUP BY 1 ORDER BY 1) subview_s
LEFT JOIN
(
SELECT *
FROM activite.t_indicateurs
WHERE oid IN (
SELECT base.cti_unnest(Array[indicateur_id, indicateur_associe_1_id, indicateur_associe_2_id, indicateur_associe_3_id, indicateur_associe_4_id, indicateur_associe_5_id, indicateur_associe_6_id, indicateur_associe_7_id])
FROM activite.t_rapports
JOIN activite.t_rapports_rubriques ON t_rapports.oid = t_rapports_rubriques.rapport_id AND rapport_id = i_rapport_id
JOIN activite.t_indicateurs ON t_rapports_rubriques.indicateur_id = t_indicateurs.oid)
AND oid IN (SELECT indicateur_id FROM activite.t_budget_cle_budget)
) subview ON subview_s.indicateur_id = subview.oid
GROUP BY 1
ORDER BY 1
LOOP
RETURN NEXT row;
END LOOP;
IF (i_option = 'MONTH' OR i_option = 'COMP') AND i_rapport_id <> 0 THEN
FOR row IN
SELECT
'INDICATEURS_COLUMNS_' || subview_s.table_name || '#' || subview_s.dimension_date,
CASE WHEN SUM(subview.oid) > 0
THEN base.cti_group_concat(CASE WHEN subview.oid IS NOT NULL THEN total_function || '(' || activite.cti_prepare_rapport_get_column(column_name,'MONTH') || ')' ELSE 'NULL::numeric' END)
ELSE '' END
FROM
(SELECT v_rapports_tables_indicateurs_1.code AS table_name, generate_series AS indicateur_id , dimension_date
FROM activite.v_rapports_tables_indicateurs_1, generate_series(1, _maxind), base.cti_unnest(Array['1','2','3','4','5']) AS dimension_date
WHERE dimensions_date LIKE '%' || dimension_date || '%') subview_s
LEFT JOIN
(
SELECT *
FROM activite.t_indicateurs
WHERE oid IN (
SELECT base.cti_unnest(Array[indicateur_id, indicateur_associe_1_id, indicateur_associe_2_id, indicateur_associe_3_id, indicateur_associe_4_id, indicateur_associe_5_id, indicateur_associe_6_id, indicateur_associe_7_id])
FROM activite.t_rapports
JOIN activite.t_rapports_rubriques ON t_rapports.oid = t_rapports_rubriques.rapport_id AND rapport_id = i_rapport_id
JOIN activite.t_indicateurs ON t_rapports_rubriques.indicateur_id = t_indicateurs.oid)
) subview ON subview_s.indicateur_id = subview.oid AND subview.table_name = subview_s.table_name AND subview.dimension_date = subview_s.dimension_date
GROUP BY 1
UNION
SELECT
'INDICATEURS_COLUMNS_BUDGET'::text,
CASE WHEN SUM(subview.oid) > 0
THEN base.cti_group_concat(CASE WHEN subview.oid IS NOT NULL THEN 'SUM' || '(' || activite.cti_prepare_rapport_get_column('CASE WHEN indicateur_id = ' || subview.oid::text || ' THEN budget ELSE 0 END','MONTH') || ')' ELSE 'NULL::numeric' END)
ELSE '' END
FROM
(SELECT subview_s.indicateur_id, subview_s.dimension_date, subview.oid
FROM
(SELECT generate_series AS indicateur_id , ''::text AS dimension_date
FROM generate_series(1, _maxind)
GROUP BY 1 ORDER BY 1) subview_s
LEFT JOIN
(
SELECT *
FROM activite.t_indicateurs
WHERE oid IN (
SELECT base.cti_unnest(Array[indicateur_id, indicateur_associe_1_id, indicateur_associe_2_id, indicateur_associe_3_id, indicateur_associe_4_id, indicateur_associe_5_id, indicateur_associe_6_id, indicateur_associe_7_id])
FROM activite.t_rapports
JOIN activite.t_rapports_rubriques ON t_rapports.oid = t_rapports_rubriques.rapport_id AND rapport_id = i_rapport_id
JOIN activite.t_indicateurs ON t_rapports_rubriques.indicateur_id = t_indicateurs.oid)
AND oid IN (SELECT indicateur_id FROM activite.t_budget_cle_budget)
) subview ON subview_s.indicateur_id = subview.oid
ORDER BY 1
) subview
GROUP BY 1
ORDER BY 1
LOOP
RETURN NEXT row;
END LOOP;
END IF;
IF (i_option = 'DASHBOARD') THEN
FOR row IN
SELECT
'INDICATEURS_' || subview_s.table_name || '#' || subview_s.dimension_date,
CASE WHEN SUM(subview.oid) > 0
THEN base.cti_group_concat(CASE WHEN subview.oid IS NOT NULL THEN total_function || '(' || activite.cti_prepare_rapport_get_column(column_name,'') || ')' ELSE 'NULL::numeric' END)
ELSE '' END
FROM
(SELECT v_rapports_tables_indicateurs_1.code AS table_name, generate_series AS indicateur_id , dimension_date
FROM activite.v_rapports_tables_indicateurs_1, generate_series(1, _maxind), base.cti_unnest(Array['1','2','3','4','5']) AS dimension_date
WHERE dimensions_date LIKE '%' || dimension_date || '%') subview_s
LEFT JOIN
(
SELECT *
FROM activite.t_indicateurs
WHERE oid IN (
SELECT base.cti_unnest(Array[oid, indicateur_associe_1_id, indicateur_associe_2_id, indicateur_associe_3_id, indicateur_associe_4_id, indicateur_associe_5_id])
FROM activite.t_indicateurs WHERE code <> '' AND t_indicateurs.oid > 0 AND (indicateur_reference_id <> 0 OR COALESCE(dimension_date_2,'') = ''))
) subview ON subview_s.indicateur_id = subview.oid AND subview.table_name = subview_s.table_name AND subview.dimension_date = subview_s.dimension_date
GROUP BY 1
ORDER BY 1
LOOP
RETURN NEXT row;
END LOOP;
END IF;
RETURN ;
END;