250 THEN 30 ELSE 0 END END as duree
FROM w_plan_base
JOIN prod_agiletime.SALARIE ON SALARIE.idsalarie = w_plan_base.idsalarie and SALARIE.idetat = 1
JOIN prod_agiletime.SALARIE_CONTRAT ON SALARIE.idsalarie = SALARIE_CONTRAT.idsalarie AND SALARIE_CONTRAT.idetat = 1
JOIN prod_agiletime.CONTRAT ON SALARIE_CONTRAT.idcontrat = CONTRAT.idcontrat AND dt BETWEEN dtdebut AND (CASE WHEN dtfin != '1800-01-01' THEN dtfin ELSE '2099-12-31' END) AND CONTRAT.idetat = 1
LEFT JOIN prod_agiletime.AFFPH on AFFPH.idaffch = w_plan_base.idaffch and AFFPH.idetat = 1
-- cas Keraudren ou les plages sont divisées en deux
AND ((debut_th < fin_th) AND (AFFPH.heuredebut < fin_th AND AFFPH.heurefin > debut_th) OR (debut_th > fin_th) AND (AFFPH.heuredebut > fin_th AND AFFPH.heurefin < debut_th))
LEFT JOIN prod_agiletime.AFFPH_TYPEHEURE ON AFFPH.idaffph = AFFPH_TYPEHEURE.idaffph and AFFPH_TYPEHEURE.idetat = 1
LEFT JOIN (SELECT DISTINCT idph FROM prod_agiletime.ph_ecretage) sub on sub.idph = w_plan_base.idph
WHERE 1=1
-- séparation en deux PPL et REF enlève les abscences on garde donc PPL et il faudra voir à la qualif
AND idplan = 'PPL'
AND (AFFPH_TYPEHEURE.idtypeheure = phidtypeheure OR AFFPH_TYPEHEURE.idtypeheure IS NULL)
;
DELETE from w_plan_rea where doubleaff != -(AFFPHdoubleaff);
-- ajustements des durées avec les pauses
UPDATE w_plan_theo
SET
duree_th = w_plan_theo.duree_th - w_pauses.duree_th,
debut_th = CASE WHEN w_plan_theo.debut_th + w_pauses.duree_th < 1440 THEN w_plan_theo.debut_th + w_pauses.duree_th ELSE w_plan_theo.debut_th END,
fin_th = CASE WHEN w_plan_theo.debut_th + w_pauses.duree_th >= 1440 THEN w_plan_theo.fin_th + w_pauses.duree_th ELSE w_plan_theo.fin_th END
FROM w_plan_theo w_pauses
WHERE 1=1
AND w_pauses.phidtypeheure = ANY(regexp_split_to_array((SELECT valeur FROM rh.t_divers WHERE code = 'AGILETIME_PAUSE'),','))
AND w_plan_theo.idaffch = w_pauses.idaffch
AND w_plan_theo.doubleaff = w_pauses.doubleaff
AND w_plan_theo.phidtypeheure != ALL(regexp_split_to_array((SELECT valeur FROM rh.t_divers WHERE code = 'AGILETIME_PAUSE'),','))
;
UPDATE w_plan_rea
SET
duree = w_plan_rea.duree - w_pauses.duree,
heuredebut = CASE WHEN w_plan_rea.heuredebut + w_pauses.duree < 1440 THEN w_plan_rea.heuredebut + w_pauses.duree ELSE w_plan_rea.heuredebut END,
heurefin = CASE WHEN w_plan_rea.heuredebut + w_pauses.duree >= 1440 THEN w_plan_rea.heurefin + w_pauses.duree ELSE w_plan_rea.heurefin END
FROM w_plan_rea w_pauses
WHERE 1=1
AND w_pauses.phidtypeheure = ANY(regexp_split_to_array((SELECT valeur FROM rh.t_divers WHERE code = 'AGILETIME_PAUSE'),','))
AND w_plan_rea.idaffch = w_pauses.idaffch
AND w_plan_rea.doubleaff = w_pauses.doubleaff
AND w_plan_rea.phidtypeheure != ALL(regexp_split_to_array((SELECT valeur FROM rh.t_divers WHERE code = 'AGILETIME_PAUSE'),','))
;
DELETE FROM w_plan_theo WHERE phidtypeheure = ANY(regexp_split_to_array((SELECT valeur FROM rh.t_divers WHERE code = 'AGILETIME_PAUSE'),','));
DELETE FROM w_plan_rea WHERE phidtypeheure = ANY(regexp_split_to_array((SELECT valeur FROM rh.t_divers WHERE code = 'AGILETIME_PAUSE'),','));
;
--effacement des avenants
DELETE FROM w_plan_rea WHERE phidtypeheure = ANY(regexp_split_to_array((SELECT valeur FROM rh.t_divers WHERE code = 'AGILETIME_TODEL'),','));
;
DELETE FROM w_plan_theo WHERE phidtypeheure = ANY(regexp_split_to_array((SELECT valeur FROM rh.t_divers WHERE code = 'AGILETIME_TODEL'),','));
;
DROP SEQUENCE IF EXISTS w_cptres1_seq
;
CREATE TEMP SEQUENCE w_cptres1_seq
;
DROP TABLE IF EXISTS w_cptres1
;
-- heures travaillees = temps valide
CREATE TEMP TABLE w_cptres1 AS
SELECT
nextval('w_cptres1_seq') as cptres1_id,
matricule,
salarie_id,
numero,
null::bigint AS contrat_id,
null::bigint AS contrat_mois_id,
date(dt) AS date,
date(dt) AS date_orig,
duree/60.0 AS temps_orig,
idcompetence,
iduep,
''::text AS abs_cod,
0::numeric AS temps_du_initial,
0::numeric AS temps_du,
CASE WHEN heurefin >= heuredebut AND (duree < 1440 OR duree is null) THEN heurefin - heuredebut ELSE (1440 - heuredebut) END/60.0 AS temps_valide,
0::numeric AS temps_absence
FROM w_plan_rea
JOIN w_sal_pla ON w_sal_pla.matricule = w_plan_rea.salarie_corr AND etablissement_planning_code = site_code
WHERE 1=1
AND idtypologiech IN (1,4)
AND idtypecomportement = 1
ORDER BY 2,7
;
INSERT INTO w_cptres1
SELECT
nextval('w_cptres1_seq') as cptres1_id,
matricule,
salarie_id,
numero,
null::bigint AS contrat_id,
null::bigint AS contrat_mois_id,
date(dt) + interval '1 day' AS date,
date(dt) AS date_orig,
duree / 60.0 AS temps_orig,
idcompetence,
iduep,
''::text AS abs_cod,
0 AS temps_du_initial,
0 AS temps_du,
heurefin / 60.0 AS temps_valide,
0::numeric AS temps_absence
FROM w_plan_rea
JOIN w_sal_pla ON w_sal_pla.matricule = w_plan_rea.salarie_corr AND etablissement_planning_code = site_code
WHERE 1=1
AND idtypologiech IN (1,4)
AND idtypecomportement = 1
AND (heurefin < heuredebut OR duree > 1440)
ORDER BY 2,7
;
-- heures planifiées = temps du intial
INSERT INTO w_cptres1
SELECT
nextval('w_cptres1_seq') as cptres1_id,
matricule,
salarie_id,
numero,
null::bigint AS contrat_id,
null::bigint AS contrat_mois_id,
date(dt) AS date,
date(dt) AS date_orig,
duree_th / 60.0 AS temps_orig,
idcompetence,
iduep,
''::text AS abs_cod,
CASE WHEN fin_th >= debut_th AND duree_th < 1440 THEN duree_th ELSE (1440 - debut_th) END/60.0 AS temps_du_initial,
0 AS temps_du,
0 AS temps_valide,
0::numeric AS temps_absence
FROM w_plan_theo
JOIN w_sal_pla ON w_sal_pla.matricule = w_plan_theo.salarie_corr AND etablissement_planning_code = site_code
WHERE 1=1
AND idtypologiech IN (1,4)
AND idtypecomportement = 1
ORDER BY 2,7
;
INSERT INTO w_cptres1
SELECT
nextval('w_cptres1_seq') as cptres1_id,
matricule,
salarie_id,
numero,
null::bigint AS contrat_id,
null::bigint AS contrat_mois_id,
date(dt) + interval '1 day' AS date,
date(dt) AS date_orig,
duree_th / 60.0 AS temps_orig,
idcompetence,
iduep,
''::text AS abs_cod,
fin_th / 60.0 AS temps_du_initial,
0 AS temps_du,
0 AS temps_valide,
0::numeric AS temps_absence
FROM w_plan_theo
JOIN w_sal_pla ON w_sal_pla.matricule = w_plan_theo.salarie_corr AND etablissement_planning_code = site_code
WHERE 1=1
AND idtypologiech IN (1,4)
AND idtypecomportement = 1
AND (fin_th < debut_th OR duree_th > 1440)
ORDER BY 2,7
;
-- absences
INSERT INTO w_cptres1
SELECT
nextval('w_cptres1_seq') as cptres1_id,
matricule,
salarie_id,
numero,
null::bigint AS contrat_id,
null::bigint AS contrat_mois_id,
date(dt) AS date,
date(dt) AS date_orig,
duree / 60.0 AS temps_orig,
idcompetence,
iduep,
idch AS abs_cod,
0 AS temps_du_initial,
0 AS temps_du,
0 AS temps_valide,
CASE WHEN heurefin > heuredebut THEN duree
WHEN heurefin < heuredebut THEN (1440 - heuredebut)
WHEN heurefin = heuredebut AND duree != 0 THEN duree
ELSE dureejour END/60.0 AS temps_absence
FROM w_plan_rea
JOIN w_sal_pla ON w_sal_pla.matricule = w_plan_rea.salarie_corr AND etablissement_planning_code = site_code
WHERE 1=1
AND idtypologiech = 2
AND idtypecomportement IN (1,8,9)
ORDER BY 2,7
;
INSERT INTO w_cptres1
SELECT
nextval('w_cptres1_seq') as cptres1_id,
matricule,
salarie_id,
numero,
null::bigint AS contrat_id,
null::bigint AS contrat_mois_id,
date(dt) + interval '1 day' AS date,
date(dt) AS date_orig,
duree_th / 60.0 AS temps_orig,
idcompetence,
iduep,
idch AS abs_cod,
0 AS temps_du_initial,
0 AS temps_du,
0 AS temps_valide,
heurefin/60.0 AS temps_absence
FROM w_plan_rea
JOIN w_sal_pla ON w_sal_pla.matricule = w_plan_rea.salarie_corr AND etablissement_planning_code = site_code
WHERE 1=1
AND idtypologiech = 2
AND idtypecomportement IN (1,8,9)
AND heurefin < heuredebut
ORDER BY 2,7
;
UPDATE w_cptres1
SET date = date_orig
FROM rh.t_divers
WHERE
code = 'VENTIL_JOUR'
AND valeur = 0;
VACUUM ANALYSE w_cptres1
;
-- Association aux contrats et contrat_mois.
-- En général, les heures planning sont effectuées AVANT un contrat/paie à cause du décallage avec la paie :
-- => les heures effectuées en fin de mois sont à associer avec le mois suivant.
with w_asso as (
select
cptres1_id,
(max(array[extract(epoch from p_contrats_mois.date_debut), p_contrats_mois.contrat_id]))[2] as contrat_id,
(max(array[extract(epoch from p_contrats_mois.date_debut), p_contrats_mois.oid]))[2] as contrat_mois_id
from w_cptres1
join rh.p_contrats_mois on 1=1
and p_contrats_mois.salarie_id = w_cptres1.salarie_id
and w_cptres1.date between p_contrats_mois.date_debut and p_contrats_mois.date_fin -- Sélection des contrats pendant heures planning.
WHERE 1=1
OR w_cptres1.contrat_id is null
OR w_cptres1.contrat_mois_id is null
group by 1)
UPDATE w_cptres1 SET
contrat_id = w_asso.contrat_id,
contrat_mois_id = w_asso.contrat_mois_id
FROM w_asso
WHERE w_cptres1.cptres1_id = w_asso.cptres1_id
;
with w_asso as (
select
cptres1_id,
(min(array[extract(epoch from p_contrats_mois.date_debut), p_contrats_mois.contrat_id]))[2] as contrat_id,
(min(array[extract(epoch from p_contrats_mois.date_debut), p_contrats_mois.oid]))[2] as contrat_mois_id
from w_cptres1
join rh.p_contrats_mois on 1=1
and p_contrats_mois.salarie_id = w_cptres1.salarie_id
and p_contrats_mois.date_debut > w_cptres1.date -- Sélection des contrats APRES heures planning.
WHERE 1=1
OR w_cptres1.contrat_id is null
OR w_cptres1.contrat_mois_id is null
group by 1)
UPDATE w_cptres1 SET
contrat_id = w_asso.contrat_id,
contrat_mois_id = w_asso.contrat_mois_id
FROM w_asso
WHERE w_cptres1.cptres1_id = w_asso.cptres1_id
;
with w_asso as (
select
cptres1_id,
(max(array[extract(epoch from p_contrats_mois.date_debut), p_contrats_mois.contrat_id]))[2] as contrat_id,
(max(array[extract(epoch from p_contrats_mois.date_debut), p_contrats_mois.oid]))[2] as contrat_mois_id
from w_cptres1
join rh.p_contrats_mois on 1=1
and p_contrats_mois.salarie_id = w_cptres1.salarie_id
and p_contrats_mois.date_debut < w_cptres1.date -- Sélection des contrats AVANT heures planning.
WHERE 1=1
OR w_cptres1.contrat_id is null
OR w_cptres1.contrat_mois_id is null
group by 1)
UPDATE w_cptres1 SET
contrat_id = w_asso.contrat_id,
contrat_mois_id = w_asso.contrat_mois_id
FROM w_asso
WHERE w_cptres1.cptres1_id = w_asso.cptres1_id
;
-- Création d'index.
CREATE INDEX w_cptres1_i_contrat_id ON w_cptres1 USING btree (contrat_id)
;
CREATE INDEX w_cptres1_i_contrat_mois_id ON w_cptres1 USING btree (contrat_mois_id)
;
CREATE INDEX w_cptres1_i_date ON w_cptres1 USING btree (date)
;
CREATE INDEX w_cptres1_i_salarie_id ON w_cptres1 USING btree (salarie_id)
;
-- Alimentation des tables de paramètres.
INSERT INTO rh.t_divers(
code,
texte,
valeur,
valeur_date,
description)
-- Ajout du paramétrage permettant de choisir le niveau intermédiaire Agiletime
SELECT
'AGILETIME_NIV2',
'Niveau intermédiaire dans Agiletime (0 ou 1).',
'1',
NULL::date,
'(0) Groupe d''UEP (1) Structure'
WHERE (SELECT count(*) FROM rh.t_divers WHERE code = 'AGILETIME_NIV2') = 0
;
-- Màj des Services du Planning. (UEP)
INSERT INTO rh.t_planning_service(code_original, code, texte, texte_court, service_id)
WITH services AS (
SELECT
iduep,
idstructure AS id,
structure_code AS code,
structure_nom as texte
FROM w_structure
JOIN rh.t_divers ON code ='AGILETIME_NIV2' AND valeur = '1'
UNION ALL
SELECT
iduep,
iduepgroupe AS id,
uepgroupe_code::text AS code,
uepgroupe_nom AS texte
FROM w_structure
JOIN rh.t_divers ON code ='AGILETIME_NIV2' AND valeur = '0'
UNION ALL
SELECT
null AS iduep,
0 AS id,
'NR' AS code,
'Non renseigné' as texte
)
SELECT id, code, texte, texte, (select oid from rh.t_classes where code = 'PLANIV2') as classe_id
FROM services
WHERE id IS NOT NULL AND
id NOT IN (SELECT code_original FROM rh.t_planning_service WHERE code_original IS NOT NULL)
AND (iduep IN (SELECT iduep FROM w_cptres1 GROUP BY 1) OR iduep IS NULL)
GROUP BY 1,2,3,4
;
-- Màj des Niveaux du Planning. (UEP)
DROP TABLE IF EXISTS w_niv_uep;
CREATE TEMP TABLE w_niv_uep AS
SELECT
iduep,
site_code||'|'||COALESCE(CASE WHEN COALESCE(valeur::int,0) = 0 THEN uepgroupe_code ELSE structure_code END,'NR') ||'|'||uep_code||CASE WHEN rank() OVER (PARTITION BY uep_code ORDER BY iduep) > 1 THEN '_2' ELSE '' END as code_original,
uep_code,
uep_nom
FROM w_structure
LEFT JOIN rh.t_divers ON code ='AGILETIME_NIV2'
;
INSERT INTO rh.t_planning_niveau(code_original, code, texte, texte_court)
SELECT
code_original,
uep_code,
uep_nom,
substr(uep_nom,1,50)
FROM w_niv_uep
WHERE code_original NOT IN (SELECT code_original FROM rh.t_planning_niveau WHERE code_original IS NOT NULL)
AND iduep IN (SELECT iduep FROM w_cptres1 GROUP BY 1)
;
-- Màj des Qualifications du Planning. (competence)
INSERT INTO rh.t_planning_qualification(code_original, code, texte, texte_court)
SELECT
idcompetence,
idcompetence,
nom,
nom
FROM prod_agiletime.COMPETENCE
WHERE 1=1
AND idcompetence IN (SELECT idcompetence FROM w_cptres1)
AND idcompetence NOT IN (SELECT code_original FROM rh.t_planning_qualification WHERE code_original IS NOT NULL)
;
-- Màj des Types d'absences du Planning. (ch)
INSERT INTO rh.t_planning_type_absence(code_original, code, texte, texte_court)
SELECT
idch,
nomabrege,
nom,
nom
FROM prod_agiletime.CH
WHERE 1=1
AND idch IN (SELECT abs_cod FROM w_cptres1 GROUP BY 1)
AND idch NOT IN (SELECT code_original FROM rh.t_planning_type_absence WHERE code_original IS NOT NULL)
;
-- Création d'une table Entreprise/Etablissement.
DROP TABLE IF EXISTS w_entets
;
CREATE TEMP TABLE w_entets AS
SELECT
ets.oid as etablissement_id,
ent.planning_code||ets.planning_code as entets_code
from rh.t_entreprises as ent
join rh.t_etablissements as ets on ets.entreprise_id = ent.oid
Where 1=1
and ent.oid != 0
and ets.oid != 0
;
DROP TABLE IF EXISTS w_ventil_structure;
CREATE TEMP TABLE w_ventil_structure AS
SELECT
idstructure,
code,
string_to_array(nom,' ') as codes,
string_to_array(code,'_')::int[] as coefs,
array_length(string_to_array(nom,' '),1) as nb_codes,
array_length(string_to_array(code,'_'),1) as nb_coefs,
(select sum(unnest) from (select unnest(string_to_array(code,'_')::int[])) sub) - split_part(code,'_',1)::int as coef_tot
FROM prod_agiletime.STRUCTURE
WHERE code ~ '_'
;
DROP TABLE IF EXISTS w_ventil_services;
CREATE TABLE w_ventil_services AS
SELECT
idstructure,
code_original,
texte,
coefs[nb_coefs] AS coef,
coef_tot
FROM w_ventil_structure
LEFT JOIN rh.t_planning_service ON
CASE WHEN codes[nb_codes] IN (SELECT left(code,4) FROM rh.t_planning_service) THEN left(t_planning_service.code,4) ELSE upper(replace(left(t_planning_service.texte,3),'é','e')) END = codes[nb_codes]
;
INSERT INTO w_ventil_services
SELECT
idstructure,
code_original,
texte,
coefs[nb_coefs-1] AS coef,
coef_tot
FROM w_ventil_structure
LEFT JOIN rh.t_planning_service ON
CASE WHEN codes[nb_codes-1] IN (SELECT left(code,4) FROM rh.t_planning_service) THEN left(t_planning_service.code,4) ELSE upper(replace(left(t_planning_service.texte,3),'é','e')) END = codes[nb_codes-1]
;
INSERT INTO w_ventil_services
SELECT
idstructure,
code_original,
texte,
coefs[nb_coefs-2] AS coef,
coef_tot
FROM w_ventil_structure
LEFT JOIN rh.t_planning_service ON
CASE WHEN codes[nb_codes-2] IN (SELECT left(code,4) FROM rh.t_planning_service) THEN left(t_planning_service.code,4) ELSE upper(replace(left(t_planning_service.texte,3),'é','e')) END = codes[nb_codes-2]
;
INSERT INTO w_ventil_services
SELECT
idstructure,
code_original,
texte,
coefs[nb_coefs-3] AS coef,
coef_tot
FROM w_ventil_structure
LEFT JOIN rh.t_planning_service ON
CASE WHEN codes[nb_codes-3] IN (SELECT left(code,4) FROM rh.t_planning_service) THEN left(t_planning_service.code,4) ELSE upper(replace(left(t_planning_service.texte,3),'é','e')) END = codes[nb_codes-3]
;
INSERT INTO w_ventil_services
SELECT
idstructure,
code_original,
texte,
coefs[nb_coefs-4] AS coef,
coef_tot
FROM w_ventil_structure
LEFT JOIN rh.t_planning_service ON
CASE WHEN codes[nb_codes-4] IN (SELECT left(code,4) FROM rh.t_planning_service) THEN left(t_planning_service.code,4) ELSE upper(replace(left(t_planning_service.texte,3),'é','e')) END = codes[nb_codes-4]
;
-- Alimentation de la table de mouvement.
-- Alimentation de la table de mouvement.
TRUNCATE rh.p_planning_mouvement
;
INSERT INTO rh.p_planning_mouvement(
salarie_id,
contrat_id,
contrat_mois_id,
date,
semaine,
mois,
etablissement_id, -- @todo à renseigner en fonction du paramétrage dans t_divers.
service_id,
qualification_id,
type_absence_id,
niveau_id,
temps_du,
temps_du_initial,
temps_valide,
temps_absence)
SELECT
salarie_id,
contrat_id,
contrat_mois_id,
date,
to_char(date, 'IYYYIW'::text)::numeric AS semaine,
to_char(date, 'YYYYMM'::text)::numeric AS mois,
coalesce(w_entets.etablissement_id, 0) as etablissement_id,
coalesce(t_planning_service.oid, 0) AS service_id,
coalesce(t_planning_qualification.oid, 0) AS qualification_id,
coalesce(t_planning_type_absence.oid, 0) AS type_absence_id,
coalesce(t_planning_niveau.oid, 0) as niveau_id,
temps_valide + temps_absence,
temps_du_initial,
temps_valide,
temps_absence
FROM w_cptres1
LEFT JOIN w_structure ON w_cptres1.iduep = w_structure.iduep
LEFT JOIN w_ventil_services ON w_structure.idstructure = w_ventil_services.idstructure
LEFT JOIN rh.t_planning_service ON t_planning_service.code_original = w_structure.idstructure
LEFT JOIN rh.t_planning_qualification ON t_planning_qualification.code_original = w_cptres1.idcompetence
LEFT JOIN rh.t_planning_type_absence ON t_planning_type_absence.code_original = w_cptres1.abs_cod
LEFT JOIN w_entets ON w_entets.entets_code = 1 -- w_cptres1.entets_code
LEFT JOIN w_niv_uep ON w_cptres1.iduep = w_niv_uep.iduep
LEFT JOIN rh.t_planning_niveau ON t_planning_niveau.code_original = w_niv_uep.code_original
LEFT JOIN rh.t_divers VENTIL_JOUR ON VENTIL_JOUR.code = 'VENTIL_JOUR'
WHERE w_ventil_services.idstructure IS NULL
;
INSERT INTO rh.p_planning_mouvement(
salarie_id,
contrat_id,
contrat_mois_id,
date,
semaine,
mois,
etablissement_id, -- @todo à renseigner en fonction du paramétrage dans t_divers.
service_id,
qualification_id,
type_absence_id,
niveau_id,
temps_du,
temps_du_initial,
temps_valide,
temps_absence)
SELECT
salarie_id,
contrat_id,
contrat_mois_id,
CASE WHEN COALESCE(VENTIL_JOUR.valeur::int,0) = 1 THEN date ELSE date_orig::date END,
to_char(w_cptres1.date, 'IYYYIW'::text)::numeric AS semaine,
to_char(w_cptres1.date, 'YYYYMM'::text)::numeric AS mois,
coalesce(w_entets.etablissement_id, 0) as etablissement_id,
coalesce(t_planning_service.oid, 0) AS service_id,
coalesce(t_planning_qualification.oid, 0) AS qualification_id,
coalesce(t_planning_type_absence.oid, 0) AS type_absence_id,
coalesce(t_planning_niveau.oid, 0) as niveau_id,
(temps_valide + temps_absence)*coef/coef_tot,
temps_du_initial*coef/coef_tot,
temps_valide*coef/coef_tot,
temps_absence*coef/coef_tot
FROM w_cptres1
LEFT JOIN w_structure ON w_cptres1.iduep = w_structure.iduep
LEFT JOIN w_ventil_services ON w_structure.idstructure = w_ventil_services.idstructure
JOIN rh.t_planning_service ON t_planning_service.code_original = w_ventil_services.code_original
LEFT JOIN rh.t_planning_qualification ON t_planning_qualification.code_original = w_cptres1.idcompetence
LEFT JOIN rh.t_planning_type_absence ON t_planning_type_absence.code_original = w_cptres1.abs_cod
LEFT JOIN w_entets ON w_entets.entets_code = 1 -- w_cptres1.entets_code
LEFT JOIN w_niv_uep ON w_cptres1.iduep = w_niv_uep.iduep
LEFT JOIN rh.t_planning_niveau ON t_planning_niveau.code_original = w_niv_uep.code_original
LEFT JOIN rh.t_divers VENTIL_JOUR ON VENTIL_JOUR.code = 'VENTIL_JOUR'
;
VACUUM ANALYSE rh.p_planning_mouvement
;
]]>
1 THEN '_2' ELSE '' END as code_original,
uep_nom as texte,
(select oid from rh.t_classes where code = 'PLANIV3') as classe_id
FROM w_structure
JOIN rh.t_divers ON code ='AGILETIME_NIV2'
;
INSERT INTO rh.t_classes_sections(code, texte, classe_id)
SELECT code, texte, classe_id
from w_clasec_3
where 1=1
and classe_id = (select oid from rh.t_classes where code = 'PLANIV3')
and code not in (select code from rh.t_classes_sections where t_classes_sections.classe_id = w_clasec_3.classe_id and code is not null)
group by 1,2,3
;
update rh.t_classes_sections set
texte = w_clasec_3.texte
FROM w_clasec_3
WHERE true
and w_clasec_3.classe_id = t_classes_sections.classe_id
and w_clasec_3.code = t_classes_sections.code
and w_clasec_3.texte is distinct from t_classes_sections.texte
;
-- Mise à jour du contenu des sections Niveau 3.
INSERT INTO rh.t_classes_sections_elements (section_id, to_id)
SELECT
t_classes_sections.oid AS section_id,
t_planning_niveau.oid AS to_id
FROM rh.t_classes
join rh.t_classes_sections on t_classes_sections.classe_id = t_classes.oid
join w_clasec_3 on true
and w_clasec_3.classe_id = t_classes.oid
and w_clasec_3.code = t_classes_sections.code
join rh.t_planning_niveau on split_part(t_planning_niveau.code_original, '|', 1)||'|'||split_part(t_planning_niveau.code_original, '|', 2)||'|'||split_part(t_planning_niveau.code_original, '|', 3) = w_clasec_3.code_original
WHERE t_classes.code = 'PLANIV3'
group by 1,2
;
SELECT rh.cti_update_schema_classes('*ALL')
;
-- Recensement des oid utilisés.
INSERT INTO rh.p_oids (code_table, oid)
SELECT 'planning_service', service_id
FROM rh.p_planning_mouvement
WHERE service_id NOT IN (SELECT oid FROM rh.p_oids WHERE code_table = 'planning_service')
GROUP BY 1,2
;
INSERT INTO rh.p_oids (code_table, oid)
SELECT 'planning_qualification', qualification_id
FROM rh.p_planning_mouvement
WHERE qualification_id NOT IN (SELECT oid FROM rh.p_oids WHERE code_table = 'planning_qualification')
GROUP BY 1,2
;
INSERT INTO rh.p_oids (code_table, oid)
SELECT 'planning_niveau', niveau_id
FROM rh.p_planning_mouvement
WHERE niveau_id NOT IN (SELECT oid FROM rh.p_oids WHERE code_table = 'planning_niveau')
GROUP BY 1,2
;
INSERT INTO rh.p_oids (code_table, oid)
SELECT 'planning_type_absence', type_absence_id
FROM rh.p_planning_mouvement
WHERE type_absence_id NOT IN (SELECT oid FROM rh.p_oids WHERE code_table = 'planning_type_absence')
GROUP BY 1,2
;
]]>