t_codes_postaux.code ; INSERT INTO rh.t_codes_postaux(oid, code, texte, texte_court, longitude, latitude, departement_id, departement_code, departement_texte) SELECT t_codes_postaux.oid, t_codes_postaux.code, t_codes_postaux.texte, t_codes_postaux.texte_court, t_codes_postaux.longitude, t_codes_postaux.latitude, t_codes_postaux.departement_id, t_codes_postaux.departement_code, t_codes_postaux.departement_texte FROM base.t_codes_postaux LEFT JOIN rh.t_codes_postaux t_codes_postaux_rh ON t_codes_postaux_rh.oid = t_codes_postaux.oid WHERE t_codes_postaux_rh.oid IS NULL ; UPDATE rh.t_codes_postaux t_codes_postaux_rh SET code = t_codes_postaux.code, texte = t_codes_postaux.texte, texte_court = t_codes_postaux.texte_court, longitude = t_codes_postaux.longitude, latitude = t_codes_postaux.latitude, departement_id = t_codes_postaux.departement_id, departement_code = t_codes_postaux.departement_code, departement_texte = t_codes_postaux.departement_texte FROM base.t_codes_postaux WHERE 1=1 AND t_codes_postaux_rh.oid = t_codes_postaux.oid AND (1!=1 OR t_codes_postaux_rh.code IS DISTINCT FROM t_codes_postaux.code OR t_codes_postaux_rh.texte IS DISTINCT FROM t_codes_postaux.texte OR t_codes_postaux_rh.texte_court IS DISTINCT FROM t_codes_postaux.texte_court OR t_codes_postaux_rh.longitude IS DISTINCT FROM t_codes_postaux.longitude OR t_codes_postaux_rh.latitude IS DISTINCT FROM t_codes_postaux.latitude OR t_codes_postaux_rh.departement_id IS DISTINCT FROM t_codes_postaux.departement_id OR t_codes_postaux_rh.departement_code IS DISTINCT FROM t_codes_postaux.departement_code OR t_codes_postaux_rh.departement_texte IS DISTINCT FROM t_codes_postaux.departement_texte) ; -- Màj des Depts. DELETE FROM rh.t_departements t_departements_rh USING base.t_departements WHERE t_departements_rh.oid = t_departements.oid AND t_departements_rh.code <> t_departements.code ; INSERT INTO rh.t_departements(oid, code, texte, texte_court) SELECT t_departements.oid, t_departements.code, t_departements.texte, t_departements.texte_court FROM base.t_departements LEFT JOIN rh.t_departements t_departements_rh ON t_departements_rh.oid = t_departements.oid WHERE t_departements_rh.oid IS NULL ; UPDATE rh.t_departements t_departements_rh SET code = t_departements.code, texte = t_departements.texte, texte_court = t_departements.texte_court FROM base.t_departements WHERE t_departements_rh.oid = t_departements.oid AND ( t_departements_rh.code IS DISTINCT FROM t_departements.code OR t_departements_rh.texte IS DISTINCT FROM t_departements.texte OR t_departements_rh.texte_court IS DISTINCT FROM t_departements.texte_court ) ; -- Màj des Entreprises INSERT INTO rh.t_entreprises(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseignée', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_entreprises) ; -- Màj des Etablissements INSERT INTO rh.t_etablissements(oid, code_original, code, texte, texte_court, entreprise_id) SELECT 0, '', chr(1) || '*', 'Non renseignée', 'N/R', 0 WHERE 0 NOT IN (SELECT oid FROM rh.t_etablissements) ; -- Màj des "Catégories socio-professionnelles". INSERT INTO rh.t_categories_socio_professionnelle(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseignée', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_categories_socio_professionnelle) ; -- Màj des "Groupes de cotisants". INSERT INTO rh.t_groupes_cotisant(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_groupes_cotisant) ; -- Màj des motifs de début de contrat. INSERT INTO rh.t_motifs_debut_contrat(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_motifs_debut_contrat) ; -- Màj des motifs de fin de contrat. INSERT INTO rh.t_motifs_fin_contrat(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_motifs_fin_contrat) ; -- Màj des motifs de fin de contrat : motif fictif CTI positionné lorsque contrat toujours en cours. INSERT INTO rh.t_motifs_fin_contrat(code_original, code, texte, texte_court) SELECT 'CTI_CNT_EC', 'CTI_CNT_EC', 'Contrat en cours', 'Contrat en cours' WHERE 'CTI_CNT_EC' NOT IN (SELECT code_original FROM rh.t_motifs_fin_contrat) ; -- Màj des "Nationalités". INSERT INTO rh.t_nationalites(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseignée', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_nationalites) ; -- Màj des "Organismes de cotisation". INSERT INTO rh.t_organismes_cotisation(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseignée', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_organismes_cotisation) ; -- Màj des "Unités Fonctionnelles". INSERT INTO rh.t_unite_fonctionnelle(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseignée', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_unite_fonctionnelle) ; -- Màj des "Rubriques". INSERT INTO rh.t_rubriques(oid, code_original, code, texte, texte_court, rang_edition) SELECT 0, '', chr(1) || '*', 'Non renseignée', 'N/R', 0 WHERE 0 NOT IN (SELECT oid FROM rh.t_rubriques) ; -- (création des rubriques CTI de cumul). INSERT INTO rh.t_rubriques(code, texte, texte_court, code_original, rang_edition) SELECT 'C000', 'Ecart cumulé', 'Ecart cumulé', 'C000', -1 WHERE 'C000' NOT IN (SELECT code_original FROM rh.t_rubriques) AND 'C000' NOT IN (SELECT code FROM rh.t_rubriques) ; -- Màj des situations de famille. INSERT INTO rh.t_situations_famille(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseignée', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_situations_famille) ; -- Màj des "Types de contrat". INSERT INTO rh.t_types_contrat(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_types_contrat) ; -- Màj des "Statuts". INSERT INTO rh.t_statuts(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_statuts) ; -- Màj des types de temps de travail. INSERT INTO rh.t_types_temps_travail(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_types_temps_travail) ; -- Màj des "Services". INSERT INTO rh.t_services(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_services) ; -- Màj des "Qualifications". INSERT INTO rh.t_qualifications(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_qualifications) ; -- Màj des "Spécialités". INSERT INTO rh.t_specialites(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseignée', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_specialites) ; -- Màj des "Lettres Budgétaires". INSERT INTO rh.t_lettre_budgetaire(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseignée', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_lettre_budgetaire) ; -- Màj des "Codes emploi". INSERT INTO rh.t_codes_emploi(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_codes_emploi) ; -- Màj des types d'horaire. INSERT INTO rh.t_types_horaire(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_types_horaire) ; -- Màj des "Groupes de commission paritaire". INSERT INTO rh.t_commission_paritaire(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_commission_paritaire) ; -- Màj des grilles. INSERT INTO rh.t_grilles(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseignée', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_grilles) ; -- Màj des groupes de grilles. INSERT INTO rh.t_grilles_groupes(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_grilles_groupes) ; -- Màj des motifs d'arret. INSERT INTO rh.t_motifs_arret(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_motifs_arret) ; -- Màj des précisions du motif d'arrêt. INSERT INTO rh.t_precisions_motif_arret(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseignée', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_precisions_motif_arret) ; -- Màj des "Motifs de visite médicale". INSERT INTO rh.t_motifs_visite(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_motifs_visite) ; -- Màj des "Circonstances d'accident du travail". INSERT INTO rh.t_accident_circonstance(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_accident_circonstance) ; -- Màj des "Lieux d'accident du travail". INSERT INTO rh.t_accident_lieu(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_accident_lieu) ; -- Màj de la nature de l'accident du travail. INSERT INTO rh.t_accident_nature(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_accident_nature) ; -- Màj des sièges d'accident du travail. INSERT INTO rh.t_accident_siege(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_accident_siege) ; -- Màj des listes de formations. INSERT INTO rh.t_liste_formations(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_liste_formations) ; -- Màj des comptes. INSERT INTO rh.t_compte(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_compte) ; -- Màj des "Catégories de congé". INSERT INTO rh.t_categorie_conge(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_categorie_conge) ; -- Màj des "Cadres d'emploi". INSERT INTO rh.t_cadre_emploi(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_cadre_emploi) ; -- Màj des "Filières". INSERT INTO rh.t_filiere(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_filiere) ; -- Màj des "Catégories statutaires". INSERT INTO rh.t_categorie_statutaire(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_categorie_statutaire) ; -- Màj des "Codes cotisation". INSERT INTO rh.t_code_cotisation(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(1) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_code_cotisation) ; -- Sections analytiques niveau 1 INSERT INTO rh.t_sections_analytiques_paie(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(127) || '*', 'Non renseignée', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_sections_analytiques_paie) ; INSERT INTO rh.t_sections_analytiques(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(127) || '*', 'Non renseignée', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_sections_analytiques) ; INSERT INTO rh.t_section_analytique(oid, code_original, code, texte, texte_court) SELECT 0, '', chr(127) || '*', 'Non renseignée', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_section_analytique) ; -- Pôles INSERT INTO rh.t_pole(oid, code, texte, texte_court) SELECT 0, chr(127) || '*', 'Non renseigné', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_pole) ; -- Populations. INSERT INTO rh.t_population(oid, code, texte, texte_court) SELECT 0, chr(127) || '*', 'Non renseignée', 'N/R' WHERE 0 NOT IN (SELECT oid FROM rh.t_population) ; ]]> 0 FROM rh.t_divers WHERE code = 'PAIE_VENTILATION' ; ]]> 0 as data_fusion from rh.p_historique_paie where p_historique_paie.oid >= 100000000000 -- uniquement la paie des anciens prestataires. ) select opt_hp_up and data_fusion from divers, data_hp ; ]]> = 100000000000 -- uniquement la paie des anciens prestataires. AND (false -- et uniquement pour les lignes où c'est nécessaire. OR p_historique_paie.base IS DISTINCT FROM update_hp.base OR p_historique_paie.nombre IS DISTINCT FROM update_hp.nombre OR p_historique_paie.montant_masse_salariale IS DISTINCT FROM update_hp.montant_masse_salariale OR p_historique_paie.heure_contrat IS DISTINCT FROM update_hp.heures_contrat OR p_historique_paie.heure_payee IS DISTINCT FROM update_hp.heures_payees OR p_historique_paie.heure_travaillee IS DISTINCT FROM update_hp.heures_travaillees) ; -- Resolution d'un problème d'integrite UPDATE rh.p_historique_paie SET etablissement_id = p_contrats.etablissement_id, contrat_mois_id = p_contrats_mois.oid FROM rh.p_contrats_mois JOIN rh.p_contrats ON p_contrats_mois.contrat_id = p_contrats.oid WHERE contrat_mois_id IS NULL AND p_historique_paie.salarie_id = p_contrats_mois.salarie_id AND p_historique_paie.contrat_id = p_contrats_mois.contrat_id AND p_historique_paie.mois_paie = p_contrats_mois.mois_activite ; ]]> 0 ; SELECT rh.cti_fusion_salaries(); -- Table des personnes SELECT rh.cti_reorganize_personne(); -- Forcage date sortie etablissement selon motif fin de contrat UPDATE rh.p_salaries SET date_sortie_ets = p_contrats.date_fin FROM rh.p_contrats JOIN ( SELECT p_contrats.salarie_id, MAX(p_contrats.date_fin), (MAX(array[p_contrats.date_fin::text, p_contrats.oid::text]))[2]::bigint AS last_contrat_id FROM rh.p_contrats GROUP BY 1 HAVING MAX(p_contrats.date_fin) <= now() ) subview ON p_contrats.oid = last_contrat_id JOIN rh.p_profils ON p_contrats.profil_id = p_profils.oid WHERE p_salaries.oid = subview.salarie_id AND p_salaries.date_sortie_ets = '20991231' AND p_profils.motif_fin_id IN ( SELECT to_id FROM rh.t_listes JOIN rh.t_listes_contenu ON t_listes.oid = t_listes_contenu.liste_id WHERE t_listes.code = 'CTI_MFCDEP' ) ; -- Assignation du plus récent entreprise_id (là où non renseigné) UPDATE rh.p_salaries SET entreprise_id = subview.dernier_entreprise_id FROM ( SELECT p_salaries.oid AS salarie_id, (MAX(array[p_contrats.date_fin::text, t_etablissements.entreprise_id::text]))[2]::bigint AS dernier_entreprise_id FROM rh.p_salaries JOIN rh.p_contrats ON p_contrats.salarie_id = p_salaries.oid JOIN rh.t_etablissements ON t_etablissements.oid = p_contrats.etablissement_id GROUP BY 1 ) AS subview WHERE (p_salaries.entreprise_id = 0 OR p_salaries.entreprise_id IS NULL) AND p_salaries.oid = subview.salarie_id ; ]]> date_entree_ets; ; -- Màj de l'ancienneté. UPDATE rh.p_contrats SET anciennete_anterieure_jours = subq.anciennete_anterieure_jours, anciennete_anterieure_calculee_mois = subq.anciennete_anterieure_calculee_mois FROM ( select numero_contrat, coalesce(sum(date_fin - date_debut + 1) over w, 0) AS anciennete_anterieure_jours, coalesce(sum(date_fin - date_debut + 1) over w / 30::numeric, 0) AS anciennete_anterieure_calculee_mois from rh.p_contrats window w as (partition by salarie_id order by date_debut rows between UNBOUNDED PRECEDING and 1 preceding)) AS subq WHERE 1=1 AND p_contrats.numero_contrat = subq.numero_contrat ; -- Màj de l'ancienneté reprise. UPDATE rh.p_contrats SET anciennete_reprise_anterieure_jours = subq.anciennete_reprise_anterieure_jours, anciennete_reprise_anterieure_calculee_mois = subq.anciennete_reprise_anterieure_jours / 30 FROM ( SELECT p_contrats.numero_contrat, COALESCE((p_contrats.anciennete_anterieure_jours + (p_salaries.date_entree_ets - p_salaries.date_anciennete)), 0) AS anciennete_reprise_anterieure_jours FROM rh.p_salaries JOIN rh.p_contrats ON p_contrats.salarie_id = p_salaries.oid ) AS subq WHERE p_contrats.numero_contrat = subq.numero_contrat ; UPDATE rh.p_contrats_mois SET anciennete_jours = subq.anciennete_jours, anciennete_reprise_jours = subq.anciennete_reprise_jours, anciennete_mois = subq.anciennete_mois, anciennete_reprise_mois = subq.anciennete_reprise_mois, anciennete_annee_id = subq.anciennete_annee_id, anciennete_reprise_annee_id = subq.anciennete_reprise_annee_id FROM ( SELECT p_contrats.salarie_id, p_contrats.oid AS contrat_id, p_contrats_mois.oid AS contrat_mois_id, p_contrats.anciennete_anterieure_jours + (p_contrats_mois.date_fin - p_contrats.date_debut) + 1 AS anciennete_jours, p_contrats.anciennete_reprise_anterieure_jours + (p_contrats_mois.date_fin - p_contrats.date_debut) AS anciennete_reprise_jours, base.cti_age(date_trunc('month', p_contrats_mois.date_fin)::date, date_trunc('month', p_contrats.date_debut)::date, 'nm') + GREATEST(p_contrats.anciennete_anterieure_mois, p_contrats.anciennete_anterieure_calculee_mois) + 1 AS anciennete_mois, base.cti_age(date_trunc('month', p_contrats_mois.date_fin)::date, date_trunc('month', p_contrats.date_debut)::date, 'nm') + p_contrats.anciennete_reprise_anterieure_calculee_mois AS anciennete_reprise_mois, floor((base.cti_age(date_trunc('month', p_contrats_mois.date_fin::date)::date, date_trunc('month', p_contrats.date_debut)::date, 'nm') + GREATEST(p_contrats.anciennete_anterieure_mois, p_contrats.anciennete_anterieure_calculee_mois) + 1) / 12) AS anciennete_annee_id, floor((base.cti_age(date_trunc('month', p_contrats_mois.date_fin::date)::date, date_trunc('month', p_contrats.date_debut)::date, 'nm') + p_contrats.anciennete_reprise_anterieure_calculee_mois) / 12) AS anciennete_reprise_annee_id FROM rh.p_contrats JOIN rh.p_contrats_mois ON p_contrats_mois.contrat_id = p_contrats.oid ) AS subq WHERE p_contrats_mois.salarie_id = subq.salarie_id AND p_contrats_mois.contrat_id = subq.contrat_id AND p_contrats_mois.oid = subq.contrat_mois_id ; -- Màj des compteurs UPDATE rh.p_contrats_mois SET nombre_entrees = CASE WHEN p_salaries.date_entree_ets BETWEEN p_contrats_mois.date_debut AND p_contrats_mois.date_fin THEN 1 ELSE 0 END, nombre_departs = CASE WHEN p_salaries.date_sortie_ets BETWEEN p_contrats_mois.date_debut AND p_contrats_mois.date_fin THEN 1 ELSE 0 END, nombre_debut_contrat = CASE WHEN p_contrats.date_debut BETWEEN p_contrats_mois.date_debut AND p_contrats_mois.date_fin THEN 1 ELSE 0 END, nombre_fin_contrat = CASE WHEN p_contrats.date_fin BETWEEN p_contrats_mois.date_debut AND p_contrats_mois.date_fin THEN 1 ELSE 0 END, present_debut_mois = CASE WHEN p_contrats_mois.date_debut = base.cti_first_day(p_contrats_mois.date_debut) THEN 1 ELSE 0 END, present_fin_mois = CASE WHEN p_contrats_mois.date_fin = base.cti_last_day(p_contrats_mois.date_fin) THEN 1 ELSE 0 END, age_jours = p_contrats_mois.date_fin - COALESCE(p_salaries.date_naissance, '1962-04-18'::date) FROM rh.p_salaries, rh.p_contrats WHERE 1=1 AND p_salaries.oid = p_contrats_mois.salarie_id AND p_contrats.oid = p_contrats_mois.contrat_id ; with flagged_cnt as ( select p_contrats.oid, coalesce(lag(p_contrats.date_fin) over w + '1 day'::interval = p_contrats.date_debut and lag(p_profils.motif_fin_code) over w in (select unnest(string_to_array(replace(valeur, ' ', ''), ',')) from rh.t_divers where code = 'OPT_CNT_FIN_FUSION'), false) as pas_top_debut, p_profils.motif_fin_code in (select unnest(string_to_array(replace(valeur, ' ', ''), ',')) from rh.t_divers where code = 'OPT_CNT_FIN_FUSION') as pas_top_fin from rh.p_contrats join rh.p_profils on p_profils.oid = p_contrats.profil_id window w as (partition by p_contrats.salarie_id order by p_contrats.date_debut)) update rh.p_contrats_mois set nombre_debut_contrat = case when pas_top_debut then '0' else nombre_debut_contrat end, nombre_fin_contrat = case when pas_top_fin then '0' else nombre_fin_contrat end from flagged_cnt where true and p_contrats_mois.contrat_id = flagged_cnt.oid and (false or pas_top_debut or pas_top_fin) ; with toto as ( select p_contrats_mois.oid, case when type_contrat_section_code[9] = 'CDI' and lag(type_contrat_section_code[9]) over w != 'CDI' then 1 else 0 end as nombre_transformation_cdi from rh.p_contrats_mois JOIN rh.p_profil_contrat_mois ON p_profil_contrat_mois.contrat_mois_id = p_contrats_mois.oid join rh.p_profils on p_profils.oid = p_profil_contrat_mois.profil_id window w as (partition by p_contrats_mois.salarie_id order by p_contrats_mois.date_debut)) UPDATE rh.p_contrats_mois SET nombre_transformation_cdi = toto.nombre_transformation_cdi FROM toto WHERE 1=1 AND p_contrats_mois.oid = toto.oid AND p_contrats_mois.nombre_transformation_cdi IS DISTINCT FROM toto.nombre_transformation_cdi ; /* CONTRATS */ -- MAJ de l'age contrat si ce dernier est 0 WITH w_age_contrat AS ( SELECT p_contrats_mois.oid, base.cti_age(p_contrats_mois.date_fin, coalesce(p_salaries.date_naissance, '1962-04-18'::date), 'ny') AS age_id FROM rh.p_contrats_mois JOIN rh.p_salaries ON p_contrats_mois.salarie_id = p_salaries.oid ) UPDATE rh.p_contrats_mois SET age_id = w_age_contrat.age_id FROM w_age_contrat WHERE p_contrats_mois.oid = w_age_contrat.oid ; -- Màj des âges (plage autorisée : 0 -> 110 ans) UPDATE rh.p_contrats_mois SET age_id = 0 WHERE age_id < 0 ; UPDATE rh.p_contrats_mois SET age_id = (SELECT max(oid) FROM rh.t_ages) WHERE age_id > (SELECT max(oid) FROM rh.t_ages) ; -- Màj des anciennetés (plage autorisée : 0 -> 50 ans) UPDATE rh.p_contrats_mois SET anciennete_jours = 0, anciennete_reprise_jours = 0, anciennete_mois = 0, anciennete_reprise_mois = 0, anciennete_annee_id = 0, anciennete_reprise_annee_id = 0 WHERE anciennete_jours <= 0 ; UPDATE rh.p_contrats_mois SET anciennete_annee_id = (SELECT max(oid) FROM rh.t_anciennetes_annee) WHERE anciennete_annee_id > (SELECT max(oid) FROM rh.t_anciennetes_annee) ; UPDATE rh.p_contrats_mois SET anciennete_reprise_annee_id = (SELECT max(oid) FROM rh.t_anciennetes_annee) WHERE anciennete_reprise_annee_id > (SELECT max(oid) FROM rh.t_anciennetes_annee) ; -- Màj des établissements dans p_contrats_mois lorsque non renseigné lors de l'import. UPDATE rh.p_contrats_mois SET etablissement_id = p_contrats.etablissement_id FROM rh.p_contrats WHERE 1=1 AND p_contrats_mois.contrat_id = p_contrats.oid AND p_contrats_mois.etablissement_id IS NULL ; ]]> 0 GROUP BY 1,2,3 ) SELECT salarie_id, annee, MAX(mois_paie) AS mois_paie_max, SUM(montant_brut_mensuel) AS montant_brut_annuel, AVG(montant_brut_mensuel) AS montant_brut_mensuel_moyen FROM montants_brut_mensuel GROUP BY 1,2 ORDER BY 1,2 ; -- Mise à jour du montant_brut_mensuel_moyen et montant_brut_annuel sur la dernière ligne d'historique de paie du salarié UPDATE rh.p_historique_paie SET montant_brut_annuel = subview.montant_brut_annuel, montant_brut_mensuel_moyen = subview.montant_brut_mensuel_moyen FROM ( with max_oid AS ( SELECT montants_brut_cumules.salarie_id, montants_brut_cumules.annee, MAX(p_historique_paie.oid) AS oid_to_update FROM rh.p_historique_paie JOIN montants_brut_cumules ON montants_brut_cumules.salarie_id = p_historique_paie.salarie_id AND montants_brut_cumules.mois_paie_max = p_historique_paie.mois_paie GROUP BY 1,2 ) SELECT max_oid.oid_to_update, montants_brut_cumules.salarie_id, montants_brut_cumules.montant_brut_annuel, montants_brut_cumules.montant_brut_mensuel_moyen FROM montants_brut_cumules JOIN max_oid ON max_oid.salarie_id = montants_brut_cumules.salarie_id AND max_oid.annee = montants_brut_cumules.annee ) AS subview WHERE p_historique_paie.oid = subview.oid_to_update ; ]]>