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.
 
 
 

1397 lines
70 KiB

return: SETOF record
lang: plpgsql
parameters:
p0:
type: text
name: i_option
src: |
DECLARE
_view_type text;
_view_name text;
_view_name_default text;
_columns_array text[];
_columns_array_justif text[];
row RECORD;
BEGIN
--RAISE NOTICE '%' , 'DEBUG 0 : ' || clock_timestamp()::text;
DROP TABLE IF EXISTS w_cti_get_columns_options_decoup;
CREATE temp TABLE w_cti_get_columns_options_decoup AS
SELECT i, substr(replace(replace(replace(i_option,chr(9),' '),chr(10),' '),chr(13),' '),i,1) AS car, 0::integer AS level, 0::integer AS key_index
FROM generate_series(1, length(i_option)) i
;
ANALYSE w_cti_get_columns_options_decoup;
UPDATE w_cti_get_columns_options_decoup
SET level = subview.level
FROM
(
SELECT w_cti_get_columns_options_decoup.i, w_cti_get_columns_options_decoup.car,
SUM(CASE WHEN w_cti_get_columns_options_decoup_1.car = '[' THEN 1 ELSE 0 END) AS level
FROM w_cti_get_columns_options_decoup
LEFT JOIN w_cti_get_columns_options_decoup w_cti_get_columns_options_decoup_1 ON w_cti_get_columns_options_decoup_1.car = '[' AND w_cti_get_columns_options_decoup_1.i <= w_cti_get_columns_options_decoup.i
GROUP BY 1,2
ORDER BY 1
) subview
WHERE w_cti_get_columns_options_decoup.i = subview.i
;
UPDATE w_cti_get_columns_options_decoup
SET level = w_cti_get_columns_options_decoup.level - subview.level
FROM
(
SELECT w_cti_get_columns_options_decoup.i, w_cti_get_columns_options_decoup.car,
SUM(CASE WHEN w_cti_get_columns_options_decoup_1.car = ']' THEN 1 ELSE 0 END) AS level
FROM w_cti_get_columns_options_decoup
LEFT JOIN w_cti_get_columns_options_decoup w_cti_get_columns_options_decoup_1 ON w_cti_get_columns_options_decoup_1.car = ']' AND w_cti_get_columns_options_decoup_1.i < w_cti_get_columns_options_decoup.i
GROUP BY 1,2
ORDER BY 1
) subview
WHERE w_cti_get_columns_options_decoup.i = subview.i
;
UPDATE w_cti_get_columns_options_decoup
SET key_index = subview.key_index
FROM
(
SELECT w_cti_get_columns_options_decoup.i, w_cti_get_columns_options_decoup.car,
COALESCE(SUM(CASE WHEN w_cti_get_columns_options_decoup_1.car = '[' THEN 1 ELSE 0 END),0) AS key_index
FROM w_cti_get_columns_options_decoup
LEFT JOIN w_cti_get_columns_options_decoup w_cti_get_columns_options_decoup_1 ON w_cti_get_columns_options_decoup_1.level = 1 AND w_cti_get_columns_options_decoup_1.i <= w_cti_get_columns_options_decoup.i AND w_cti_get_columns_options_decoup_1.car = '['
GROUP BY 1,2
) subview
WHERE w_cti_get_columns_options_decoup.i = subview.i
;
DROP TABLE IF EXISTS w_cti_get_columns_options;
CREATE TEMP TABLE w_cti_get_columns_options AS
SELECT
trim(substr(option,1,position('=' IN option)-1)) AS property,
trim(substr(option,position('=' IN option)+1)) AS property_value
FROM
(
SELECT key_index, array_to_string(base.cti_array_accum(car),'') AS option
FROM
(
SELECT *
FROM w_cti_get_columns_options_decoup
WHERE key_index <> 0 AND
(car NOT IN ('[',']') OR level <> 1)
ORDER BY i
) subview
group by 1
order by 1
) subview
WHERE option LIKE '%=%'
;
ANALYSE w_cti_get_columns_options
;
_view_type = (SELECT COALESCE(MAX(property_value),'ANZ') FROM w_cti_get_columns_options WHERE property = 'VIEWTYPE')
;
_view_name = (SELECT COALESCE(MAX(property_value),'*') FROM w_cti_get_columns_options WHERE property = 'VIEWNAME')
;
IF _view_name <> '*' AND _view_name NOT LIKE '%|%' AND NOT EXISTS (SELECT code FROM eco.t_rapports WHERE code = _view_name) THEN
_view_name = (
SELECT COALESCE(MIN(t_rapports.code),'*')
FROM w_cti_get_columns_options
JOIN eco.t_rapports ON t_rapports.code LIKE 'CTI\_'||CASE _view_type WHEN 'JUSTIF' THEN 'LIST' ELSE 'VIEW' END || '\_'||property_value||'%'
WHERE property = 'CONTEXTE'
)
;
END IF;
_columns_array = string_to_array((SELECT COALESCE(MAX(property_value),'') FROM w_cti_get_columns_options WHERE property = 'COLUMNS'),'|')
;
IF _view_type = 'JUSTIF' THEN
_columns_array_justif = string_to_array((SELECT COALESCE(MAX(property_value),'') FROM w_cti_get_columns_options WHERE property = 'COLUMNS'),'|')
;
END IF;
DROP TABLE IF EXISTS w_data_column_condition;
CREATE TEMP TABLE w_data_column_condition AS
SELECT
1::numeric AS condition_index,
''::text AS condition_code,
''::text AS condition_formula,
0::numeric AS condition_nb
WHERE _view_type <> 'COMP'
UNION
SELECT ROW_NUMBER() OVER (ORDER BY i) + 1 AS condition_index,
to_char(i, 'FM00'),
CASE WHEN i = 0 THEN 'columnby_sequence < 1' ELSE 'columnby_sequence = '||i END::text AS condition_formula,
0::numeric AS condition_nb
FROM generate_series(0,(SELECT base.cti_to_number(property_value) FROM w_cti_get_columns_options WHERE property = 'SQL_COLUMNBY_COUNT')::integer) AS i
WHERE _view_type = 'EVOL'
UNION
SELECT ROW_NUMBER() OVER (ORDER BY i) + 1 AS condition_index,
to_char(i, 'FM00'),
'columnby_sequence = '||i AS condition_formula,
0::numeric AS condition_nb
FROM generate_series(1,(SELECT base.cti_to_number(property_value)+1 FROM w_cti_get_columns_options WHERE property = 'SQL_COLUMNBY_COUNT')::integer) AS i
WHERE _view_type = 'CROSS'
UNION
SELECT ROW_NUMBER() OVER (ORDER BY i) + 1 AS condition_index,
to_char(i, 'FM00'),
'columnby_sequence = '||i AS condition_formula,
0::numeric AS condition_nb
FROM generate_series(1,(SELECT base.cti_to_number(property_value) FROM w_cti_get_columns_options WHERE property = 'SQL_COLUMNBY_COUNT')::integer) AS i
WHERE _view_type = 'EVOLCOMP'
UNION
SELECT ROW_NUMBER() OVER (ORDER BY i) AS condition_index,
to_char(i, 'FM00'),
CASE WHEN i <= 8 THEN 'columnby_sequence = '||i ELSE '' END AS condition_formula,
0::numeric AS condition_nb
FROM generate_series(1,20) AS i
WHERE _view_type = 'COMP'
ORDER BY 1
;
UPDATE w_data_column_condition
SET condition_nb = (SELECT count(*) FROM w_data_column_condition)
;
DROP TABLE IF EXISTS w_data_column_selected_code;
IF _view_name = '*' THEN
CREATE TEMP TABLE w_data_column_selected_code AS
SELECT 0::bigint AS rapport_id,
-1::bigint AS rapport_index,
i AS rapport_numero_rubrique,
CASE WHEN column_codes[i] NOT LIKE '%::%' THEN column_codes[i] WHEN split_part(column_codes[i],'::',2) NOT LIKE '*CALC%' THEN split_part(column_codes[i],'::',2) ELSE 'CTI_RAPPORTCALC' END AS selected_column_code,
CASE WHEN split_part(column_codes[i],'::',3) <> '' THEN string_to_array(split_part(column_codes[i],'::',3),',')::bigint[] ELSE NULL END AS selected_column_condition_array,
CASE
WHEN column_codes[i] LIKE '*CALC%' THEN substr(column_codes[i],6) ELSE ''::text END AS dg_rapport_calc_formula,
CASE WHEN column_codes[i] LIKE '*CALC%' THEN 'CTI_RAPPORTCALC' ELSE column_codes[i] END ||CASE WHEN _view_type = 'COMP' THEN to_char(condition_index,'FM000') ELSE '' END AS dg_rapport_field_tag,
condition_index,
((i-1)*condition_nb)+condition_index AS dg_column_index,
((row_number() OVER (ORDER BY i)-1)*condition_nb) + condition_index AS dg_column_index_old,
0::bigint AS indicateur_id,
0::text AS is_hide
FROM
(SELECT _columns_array AS column_codes) subview1
JOIN generate_series(1,30) AS i ON column_codes[i] <> '' AND column_codes[i] <> '-1' AND column_codes[i] <> '*' AND column_codes[i] <> ''
JOIN w_data_column_condition ON 1=1
ORDER BY 3
;
INSERT INTO w_data_column_selected_code
SELECT rapport_id,
-1,
rapport_numero_rubrique,
t_indicateurs.code,
NULL::bigint[] AS selected_column_condition_array,
'',
t_indicateurs.code,
condition_index,
0,
0,
t_indicateurs.oid AS indicateur_id,
NULL::text AS is_hide
FROM w_data_column_selected_code
JOIN eco.t_indicateurs ON dg_rapport_calc_formula LIKE '%['||t_indicateurs.code||']%'
WHERE dg_rapport_calc_formula <> '' AND
t_indicateurs.code NOT IN (SELECT selected_column_code FROM w_data_column_selected_code WHERE dg_rapport_calc_formula = '')
;
ELSE
IF _view_name NOT LIKE '%|%' THEN
CREATE TEMP TABLE w_data_column_selected_code AS
SELECT t_rapports.oid AS rapport_id,
0::bigint AS rapport_index,
numero_rubrique AS rapport_numero_rubrique,
t_indicateurs.code AS selected_column_code,
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) selected_column_condition_array,
t_rapports_rubriques.calc_formula AS dg_rapport_calc_formula,
CASE WHEN t_rapports_rubriques.field_tag <> '' THEN t_rapports_rubriques.field_tag ELSE t_indicateurs.code END AS dg_rapport_field_tag,
condition_index,
((ROW_NUMBER() OVER (ORDER BY rapport_id,NUMERO_RUBRIQUE, condition_index))) AS dg_column_index,
((ROW_NUMBER() OVER (ORDER BY rapport_id,NUMERO_RUBRIQUE)-1)*condition_nb) + condition_index AS dg_column_index_old,
t_indicateurs.oid AS indicateur_id,
CASE
WHEN t_rapports_rubriques.is_hide = '1' THEN '1'
WHEN _view_type IN ('EVOL','EVOLCOMP','COMP') AND t_rapports_rubriques.calc_formula LIKE '%\%T(%' THEN '1'
WHEN _view_type IN ('EVOL','EVOLCOMP','COMP') AND t_rapports_rubriques.calc_formula LIKE '%T.%' THEN '1'
ELSE '0' END AS is_hide
FROM eco.t_rapports
JOIN eco.t_rapports_rubriques ON rapport_id = t_rapports.oid
JOIN eco.t_indicateurs ON indicateur_id = t_indicateurs.oid
JOIN w_data_column_condition ON 1=1
WHERE t_rapports.code = _view_name
;
ELSE
CREATE TEMP TABLE w_data_column_selected_code AS
SELECT t_rapports.oid AS rapport_id,
array_position(string_to_array(_view_name,'|'), t_rapports.code) AS rapport_index,
numero_rubrique AS rapport_numero_rubrique,
t_indicateurs.code AS selected_column_code,
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) selected_column_condition_array,
t_rapports_rubriques.calc_formula AS dg_rapport_calc_formula,
CASE WHEN t_rapports_rubriques.field_tag <> '' THEN t_rapports_rubriques.field_tag ELSE t_indicateurs.code END AS dg_rapport_field_tag,
condition_index,
(array_position(string_to_array(_view_name,'|'), t_rapports.code) - 1) * 30 + ((ROW_NUMBER() OVER (PARTITION BY rapport_id ORDER BY NUMERO_RUBRIQUE, condition_index))) AS dg_column_index,
(array_position(string_to_array(_view_name,'|'), t_rapports.code) - 1) * 30 + ((ROW_NUMBER() OVER (PARTITION BY rapport_id ORDER BY NUMERO_RUBRIQUE)-1)*condition_nb) + condition_index AS dg_column_index_old,
t_indicateurs.oid AS indicateur_id,
CASE
WHEN t_rapports_rubriques.is_hide = '1' THEN '1'
WHEN _view_type IN ('EVOL','EVOLCOMP','COMP') AND t_rapports_rubriques.calc_formula LIKE '%\%T(%' THEN '1'
WHEN _view_type IN ('EVOL','EVOLCOMP','COMP') AND t_rapports_rubriques.calc_formula LIKE '%T.%' THEN '1'
ELSE '0' END AS is_hide
FROM eco.t_rapports
JOIN eco.t_rapports_rubriques ON rapport_id = t_rapports.oid
JOIN eco.t_indicateurs ON indicateur_id = t_indicateurs.oid
JOIN w_data_column_condition ON 1=1
WHERE t_rapports.code = ANY(string_to_array(_view_name,'|'))
ORDER BY t_rapports.code, rapport_numero_rubrique
;
END IF ;
END IF ;
-- Si justificatif et une indicateur donné, enlever les indicateurs et ajouter l'indicateur donné
/*IF _view_type = 'JUSTIF' THEN
IF _columns_array_justif[1] != '' AND _columns_array_justif[1] != '-1' AND _columns_array_justif[1] != '*DFT' THEN
DELETE FROM w_data_column_selected_code
USING eco.t_indicateurs
WHERE indicateur_id = t_indicateurs.oid AND
t_indicateurs.total_function <> '*LIST'
;
INSERT INTO w_data_column_selected_code
SELECT rapport_id, 0 ,MAX(rapport_numero_rubrique) + i, t_indicateurs.code, NULL, '', t_indicateurs.code, MAX(condition_index), MAX(rapport_numero_rubrique) + i, MAX(rapport_numero_rubrique) + i,
t_indicateurs.oid AS indicateur_id, '0'
FROM w_data_column_selected_code
JOIN (SELECT _columns_array_justif AS column_codes) subview1 ON 1=1
JOIN generate_series(1,30) AS i ON column_codes[i] <> ''
JOIN eco.t_indicateurs ON t_indicateurs.code = column_codes[i]
GROUP BY rapport_id,i,t_indicateurs.code,t_indicateurs.oid
;
END IF;
END IF;*/
-- Si filtre indicateur et vue justificative ou analyse, insérer l'indicateur donné en filtre ou le décaler en premier
/*IF _view_type = 'JUSTIF' OR _view_type = 'ANZ' THEN
UPDATE w_data_column_selected_code
SET
rapport_numero_rubrique = CASE
WHEN sub.rapport_id = w_data_column_selected_code.rapport_id AND COALESCE(sub.rapport_numero_rubrique,30) > w_data_column_selected_code.rapport_numero_rubrique THEN w_data_column_selected_code.rapport_numero_rubrique + 1
WHEN sub.rapport_id = w_data_column_selected_code.rapport_id AND COALESCE(sub.rapport_numero_rubrique,30) = w_data_column_selected_code.rapport_numero_rubrique THEN 1
ELSE w_data_column_selected_code.rapport_numero_rubrique END,
dg_column_index = CASE
WHEN sub.rapport_id = w_data_column_selected_code.rapport_id AND COALESCE(sub.rapport_numero_rubrique,30) > w_data_column_selected_code.rapport_numero_rubrique THEN w_data_column_selected_code.dg_column_index + 1
WHEN sub.rapport_id = w_data_column_selected_code.rapport_id AND COALESCE(sub.rapport_numero_rubrique,30) = w_data_column_selected_code.rapport_numero_rubrique THEN w_data_column_selected_code.dg_column_index/30 +1
ELSE w_data_column_selected_code.dg_column_index END
FROM w_data_column_selected_code ref LEFT JOIN
(
SELECT rapport_id, rapport_numero_rubrique
FROM w_data_column_selected_code
WHERE selected_column_code = (SELECT property_value FROM w_cti_get_columns_options WHERE property = 'FILTER_IND')
) sub ON sub.rapport_id = ref.rapport_id
WHERE ref.rapport_id = w_data_column_selected_code.rapport_id AND ref.rapport_numero_rubrique = w_data_column_selected_code.rapport_numero_rubrique
;
INSERT INTO w_data_column_selected_code
SELECT rapport_id,
rapport_index ,
1,
t_indicateurs.code,
NULL,
'',
t_indicateurs.code,
0,
0,
0,
t_indicateurs.oid AS indicateur_id,
NULL::text AS is_hide
FROM w_data_column_selected_code
JOIN eco.t_indicateurs ON selected_column_code = t_indicateurs.code
WHERE (rapport_id, t_indicateurs.code) NOT IN (SELECT rapport_id,selected_column_code FROM w_data_column_selected_code )
;
END IF;*/
DROP TABLE IF EXISTS temp.w_data_column_selected_code;
CREATE TABLE temp.w_data_column_selected_code AS SELECT * FROM w_data_column_selected_code;
DROP TABLE IF EXISTS w_data_column_code;
CREATE TEMP TABLE w_data_column_code AS
SELECT subview.rapport_id,
subview.rapport_index,
column_code_portee[i] AS column_code,
subview.condition_index,
indicateur_condition_array,
COALESCE(dg_column_index,0) AS dg_column_index,
COALESCE(rapport_numero_rubrique,0) AS rapport_numero_rubrique,
0::integer AS db_column_index,
MAX(w_data_column_selected_code.is_hide) AS is_hide,
MAX(CASE WHEN i = 21 AND table_name = '*CALC' THEN column_code_portee ELSE NULL END) AS dg_portee,
''::text AS table_name,
''::text AS dimension_date,
''::text AS total_function,
''::text AS db_column_name,
''::text AS dg_head,
''::text AS dg_largehead,
''::text AS dg_description,
80::numeric AS dg_width,
''::text AS dg_color,
''::text AS dg_background_color,
''::text AS dg_format,
''::text AS dg_column_formula,
MAX(dg_rapport_calc_formula) AS dg_rapport_calc_formula,
MAX(dg_rapport_field_tag) AS dg_rapport_field_tag,
''::text AS dg_option,
''::text AS chart_def,
''::text AS chart_type,
''::text AS chart_subtype,
''::text AS chart_cellule,
''::text AS chart_serie
FROM
(
SELECT
rapport_id,
rapport_index,
condition_index,
t_indicateurs.table_name,
t_indicateurs.column_name,
w_data_column_selected_code.selected_column_condition_array AS indicateur_condition_array,
ARRAY[
t_indicateurs_associes_1.code,
t_indicateurs_associes_2.code,
t_indicateurs_associes_3.code,
t_indicateurs_associes_4.code,
t_indicateurs_associes_5.code,
t_indicateurs_associes_6.code,
t_indicateurs_associes_7.code,
t_indicateurs_associes_8.code,
t_indicateurs_associes_9.code,
t_indicateurs_associes_10.code,
t_indicateurs_associes_11.code,
t_indicateurs_associes_12.code,
t_indicateurs_associes_13.code,
t_indicateurs_associes_14.code,
t_indicateurs_associes_15.code,
t_indicateurs_associes_16.code,
t_indicateurs_associes_17.code,
t_indicateurs_associes_18.code,
t_indicateurs_associes_19.code,
t_indicateurs_associes_20.code,
t_indicateurs.code
] AS column_code_portee
FROM eco.t_indicateurs
LEFT JOIN eco.t_indicateurs t_indicateurs_associes_1 ON t_indicateurs.indicateur_associe_1_id = t_indicateurs_associes_1.oid
LEFT JOIN eco.t_indicateurs t_indicateurs_associes_2 ON t_indicateurs.indicateur_associe_2_id = t_indicateurs_associes_2.oid
LEFT JOIN eco.t_indicateurs t_indicateurs_associes_3 ON t_indicateurs.indicateur_associe_3_id = t_indicateurs_associes_3.oid
LEFT JOIN eco.t_indicateurs t_indicateurs_associes_4 ON t_indicateurs.indicateur_associe_4_id = t_indicateurs_associes_4.oid
LEFT JOIN eco.t_indicateurs t_indicateurs_associes_5 ON t_indicateurs.indicateur_associe_5_id = t_indicateurs_associes_5.oid
LEFT JOIN eco.t_indicateurs t_indicateurs_associes_6 ON t_indicateurs.indicateur_associe_6_id = t_indicateurs_associes_6.oid
LEFT JOIN eco.t_indicateurs t_indicateurs_associes_7 ON t_indicateurs.indicateur_associe_7_id = t_indicateurs_associes_7.oid
LEFT JOIN eco.t_indicateurs t_indicateurs_associes_8 ON t_indicateurs.indicateur_associe_8_id = t_indicateurs_associes_8.oid
LEFT JOIN eco.t_indicateurs t_indicateurs_associes_9 ON t_indicateurs.indicateur_associe_9_id = t_indicateurs_associes_9.oid
LEFT JOIN eco.t_indicateurs t_indicateurs_associes_10 ON t_indicateurs.indicateur_associe_10_id = t_indicateurs_associes_10.oid
LEFT JOIN eco.t_indicateurs t_indicateurs_associes_11 ON t_indicateurs.indicateur_associe_11_id = t_indicateurs_associes_11.oid
LEFT JOIN eco.t_indicateurs t_indicateurs_associes_12 ON t_indicateurs.indicateur_associe_12_id = t_indicateurs_associes_12.oid
LEFT JOIN eco.t_indicateurs t_indicateurs_associes_13 ON t_indicateurs.indicateur_associe_13_id = t_indicateurs_associes_13.oid
LEFT JOIN eco.t_indicateurs t_indicateurs_associes_14 ON t_indicateurs.indicateur_associe_14_id = t_indicateurs_associes_14.oid
LEFT JOIN eco.t_indicateurs t_indicateurs_associes_15 ON t_indicateurs.indicateur_associe_15_id = t_indicateurs_associes_15.oid
LEFT JOIN eco.t_indicateurs t_indicateurs_associes_16 ON t_indicateurs.indicateur_associe_16_id = t_indicateurs_associes_16.oid
LEFT JOIN eco.t_indicateurs t_indicateurs_associes_17 ON t_indicateurs.indicateur_associe_17_id = t_indicateurs_associes_17.oid
LEFT JOIN eco.t_indicateurs t_indicateurs_associes_18 ON t_indicateurs.indicateur_associe_18_id = t_indicateurs_associes_18.oid
LEFT JOIN eco.t_indicateurs t_indicateurs_associes_19 ON t_indicateurs.indicateur_associe_19_id = t_indicateurs_associes_19.oid
LEFT JOIN eco.t_indicateurs t_indicateurs_associes_20 ON t_indicateurs.indicateur_associe_20_id = t_indicateurs_associes_20.oid
JOIN w_data_column_selected_code ON w_data_column_selected_code.selected_column_code = t_indicateurs.code
) subview
JOIN generate_series(1,100) AS i ON column_code_portee[i] <> ''
LEFT JOIN w_data_column_selected_code ON
w_data_column_selected_code.selected_column_code = column_code_portee[i] AND
w_data_column_selected_code.condition_index = subview.condition_index AND
w_data_column_selected_code.selected_column_condition_array IS NOT DISTINCT FROM subview.indicateur_condition_array
GROUP BY 1,2,3,4,5,6,7
;
/*UPDATE w_data_column_code SET
dg_column_index = sub.offset * 100 + dg_column_index
FROM (SELECT rapport_id,row_number() OVER (ORDER BY code) -1 as offset FROM (SELECT rapport_id, t_rapports.code FROM w_data_column_code JOIN eco.t_rapports ON rapport_id = t_rapports.oid GROUP BY 1,2) sub) sub
WHERE sub.rapport_id = w_data_column_code.rapport_id
;
*/
-- Recuperation des indicateurs issus de la formule du rapport
UPDATE w_data_column_code SET
dg_portee= subview.dg_portee,
table_name = '*CALC',
total_function ='*CALC'
FROM
(
SELECT calc_CTID,
ARRAY[
MAX(CASE WHEN i = 01 THEN indicateur_code ELSE NULL END),
MAX(CASE WHEN i = 02 THEN indicateur_code ELSE NULL END),
MAX(CASE WHEN i = 03 THEN indicateur_code ELSE NULL END),
MAX(CASE WHEN i = 04 THEN indicateur_code ELSE NULL END),
MAX(CASE WHEN i = 05 THEN indicateur_code ELSE NULL END),
MAX(CASE WHEN i = 06 THEN indicateur_code ELSE NULL END),
MAX(CASE WHEN i = 07 THEN indicateur_code ELSE NULL END),
MAX(CASE WHEN i = 08 THEN indicateur_code ELSE NULL END),
MAX(CASE WHEN i = 09 THEN indicateur_code ELSE NULL END),
MAX(CASE WHEN i = 10 THEN indicateur_code ELSE NULL END),
MAX(CASE WHEN i = 11 THEN indicateur_code ELSE NULL END),
MAX(CASE WHEN i = 12 THEN indicateur_code ELSE NULL END),
MAX(CASE WHEN i = 13 THEN indicateur_code ELSE NULL END),
MAX(CASE WHEN i = 14 THEN indicateur_code ELSE NULL END),
MAX(CASE WHEN i = 15 THEN indicateur_code ELSE NULL END),
MAX(CASE WHEN i = 16 THEN indicateur_code ELSE NULL END),
MAX(CASE WHEN i = 17 THEN indicateur_code ELSE NULL END),
MAX(CASE WHEN i = 18 THEN indicateur_code ELSE NULL END),
MAX(CASE WHEN i = 19 THEN indicateur_code ELSE NULL END),
MAX(CASE WHEN i = 20 THEN indicateur_code ELSE NULL END)
] AS dg_portee
FROM
(
SELECT
calc_CTID,
row_number() OVER (PARTITION BY calc_CTID ORDER BY i) AS i,
split_part(dg_rapport_calc_formula_array[i],']',1) AS indicateur_code
FROM
(
SELECT w_data_column_code.CTID AS calc_CTID, condition_index, string_to_array(dg_rapport_calc_formula,'[') AS dg_rapport_calc_formula_array
FROM w_data_column_code
WHERE column_code = 'CTI_RAPPORTCALC'
) subview
JOIN generate_series(1,20) i ON dg_rapport_calc_formula_array[i] <> ''
JOIN w_data_column_code ON w_data_column_code.dg_rapport_field_tag = split_part(dg_rapport_calc_formula_array[i],']',1) AND
w_data_column_code.condition_index = subview.condition_index
) subview
GROUP BY 1
) subview
WHERE w_data_column_code.CTID = calc_CTID
;
PERFORM base.cti_execute('
UPDATE w_data_column_code
SET dg_rapport_calc_formula = replace(dg_rapport_calc_formula,''[''||dg_portee['||i::text||']||'']'',''['||i::text||']'')
WHERE column_code = ''CTI_RAPPORTCALC'' AND
dg_rapport_calc_formula NOT LIKE ''\%T(%'' AND
dg_portee['||i::text||'] IS NOT NULL',1)
FROM generate_series(1,20) i
;
UPDATE w_data_column_code SET
db_column_index = subview.column_index,
dg_portee[1] = w_data_column_code.column_code
FROM
(
SELECT column_code,
condition_index,
indicateur_condition_array,
row_number() OVER(ORDER BY column_code, indicateur_condition_array, condition_index) AS column_index
FROM w_data_column_code
JOIN eco.t_indicateurs ON column_code = t_indicateurs.code
WHERE t_indicateurs.table_name <> '*CALC' AND t_indicateurs.table_name <> '*RAPPORTCALC'
GROUP BY 1,2,3
) subview
WHERE w_data_column_code.column_code = subview.column_code AND
w_data_column_code.indicateur_condition_array IS NOT DISTINCT FROM subview.indicateur_condition_array AND
w_data_column_code.condition_index = subview.condition_index
;
UPDATE w_data_column_code SET
table_name = CASE WHEN t_indicateurs.table_name <> '*RAPPORTCALC' THEN t_indicateurs.table_name ELSE '*CALC' END,
dimension_date =
CASE
WHEN t_indicateurs.table_name = 'V_LIGNES_COMMANDES_X' AND t_indicateurs.dimension_date = '' THEN '2'
WHEN t_indicateurs.table_name <> '*RAPPORTCALC' THEN t_indicateurs.dimension_date
ELSE '*CALC' END,
total_function = CASE WHEN t_indicateurs.table_name <> '*RAPPORTCALC' THEN t_indicateurs.total_function ELSE '*CALC' END,
db_column_name =
CASE
WHEN t_indicateurs.table_name = '*RAPPORTCALC' THEN dg_rapport_calc_formula
WHEN condition_formula = '' THEN t_indicateurs.column_name
WHEN _view_type <> 'COMP' OR _view_type = 'COMP' AND w_data_column_code.condition_index <= 8 THEN
CASE
/*indicateurs sans fonction (peut être à affiner avec MAX, AVG,...)*/
WHEN t_indicateurs.total_function = '*LIST' AND t_indicateurs.column_name NOT LIKE '%(%' THEN 'CASE WHEN ' || condition_formula || ' THEN ' || t_indicateurs.column_name || ' ELSE '''' END'
/*indicateurs sans fonction */
WHEN t_indicateurs.total_function = '*LIST' THEN regexp_replace(regexp_replace(regexp_replace(
t_indicateurs.column_name,'COUNT\(DISTINCT ([^\)]*)','COUNT(DISTINCT CASE WHEN ' || condition_formula || ' THEN \1 ELSE null END'),
'MAX\(([^\)]*id)\)','MAX(CASE WHEN ' || condition_formula || ' THEN \1 ELSE 0 END)','g'),
'MAX\(([^\)]*code)\)','MAX(CASE WHEN ' || condition_formula || ' THEN \1 ELSE '''' END)','g')
/* case default */
WHEN condition_formula = '' THEN t_indicateurs.column_name
/* cas base.cti_sum_distinct_on */
WHEN t_indicateurs.column_name ILIKE '%DISTINCT ARRAY%' THEN regexp_replace(t_indicateurs.column_name,'DISTINCT ARRAY\[([^,]*),([^\]]*)\]','DISTINCT ARRAY[\\1,CASE WHEN ' || condition_formula || ' THEN \2 ELSE null END')
/* cas MAX(ARRAY[ */
WHEN t_indicateurs.column_name ILIKE '%MAX\(ARRAY\[%' THEN regexp_replace(t_indicateurs.column_name,'MAX\(ARRAY\[(date[^,]*)','MAX(ARRAY[(CASE WHEN ' || condition_formula || ' THEN \1 ELSE ''1900-01-01'' END)')
/* case DISTINCT */
WHEN t_indicateurs.column_name ILIKE 'DISTINCT %' THEN regexp_replace(t_indicateurs.column_name,'DISTINCT (.*)','DISTINCT CASE WHEN ' || condition_formula || ' THEN \1 ELSE null END')
/* case texte */
ELSE 'CASE WHEN ' || condition_formula || ' THEN ' || t_indicateurs.column_name || ' ELSE 0 END'
END
ELSE '0' END,
dg_column_formula = CASE WHEN t_indicateurs.table_name = '*CALC' THEN t_indicateurs.column_name WHEN t_indicateurs.table_name = '*RAPPORTCALC' THEN dg_rapport_calc_formula ELSE '[1]' END,
dg_head = t_indicateurs.entete,
dg_largehead = t_indicateurs.entete_etendue,
dg_description = trim(CASE WHEN t_indicateurs.description <> '' THEN t_indicateurs.description ELSE entete_etendue END),
dg_format = CASE WHEN t_indicateurs.output_format <> '' THEN t_indicateurs.output_format ELSE '#' END,
dg_width = CASE WHEN t_indicateurs.width <> 0 THEN t_indicateurs.width ELSE 80 END
FROM eco.t_indicateurs,
w_data_column_condition
WHERE column_code = t_indicateurs.code AND
w_data_column_code.condition_index = w_data_column_condition.condition_index
;
/* remplacement mots clés de période */
UPDATE w_data_column_code SET
db_column_name = CASE WHEN _view_type = 'COMP' OR (_view_type = 'EVOL' AND dg_column_index != 1) THEN
replace(
replace(db_column_name,'toperiode','columnby_to_date'),
'periode','columnby_from_date')
ELSE replace(
replace(db_column_name,'toperiode','''' || (SELECT property_value FROM w_cti_get_columns_options WHERE property = 'SQL_WHERE_TOPERIODE') || ''''),
'periode','''' || (SELECT property_value FROM w_cti_get_columns_options WHERE property = 'SQL_WHERE_PERIODE')|| '''')
END
;
/* remplacement liste et classes */
UPDATE w_data_column_code SET
db_column_name = regexp_replace(
regexp_replace(
db_column_name
, '\[LISTE:([^\]]*)\]', '(select to_id from eco.t_listes_contenu JOIN eco.t_listes on liste_id = t_listes.oid WHERE code = ''\1'')', 'g')
, '\[CLASSE:([^\:]*):([^\]]*)\]', '(select to_id from eco.t_classes JOIN eco.t_classes_sections on classe_id = t_classes.oid JOIN eco.t_classes_sections_elements ON section_id = t_classes_sections.oid WHERE t_classes.code = ''\1'' AND t_classes_sections.code = ''\2'')', 'g')
WHERE db_column_name ILIKE '%[LISTE%' OR db_column_name ILIKE '%[CLASSE%'
;
/* remplacement fonction SUMXXXXX */
UPDATE w_data_column_code SET
total_function = CASE WHEN total_function like 'SUM%' THEN 'SUM' ELSE total_function END
;
UPDATE w_data_column_code SET
dg_head = dg_head || '@LF@% / Total',
dg_largehead = dg_largehead || ' Pourcentage / Total',
dg_format = '0,0%'
WHERE dg_rapport_calc_formula LIKE '%\%T(%'
;
UPDATE w_data_column_code SET
dg_head = CASE WHEN t_rapports_rubriques.entete <> '' THEN t_rapports_rubriques.entete ELSE w_data_column_code.dg_head END,
dg_largehead = CASE WHEN t_rapports_rubriques.entete_etendue <> '' THEN t_rapports_rubriques.entete_etendue ELSE w_data_column_code.dg_largehead END,
dg_width = CASE WHEN t_rapports_rubriques.width <> 0 THEN t_rapports_rubriques.width ELSE w_data_column_code.dg_width END,
dg_description = CASE WHEN t_rapports_rubriques.description <> '' THEN t_rapports_rubriques.description ELSE w_data_column_code.dg_description END,
dg_format = CASE WHEN t_rapports_rubriques.output_format <> '' THEN t_rapports_rubriques.output_format ELSE w_data_column_code.dg_format END,
dg_color = CASE WHEN t_rapports_rubriques.color <> '' THEN t_rapports_rubriques.color ELSE w_data_column_code.dg_color END,
dg_background_color = CASE WHEN t_rapports_rubriques.background_color <> '' THEN t_rapports_rubriques.background_color ELSE w_data_column_code.dg_background_color END,
dg_option = t_rapports_rubriques.option
FROM eco.t_rapports_rubriques
WHERE w_data_column_code.rapport_id = t_rapports_rubriques.rapport_id AND
w_data_column_code.rapport_numero_rubrique = t_rapports_rubriques.numero_rubrique AND
(
t_rapports_rubriques.entete <> '' OR
t_rapports_rubriques.width <> 0 OR
t_rapports_rubriques.description <> '' OR
t_rapports_rubriques.output_format <> '' OR
t_rapports_rubriques.color <> '' OR
t_rapports_rubriques.background_color <> '' OR
t_rapports_rubriques.calc_formula <> '' OR
t_rapports_rubriques.field_tag <> '' OR
t_rapports_rubriques.option <> ''
)
;
-- Conditions des indicateurs du rapport
UPDATE w_data_column_code
SET db_column_name = subview.db_column_name_condition
FROM
(
SELECT table_name,
indicateur_condition_array,
db_column_name,
total_function,
CASE WHEN db_column_name ILIKE 'DISTINCT %' THEN 'DISTINCT ' ELSE '' END ||
'CASE WHEN '||
array_to_string(base.cti_array_accum(DISTINCT CASE WHEN check_where <> '' THEN check_where ELSE '1=1' END),' AND ') || ' '
'THEN '||CASE WHEN db_column_name ILIKE 'DISTINCT %' THEN trim(substr(db_column_name,9)) ELSE db_column_name END||' ELSE '||CASE WHEN total_function = 'SUM' THEN '0' ELSE 'NULL' END || ' END' AS db_column_name_condition
FROM
(
SELECT w_data_column_code.table_name,
w_data_column_code.indicateur_condition_array,
w_data_column_code.db_column_name,
w_data_column_code.total_function,
COALESCE(t_indicateur_condition_table.check_where, t_indicateur_condition_table_dft.check_where) AS check_where
FROM w_data_column_code
JOIN eco.t_indicateur_condition ON t_indicateur_condition.oid = ANY(indicateur_condition_array)
LEFT JOIN eco.t_indicateur_condition_table ON
t_indicateur_condition_table.indicateur_condition_id = t_indicateur_condition.oid AND
t_indicateur_condition_table.table_name = w_data_column_code.table_name
LEFT JOIN eco.t_indicateur_condition_table t_indicateur_condition_table_dft ON
t_indicateur_condition_table_dft.indicateur_condition_id = t_indicateur_condition.oid AND
t_indicateur_condition_table_dft.table_name = ''
) subview
GROUP BY 1,2,3,4
) subview
WHERE w_data_column_code.table_name = subview.table_name AND
w_data_column_code.indicateur_condition_array = subview.indicateur_condition_array AND
w_data_column_code.db_column_name = subview.db_column_name AND
w_data_column_code.total_function = subview.total_function
;
PERFORM base.cti_execute('
UPDATE w_data_column_code w_data_column_code_dg
SET dg_column_formula = replace(w_data_column_code_dg.dg_column_formula,''['||i||']'',''w_table.work_indicateurs[00''||w_data_column_code_db.db_column_index||'']'')
FROM w_data_column_code w_data_column_code_db
WHERE w_data_column_code_dg.dg_portee['||i||'] = w_data_column_code_db.dg_rapport_field_tag AND
w_data_column_code_dg.condition_index = w_data_column_code_db.condition_index AND
(
w_data_column_code_dg.dg_column_formula <> ''['||i||']'' OR
w_data_column_code_dg.indicateur_condition_array IS NOT DISTINCT FROM w_data_column_code_db.indicateur_condition_array
)
',1)
FROM generate_series(1,20) AS i
;
PERFORM base.cti_execute('
UPDATE w_data_column_code w_data_column_code_dg
SET dg_column_formula = replace(w_data_column_code_dg.dg_column_formula,''['||i||']'',''w_table.work_indicateurs[00''||w_data_column_code_db.db_column_index||'']'')
FROM w_data_column_code w_data_column_code_db
WHERE w_data_column_code_dg.dg_portee['||i||'] = w_data_column_code_db.column_code AND
w_data_column_code_dg.condition_index = w_data_column_code_db.condition_index AND
w_data_column_code_dg.dg_column_formula LIKE ''%[%'' AND
(
w_data_column_code_dg.dg_column_formula <> ''['||i||']'' OR
w_data_column_code_dg.indicateur_condition_array IS NOT DISTINCT FROM w_data_column_code_db.indicateur_condition_array
)
',1)
FROM generate_series(1,20) AS i
;
-- Remplacement des formules si pourcentage du total
UPDATE w_data_column_code
SET db_column_name = 0,
dg_column_formula = 'base.cti_division('||w_data_column_code_tag.dg_column_formula||','||replace(w_data_column_code_tag.dg_column_formula,'w_table.','w_tablet.')||')*100'
FROM w_data_column_code w_data_column_code_tag
WHERE w_data_column_code.dg_rapport_calc_formula <> '' AND
w_data_column_code_tag.dg_rapport_field_tag <> '' AND
w_data_column_code.dg_rapport_calc_formula ILIKE '%['||w_data_column_code_tag.dg_rapport_field_tag||']%' AND
w_data_column_code.dg_rapport_calc_formula LIKE '\%T(%'
;
UPDATE w_data_column_code
SET dg_column_formula = replace(dg_column_formula,'T.w_table.','w_tablet.')
WHERE dg_column_formula LIKE '%T.w_table.%'
;
UPDATE w_data_column_code
SET dg_column_formula = 'base.cti_calcul('''||replace(replace(dg_column_formula,']',']::text || ''::numeric'),'w_table',''' || w_table')||''')'
WHERE dg_column_formula <> '' AND
table_name = '*CALC'
;
-- mise en place chart par défaut sur première donnée en cas de sélection libre
UPDATE w_data_column_code SET
dg_option = '[CHART]'
WHERE rapport_numero_rubrique = 1 AND rapport_id = 0
;
-- Identification des charts
UPDATE w_data_column_code SET
chart_def =
replace(
trim(split_part(split_part(dg_option, '['||tag||'CHART',2),']',1)) ||
trim(split_part(split_part(dg_option, '[S'||tag||'CHART',2),']',1)) ||
trim(split_part(split_part(dg_option, '[O'||tag||'CHART',2),']',1))
,'=',''),
chart_type = subview.chart_type,
chart_subtype = CASE WHEN dg_option LIKE '%[S'||tag||'CHART%' THEN 'stacked' WHEN dg_option LIKE '%[O'||tag||'CHART%' THEN 'overlaid' ELSE '' END
FROM (
SELECT ''::text AS tag, 'column'::text AS chart_type
UNION
SELECT 'COLUMN'::text AS tag, 'column'::text AS chart_type
UNION
SELECT 'PIE'::text AS tag, 'pie'::text AS chart_type
UNION
SELECT 'LINE'::text AS tag, 'line'::text AS chart_type
) subview
WHERE dg_option LIKE '%['||tag||'CHART%' OR dg_option LIKE '%[S'||tag||'CHART%' OR dg_option LIKE '%[O'||tag||'CHART%'
;
UPDATE w_data_column_code SET
chart_cellule = substr(chart_def,1,2),
chart_serie = CASE WHEN substr(chart_def,3) <> '' THEN lpad(substr(chart_def,3),2,'0') ELSE '01' END
WHERE chart_type <> ''
;
-- Attribution automatique prochaine cellule
UPDATE w_data_column_code
SET chart_cellule = cel
FROM
(
SELECT row_number() OVER (PARTITION BY rapport_index ORDER BY dg_column_index) AS r1, w_data_column_code.CTID AS toCTID
FROM w_data_column_code
WHERE chart_type <> '' AND chart_cellule = ''
) subview1
JOIN (
SELECT row_number() OVER (ORDER BY cel) AS r2, cel
FROM unnest(ARRAY['1A','1B','1C','2A','2B','2C','3A','3B','3C']) cel
LEFT JOIN w_data_column_code ON cel = chart_cellule
WHERE chart_cellule IS NULL AND
(
(SELECT count(DISTINCT chart_cellule) FROM w_data_column_code WHERE chart_type <> '') <= 4 AND cel NOT LIKE '%C' OR
(SELECT count(DISTINCT chart_cellule) FROM w_data_column_code WHERE chart_type <> '') > 4
)
) subview2 ON r1 = r2
WHERE w_data_column_code.CTID = subview1.toCTID
;
DROP TABLE IF EXISTS temp.w_data_column_code;
CREATE TABLE temp.w_data_column_code AS SELECT * FROM w_data_column_code;
DROP TABLE IF EXISTS cti_get_columns_from_indicateurs_properties;
CREATE TEMP TABLE cti_get_columns_from_indicateurs_properties AS
SELECT 'IN_'||property AS property, property_value
FROM w_cti_get_columns_options
UNION
SELECT 'DB_COLUMNS' AS property, array_to_string(base.cti_array_accum(db_column_name),',,') AS property_value
FROM
(
SELECT db_column_index, MAX(CASE WHEN db_column_name <> '0' AND total_function <> '*LIST' THEN total_function||'('||db_column_name||')' ELSE '0' END) AS db_column_name
FROM w_data_column_code
WHERE db_column_index <> 0
GROUP BY 1
ORDER BY 1
) subview
UNION
SELECT 'DB_COLUMNS-'||v_rapports_tables_indicateurs_1.contexte || '#' || substr(dimensions_date,i,1) AS property,
COALESCE(array_to_string(base.cti_array_accum(CASE WHEN table_name = v_rapports_tables_indicateurs_1.code AND (dimension_date = substr(dimensions_date,i,1) OR dimension_date = '') THEN db_column_name ELSE '0' END),',,'),'') AS property_value
FROM eco.v_rapports_tables_indicateurs_1
JOIN (SELECT generate_series(1,5) AS i) subview_dimension ON substr(dimensions_date,i,1) <> ''
LEFT JOIN
(
SELECT db_column_index, table_name, dimension_date, MAX(CASE WHEN db_column_name <> '0' AND total_function <> '*LIST' THEN total_function||'('||db_column_name||')' ELSE '0' END) AS db_column_name
FROM w_data_column_code
WHERE db_column_index <> 0
GROUP BY 1,2,3
ORDER BY 1
) subview
ON 1=1
WHERE v_rapports_tables_indicateurs_1.code NOT LIKE '*%' AND
v_rapports_tables_indicateurs_1.code NOT LIKE 'TAB%'
GROUP BY 1
UNION
SELECT 'DB_QCOLUMNS-'||v_rapports_tables_indicateurs_1.contexte || '#' || substr(dimensions_date,i,1) AS property,
MAX(CASE WHEN table_name = v_rapports_tables_indicateurs_1.code AND (dimension_date = substr(dimensions_date,i,1) OR dimension_date = '') THEN '1' ELSE '0' END) AS property_value
FROM eco.v_rapports_tables_indicateurs_1
JOIN (SELECT generate_series(1,5) AS i) subview_dimension ON substr(dimensions_date,i,1) <> ''
LEFT JOIN
(
SELECT db_column_index, table_name, dimension_date, MAX(CASE WHEN db_column_name <> '0' AND total_function <> '*LIST' THEN total_function||'('||db_column_name||')' ELSE '0' END) AS db_column_name
FROM w_data_column_code
WHERE db_column_index <> 0 AND
total_function <> '*LIST'
GROUP BY 1,2,3
ORDER BY 1
) subview
ON 1=1
WHERE v_rapports_tables_indicateurs_1.code NOT LIKE '*%' AND
v_rapports_tables_indicateurs_1.code NOT LIKE 'TAB%'
GROUP BY 1
UNION
SELECT 'DB_TEXTCOLUMNS', array_to_string(base.cti_array_accum(db_column_name),',,')
FROM
(
SELECT dg_column_index, MAX(CASE WHEN db_column_name <> '0' AND total_function = '*LIST' THEN ''||'('||db_column_name||')::text' ELSE '''''' END) AS db_column_name
FROM w_data_column_code
WHERE dg_column_index <> 0
GROUP BY 1
ORDER BY 1
) subview
UNION
SELECT 'DB_TEXTCOLUMNSEMPTY', array_to_string(base.cti_array_accum(db_column_name),',,')
FROM
(
SELECT dg_column_index, ''''''::text AS db_column_name
FROM w_data_column_code
WHERE dg_column_index <> 0
GROUP BY 1
ORDER BY 1
) subview
UNION
SELECT 'DB_COLUMNS001', MAX(total_function||'('||db_column_name||')') AS db_column_name
FROM w_data_column_code
WHERE db_column_index = 1
GROUP BY 1
UNION
SELECT 'FILTER_IND', CASE WHEN total_function != '*LIST' THEN
CASE WHEN total_function like 'SUM%' THEN 'SUM'
ELSE total_function END || '('||
CASE WHEN _view_type = 'COMP' THEN
replace(
replace(column_name,'toperiode','columnby_to_date'),
'periode','columnby_from_date')
ELSE replace(
replace(column_name,'toperiode','''' || (SELECT property_value FROM w_cti_get_columns_options WHERE property = 'SQL_WHERE_TOPERIODE') || ''''),
'periode','''' || (SELECT property_value FROM w_cti_get_columns_options WHERE property = 'SQL_WHERE_PERIODE')|| '''')
END
|| ')' ELSE '' END
FROM eco.t_indicateurs
WHERE code = (SELECT property_value FROM w_cti_get_columns_options WHERE property = 'FILTER_IND')
UNION
SELECT 'DG_FIELD'||to_char(all_index,'FM000'), CASE WHEN total_function IS DISTINCT FROM '*LIST' THEN 'NB' ELSE 'TX' END||to_char(all_index,'FM0000')
FROM generate_series(1,30*(SELECT COUNT(DISTINCT rapport_index) FROM w_data_column_code)) all_index
LEFT JOIN w_data_column_code ON dg_column_index = all_index
WHERE _view_type <> 'COMP'
GROUP BY 1,2
UNION
SELECT 'DG_FIELDSEJ', MAX(CASE WHEN column_code = 'CTI_SEJ_LIST_COD' THEN 'TX'||to_char(dg_column_index,'FM0000') ELSE '' END)
FROM w_data_column_code
UNION
SELECT 'DG_FTYPE'||to_char(all_index,'FM000'),
CASE
WHEN total_function IS DISTINCT FROM '*LIST' THEN 'Number'
WHEN dg_format LIKE '%MM%' THEN 'Date'
ELSE 'Char' END
FROM generate_series(1,30*(SELECT COUNT(DISTINCT rapport_index) FROM w_data_column_code)) all_index
LEFT JOIN w_data_column_code ON dg_column_index = all_index
WHERE _view_type <> 'COMP'
GROUP BY 1,2
UNION
SELECT 'DG_FALIGN'||to_char(all_index,'FM000'),
CASE WHEN total_function IS DISTINCT FROM '*LIST' THEN 'right'
WHEN dg_format LIKE '%MM%' THEN 'center'
WHEN dg_column_formula LIKE '%00:00%' THEN 'center'
ELSE 'left' END
FROM generate_series(1,30*(SELECT COUNT(DISTINCT rapport_index) FROM w_data_column_code)) all_index
LEFT JOIN w_data_column_code ON dg_column_index = all_index
WHERE _view_type <> 'COMP'
GROUP BY 1,2
UNION
SELECT 'DG_COLUMNS', array_to_string(base.cti_array_accum('0'::text),',,')
FROM generate_series(1,(SELECT GREATEST(MAX(dg_column_index),30*(SELECT COUNT(DISTINCT rapport_index) FROM w_data_column_code)) FROM w_data_column_code)::integer)
UNION
SELECT 'DG_SETCOLUMNS', array_to_string(base.cti_array_accum(dg_column_formula),',')
FROM
(
SELECT dg_column_index,
MAX(
CASE WHEN _view_type <> 'COMP' OR _view_type = 'COMP' AND condition_index <= 8 THEN 'indicateurs['||dg_column_index||']='||dg_column_formula
ELSE 'indicateurs['||dg_column_index||']=0' END
) AS dg_column_formula
FROM w_data_column_code
WHERE dg_column_index <> 0 AND
total_function <> '*LIST' AND
(_view_type <> 'COMP' OR _view_type = 'COMP' AND condition_index <= 8)
GROUP BY 1
ORDER BY 1
) subview
UNION
SELECT 'DG_VISIBLE'||to_char(all_index,'FM000'), CASE WHEN dg_column_index IS NOT NULL AND is_hide <> '1' THEN 'true' ELSE 'false' END
FROM generate_series(1,30*(SELECT COUNT(DISTINCT rapport_index) FROM w_data_column_code)) all_index
LEFT JOIN w_data_column_code ON dg_column_index = all_index
WHERE _view_type <> 'COMP'
GROUP BY 1,2
UNION
SELECT 'DG_HEAD'||to_char(dg_column_index,'FM000'), dg_head
FROM w_data_column_code
WHERE _view_type <> 'COMP' AND _view_type <> 'EVOLCOMP' AND
dg_column_index <> 0 AND
is_hide <> '1'
UNION
SELECT 'DG_CODE'||to_char(dg_column_index,'FM000'), CASE WHEN column_code NOT LIKE '%RAPPORTCALC%' THEN column_code ELSE '' END
FROM w_data_column_code
WHERE _view_type <> 'COMP' AND _view_type <> 'EVOLCOMP' AND
dg_column_index <> 0
UNION
SELECT 'DG_SELECT'||to_char(dg_column_index,'FM000'), CASE WHEN column_code NOT LIKE '%RAPPORTCALC%' THEN 'true' ELSE 'false' END
FROM w_data_column_code
WHERE _view_type <> 'COMP' AND
dg_column_index <> 0
UNION
SELECT 'DG_LHEAD'||to_char(dg_column_index,'FM000'), dg_largehead
FROM w_data_column_code
WHERE _view_type <> 'COMP' AND _view_type <> 'EVOLCOMP' AND
dg_column_index <> 0 AND
is_hide <> '1'
UNION
SELECT 'DG_DESC'||to_char(dg_column_index,'FM000'), dg_description
FROM w_data_column_code
WHERE _view_type <> 'COMP' AND _view_type <> 'EVOLCOMP' AND
dg_column_index <> 0
UNION
SELECT 'DG_FMT'||to_char(dg_column_index,'FM000'), dg_format
FROM w_data_column_code
WHERE _view_type <> 'COMP' AND _view_type <> 'EVOLCOMP' AND
dg_column_index <> 0
UNION
SELECT 'DG_WIDTH'||to_char(dg_column_index,'FM000'), CASE WHEN dg_width >= 150 AND total_function = '*LIST' THEN '' ELSE dg_width::text END
FROM w_data_column_code
WHERE _view_type <> 'COMP' AND _view_type <> 'EVOLCOMP' AND
dg_column_index <> 0
UNION
SELECT 'DG_MWIDTH'||to_char(dg_column_index,'FM000'), CASE WHEN dg_width >= 150 AND total_function = '*LIST' THEN dg_width::text ELSE '' END
FROM w_data_column_code
WHERE _view_type <> 'COMP' AND
dg_column_index <> 0
UNION
SELECT 'DG_COLOR'||to_char(dg_column_index,'FM000'), dg_color
FROM w_data_column_code
WHERE _view_type <> 'COMP' AND
dg_column_index <> 0
UNION
SELECT 'DG_BGCOLOR'||to_char(dg_column_index,'FM000'), dg_background_color
FROM w_data_column_code
WHERE _view_type <> 'COMP' AND
dg_column_index <> 0
UNION
SELECT 'DG_VISIBLE'||to_char(COALESCE(rapport_numero_rubrique,all_index),'FM000'), MAX(CASE WHEN dg_column_index IS NOT NULL AND is_hide <> '1' THEN 'true' ELSE 'false' END)
FROM generate_series(1,(SELECT MAX(dg_column_index) FROM w_data_column_code)::integer) all_index
LEFT JOIN w_data_column_code ON dg_column_index = all_index
WHERE _view_type = 'COMP'
GROUP BY 1
UNION
SELECT 'DG_CODE'||to_char(rapport_numero_rubrique,'FM000'), MAX(CASE WHEN column_code NOT LIKE '%RAPPORTCALC%' THEN column_code ELSE '' END)
FROM w_data_column_code
WHERE (_view_type = 'COMP' OR _view_type = 'EVOLCOMP') AND
dg_column_index <> 0
GROUP BY 1
UNION
SELECT 'DG_HEAD'||to_char(rapport_numero_rubrique,'FM000'), MAX(dg_head)
FROM w_data_column_code
WHERE (_view_type = 'COMP' OR _view_type = 'EVOLCOMP') AND
dg_column_index <> 0 AND
is_hide <> '1'
GROUP BY 1
UNION
SELECT 'DG_HEAD'||to_char(rapport_numero_rubrique,'FM000')||'_'||suf, MAX(dg_head || chr(10) || CASE WHEN suf LIKE 'E%' THEN 'Evol.' WHEN suf LIKE 'P%' THEN '% Evol.' ELSE '' END || chr(10) || '<font color=''#DB1702''>' || cpl || '</font>')
FROM w_data_column_code
JOIN (
SELECT 'NP1'::text AS suf, 'N'::text AS cpl UNION
SELECT 'NP2'::text AS suf, 'N-1'::text AS cpl UNION
SELECT 'NP3'::text AS suf, 'N-2'::text AS cpl UNION
SELECT 'NP4'::text AS suf, 'N-3'::text AS cpl UNION
SELECT 'NM1'::text AS suf, 'M'::text AS cpl UNION
SELECT 'NM2'::text AS suf, 'M-12'::text AS cpl UNION
SELECT 'NM3'::text AS suf, 'M-24'::text AS cpl UNION
SELECT 'NM4'::text AS suf, 'M-36'::text AS cpl UNION
SELECT 'EP21'::text AS suf, 'N vs N-1'::text AS cpl UNION
SELECT 'EP32'::text AS suf, 'N-1 vs N-2'::text AS cpl UNION
SELECT 'EP43'::text AS suf, 'N-2 vs N-3'::text AS cpl UNION
SELECT 'EM21'::text AS suf, 'M vs M-12'::text AS cpl UNION
SELECT 'EM32'::text AS suf, 'M-12 vs M-24'::text AS cpl UNION
SELECT 'EM43'::text AS suf, 'M-24 vs M-36'::text AS cpl UNION
SELECT 'PP21'::text AS suf, 'N vs N-1'::text AS cpl UNION
SELECT 'PP32'::text AS suf, 'N-1 vs N-2'::text AS cpl UNION
SELECT 'PP43'::text AS suf, 'N-2 vs N-3'::text AS cpl UNION
SELECT 'PM21'::text AS suf, 'M vs M-12'::text AS cpl UNION
SELECT 'PM32'::text AS suf, 'M-12 vs M-24'::text AS cpl UNION
SELECT 'PM43'::text AS suf, 'M-24 vs M-36'::text AS cpl
) subview ON 1=1
WHERE _view_type = 'COMP' AND
dg_column_index <> 0 AND
is_hide <> '1'
GROUP BY 1
UNION
SELECT 'CH_HEAD'||to_char(rapport_numero_rubrique,'FM000')||'_'||suf, MAX(cpl)
FROM w_data_column_code
JOIN (
SELECT 'NP1'::text AS suf, 'N'::text AS cpl UNION
SELECT 'NP2'::text AS suf, 'N-1'::text AS cpl UNION
SELECT 'NP3'::text AS suf, 'N-2'::text AS cpl UNION
SELECT 'NP4'::text AS suf, 'N-3'::text AS cpl
) subview ON 1=1
WHERE (_view_type = 'COMP' OR _view_type = 'EVOLCOMP') AND
dg_column_index <> 0 AND
is_hide <> '1'
GROUP BY 1
UNION
SELECT 'DG_LHEAD'||to_char(rapport_numero_rubrique,'FM000'), MAX(dg_largehead)
FROM w_data_column_code
WHERE (_view_type = 'COMP' OR _view_type = 'EVOLCOMP') AND
dg_column_index <> 0 AND
is_hide <> '1'
GROUP BY 1
UNION
SELECT 'DG_DESC'||to_char(rapport_numero_rubrique,'FM000'), MAX(dg_description)
FROM w_data_column_code
WHERE (_view_type = 'COMP' OR _view_type = 'EVOLCOMP') AND
dg_column_index <> 0
GROUP BY 1
UNION
SELECT 'DG_FMT'||to_char(rapport_numero_rubrique,'FM000'), MAX(dg_format)
FROM w_data_column_code
WHERE (_view_type = 'COMP' OR _view_type = 'EVOLCOMP') AND
dg_column_index <> 0
GROUP BY 1
UNION
SELECT 'DG_WIDTH'||to_char(rapport_numero_rubrique,'FM000'), MAX(dg_width::text)
FROM w_data_column_code
WHERE _view_type = 'COMP' AND
dg_column_index <> 0
GROUP BY 1
UNION
SELECT 'DG_COLOR'||to_char(rapport_numero_rubrique,'FM000'), MAX(dg_color)
FROM w_data_column_code
WHERE _view_type = 'COMP' AND
dg_column_index <> 0
GROUP BY 1
UNION
SELECT 'DG_BGCOLOR'||to_char(rapport_numero_rubrique,'FM000'), MAX(dg_background_color)
FROM w_data_column_code
WHERE _view_type = 'COMP' AND
dg_column_index <> 0
GROUP BY 1
UNION
SELECT 'DG_SORTFIELD', CASE WHEN _view_type <> 'COMP' THEN COALESCE(MAX(CASE WHEN dg_option LIKE '%[SORT=%' THEN 'indicateurs['||to_char(dg_column_index,'FM000') || ']' ELSE NULL END),'code') ELSE 'DEFAULT' END
FROM w_data_column_code
WHERE _view_type <> 'COMP' OR
_view_type = 'COMP' AND (dg_column_index - ((rapport_numero_rubrique-1)*8)) = 1
UNION
SELECT 'DG_SORTDIRECTION', CASE WHEN _view_type <> 'COMP' THEN COALESCE(MAX(CASE WHEN dg_option LIKE '%[SORT=D]%' THEN 'DESC' WHEN dg_option LIKE '%[SORT=A]%' THEN 'ASC' ELSE 'ASC' END),'DESC') ELSE 'DESC' END
FROM w_data_column_code
WHERE _view_type <> 'COMP' OR
_view_type = 'COMP' AND (dg_column_index - ((rapport_numero_rubrique-1)*8)) = 1
UNION
SELECT 'DG_WIDTH', MAX(dg_width)::text
FROM w_data_column_code
WHERE _view_type = 'EVOLCOMP' AND
dg_column_index <> 0
UNION
SELECT 'CH_CHARTS', MAX(CASE WHEN chart_type <> '' THEN '50' ELSE '00' END)
FROM w_data_column_code
WHERE _view_type IN ('','ANZ')
UNION
SELECT 'CH_VISIBLE'||substr(pos,1,1), MIN(CASE WHEN w_data_column_code.chart_cellule IS NULL THEN 'false' ELSE '' END)
FROM (SELECT unnest(ARRAY['1A','1B','1C','2A','2B','2C','3A','3B','3C']) pos) subview
LEFT JOIN w_data_column_code ON pos = chart_cellule
WHERE _view_type IN ('','ANZ')
GROUP BY 1
UNION
SELECT 'CH_VISIBLE'||pos, MIN(CASE WHEN w_data_column_code.chart_cellule IS NULL THEN 'false' ELSE '' END)
FROM (SELECT unnest(ARRAY['1A','1B','1C','2A','2B','2C','3A','3B','3C']) pos) subview
LEFT JOIN w_data_column_code ON pos = chart_cellule
WHERE _view_type IN ('','ANZ')
GROUP BY 1
UNION
SELECT 'CH_LHEAD'||chart_cellule, array_to_string(base.cti_array_accum(dg_largehead),' + ')
FROM
(SELECT chart_cellule, dg_largehead FROM w_data_column_code WHERE chart_type <> '' AND is_hide <> '1' ORDER BY chart_cellule, chart_serie) subview
WHERE _view_type IN ('','ANZ')
GROUP BY 1
UNION
SELECT 'CH_TYPE'||chart_cellule, MIN(chart_type)
FROM w_data_column_code
WHERE _view_type IN ('','ANZ') AND chart_type <> ''
GROUP BY 1
UNION
SELECT 'CH_SUBTYPE'||chart_cellule, MIN(chart_subtype)
FROM w_data_column_code
WHERE _view_type IN ('','ANZ') AND chart_type <> ''
GROUP BY 1
UNION
SELECT 'CH_SERIE'||subview.chart_cellule||'-'||to_char(i,'FM00'), COALESCE(MAX(to_char(dg_column_index,'FM000')),'001')
FROM
(SELECT unnest(ARRAY['1A','1B','1C','2A','2B','2C','3A','3B','3C']) AS chart_cellule) subview
JOIN generate_series(1,3) i ON 1=1
LEFT JOIN w_data_column_code ON
subview.chart_cellule = w_data_column_code.chart_cellule AND
to_char(i,'FM00') = w_data_column_code.chart_serie
WHERE _view_type IN ('','ANZ')
GROUP BY 1
UNION
SELECT 'CH_SERIETYPE'||chart_cellule||'-'||chart_serie, MAX(chart_type)
FROM w_data_column_code
WHERE _view_type IN ('','ANZ') AND chart_type <> ''
GROUP BY 1
UNION
SELECT 'CH_SERIELHEAD'||chart_cellule||'-'||chart_serie, MAX(dg_largehead)
FROM w_data_column_code
WHERE _view_type IN ('','ANZ') AND chart_type <> '' AND
is_hide <> '1'
GROUP BY 1
UNION
SELECT 'CH_SERIEVISIBLE'||subview.chart_cellule||'-'||to_char(i,'FM00'), MAX(CASE WHEN w_data_column_code.chart_serie IS NOT NULL THEN 'true' ELSE 'false' END)
FROM
(
SELECT chart_cellule
FROM w_data_column_code
WHERE chart_type <> ''
GROUP BY 1
) subview
JOIN generate_series(1,3) i ON 1=1
LEFT JOIN w_data_column_code ON
subview.chart_cellule = w_data_column_code.chart_cellule AND
to_char(i,'FM00') = w_data_column_code.chart_serie
WHERE _view_type IN ('','ANZ')
GROUP BY 1
UNION
SELECT property, property_value
FROM w_cti_get_columns_options
WHERE property LIKE 'SQL%'
ORDER BY 1
;
-- Corps du SQL
INSERT INTO cti_get_columns_from_indicateurs_properties(property, property_value)
SELECT 'SQLCORPS-' || v_rapports_tables_indicateurs_1.contexte || '#' || substr(dimensions_date,i,1),
'CTIPREPAR_TREE WORKTABLE{w_table,, ADD} ' ||
'GROUPBY1{' ||
MAX(CASE WHEN property = 'SQL_GROUPBY_OID_FIELD' THEN property_value ELSE '' END) || ',,' ||
MAX(CASE WHEN property = 'SQL_GROUPBY_COD_FIELD' THEN property_value ELSE '' END) || ',,' ||
MAX(CASE WHEN property = 'SQL_GROUPBY_TXT_FIELD' THEN property_value ELSE '' END) || '} ' ||
'GROUPBY2{' ||
MAX(CASE WHEN property = 'SQL_GROUPBY_2_OID_FIELD' THEN property_value ELSE '' END) || ',,' ||
MAX(CASE WHEN property = 'SQL_GROUPBY_2_COD_FIELD' THEN property_value ELSE '' END) || ',,' ||
MAX(CASE WHEN property = 'SQL_GROUPBY_2_TXT_FIELD' THEN property_value ELSE '' END) || '} ' ||
'GROUPBY3{' ||
MAX(CASE WHEN property = 'SQL_GROUPBY_3_OID_FIELD' THEN property_value ELSE '' END) || ',,' ||
MAX(CASE WHEN property = 'SQL_GROUPBY_3_COD_FIELD' THEN property_value ELSE '' END) || ',,' ||
MAX(CASE WHEN property = 'SQL_GROUPBY_3_TXT_FIELD' THEN property_value ELSE '' END) || '} ' ||
'GROUPBY1MODE{' ||
MAX(CASE WHEN property = 'SQL_GROUPBY1MODE' THEN property_value ELSE '' END) || '} ' ||
CASE WHEN MAX(CASE WHEN property = 'IN_VIEWTYPE' THEN property_value ELSE '' END) = 'EVOL'
THEN
'COLUMNBY' ||MAX(CASE WHEN property = 'SQL_COLUMNBY' THEN property_value ELSE '' END) ||
'{' || MAX(dimensions_date_texte[substr(dimensions_date,i,1)::int]) || ',, ' ||
MAX(CASE WHEN property = 'SQL_WHERE_PERIODE' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || ' ,, ' ||
MAX(CASE WHEN property = 'SQL_WHERE_TOPERIODE' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || ' ,, ' ||
MAX(CASE WHEN property = 'SQL_COLUMNBY_COUNT' THEN replace(property_value,'''','''''') ELSE '' END) || ' ,, ' ||
MAX(CASE WHEN property = 'SQL_COLUMNBY_OPTION' THEN replace(property_value,'''','''''') ELSE '' END) ||
'} '
ELSE '' END ||
CASE WHEN MAX(CASE WHEN property = 'IN_VIEWTYPE' THEN property_value ELSE '' END) = 'CROSS'
THEN
'COLUMNBYOID{' ||
MAX(CASE WHEN property = 'SQL_COLUMNBY_OID_FIELD' THEN property_value ELSE '' END) || ',,' ||
MAX(CASE WHEN property = 'SQL_COLUMNBY_COD_FIELD' THEN property_value ELSE '' END) || ',,' ||
MAX(CASE WHEN property = 'SQL_COLUMNBY_TXT_FIELD' THEN property_value ELSE '' END) || ',,' ||
'[VIEW.DB_COLUMNS001]' || ',,' ||
MAX(CASE WHEN property = 'SQL_COLUMNBY_COUNT' THEN replace(property_value,'''','''''') ELSE '' END) || ' ,, ' ||
MAX(CASE WHEN property = 'SQL_COLUMNBY_OPTION' THEN replace(property_value,'''','''''') ELSE '' END) ||
'} '
ELSE '' END ||
CASE WHEN MAX(CASE WHEN property = 'IN_VIEWTYPE' THEN property_value ELSE '' END) = 'EVOLCOMP'
THEN
'COLUMNBYOID{' ||
MAX(CASE WHEN property = 'SQL_COLUMNBY_OID_FIELD' THEN property_value ELSE '' END) || ',,' ||
MAX(CASE WHEN property = 'SQL_COLUMNBY_COD_FIELD' THEN property_value ELSE '' END) || ',,' ||
MAX(CASE WHEN property = 'SQL_COLUMNBY_TXT_FIELD' THEN property_value ELSE '' END) || ',,' ||
'[VIEW.DB_COLUMNS001]' || ',,' ||
MAX(CASE WHEN property = 'SQL_COLUMNBY_COUNT' THEN replace(property_value,'''','''''') ELSE '' END) || ' ,, ' ||
MAX(CASE WHEN property = 'SQL_COLUMNBY_OPTION' THEN replace(property_value,'''','''''') ELSE '' END) ||
'} '
ELSE '' END ||
CASE WHEN MAX(CASE WHEN property = 'IN_VIEWTYPE' THEN property_value ELSE '' END) = 'COMP'
THEN
'COLUMNBYDATECOMP{' || MAX(dimensions_date_texte[substr(dimensions_date,i,1)::int]) || ',, ' ||
MAX(CASE WHEN property = 'SQL_WHERE_PERIODE' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || ' ,, ' ||
MAX(CASE WHEN property = 'SQL_WHERE_TOPERIODE' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || ' ,, ' ||
MAX(CASE WHEN property = 'SQL_WHERE_PERIODE_D' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || ' ,, ' ||
MAX(CASE WHEN property = 'SQL_WHERE_TOPERIODE_D' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || ' ,, ' ||
' ,, ,, ,, ' ||
MAX(CASE WHEN property = 'SQL_COMP_TYPE' THEN replace(property_value,'''','''''') ELSE '' END) || ' ,, ' ||
MAX(CASE WHEN property = 'SQL_COMP_LASTMONTH' THEN replace(property_value,'''','''''') ELSE '' END) ||
'} '
ELSE '' END ||
'ORDERBY{' ||
MAX(CASE WHEN property = 'DG_SORTFIELD' THEN replace(property_value,'''','''''') ELSE '' END) || ',, ' ||
MAX(CASE WHEN property = 'DG_SORTDIRECTION' THEN replace(property_value,'''','''''') ELSE '' END) || '} ' ||
'OPTIONS{' ||
'NOTZERO=' || MAX(CASE WHEN property = 'SQL_NOTZERO' THEN replace(property_value,'''','''''') ELSE '' END) || ' ,, ' ||
'NOTTOTAL=' || MAX(CASE WHEN property = 'SQL_NOTTOTAL' THEN replace(property_value,'''','''''') ELSE '' END) ||
'} ' ||
'SIGNIFDATA{' ||
MAX(CASE WHEN property = 'SQL_SIGNIFDATA' THEN replace(property_value,'''','''''') ELSE '' END) || ',,' ||
MAX(CASE WHEN property = 'SQL_SIGNIFMODE' THEN replace(property_value,'''','''''') ELSE '' END) || ',,' ||
MAX(CASE WHEN property = 'SQL_SIGNIFNUMBER' THEN replace(property_value,'''','''''') ELSE '' END) || '} ' ||
'INDICATORS{' ||
MAX(CASE WHEN property = 'DG_COLUMNS' THEN property_value ELSE '' END) || '} ' ||
'INDICATORS_TEXT{' ||
MAX(CASE WHEN property = 'DB_TEXTCOLUMNS' THEN property_value ELSE '' END) || '} ' ||
'WORKINDICATORS{' ||
MAX(CASE WHEN property LIKE 'DB_COLUMNS-%' THEN property_value ELSE '' END) || '} ' ||
'FROM ' ||
MAX(v_schema_settings_1.property_array[1]) || ' ' ||
'WHERE ' ||
CASE WHEN MAX(CASE WHEN property = 'IN_VIEWTYPE' THEN property_value ELSE '' END) <> 'COMP' THEN
' (' ||
/* [1] a remplacer par du dynamique en fonction de la date choisie */
MAX(v_schema_settings_1.property_array[2]) || ' ' ||
CASE WHEN (SELECT data_type::text FROM information_schema.columns WHERE column_name = MAX(v_schema_settings_1.property_array[2])
AND CASE WHEN MAX(v_schema_settings_1.property_array[1]) LIKE '%MENSUEL%' THEN 'v_stock_1'
ELSE left(split_part(lower(MAX(v_schema_settings_1.property_array[1])),'#',2),-1) || '2' END = table_name AND table_schema = 'eco') = 'date'::text
THEN 'BETWEEN ' ||
MAX(CASE WHEN property = 'SQL_WHERE_PERIODE' THEN '''' || replace(property_value,'''','''''') ELSE '' END) || '''' || ' AND ' ||
MAX(CASE WHEN property = 'SQL_WHERE_TOPERIODE' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) ||
CASE WHEN MAX(CASE WHEN property = 'IN_VIEWTYPE' THEN property_value ELSE '' END) = 'EVOLCOMP' THEN
CASE WHEN MAX(CASE WHEN property = 'SQL_COMP_TYPE' THEN property_value ELSE '' END) >= '2' THEN
' OR ' || MAX(v_schema_settings_1.property_array[2]) || ' BETWEEN ' ||
'date('||MAX(CASE WHEN property = 'SQL_WHERE_PERIODE' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || '::date + interval ''1 day'' - interval ''1 year'' - interval ''1 day'')' || ' AND ' ||
'date('||MAX(CASE WHEN property = 'SQL_WHERE_TOPERIODE' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || '::date + interval ''1 day'' - interval ''1 year'' - interval ''1 day'')'
ELSE '' END ||
CASE WHEN MAX(CASE WHEN property = 'SQL_COMP_TYPE' THEN property_value ELSE '' END) >= '3' THEN
' OR ' || MAX(v_schema_settings_1.property_array[2]) || ' BETWEEN ' ||
'date('||MAX(CASE WHEN property = 'SQL_WHERE_PERIODE' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || '::date + interval ''1 day'' - interval ''2 year'' - interval ''1 day'')' || ' AND ' ||
'date('||MAX(CASE WHEN property = 'SQL_WHERE_TOPERIODE' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || '::date + interval ''1 day'' - interval ''2 year'' - interval ''1 day'')'
ELSE '' END ||
CASE WHEN MAX(CASE WHEN property = 'SQL_COMP_TYPE' THEN property_value ELSE '' END) >= '4' THEN
' OR ' || MAX(v_schema_settings_1.property_array[2]) || ' BETWEEN ' ||
'date('||MAX(CASE WHEN property = 'SQL_WHERE_PERIODE' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || '::date + interval ''1 day'' - interval ''3 year'' - interval ''1 day'')' || ' AND ' ||
'date('||MAX(CASE WHEN property = 'SQL_WHERE_TOPERIODE' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || '::date + interval ''1 day'' - interval ''3 year'' - interval ''1 day'')'
ELSE '' END
ELSE '' END ||
') '
/*date range */
ELSE '&& daterange(' ||
MAX(CASE WHEN property = 'SQL_WHERE_PERIODE' THEN '''' || replace(property_value,'''','''''') ELSE '' END) || '''' || ' , ' ||
MAX(CASE WHEN property = 'SQL_WHERE_TOPERIODE' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || ')' ||
CASE WHEN MAX(CASE WHEN property = 'IN_VIEWTYPE' THEN property_value ELSE '' END) = 'EVOLCOMP' THEN
CASE WHEN MAX(CASE WHEN property = 'SQL_COMP_TYPE' THEN property_value ELSE '' END) >= '2' THEN
' OR ' || MAX(v_schema_settings_1.property_array[2]) || ' && daterange(' ||
'date('||MAX(CASE WHEN property = 'SQL_WHERE_PERIODE' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || '::date + interval ''1 day'' - interval ''1 year'' - interval ''1 day'')' || ' , ' ||
'date('||MAX(CASE WHEN property = 'SQL_WHERE_TOPERIODE' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || '::date + interval ''1 day'' - interval ''1 year'' - interval ''1 day'')' || ')'
ELSE '' END ||
CASE WHEN MAX(CASE WHEN property = 'SQL_COMP_TYPE' THEN property_value ELSE '' END) >= '3' THEN
' OR ' || MAX(v_schema_settings_1.property_array[2]) || ' && daterange(' ||
'date('||MAX(CASE WHEN property = 'SQL_WHERE_PERIODE' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || '::date + interval ''1 day'' - interval ''2 year'' - interval ''1 day'')' || ' , ' ||
'date('||MAX(CASE WHEN property = 'SQL_WHERE_TOPERIODE' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || '::date + interval ''1 day'' - interval ''2 year'' - interval ''1 day'')' || ')'
ELSE '' END ||
CASE WHEN MAX(CASE WHEN property = 'SQL_COMP_TYPE' THEN property_value ELSE '' END) >= '4' THEN
' OR ' || MAX(v_schema_settings_1.property_array[2]) || ' daterange(' ||
'date('||MAX(CASE WHEN property = 'SQL_WHERE_PERIODE' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || '::date + interval ''1 day'' - interval ''3 year'' - interval ''1 day'')' || ' , ' ||
'date('||MAX(CASE WHEN property = 'SQL_WHERE_TOPERIODE' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || '::date + interval ''1 day'' - interval ''3 year'' - interval ''1 day'')' || ')'
ELSE '' END
ELSE '' END ||
') '
END
ELSE '1=1' END || ' ' ||
MAX(CASE WHEN property = 'SQL_WHERE_FILTER' THEN property_value ELSE '' END) ||
CASE WHEN MAX(CASE WHEN property = 'FILTER_IND' THEN property_value ELSE '' END) != '' THEN 'HAVING ' || MAX(CASE WHEN property = 'FILTER_IND' THEN property_value ELSE '' END) || '!= 0' ELSE '' END
FROM eco.v_rapports_tables_indicateurs_1
JOIN (SELECT generate_series(1,5) AS i) subview_dimension ON substr(dimensions_date,i,1) <> ''
JOIN eco.v_schema_settings_1 ON (v_rapports_tables_indicateurs_1.contexte || '#' || substr(dimensions_date,i,1)) = v_schema_settings_1.code AND
v_schema_settings_1.setting_type = 'FROM'
LEFT JOIN cti_get_columns_from_indicateurs_properties ON
property NOT LIKE 'DB_COLUMNS-%' OR
property = 'FILTER_IND' OR
property = ('DB_COLUMNS-' || v_rapports_tables_indicateurs_1.contexte || '#' || substr(dimensions_date,i,1))
GROUP BY 1
;
INSERT INTO cti_get_columns_from_indicateurs_properties(property, property_value)
SELECT 'SQLCORPS-INIT',
'CTIPREPAR_TREE WORKTABLE{w_table} ' ||
'GROUPBY1MODE{' ||
MAX(CASE WHEN property = 'SQL_GROUPBY1MODE' THEN replace(property_value,'''','''''') ELSE '' END) || '} '
FROM cti_get_columns_from_indicateurs_properties
;
INSERT INTO cti_get_columns_from_indicateurs_properties(property, property_value)
SELECT 'SQLCORPS-FINALIZE',
'CTISELECT_TREE WORKTABLE{w_table,, ADD} ' ||
'GROUPBY1{' ||
MAX(CASE WHEN property = 'SQL_GROUPBY_OID_FIELD' THEN CASE WHEN property_value <> '0' THEN 'oid' ELSE '0' END ELSE '' END) || ',,' ||
MAX(CASE WHEN property = 'SQL_GROUPBY_COD_FIELD' THEN CASE WHEN property_value <> '0' THEN 'code' ELSE '0' END ELSE '' END) || ',,' ||
MAX(CASE WHEN property = 'SQL_GROUPBY_TXT_FIELD' THEN CASE WHEN property_value <> '0' THEN 'texte' ELSE '0' END ELSE '' END) || '} ' ||
'GROUPBY2{' ||
MAX(CASE WHEN property = 'SQL_GROUPBY_2_OID_FIELD' THEN CASE WHEN property_value <> '0' THEN 'oid' ELSE '0' END ELSE '' END) || ',,' ||
MAX(CASE WHEN property = 'SQL_GROUPBY_2_COD_FIELD' THEN CASE WHEN property_value <> '0' THEN 'code' ELSE '0' END ELSE '' END) || ',,' ||
MAX(CASE WHEN property = 'SQL_GROUPBY_2_TXT_FIELD' THEN CASE WHEN property_value <> '0' THEN 'texte' ELSE '0' END ELSE '' END) || '} ' ||
'GROUPBY3{' ||
MAX(CASE WHEN property = 'SQL_GROUPBY_3_OID_FIELD' THEN CASE WHEN property_value <> '0' THEN 'oid' ELSE '0' END ELSE '' END) || ',,' ||
MAX(CASE WHEN property = 'SQL_GROUPBY_3_COD_FIELD' THEN CASE WHEN property_value <> '0' THEN 'code' ELSE '0' END ELSE '' END) || ',,' ||
MAX(CASE WHEN property = 'SQL_GROUPBY_3_TXT_FIELD' THEN CASE WHEN property_value <> '0' THEN 'texte' ELSE '0' END ELSE '' END) || '} ' ||
'GROUPBY1MODE{' ||
MAX(CASE WHEN property = 'SQL_GROUPBY1MODE' THEN replace(property_value,'''','''''') ELSE '' END) || '} ' ||
CASE WHEN MAX(CASE WHEN property = 'IN_VIEWTYPE' THEN property_value ELSE '' END) = 'EVOL'
THEN
'COLUMNBY' || MAX(CASE WHEN property = 'SQL_COLUMNBY' THEN replace(property_value,'''','''''') ELSE '' END) ||
'{' || 'date_commande' || ',, ' ||
MAX(CASE WHEN property = 'SQL_WHERE_PERIODE' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || ' ,, ' ||
MAX(CASE WHEN property = 'SQL_WHERE_TOPERIODE' THEN '''' || replace(property_value,'''','''''') || '''' ELSE '' END) || ' ,, ' ||
MAX(CASE WHEN property = 'SQL_COLUMNBY_COUNT' THEN replace(property_value,'''','''''') ELSE '' END) || ' ,, ' ||
MAX(CASE WHEN property = 'SQL_COLUMNBY_OPTION' THEN replace(property_value,'''','''''') ELSE '' END) ||
'} '
ELSE '' END ||
'ORDERBY{' ||
MAX(CASE WHEN property = 'DG_SORTFIELD' THEN replace(property_value,'''','''''') ELSE '' END) || ',, ' ||
MAX(CASE WHEN property = 'DG_SORTDIRECTION' THEN replace(property_value,'''','''''') ELSE '' END) || '} ' ||
'OPTIONS{' ||
'NOTZERO=' || MAX(CASE WHEN property = 'SQL_NOTZERO' THEN replace(property_value,'''','''''') ELSE '' END) || ' ,, ' ||
'NOTTOTAL=' || MAX(CASE WHEN property = 'SQL_NOTTOTAL' THEN replace(property_value,'''','''''') ELSE '' END) ||
'} ' ||
'INDICATORS{' ||
MAX(CASE WHEN property = 'DG_COLUMNS' THEN replace(property_value,'''','''''') ELSE '' END) || '} ' ||
'INDICATORS_TEXT{' ||
MAX(CASE WHEN property = 'DB_TEXTCOLUMNSEMPTY' THEN property_value ELSE '' END) || '} ' ||
'FROM (SELECT 0::bigint AS oid, ''''::text AS code, ''''::text AS texte LIMIT 0) subview ' || '
AFTER{
DROP TABLE IF EXISTS temp.w_table_before., CREATE TABLE temp.w_table_before AS SELECT * FROm w_table.,
DROP TABLE IF EXISTS temp.cti_get_columns_from_indicateurs_properties., CREATE TABLE temp.cti_get_columns_from_indicateurs_properties AS SELECT * FROm cti_get_columns_from_indicateurs_properties.,
SELECT eco.cti_view_after('''', '''')
.,
DROP TABLE IF EXISTS temp.w_table_after., CREATE TABLE temp.w_table_after AS SELECT * FROm w_table.,
UPDATE w_table SET oid1=oid1 WHERE oid1<>oid1
.,
}'
FROM cti_get_columns_from_indicateurs_properties
;
FOR row IN
SELECT *
FROM cti_get_columns_from_indicateurs_properties
ORDER BY 1
LOOP
RETURN NEXT row;
END LOOP;
RETURN ;
END;