You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

49 lines
2.0 KiB

return: text
lang: plpgsql
src: |
DECLARE
result TEXT;
BEGIN
with eff_perm_0 as (
select
p_contrats_mois.oid,
p_contrats_mois.salarie_id,
p_contrats_mois.mois_activite,
sum(case when bool_and(p_profils.type_contrat_section_code[9] = 'CDI' and p_profils.type_temps_travail_section_code[9] = 'TC')
then
case when to_char(p_contrats_mois.date_fin, 'YYYYMM') != p_contrats_mois.mois_activite then base.cti_last_day((p_contrats_mois.mois_activite||'01')::date) else p_contrats_mois.date_fin end
- case when to_char(p_contrats_mois.date_debut, 'YYYYMM') != p_contrats_mois.mois_activite then base.cti_first_day((p_contrats_mois.mois_activite||'01')::date) else p_contrats_mois.date_debut end
+ 1
else 0 end
)
over (partition by p_contrats_mois.salarie_id, substr(p_contrats_mois.mois_activite, 1, 4) order by p_contrats_mois.date_debut) as duree
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
group by 1,2,3, p_contrats_mois.date_debut, p_contrats_mois.date_fin, p_contrats_mois.mois_activite
window w as (partition by p_contrats_mois.salarie_id, p_contrats_mois.mois_activite))
, eff_perm_1 as (
select
array_agg(oid) as arr_oid,
salarie_id,
mois_activite,
case when sum(base.cti_last_day((mois_activite||'01')::date) - base.cti_first_day((substr(mois_activite, 1, 4)||'0101')::date)) + 1 = duree
then 1 else 0 end as effectif_permanent
from eff_perm_0
GROUP BY salarie_id, mois_activite, duree
)
, eff_perm as (
select
unnest(arr_oid) as oid,
effectif_permanent
from eff_perm_1
)
update rh.p_contrats_mois set
effectif_permanent = eff_perm.effectif_permanent
from eff_perm
where true
and p_contrats_mois.oid = eff_perm.oid
and p_contrats_mois.effectif_permanent is distinct from eff_perm.effectif_permanent
;
return 'OK';
END;