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