-- 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%' ;