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.
 
 
 

570 lines
28 KiB

return: text
lang: plpgsql
src: |
DECLARE
sqlcmd text;
def_cursor refcursor;
_schemaname text;
result TEXT;
BEGIN
-- Formes d'activité
DROP TABLE IF EXISTS w_indicateur_condition;
CREATE TEMP TABLE w_indicateur_condition AS
SELECT
'CTI_COMPTE#' || v_source.oid::text AS code,
COALESCE(t_classes.texte || '. ' || t_classes_sections.texte,'Compte. ' || v_source.texte::text) AS texte,
v_source.texte AS texte_court,
'compte_id'::text AS column_name,
''::text AS rule,
v_source.oid::text AS value,
'COMPTE_C='||v_source.oid AS view_select_rule,
ARRAY[
CASE
WHEN v_source.oid LIKE 'LS%' THEN '1-Classe' || substr(v_source.oid,3,2)
WHEN v_source.is_cti = '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN '2-Liste CTI'
WHEN v_source.is_cti <> '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN '3-Liste CTI'
ELSE '9' END,
CASE
WHEN v_source.oid LIKE 'LS%' THEN 'LS#'||t_listes_tables_classes.code||':'||CASE WHEN t_classes.code <> '' THEN t_classes.code ELSE '*CLS'||to_char(t_classes.sequence,'FM00') END||':'||t_classes_sections.code
WHEN v_source.oid LIKE 'LI%' THEN COALESCE('LI#'||t_listes.code,v_source.oid)
WHEN v_source.oid LIKE 'SL%' THEN COALESCE('SL#'||t_listes.code,v_source.oid)
ELSE v_source.oid END
] AS arbre_code,
ARRAY[
CASE
WHEN v_source.oid LIKE 'LS%' THEN t_classes.texte
WHEN v_source.is_cti = '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN 'Listes CTI'
WHEN v_source.is_cti <> '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN 'Listes Etablissement'
ELSE 'Valeurs' END,
CASE
WHEN v_source.oid LIKE 'LS%' THEN t_classes_sections.texte
ELSE v_source.texte END
] AS arbre_texte
FROM compta.v_comptes_c_1 v_source
LEFT JOIN compta.t_classes_sections ON v_source.oid LIKE 'LS%' AND
t_classes_sections.oid::text = substr(v_source.oid,5)
LEFT JOIN compta.t_classes ON t_classes.oid = t_classes_sections.classe_id
LEFT JOIN compta.t_listes_tables t_listes_tables_classes ON t_classes.table_id = t_listes_tables_classes.oid
LEFT JOIN compta.t_listes ON (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') AND
t_listes.oid::text = substr(v_source.oid,3) AND
t_listes.code <> ''
WHERE v_source.oid NOT LIKE 'LC%' AND
(v_source.oid NOT LIKE 'LS%' OR substr(v_source.oid,5) <> '0') AND
v_source.oid NOT LIKE 'CP%' AND
v_source.oid NOT LIKE 'CL%' AND
v_source.oid NOT LIKE 'LS09%' AND
v_source.oid <> '-1'
;
-- Journaux
INSERT INTO w_indicateur_condition
SELECT
'CTI_JOURNAL#' || v_source.oid::text AS code,
COALESCE(t_classes.texte || '. ' || t_classes_sections.texte,'Journal. ' || v_source.texte::text) AS texte,
v_source.texte AS texte_court,
'journal_id'::text AS column_name,
''::text AS rule,
v_source.oid::text AS value,
'JOURNAL_C='||v_source.oid AS view_select_rule,
ARRAY[
CASE
WHEN v_source.oid LIKE 'LS%' THEN '1-Classe' || substr(v_source.oid,3,2)
WHEN v_source.is_cti = '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN '2-Liste CTI'
WHEN v_source.is_cti <> '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN '3-Liste CTI'
ELSE '9' END,
CASE
WHEN v_source.oid LIKE 'LS%' THEN 'LS#'||t_listes_tables_classes.code||':'||CASE WHEN t_classes.code <> '' THEN t_classes.code ELSE '*CLS'||to_char(t_classes.sequence,'FM00') END||':'||t_classes_sections.code
WHEN v_source.oid LIKE 'LI%' THEN COALESCE('LI#'||t_listes.code,v_source.oid)
WHEN v_source.oid LIKE 'SL%' THEN COALESCE('SL#'||t_listes.code,v_source.oid)
WHEN v_source.oid LIKE 'JR%' THEN COALESCE('JR#'||t_source.code,v_source.oid)
ELSE v_source.oid END
] AS arbre_code,
ARRAY[
CASE
WHEN v_source.oid LIKE 'LS%' THEN t_classes.texte
WHEN v_source.is_cti = '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN 'Listes CTI'
WHEN v_source.is_cti <> '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN 'Listes Etablissement'
ELSE 'Valeurs' END,
CASE
WHEN v_source.oid LIKE 'LS%' THEN t_classes_sections.texte
ELSE v_source.texte END
] AS arbre_texte
FROM compta.v_journaux_c_1 v_source
LEFT JOIN compta.t_classes_sections ON v_source.oid LIKE 'LS%' AND
t_classes_sections.oid::text = substr(v_source.oid,5)
LEFT JOIN compta.t_classes ON t_classes.oid = t_classes_sections.classe_id
LEFT JOIN compta.t_listes_tables t_listes_tables_classes ON t_classes.table_id = t_listes_tables_classes.oid
LEFT JOIN compta.t_listes ON (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') AND
t_listes.oid::text = substr(v_source.oid,3) AND
t_listes.code <> ''
LEFT JOIN compta.t_journaux t_source ON v_source.oid LIKE 'JR%' AND t_source.oid = substr(v_source.oid,3)
WHERE v_source.oid NOT LIKE 'LC%' AND
(v_source.oid NOT LIKE 'LS%' OR substr(v_source.oid,5) <> '0') AND
v_source.oid <> '-1'
;
-- POLES
INSERT INTO w_indicateur_condition
SELECT
'CTI_POLE#' || v_source.oid::text AS code,
COALESCE(t_classes.texte || '. ' || t_classes_sections.texte,'Pole. ' || v_source.texte::text) AS texte,
v_source.texte AS texte_court,
'pole_id'::text AS column_name,
''::text AS rule,
v_source.oid::text AS value,
'POLE='||v_source.oid AS view_select_rule,
ARRAY[
CASE
WHEN v_source.oid LIKE 'LS%' THEN '1-Classe' || substr(v_source.oid,3,2)
WHEN v_source.is_cti = '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN '2-Liste CTI'
WHEN v_source.is_cti <> '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN '3-Liste CTI'
ELSE '9' END,
CASE
WHEN v_source.oid LIKE 'LS%' THEN 'LS#'||t_listes_tables_classes.code||':'||CASE WHEN t_classes.code <> '' THEN t_classes.code ELSE '*CLS'||to_char(t_classes.sequence,'FM00') END||':'||t_classes_sections.code
WHEN v_source.oid LIKE 'LI%' THEN COALESCE('LI#'||t_listes.code,v_source.oid)
WHEN v_source.oid LIKE 'SL%' THEN COALESCE('SL#'||t_listes.code,v_source.oid)
WHEN v_source.oid LIKE 'JR%' THEN COALESCE('JR#'||t_source.code,v_source.oid)
ELSE v_source.oid END
] AS arbre_code,
ARRAY[
CASE
WHEN v_source.oid LIKE 'LS%' THEN t_classes.texte
WHEN v_source.is_cti = '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN 'Listes CTI'
WHEN v_source.is_cti <> '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN 'Listes Etablissement'
ELSE 'Valeurs' END,
CASE
WHEN v_source.oid LIKE 'LS%' THEN t_classes_sections.texte
ELSE v_source.texte END
] AS arbre_texte
FROM compta.v_pole_1 v_source
LEFT JOIN compta.t_classes_sections ON v_source.oid LIKE 'LS%' AND
t_classes_sections.oid::text = substr(v_source.oid,5)
LEFT JOIN compta.t_classes ON t_classes.oid = t_classes_sections.classe_id
LEFT JOIN compta.t_listes_tables t_listes_tables_classes ON t_classes.table_id = t_listes_tables_classes.oid
LEFT JOIN compta.t_listes ON (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') AND
t_listes.oid::text = substr(v_source.oid,3) AND
t_listes.code <> ''
LEFT JOIN compta.t_journaux t_source ON v_source.oid LIKE 'JR%' AND t_source.oid = substr(v_source.oid,3)
WHERE v_source.oid NOT LIKE 'LC%' AND
(v_source.oid NOT LIKE 'LS%' OR substr(v_source.oid,5) <> '0') AND
v_source.oid <> '-1'
;
-- Sites
INSERT INTO w_indicateur_condition
SELECT
'CTI_SITE#' || v_source.oid::text AS code,
COALESCE(t_classes.texte || '. ' || t_classes_sections.texte,'Site. ' || v_source.texte::text) AS texte,
v_source.texte AS texte_court,
'site_id'::text AS column_name,
''::text AS rule,
v_source.oid::text AS value,
'SITE_C='||v_source.oid AS view_select_rule,
ARRAY[
CASE
WHEN v_source.oid LIKE 'LS%' THEN '1-Classe' || substr(v_source.oid,3,2)
WHEN v_source.is_cti = '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN '2-Liste CTI'
WHEN v_source.is_cti <> '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN '3-Liste CTI'
ELSE '9' END,
CASE
WHEN v_source.oid LIKE 'LS%' THEN 'LS#'||t_listes_tables_classes.code||':'||CASE WHEN t_classes.code <> '' THEN t_classes.code ELSE '*CLS'||to_char(t_classes.sequence,'FM00') END||':'||t_classes_sections.code
WHEN v_source.oid LIKE 'LI%' THEN COALESCE('LI#'||t_listes.code,v_source.oid)
WHEN v_source.oid LIKE 'SL%' THEN COALESCE('SL#'||t_listes.code,v_source.oid)
WHEN v_source.oid LIKE 'SI%' THEN COALESCE('SI#'||t_source.code,v_source.oid)
ELSE v_source.oid END
] AS arbre_code,
ARRAY[
CASE
WHEN v_source.oid LIKE 'LS%' THEN t_classes.texte
WHEN v_source.is_cti = '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN 'Listes CTI'
WHEN v_source.is_cti <> '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN 'Listes Etablissement'
ELSE 'Valeurs' END,
v_source.texte
] AS arbre_texte
FROM compta.v_sites_c_1 v_source
LEFT JOIN compta.t_classes_sections ON v_source.oid LIKE 'LS%' AND
t_classes_sections.oid::text = substr(v_source.oid,5)
LEFT JOIN compta.t_classes ON t_classes.oid = t_classes_sections.classe_id
LEFT JOIN compta.t_listes_tables t_listes_tables_classes ON t_classes.table_id = t_listes_tables_classes.oid
LEFT JOIN compta.t_listes ON (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') AND
t_listes.oid::text = substr(v_source.oid,3) AND
t_listes.code <> ''
LEFT JOIN compta.t_sites t_source ON v_source.oid LIKE 'SI%' AND t_source.oid = substr(v_source.oid,3)
WHERE v_source.oid NOT LIKE 'LC%' AND
(v_source.oid NOT LIKE 'LS%' OR substr(v_source.oid,5) <> '0') AND
v_source.oid <> '-1' AND
v_source.oid <> 'SI0'
;
-- Sections analytiques
INSERT INTO w_indicateur_condition
SELECT
'CTI_SECANA#' || v_source.oid::text AS code,
COALESCE(t_classes.texte || '. ' || t_classes_sections.texte,'Section. ' || v_source.texte::text) AS texte,
v_source.texte AS texte_court,
'section_analytique_id'::text AS column_name,
''::text AS rule,
v_source.oid::text AS value,
'SECTION_ANALYTIQUE_C='||v_source.oid AS view_select_rule,
ARRAY[
CASE
WHEN v_source.oid LIKE 'LS%' THEN '1-Classe' || substr(v_source.oid,3,2)
WHEN v_source.is_cti = '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN '2-Liste CTI'
WHEN v_source.is_cti <> '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN '3-Liste CTI'
ELSE '9' END,
CASE
WHEN v_source.oid LIKE 'LS%' THEN 'LS#'||t_listes_tables_classes.code||':'||CASE WHEN t_classes.code <> '' THEN t_classes.code ELSE '*CLS'||to_char(t_classes.sequence,'FM00') END||':'||t_classes_sections.code
WHEN v_source.oid LIKE 'LI%' THEN COALESCE('LI#'||t_listes.code,v_source.oid)
WHEN v_source.oid LIKE 'SL%' THEN COALESCE('SL#'||t_listes.code,v_source.oid)
WHEN v_source.oid LIKE 'SA%' THEN COALESCE('SA#'||t_source.code,v_source.oid)
ELSE v_source.oid END
] AS arbre_code,
ARRAY[
CASE
WHEN v_source.oid LIKE 'LS%' THEN t_classes.texte
WHEN v_source.is_cti = '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN 'Listes CTI'
WHEN v_source.is_cti <> '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN 'Listes Etablissement'
ELSE 'Valeurs' END,
CASE
WHEN v_source.oid LIKE 'LS%' THEN t_classes_sections.texte
ELSE v_source.texte END
] AS arbre_texte
FROM compta.v_sections_analytiques_c_1 v_source
LEFT JOIN compta.t_classes_sections ON v_source.oid LIKE 'LS%' AND
t_classes_sections.oid::text = substr(v_source.oid,5)
LEFT JOIN compta.t_classes ON t_classes.oid = t_classes_sections.classe_id
LEFT JOIN compta.t_listes_tables t_listes_tables_classes ON t_classes.table_id = t_listes_tables_classes.oid
LEFT JOIN compta.t_listes ON (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') AND
t_listes.oid::text = substr(v_source.oid,3) AND
t_listes.code <> ''
LEFT JOIN compta.t_sections_analytiques t_source ON v_source.oid LIKE 'SA%' AND t_source.oid = substr(v_source.oid,3)
WHERE v_source.oid NOT LIKE 'LC%' AND
(v_source.oid NOT LIKE 'LS%' OR substr(v_source.oid,5) <> '0') AND
v_source.oid <> '-1'
;
-- Sections analytiques
INSERT INTO w_indicateur_condition
SELECT
'CTI_SECANA2#' || v_source.oid::text AS code,
COALESCE(t_classes.texte || '. ' || t_classes_sections.texte,'Section (2). ' || v_source.texte::text) AS texte,
v_source.texte AS texte_court,
'section_analytique_2_id'::text AS column_name,
''::text AS rule,
v_source.oid::text AS value,
'SECTION_ANALYTIQUE_2_C='||v_source.oid AS view_select_rule,
ARRAY[
CASE
WHEN v_source.oid LIKE 'LS%' THEN '1-Classe' || substr(v_source.oid,3,2)
WHEN v_source.is_cti = '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN '2-Liste CTI'
WHEN v_source.is_cti <> '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN '3-Liste CTI'
ELSE '9' END,
CASE
WHEN v_source.oid LIKE 'LS%' THEN 'LS#'||t_listes_tables_classes.code||':'||CASE WHEN t_classes.code <> '' THEN t_classes.code ELSE '*CLS'||to_char(t_classes.sequence,'FM00') END||':'||t_classes_sections.code
WHEN v_source.oid LIKE 'LI%' THEN COALESCE('LI#'||t_listes.code,v_source.oid)
WHEN v_source.oid LIKE 'SL%' THEN COALESCE('SL#'||t_listes.code,v_source.oid)
WHEN v_source.oid LIKE 'SA%' THEN COALESCE('SA#'||t_source.code,v_source.oid)
ELSE v_source.oid END
] AS arbre_code,
ARRAY[
CASE
WHEN v_source.oid LIKE 'LS%' THEN t_classes.texte
WHEN v_source.is_cti = '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN 'Listes CTI'
WHEN v_source.is_cti <> '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN 'Listes Etablissement'
ELSE 'Valeurs' END,
CASE
WHEN v_source.oid LIKE 'LS%' THEN t_classes_sections.texte
ELSE v_source.texte END
] AS arbre_texte
FROM compta.v_sections_analytiques_2_c_1 v_source
LEFT JOIN compta.t_classes_sections ON v_source.oid LIKE 'LS%' AND
t_classes_sections.oid::text = substr(v_source.oid,5)
LEFT JOIN compta.t_classes ON t_classes.oid = t_classes_sections.classe_id
LEFT JOIN compta.t_listes_tables t_listes_tables_classes ON t_classes.table_id = t_listes_tables_classes.oid
LEFT JOIN compta.t_listes ON (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') AND
t_listes.oid::text = substr(v_source.oid,3) AND
t_listes.code <> ''
LEFT JOIN compta.t_sections_analytiques t_source ON v_source.oid LIKE 'SA%' AND t_source.oid = substr(v_source.oid,3)
WHERE v_source.oid NOT LIKE 'LC%' AND
(v_source.oid NOT LIKE 'LS%' OR substr(v_source.oid,5) <> '0') AND
v_source.oid <> '-1'
;
-- Sections analytiques
INSERT INTO w_indicateur_condition
SELECT
'CTI_SECANA3#' || v_source.oid::text AS code,
COALESCE(t_classes.texte || '. ' || t_classes_sections.texte,'Section (3). ' || v_source.texte::text) AS texte,
v_source.texte AS texte_court,
'section_analytique_3_id'::text AS column_name,
''::text AS rule,
v_source.oid::text AS value,
'SECTION_ANALYTIQUE_3_C='||v_source.oid AS view_select_rule,
ARRAY[
CASE
WHEN v_source.oid LIKE 'LS%' THEN '1-Classe' || substr(v_source.oid,3,2)
WHEN v_source.is_cti = '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN '2-Liste CTI'
WHEN v_source.is_cti <> '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN '3-Liste CTI'
ELSE '9' END,
CASE
WHEN v_source.oid LIKE 'LS%' THEN 'LS#'||t_listes_tables_classes.code||':'||CASE WHEN t_classes.code <> '' THEN t_classes.code ELSE '*CLS'||to_char(t_classes.sequence,'FM00') END||':'||t_classes_sections.code
WHEN v_source.oid LIKE 'LI%' THEN COALESCE('LI#'||t_listes.code,v_source.oid)
WHEN v_source.oid LIKE 'SL%' THEN COALESCE('SL#'||t_listes.code,v_source.oid)
WHEN v_source.oid LIKE 'SA%' THEN COALESCE('SA#'||t_source.code,v_source.oid)
ELSE v_source.oid END
] AS arbre_code,
ARRAY[
CASE
WHEN v_source.oid LIKE 'LS%' THEN t_classes.texte
WHEN v_source.is_cti = '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN 'Listes CTI'
WHEN v_source.is_cti <> '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN 'Listes Etablissement'
ELSE 'Valeurs' END,
CASE
WHEN v_source.oid LIKE 'LS%' THEN t_classes_sections.texte
ELSE v_source.texte END
] AS arbre_texte
FROM compta.v_sections_analytiques_3_c_1 v_source
LEFT JOIN compta.t_classes_sections ON v_source.oid LIKE 'LS%' AND
t_classes_sections.oid::text = substr(v_source.oid,5)
LEFT JOIN compta.t_classes ON t_classes.oid = t_classes_sections.classe_id
LEFT JOIN compta.t_listes_tables t_listes_tables_classes ON t_classes.table_id = t_listes_tables_classes.oid
LEFT JOIN compta.t_listes ON (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') AND
t_listes.oid::text = substr(v_source.oid,3) AND
t_listes.code <> ''
LEFT JOIN compta.t_sections_analytiques t_source ON v_source.oid LIKE 'SA%' AND t_source.oid = substr(v_source.oid,3)
WHERE v_source.oid NOT LIKE 'LC%' AND
(v_source.oid NOT LIKE 'SA%' OR (SELECT count(*) FROM compta.v_sections_analytiques_3_c_1) < 1000) AND
(v_source.oid NOT LIKE 'LS%' OR substr(v_source.oid,5) <> '0') AND
v_source.oid <> '-1'
;
-- Sections analytiques
INSERT INTO w_indicateur_condition
SELECT
'CTI_SECANA4#' || v_source.oid::text AS code,
COALESCE(t_classes.texte || '. ' || t_classes_sections.texte,'Section (4). ' || v_source.texte::text) AS texte,
v_source.texte AS texte_court,
'section_analytique_4_id'::text AS column_name,
''::text AS rule,
v_source.oid::text AS value,
'SECTION_ANALYTIQUE_4_C='||v_source.oid AS view_select_rule,
ARRAY[
CASE
WHEN v_source.oid LIKE 'LS%' THEN '1-Classe' || substr(v_source.oid,3,2)
WHEN v_source.is_cti = '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN '2-Liste CTI'
WHEN v_source.is_cti <> '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN '3-Liste CTI'
ELSE '9' END,
CASE
WHEN v_source.oid LIKE 'LS%' THEN 'LS#'||t_listes_tables_classes.code||':'||CASE WHEN t_classes.code <> '' THEN t_classes.code ELSE '*CLS'||to_char(t_classes.sequence,'FM00') END||':'||t_classes_sections.code
WHEN v_source.oid LIKE 'LI%' THEN COALESCE('LI#'||t_listes.code,v_source.oid)
WHEN v_source.oid LIKE 'SL%' THEN COALESCE('SL#'||t_listes.code,v_source.oid)
WHEN v_source.oid LIKE 'SA%' THEN COALESCE('SA#'||t_source.code,v_source.oid)
ELSE v_source.oid END
] AS arbre_code,
ARRAY[
CASE
WHEN v_source.oid LIKE 'LS%' THEN t_classes.texte
WHEN v_source.is_cti = '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN 'Listes CTI'
WHEN v_source.is_cti <> '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN 'Listes Etablissement'
ELSE 'Valeurs' END,
CASE
WHEN v_source.oid LIKE 'LS%' THEN t_classes_sections.texte
ELSE v_source.texte END
] AS arbre_texte
FROM compta.v_sections_analytiques_4_c_1 v_source
LEFT JOIN compta.t_classes_sections ON v_source.oid LIKE 'LS%' AND
t_classes_sections.oid::text = substr(v_source.oid,5)
LEFT JOIN compta.t_classes ON t_classes.oid = t_classes_sections.classe_id
LEFT JOIN compta.t_listes_tables t_listes_tables_classes ON t_classes.table_id = t_listes_tables_classes.oid
LEFT JOIN compta.t_listes ON (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') AND
t_listes.oid::text = substr(v_source.oid,3) AND
t_listes.code <> ''
LEFT JOIN compta.t_sections_analytiques t_source ON v_source.oid LIKE 'SA%' AND t_source.oid = substr(v_source.oid,3)
WHERE v_source.oid NOT LIKE 'LC%' AND
(v_source.oid NOT LIKE 'LS%' OR substr(v_source.oid,5) <> '0') AND
v_source.oid <> '-1'
;
-- Sections analytiques
INSERT INTO w_indicateur_condition
SELECT
'CTI_SECANA5#' || v_source.oid::text AS code,
COALESCE(t_classes.texte || '. ' || t_classes_sections.texte,'Section (5). ' || v_source.texte::text) AS texte,
v_source.texte AS texte_court,
'section_analytique_5_id'::text AS column_name,
''::text AS rule,
v_source.oid::text AS value,
'SECTION_ANALYTIQUE_5_C='||v_source.oid AS view_select_rule,
ARRAY[
CASE
WHEN v_source.oid LIKE 'LS%' THEN '1-Classe' || substr(v_source.oid,3,2)
WHEN v_source.is_cti = '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN '2-Liste CTI'
WHEN v_source.is_cti <> '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN '3-Liste CTI'
ELSE '9' END,
CASE
WHEN v_source.oid LIKE 'LS%' THEN 'LS#'||t_listes_tables_classes.code||':'||CASE WHEN t_classes.code <> '' THEN t_classes.code ELSE '*CLS'||to_char(t_classes.sequence,'FM00') END||':'||t_classes_sections.code
WHEN v_source.oid LIKE 'LI%' THEN COALESCE('LI#'||t_listes.code,v_source.oid)
WHEN v_source.oid LIKE 'SL%' THEN COALESCE('SL#'||t_listes.code,v_source.oid)
WHEN v_source.oid LIKE 'SA%' THEN COALESCE('SA#'||t_source.code,v_source.oid)
ELSE v_source.oid END
] AS arbre_code,
ARRAY[
CASE
WHEN v_source.oid LIKE 'LS%' THEN t_classes.texte
WHEN v_source.is_cti = '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN 'Listes CTI'
WHEN v_source.is_cti <> '1' AND (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') THEN 'Listes Etablissement'
ELSE 'Valeurs' END,
CASE
WHEN v_source.oid LIKE 'LS%' THEN t_classes_sections.texte
ELSE v_source.texte END
] AS arbre_texte
FROM compta.v_sections_analytiques_5_c_1 v_source
LEFT JOIN compta.t_classes_sections ON v_source.oid LIKE 'LS%' AND
t_classes_sections.oid::text = substr(v_source.oid,5)
LEFT JOIN compta.t_classes ON t_classes.oid = t_classes_sections.classe_id
LEFT JOIN compta.t_listes_tables t_listes_tables_classes ON t_classes.table_id = t_listes_tables_classes.oid
LEFT JOIN compta.t_listes ON (v_source.oid LIKE 'LI%' OR v_source.oid LIKE 'SL%') AND
t_listes.oid::text = substr(v_source.oid,3) AND
t_listes.code <> ''
LEFT JOIN compta.t_sections_analytiques t_source ON v_source.oid LIKE 'SA%' AND t_source.oid = substr(v_source.oid,3)
WHERE v_source.oid NOT LIKE 'LC%' AND
(v_source.oid NOT LIKE 'LS%' OR substr(v_source.oid,5) <> '0') AND
v_source.oid <> '-1'
;
-- Ne pas garder les listes vides
-- DELETE FROM w_indicateur_condition
-- WHERE value LIKE 'LI%' AND
-- substr(value,3) NOT IN (SELECT liste_id::text FROM compta.t_listes_contenu)
-- ;
INSERT INTO compta.t_indicateur_condition(code, texte,texte_court,column_name,rule,value,view_select_rule, arbre_code, arbre_texte)
SELECT code, texte,texte_court,column_name,rule,value,view_select_rule, arbre_code, arbre_texte
FROM w_indicateur_condition
WHERE code NOT IN (SELECT code FROM compta.t_indicateur_condition WHERE code IS NOT NULL)
;
UPDATE compta.t_indicateur_condition SET
texte = w_indicateur_condition.texte,
texte_court = w_indicateur_condition.texte_court,
column_name = w_indicateur_condition.column_name,
rule = w_indicateur_condition.rule,
value = w_indicateur_condition.value,
view_select_rule = w_indicateur_condition.view_select_rule,
arbre_code = w_indicateur_condition.arbre_code,
arbre_texte = w_indicateur_condition.arbre_texte
FROM w_indicateur_condition
WHERE w_indicateur_condition.code = t_indicateur_condition.code AND
(
t_indicateur_condition.texte IS DISTINCT FROM w_indicateur_condition.texte OR
t_indicateur_condition.texte_court IS DISTINCT FROM w_indicateur_condition.texte_court OR
t_indicateur_condition.column_name IS DISTINCT FROM w_indicateur_condition.column_name OR
t_indicateur_condition.rule IS DISTINCT FROM w_indicateur_condition.rule OR
t_indicateur_condition.value IS DISTINCT FROM w_indicateur_condition.value OR
t_indicateur_condition.view_select_rule IS DISTINCT FROM w_indicateur_condition.view_select_rule OR
t_indicateur_condition.arbre_code IS DISTINCT FROM w_indicateur_condition.arbre_code OR
t_indicateur_condition.arbre_texte IS DISTINCT FROM w_indicateur_condition.arbre_texte
)
;
DELETE FROM compta.t_indicateur_condition
WHERE code LIKE 'CTI%' AND
code NOT IN (SELECT code FROM w_indicateur_condition)
;
UPDATE compta.t_indicateur_condition SET
column_texte = CASE column_name
WHEN 'x' THEN 'x'
ELSE replace(Upper(substr(split_part(column_name,'_id',1),1,1)) || substr(split_part(column_name,'_id',1),2),'_',' ') END
WHERE
column_texte IS DISTINCT FROM
CASE column_name
WHEN 'x' THEN 'x'
ELSE replace(Upper(substr(split_part(column_name,'_id',1),1,1)) || substr(split_part(column_name,'_id',1),2),'_',' ') END
;
UPDATE compta.t_indicateur_condition
SET external_code = split_part(code,'#',1)||'#'||arbre_code[2]
WHERE external_code IS DISTINCT FROM (split_part(code,'#',1)||'#'||arbre_code[2])
;
DROP TABLE IF EXISTS w_indicateur_condition_table;
CREATE TEMP TABLE w_indicateur_condition_table AS
SELECT t_indicateur_condition.oid AS indicateur_condition_id,
''::text As table_name,
t_indicateur_condition.column_name || ' ' ||
CASE
WHEN t_indicateur_condition.value LIKE 'LS%' THEN '= ANY(ARRAY'
WHEN t_indicateur_condition.value LIKE 'LI%' THEN '= ANY(ARRAY'
WHEN t_indicateur_condition.value LIKE 'SL%' THEN '<> ALL(ARRAY'
WHEN t_indicateur_condition.value LIKE 'DT%' THEN '='
ELSE '='
END || ' ' ||
CASE
WHEN t_indicateur_condition.value LIKE 'LS%' THEN
'(SELECT to_id FROM compta.t_classes_sections_elements WHERE section_id = ' || substr(value,5) || ')'
WHEN t_indicateur_condition.value LIKE 'LI%' THEN
'(SELECT to_id FROM compta.t_listes_contenu WHERE liste_id = ' || substr(value,3) || ')'
WHEN t_indicateur_condition.value LIKE 'SL%' THEN
'(SELECT to_id FROM compta.t_listes_contenu WHERE liste_id = ' || substr(value,3) || ')'
WHEN t_indicateur_condition.value LIKE 'DT%' THEN
substr(value,3)
ELSE substr(value,3)
END || ' ' ||
CASE
WHEN t_indicateur_condition.value LIKE 'LS%' THEN ')'
WHEN t_indicateur_condition.value LIKE 'LI%' THEN ')'
WHEN t_indicateur_condition.value LIKE 'SL%' THEN ')'
ELSE ''
END AS check_where
FROM compta.t_indicateur_condition
WHERE t_indicateur_condition.code LIKE 'CTI%'
;
INSERT INTO compta.t_indicateur_condition_table(indicateur_condition_id, table_name, check_where)
SELECT indicateur_condition_id, table_name, check_where
FROM w_indicateur_condition_table
WHERE (indicateur_condition_id || '-' || table_name) NOT IN
(SELECT indicateur_condition_id || '-' || table_name FROM compta.t_indicateur_condition_table WHERE table_name IS NOT NULL)
;
UPDATE compta.t_indicateur_condition_table SET
check_where = w_indicateur_condition_table.check_where
FROM w_indicateur_condition_table
WHERE t_indicateur_condition_table.indicateur_condition_id = w_indicateur_condition_table.indicateur_condition_id AND
t_indicateur_condition_table.table_name = w_indicateur_condition_table.table_name AND
(
t_indicateur_condition_table.check_where IS DISTINCT FROM w_indicateur_condition_table.check_where
)
;
DELETE FROM compta.t_indicateur_condition_table
USING compta.t_indicateur_condition
WHERE t_indicateur_condition.oid = t_indicateur_condition_table.indicateur_condition_id AND
t_indicateur_condition.code LIKE 'CTI%' AND
(indicateur_condition_id || '-' || table_name) NOT IN
(SELECT indicateur_condition_id || '-' || table_name FROM w_indicateur_condition_table WHERE table_name IS NOT NULL)
;
RETURN 'OK';
END;