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

CREATE TEMP TABLE w_dbsetup AS
    SELECT 
    	t_listes_tables.code AS table_code,
    	t_classes.code AS classe_code,
    	t_classes.texte,
    	t_classes.is_cti,
    	t_classes.contenu_by_code,
    	t_classes.contenu_non_replicable_ailleurs
    FROM rh.t_classes
    JOIN rh.t_listes_tables ON table_id = t_listes_tables.oid 
    WHERE t_classes.code <> '' AND
    	(is_cti = '1'  OR t_classes.code ilike 'CTI_%') AND is_cti = '1'
    ORDER BY 1,2 LIMIT 0
;

-- 2/3 : Peuplement de la table temporaire
INSERT INTO w_dbsetup(
    table_code,
    classe_code,
    texte,
    is_cti,
    contenu_by_code,
    contenu_non_replicable_ailleurs
)
VALUES
('AGE', 'CTI_AGE', 'Tranche d''ages Bilan Social', '1', '0', '0'),
('ANC', 'CTI_ANC', 'Tranche d''ancienneté Bilan Social', '1', '0', '0'),
('MOA', 'CTI_ARRET', 'Arrêt de travail Bilan Social', '1', '0', '0'),
('MTF', 'CTI_MFIN', 'Motif de fin Bilan Social', '1', '0', '0'),
('NAT', 'CTI_NAT', 'Nationalité Bilan Social', '1', '0', '0'),
('PSE', 'CTI_CONTRIBUTION_BLOC_OPERATOIRE', 'Services du bloc opératoire pour le calcul de la contribution', '1', '0', '0'),
('QUA', 'CTI_QUAL', 'Qualifications personnels', '1', '0', '0'),
('QUA', 'CTI_SAE_CATEGORIES_PERSONNEL', 'Catégories de personnel SAE', '1', '1', '0'),
('QUA', 'CTI_SAE_SPECIALITES_DETAILLEES_PERSONNEL', 'Spécialités détaillées du personnel SAE', '1', '0', '0'),
('QUA', 'CTI_SAE_SPECIALITES_PERSONNEL', 'Spécialités du personnel SAE', '1', '1', '0'),
('QUA', 'CTI_SAE_TYPES_PERSONNEL', 'Types du personnel SAE', '1', '1', '0'),
('RUP', 'ALM_HRS', 'ALM Détail des heures contrat, sup, abs, maintien', '1', '0', '0'),
('RUP', 'CTI_RUB', 'Rubrique Bilan Social', '1', '0', '0'),
('SER', 'CTI_SAE_GROUPES_DISCIPLINES', 'Groupes de disciplines SAE', '1', '0', '0'),
('STA', 'CTI_STATUT', 'Statuts CTI', '1', '0', '0'),
('TCN', 'CTI_TCNT', 'Type de contrat Bilan Social', '1', '0', '0'),
('TTT', 'CTI_TTT', 'Type de temps de travail Bilan Social', '1', '0', '0')
;

-- 3/3 : Màj de la table iCTI
ALTER TABLE w_dbsetup ADD COLUMN IF NOT EXISTS table_id bigint DEFAULT 0
;

UPDATE w_dbsetup
SET table_id = t_listes_tables.oid
FROM rh.t_listes_tables
WHERE t_listes_tables.code = table_code
;

ALTER TABLE w_dbsetup ADD COLUMN IF NOT EXISTS sequence integer DEFAULT 0
;

UPDATE w_dbsetup
SET sequence = t_classes.sequence
FROM rh.t_classes
WHERE t_classes.code = w_dbsetup.classe_code AND
	t_classes.table_id = w_dbsetup.table_id
;


UPDATE w_dbsetup
SET sequence = subview.sequence
FROM
(
	SELECT 
		w_dbsetup.classe_code,
		w_dbsetup.table_id,
		subview.max_sequence_by_table + row_number() OVER (PARTITION BY w_dbsetup.table_id ORDER BY classe_code) AS sequence 
	FROM w_dbsetup
	JOIN (
		SELECT 
			t_listes_tables.oid AS table_id, 
			MAX(COALESCE(t_classes.sequence, 0)) AS max_sequence_by_table
		FROM rh.t_listes_tables
		LEFT JOIN rh.t_classes ON t_classes.table_id = t_listes_tables.oid
		GROUP BY 1
	) AS subview ON w_dbsetup.table_id = subview.table_id
	WHERE w_dbsetup.sequence = 0
) AS subview
WHERE w_dbsetup.table_id = subview.table_id AND
	w_dbsetup.classe_code = subview.classe_code AND
	w_dbsetup.sequence = 0
;

UPDATE rh.t_classes SET
	texte = w_dbsetup.texte,       
	table_id = w_dbsetup.table_id,      
	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
WHERE 1=1
	AND t_classes.code = w_dbsetup.classe_code
	AND t_classes.table_id = w_dbsetup.table_id
    AND (1!=1
        OR t_classes.texte IS DISTINCT FROM w_dbsetup.texte
        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 rh.t_classes(
	code, 
	texte, 
	table_id, 
	is_cti, 
	sequence, 
	contenu_by_code, 
	contenu_non_replicable_ailleurs
	)
SELECT 
	w_dbsetup.classe_code, 
	w_dbsetup.texte, 
	w_dbsetup.table_id, 
	w_dbsetup.is_cti, 
	w_dbsetup.sequence,
	w_dbsetup.contenu_by_code,
	w_dbsetup.contenu_non_replicable_ailleurs
FROM w_dbsetup
WHERE 1=1
	AND w_dbsetup.table_id::text || '-' || w_dbsetup.sequence::text NOT IN (SELECT table_id::text || '-' || sequence::text FROM rh.t_classes)
	AND w_dbsetup.texte NOT LIKE '*SUPPRIME%'
;