0
GROUP BY 1,2,3
;
INSERT INTO rh.t_classes_sections(code, texte, classe_id)
SELECT code, texte, classe_id
from w_clasec_1
where 1=1
and classe_id = (select oid from rh.t_classes where code = 'PLANIV1')
and code not in (select code from rh.t_classes_sections where t_classes_sections.classe_id = w_clasec_1.classe_id and code is not null)
group by 1,2,3
;
update rh.t_classes_sections set
texte = w_clasec_1.texte
FROM w_clasec_1
WHERE true
and w_clasec_1.classe_id = t_classes_sections.classe_id
and w_clasec_1.code = t_classes_sections.code
and w_clasec_1.texte is distinct from t_classes_sections.texte
;
-- Mise à jour du contenu des sections Niveau 1.
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 rh.t_planning_niveau on split_part(t_planning_niveau.code, '|', 1) = t_classes_sections.code
WHERE t_classes.code = 'PLANIV1'
group by 1,2
;
-- Mise à jour des sections Niveau 2.
DROP TABLE IF EXISTS w_clasec_2
;
CREATE TEMP TABLE w_clasec_2 AS
with nb_niv as (
select
split_part(code, '|', 2) as niv_cod2,
count(DISTINCT trim(split_part(texte, '-|-', 2))) as niv_count
from rh.t_planning_niveau
group by 1
)
SELECT
case when niv_count = 1 then split_part(code, '|', 2) else split_part(code, '|', 1) || '|' || split_part(code, '|', 2) end as code,
split_part(code, '|', 1) || '|' || split_part(code, '|', 2) as code_original,
trim(split_part(texte, '-|-', 2)) as texte,
(select oid from rh.t_classes where code = 'PLANIV2') as classe_id
from rh.t_planning_niveau as niveau2
JOIN nb_niv ON nb_niv.niv_cod2 = split_part(code, '|', 2)
WHERE oid > 0
group by 1,2,3
;
INSERT INTO rh.t_classes_sections(code, texte, classe_id)
SELECT code, texte, classe_id
from w_clasec_2
where 1=1
and classe_id = (select oid from rh.t_classes where code = 'PLANIV2')
and code not in (select code from rh.t_classes_sections where t_classes_sections.classe_id = w_clasec_2.classe_id and code is not null)
group by 1,2,3
;
update rh.t_classes_sections set
texte = w_clasec_2.texte
FROM w_clasec_2
WHERE true
and w_clasec_2.classe_id = t_classes_sections.classe_id
and w_clasec_2.code = t_classes_sections.code
and w_clasec_2.texte is distinct from t_classes_sections.texte
;
-- Mise à jour du contenu des sections Niveau 2.
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_2 on true
and w_clasec_2.classe_id = t_classes.oid
and w_clasec_2.code = t_classes_sections.code
join rh.t_planning_niveau on split_part(t_planning_niveau.code, '|', 1)||'|'||split_part(t_planning_niveau.code, '|', 2) = w_clasec_2.code_original
WHERE t_classes.code = 'PLANIV2'
group by 1,2
;
-- Mise à jour des sections Niveau 3.
DROP TABLE IF EXISTS w_clasec_3
;
CREATE TEMP TABLE w_clasec_3 AS
with nb_niv as (
select
split_part(code, '|', 3) as niv_cod3,
count(DISTINCT trim(split_part(texte, '-|-', 3))) as niv_count
from rh.t_planning_niveau
group by 1
)
SELECT
case when niv_count = 1 then split_part(code, '|', 3) else split_part(code, '|', 1) || '|' || split_part(code, '|', 2) || '|' || split_part(code, '|', 3) end as code,
split_part(code, '|', 1) || '|' || split_part(code, '|', 2) || '|' || split_part(code, '|', 3) as code_original,
trim(split_part(texte, '-|-', 3)) as texte,
(select oid from rh.t_classes where code = 'PLANIV3') as classe_id
from rh.t_planning_niveau as niveau3
JOIN nb_niv ON nb_niv.niv_cod3 = split_part(code, '|', 3)
WHERE oid > 0
group by 1,2,3
;
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 t_planning_niveau.code = 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
;
INSERT INTO rh.p_oids (code_table, oid)
SELECT 'planning_code_horaire', code_horaire_id
FROM rh.p_planning_mouvement
WHERE code_horaire_id NOT IN (SELECT oid FROM rh.p_oids WHERE code_table = 'planning_code_horaire')
GROUP BY 1,2
;
-- Pour remonter le type de contrat intérim.
INSERT INTO rh.p_oids (code_table, oid)
SELECT 'types_contrat', type_contrat_id
FROM rh.p_profils
WHERE type_contrat_id NOT IN (SELECT oid FROM rh.p_oids WHERE code_table = 'types_contrat')
GROUP BY 1,2
;
-- Populations : pas encore de règle de population basée sur le Planning.
-- SELECT rh.cti_reorganize_population()
-- ;
-- Poles
SELECT rh.cti_reorganize_pole()
;
-- Options Divers
INSERT INTO rh.t_divers(
code,
texte,
valeur,
valeur_date,
description)
SELECT
'PLANNING_BASE_ETP'::text,
'Base pour calcul ETP Planning'::text,
'0'::text,
NULL,
'0 : La base des ETP est 151,67h / mois, 1 : La base des ETP est nb jours ouvrés période * 7h13, 2 : La base des ETP est nb jours semaine période * 7'::text
WHERE 'PLANNING_BASE_ETP' NOT IN (SELECT code FROM rh.t_divers)
;
]]>