-- 1/3 : Création de la table temporaire DROP TABLE IF EXISTS w_dbsetup ; CREATE TEMP TABLE w_dbsetup AS SELECT CASE WHEN t_classes_sections.oid = 0 THEN t_classes_sections.oid ELSE 1 END AS oid, t_listes_tables.code as table_code, t_classes.code AS classe_code, t_classes.sequence as classe_sequence, t_classes_sections.code, t_classes_sections.texte, t_classes_sections.condition, t_classes_sections.exclude_code, t_classes_sections.include_code, 0::bigint AS classe_id, 0::bigint AS table_id FROM compta.t_classes_sections JOIN compta.t_classes ON t_classes_sections.classe_id = t_classes.oid JOIN compta.t_listes_tables ON table_id = t_listes_tables.oid WHERE t_classes.code <> '' AND (t_classes.is_cti = '1' OR t_classes.code LIKE 'CTI_%') AND 1=1 ORDER BY 2,3,5 LIMIT 0 ; -- 2/3 : Peuplement de la table temporaire INSERT INTO w_dbsetup( oid, table_code, classe_code, classe_sequence, code, texte, condition, exclude_code, include_code, classe_id, table_id ) VALUES (1, 'CPT', 'CTI_CONTRIBUTION_BLOC_OPERATOIRE', 42, 'S1', 'Consommable', '', '', '', 0, 0), (1, 'CPT', 'CTI_CONTRIBUTION_BLOC_OPERATOIRE', 42, 'S2', 'Structure', '', '', '', 0, 0), (1, 'CPT', 'CTI_CONTRIBUTION_BLOC_OPERATOIRE', 42, 'S3', 'Energie', '', '', '', 0, 0) ; -- 3/3 : Màj de la table iCTI UPDATE w_dbsetup SET table_id = t_listes_tables.oid FROM compta.t_listes_tables WHERE table_code = t_listes_tables.code ; UPDATE w_dbsetup SET classe_id = t_classes.oid FROM compta.t_classes WHERE w_dbsetup.classe_code = t_classes.code AND w_dbsetup.table_id = t_classes.table_id ; DELETE FROM compta.t_classes_sections USING ( SELECT t_classes_sections.classe_id, t_classes_sections.oid FROM compta.t_classes_sections LEFT JOIN w_dbsetup ON w_dbsetup.classe_id = t_classes_sections.classe_id AND w_dbsetup.code = t_classes_sections.code WHERE w_dbsetup.oid IS NULL AND t_classes_sections.classe_id IN (SELECT classe_id FROM w_dbsetup) AND t_classes_sections.oid NOT IN (SELECT section_id FROM compta.t_classes_sections_elements) ) subview WHERE subview.classe_id = t_classes_sections.classe_id AND subview.oid = t_classes_sections.oid ; UPDATE compta.t_classes_sections SET texte = w_dbsetup.texte, condition = w_dbsetup.condition, exclude_code = w_dbsetup.exclude_code, include_code = w_dbsetup.include_code FROM w_dbsetup WHERE w_dbsetup.classe_id = t_classes_sections.classe_id AND w_dbsetup.code = t_classes_sections.code AND ( t_classes_sections.texte IS DISTINCT FROM w_dbsetup.texte OR t_classes_sections.condition IS DISTINCT FROM w_dbsetup.condition OR t_classes_sections.exclude_code IS DISTINCT FROM w_dbsetup.exclude_code OR t_classes_sections.include_code IS DISTINCT FROM w_dbsetup.include_code ) ; INSERT INTO compta.t_classes_sections(code, texte, classe_id, condition, exclude_code, include_code) SELECT w_dbsetup.code, w_dbsetup.texte, w_dbsetup.classe_id, w_dbsetup.condition, w_dbsetup.exclude_code, w_dbsetup.include_code FROM w_dbsetup WHERE w_dbsetup.classe_id > 0 AND (w_dbsetup.code||'@'||w_dbsetup.classe_id::text) NOT IN (SELECT t_classes_sections.code||'@'||t_classes_sections.classe_id FROM compta.t_classes_sections) ;