-- 1/3 : Création de la table temporaire
DROP TABLE IF EXISTS w_dbsetup
;

CREATE TEMP TABLE w_dbsetup AS
    SELECT 
    	t_classes.oid,
    	t_classes.code,
    	t_classes.texte,
    	t_classes.is_cti,
    	t_classes.sequence, 
    	CASE WHEN NOT (t_classes.sequence = 30 AND t_listes_tables.code = (SELECT valeur FROM eco.t_divers WHERE code = 'CLE_REPARTITION')) THEN t_listes_tables.code ELSE 'TYA' END as table_code 
    FROM 
    	eco.t_classes, 
    	eco.t_listes_tables 
    WHERE 1=1
    	AND (is_cti = '1'  OR (t_classes.code ilike 'CTI_%' AND t_classes.code NOT IN ('CTI_CPTLETBUD','CTI_CPTVOTE','CTI_CPTRCV','CTI_UFCR','CTI_UFUM','CTI_UFSERS','CTI_UFSITE')))
    	AND table_id = t_listes_tables.oid
    ORDER BY t_classes.code LIMIT 0
;

-- 2/3 : Peuplement de la table temporaire
INSERT INTO w_dbsetup(
    oid,
    code,
    texte,
    is_cti,
    sequence,
    table_code
)
VALUES
(1, 'CTI_CLE_REP', 'Clef de répartition CTI', '0', 30, 'TYA'),
(1, 'CTI_ESS_ART80', 'Lstes des articles répartis représentant 80% des stocks en montant', '1', 1, 'ART'),
(1, 'CTI_TYPMVT', 'Types de mouvements CTI', '0', 1, 'TYM')
;

-- 3/3 : Màj de la table iCTI
UPDATE eco.t_classes SET
	code = w_dbsetup.code,       
	texte = w_dbsetup.texte,       
	table_id = t_listes_tables.oid,      
	is_cti = w_dbsetup.is_cti     
FROM 
	w_dbsetup,
	eco.t_listes_tables     
WHERE 
	w_dbsetup.table_code = t_listes_tables.code 
	AND t_classes.sequence = w_dbsetup.sequence 
	AND t_classes.table_id = t_listes_tables.oid ;    


INSERT INTO eco.t_classes(code, texte, table_id, is_cti, sequence)     
SELECT 
	w_dbsetup.code, 
	w_dbsetup.texte, 
	t_listes_tables.oid, 
	w_dbsetup.is_cti, 
	w_dbsetup.sequence      
FROM 
	w_dbsetup, 
	eco.t_listes_tables       
WHERE 
	w_dbsetup.table_code = t_listes_tables.code 
	AND t_listes_tables.oid::text || '-' || w_dbsetup.sequence::text NOT IN (SELECT table_id::text || '-' || sequence::text FROM eco.t_classes) AND w_dbsetup.texte NOT LIKE '*SUPPRIME%'
	AND NOT (
		-- pour la classe de cle de rÃ©partition
		w_dbsetup.code = 'CTI_CLE_REP'
		-- la valeur de la cle est initialisÃ©e
		AND (SELECT code FROM eco.t_classes WHERE code = 'CTI_CLE_REP') IS NOT NULL 
	)