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
;
]]>