'' THEN ' Q'||qualif ELSE '' END,
substr(lib_group||CASE WHEN qualif <> '' THEN ' Q'||qualif ELSE '' END,1,50)
FROM prod_sigems.groupe_fiehp
WHERE lpad(c_group,2,'0')||lpad(qualif,4,'0') NOT IN (SELECT code_original FROM rh.t_grilles_groupes)
GROUP BY 1,2,3,4
;*/
-- @TODO: 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)
;
/* INSERT INTO rh.t_grilles_groupes(code_original, code, texte, texte_court)
SELECT c_group, c_group, lib_group, substr(lib_group,1,50)
FROM prod_sigems.groupe_fiehp
WHERE c_group NOT IN (SELECT code_original FROM rh.t_grilles_groupes)
GROUP BY 1,2,3,4
;*/
-- 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)
;
INSERT INTO rh.t_motifs_arret(code, texte, texte_court, code_original)
SELECT ta_code, ta_intitule, substr(ta_intitule,1,50), ta_code
FROM prod_sage100.f_tab
WHERE 1=1
AND ta_typetable = 0
AND ta_code NOT IN (SELECT code_original FROM rh.t_motifs_arret)
GROUP BY 1,2,3,4
;
-- 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)
;
-- @TODO: 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)
;
/* INSERT INTO rh.t_motifs_visite(code_original, code, texte, texte_court)
SELECT code, code, libelle, substr(libelle,1,50)
FROM prod_sigems.MOTIF_VISMED
WHERE code NOT IN (SELECT code_original FROM rh.t_motifs_visite)
GROUP BY 1,2,3,4
;*/
-- @TODO: 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)
;
/* INSERT INTO rh.t_accident_circonstance(code_original, code, texte, texte_court)
SELECT code, code, libelle, substr(libelle,1,50)
FROM prod_sigems.acc_circst
WHERE
code NOT IN (SELECT code_original FROM rh.t_accident_circonstance)
AND code <> ''
AND code IS DISTINCT FROM NULL
GROUP BY 1,2,3,4
;*/
-- @TODO: 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)
;
/* INSERT INTO rh.t_accident_lieu(code_original, code, texte, texte_court)
SELECT code_original, code, code_original, substr(code_original,1,50)
FROM w_tmp_lieu_1
WHERE
code_original NOT IN (SELECT code_original FROM rh.t_accident_lieu)
GROUP BY 1,2,3,4
;*/
-- @TODO: 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)
;
/* INSERT INTO rh.t_accident_nature(code_original, code, texte, texte_court)
SELECT code, code, libelle, substr(libelle,1,50)
FROM prod_sigems.acc_nature
WHERE
code NOT IN (SELECT code_original FROM rh.t_accident_nature)
AND code <> ''
AND code IS DISTINCT FROM NULL
GROUP BY 1,2,3,4
;*/
-- @TODO: 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)
;
/* INSERT INTO rh.t_accident_siege(code_original, code, texte, texte_court)
SELECT code, code, libelle, substr(libelle,1,50)
FROM prod_sigems.acc_siege
WHERE
code NOT IN (SELECT code_original FROM rh.t_accident_siege)
AND code <> ''
AND code IS DISTINCT FROM NULL
GROUP BY 1,2,3,4
;*/
-- 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)
;
INSERT INTO rh.t_liste_formations(code_original, code, texte, texte_court)
SELECT fo_code, fo_code, fo_intitule, substr(fo_intitule,1,50)
FROM prod_sage100.f_formation
WHERE fo_code NOT IN (SELECT code_original FROM rh.t_liste_formations)
GROUP BY 1,2,3,4
;
]]>
= 2008
AND date_part('year', f_hcum.hu_date::date) <= 2020
GROUP BY 1,2,3
;
]]>
date_fin
;
-- Création d'une table temporaire des contrats
DROP TABLE IF EXISTS w_cnt
;
CREATE TEMP TABLE w_cnt AS
SELECT
matricule,
'' AS numero_contrat,
eta_code,
min(date_debut) AS date_debut,
max(date_fin) AS date_fin,
coalesce(fp_contrat_nature,chr(1)||'*') AS type_contrat
FROM w_aff
LEFT JOIN prod_sage100.f_renssal ON f_renssal.sa_matricule = w_aff.matricule
GROUP BY 1,2,3,6
;
UPDATE w_cnt
SET numero_contrat = matricule||replace(date_debut,'-','')
;
-- Création d'une table temporaire de l'histo salarié dans établissements
/*DROP TABLE IF EXISTS w_ets
;
CREATE TEMP TABLE w_ets AS
SELECT
sa_matricule AS matricule,
ae_datededebut::date AS date_debut,
(ae_date::date - interval '1 day')::date AS date_fin,
ae_etab_code AS eta_code
FROM prod_sage100.f_hst_etablissement
;
DELETE FROM w_ets
WHERE date_debut > date_fin
;
UPDATE w_ets
SET date_debut = date_fin
WHERE date_debut IS NULL
;*/
]]>
= p_calendrier_mois.date_fin THEN 1 ELSE 0 END AS present_fin_mois,
base.cti_age(date_trunc('month',p_calendrier_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 AS anciennete_mois,
floor((base.cti_age(date_trunc('month',p_calendrier_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,
p_salaries.oid
FROM rh.p_contrats
JOIN rh.p_salaries ON p_contrats.salarie_id = p_salaries.oid
--JOIN rh.t_etablissements ON p_contrats.etablissement_id = t_etablissements.oid
--JOIN rh.t_entreprises ON t_etablissements.entreprise_id = t_entreprises.oid
JOIN base.p_calendrier_mois ON (p_contrats.date_debut <= p_calendrier_mois.date_fin AND p_contrats.date_fin >= p_calendrier_mois.date_debut)
JOIN w_profils ON w_profils.numero_contrat = p_contrats.numero_contrat
GROUP BY 1,2,3,4,6,7,8,9,10,11,12,13,14,15
;
]]>
déplacée dans OD/Net
CREATE TEMP TABLE w_hp AS
(
SELECT
sa_matricule AS matricule,
hb_date::date AS date,
base.cti_first_day(hb_date::date) AS date_debut,
base.cti_last_day(hb_date::date) AS date_fin,
to_char(hb_date::date,'YYYYMM')::numeric as mois,
t_rubriques.oid AS rub_id,
t_rubriques.code_original AS rub_code,
t_rubriques.texte AS rub_texte,
hb_base::numeric AS base,
(CASE WHEN ru_gain = 1 THEN 1 ELSE -1 END) * (CASE WHEN ru_rubrique::int != 440 AND ru_type = 1 AND ru_das_avnat != 1 THEN hb_montant::numeric ELSE 0 END) AS montant_brut,
0, --(CASE WHEN ru_gain = 1 THEN 1 ELSE -1 END) * (CASE WHEN ru_rubrique = 9 OR ru_rubrique >= 7990 THEN 0 ELSE hb_montant::numeric END) AS montant_frais_imposables,
hb_taux::numeric AS taux_sal,
0 AS montant_sal,
0 AS taux_pat,
0 AS montant_pat,
(CASE WHEN (ru_rubrique::int = 440 OR ru_rubrique::int > 1999) AND ru_das_avnat != 1 THEN hb_montant::numeric ELSE 0 END) AS od_net,
(CASE WHEN ru_dasenplus2 = 2 THEN hb_montant::numeric ELSE 0 END) AS avt_nat,
0 AS net_imposable,
0 AS net_a_payer
FROM prod_sage100.f_hbns
JOIN prod_sage100.f_rub ON f_rub.ru_rubrique = f_hbns.hb_rubrique
JOIN rh.t_rubriques ON t_rubriques.code_original = f_rub.ru_rubrique
WHERE 1=1
AND ru_imprimable = 2
AND hb_montant != 0
AND date_part('year', hb_date::date) >= 2008
--AND sa_matricule = 1117
--AND hb_date >= '2012-01-01'
)
UNION ALL
(
SELECT
sa_matricule AS matricule,
hc_date::date AS date,
base.cti_first_day(hc_date::date) AS date_debut,
base.cti_last_day(hc_date::date) AS date_fin,
to_char(hc_date::date,'YYYYMM')::numeric AS mois,
t_rubriques.oid AS rub_id,
t_rubriques.code_original AS rub_code,
t_rubriques.texte AS rub_texte,
hc_base::numeric AS base,
0 AS montant_brut,
0 AS montant_frais_imposables,
hc_taux_salarial::numeric AS taux_sal,
(CASE WHEN ru_gain = 1 THEN -1 ELSE 1 END) * hc_montant_salarial::numeric AS montant_sal,
hc_taux_patronal::numeric AS taux_pat,
(CASE WHEN ru_gain = 1 THEN -1 ELSE 1 END) * hc_montant_patronal::numeric AS montant_pat,
0 AS od_net,
0 AS avt_nat,
0 AS net_imposable,
0 AS net_a_payer
FROM prod_sage100.f_hcot
JOIN prod_sage100.f_rub ON f_rub.ru_rubrique = f_hcot.hc_rubrique
JOIN rh.t_rubriques ON t_rubriques.code_original = f_rub.ru_rubrique
WHERE 1=1
AND ru_imprimable = 2
AND (hc_montant_salarial != 0 OR hc_montant_patronal != 0)
AND date_part('year', hc_date::date) >= 2008
--AND sa_matricule = 1117
--AND hc_date >= '2012-01-01'
)
UNION ALL
(
SELECT
sa_matricule AS matricule,
hu_date::date AS date,
base.cti_first_day(hu_date::date) AS date_debut,
base.cti_last_day(hu_date::date) AS date_fin,
to_char(hu_date::date,'YYYYMM')::numeric AS mois,
t_rubriques.oid AS rub_id,
t_rubriques.code_original AS rub_code,
t_rubriques.texte AS rub_texte,
CASE WHEN hu_constante = 86 THEN hu_valeurcumul::numeric ELSE 0 END AS base,
0 AS montant_brut,
0 AS montant_frais_imposables,
0 AS taux_sal,
0 AS montant_sal,
0 AS taux_pat,
0 AS montant_pat,
0 AS od_net,
0 AS avt_nat,
CASE WHEN hu_constante = 4 THEN hu_valeurcumul::numeric ELSE 0 END AS net_imposable,
CASE WHEN hu_constante = 3 THEN hu_valeurcumul::numeric ELSE 0 END AS net_a_payer
FROM prod_sage100.f_hcum
JOIN rh.t_rubriques ON t_rubriques.code_original = 'C' || lpad(hu_constante, 3, '0')
WHERE 1=1
AND hu_constante::int IN (3, 4, 86)
AND date_part('year', hu_date::date) >= 2008
--AND sa_matricule = 1117
--AND hu_date >= '2012-01-01'
)
;
CREATE INDEX i_w_hp_1
ON w_hp
USING btree (matricule)
;
CREATE INDEX i_w_hp_2
ON w_hp
USING btree (date)
;
CREATE INDEX i_w_hp_3
ON w_hp
USING btree (rub_code)
;
TRUNCATE rh.p_historique_paie
;
SELECT base.cti_stash_table_indexes('rh', 'p_historique_paie')
;
INSERT INTO rh.p_historique_paie
(
age_id,
base,
contrat_id,
contrat_mois_id,
date_debut,
date_fin,
date_paie,
mois_activite,
mois_paie,
montant_avantage_nature,
montant_brut,
montant_cotisation_patronale,
montant_cotisation_salarie,
montant_frais_imposables,
montant_net_a_payer_salarie,
montant_net_imposable_salarie,
montant_od_net_salarie,
organisme_cotisation_id,
profil_id,
rubrique_id,
salarie_id,
taux_cotisation_patronale,
taux_cotisation_salarie
)
SELECT
date_part('year', age(date, date_naissance)) AS age_id,
base AS base,
p_contrats_mois.contrat_id AS contrat_id,
p_contrats_mois.oid AS contrat_mois_id,
date_trunc('month', date)::date AS date_debut,
date::date AS date_fin,
date::date AS date_paie,
w_hp.mois AS mois_activite,
w_hp.mois AS mois_paie,
avt_nat AS montant_avantage_nature,
montant_brut AS montant_brut,
montant_pat AS montant_cotisation_patronale,
montant_sal AS montant_cotisation_salarie,
0 AS montant_frais_imposables,
net_a_payer AS montant_net_a_payer_salarie,
net_imposable AS montant_net_imposable_salarie,
od_net AS montant_od_net_salarie,
0 AS organisme_cotisation_id,
w_profils.profil_id AS profil_id,
w_hp.rub_id AS rubrique_id,
p_salaries.oid AS salarie_id,
taux_pat AS taux_cotisation_patronale,
taux_sal AS taux_cotisation_salarie
FROM w_hp
JOIN rh.p_salaries ON p_salaries.matricule = w_hp.matricule
JOIN w_profils ON 1=1
AND w_profils.matricule = w_hp.matricule
AND base.cti_overlaps(aff_date_debut,aff_date_fin,w_hp.date_debut,w_hp.date_fin)
LEFT JOIN rh.p_contrats_mois ON 1=1
AND p_contrats_mois.salarie_id = p_salaries.oid
AND p_contrats_mois.mois_activite = w_hp.mois
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
;
SELECT base.cti_stash_pop_table_indexes('rh', 'p_historique_paie')
;
-- Associer le bulletin de paie au dernier contrat connu lorsque pas de contrat couvrant le mois de paie.
UPDATE rh.p_historique_paie
SET
contrat_id = contrat,
contrat_mois_id = contrat_mois,
profil_id = profil
FROM
(
SELECT
p_historique_paie.salarie_id,
p_historique_paie.date_paie,
(max(ARRAY[EXTRACT(EPOCH FROM p_contrats.date_fin),p_contrats.oid]))[2] AS contrat,
(max(ARRAY[EXTRACT(EPOCH FROM p_contrats.date_fin),p_contrats.profil_id]))[2] AS profil,
(max(ARRAY[EXTRACT(EPOCH FROM p_contrats_mois.date_fin),p_contrats_mois.oid]))[2] AS contrat_mois
FROM rh.p_historique_paie
JOIN rh.p_contrats ON p_contrats.salarie_id = p_historique_paie.salarie_id
JOIN rh.p_contrats_mois ON p_contrats_mois.contrat_id = p_contrats.oid
WHERE p_historique_paie.contrat_mois_id IS NULL
GROUP BY 1,2
) AS subq
WHERE 1=1
AND p_historique_paie.salarie_id = subq.salarie_id
AND p_historique_paie.date_paie = subq.date_paie
;
-- Création d'une table temp qui regroupe tous les totaux à atteindre pour calculer l'écart
DROP TABLE IF EXISTS w_totaux
;
CREATE TEMP TABLE w_totaux AS
SELECT
sa_matricule AS matricule,
hu_date::date AS date,
to_char(hu_date::date,'YYYYMM')::numeric AS mois,
hu_constante as rub_code,
hu_valeurcumul::numeric AS montant
FROM prod_sage100.f_hcum
WHERE 1=1
AND date_part('year', hu_date::date) >= 2008
AND hu_constante::int IN (3,4,5,6,7,8,86)
;
-- Inserer pour chaque bulletin une ligne qui va faire le compte avec le total (rubrique 'C000' nommée 'Ecart cumulé')
INSERT INTO rh.p_historique_paie
(
age_id,
contrat_id,
contrat_mois_id,
date_debut,
date_fin,
date_paie,
mois_activite,
mois_paie,
base,
montant_avantage_nature,
montant_brut,
montant_cotisation_patronale,
montant_cotisation_salarie,
montant_frais_imposables,
montant_net_a_payer_salarie,
montant_net_imposable_salarie,
montant_od_net_salarie,
organisme_cotisation_id,
profil_id,
rubrique_id,
salarie_id,
taux_cotisation_patronale,
taux_cotisation_salarie
)
SELECT
age_id,
contrat_id,
contrat_mois_id,
subq.date_debut,
subq.date_fin,
subq.date_paie,
subq.mois_activite,
subq.mois_paie,
0 AS base,
sum(CASE WHEN rub_code = 5 THEN montant - subq.montant_avantage_nature ELSE 0 END) AS montant_avantage_nature,
sum(CASE WHEN rub_code = 8 THEN montant - subq.montant_brut ELSE 0 END) AS montant_brut,
sum(CASE WHEN rub_code = 6 THEN montant - subq.montant_cotisation_patronale ELSE 0 END) AS montant_cotisation_patronale,
sum(CASE WHEN rub_code = 7 THEN montant - subq.montant_cotisation_salarie ELSE 0 END) AS montant_cotisation_salarie,
0 AS montant_frais_imposables,
sum(CASE WHEN rub_code = 3 THEN montant - subq.montant_net_a_payer_salarie ELSE 0 END) AS montant_net_a_payer_salarie,
sum(CASE WHEN rub_code = 4 THEN montant - subq.montant_net_imposable_salarie ELSE 0 END) AS montant_net_imposable_salarie,
0 AS montant_od_net_salarie,
subq.organisme_cotisation_id AS organisme_cotisation_id,
subq.profil_id AS profil_id,
(SELECT oid FROM rh.t_rubriques WHERE code = 'C000') AS rubrique_id,
subq.salarie_id AS salarie_id,
0 AS taux_cotisation_patronale,
0 AS taux_cotisation_salarie
FROM
(
SELECT
p_historique_paie.age_id,
p_historique_paie.contrat_id,
p_historique_paie.contrat_mois_id,
p_historique_paie.date_debut,
p_historique_paie.date_fin,
p_historique_paie.date_paie,
p_historique_paie.mois_activite,
p_historique_paie.mois_paie,
0 AS base,
sum(montant_avantage_nature) AS montant_avantage_nature,
sum(montant_brut) AS montant_brut,
sum(montant_cotisation_patronale) AS montant_cotisation_patronale,
sum(montant_cotisation_salarie) AS montant_cotisation_salarie,
0 AS montant_frais_imposables,
sum(montant_net_a_payer_salarie) AS montant_net_a_payer_salarie,
sum(montant_net_imposable_salarie) AS montant_net_imposable_salarie,
0 AS montant_od_net_salarie,
p_historique_paie.organisme_cotisation_id,
p_historique_paie.profil_id,
(SELECT oid FROM rh.t_rubriques WHERE code = 'C000'),
p_historique_paie.salarie_id,
0 AS taux_cotisation_patronale,
0 AS taux_cotisation_salarie
FROM rh.p_historique_paie
JOIN rh.p_salaries ON p_salaries.oid = p_historique_paie.salarie_id
GROUP BY 1,2,3,4,5,6,7,8,9, 18,19,20,21
) AS subq
JOIN rh.p_salaries ON p_salaries.oid = subq.salarie_id
JOIN w_totaux ON
w_totaux.matricule = p_salaries.matricule
AND w_totaux.date = subq.date_paie
GROUP BY 1,2,3,4,5,6,7,8,9, 18,19,20,21
HAVING 1!=1
OR sum(CASE WHEN rub_code = 8 THEN montant - subq.montant_brut ELSE 0 END) <> 0
OR sum(CASE WHEN rub_code = 5 THEN montant - subq.montant_avantage_nature ELSE 0 END) <> 0
OR sum(CASE WHEN rub_code = 6 THEN montant - subq.montant_cotisation_patronale ELSE 0 END) <> 0
OR sum(CASE WHEN rub_code = 7 THEN montant - subq.montant_cotisation_salarie ELSE 0 END) <> 0
OR sum(CASE WHEN rub_code = 3 THEN montant - subq.montant_net_a_payer_salarie ELSE 0 END) <> 0
OR sum(CASE WHEN rub_code = 4 THEN montant - subq.montant_net_imposable_salarie ELSE 0 END) <> 0
;
/*
Quels sont les écarts cumulés > 0 ? :
SELECT
p_salaries.matricule,
p_historique_paie.*
FROM rh.p_historique_paie
JOIN rh.p_salaries on p_salaries.oid = p_historique_paie.salarie_id
JOIN rh.t_rubriques on t_rubriques.oid = p_historique_paie.rubrique_id
WHERE 1=1
AND t_rubriques.code_original = 'C000'
AND
(1!=1
OR p_historique_paie.base <> 0
OR p_historique_paie.montant_brut <> 0
OR p_historique_paie.montant_cotisation_salarie <> 0
OR p_historique_paie.montant_cotisation_patronale <> 0
OR p_historique_paie.montant_net_a_payer_salarie <> 0
OR p_historique_paie.montant_net_imposable_salarie <> 0
OR p_historique_paie.montant_avantage_nature <> 0
)
ORDER BY 1,4 DESC
;
*/
]]>
0 -- nb_jours > 0
AND date_part('year', ap_arret_01debut::date) >= '2008'
GROUP BY 1,2,3,4,5,6,7
)
UNION
(
SELECT
sa_matricule AS matricule,
ap_arret_02type AS motif,
to_char(ap_arret_02debut::date,'YYYYMM')::numeric AS mois,
ap_arret_02debut::date AS date_debut,
ap_arret_02fin::date AS date_fin,
ap_arret_02fin::date - ap_arret_02debut::date + 1 AS nb_jours,
'' AS no_contrat
FROM prod_sage100.f_hst_arret
WHERE 1=1
AND ap_arret_02debut IS NOT NULL
AND ap_arret_02fin IS NOT NULL
AND ap_arret_02fin::date - ap_arret_02debut::date + 1 > 0 -- nb_jours > 0
AND date_part('year', ap_arret_02debut::date) >= '2008'
GROUP BY 1,2,3,4,5,6,7
)
UNION
(
SELECT
sa_matricule AS matricule,
ap_arret_03type AS motif,
to_char(ap_arret_03debut::date,'YYYYMM')::numeric AS mois,
ap_arret_03debut::date AS date_debut,
ap_arret_03fin::date AS date_fin,
ap_arret_03fin::date - ap_arret_03debut::date + 1 AS nb_jours,
'' AS no_contrat
FROM prod_sage100.f_hst_arret
WHERE 1=1
AND ap_arret_03debut IS NOT NULL
AND ap_arret_03fin IS NOT NULL
AND ap_arret_03fin::date - ap_arret_03debut::date + 1 > 0 -- nb_jours > 0
AND date_part('year', ap_arret_03debut::date) >= '2008'
GROUP BY 1,2,3,4,5,6,7
)
;
UPDATE w_arr
SET no_contrat = w_cnt.numero_contrat
FROM w_cnt
WHERE 1=1
AND w_arr.matricule = w_cnt.matricule
AND base.cti_overlaps(w_arr.date_debut,w_arr.date_fin,w_cnt.date_debut,w_cnt.date_fin)
;
-- Alimentation des arrêts de travail
TRUNCATE rh.p_arrets_travail
;
ALTER SEQUENCE rh.s_arrets_travail RESTART WITH 1
;
INSERT INTO rh.p_arrets_travail(
salarie_id,
contrat_id,
mois_activite,
date_debut,
date_fin,
date_reprise,
motif_arret_id,
precision_motif_arret_id,
nb_jours
)
SELECT p_salaries.oid,
p_contrats.oid,
w_arr.mois,
w_arr.date_debut,
w_arr.date_fin,
(w_arr.date_fin + INTERVAL '1 day')::date AS date_reprise,
t_motifs_arret.oid AS motif_arret_id,
0 AS precision_motif_arret_id,
w_arr.nb_jours
FROM w_arr
JOIN rh.p_salaries ON p_salaries.matricule = w_arr.matricule
JOIN rh.t_motifs_arret ON t_motifs_arret.code_original = w_arr.motif
JOIN rh.p_contrats ON p_contrats.salarie_id = p_salaries.oid
;
-- Ventilation mensuelle des arrêts de travail
TRUNCATE rh.p_arrets_travail_mois
;
INSERT INTO rh.p_arrets_travail_mois(
arret_travail_id,
salarie_id,
contrat_id,
contrat_mois_id,
mois_activite,
nb_debut_arret,
nb_fin_arret,
nb_reprise_apres_arret,
date_debut,
date_fin,
nb_jours
)
SELECT
p_arrets_travail.oid AS arret_travail_id,
p_arrets_travail.salarie_id AS salarie_id,
p_arrets_travail.contrat_id AS contrat_id,
p_contrats_mois.oid AS contrat_mois_id,
p_contrats_mois.mois_activite,
CASE WHEN p_arrets_travail.date_debut BETWEEN p_contrats_mois.date_debut AND p_contrats_mois.date_fin THEN 1 ELSE 0 END AS nombre_debut_arret,
CASE WHEN p_arrets_travail.date_fin BETWEEN p_contrats_mois.date_debut AND p_contrats_mois.date_fin THEN 1 ELSE 0 END AS nombre_fin_arret,
CASE WHEN p_arrets_travail.date_reprise BETWEEN p_contrats_mois.date_debut AND p_contrats_mois.date_fin THEN 1 ELSE 0 END AS nombre_reprise_apres_arret,
GREATEST(p_contrats_mois.date_debut, p_arrets_travail.date_debut) AS date_debut,
LEAST(p_contrats_mois.date_fin, p_arrets_travail.date_fin) AS date_fin,
LEAST(p_contrats_mois.date_fin, p_arrets_travail.date_fin)::date - GREATEST(p_contrats_mois.date_debut, p_arrets_travail.date_debut)::date + 1 AS nb_jours
FROM rh.p_contrats_mois
JOIN rh.p_arrets_travail ON (p_contrats_mois.contrat_id = p_arrets_travail.contrat_id AND
p_arrets_travail.date_debut <= p_contrats_mois.date_fin AND
p_arrets_travail.date_reprise >= p_contrats_mois.date_debut
)
ORDER BY arret_travail_id, p_contrats_mois.mois_activite
;
]]>
= '2008'
GROUP BY 1,2,3,4,5,6,7,8
;
UPDATE w_for
SET no_contrat = w_cnt.numero_contrat
FROM w_cnt
WHERE 1=1
AND w_for.matricule = w_cnt.matricule
AND base.cti_overlaps(w_for.date_debut, w_for.date_fin, w_cnt.date_debut, w_cnt.date_fin)
;
UPDATE w_for
SET no_contrat = subq.numero_contrat
FROM
(
SELECT
matricule,
(max(ARRAY[extract(EPOCH FROM w_cnt.date_fin), w_cnt.numero_contrat::numeric]))[2] AS numero_contrat
FROM w_cnt
GROUP BY 1
) AS subq
WHERE 1=1
AND w_for.matricule = subq.matricule
AND no_contrat = ''
;
-- Peuplement de rh.p_formations
TRUNCATE rh.p_formations
;
ALTER SEQUENCE rh.s_formations RESTART WITH 1
;
INSERT INTO rh.p_formations
(
salarie_id,
formation_id,
contrat_id,
contrat_mois_id,
formation_date,
mois_activite,
nb_heures,
organisateur
)
SELECT
p_salaries.oid,
t_liste_formations.oid,
p_contrats_mois.contrat_id,
p_contrats_mois.oid,
w_for.date_fin,
w_for.mois_activite,
w_for.nb_heures,
substr(w_for.organisateur, 1, 20)
FROM
w_for
JOIN rh.p_salaries ON p_salaries.matricule = w_for.matricule
JOIN rh.t_liste_formations ON w_for.code = t_liste_formations.code
JOIN rh.p_contrats_mois ON 1=1
AND p_contrats_mois.salarie_id = p_salaries.oid
AND p_contrats_mois.mois_activite = w_for.mois_activite
ORDER BY 1,2,3,4
;
]]>