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

CREATE TEMP TABLE w_dbsetup AS
    SELECT 
    	oid,
    	code,
    	texte,
    	description,
    	is_cti,
    	gravite_id
    FROM rh.t_expert_controle
    WHERE is_cti = '1' 
    ORDER BY code LIMIT 0
;

-- 2/3 : Peuplement de la table temporaire
INSERT INTO w_dbsetup(
    oid,
    code,
    texte,
    description,
    is_cti,
    gravite_id
)
VALUES
(0, '', '', '', '1', 1),
(1, 'CTI_NIV1_C000', 'Présence de C000', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_CAD_EMP_NR', 'Cadre d''emploi non renseigné', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_CAT_STAT_NR', 'Catégorie statutaire non renseignée', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_CE_NR', 'Code emploi non renseigné', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_COD_POST_NR', 'Code postal non renseigné', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_COM_PAR_NR', 'Commission paritaire non renseignée', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_CSP_NR', 'Catégorie socio-professionnelle non renseignée', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_CTRID_NULL', 'Contrat ID null en paie', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_DAT_NAIS_NR', 'Date de naissance non renseignée', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_DTEDEB_NR', 'Date de début de contrat non renseignée', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_DTEFIN_NR', 'Date de fin de contrat non renseignée', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_FIL_NR', 'Filière non renseignée', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_GRI_NR', 'Grille non renseignée', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_GROGRI_NR', 'Groupe Grille non renseigné', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_GRO_COT_NR', 'Groupe de cotisant non renseigné', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_MOTDEB_NR', 'Motif de début non renseigné', 'Contrats sans motif de début.', '1', '9', 'A1'),
(1, 'CTI_NIV1_MOTFIN_NR', 'Motif de Fin non renseigné', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_NAT_NR', 'Nationalité non renseigné', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_QUAL_NR', 'Qualification non renseignée', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_SEX_NR', 'Sexe non renseigné', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_SPE_NR', 'Spécialité non renseignée', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_SRV_NR', 'Service non renseigné', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_STT_NR', 'Statut non renseigné', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_TC_NR', 'Type de contrat non renseigné', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_TTT_NR', 'Type temps travail non renseigné', '', '1', '9', 'A1'),
(1, 'CTI_NIV1_UNI_FONC_NR', 'Unité fonctionnelle non renseignée', '', '1', '9', 'A1'),
(1, 'CTI_NIV2_C000_BRUT', 'Présence C000 BRUT', '', '1', '5', 'A1'),
(1, 'CTI_NIV2_C000_COT_PAT', 'Présence C000 Cotisation Patronale', '', '1', '5', 'A1'),
(1, 'CTI_NIV2_C000_COT_SAL', 'Présence C000 Cotisation Salariale', '', '1', '5', 'A1'),
(1, 'CTI_NIV2_C000_H_CONTRAT', 'Présence C000 Heures Contrat', '', '1', '5', 'A1'),
(1, 'CTI_NIV2_C000_H_PAYEES', 'Présence C000 Heures Payées', '', '1', '5', 'A1'),
(1, 'CTI_NIV2_C000_H_TRAVAILLEES', 'Présence C000 Heures Travaillées', '', '1', '5', 'A1'),
(1, 'CTI_NIV2_C000_MASSE_SALARIALE', 'Présence C000 Masse Salariale', '', '1', '5', 'A1'),
(1, 'CTI_NIV2_C000_NET_A_PAYE', 'Présence C000 Net A Payer Salarié', '', '1', '5', 'A1'),
(1, 'CTI_NIV2_C000_NET_IMP', 'Présence C000 Net Imposable Salarié', '', '1', '5', 'A1'),
(1, 'CTI_NIV2_HCSORTI', 'Salarié avec plus d''une paie avec heures contrat après sortie de l''établissement', '', '1', '5', 'A1'),
(1, 'CTI_NIV3_PRESENCE_PAIE_PAS_PLANNING', 'Liste des salariés présents en paie mais pas au planning', 'Liste des salariés présents en paie mais pas au planning', '1', 1, 'A2'),
(1, 'CTI_NIV3_PRESENCE_PLANNING_PAS_PAIE', 'Liste des personnes présentes au planning mais pas en planning', 'Liste des personnes présentes au planning mais pas en planning', '1', 1, 'A2')

;

-- 3/3 : Màj de la table iCTI
UPDATE rh.t_expert_controle SET
	code = w_dbsetup.code,
	texte = w_dbsetup.texte,
	description = w_dbsetup.description,
	is_cti = w_dbsetup.is_cti,
	gravite_id = w_dbsetup.gravite_id
FROM w_dbsetup
WHERE 1=1
	AND w_dbsetup.oid = 0
	AND rh.t_expert_controle.oid = w_dbsetup.oid
	AND 
	(
	t_expert_controle.code IS DISTINCT FROM w_dbsetup.code OR
	t_expert_controle.texte IS DISTINCT FROM w_dbsetup.texte OR
	t_expert_controle.description IS DISTINCT FROM w_dbsetup.description OR
	t_expert_controle.is_cti IS DISTINCT FROM w_dbsetup.is_cti OR
	t_expert_controle.gravite_id IS DISTINCT FROM w_dbsetup.gravite_id
	)
;

UPDATE rh.t_expert_controle SET
	code = w_dbsetup.code,
	texte = w_dbsetup.texte,
	description = w_dbsetup.description,
	is_cti = w_dbsetup.is_cti,
	gravite_id = w_dbsetup.gravite_id
FROM w_dbsetup
WHERE 1=1
	AND w_dbsetup.oid <> 0
	AND rh.t_expert_controle.code = w_dbsetup.code
	AND 
	(
	t_expert_controle.texte IS DISTINCT FROM w_dbsetup.texte OR
	t_expert_controle.description IS DISTINCT FROM w_dbsetup.description OR
	t_expert_controle.is_cti IS DISTINCT FROM w_dbsetup.is_cti OR
	t_expert_controle.gravite_id IS DISTINCT FROM w_dbsetup.gravite_id
	)
;

INSERT INTO rh.t_expert_controle(
	oid,
	code,
	texte,
	description,
	is_active,
	was_active,
	is_hide,
	alerte_id,
	is_cti,
	gravite_id
	)
SELECT 
	oid,
	code,
	texte,
	description,
	'1' AS is_active,
	'0' AS is_hide,
	0::bigint AS alerte_id,
	is_cti,
	gravite_id,
	date(date_trunc('year',now())) AS date_validite_debut
FROM w_dbsetup 
WHERE 1=1
	AND w_dbsetup.oid = 0
	AND w_dbsetup.oid NOT IN (SELECT oid FROM rh.t_expert_controle)
;

INSERT INTO rh.t_expert_controle(
	code,
	texte,
	description,
	is_active,
	is_hide,
	alerte_id,
	is_cti,
	gravite_id
	)
SELECT 
	code,
	texte,
	description,
	'1' AS is_active,
	'0' AS was_active,
	'0' AS is_hide,
	0::bigint AS alerte_id,
	is_cti,
	gravite_id
FROM w_dbsetup 
WHERE 1=1
	AND w_dbsetup.oid <> 0
	AND w_dbsetup.code NOT IN (SELECT code FROM rh.t_expert_controle)
;