0 ; INSERT INTO rh.t_entreprises( oid, code_original, code, texte, texte_court, planning_code, siren) SELECT oid + fp('idx')::bigint, fp('idc')||code_original, fp('idc')||code, texte, texte_court, planning_code, siren FROM rh_src.t_entreprises WHERE oid > 0 ; -- Màj des Etablissements. NE PAS SUPPRIMER car paramétrage associé. -- DELETE FROM rh.t_etablissements -- WHERE true -- AND oid BETWEEN fp('idx')::bigint AND (fp('idx')::bigint + fp('pas')::bigint) -- AND oid > 0 -- ; INSERT INTO rh.t_etablissements( oid, code_original, code, texte, texte_court, entreprise_id, base_calcul_etp, mode_calcul_etp_paye, planning_code, siret) SELECT oid + fp('idx')::bigint, fp('idc')||code_original, fp('idc')||code, texte, texte_court, entreprise_id + fp('idx')::bigint, base_calcul_etp, mode_calcul_etp_paye, planning_code, siret FROM rh_src.t_etablissements WHERE true and oid > 0 and oid + fp('idx')::bigint not in (select oid from rh.t_etablissements group by 1) ; -- Màj du siret. UPDATE rh.t_etablissements SET siret = src.siret FROM rh_src.t_etablissements as src WHERE 1=1 and t_etablissements.oid = src.oid + fp('idx')::bigint and t_etablissements.siret is distinct from src.siret ; -- Màj des catégories socio-professionnelles (fusion des codes). INSERT INTO rh.t_categories_socio_professionnelle (code_original, code, texte, texte_court) SELECT src_csp.code_original, src_csp.code, src_csp.texte, src_csp.texte_court FROM rh_src.t_categories_socio_professionnelle AS src_csp LEFT JOIN rh.t_categories_socio_professionnelle ON t_categories_socio_professionnelle.code_original = src_csp.code_original WHERE 1=1 AND t_categories_socio_professionnelle.oid IS NULL AND src_csp.oid > 0 ; -- Màj des groupes cotisants. SELECT syncTable3('t_groupes_cotisant') ; -- Màj Motifs début SELECT syncTable3('t_motifs_debut_contrat') ; -- Màj des motifs de fin de contrat SELECT syncTable3('t_motifs_fin_contrat') ; -- Màj des nationalités SELECT syncTable3('t_nationalites') ; -- Màj des organismes de cotisation SELECT syncTable3('t_organismes_cotisation') ; -- Màj des qualifications SELECT syncTable3('t_qualifications') ; -- Màj des rubriques SELECT syncTable3('t_rubriques') ; -- On réplique le paramétrage des rubriques. -- FIXME besoin de refaire descendre le paramétrage ? UPDATE rh.t_rubriques SET c_avantage_nature = rub_src.c_avantage_nature, c_base = rub_src.c_base, c_brut = rub_src.c_brut, c_cotisation_patronale = rub_src.c_cotisation_patronale, c_cotisation_salarie = rub_src.c_cotisation_salarie, c_frais_imposables = rub_src.c_frais_imposables, c_heures_contrat = rub_src.c_heures_contrat, c_heures_payees = rub_src.c_heures_payees, c_heures_travaillees = rub_src.c_heures_travaillees, c_masse_salariale = rub_src.c_masse_salariale, c_masse_salariale_provisionnee = rub_src.c_masse_salariale_provisionnee, c_montant_provisions = rub_src.c_montant_provisions, c_net_a_payer = rub_src.c_net_a_payer, c_net_imposable = rub_src.c_net_imposable, c_nombre = rub_src.c_nombre, c_nombre_provisions = rub_src.c_nombre_provisions, c_od_net_patronale = rub_src.c_od_net_patronale, c_od_net_salarie = rub_src.c_od_net_salarie, code_calcul = rub_src.code_calcul, coefficient = rub_src.coefficient, coefficient_base = rub_src.coefficient_base, coefficient_nombre = rub_src.coefficient_nombre, coefficient_txp = rub_src.coefficient_txp, coefficient_txs = rub_src.coefficient_txs, heures_payees = rub_src.heures_payees, p_avantage_nature = rub_src.p_avantage_nature, p_base = rub_src.p_base, p_brut = rub_src.p_brut, p_cotisation_patronale = rub_src.p_cotisation_patronale, p_cotisation_salarie = rub_src.p_cotisation_salarie, p_cumul = rub_src.p_cumul, p_detail = rub_src.p_detail, p_frais_imposables = rub_src.p_frais_imposables, p_heures_contrat = rub_src.p_heures_contrat, p_heures_payees = rub_src.p_heures_payees, p_heures_travaillees = rub_src.p_heures_travaillees, p_masse_salariale = rub_src.p_masse_salariale, p_masse_salariale_provisionnee = rub_src.p_masse_salariale_provisionnee, p_montant_provisions = rub_src.p_montant_provisions, p_net_a_payer = rub_src.p_net_a_payer, p_net_imposable = rub_src.p_net_imposable, p_nombre = rub_src.p_nombre, p_nombre_provisions = rub_src.p_nombre_provisions, p_od_net_patronale = rub_src.p_od_net_patronale, p_od_net_salarie = rub_src.p_od_net_salarie, s_avantage_nature = rub_src.s_avantage_nature, s_base = rub_src.s_base, s_brut = rub_src.s_brut, s_cotisation_patronale = rub_src.s_cotisation_patronale, s_cotisation_salarie = rub_src.s_cotisation_salarie, s_frais_imposables = rub_src.s_frais_imposables, s_heures_contrat = rub_src.s_heures_contrat, s_heures_payees = rub_src.s_heures_payees, s_heures_travaillees = rub_src.s_heures_travaillees, s_masse_salariale = rub_src.s_masse_salariale, s_masse_salariale_provisionnee = rub_src.s_masse_salariale_provisionnee, s_montant_provisions = rub_src.s_montant_provisions, s_net_a_payer = rub_src.s_net_a_payer, s_net_imposable = rub_src.s_net_imposable, s_nombre = rub_src.s_nombre, s_nombre_provisions = rub_src.s_nombre_provisions, s_od_net_patronale = rub_src.s_od_net_patronale, s_od_net_salarie = rub_src.s_od_net_salarie, unite = rub_src.unite, user_modified = rub_src.user_modified FROM rh_src.t_rubriques AS rub_src WHERE 1=1 AND t_rubriques.oid = rub_src.oid + fp('idx')::bigint AND (1!=1 OR t_rubriques.c_avantage_nature IS DISTINCT FROM rub_src.c_avantage_nature OR t_rubriques.c_base IS DISTINCT FROM rub_src.c_base OR t_rubriques.c_brut IS DISTINCT FROM rub_src.c_brut OR t_rubriques.c_cotisation_patronale IS DISTINCT FROM rub_src.c_cotisation_patronale OR t_rubriques.c_cotisation_salarie IS DISTINCT FROM rub_src.c_cotisation_salarie OR t_rubriques.c_frais_imposables IS DISTINCT FROM rub_src.c_frais_imposables OR t_rubriques.c_heures_contrat IS DISTINCT FROM rub_src.c_heures_contrat OR t_rubriques.c_heures_payees IS DISTINCT FROM rub_src.c_heures_payees OR t_rubriques.c_heures_travaillees IS DISTINCT FROM rub_src.c_heures_travaillees OR t_rubriques.c_masse_salariale IS DISTINCT FROM rub_src.c_masse_salariale OR t_rubriques.c_masse_salariale_provisionnee IS DISTINCT FROM rub_src.c_masse_salariale_provisionnee OR t_rubriques.c_montant_provisions IS DISTINCT FROM rub_src.c_montant_provisions OR t_rubriques.c_net_a_payer IS DISTINCT FROM rub_src.c_net_a_payer OR t_rubriques.c_net_imposable IS DISTINCT FROM rub_src.c_net_imposable OR t_rubriques.c_nombre IS DISTINCT FROM rub_src.c_nombre OR t_rubriques.c_nombre_provisions IS DISTINCT FROM rub_src.c_nombre_provisions OR t_rubriques.c_od_net_patronale IS DISTINCT FROM rub_src.c_od_net_patronale OR t_rubriques.c_od_net_salarie IS DISTINCT FROM rub_src.c_od_net_salarie OR t_rubriques.code_calcul IS DISTINCT FROM rub_src.code_calcul OR t_rubriques.coefficient IS DISTINCT FROM rub_src.coefficient OR t_rubriques.coefficient_base IS DISTINCT FROM rub_src.coefficient_base OR t_rubriques.coefficient_nombre IS DISTINCT FROM rub_src.coefficient_nombre OR t_rubriques.coefficient_txp IS DISTINCT FROM rub_src.coefficient_txp OR t_rubriques.coefficient_txs IS DISTINCT FROM rub_src.coefficient_txs OR t_rubriques.heures_payees IS DISTINCT FROM rub_src.heures_payees OR t_rubriques.p_avantage_nature IS DISTINCT FROM rub_src.p_avantage_nature OR t_rubriques.p_base IS DISTINCT FROM rub_src.p_base OR t_rubriques.p_brut IS DISTINCT FROM rub_src.p_brut OR t_rubriques.p_cotisation_patronale IS DISTINCT FROM rub_src.p_cotisation_patronale OR t_rubriques.p_cotisation_salarie IS DISTINCT FROM rub_src.p_cotisation_salarie OR t_rubriques.p_cumul IS DISTINCT FROM rub_src.p_cumul OR t_rubriques.p_detail IS DISTINCT FROM rub_src.p_detail OR t_rubriques.p_frais_imposables IS DISTINCT FROM rub_src.p_frais_imposables OR t_rubriques.p_heures_contrat IS DISTINCT FROM rub_src.p_heures_contrat OR t_rubriques.p_heures_payees IS DISTINCT FROM rub_src.p_heures_payees OR t_rubriques.p_heures_travaillees IS DISTINCT FROM rub_src.p_heures_travaillees OR t_rubriques.p_masse_salariale IS DISTINCT FROM rub_src.p_masse_salariale OR t_rubriques.p_masse_salariale_provisionnee IS DISTINCT FROM rub_src.p_masse_salariale_provisionnee OR t_rubriques.p_montant_provisions IS DISTINCT FROM rub_src.p_montant_provisions OR t_rubriques.p_net_a_payer IS DISTINCT FROM rub_src.p_net_a_payer OR t_rubriques.p_net_imposable IS DISTINCT FROM rub_src.p_net_imposable OR t_rubriques.p_nombre IS DISTINCT FROM rub_src.p_nombre OR t_rubriques.p_nombre_provisions IS DISTINCT FROM rub_src.p_nombre_provisions OR t_rubriques.p_od_net_patronale IS DISTINCT FROM rub_src.p_od_net_patronale OR t_rubriques.p_od_net_salarie IS DISTINCT FROM rub_src.p_od_net_salarie OR t_rubriques.s_avantage_nature IS DISTINCT FROM rub_src.s_avantage_nature OR t_rubriques.s_base IS DISTINCT FROM rub_src.s_base OR t_rubriques.s_brut IS DISTINCT FROM rub_src.s_brut OR t_rubriques.s_cotisation_patronale IS DISTINCT FROM rub_src.s_cotisation_patronale OR t_rubriques.s_cotisation_salarie IS DISTINCT FROM rub_src.s_cotisation_salarie OR t_rubriques.s_frais_imposables IS DISTINCT FROM rub_src.s_frais_imposables OR t_rubriques.s_heures_contrat IS DISTINCT FROM rub_src.s_heures_contrat OR t_rubriques.s_heures_payees IS DISTINCT FROM rub_src.s_heures_payees OR t_rubriques.s_heures_travaillees IS DISTINCT FROM rub_src.s_heures_travaillees OR t_rubriques.s_masse_salariale IS DISTINCT FROM rub_src.s_masse_salariale OR t_rubriques.s_masse_salariale_provisionnee IS DISTINCT FROM rub_src.s_masse_salariale_provisionnee OR t_rubriques.s_montant_provisions IS DISTINCT FROM rub_src.s_montant_provisions OR t_rubriques.s_net_a_payer IS DISTINCT FROM rub_src.s_net_a_payer OR t_rubriques.s_net_imposable IS DISTINCT FROM rub_src.s_net_imposable OR t_rubriques.s_nombre IS DISTINCT FROM rub_src.s_nombre OR t_rubriques.s_nombre_provisions IS DISTINCT FROM rub_src.s_nombre_provisions OR t_rubriques.s_od_net_patronale IS DISTINCT FROM rub_src.s_od_net_patronale OR t_rubriques.s_od_net_salarie IS DISTINCT FROM rub_src.s_od_net_salarie OR t_rubriques.unite IS DISTINCT FROM rub_src.unite OR t_rubriques.user_modified IS DISTINCT FROM rub_src.user_modified) ; -- Màj comptes SELECT syncTable3('t_compte') ; -- Màj des situations de famille SELECT syncTable3('t_situations_famille') ; -- Màj des types de contrat SELECT syncTable3('t_types_contrat') ; -- Màj des statuts SELECT syncTable3('t_statuts') ; -- Màj des types de temps de travail SELECT syncTable3('t_types_temps_travail') ; -- Màj des services SELECT syncTable3('t_services') ; -- Màj des spécialités SELECT syncTable3('t_specialites') ; -- Màj des codes emploi SELECT syncTable3('t_codes_emploi') ; -- Màj des types d'horaire SELECT syncTable3('t_types_horaire') ; -- Màj des sociétés d'interim SELECT syncTable3('t_societes_interim') ; -- Màj des grilles SELECT syncTable3('t_grilles') ; -- Màj des groupes de grilles SELECT syncTable3('t_grilles_groupes') ; -- Màj des sections analytiques paie SELECT syncTable3('t_sections_analytiques_paie') ; -- Màj des sections analytiques comptable SELECT syncTable3('t_sections_analytiques') ; -- Màj des plans analytiques ng DELETE FROM rh.t_plan_analytique WHERE oid BETWEEN fp('idx')::bigint AND (fp('idx')::bigint + fp('pas')::bigint) AND oid > 0 ; INSERT INTO rh.t_plan_analytique(oid, code, texte) SELECT oid, code, texte FROM rh_src.t_plan_analytique WHERE oid > 0 ; -- Màj des sections analytiques ng SELECT syncTable3('t_section_analytique') ; -- Màj des motifs d'arret SELECT syncTable3('t_motifs_arret') ; -- Màj des précisions du motif d'arrêt SELECT syncTable3('t_precisions_motif_arret') ; -- Màj des motifs de visite médicale SELECT syncTable3('t_motifs_visite') ; -- Màj des circonstances d'accident du travail SELECT syncTable3('t_accident_circonstance') ; -- Màj des lieux d'accident du travail SELECT syncTable3('t_accident_lieu') ; -- Màj de la nature de l'accident du travail SELECT syncTable3('t_accident_nature') ; -- Màj des sièges d'accident du travail SELECT syncTable3('t_accident_siege') ; -- Màj des listes de formations SELECT syncTable3('t_liste_formations') ; -- Màj des codes de cotisation. SELECT syncTable3('t_code_cotisation') ; ]]> Cegid : 2299Z -> 0000002299. On conserve 0000002299. -- * 2 = Le n° de SS sert à effectuer le rapprochement. On conserver le matricule le plus récent (celui du prestataire en cours). DROP TABLE IF EXISTS w_salaries ; CREATE TEMP TABLE w_salaries AS SELECT oid + fp('idx')::bigint AS oid, finess, nom, prenom, date_naissance, sexe, CASE t_divers.valeur WHEN 0 THEN matricule WHEN 1 THEN (CASE WHEN length(matricule) = 10 THEN matricule ELSE lpad(substring(matricule from '(....).$'), 10, '0') END) WHEN 2 THEN matricule END AS matricule, matricule_planning, CASE t_divers.valeur WHEN 0 THEN p_salaries.code WHEN 1 THEN (CASE WHEN length(p_salaries.code) = 10 THEN p_salaries.code ELSE lpad(substring(p_salaries.code from '(....).$'), 10, '0') END) WHEN 2 THEN p_salaries.code END AS code, CASE t_divers.valeur WHEN 0 THEN code_original WHEN 1 THEN (CASE WHEN length(code_original) = 10 THEN code_original ELSE lpad(substring(code_original from '(....).$'), 10, '0') END) WHEN 2 THEN code_original END AS code_original, coalesce(nir, matricule) as nir, -- prise en du compte matricule pour les salaries sans nir e.g. étrangers getOid(entreprise_id) as entreprise_id, getOid(nationalite_id) as nationalite_id, code_postal_id, nom_naissance, getOid(situation_famille_id) as situation_famille_id, adresse1, adresse2, getOid(profil_id) as profil_id, date_debut, date_fin, date_entree_ets, date_sortie_ets, date_anciennete, date_entree_fp, date_entree_fph, no_adeli, case when code_cotisation_id = 0 then 0 else code_cotisation_id + fp('idx')::bigint end as code_cotisation_id, matricule_retraite as matricule_retraite FROM rh_src.p_salaries join rh.t_divers ON t_divers.code = 'FUSION_STRATEGIE' ; DELETE FROM rh.p_salaries WHERE oid BETWEEN fp('idx')::bigint AND (fp('idx')::bigint + fp('pas')::bigint) ; -- Ajout des salariés pas déjà insérés précédemment. INSERT INTO rh.p_salaries( oid, finess, nom, prenom, date_naissance, sexe, matricule, matricule_planning, code, code_original, nir, entreprise_id, nationalite_id, code_postal_id, nom_naissance, situation_famille_id, adresse1, adresse2, profil_id, date_debut, date_fin, date_entree_ets, date_sortie_ets, date_anciennete, date_entree_fp, date_entree_fph, no_adeli, code_cotisation_id, matricule_retraite) SELECT oid, finess, nom, prenom, date_naissance, sexe, matricule, matricule_planning, code, code_original, nir, entreprise_id, nationalite_id, code_postal_id, nom_naissance, situation_famille_id, adresse1, adresse2, profil_id, date_debut, date_fin, date_entree_ets, date_sortie_ets, date_anciennete, date_entree_fp, date_entree_fph, no_adeli, code_cotisation_id, matricule_retraite FROM w_salaries WHERE matricule NOT IN (SELECT matricule FROM rh.p_salaries) ; ]]> rh.oid pour les salariés. DROP TABLE IF EXISTS w_map_sal ; CREATE TEMP TABLE w_map_sal AS SELECT p_salaries.oid as salarie_src_id, min(p.oid) as salarie_id, -- Utile lorsque FUSION_STRATEGIE à 2 car plusieurs matricules pour le même n°SS. -- CASE t_divers.valeur -- WHEN 0 THEN p_salaries.matricule -- WHEN 1 THEN (CASE WHEN length(p_salaries.matricule) = 10 THEN p_salaries.matricule ELSE lpad(substring(p_salaries.matricule from '(....).$'), 10, '0') END) -- WHEN 2 THEN p_salaries.matricule -- END AS matricule, p_salaries.nir FROM rh_src.p_salaries join rh.t_divers ON t_divers.code = 'FUSION_STRATEGIE' JOIN rh.p_salaries as p ON (CASE t_divers.valeur WHEN 0 THEN p.matricule = p_salaries.matricule WHEN 1 THEN p.matricule = (CASE WHEN length(p_salaries.matricule) = 10 THEN p_salaries.matricule ELSE lpad(substring(p_salaries.matricule from '(....).$'), 10, '0') END) WHEN 2 THEN substring(p.nir, 1, 13) = substring(p_salaries.nir, 1, 13) END) GROUP BY 1, 3 ; ]]> nouveaux oids. -- Seuls les contrats avec cnt_to_insert à true seront à insérer. DROP TABLE IF EXISTS w_map_cnt ; CREATE TEMP TABLE w_map_cnt AS with src_contrat_bul as ( select contrat_id from rh_src.p_historique_paie where mois_paie BETWEEN to_char(fp('str')::date, 'YYYYMM') AND to_char(fp('end')::date, 'YYYYMM') group by 1) SELECT coalesce(cnt_ori.oid, MAX(cnt.oid) + fp('idx')::bigint) AS contrat_id, -- id (à insérer si cnt_to_insert = true) du contrat dans le schéma de rh. MAX(cnt.oid) AS contrat_src_id, -- id du contrat dans le schéma du prestataire. cnt_ori.oid IS NULL as cnt_to_insert, -- true : contrat à insérer; false : contrat déjà inséré. map1.salarie_id -- on met le bon id de salarié issu du mapping. --coalesce(cnt_ori.date_debut, cnt.date_debut) AS date_debut, --coalesce(cnt_ori.date_fin, cnt.date_fin) AS date_fin FROM rh_src.p_contrats as cnt JOIN w_map_sal as map1 ON map1.salarie_src_id = cnt.salarie_id left join src_contrat_bul on src_contrat_bul.contrat_id = cnt.oid LEFT JOIN rh.p_contrats as cnt_ori ON 1=1 AND cnt_ori.salarie_id = map1.salarie_id AND cnt_ori.date_debut = cnt.date_debut -- On fait uniquement le lien avec la date de début, car la date de fin pouvait ne pas être déterminé dans l'ancien prestataire. -- AND cnt_ori.date_fin = cnt.date_fin -- <- A laisser commentée. -- AND base.cti_overlaps(cnt.date_debut, cnt.date_fin, cnt_ori.date_debut, cnt_ori.date_fin) -- Permet de ne pas prendre des contrats en trop qui seraient chevauchant (cf. exemple ci-dessous) WHERE true and (false or base.cti_overlaps(cnt.date_debut, cnt.date_fin, fp('str')::date, fp('end')::date) -- on prend uniquement les contrats relatif à la période prestataire... or src_contrat_bul.contrat_id is not null) -- ... ou ceux dont le contrat aurait été positionné avant le changement de prestataire (IC-4475). GROUP BY cnt_ori.oid, map1.salarie_id, cnt.date_debut ; /** UPDATE : -------- Tant pis pour le cas où la reprise des contrat n'a pas été correcte (avec date de début identique). En effet cela pose problème pour la gestion du multi-contrat. EXPLICATION ORIGINELLE : ------------------------ Cas d'un salarié. LEFT JOIN rh.p_contrats as cnt_ori basé sur cnt_ori.date_debut = cnt.date_debut Cegid (nouveau prestataire) : "2003-08-02";"2003-08-31";"00000020310001" -- NON (via le WHERE) "2003-10-01";"2003-10-31";"00000020310002" -- NON (via le WHERE) "2003-11-01";"2003-11-30";"00000020310003" -- NON (via le WHERE) "2003-12-01";"2003-12-31";"00000020310004" -- NON (via le WHERE) "2004-01-01";"2099-12-31";"00000020310005" -- Sélectionné SHS (ancien prestataire ) : "2003-08-02";"2003-08-31";"2031H-1" -- Sélectionné "2003-10-01";"2003-10-31";"2031H-2" -- Sélectionné "2003-11-01";"2003-11-30";"2031H-3" -- Sélectionné "2003-12-01";"2003-12-31";"2031H-4" -- Sélectionné "2004-01-01";"2004-06-30";"2031H-5" -- Non sélectionné car déjà remonté avec Cegid. "2004-07-01";"2099-12-31";"2031H-6" -- Sélectionné Fusion (erronée car 2 contrats se terminant en 2099-12-31) : "2003-08-02";"2003-08-31";"SH_2031H-1" "2003-10-01";"2003-10-31";"SH_2031H-2" "2003-11-01";"2003-11-30";"SH_2031H-3" "2003-12-01";"2003-12-31";"SH_2031H-4" "2004-01-01";"2099-12-31";"00000020310005" "2004-07-01";"2099-12-31";"SH_2031H-6" -- ce contrat n'aurait pas du être remonté et c'est le sens du cti_overlaps dans le LEFT JOIN. */ INSERT INTO rh.p_contrats ( oid, salarie_id, date_debut, date_fin, numero_contrat, code_original, etablissement_id, profil_id, anciennete_anterieure_mois, anciennete_anterieure_calculee_mois, salarie_remplace_id, anciennete_anterieure_jours, anciennete_anterieure_calculee_jours) SELECT cnt.contrat_id, cnt.salarie_id, -- on met le bon id de salarié issu du mapping. p_contrats.date_debut, p_contrats.date_fin, fp('idc')||p_contrats.numero_contrat, fp('idc')||p_contrats.code_original, getOid(p_contrats.etablissement_id), getOid(p_contrats.profil_id), p_contrats.anciennete_anterieure_mois, p_contrats.anciennete_anterieure_calculee_mois, coalesce(map.salarie_id, 0), -- on met le bon id de salarié remplacé issu du mapping. p_contrats.anciennete_anterieure_jours, p_contrats.anciennete_anterieure_calculee_jours FROM w_map_cnt as cnt JOIN rh_src.p_contrats on p_contrats.oid = cnt.contrat_src_id LEFT JOIN w_map_sal as map ON map.salarie_src_id = p_contrats.salarie_remplace_id WHERE cnt.cnt_to_insert -- on insére uniquement les contrats pas déjà insérés précédemment. ; -- On conserve uniquement la ventilation sur les périodes propres à chaque prestataire. -- On considère que la ventilation sur les périodes propres à chaque prestataire est la plus à même de décrire l'évolution du salarié, -- notamment pour les CDI pour lesquels l'historique n'aura pas été intégralement repris avec le nouveau prestataire. DELETE FROM rh.p_contrats_mois WHERE oid BETWEEN fp('idx')::bigint AND (fp('idx')::bigint + fp('pas')::bigint) ; -- Table qui fait le mapping entre les anciens oid et les éventuels nouveaux. DROP TABLE IF EXISTS w_map_cnt_mois ; CREATE TEMP TABLE w_map_cnt_mois AS with src_contrat_bul as ( select contrat_mois_id from rh_src.p_historique_paie where mois_paie BETWEEN to_char(fp('str')::date, 'YYYYMM') AND to_char(fp('end')::date, 'YYYYMM') group by 1) SELECT cnt_src.oid + fp('idx')::bigint as contrat_mois_id, cnt_src.oid as contrat_mois_src_id, w_map_cnt.contrat_id, w_map_cnt.contrat_src_id, cnt_src.mois_activite, w_map_cnt.salarie_id FROM rh_src.p_contrats_mois AS cnt_src left join src_contrat_bul on src_contrat_bul.contrat_mois_id = cnt_src.oid JOIN w_map_cnt ON 1=1 AND w_map_cnt.contrat_src_id = cnt_src.contrat_id -- UPDATE : NON -- V Les contrats_mois doivent correspondrent à un seul contrat sur une période donnée. -- AND base.cti_overlaps(w_map_cnt.date_debut, w_map_cnt.date_fin, cnt_src.date_debut, cnt_src.date_fin) WHERE true and (false or cnt_src.mois_activite BETWEEN to_char(fp('str')::date, 'YYYYMM') AND to_char(fp('end')::date, 'YYYYMM') -- on prend uniquement les contrats relatif à la période prestataire... or src_contrat_bul.contrat_mois_id is not null) -- ... ou ceux dont le contrat aurait été positionné avant le changement de prestataire (IC-4475). ; INSERT INTO rh.p_contrats_mois( oid, contrat_id, mois_activite, nombre_debut_contrat, nombre_fin_contrat, equivalent_temps_plein, date_debut, date_fin, age_id, age_jours, est_hors_periode, present_fin_mois, anciennete_mois, anciennete_annee_id, nombre_departs, salarie_id, anciennete_grade_mois, anciennete_grade_annee_id, anciennete_fp_mois, anciennete_fp_annee_id, anciennete_fph_mois, anciennete_fph_annee_id, fictif, nombre_entrees, present_debut_mois, anciennete_jours, profil_id, etablissement_id, code_original, effectif_permanent, nombre_transformation_cdi, pole_id, population_id, ratio_temps_travail, nombre_heures) SELECT w_map_cnt_mois.contrat_mois_id, w_map_cnt_mois.contrat_id, w_map_cnt_mois.mois_activite, p_contrats_mois.nombre_debut_contrat, p_contrats_mois.nombre_fin_contrat, p_contrats_mois.equivalent_temps_plein, p_contrats_mois.date_debut, p_contrats_mois.date_fin, p_contrats_mois.age_id, p_contrats_mois.age_jours, p_contrats_mois.est_hors_periode, p_contrats_mois.present_fin_mois, p_contrats_mois.anciennete_mois, p_contrats_mois.anciennete_annee_id, p_contrats_mois.nombre_departs, w_map_cnt_mois.salarie_id, -- on met le bon id de salarié issu du mapping. p_contrats_mois.anciennete_grade_mois, p_contrats_mois.anciennete_grade_annee_id, p_contrats_mois.anciennete_fp_mois, p_contrats_mois.anciennete_fp_annee_id, p_contrats_mois.anciennete_fph_mois, p_contrats_mois.anciennete_fph_annee_id, p_contrats_mois.fictif, p_contrats_mois.nombre_entrees, p_contrats_mois.present_debut_mois, p_contrats_mois.anciennete_jours, getOid(p_contrats_mois.profil_id), getOid(p_contrats_mois.etablissement_id), p_contrats_mois.code_original, p_contrats_mois.effectif_permanent, p_contrats_mois.nombre_transformation_cdi, p_contrats_mois.pole_id, p_contrats_mois.population_id, p_contrats_mois.ratio_temps_travail, p_contrats_mois.nombre_heures FROM w_map_cnt_mois JOIN rh_src.p_contrats_mois ON p_contrats_mois.oid = w_map_cnt_mois.contrat_mois_src_id ; ]]>