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.
 
 
 

123 lines
7.0 KiB

return: text
lang: plpgsql
src: |
DECLARE --select * from eco.p_stock order by date_fin desc
result TEXT;
BEGIN
IF ((SELECT valeur FROM eco.t_divers WHERE code = 'CLE_REPARTITION') !=
(
SELECT
t_listes_tables.code
FROM
eco.t_classes
JOIN eco.t_listes_tables ON table_id = t_listes_tables.oid
WHERE t_classes.code = 'CTI_CLE_REP'))
THEN
RAISE NOTICE '%','Valeur changé - Mise à jour';
-- enregistrement des sections CTI
DROP TABLE IF EXISTS w_sections;
CREATE TEMP TABLE w_sections AS
SELECT t_classes_sections.code, t_classes_sections.texte
FROM eco.t_classes
JOIN eco.t_classes_sections ON classe_id = t_classes.oid
WHERE t_classes.code = 'CTI_CLE_REP'
;
-- enregistrement des conditions de rapport CTI liées à la clef de répartition
DROP TABLE IF EXISTS w_conditions;
CREATE TEMP TABLE w_conditions AS
SELECT t_rapports.oid, ARRAY[
section_0.code,
section_1.code,
section_2.code,
section_3.code,
section_4.code] AS code_section FROM eco.t_rapports
LEFT JOIN eco.t_indicateur_condition condition_0 ON t_rapports.rapport_indicateur_condition_id[1] = condition_0.oid
LEFT JOIN eco.t_classes_sections section_0 ON section_0.oid = right(split_part(condition_0.code,'#',2),-4) AND left(split_part(condition_0.code,'#',2),4) = 'LS30'
LEFT JOIN eco.t_indicateur_condition condition_1 ON t_rapports.rapport_indicateur_condition_id[2] = condition_1.oid
LEFT JOIN eco.t_classes_sections section_1 ON section_1.oid = right(split_part(condition_1.code,'#',2),-4) AND left(split_part(condition_1.code,'#',2),4) = 'LS30'
LEFT JOIN eco.t_indicateur_condition condition_2 ON t_rapports.rapport_indicateur_condition_id[3] = condition_2.oid
LEFT JOIN eco.t_classes_sections section_2 ON section_2.oid = right(split_part(condition_2.code,'#',2),-4) AND left(split_part(condition_2.code,'#',2),4) = 'LS30'
LEFT JOIN eco.t_indicateur_condition condition_3 ON t_rapports.rapport_indicateur_condition_id[4] = condition_3.oid
LEFT JOIN eco.t_classes_sections section_3 ON section_3.oid = right(split_part(condition_3.code,'#',2),-4) AND left(split_part(condition_3.code,'#',2),4) = 'LS30'
LEFT JOIN eco.t_indicateur_condition condition_4 ON t_rapports.rapport_indicateur_condition_id[5] = condition_4.oid
LEFT JOIN eco.t_classes_sections section_4 ON section_4.oid = right(split_part(condition_4.code,'#',2),-4) AND left(split_part(condition_4.code,'#',2),4) = 'LS30'
WHERE t_rapports.code LIKE 'CTI_ESS%'
;
-- effacement de la classe CTI_CLE_REP
DELETE FROM eco.t_classes_sections_elements
WHERE section_id IN (
SELECT t_classes_sections.oid
FROM eco.t_classes
JOIN eco.t_classes_sections ON classe_id = t_classes.oid
WHERE t_classes.code = 'CTI_CLE_REP'
)
;
DELETE FROM eco.t_classes_sections
WHERE oid IN (
SELECT t_classes_sections.oid
FROM eco.t_classes
JOIN eco.t_classes_sections ON classe_id = t_classes.oid
WHERE t_classes.code = 'CTI_CLE_REP'
)
;
DELETE FROM eco.t_classes
WHERE code = 'CTI_CLE_REP'
;
-- création de la classe CTI_CLE_REP
INSERT INTO eco.t_classes(code, texte, table_id, is_cti, sequence)
SELECT
'CTI_CLE_REP',
'Clef de répartition CTI',
oid,
0,
30
FROM
eco.t_listes_tables
WHERE
code = (SELECT valeur FROM eco.t_divers WHERE code = 'CLE_REPARTITION')
;
INSERT INTO eco.t_classes_sections (code, texte, classe_id)
SELECT w_sections.code, w_sections.texte, oid
FROM w_sections LEFT JOIN eco.t_classes ON t_classes.code = 'CTI_CLE_REP'
;
PERFORM eco.cti_reorganize_indicateur_condition();
-- ajustement des condition de rapports essentiels CTI
UPDATE eco.t_rapports
SET
rapport_indicateur_condition_id = ARRAY[condition_0.oid,condition_1.oid,condition_2.oid,condition_3.oid,condition_4.oid]
FROM
w_conditions
JOIN eco.t_listes_tables ON t_listes_tables.code = (SELECT valeur FROM eco.t_divers WHERE code = 'CLE_REPARTITION')
JOIN eco.t_classes ON table_id = t_listes_tables.oid AND sequence = 30
LEFT JOIN eco.t_classes_sections section_0 ON t_classes.oid = section_0.classe_id AND section_0.code = code_section[1]
LEFT JOIN eco.t_indicateur_condition condition_0 ON regexp_replace(regexp_replace(regexp_replace(regexp_replace(t_listes_tables.name,'^t_',''),'x',''),'s_','','g'),'s$','') || 'id' = regexp_replace(condition_0.column_name,'_','','g')
AND t_classes.sequence = substring(split_part(condition_0.code,'#',2),3,2) AND left(split_part(condition_0.code,'#',2),2) = 'LS'
AND section_0.oid = right(split_part(condition_0.code,'#',2),-4)
LEFT JOIN eco.t_classes_sections section_1 ON t_classes.oid = section_1.classe_id AND section_1.code = code_section[2]
LEFT JOIN eco.t_indicateur_condition condition_1 ON regexp_replace(regexp_replace(regexp_replace(regexp_replace(t_listes_tables.name,'^t_',''),'x',''),'s_','','g'),'s$','') || 'id' = regexp_replace(condition_1.column_name,'_','','g')
AND t_classes.sequence = substring(split_part(condition_1.code,'#',2),3,2) AND left(split_part(condition_1.code,'#',2),2) = 'LS'
AND section_1.oid = right(split_part(condition_1.code,'#',2),-4)
LEFT JOIN eco.t_classes_sections section_2 ON t_classes.oid = section_2.classe_id AND section_2.code = code_section[3]
LEFT JOIN eco.t_indicateur_condition condition_2 ON regexp_replace(regexp_replace(regexp_replace(regexp_replace(t_listes_tables.name,'^t_',''),'x',''),'s_','','g'),'s$','') || 'id' = regexp_replace(condition_2.column_name,'_','','g')
AND t_classes.sequence = substring(split_part(condition_2.code,'#',2),3,2) AND left(split_part(condition_2.code,'#',2),2) = 'LS'
AND section_2.oid = right(split_part(condition_2.code,'#',2),-4)
LEFT JOIN eco.t_classes_sections section_3 ON t_classes.oid = section_3.classe_id AND section_3.code = code_section[4]
LEFT JOIN eco.t_indicateur_condition condition_3 ON regexp_replace(regexp_replace(regexp_replace(regexp_replace(t_listes_tables.name,'^t_',''),'x',''),'s_','','g'),'s$','') || 'id' = regexp_replace(condition_3.column_name,'_','','g')
AND t_classes.sequence = substring(split_part(condition_3.code,'#',2),3,2) AND left(split_part(condition_3.code,'#',2),2) = 'LS'
AND section_3.oid = right(split_part(condition_3.code,'#',2),-4)
LEFT JOIN eco.t_classes_sections section_4 ON t_classes.oid = section_4.classe_id AND section_4.code = code_section[5]
LEFT JOIN eco.t_indicateur_condition condition_4 ON regexp_replace(regexp_replace(regexp_replace(regexp_replace(t_listes_tables.name,'^t_',''),'x',''),'s_','','g'),'s$','') || 'id' = regexp_replace(condition_4.column_name,'_','','g')
AND t_classes.sequence = substring(split_part(condition_4.code,'#',2),3,2) AND left(split_part(condition_4.code,'#',2),2) = 'LS'
AND section_4.oid = right(split_part(condition_4.code,'#',2),-4)
WHERE t_rapports.oid = w_conditions.oid
;
END IF;
RETURN 'OK';
END;