-- 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.oid = 0 THEN t_classes.oid ELSE 1 END AS oid,
    	t_classes.code,
    	t_classes.texte,
    	t_classes.is_cti,
    	t_classes.sequence, 
    	t_listes_tables.code as table_code,
        t_classes.contenu_by_code,
        t_classes.contenu_non_replicable_ailleurs
    FROM 
    	activite.t_classes, 
    	activite.t_listes_tables 
    WHERE 1=1
    	AND (is_cti = '1'  OR t_classes.code ilike 'CTI_%')
    	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,
    contenu_by_code,
    contenu_non_replicable_ailleurs
)
VALUES
(1, 'CTIGFA1', 'Formes d''activité CTI niveau 1', '1', 1, 'FORMEACTIVITE', '0', '0'),
(1, 'CTIGFA2', 'Formes d''activité CTI niveau 2', '1', 2, 'FORMEACTIVITE', '0', '0'),
(1, 'CTIGFA3', 'Champ satisfaction', '1', 3, 'FORMEACTIVITE', '0', '0'),
(1, 'CTI_DURSEJ', 'Tranches séjours CTI', '1', 9, 'DURSEJ', '0', '0'),
(1, 'CTI_ETA_1', 'Etages CTI', '0', 4, 'ETAGE', '0', '1'),
(1, 'CTI_GHMDA', 'Domaines d''activité ATIH', '1', 9, 'GHM', '0', '0'),
(1, 'CTI_GHMGA', 'Groupes d''activité ATIH', '1', 7, 'GHM', '0', '0'),
(1, 'CTI_GHMGP', 'Groupes de planification ATIH', '1', 8, 'GHM', '0', '0'),
(1, 'CTI_MEDLIBSAL', 'Conditions d''exercice', '1', 1, 'MEDECIN', '0', '1'),
(1, 'CTI_PRC_1', 'Prestations CTI', '0', 4, 'PRESTA_C', '0', '0'),
(1, 'CTI_PREDCA', 'Décomposition CA (CTI)', '1', 9, 'PRESTA_C', '0', '0'),
(1, 'CTI_RUB_1', 'Rubriques CTI', '0', 4, 'RUBRIQUE', '1', '1'),
(1, 'CTI_RUB_2', 'Rubriques détaillées CTI.', '0', 31, 'RUBRIQUE', '0', '1'),
(1, 'CTI_SER_1', 'Services CTI', '0', 4, 'SERVICE_F', '0', '1'),
(1, 'CTI_TAGE', 'Tranches d''âge', '1', 9, 'AGE', '0', '0'),
(1, 'CTI_UF_1', 'Unités Fonctionnelles CTI', '0', 4, 'UF', '0', '1'),
(1, 'ETATSEJN1', 'Etat de séjour CTI niveau 1', '1', 11, 'ETATSEJOUR', '0', '0'),
(1, 'ETATSEJN2', 'Etat de séjour CTI niveau 2', '1', 10, 'ETATSEJOUR', '0', '0')
;

-- 3/3 : Màj de la table iCTI
UPDATE activite.t_classes SET
	code = w_dbsetup.code,       
	texte = w_dbsetup.texte,       
	table_id = t_listes_tables.oid,      
	is_cti = w_dbsetup.is_cti,
    contenu_by_code = w_dbsetup.contenu_by_code,
    contenu_non_replicable_ailleurs = w_dbsetup.contenu_non_replicable_ailleurs
FROM 
	w_dbsetup,
	activite.t_listes_tables     
WHERE 1=1
	AND w_dbsetup.table_code = t_listes_tables.code 
	AND t_classes.sequence = w_dbsetup.sequence 
	AND t_classes.table_id = t_listes_tables.oid
    AND (1!=1
        OR t_classes.code IS DISTINCT FROM w_dbsetup.code     
        OR t_classes.texte IS DISTINCT FROM w_dbsetup.texte
        OR t_classes.table_id IS DISTINCT FROM t_listes_tables.oid
        OR t_classes.is_cti IS DISTINCT FROM w_dbsetup.is_cti
        OR t_classes.contenu_by_code IS DISTINCT FROM w_dbsetup.contenu_by_code
        OR t_classes.contenu_non_replicable_ailleurs IS DISTINCT FROM w_dbsetup.contenu_non_replicable_ailleurs)
;

INSERT INTO activite.t_classes(code, texte, table_id, is_cti, sequence, contenu_by_code, contenu_non_replicable_ailleurs)
    SELECT 
        w_dbsetup.code, 
        w_dbsetup.texte, 
        t_listes_tables.oid, 
        w_dbsetup.is_cti, 
        w_dbsetup.sequence,
        w_dbsetup.contenu_by_code,
        w_dbsetup.contenu_non_replicable_ailleurs
    FROM 
        w_dbsetup, 
        activite.t_listes_tables       
    WHERE 1=1
        AND 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 activite.t_classes)
        AND w_dbsetup.texte NOT LIKE '*SUPPRIME%'
;